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
Unified Diff Ignore Whitespace Patch
Changes to jni/curl/CHANGES.
1
2
3
4
5
6
7


























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































8
9
10
11
12
13
14
                                  _   _ ____  _
                              ___| | | |  _ \| |
                             / __| | | | |_) | |
                            | (__| |_| |  _ <| |___
                             \___|\___/|_| \_\_____|

                                  Changelog



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































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"







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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







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






































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































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
typedef void (*func_type)();

int main()
{
#ifndef inet_ntoa_r
  func_type func;
  func = (func_type)inet_ntoa_r;

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

#endif
  return 0;
}
#endif
#ifdef HAVE_GETADDRINFO
#include <netdb.h>
#include <sys/types.h>







>















>







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
  return arg1 + arg2;
}

int
main() {
  int res3 = c99_vmacro3(1, 2, 3);
  int res2 = c99_vmacro2(1, 2);


  return 0;
}
#endif
#ifdef HAVE_VARIADIC_MACROS_GCC
#define gcc_vmacro3(first, args...) fun3(first, args)
#define gcc_vmacro2(first, args...) fun2(first, args)








>
>







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
  return arg1 + arg2;
}

int
main() {
  int res3 = gcc_vmacro3(1, 2, 3);
  int res2 = gcc_vmacro2(1, 2);


  return 0;
}
#endif







>
>



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



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







>
>







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
  struct timeval ts;
  ts.tv_sec  = 0;
  ts.tv_usec = 0;
  (void)ts;
  return 0;
}" HAVE_STRUCT_TIMEVAL)







































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)







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
258
259
260
261
262
263
264



































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




































Changes to jni/curl/CMakeLists.txt.
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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 "-")







<







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



# 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
      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>)
  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()








<
|
<
<
<







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

  set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DEBUGBUILD>)



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








<







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)


# 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
  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)
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)
  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_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)




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







|









|






|



















>
>
>
>











|







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


      if(NOT_NEED_LBER_H)
        set(NEED_LBER_H OFF)
      else()
        set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -DNEED_LBER_H")
      endif()
    endif()







>







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

  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)







>







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

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


    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}")







>







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







>
>







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
  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("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))
  _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







|
<
<
<

















|







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("SSL"           SSL_ENABLED)



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

list(SORT _items)

string(REPLACE ";" " " SUPPORT_PROTOCOLS "${_items}")
message(STATUS "Enabled protocols: ${SUPPORT_PROTOCOLS}")













# 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}")







>
|
>



>
>
>
>
>
>
>
>
>
>
>
>







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

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

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.







|


|
















|



|







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

  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)







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.







>
>
>
>
>
>





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
curl and libcurl 7.64.1

 Public curl releases:         180
 Command line options:         221
 curl_easy_setopt() options:   267
 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]


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 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 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 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 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 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 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 memdebug: log pointer before freeing its data [91]
 o memdebug: make debug-specific functions use curl_dbg_ prefix [82]
 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 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 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 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 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]

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

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

|

|

|





|
|
>



|
>
>
|
|
<
<
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
>
|
<
|
|
|
|
|
|
>
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
<
<
<
<
<
|
<
<
<
<
|
|
>
|
>
>
>
|
|
>
>
>
>
>
|
|
|
|
|
<
|
<
>
|
>
|
>
>
>
|
>
>
>
|
<
<
<
<
<
<
|
|
<
|
|
|
>
|
>
>
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|








<
<
|
|
|
>
|
|
|
|
<
>
|
>
|
|





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

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

This release includes the following changes:

 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 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 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 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 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 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: remove unused variables [88]




 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 ntlm: Fix misaligned function comments for Curl_auth_ntlm_cleanup [70]

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



  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,

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








Changes to jni/curl/configure.
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 -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







|







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

    check_for_ca_bundle=1
  fi

  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
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"







>
>
>
>
>
>
>
>
>
>







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
  withval=$with_fish_functions_dir; OPT_FISH_FPATH=$withval
fi

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

































































































































        FISH_FUNCTIONS_DIR="$datarootdir/fish/completions"


    ;;
  *)
        FISH_FUNCTIONS_DIR="$withval"

    ;;
esac







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>







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/vendor_completions.d"
    fi

    ;;
  *)
        FISH_FUNCTIONS_DIR="$withval"

    ;;
esac
33725
33726
33727
33728
33729
33730
33731


































































































































































































































































































33732
33733
33734
33735
33736
33737
33738
    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_getifaddrs="unknown"
  tst_proto_getifaddrs="unknown"
  tst_compi_getifaddrs="unknown"
  tst_works_getifaddrs="unknown"
  tst_allow_getifaddrs="unknown"







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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







|







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 -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
    fi
    CURL_CHECK_OPENSSL_API
    check_for_ca_bundle=1
  fi

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









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

if test X"$OPENSSL_ENABLED" = X"1"; then
  AC_ARG_WITH(egd-socket,







>
>
>
>
>
>
>
>







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




    FISH_FUNCTIONS_DIR="$datarootdir/fish/completions"

    AC_SUBST(FISH_FUNCTIONS_DIR)
    ;;
  *)
    dnl --with-fish-functions-dir option used with path
    FISH_FUNCTIONS_DIR="$withval"
    AC_SUBST(FISH_FUNCTIONS_DIR)
    ;;







>
>
>
>
|
>







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







>
>







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

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


  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







>
|
>
>
>
|
|
>







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:

        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

`ecdhe_rsa_chacha20_poly1305_sha_256`
`ecdhe_ecdsa_chacha20_poly1305_sha_256`
`dhe_rsa_chacha20_poly1305_sha_256`

## GSKit


Ciphers are internally defined as 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`







>
|







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

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)




`CALG_MD2`,
`CALG_MD4`,
`CALG_MD5`,
`CALG_SHA`,
`CALG_SHA1`,
`CALG_MAC`,







|

|
>
>
>







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

## Schannel

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

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











|
|







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.

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

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







|







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.

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








<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







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

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







|







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

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.







|
|
|







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








|







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

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







|
|







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.

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








|
|
|










|



|
|







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

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

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

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.








|
|




|














|
|
|
|
|
|













|







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

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

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

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







|







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

    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







|
|







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.

    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

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
line.  Following is a list of appropriate key words:

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

# PORTS







|







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
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
   - [`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)
 - [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)
 - [Track Down Memory Leaks](#memoryleak)
 - [`multi_socket`](#multi_socket)
 - [Structs in libcurl](#structs)








<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







|




















|



>
>
>
>
>
>
>







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)
 - [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)
 - [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
 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
 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):








|







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

 - 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]")
 - 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().

 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.








|













|







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]`)
 - 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()`.

 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

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

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

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

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

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

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







|






|


















|
|







|
|
|





|








|
|



|

|
|













|

|







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.

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

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

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

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

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

 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.








|
|

|
|
>







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.

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

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

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

 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.

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

 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.

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

 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.


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

 URL encoding and decoding, called escaping and unescaping in the source code,
 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).


 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.

 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.

 A function named `curl_version()` that returns the full curl version string
 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).

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







|



|
|





|







|





|





|





|





|
>






|

|
|
>

|

|
|
|

|

|
|


|













|







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

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

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

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

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

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

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

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

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

 URL encoding and decoding, called escaping and unescaping in the source code,
 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).

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

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

 A function named `curl_version()` that returns the full curl version string
 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).

 - 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

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

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







|


|


















|







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

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

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

 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.


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

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







|

|
|
|
|

|




|
|










|
|
|
|
|
|

|
|



|
|
|
>

|
|
|
>

|


|










|
|
|

|
|







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

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

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

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

 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
### 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:
 `#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.)

<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
 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_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().

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







|








|
|







|












|






|
|







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:
 `#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.)

<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 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_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()`.

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

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


## Supported content encodings

 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.

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

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

 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.

## The curl interface

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

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

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

 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

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

  This will create a library that has memory debugging enabled.

## Modify Your Application

  Add a line in your application code:








|
|
|
|


|
|




|
|
>



|

|
|







|


|
|
|
|

|
|
|




|



|



|
|

|
|



|






|












|

|

|
|
|
|
|
|
|

|
|











<


|
|

|
|







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

## Supported content encodings

 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.

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

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

 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.

## The curl interface

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

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

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

 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

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

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

    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:

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

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

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


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

  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.

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


## 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
  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
  connection or the `Curl_easy`.

  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
  points to the connectdata.


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







|















|

|
|
|
>

|
|
|
|
|

|
|
|

|
|
|
|
|
|
|
|
|
|

|
|
|
|

|
|
|
|
|
|
|








>



|



|





|


|
|
|
|
|

|




|






>







|




|
|


|














|


>





|







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:

    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:

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

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

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

  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.

  `->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
  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
  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
  connection or the `Curl_easy`.

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

  The libcurl source code generally use the name 'multi' for the variable that
  points to the `Curl_multi` struct.


## 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
  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
  selected/created. Most protocols will allocate its private
  '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.








|

|


>





|
|











|

|







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.

  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
  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
  selected/created. Most protocols will allocate its private
  `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

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

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

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


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


## Curl_share

  The libcurl share API allocates a `Curl_share` struct, exposed to the
  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.


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







|
|
|
|



|

|


|

|



|














|







>






>



|












>



|







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

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

  `->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
  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_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 *`.

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







>







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







<







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.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
 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
 ultimately a broken server.

 See https://github.com/curl/curl/issues/2719











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.







|



>
>
>
>
>
>
>
>
>
>







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







<
<
<
<
<
<







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

CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) $(MANDISTPAGES) curl.1

EXTRA_DIST =                                    \
 $(noinst_man_MANS)                             \
 ALTSVC.md                                      \
 BINDINGS.md                                    \

 BUGS                                           \
 CHECKSRC.md                                    \
 CIPHERS.md                                     \
 CMakeLists.txt                                 \
 CODE_OF_CONDUCT.md                             \
 CODE_STYLE.md                                  \
 CONTRIBUTE.md                                  \







>







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
SUBDIRS = . cmdline-opts
DIST_SUBDIRS = $(SUBDIRS) examples libcurl
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) $(MANDISTPAGES) curl.1
EXTRA_DIST = \
 $(noinst_man_MANS)                             \
 ALTSVC.md                                      \
 BINDINGS.md                                    \

 BUGS                                           \
 CHECKSRC.md                                    \
 CIPHERS.md                                     \
 CMakeLists.txt                                 \
 CODE_OF_CONDUCT.md                             \
 CODE_STYLE.md                                  \
 CONTRIBUTE.md                                  \







>







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

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







|







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









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















<




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


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

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

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

- 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



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












|
|
<










|
|


|
|
|





|
|














|
|
|







>
>
>

|
|
|
|
<







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.


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

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


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




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.







>
>
>







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

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.

Then, if the issue is [critical](https://hackerone.com/ibb-data), you are
eligible to apply for a bounty from Hackerone for your find.

Once your reported vulnerability has been publicly disclosed by the curl
project, you can submit a [report to them](https://hackerone.com/ibb-data).







|
|

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

Bug Bounty
----------




See [BUG-BOUNTY](https://curl.haxx.se/docs/bugbounty.html) for details on the


bug bounty program.


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

  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
  support the legacy handshakes and algorithms used by those versions, so we
  advice against building curl to use WinSSL on really old Windows versions.

  References:

  https://tools.ietf.org/html/draft-popov-tls-prohibiting-rc4-01

## Allow BEAST








|

|







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.

  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 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
  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
  backends in the future.

  References:

  https://curl.haxx.se/docs/ssl-compared.html







|
|
|





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 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
Edward Rudd
Edward Sheldrake
Edward Thomson
Eelco Dolstra
Eetu Ojanen
Egon Eckert
Eldar Zaitov

Elia Tufarolo
Elliot Saba
Ellis Pritchard
Elmira A Semenova
Emanuele Bovisio
Emil Lerner
Emil Romanus







>







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
Grigory Entin
Guenole Bescon
Guido Berhoerster
Guillaume Arluison
Gunter Knauf
Gustaf Hui
Gustavo Grieco

GwanYeong Kim
Gwenole Beauchesne
Gökhan Şengün
Götz Babin-Ebell
Hagai Auro
Haibo Huang
Hamish Mackenzie







>







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
Inca R
Ingmar Runge
Ingo Ralf Blum
Ingo Wilken
Irfan Adilovic
Irving Wolfe
Isaac Boukris

Ishan SinghLevett
Ithubg on github
Ivan Avdeev
Ivo Bellin Salarin
Jack Zhang
Jackarain on github
Jacky Lam







>







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
Jonas Forsman
Jonas Minnberg
Jonas Schnelli
Jonatan Lander
Jonatan Vela
Jonathan Cardoso Machado
Jonathan Hseu

Jonathan Nieder
Jongki Suwandi

Joonas Kuorilehto
Jose Alf
Jose Kahan
Josef Wolf
Josh Bialkowski
Josh Kapell
Joshua Kwan







>


>







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
Konstantin Kushnir
Kris Kennaway
Krishnendu Majumdar
Krister Johansen
Kristian Gunstone
Kristian Köhntopp
Kristiyan Tsaklev

Kurt Fankhauser
Kyle J. McKay
Kyle L. Huff
Kyle Sallee
Kyselgov E.N
Lachlan O'Dea
Ladar Levison







>







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
Maxim Perenesenko
Maxim Prohorov
Maxime Larocque
Maxime Legros
Mehmet Bozkurt
Mekonikum
Melissa Mears

Mettgut Jamalla
Michael Anti
Michael Benedict
Michael Calmer
Michael Cronenworth
Michael Curtis
Michael Day







>







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
Octavio Schroeder
Ofer
Okhin Vasilij
Ola Mork
Olaf Flebbe
Olaf Stüben
Oleg Pudeyev

Oli Kingshott
Oliver Gondža
Oliver Graute
Oliver Kuckertz
Oliver Schindler
Olivier Berger
Olivier Brunel

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 Piacentini
Paras Sethia
Pascal Gaudette
Pascal Terjan
Pasha Kuznetsov
Pasi Karkkainen
Pat Ray







>







>











>







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
Philippe Vaucher
Pierre
Pierre Brico
Pierre Chapuis
Pierre Joye
Pierre Ynard
Piotr Dobrogost

Pooyan McSporran

Pramod Sharma
Prash Dush
Praveen Pvs
Priyanka Shah
Przemysław Tomaszewski
Puneet Pawaia
Quagmire







>

>







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
Randy McMurchy
Raphael Gozzo
Ravi Pratap
Ray Dassen
Ray Pekowski
Ray Satiro
Razvan Cojocaru

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

Rich Burridge
Rich Gray
Rich Rauenzahn
Rich Turner
Richard Adams
Richard Alcock
Richard Archer







>
















>







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
Richard van den Berg
Richy Kim
Rick Deist
Rick Jones
Rick Richardson
Rick Welykochy
Ricki Hirner

Ricky-Tigg on github
Rider Linden
Rikard Falkeborn
Rob Cotrone
Rob Crittenden
Rob Davies
Rob Jones







>







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
Roman Mamedov
Romulo A. Ceccon
Ron Eldor
Ron Parker
Ron Zapp
Ronnie Mose
Rosimildo da Silva

Roy Shan
Rune Kleveland
Ruslan Baratov
Ruslan Gazizov
Rutger Hofman
Ruurd Beerstra
Ryan Braud







>







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
Symeon Paraschoudis
Sébastien Willemijns
T. Bharath
T. Yamada
TJ Saunders
Tae Hyoung Ahn
Tae Wong

Taneli Vähäkangas
Tanguy Fautre
Tatsuhiro Tsujikawa
Teemu Yli-Elsila
Temprimus
Terri Oda
Terry Wu







>







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
Toshio Kuratomi
Toshiyuki Maezawa
Traian Nicolescu
Travis Burtrum
Travis Obenhaus
Troels Walsted Hansen
Troy Engel

Tuomo Rinne
Tupone Alfredo
Tyler Hall
Török Edwin
Ulf Härnhammar
Ulf Samuelsson
Ulrich Doehner







>







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
Vsevolod Novikov
W. Mark Kubacki
Waldek Kozba
Walter J. Mack
Ward Willats
Warren Menzer
Wayne Haigh

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

Yaakov Selkowitz
Yang Tse
Yarram Sunil
Yasuharu Yamada
Yasuhiro Matsumoto
Yehezkel Horowitz
Yehoshua Hershberg







>


















>







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
arainchik on github
asavah on github
baumanj on github
bobmitchell1956 on github
bsammon on github
buzo-ffm on github
cbartl on github

clbr on github
cmfrolick on github
d912e3 on github
daboul on github
dasimx on github
destman on github
dkjjr89 on github







>







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
jnbr on github
jonrumsey on github
joshhe on github
jungle-boogie on github
jveazey on github
ka7 on github
kreshano on github

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

nianxuejie on github

nk
nopjmp on github
olesteban on github
omau on github
ovidiu-benea on github
patelvivekv1993 on github
pszemus on github







>











>

>







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







<







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







<







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

 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.



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.








>
>







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








<
<
<
<
<
<
<
<
<
<







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







|







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

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







<
<
<
<
<
<
<







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












|




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.

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

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:








|
|
|
|
|
|







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 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
.\" * furnished to do so, under the 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"

.SH NAME
curl-config \- Get information about a libcurl installation
.SH SYNOPSIS
.B curl-config [options]
.SH DESCRIPTION
.B curl-config







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * 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"

.SH NAME
curl \- transfer a URL
.SH SYNOPSIS
.B curl [options / URLs]
.SH DESCRIPTION
.B curl







|







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







|







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.

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

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:








|
|
|
|
|
|







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







|



















<



<







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

    }
    if(itmp->crl) {
      X509_STORE_add_crl(cts, itmp->crl);

    }
  }

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

    fclose(outfile);
    /* always cleanup */
    curl_easy_cleanup(curl);
  }

  return NULL;







<
















|







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;

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

    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


  /* 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);
    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",







|







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));
  {
    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

/* 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;







<







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;


  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


/* 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;


  return realsize;
}


/* CURLOPT_PROGRESSFUNCTION */
static int prog_cb(void *p, double dltotal, double dlnow, double ult _Unused,







|
>







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

  /* 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;
      }







<
<
<







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_) {



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







<







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;

  (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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2016, 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  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);








<







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

    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

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







<







407
408
409
410
411
412
413

414
415
416
417
418
419
420

  return socket;
}

int main(int argc, char **argv)
{
  GlobalInfo *g;

  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


/* 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;


  return realsize;
}


/* CURLOPT_PROGRESSFUNCTION */
static int prog_cb(void *p, double dltotal, double dlnow, double ult _Unused,







|
>







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;
  (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
   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]);
    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);
    fprintf(stderr, "Thread %d terminated\n", i);
  }

  return 0;
}







<





|
|
|
|








|





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;


  /* Must initialize libcurl before any threads are started */
  curl_global_init(CURL_GLOBAL_ALL);

  for(i = 0; i< NUMT; 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++) {
    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
    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);

    /* always cleanup */
    curl_easy_cleanup(curl);
  }
  return 0;
}







<













|






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;


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

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







<







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;

  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
      /* 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);

      fclose(outfile);
      printf("fclose\n");

      curl_easy_cleanup(curl);
    }
    g_free(http);







|







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

      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
  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);
    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);
    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")));







<



|
|
|
|








|







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;


  /* Make sure I don't create more threads than urls. */
  for(i = 0; i < NUMT && i < num_urls ; i++) {
    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++) {
    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
  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++) {

    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);
    fprintf(stderr, "Thread %d terminated\n", i);
  }

  kill_locks();

  curl_share_cleanup(share);
  curl_global_cleanup();
  return 0;
}







<














>












|









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;

  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++) {
    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
  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]);
    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);
    fprintf(stderr, "Thread %d terminated\n", i);
  }

  kill_locks();

  return 0;
}







<









|
|
|
|








|







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;

  (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++) {
    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++) {
    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
.\" * furnished to do so, under the 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"

.SH NAME
curl_easy_cleanup - End a libcurl easy handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "void curl_easy_cleanup(CURL *" handle ");"







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * 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"

.SH NAME
curl_easy_duphandle - Clone a libcurl session handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "CURL *curl_easy_duphandle(CURL *"handle ");"







|







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.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
.\" * furnished to do so, under the 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"

.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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 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.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_getinfo 3 "May 17, 2018" "libcurl 7.64.1" "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, ... );"







|














|







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 - 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 "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
    |--|--|--APPCONNECT
    |--|--|--|--PRETRANSFER
    |--|--|--|--|--STARTTRANSFER
    |--|--|--|--|--|--TOTAL
    |--|--|--|--|--|--REDIRECT
.fi
.IP NAMELOOKUP
\fICURLINFO_NAMELOOKUP_TIME\fP and \fIfICURLINFO_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.







|







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 \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
.\" * 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"

.SH NAME
curl_easy_init - Start a libcurl easy session
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "CURL *curl_easy_init( );"







|







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.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
.\" * 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"

.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 " );"







|







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.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
.\" * 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"

.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 ");"







|







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.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
.\" * furnished to do so, under the 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"

.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 ","







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * 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"

.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 ");"







|







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.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
.\" * furnished to do so, under the 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"

.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 ","







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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 "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
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_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







>
>







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
.\" * 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"

.SH NAME
curl_easy_strerror - return string describing error code
.SH SYNOPSIS
#include <curl/curl.h>

const char *curl_easy_strerror(CURLcode errornum);







|







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.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
.\" * furnished to do so, under the 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"

.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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * 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"

.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 " );"







|







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.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
.\" * 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"

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







|







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.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
.\" * 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"

.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);







|







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.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
.\" * 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"

.SH NAME
curl_formget - serialize a previously built multipart/formdata HTTP POST chain
.SH SYNOPSIS
.nf
.B #include <curl/curl.h>








|







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.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
.\" * 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"

.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 " );"







|







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.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
.\" * 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"

.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 " );"







|







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.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
.\" * 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"

.SH NAME
curl_getenv - return value for environment name
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_getenv(const char *" name ");"







|







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.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
.\" * 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"

.SH NAME
curl_global_cleanup - global libcurl cleanup
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_global_cleanup(void);"







|







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.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
.\" * 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"

.SH NAME
curl_global_init - Global libcurl initialisation
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_global_init(long " flags ");"







|







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.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
.\" * 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"

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







|







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.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
.\" * 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"

.SH NAME
curl_global_sslset - Select SSL backend to use with libcurl
.SH SYNOPSIS
.B #include <curl/curl.h>
.nf








|







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.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
.\" * 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"

.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 ");"







|







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.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
.\" * 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"

.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







|







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.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
.\" * 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"

.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);







|







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.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
.\" * 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"

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







|







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.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
.\" * 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"

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







|







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.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
.\" * 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"

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







|







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.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
.\" * 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"

.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);







|







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.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
.\" * 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"

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







|







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.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
.\" * 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"

.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 ");"







|







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.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
.\" * 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"

.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 ");"







|







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.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
.\" * 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"

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







|







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.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
.\" * 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"

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







|







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.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
.\" * 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"

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







|







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.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
.\" * 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"

.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);







|







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.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
.\" * 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"

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







|







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.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
.\" * 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"

.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 );"







|







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.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
.\" * 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"

.SH NAME
curl_multi_fdset - extracts file descriptor information from a multi handle
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







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.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
.\" * 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"

.SH NAME
curl_multi_info_read - read multi stack informationals
.SH SYNOPSIS
#include <curl/curl.h>

CURLMsg *curl_multi_info_read( CURLM *multi_handle,







|







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.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
.\" * 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"

.SH NAME
curl_multi_init - create a multi handle
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLM *curl_multi_init( );"







|







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.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
.\" * 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"

.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);







|







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.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
.\" * 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"

.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);







|







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.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
.\" * 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"

.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);







|







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.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
.\" * 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"

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







|







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.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
.\" * 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"

.SH NAME
curl_multi_socket_action \- reads/writes available data given an action
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







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.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
.\" * 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"

.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 ");"







|







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.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
.\" * 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"

.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);







|







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.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
.\" * 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"

.SH NAME
curl_multi_wait - polls on all easy handles in a multi handle
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







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.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
.\" * 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"

.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 ");"







|







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.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
.\" * 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"

.SH NAME
curl_share_init - Create a shared object
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLSH *curl_share_init( );"







|







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.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
.\" * 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"

.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);







|







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.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
.\" * 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"

.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 ");"







|







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.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
.\" * 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"

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







|







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.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
.\" * 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"

.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);







|







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.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
.\" * 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"

.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 ");"







|







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.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
.\" * 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"

.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 " );"







|







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.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
.\" * 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"

.SH NAME
curl_url - returns a new CURLU handle
.SH SYNOPSIS
.B #include <curl/curl.h>

CURLU *curl_url();







|







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.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
.\" * 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"

.SH NAME
curl_url_cleanup - free a CURLU handle
.SH SYNOPSIS
.B #include <curl/curl.h>

void curl_url_cleanup(CURLU *handle);







|







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.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
.\" * 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"

.SH NAME
curl_url_dup - duplicate a CURLU handle
.SH SYNOPSIS
.B #include <curl/curl.h>

CURLU *curl_url_dup(CURLU *inhandle);







|







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.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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 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.
.\" *
.\" **************************************************************************
.TH curl_url_get 3 "October 08, 2018" "libcurl 7.64.1" "libcurl Manual"

.SH NAME
curl_url_get - extract a part from a URL
.SH SYNOPSIS
.B #include <curl/curl.h>

.nf







|













|







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




.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







>
>
>
>







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
      printf("the scheme is %s\\n", scheme);
      curl_free(scheme);
    }
    curl_url_cleanup(url);
  }
.fi
.SH AVAILABILITY
Added in curl 7.62.0
.SH "SEE ALSO"
.BR curl_url_cleanup "(3), " curl_url "(3), " curl_url_set "(3), "
.BR curl_url_dup "(3), "







|



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. 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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 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.
.\" *
.\" **************************************************************************
.TH curl_url_set 3 "November 06, 2018" "libcurl 7.64.1" "libcurl Manual"

.SH NAME
curl_url_set - set a URL part
.SH SYNOPSIS
.B #include <curl/curl.h>

CURLUcode curl_url_set(CURLU *url,







|













|







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 - 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 "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
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_PORT
Port cannot be URL encoded on set.


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








>
>

|
>
>







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. 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
    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
.SH "SEE ALSO"
.BR curl_url_cleanup "(3), " curl_url "(3), " curl_url_get "(3), "
.BR curl_url_dup "(3), "







|



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. 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
.\" * 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"

.SH NAME
curl_version - returns the libcurl version string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_version( );"







|







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.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
.\" * furnished to do so, under the 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"

.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 ");"







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * 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"

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







|







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.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
.\" * 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"

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







|







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.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
.\" * furnished to do so, under the 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"

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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * 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"

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







|







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.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
.\" * 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"
.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:








|







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







>
>







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







>
>







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
.\" * furnished to do so, under the 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"

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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * 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"

.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







|







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.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
.\" * 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"

.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







|







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.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
.\" * furnished to do so, under the 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"

.SH NAME
CURLINFO_ACTIVESOCKET \- get the active socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_ACTIVESOCKET,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.SH NAME
CURLINFO_CERTINFO \- get the TLS certificate chain
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.SH NAME
CURLINFO_COOKIELIST \- get all known cookies
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_COOKIELIST,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.SH NAME
CURLINFO_PRIVATE \- get the private pointer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIVATE, char **private);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.SH NAME
CURLINFO_TLS_SESSION \- get TLS session info
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.SH NAME
CURLINFO_TLS_SESSION, CURLINFO_TLS_SSL_PTR \- get TLS session info
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 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.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 3 "May 27, 2017" "libcurl 7.64.1" "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


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.







|














|








>
>







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 - 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 "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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 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.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 3 "May 27, 2017" "libcurl 7.64.1" "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


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.







|














|








>
>







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 - 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 "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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 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.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAX_PIPELINE_LENGTH 3 "May 27, 2017" "libcurl 7.64.1" "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


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







|














|








>
>







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 - 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 "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
.\" * furnished to do so, under the 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 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.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PIPELINING 3 "March 25, 2019" "libcurl 7.64.1" "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);







|














|







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

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 |
                                          CURLPIPE_MULTIPLEX);
.fi
.SH AVAILABILITY
Added in 7.16.0. Multiplex support bit added in 7.43.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), "







|
|
<


|
>










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/2 multiplexing */
curl_multi_setopt(m, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);

.fi
.SH AVAILABILITY
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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2014, 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"

.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


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







|














|








>
>







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 - 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 "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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2014, 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"

.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


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.







|














|








>
>







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 - 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 "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
.\" * furnished to do so, under the 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"

.SH NAME
CURLMOPT_PUSHDATA \- pointer to pass to push callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.SH NAME
CURLMOPT_PUSHFUNCTION \- callback that approves or denies server pushes
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.SH NAME
CURLMOPT_SOCKETDATA \- custom pointer passed to the socket callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.SH NAME
CURLMOPT_SOCKETFUNCTION \- callback informed about what to wait for
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.SH NAME
CURLMOPT_TIMERDATA \- custom pointer to pass to timer callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
.\" * furnished to do so, under the 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"

.SH NAME
CURLMOPT_TIMERFUNCTION \- set callback to receive timeout values
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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 "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
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.





.SH DEFAULT
NULL
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
static gboolean timeout_cb(gpointer user_data)







>
>
>
>
>







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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2014, 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.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ADDRESS_SCOPE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"

.SH NAME
CURLOPT_ADDRESS_SCOPE \- set scope for local 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
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;

  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
  /* 0x2 link-local
     0x5 site-local
     0x8 organization-local
     0xe global ... */
  curl_easy_setopt(curl, CURLOPT_ADDRESS_SCOPE, 0xEL);
  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.

.SH "SEE ALSO"
.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  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.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ADDRESS_SCOPE 3 "March 07, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
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 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/");

  my_scope_id = if_nametoindex("eth0");


  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
.\" * furnished to do so, under the terms 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"

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







|











|







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 "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 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
.\" * furnished to do so, under the terms 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"

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







|


















|







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 "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 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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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 "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
(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
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).

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.







|





|
>
|
|
|







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) 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) 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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_CERTINFO \- request SSL certificate information
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CERTINFO, long certinfo);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 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.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CHUNK_BGN_FUNCTION 3 "November 07, 2018" "libcurl 7.64.1" "curl_easy_setopt options"

.SH NAME
CURLOPT_CHUNK_BGN_FUNCTION \- callback before a transfer with FTP wildcardmatch
.SH SYNOPSIS
.nf
#include <curl/curl.h>




























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







|














|






>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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 - 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 "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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_CHUNK_END_FUNCTION \- callback after a transfer with FTP wildcardmatch
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

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








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_CONV_FROM_NETWORK_FUNCTION \- convert data from network to host encoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_CONV_FROM_UTF8_FUNCTION \- convert data from UTF8 to host encoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_CONV_TO_NETWORK_FUNCTION \- convert data to network from host encoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_COOKIELIST \- add to or manipulate cookies held in memory
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_CRLF \- enable/disable CRLF conversion
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLF, long conv);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_CURLU \- set URL with CURLU *
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CURLU, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_CUSTOMREQUEST \- custom string for request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CUSTOMREQUEST, char *request);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_DEBUGFUNCTION \- debug callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_DEFAULT_PROTOCOL \- default protocol to use if the URL is missing a
scheme name
.SH SYNOPSIS
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_DNS_SHUFFLE_ADDRESSES \- Shuffle addresses when a hostname returns more than one
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 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.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_USE_GLOBAL_CACHE 3 "May 31, 2017" "libcurl 7.64.1" "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


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.







|














|









>
>







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 - 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 "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
  /* 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!
.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), "







|




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
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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_EGDSOCKET \- set EGD socket path
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EGDSOCKET, char *path);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_EXPECT_100_TIMEOUT_MS \- timeout for Expect: 100-continue response
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_FNMATCH_DATA \- custom pointer to fnmatch callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_FNMATCH_FUNCTION \- wildcard matching function callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_FOLLOWLOCATION \- follow HTTP 3xx redirects
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FOLLOWLOCATION, long enable);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_FTPPORT \- make FTP transfer active
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPPORT, char *spec);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_FTP_ALTERNATIVE_TO_USER \- command to use instead of USER with FTP
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_FTP_CREATE_MISSING_DIRS \- create missing dirs for FTP and SFTP
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_FTP_FILEMETHOD \- select directory traversing method for FTP
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_HAPROXYPROTOCOL \- send HAProxy PROXY protocol v1 header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HAPROXYPROTOCOL,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_HEADERFUNCTION \- callback that receives header data
.SH SYNOPSIS
#include <curl/curl.h>

size_t header_callback(char *buffer,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_HTTP200ALIASES \- specify alternative matches for HTTP 200 OK
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_HTTPAUTH \- set HTTP server authentication methods to try
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_HTTPPOST \- specify the multipart formpost content
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_HTTPPROXYTUNNEL \- tunnel through HTTP proxy
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPPROXYTUNNEL, long tunnel);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_HTTP_CONTENT_DECODING \- enable/disable HTTP content decoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_HTTP_TRANSFER_DECODING \- enable/disable HTTP transfer decoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_IGNORE_CONTENT_LENGTH \- ignore content length
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_INFILESIZE_LARGE \- set size of the input file to send off
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_INTERLEAVEFUNCTION \- callback function for RTSP interleaved data
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_IOCTLFUNCTION \- callback for I/O operations
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_ISSUERCERT \- issuer SSL certificate filename
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ISSUERCERT, char *file);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_MAIL_RCPT \- list of SMTP mail recipients
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_MAXCONNECTS \- maximum connection cache size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXCONNECTS, long amount);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_MAXFILESIZE_LARGE \- maximum file size allowed to download
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_MAX_RECV_SPEED_LARGE \- rate limit data download speed
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_MAX_SEND_SPEED_LARGE \- rate limit data upload speed
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_MIMEPOST \- set post/send data from mime structure
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_NEW_DIRECTORY_PERMS \- permissions for remotely created directories
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_NEW_FILE_PERMS \- permissions for remotely created files
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_NOSIGNAL \- skip all signal handling
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOSIGNAL, long onoff);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_OPENSOCKETFUNCTION \- set callback for opening sockets
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_PINNEDPUBLICKEY \- set pinned public key
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PINNEDPUBLICKEY, char *pinnedpubkey);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_PIPEWAIT \- wait for pipelining/multiplexing
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PIPEWAIT, long wait);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_POST \- request an HTTP POST
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POST, long post);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_POSTFIELDSIZE_LARGE \- size of POST data pointed to
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_POSTREDIR \- how to act on an HTTP POST redirect
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_PRIVATE \- store a private pointer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRIVATE, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_PROGRESSFUNCTION \- callback to progress meter function
.SH SYNOPSIS
#include <curl/curl.h>

int progress_callback(void *clientp,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_PROTOCOLS \- set allowed protocols
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROTOCOLS, long bitmask);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_PROXY \- set proxy to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY, char *proxy);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_PROXYHEADER \- custom HTTP headers to pass to proxy
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_PROXYTYPE \- proxy protocol type
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYTYPE, long type);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_PROXYUSERNAME \- user name to use for proxy authentication
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 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.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_READFUNCTION 3 "August 11, 2018" "libcurl 7.64.1" "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);







|














|







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

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), "








>
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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_RESOLVE \- provide custom host name to IP address resolves
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

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








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_RESUME_FROM_LARGE \- set a point to resume transfer from
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_RTSP_TRANSPORT \- set RTSP Transport: header
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_SEEKFUNCTION \- user callback for seeking in input stream
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_SOCKOPTFUNCTION \- set callback for setting socket options
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 \- checksum of SSH server public key
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_SSH_KEYFUNCTION \- callback for known host matching logic
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_SSH_PRIVATE_KEYFILE \- set private key file for SSH auth
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_SSH_PUBLIC_KEYFILE \- set public key file for SSH auth
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_SSLCERT \- set SSL client certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERT, char *cert);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_SSLENGINE \- set SSL engine identifier
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE, char *id);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_SSL_CTX_FUNCTION \- SSL context callback for OpenSSL, wolfSSL/CyaSSL or mbedTLS
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_SSL_SESSIONID_CACHE \- enable/disable use of the SSL session-ID cache
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_SUPPRESS_CONNECT_HEADERS \- Suppress proxy CONNECT response headers from user callbacks
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_TELNETOPTIONS \- custom telnet options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TELNETOPTIONS,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_UNRESTRICTED_AUTH \- send credentials to other hosts too
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_UPLOAD \- enable data upload
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD, long upload);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_USERNAME \- user name to use in authentication
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_WILDCARDMATCH \- enable directory wildcard transfers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WILDCARDMATCH, long onoff);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_WRITEFUNCTION \- set callback for writing received data
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.SH NAME
CURLOPT_XFERINFOFUNCTION \- callback to progress meter function
.SH SYNOPSIS
#include <curl/curl.h>

int progress_callback(void *clientp,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
.\" * furnished to do so, under the terms 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"

.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);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms 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.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
  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_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                            \







>







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







>







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







>







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

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







>







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
	  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'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu 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);; \







|

|







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) --foreign include/curl/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(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

/*
 * libcurl external API function linkage decorations.
 */

#ifdef CURL_STATICLIB
#  define CURL_EXTERN
#elif defined(WIN32) || 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







|







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(__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
/* 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;
  unsigned int perm;
  int uid;
  int gid;
  curl_off_t size;
  long int hardlinks;

  struct {







|







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; /* 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
  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),




  CURLOPT_LASTENTRY /* the last unused */
} CURLoption;

#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
                          the obsolete stuff removed! */








>
>
>







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

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

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

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







|




|
|




















|










|

|




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.65.0"

/* The numeric version number is also available "in parts" by using these
   defines: */
#define LIBCURL_VERSION_MAJOR 7
#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 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-05-22"

#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
      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();                                      \







<







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

#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
    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
 * 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 */







|
|
<







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);                                 \
})

/*
 * For now, just make sure that the functions are called with three 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

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







<
<
<
<







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





/* 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
  CURLUPART_USER,
  CURLUPART_PASSWORD,
  CURLUPART_OPTIONS,
  CURLUPART_HOST,
  CURLUPART_PORT,
  CURLUPART_PATH,
  CURLUPART_QUERY,
  CURLUPART_FRAGMENT

} 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







|
>







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

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 \







|
|





|
>







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







|
|
|
|
|
|
|
|
|







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-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
	./$(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_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 \







>







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
	./$(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 \







<







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-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
	./$(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_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 \







>







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
	./$(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 \







<







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

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

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)







|


|
















|



|







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 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 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 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        \
  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
@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_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







>







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







<







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







>







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







<







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








<
<
<
<
<
<
<







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








>
>
>
>
>
>
>







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








<
<
<
<
<
<
<







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








>
>
>
>
>
>
>







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







>







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







<







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







>







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







<







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







>







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







<







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







>







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







<







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

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

LIB_RCFILES = libcurl.rc

CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES)
HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES)







|


|
















|



|





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 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 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 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        \
  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
 */
#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 "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"







|







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

  /* 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;
}

/*







<







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

    | CURLALTSVC_H3
#endif
    ;
  return asi;
}

/*
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
    p++;
  protop = p;
  while(*p && ISALNUM(*p))
    p++;
  len = p - protop;

  if(!len || (len >= buflen))
    return CURLE_BAD_FUNCTION_ARGUMENT; /* TODO: improve error code */
  memcpy(alpnbuf, protop, len);
  alpnbuf[len] = 0;
  *ptr = p;
  return CURLE_OK;
}

/* altsvc_flush() removes all alternatives for this source origin from the







|







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







<







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")) {

    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
        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 */
          memcpy(namebuf, hostp, len);
          namebuf[len] = 0;
          dsthost = namebuf;
        }
        else {
          /* no destination name, use source host */
          dsthost = srchost;







|







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;
          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
        }
        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] */
          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));
        }







|
|







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) {
          /* 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
#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__))
#    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;

};












/*
 * 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)







|




















>

>
>
>
>
>
>
>
>
>
>
>







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(__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
       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].fd:ARES_SOCKET_BAD,
                      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







|

|







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].fd:ARES_SOCKET_BAD,
                      (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
    conn->async.os_specific;
  CURLcode result = CURLE_OK;

  if(dns)
    *dns = NULL;

  waitperform(conn, 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;







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
  /* 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.
       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,







|
<
<







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. */


    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
      if(ai) {
        compound_results(res, ai);
      }
    }
    /* A successful result overwrites any previous error */
    if(res->last_status != ARES_SUCCESS)
      res->last_status = status;




























































  }
}

/*
 * Curl_resolver_getaddrinfo() - when using ares
 *
 * Returns name information about the given hostname and port number. If







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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.
 *
 ***************************************************************************/

/* Base64 encoding/decoding */

#include "curl_setup.h"





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







|

















>
>
>
>
>







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


 */
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);
}









>
>
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
#ifndef HEADER_CURL_CONFIG_WIN32_H
#define HEADER_CURL_CONFIG_WIN32_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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









|







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 - 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
#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 if you have the gethostbyaddr function. */
#define HAVE_GETHOSTBYADDR 1

/* Define if you have the gethostname function. */
#define HAVE_GETHOSTNAME 1








>
>
>







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

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







>







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

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

      if(score > highscore) {
        highscore = score;
        conn_candidate = conn;
      }
    }
    curr = curr->next;







|







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

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

        if(score > highscore) {
          highscore = score;
          conn_candidate = conn;
          bundle_candidate = bundle;
        }
      }







|







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->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
#ifndef HEADER_CURL_CONNCACHE_H
#define HEADER_CURL_CONNCACHE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2015 - 2018, 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









|







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 - 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
  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 */
};







<







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_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
      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);
      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));







|







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, 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
                             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);
        *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);
        *port = us_port;
        return TRUE;
      }
      break;
#endif
#if defined(HAVE_SYS_UN_H) && defined(AF_UNIX)
    case AF_UNIX:







<













|









|







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

  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)) {
        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)) {
        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
  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(!conn->bits.reuse && !conn->bits.tcp_fastopen) {

    char buffer[STRERROR_LEN];




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


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


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


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

  }




  /* persist connection info in session handle */
  Curl_persistconninfo(conn);
}

/*
 * Curl_is_connected() checks if the socket has connected.







<
<
<
<
<




>

>

>
>
>
>







|
>








|
>







|
>






|

>
>
>







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





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

#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







|







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:%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
#include "psl.h"
#include "strtok.h"
#include "sendf.h"
#include "slist.h"
#include "share.h"
#include "strtoofft.h"
#include "strcase.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"







>







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
        if(curlx_strtoofft(ptr, NULL, 10, &co->expires))
          badcookie = TRUE;
        break;
      case 5:
        co->name = strdup(ptr);
        if(!co->name)
          badcookie = TRUE;

        /* 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;
      }







>
|
|
|
|
|
>







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;
        }
        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
      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.







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







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





























/*****************************************************************************
 *
 * 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
 * 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);







<
<
<
<







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;





  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

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




    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]);
      if(format_ptr == NULL) {
        fprintf(out, "#\n# Fatal libcurl error\n");
        free(array);
        if(!use_stdout)
          fclose(out);
        return 1;
      }







>
>
>
>



















|







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++) {
      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
                               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







<







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


#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
#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 `getpwuid' function. */
#cmakedefine HAVE_GETPWUID 1

/* Define to 1 if you have the `getpwuid_r' function. */
#cmakedefine HAVE_GETPWUID_R 1








>
>
>
>
>
>







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

/* 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 mbedTLS is enabled */
#cmakedefine USE_MBEDTLS 1

/* if libSSH2 is in use */
#cmakedefine USE_LIBSSH2 1








|
|







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 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
#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 `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 `gettimeofday' function. */
#undef HAVE_GETTIMEOFDAY

/* Define to 1 if you have a working glibc-style strerror_r function. */
#undef HAVE_GLIBC_STRERROR_R








>
>
>















>
>
>







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







<
<
<
<
<
<
<
<
<







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










#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
#ifndef HEADER_CURL_MD4_H
#define HEADER_CURL_MD4_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2014, 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_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_MBEDTLS) && !defined(MBEDTLS_MD4_C)) */

#endif /* HEADER_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
36
37
#ifndef HEADER_CURL_MD4_H
#define HEADER_CURL_MD4_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.
 *
 ***************************************************************************/

#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
#ifndef HEADER_CURL_MD5_H
#define HEADER_CURL_MD5_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2010, 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









|







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

#endif

#endif /* HEADER_CURL_MD5_H */







|
|
|
|




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);
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
#ifndef HEADER_CURL_MEMORY_H
#define HEADER_CURL_MEMORY_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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









|







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







|







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.
 *
 * 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
#if !defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO)

#ifdef USE_OPENSSL

#  include <openssl/des.h>
#  ifndef OPENSSL_NO_MD4
#    include <openssl/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







>
>







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
  result = Curl_convert_to_network(data, (char *)pw, len * 2);
  if(result)
    return result;

  {
    /* Create NT hashed password. */
#ifdef USE_OPENSSL

    MD4_CTX MD4pw;
    MD4_Init(&MD4pw);
    MD4_Update(&MD4pw, pw, 2 * len);
    MD4_Final(ntbuffer, &MD4pw);



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







>




>
>
>







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
#ifndef HEADER_CURL_NTLM_CORE_H
#define HEADER_CURL_NTLM_CORE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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
 * copies of the Software, and permit persons to whom the Software is









|







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

#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







<

<







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. */

#define USE_NTRESPONSES


/* 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
#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"


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







>
>







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
#  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)
{
  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) {







|







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_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
  if(!conn->response_header)
    return CURLE_OUT_OF_MEMORY;
  return CURLE_OK;
done:
  free(buf);
  return CURLE_REMOTE_ACCESS_DENIED;
}











































/*
 * 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;
  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;
    authp = &conn->data->state.authproxy;
  }
  else {
    allocuserpwd = &conn->allocptr.userpwd;
    userp = conn->user;
    ntlm = &conn->ntlm;
    authp = &conn->data->state.authhost;
  }
  authp->done = FALSE;

  /* not set means empty */
  if(!userp)
    userp = "";

  switch(ntlm->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);
    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);
    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 */
    authp->done = TRUE;
    Curl_ntlm_wb_cleanup(conn);
    if(!*allocuserpwd)
      return CURLE_OUT_OF_MEMORY;
    break;

  case NTLMSTATE_TYPE3:
    /* connection is already authenticated,
     * don't send a header in future requests */



    free(*allocuserpwd);
    *allocuserpwd = NULL;
    authp->done = TRUE;
    break;
  }

  return CURLE_OK;
}

#endif /* !CURL_DISABLE_HTTP && USE_NTLM && NTLM_WB_ENABLED */







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>













<
|











|





|








|


















|













>




|










|

|



>



>
>
>
|
<








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;

  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;
    state = &conn->proxy_ntlm_state;
    authp = &conn->data->state.authproxy;
  }
  else {
    allocuserpwd = &conn->allocptr.userpwd;
    userp = conn->user;
    state = &conn->http_ntlm_state;
    authp = &conn->data->state.authhost;
  }
  authp->done = FALSE;

  /* not set means empty */
  if(!userp)
    userp = "";

  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", *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, *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));
    *state = NTLMSTATE_TYPE3; /* we sent a type-3 */
    authp->done = TRUE;
    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:
    Curl_safefree(*allocuserpwd);

    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
#ifndef HEADER_CURL_NTLM_WB_H
#define HEADER_CURL_NTLM_WB_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2014, 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 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);

void Curl_ntlm_wb_cleanup(struct connectdata *conn);

#endif /* !CURL_DISABLE_HTTP && USE_NTLM && NTLM_WB_ENABLED */

#endif /* HEADER_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
39
40
41
#ifndef HEADER_CURL_NTLM_WB_H
#define HEADER_CURL_NTLM_WB_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.
 *
 ***************************************************************************/

#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 */

CURLcode Curl_output_ntlm_wb(struct connectdata *conn, bool proxy);

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

#include <curl/curl.h>
#include "curl_memory.h"
#include "curl_path.h"
#include "escape.h"
#include "memdebug.h"








|







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_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
 * RFC7628 A Set of SASL Mechanisms for OAuth
 * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
 *
 ***************************************************************************/

#include "curl_setup.h"




#include <curl/curl.h>
#include "urldata.h"

#include "curl_base64.h"
#include "curl_md5.h"
#include "vauth/vauth.h"
#include "vtls/vtls.h"







>
>
>







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
 * 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);
  }
#endif

#if defined(USE_NTLM)
  /* Cleanup the NTLM structure */
  if(authused == SASL_MECH_NTLM) {
    Curl_auth_ntlm_cleanup(&conn->ntlm);
  }
#endif

#if !defined(USE_KERBEROS5) && !defined(USE_NTLM)
  /* Reserved for future use */
  (void)conn;
  (void)authused;







|






|







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_cleanup_gssapi(&conn->krb5);
  }
#endif

#if defined(USE_NTLM)
  /* Cleanup the NTLM structure */
  if(authused == SASL_MECH_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
      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 */
      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,







|







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;
      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
    }
    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,
                                                       NULL, 0,
                                                       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);
    }
    else if(enabledmechs & SASL_MECH_LOGIN) {
      mech = SASL_MECH_STRING_LOGIN;
      state1 = SASL_LOGIN;
      state2 = SASL_LOGIN_PASSWD;
      sasl->authused = SASL_MECH_LOGIN;








|
<
|
|







|
|







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_xoauth_bearer_message(data, conn->user,

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

  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,
                                            &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);







|
|
<







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, NULL, conn->user,
                                            conn->passwd, &resp, &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
                                                     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,
                                                     NULL, 0,
                                                     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;







|
<
|
|







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_xoauth_bearer_message(data, conn->user,

                                                      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


  free(resp);

  state(sasl, conn, newstate);

  return result;
}








>
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

#endif
#endif

#ifdef CURL_WANTS_CA_BUNDLE_ENV
#error "No longer supported. Set CURLOPT_CAINFO at runtime instead."
#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.
 */








>
>
>
>







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
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"



#include "urldata.h"
#include "curl_addrinfo.h"
#include "doh.h"

#include "sendf.h"
#include "multiif.h"
#include "url.h"







>
>







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







<







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 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
      return DOH_DNS_OUT_OF_RANGE;
    index += 4; /* skip question's type and class */
    qdcount--;
  }

  ancount = get16bit(doh, 6);
  while(ancount) {

    unsigned int ttl;

    rc = skipqname(doh, dohlen, &index);
    if(rc)
      return rc; /* bad qname */

    if(dohlen < (index + 2))







>







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
    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! */







<
<







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;


    /* 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
    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) {



      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;







>
>
>







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


    de_cleanup(&de);

    return CURLE_COULDNT_RESOLVE_HOST;
  }

  return CURLE_OK;
}









>
>
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
#ifndef HEADER_CURL_DOH_H
#define HEADER_CURL_DOH_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 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 "urldata.h"
#include "curl_addrinfo.h"



/*
 * 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,









|
















>
>







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






#endif /* HEADER_CURL_DOH_H */







>
>
>
>
>
>

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








<







261
262
263
264
265
266
267

268
269
270
271
272
273
274
{
  if(!initialized)
    return;

  if(--initialized)
    return;


  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
        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":"");
      }
      break;
    }
    prev = m;
    m = m->next; /* move to next node */
  }
  if(!m) {







|
|







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":"");
      }
      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
      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":"");
      }
      else
        return CURLE_OUT_OF_MEMORY;
    }
  }

  return 0;







|
|







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":"");
      }
      else
        return CURLE_OUT_OF_MEMORY;
    }
  }

  return 0;
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
        }
      }
    }
    else
      return CURLE_RECV_ERROR;

    if(mcode)
      return CURLE_URL_MALFORMAT; /* TODO: return a proper error! */

    /* 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;







|







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;

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

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



}

/*
 * 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.
 *







|
>
>
>







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

#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

/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2010 - 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 "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);
}








|















|



















>
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 - 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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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>


#ifndef CURL_DISABLE_HTTP

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







|


















>
|






<







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 - 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"
#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 "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
        ) {
        return_value = CURL_FORMADD_INCOMPLETE;
        break;
      }
      if(((form->flags & HTTPPOST_FILENAME) ||
          (form->flags & HTTPPOST_BUFFER)) &&
         !form->contenttype) {
        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;







|







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

  if(result)
    Curl_mime_cleanpart(finalform);

  return result;
}

#else  /* CURL_DISABLE_HTTP */

CURLFORMcode curl_formadd(struct curl_httppost **httppost,
                          struct curl_httppost **last_post,
                          ...)
{
  (void)httppost;
  (void)last_post;
  return CURL_FORMADD_DISABLED;







|
>







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

void curl_formfree(struct curl_httppost *form)
{
  (void)form;
  /* does nothing HTTP is disabled */
}


#endif  /* !defined(CURL_DISABLE_HTTP) */







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

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
#ifndef HEADER_CURL_FORMDATA_H
#define HEADER_CURL_FORMDATA_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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.
 *
 ***************************************************************************/





/* used by FormAdd for temporary storage */
typedef struct FormInfo {
  char *name;
  bool name_alloc;
  size_t namelength;
  char *value;
  bool value_alloc;









|














>
>
>
>







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 - 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
  struct FormInfo *more;
} FormInfo;

CURLcode Curl_getformdata(struct Curl_easy *data,
                          curl_mimepart *,
                          struct curl_httppost *post,
                          curl_read_callback fread_func);






#endif /* HEADER_CURL_FORMDATA_H */







>
>
>
>

>

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







<







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

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







|







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, 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
    /*
     * 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);
    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);
    if(rc == CURLRESOLV_PENDING)
      /* BLOCKING */
      (void)Curl_resolver_wait_resolv(conn, &addr);

    connectport = ftpc->newport; /* we connect to the remote port */

    if(!addr) {







|















|







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, 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, 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
  /* 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 */
      result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, NULL, 0);

      return result;
    }

    result = Curl_is_connected(conn, SECONDARYSOCKET, &connected);








|







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. */
      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
          }
          break;
        }
        break;
      case PL_WINNT_DIRORSIZE:
        switch(parser->state.NT.sub.dirorsize) {
        case PL_WINNT_DIRORSIZE_PRESPACE:
          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 ++;







|
<
<
<







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 != ' ') {



            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
    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);
    if(matchp) {
      hostp = strdup(hostname);
      if(hostp) {
        if(hostmatch(hostp, matchp) == CURL_HOST_MATCH)
          res = 1;
        free(hostp);
      }
      free(matchp);
    }







<
<





|

|







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


  int res = 0;
  if(!match_pattern || !*match_pattern ||
      !hostname || !*hostname) /* sanity check */
    ;
  else {
    char *matchp = strdup(match_pattern);
    if(matchp) {
      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
 * 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) {







<
<
<
<


<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







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.
 */





static void freednsentry(void *freethis);































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

  if(data->share)
    Curl_share_unlock(data, CURL_LOCK_DATA_DNS);

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







>


<







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
      free(nodes);
    }
    else
      result = CURLE_OUT_OF_MEMORY;
  }
  return result;
}


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







>







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
                int port)
{
  char entry_id[MAX_HOSTCACHE_LEN];
  size_t entry_len;
  struct Curl_dns_entry *dns;
  struct Curl_dns_entry *dns2;


  /* shuffle addresses if requested */
  if(data->set.dns_shuffle_addresses) {
    CURLcode result = Curl_shuffle_addr(data, &addr);
    if(result)
      return NULL;
  }


  /* Create a new cache entry */
  dns = calloc(1, sizeof(struct Curl_dns_entry));
  if(!dns) {
    return NULL;
  }








>






>







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

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








>







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
      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) {
      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,







|







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(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
    /* 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);

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







|







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, 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
  (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);

#ifdef USE_ALARM_TIMEOUT
clean_up:

  if(!prev_alarm)
    /* deactivate a possibly active alarm before uninstalling the handler */
    alarm(0);







|







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, 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
 * 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_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.







|
>
>
>
|







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

#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

      printf("failed; %s\n",
             Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));

  }
}
#else
#define dump_addrinfo(x,y) Curl_nop_stmt
#endif

/*







<




|
>


>







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

    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 {
      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
#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);


static CURLcode add_haproxy_protocol_header(struct connectdata *conn);


#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







<



















>

>







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 "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
  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;
}


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







|







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
    if(strncasecompare(head->data, thisheader, thislen) &&
       Curl_headersep(head->data[thislen]))
      return head->data;
  }

  return NULL;
}





/*
 * 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.
 */







>
>
>
>







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

  memcpy(value, start, len);
  value[len] = 0; /* zero terminate */

  return value;
}


/*
 * 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)







>







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
    result = CURLE_OUT_OF_MEMORY;
    goto fail;
  }

  fail:
  return result;
}



/* 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)







>
>







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
#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)) {
        /* 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");







|
|







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->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
    }
#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)) {
        /* 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");







|
|







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->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
          data->req.httpcode);
    result = CURLE_HTTP_RETURNED_ERROR;
  }

  return result;
}


/*
 * 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,







>







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
  }
  else
    authhost->done = TRUE;

  return result;
}

















/*
 * 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;
#endif
  unsigned long *availp;
  struct auth *authp;

  if(proxy) {
    availp = &data->info.proxyauthavail;
    authp = &data->state.authproxy;







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>















|
|







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
  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
          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;
          }
          else
            data->state.authproblem = TRUE;
        }
      }
    }
    else







|







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 */
            *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
#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)) {
                  auth += strlen("NTLM");
                  while(*auth && ISSPACE(*auth))
                    auth++;
                  if(*auth) {
                    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;







<
<
<
|
|
<
<
|
|
<
<
<
<







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;




                result = Curl_input_ntlm_wb(conn, proxy, auth);
                if(result) {


                  infof(data, "Authentication problem. Ignoring this.\n");
                  data->state.authproblem = TRUE;




                }
              }
#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
           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;
}








<







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


  if(conn->data->set.haproxyprotocol) {
    /* add HAProxy PROXY protocol header */
    result = add_haproxy_protocol_header(conn);
    if(result)
      return result;
  }


  if(conn->given->protocol & CURLPROTO_HTTPS) {
    /* perform SSL initialization */
    result = https_connecting(conn, done);
    if(result)
      return result;
  }







>






>







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
{
  /* write mode */
  (void)numsocks; /* unused, we trust it to be at least 1 */
  socks[0] = conn->sock[FIRSTSOCKET];
  return GETSOCK_WRITESOCK(0);
}


static CURLcode add_haproxy_protocol_header(struct connectdata *conn)
{
  char proxy_header[128];
  Curl_send_buffer *req_buffer;
  CURLcode result;
  char tcp_version[5];








>







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
                                conn,
                                &conn->data->info.request_size,
                                0,
                                FIRSTSOCKET);

  return result;
}


#ifdef USE_SSL
static CURLcode https_connecting(struct connectdata *conn, bool *done)
{
  CURLcode result;
  DEBUGASSERT((conn) && (conn->handler->flags & PROTOPT_SSL));








>







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







<
<







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;



  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
      headers = headers->next;
    }
  }

  return CURLE_OK;
}


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







>







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
            tm->tm_min,
            tm->tm_sec);

  result = Curl_add_buffer(&req_buffer, datestr, strlen(datestr));

  return result;
}











/*
 * 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)







>
>
>
>
>
>
>
>
>
>







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
      /* 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) {







        DEBUGF(infof(data, "HTTP/2 over clean TCP\n"));
        conn->httpversion = 20;

        result = Curl_http2_switched(conn, NULL, 0);
        if(result)
          return result;
      }







>
>
>
>
>
>
>







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
      return result;
    http->sendit = &http->form;
    break;
  default:
    http->sendit = NULL;
  }


  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. */







>







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
    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);
  }


  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");
  }







>







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
      result = Curl_add_bufferf(&req_buffer,
                                "Content-Length: %" CURL_FORMAT_CURL_OFF_T
                                "\r\n", postsize);
      if(result)
        return result;
    }


    /* 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;
      }
    }


    /* 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) {







>










>







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
      }

      /* 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)) ||
          ((data->req.httpcode == 407) &&
           (conn->proxyntlm.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)) ||
         ((data->req.httpcode == 407) &&
          (conn->proxyneg.state == GSS_AUTHRECV)))) {
        infof(data, "Connection closure while negotiating auth (HTTP 1.0?)\n");
        data->state.authproblem = TRUE;
      }
      if((conn->negotiate.state == GSS_AUTHDONE) &&
         (data->req.httpcode != 401)) {
        conn->negotiate.state = GSS_AUTHSUCC;
      }
      if((conn->proxyneg.state == GSS_AUTHDONE) &&
         (data->req.httpcode != 407)) {
        conn->proxyneg.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)) {







|

|







|

|



|

|

|

|







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->http_ntlm_state == NTLMSTATE_TYPE2)) ||
          ((data->req.httpcode == 407) &&
           (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->http_negotiate_state == GSS_AUTHRECV)) ||
         ((data->req.httpcode == 407) &&
          (conn->proxy_negotiate_state == GSS_AUTHRECV)))) {
        infof(data, "Connection closure while negotiating auth (HTTP 1.0?)\n");
        data->state.authproblem = TRUE;
      }
      if((conn->http_negotiate_state == GSS_AUTHDONE) &&
         (data->req.httpcode != 401)) {
        conn->http_negotiate_state = GSS_AUTHSUCC;
      }
      if((conn->proxy_negotiate_state == GSS_AUTHDONE) &&
         (data->req.httpcode != 407)) {
        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
          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");
          }




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







>
>
>
>







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








<







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 {

          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

          /* 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
             server supports pipelining. */
          DEBUGF(infof(data,
                       "HTTP 1.1 or later with persistent connection, "
                       "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







|
<

|
<
<
<
<
<
<







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

          DEBUGF(infof(data,
                       "HTTP 1.1 or later with persistent connection\n"));






        }

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







<
<
<
<
<
<
<
<
<
<
<
<
<







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((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
                                 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 */







<
<







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;



  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
  }
  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
 * 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;







|







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

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







|







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)) {
      /* 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
  }
}

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.
   */
  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;







|
|
|







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)
{
  /*
   * 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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2016, 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
24
25
26
27
28
29
30

31
32
33
34
35
36
37

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








>







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
    return CURLE_OUT_OF_MEMORY;

  authp->done = TRUE;

  return CURLE_OK;
}

void Curl_digest_cleanup(struct Curl_easy *data)
{
  Curl_auth_digest_cleanup(&data->state.digest);
  Curl_auth_digest_cleanup(&data->state.proxydigest);
}

#endif







|






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_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
#ifndef HEADER_CURL_HTTP_DIGEST_H
#define HEADER_CURL_HTTP_DIGEST_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2014, 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"



/* 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
#define Curl_digest_cleanup(x) Curl_nop_stmt
#endif

#endif /* HEADER_CURL_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
#ifndef HEADER_CURL_HTTP_DIGEST_H
#define HEADER_CURL_HTTP_DIGEST_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.
 *
 ***************************************************************************/
#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);


void Curl_http_auth_cleanup_digest(struct Curl_easy *data);


#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
  const char *userp;
  const char *passwdp;
  const char *service;
  const char *host;

  /* Point to the correct struct with this */
  struct negotiatedata *neg_ctx;


  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;

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

  }

  /* 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) {
      infof(conn->data, "Negotiate auth restarted\n");
      Curl_cleanup_negotiate(conn);
    }
    else if(neg_ctx->state != GSS_AUTHNONE) {
      /* The server rejected our authentication and hasn't supplied any more
      negotiation mechanisms */
      Curl_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);

  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;


  char *base64 = NULL;
  size_t len = 0;
  char *userp;
  CURLcode result;

  authp->done = FALSE;

  if(neg_ctx->state == GSS_AUTHRECV) {
    if(neg_ctx->havenegdata) {
      neg_ctx->havemultiplerequests = TRUE;
    }
  }
  else if(neg_ctx->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)) {

    if(neg_ctx->noauthpersist && neg_ctx->state == GSS_AUTHSUCC) {
      infof(conn->data, "Curl_output_negotiate, "
       "no persistent authentication: cleanup existing context");
      Curl_auth_spnego_cleanup(neg_ctx);
    }
    if(!neg_ctx->context) {
      result = Curl_input_negotiate(conn, proxy, "Negotiate");






      if(result)
        return result;
    }

    result = Curl_auth_create_spnego_message(conn->data,
      neg_ctx, &base64, &len);
    if(result)
      return result;







>








>








>

















|

|

|


|














|










>
>







|




|






|

|


|



>
>
>
>
>
>
|







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(state == GSS_AUTHSUCC) {
      infof(conn->data, "Negotiate auth restarted\n");
      Curl_http_auth_cleanup_negotiate(conn);
    }
    else if(state != GSS_AUTHNONE) {
      /* The server rejected our authentication and hasn't supplied any more
      negotiation mechanisms */
      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_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(*state == GSS_AUTHRECV) {
    if(neg_ctx->havenegdata) {
      neg_ctx->havemultiplerequests = TRUE;
    }
  }
  else if(*state == GSS_AUTHSUCC) {
    if(!neg_ctx->havenoauthpersist) {
      neg_ctx->noauthpersist = !neg_ctx->havemultiplerequests;
    }
  }

  if(neg_ctx->noauthpersist ||
    (*state != GSS_AUTHDONE && *state != GSS_AUTHSUCC)) {

    if(neg_ctx->noauthpersist && *state == GSS_AUTHSUCC) {
      infof(conn->data, "Curl_output_negotiate, "
       "no persistent authentication: cleanup existing context");
      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;
      }
      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

    free(base64);

    if(userp == NULL) {
      return CURLE_OUT_OF_MEMORY;
    }

    neg_ctx->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;
    }
  #else
  #ifdef USE_WINDOWS_SSPI
    if(neg_ctx->status == SEC_E_OK ||
       neg_ctx->status == SEC_I_CONTINUE_NEEDED) {
      neg_ctx->state = GSS_AUTHDONE;
    }
  #endif
  #endif
  }

  if(neg_ctx->state == GSS_AUTHDONE || neg_ctx->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)
{



  Curl_auth_spnego_cleanup(&conn->negotiate);
  Curl_auth_spnego_cleanup(&conn->proxyneg);
}

#endif /* !CURL_DISABLE_HTTP && USE_SPNEGO */







|



|





|





|










|

>
>
>
|
|



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

    *state = GSS_AUTHSENT;
  #ifdef HAVE_GSSAPI
    if(neg_ctx->status == GSS_S_COMPLETE ||
       neg_ctx->status == GSS_S_CONTINUE_NEEDED) {
      *state = GSS_AUTHDONE;
    }
  #else
  #ifdef USE_WINDOWS_SSPI
    if(neg_ctx->status == SEC_E_OK ||
       neg_ctx->status == SEC_I_CONTINUE_NEEDED) {
      *state = GSS_AUTHDONE;
    }
  #endif
  #endif
  }

  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_http_auth_cleanup_negotiate(struct connectdata *conn)
{
  conn->http_negotiate_state = GSS_AUTHNONE;
  conn->proxy_negotiate_state = GSS_AUTHNONE;

  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
 * furnished to do so, under 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

/* 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);

#endif /* USE_SPNEGO */

#endif /* HEADER_CURL_HTTP_NEGOTIATE_H */







|








|

|


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.
 *
 ***************************************************************************/

#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_http_auth_cleanup_negotiate(struct connectdata *conn);

#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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
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
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;

  CURLcode result = CURLE_OK;

  ntlm = proxy ? &conn->proxyntlm : &conn->ntlm;


  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 */
    }
    else {
      if(ntlm->state == NTLMSTATE_LAST) {
        infof(conn->data, "NTLM auth restarted\n");
        Curl_http_ntlm_cleanup(conn);
      }
      else if(ntlm->state == NTLMSTATE_TYPE3) {
        infof(conn->data, "NTLM handshake rejected\n");
        Curl_http_ntlm_cleanup(conn);
        ntlm->state = NTLMSTATE_NONE;
        return CURLE_REMOTE_ACCESS_DENIED;
      }
      else if(ntlm->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 */
    }
  }

  return result;
}

/*







>



>












|


|

|

|

|
|


|




|







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;

      *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(conn);
      }
      else if(*state == NTLMSTATE_TYPE3) {
        infof(conn->data, "NTLM handshake rejected\n");
        Curl_http_auth_cleanup_ntlm(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 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
  const char *userp;
  const char *passwdp;
  const char *service = NULL;
  const char *hostname = NULL;

  /* point to the correct struct with this */
  struct ntlmdata *ntlm;

  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;

    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;

    authp = &conn->data->state.authhost;
  }
  authp->done = FALSE;

  /* not set means empty */
  if(!userp)
    userp = "";







>


















>










>







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
      return err;
  }
#ifdef SECPKG_ATTR_ENDPOINT_BINDINGS
  ntlm->sslContext = conn->sslContext;
#endif
#endif

  switch(ntlm->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);







|







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(*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
                              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 */
      authp->done = TRUE;
    }
    break;

  case NTLMSTATE_TYPE3:
    /* connection is already authenticated,
     * don't send a header in future requests */
    ntlm->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)
{
  Curl_auth_ntlm_cleanup(&conn->ntlm);
  Curl_auth_ntlm_cleanup(&conn->proxyntlm);

#if defined(NTLM_WB_ENABLED)
  Curl_ntlm_wb_cleanup(conn);
#endif
}

#endif /* !CURL_DISABLE_HTTP && USE_NTLM */







|







|










|

|
|


|




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

      *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 */
    *state = NTLMSTATE_LAST;
    /* FALLTHROUGH */
  case NTLMSTATE_LAST:
    Curl_safefree(*allocuserpwd);
    authp->done = TRUE;
    break;
  }

  return CURLE_OK;
}

void Curl_http_auth_cleanup_ntlm(struct connectdata *conn)
{
  Curl_auth_cleanup_ntlm(&conn->ntlm);
  Curl_auth_cleanup_ntlm(&conn->proxyntlm);

#if defined(NTLM_WB_ENABLED)
  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
#ifndef HEADER_CURL_NTLM_H
#define HEADER_CURL_NTLM_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2014, 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
|
|







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_HTTP_NTLM_H
#define HEADER_CURL_HTTP_NTLM_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
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);

#endif /* !CURL_DISABLE_HTTP && USE_NTLM */

#endif /* HEADER_CURL_NTLM_H */







|



|
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_auth_cleanup_ntlm(struct connectdata *conn);

#endif /* !CURL_DISABLE_HTTP && USE_NTLM */

#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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
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
  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,
                          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;
#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) {

              unsigned int scopeid = 0;

              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(res == IF2IP_NOT_FOUND)
                  res = IF2IP_AF_NOT_SUPPORTED;

                continue;
              }
#endif
              if(scopeid)
                msnprintf(scope, sizeof(scope), "%%%u", scopeid);

            }
            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));







|











|













>

>



















|





|

|
>







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 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) 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(local_scope_id && scopeid != local_scope_id) {
                if(res == IF2IP_NOT_FOUND)
                  res = IF2IP_AF_NOT_SUPPORTED;

                continue;
              }

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

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

  if(!interf || (af != AF_INET))
    return IF2IP_NOT_FOUND;

  len = strlen(interf);
  if(len >= sizeof(req.ifr_name))
    return IF2IP_NOT_FOUND;







|









|







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 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)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
  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,
                          char *buf, int buf_size)
{
    (void) af;
    (void) remote_scope;
    (void) remote_scope_id;
    (void) interf;
    (void) buf;
    (void) buf_size;
    return IF2IP_NOT_FOUND;
}

#endif







|




|







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 local_scope_id, const char *interf,
                          char *buf, int buf_size)
{
    (void) af;
    (void) remote_scope;
    (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
#ifndef HEADER_CURL_IF2IP_H
#define HEADER_CURL_IF2IP_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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









|







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 - 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
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,
                          char *buf, int buf_size);

#ifdef __INTERIX

/* Nedelcho Stanev's work-around for SFU 3.0 */
struct ifreq {
#define IFNAMSIZ 16







|







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

 * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
 *
 ***************************************************************************/

#include "curl_setup.h"

#ifndef CURL_DISABLE_IMAP







>







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
  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 */
  else
    /* End of DO phase */
    state(conn, IMAP_STOP);

  return result;
}








|







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;
  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
  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 */
  }

  /* 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++;








|







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

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

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







|
<
<
<
<
<







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





    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
  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 */
  p1 = str;
  while(*p1) {
    if(*p1 == '\\')
      backsp_count++;
    else if(*p1 == '"')
      quote_count++;
    else if(!escape_only) {







|







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 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
 */
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;
  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 *pch;

    pch = strchr((xdigits = xdigits_l), ch);
    if(!pch)
      pch = strchr((xdigits = xdigits_u), ch);
    if(pch != NULL) {
      val <<= 4;







|














>







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 *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
  }
  *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) {

    for(i = 0; i < ludp->lud_attrs_dups; i++)
      free(ludp->lud_attrs[i]);
    free(ludp->lud_attrs);
  }

  free(ludp);
}







<
<







>







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


  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
	<key>CFBundleExecutable</key>
	<string>curl</string>

	<key>CFBundleIdentifier</key>
	<string>se.haxx.curl.libcurl</string>

	<key>CFBundleVersion</key>
	<string>7.64.1</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>

	<key>CFBundleGetInfoString</key>
	<string>libcurl.plist 7.64.1</string>
</dict>
</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
	<key>CFBundleExecutable</key>
	<string>curl</string>

	<key>CFBundleIdentifier</key>
	<string>se.haxx.curl.libcurl</string>

	<key>CFBundleVersion</key>
	<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.65.0</string>

	<key>CFBundleGetInfoString</key>
	<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
 * 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 sometimes mbed TLS crypto libraries do not provide the
 * MD4 hash algorithm, so we have a local implementation of it */
#if defined(USE_NSS) || defined(USE_OS400CRYPTO) || \

    (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C))

#include "curl_md4.h"
#include "warnless.h"

#ifndef HAVE_OPENSSL








>
|
|

>







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


    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)

/* 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)

/* 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)

      a += saved_a;
    b += saved_b;
    c += saved_c;
    d += saved_d;

    ptr += 64;
  } while(size -= 64);








<









>
>







|
|
|
|
|
|
|
|
|
|
|
|
|
|
|


|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|


|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|







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;


  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)

/* 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)

/* 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)

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

  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;

    if(size < available) {
      memcpy(&ctx->buffer[used], data, size);
      return;
    }

    memcpy(&ctx->buffer[used], data, available);







|










|







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;

  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) {
    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
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_MBEDTLS) && !defined(MBEDTLS_MD4_C)) */







>

>

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
#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)
{
  md5_init(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)
{
  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)
{
  gcry_md_open(ctx, GCRY_MD_MD5, 0);
}

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)
{
  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 */







|




|






|













|




|






|







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)
{
  md5_init(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)
{
  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)
{
  gcry_md_open(ctx, GCRY_MD_MD5, 0);
}

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)
{
  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
}

static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
{
  CC_MD5_Final(digest, ctx);
}

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







|







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)

#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
 * 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 {


    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)

/* 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)

/* 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)

/* 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)

      a += saved_a;
    b += saved_b;
    c += saved_c;
    d += saved_d;

    ptr += 64;
  } while(size -= 64);








<









>
>







|
|
|
|
|
|
|
|
|
|
|
|
|
|
|


|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|


|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|


|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|







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;


  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)

/* 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)

/* 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)

/* 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)

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

  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;

    if(size < available) {
      memcpy(&ctx->buffer[used], data, size);
      return;
    }

    memcpy(&ctx->buffer[used], data, available);







|










|







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;

  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) {
    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
  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)
{
  (*context->md5_hash->md5_update_func)(context->md5_hashctx, data, len);

  return 0;
}

int 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;
}

#endif /* CURL_DISABLE_CRYPTO_AUTH */







|
|
|



|


|






|



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

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 CURLE_OK;
}

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 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
  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);
#endif
  }
}

/* This function sets the number of malloc() calls that should return
   successfully! */
void curl_dbg_memlimit(long limit)







|
|







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

  return NULL;
}

void curl_dbg_free(void *ptr, int line, const char *source)
{
  struct memdebug *mem;

  if(ptr) {


#ifdef __INTEL_COMPILER
#  pragma warning(push)
#  pragma warning(disable:1684)
   /* 1684: conversion from pointer to same-sized integral type */
#endif








<
<

>







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


  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
#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(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
#include <libgen.h>
#endif

#include "rand.h"
#include "slist.h"







|
|







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_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
  /* 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);
      break;
    case MIMESTATE_USERHEADERS:
      if(!hdr) {
        mimesetstate(&part->state, MIMESTATE_EOH, NULL);
        break;
      }
      if(match_header(hdr, "Content-Type", 12)) {







|
>
>
|







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);
      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
{
  (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;
}

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







<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
1897
1898
1899
1900
1901
1902
1903





1904































































{
  (void) part;
  (void) headers;
  (void) take_ownership;
  return CURLE_NOT_BUILT_IN;
}






#endif /* if disabled */































































Changes to jni/curl/lib/mime.h.
17
18
19
20
21
22
23


24
25
26
27
28
29
30
 * 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.
 *
 ***************************************************************************/



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







>
>







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
  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_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. */







|







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_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
  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. */
};




/* 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);















#endif /* HEADER_CURL_MIME_H */







>
>


















>
>
>
>
>
>
>
>
>
>
>
>
>
>

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







<







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 "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
  "CONNECT_PEND",
  "CONNECT",
  "WAITRESOLVE",
  "WAITCONNECT",
  "WAITPROXYCONNECT",
  "SENDPROTOCONNECT",
  "PROTOCONNECT",
  "WAITDO",
  "DO",
  "DOING",
  "DO_MORE",
  "DO_DONE",
  "WAITPERFORM",
  "PERFORM",
  "TOOFAST",
  "DONE",
  "COMPLETED",
  "MSGSENT",
};
#endif







<




<







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

  "DO",
  "DOING",
  "DO_MORE",
  "DO_DONE",

  "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
    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 */
  };








<




<







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

    Curl_connect_free, /* DO */
    NULL,              /* DOING */
    NULL,              /* DO_MORE */
    NULL,              /* DO_DONE */

    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

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







<
<
<







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




  /* -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
   */
  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 ||
     (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. */

  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 */
  }







<
<
<
<
<
<
<
<
<
<


|



















<
<
<
<
|
<







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











  /* for multi interface connections, we share DNS cache automatically if the
     easy handle's one is currently not set. */
  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





  /* 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
     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:







<
<







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;



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







<
<







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



  /* 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
    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, "
                 "no more multi_done now!\n",
                 conn->send_pipe.size, conn->recv_pipe.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 */







<
<
|
>
>
|

|







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



  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->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
     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)
#endif
#if defined(USE_SPNEGO)
      && !(conn->negotiate.state == GSS_AUTHRECV ||
           conn->proxyneg.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. */







|
|


|
|







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->http_ntlm_state == NTLMSTATE_TYPE2 ||
           conn->proxy_ntlm_state == NTLMSTATE_TYPE2)
#endif
#if defined(USE_SPNEGO)
      && !(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
      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)
{







<







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


  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

  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. */







<
<
<







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;



    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
      /* 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);








<
<
<







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);
    }



  }

  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
     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 (multi && (multi->pipelining & bits)) ? TRUE : FALSE;
}

/* 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)
{



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

  data->conn = conn;


}

static int waitconnect_getsock(struct connectdata *conn,
                               curl_socket_t *sock,
                               int numsocks)
{
  int i;







|
|

|






>
>
>








>

>
>







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 multiplexing */
bool Curl_multiplex_wanted(const struct Curl_multi *multi)
{
  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
  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,







<







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:

    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
  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.
 */
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;




  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;







|












>
>
>
















<
<







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.
 */
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.
 *


 * '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
  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;







<







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;

  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
         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 */
    }

    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)?
                                 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;
          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);
          }







|














|













|







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); /* 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_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 {
          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

        /* 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;
      }






      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(protocol_connect)
              multistate(data, Curl_pipeline_wanted(multi, CURLPIPE_HTTP1)?
                         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);
            }
          }
        }
      }
      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;


      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;








>
>
>
>
|
>

<
<
<
<
<
|
|
|
|
|
|
|
|

|
|
<
|

|
|
|

|
<












>







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





        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, 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);

          }
        }
      }
      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
        /* 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 */
        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)?
                       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);







|




|
<







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 */
          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, 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
      }
    }
    break;

#ifndef CURL_DISABLE_HTTP
    case CURLM_STATE_WAITPROXYCONNECT:
      /* this is HTTP-specific, but sending CONNECT to a proxy is HTTP... */

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







>







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
      else if(result)
        stream_error = TRUE;
      break;
#endif

    case CURLM_STATE_WAITCONNECT:
      /* awaiting a completion of an asynch TCP connect */

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







>







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
    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)?
                   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)?
                   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) {

            /* 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;
              }
            }

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







|
<















|
<








<
<
<
<
<
<
<
<
<


















>











>







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, 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, 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_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
          stream_error = TRUE;
        }
      }
      break;

    case CURLM_STATE_DOING:
      /* we continue DOING until the DO phase is complete */

      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:







>







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
      }
      break;

    case CURLM_STATE_DO_MORE:
      /*
       * When we are connected, DO MORE and then go DO_DONE
       */

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







>


<
<







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



      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
        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)
        /* Check if we can move pending requests to send pipe */
        process_pending_handles(multi); /*  pipelined/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);
      else {

        if(data->state.wildcardmatch &&
           ((data->conn->handler->flags & PROTOPT_WILDCARD) == 0)) {
           data->wildcard.state = CURLWC_DONE;
        }

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

      /* 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) {







<
<
|
|

|





|

>


|

>





<
<
<
<
<
<
<
<
<

>







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:


      DEBUGASSERT(data->conn);
      if(data->conn->bits.multiplex)
        /* Check if we can move pending requests to send pipe */
        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_PERFORM);
      else {
#ifndef CURL_DISABLE_FTP
        if(data->state.wildcardmatch &&
           ((data->conn->handler->flags & PROTOPT_WILDCARD) == 0)) {
          data->wildcard.state = CURLWC_DONE;
        }
#endif
        multistate(data, CURLM_STATE_DONE);
      }
      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
          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)) {
        CURLcode ret = Curl_retry_request(data->conn, &newurl);


        infof(data, "Forcing HTTP/1.1 for NTLM");
        data->set.httpversion = CURL_HTTP_VERSION_1_1;


        if(!ret)
          retry = (newurl)?TRUE:FALSE;
        else
          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;
        }


      }

      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







<
<
<
<
<
<
<
<
<
<
<
<



















|


>
|
|
|
>
|
<
<
|
|
<
|
|
>



>
>







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













      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)) {
        CURLcode ret = Curl_retry_request(data->conn, &newurl);

        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)


            /* typically for HTTP_1_1_REQUIRED error on first flight */
            newurl = strdup(data->change.url);

          /* 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
      }
      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;
            }
          }
          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







<
<
<
<
<
<
<













|
|
|
|
|
|
<







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








        /* 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;
          (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
    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)
          /* Check if we can move pending requests to connection */
          process_pending_handles(multi); /* pipelined/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
         * 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);
      }


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

      /* 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;







<
<
<
|

|









|








>








|







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;




        if(data->conn->bits.multiplex)
          /* Check if we can move pending requests to connection */
          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 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
        /* 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.







<
<
<
<
<
<







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(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
    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;
}








<
<
<
<
<
<







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(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
      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);







<
<
<
<
<
<
<
<
<
<
<
<
<







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(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
  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;
    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);
    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;







|













|
|

>
>
>

<


<


<
<


<
<
<
<
<







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

    break;
  case CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE:

    break;
  case CURLMOPT_PIPELINING_SITE_BL:


    break;
  case CURLMOPT_PIPELINING_SERVER_BL:





    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
}

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

curl_off_t Curl_multi_chunk_length_penalty_size(struct Curl_multi *multi)
{
  return multi ? multi->chunk_length_penalty_size : 0;
}

struct curl_llist *Curl_multi_pipelining_site_bl(struct Curl_multi *multi)
{

  return &multi->pipelining_site_bl;
}

struct curl_llist *Curl_multi_pipelining_server_bl(struct Curl_multi *multi)
{
  return &multi->pipelining_server_bl;
}

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



  }
}

void Curl_set_in_callback(struct Curl_easy *data, bool value)
{
  /* might get called when there is no data pointer! */
  if(data) {







<
>
>
>
|
|
<
|
<

|
<
|
<
<
>
|
|
|
<
<
|

















>
>
>







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


/*
 * When information about a connection has appeared, call this!
 */

void Curl_multiuse_state(struct connectdata *conn,

                         int bundlestate) /* use BUNDLE_* defines */

{
  DEBUGASSERT(conn);

  DEBUGASSERT(conn->bundle);


  DEBUGASSERT(conn->data);
  DEBUGASSERT(conn->data->multi);

  conn->bundle->multiuse = bundlestate;


  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

        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":"");
      }
      if(data->numsocks)
        fprintf(stderr, "\n");
    }
  }
}
#endif







|
|







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":"");
      }
      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
#ifndef HEADER_CURL_MULTIHANDLE_H
#define HEADER_CURL_MULTIHANDLE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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









|







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 - 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
  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_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 */
} 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)

/* 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;








<
|
|
|
|
<
|
|
|
|
|
|








|







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

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







|
|















<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<









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;

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



















  /* 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
 * 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);

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








<



>







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

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
  */
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);


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







<
<
<
<
<
<
<
<
<
<
<
<



|
>







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_MAX_TOTAL_CONNECTIONS option */
size_t Curl_multi_max_total_connections(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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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"


#ifdef HAVE_PWD_H
#include <pwd.h>
#endif

#include <curl/curl.h>
#include "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
/***************************************************************************
 *                                  _   _ ____  _
 *  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"
#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


        free(password);
    }
    fclose(file);
  }

  return retcode;
}









>
>
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
#ifndef HEADER_CURL_NETRC_H
#define HEADER_CURL_NETRC_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2011, 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.
 *
 ***************************************************************************/




/* 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.
   */





#endif /* HEADER_CURL_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
39
40
41
42
43
44
45
#ifndef HEADER_CURL_NETRC_H
#define HEADER_CURL_NETRC_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.
 *
 ***************************************************************************/

#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

  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








<
<
<







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");



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







<
<







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


      *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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
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
#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

















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







<
<
<
<
<
<
<
<
<
<
<
<
<
<

















>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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"















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

  t += tzoff;

  *output = t;

  return PARSEDATE_OK;
}










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








>
>
>
>
>
>
>
>
>







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

 * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
 *
 ***************************************************************************/

#include "curl_setup.h"

#ifndef CURL_DISABLE_POP3







>







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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
27
28
29
30
31
32
33

34
35
36
37
38
39
40
#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


/* 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, "--:--:--");







>







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
  else
    msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE);

#endif

  return max5;
}


/*

   New proposed interface, 9th of February 2000:

   pgrsStartNow() - sets start time
   pgrsSetDownloadSize(x) - known expected download size







>







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
  }
  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)
{
  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) */







<
<
<
<
>
|





<







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





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

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


    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;







>
>
|







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;

    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
    }
    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)) {
    /* 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,







|
>
>
>
>
|














<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







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(!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->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
    /* 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.size_ul:data->progress.uploaded)+
      (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))







|

|







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.size_ul:data->progress.uploaded)+
      ((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
            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 */
            );

    /* we flush the output stream to make it appear as soon as possible */
    fflush(data->set.err);















  } /* !(data->progress.flags & PGRS_HIDE) */































  return 0;
}







|
|



>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>


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])
      );

    /* we flush the output stream to make it appear as soon as possible */
    fflush(data->set.err);
  } /* don't show now */
}
#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
#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 */







<
<
<
<
<
<
<
<
<
<







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"











#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
            "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)







<







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

    }
  }

  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
  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 = "*";
  }







<
<







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



  /* 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
  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;
}







<







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 {

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







<







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 {

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







<





<







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

  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. */

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

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



    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;







<





<



<
<















>
>
>







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

  strcpy(buffer, buf);
  free(buf);
  return ret_code;
}


static int sec_set_protection_level(struct connectdata *conn)
{
  int code;


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







<







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)

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







<










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;

    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
  }

  /* Chop data, write chunks. */
  while(len) {
    size_t chunklen = len <= CURL_MAX_WRITE_SIZE? len: CURL_MAX_WRITE_SIZE;

    if(writebody) {


      size_t wrote = writebody(ptr, 1, chunklen, data->set.out);


      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!");







>
>
|
>







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);
      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
{
  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;
  }

  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,







<
<
<
<







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
|
<





<
<
<
<
<
<







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;





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





















  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;







  *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
     copy of `s'. Return CURLE_OK or CURLE_OUT_OF_MEMORY. */

  Curl_safefree(*charp);

  if(s) {
    char *str = strdup(s);








    if(!str)
      return CURLE_OUT_OF_MEMORY;

    *charp = str;
  }

  return CURLE_OK;







>
>
>
>
>
>
>







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

static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
                        va_list param)
{
  char *argptr;
  CURLcode result = CURLE_OK;
  long arg;

  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 */
    /* 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;

  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;

  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;

  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;

  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 *));







>










|
<
<
<
<






>





|









>









|







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:
    /* deprecated */




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

  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:
    /*
     * 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;

  case CURLOPT_TRANSFERTEXT:
    /*
     * This option was previously named 'FTPASCII'. Renamed to work with
     * more protocols than merely FTP.
     *
     * Transfer using ASCII (instead of BINARY).
     */







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<












>
















<
<
<
<
<
<
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
















>







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






#endif
#ifndef CURL_DISABLE_NETRC














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

  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;

  case CURLOPT_HEADEROPT:
    /*
     * Set header option.
     */
    arg = va_arg(param, long);
    data->set.sep_headers = (bool)((arg & CURLHEADER_SEPARATE)? TRUE: FALSE);
    break;







>













|







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

  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;

  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;







|








|







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







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
    /*
     * 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_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;







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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

  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;

  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;

  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;

  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;

  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;

  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;

  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;

  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;

  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;

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







>







>







>







>







>







>







>







>







>







>







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
    break;
  case CURLOPT_CRLF:
    /*
     * Kludgy option to enable CRLF conversions. Subject for removal.
     */
    data->set.crlf = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

  case CURLOPT_HAPROXYPROTOCOL:
    /*
     * Set to send the HAProxy Proxy Protocol header
     */
    data->set.haproxyprotocol = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

  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 *));







|






|







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







<
<
<
<
<
<
<
<







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

    /* Update the current connection ssl_config. */
    if(data->conn) {
      data->conn->ssl_config.verifypeer =
        data->set.ssl.primary.verifypeer;
    }
    break;

  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;

  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







>













>







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

    /* Update the current connection ssl_config. */
    if(data->conn) {
      data->conn->ssl_config.verifyhost =
        data->set.ssl.primary.verifyhost;
    }
    break;

  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







>







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

    /* Update the current connection proxy_ssl_config. */
    if(data->conn) {
      data->conn->proxy_ssl_config.verifyhost =
        data->set.proxy_ssl.primary.verifyhost;
    }
    break;

  case CURLOPT_SSL_VERIFYSTATUS:
    /*
     * Enable certificate status verifying.
     */
    if(!Curl_ssl_cert_status_request()) {
      result = CURLE_NOT_BUILT_IN;
      break;







>







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

  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;

  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;

  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;

  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;

  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;

  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;

  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;

  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;

  case CURLOPT_TELNETOPTIONS:
    /*
     * Set a linked list of telnet options
     */
    data->set.telnet_options = va_arg(param, struct curl_slist *);
    break;

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








>













>







>








>














>














>








>








>








>






|







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


  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;


  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;








>






<

<
<
<
<
<
<
<
<
<

>







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










#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
    /*
     * 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;








<
<
<
<
<











<
<
<
<
<







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

  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)
    /* 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:
    /*







|







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;

#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

  case CURLOPT_SSH_KEYDATA:
    /*
     * Custom client data to pass to the SSH keyfunc callback
     */
    data->set.ssh_keyfunc_userp = va_arg(param, void *);
    break;




#endif /* USE_LIBSSH2 */

  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;


  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;


  case CURLOPT_ADDRESS_SCOPE:
    /*

     * 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
     * typecast to this type
     */
    arg = va_arg(param, long);

    if((arg < 0) || (arg > 0xf))
      return CURLE_BAD_FUNCTION_ARGUMENT;

    data->set.scope_id = curlx_sltoui(arg);
    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. */







>
>
>
>
|















>



















>



>
|
|
<

|
>
|

>
|







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_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 so we should check
     * that the value fits into an unsigned 32 bit integer.

     */
    uarg = va_arg(param, unsigned long);
#if SIZEOF_LONG > 4
    if(uarg > UINT_MAX)
      return CURLE_BAD_FUNCTION_ARGUMENT;
#endif
    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
    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;

  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;


  case CURLOPT_SASL_IR:
    /* Enable/disable SASL initial response */
    data->set.sasl_ir = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

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







|
















>





|







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


  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;

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







|
>


















>







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

  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;

  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;







>












|







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

  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;

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







>






|







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

  case CURLOPT_DNS_SHUFFLE_ADDRESSES:
    data->set.dns_shuffle_addresses = (0 != va_arg(param, long)) ? TRUE:FALSE;
    break;

  case CURLOPT_DISALLOW_USERNAME_IN_URL:
    data->set.disallow_username_in_url =
      (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

  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;

  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_TRAILERFUNCTION:
#ifndef CURL_DISABLE_HTTP
    data->set.trailer_callback = va_arg(param, curl_trailer_callback);
#endif
    break;
  case CURLOPT_TRAILERDATA:
#ifndef CURL_DISABLE_HTTP







<
<
<






>



>




>





>






>
>
>
>
>
>







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

 * Draft   SMTP URL Interface   <draft-earhart-url-smtp-00.txt>
 * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
 *
 ***************************************************************************/

#include "curl_setup.h"








>







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
       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);
      len = SMTP_EOB_LEN - 2;
    }
    else {
      eob = strdup(SMTP_EOB);
      len = SMTP_EOB_LEN;
    }








|







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]);
      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
      pp->response = Curl_now();

      free(eob);
    }

    state(conn, SMTP_POSTDATA);

    /* 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;







|
<
<
<
<
<







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





    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

  /* 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);

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







|







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, 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
     * 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.");
      return CURLE_COULDNT_CONNECT;
    }

    /* Result */
    switch(socksreq[1]) {
    case 90:
      infof(data, "SOCKS4%s request granted.\n", protocol4a?"a":"");







|







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 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
     * +----+------+----------+------+----------+
     * | 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)





      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)





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







|
>
>
>
>
>

>


|
>
>
>
>
>

>







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) {
      /* 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) {
      /* 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
    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);

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







|







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, 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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1997 - 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * 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
  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.
 * 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
 */







|







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!
 * 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
     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);
    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;
    }







<






|







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;


  /* 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) {
    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
      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;
      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);
    }

  }








<
|
<







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 fd_read = conn->sock[FIRSTSOCKET];

      /* 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
 */
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. */







<







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;


  /* 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
                    "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);
    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,







|
|







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]) {
    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
   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

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







|
<
<
<
<
<







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





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







<
<
<
<







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





  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

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. */

    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.







<






>







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


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




          /* 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);
              }
            }

          }
          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");







<




<
<
<
<



>
>
>
>















>







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

        bool out_of_memory = FALSE;

        sshc->rsa_pub = sshc->rsa = NULL;





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







<











<
<







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

          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 = "";



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

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







|
<
<
<
<
<







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





    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
   * 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->requested_blksize = blksize;

  ((struct sockaddr *)&state->local_addr)->sa_family =
    (CURL_SA_FAMILY_T)(conn->ip_addr->ai_family);

  tftp_set_timeouts(state);








|







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 = 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
  /*
  ** 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.
  */

  struct timeval now;

  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.







>

>







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




    /* 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) {







<
<
<
<
<
<


<
















>
>
>
>







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;







  curl_read_callback readfunc = NULL;
  void *extra_data = NULL;


#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
       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] = "";
    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) {

      hexlen = msnprintf(hexbuffer, sizeof(hexbuffer),
                         "%zx%s", nread, endofline_native);

      /* move buffer pointer */
      data->req.upload_fromhere -= hexlen;
      nread += hexlen;








|




















>







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.
     */

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







<







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

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







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







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
}

/*
 * 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
          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
         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! */







|
<
<







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


      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
    /* 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) {
      /* 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;
    }








|







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 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
          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,
                  "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);
          }
        }

        break;
      }
    }
#endif /* CURL_DISABLE_HTTP */








<
|
<
<
<
<
<
<
<
|
|
|
|
<







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

          infof(data,







                "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
        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,
                  "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);
          }
        }

        nread = (ssize_t) (k->maxdownload - k->bytecount);
        if(nread < 0) /* this should be unusual */
          nread = 0;

        k->keepon &= ~KEEP_RECV; /* we're done reading */







<
<






<
<
<
<
<


















<
|
<
<
<
<
<
<
<
<
<
<
|
|
|
|
|
|
<







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.


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

          infof(data,










                "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

    /* 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;


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

  }

  return result;
}

/*
 * Curl_posttransfer() is called immediately after a transfer ends







>








>







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







<






<







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 "socks.h"
#include "curl_rtmp.h"
#include "gopher.h"
#include "http_proxy.h"
#include "conncache.h"
#include "multihandle.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
  &Curl_handler_file,
#endif

#ifndef CURL_DISABLE_TFTP
  &Curl_handler_tftp,
#endif

#if defined(USE_LIBSSH2) || defined(USE_LIBSSH)
  &Curl_handler_scp,
#endif

#if defined(USE_LIBSSH2) || defined(USE_LIBSSH)
  &Curl_handler_sftp,
#endif

#ifndef CURL_DISABLE_IMAP
  &Curl_handler_imap,
#ifdef USE_SSL
  &Curl_handler_imaps,







|



|







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_SSH)
  &Curl_handler_scp,
#endif

#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
  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);
  data->state.uh = NULL;
}

/*
 * This is the internal function curl_easy_cleanup() calls. This should
 * cleanup and free all resources associated with this sessionhandle.
 *







<
|







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

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

  Curl_digest_cleanup(data);

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







>
|
>







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

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

  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;

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







>




|







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
  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->http09_allowed = TRUE;
  set->httpversion =
#ifdef USE_NGHTTP2
    CURL_HTTP_VERSION_2TLS
#else
    CURL_HTTP_VERSION_1_1
#endif







>







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







<
<
<
<
<







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]);






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







<



<
|
<
<







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->connect_state);

  conn_reset_all_postponed_data(conn);

  Curl_llist_destroy(&conn->easyq, 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
    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);
#endif
#if !defined(CURL_DISABLE_HTTP) && defined(USE_SPNEGO)
  /* Cleanup NEGOTIATE connection-related data */
  Curl_cleanup_negotiate(conn);
#endif

  /* the protocol specific disconnect handler and conn_shutdown need a transfer
     for the connection! */
  conn->data = data;





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







|



|





>
>
>
>







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_auth_cleanup_ntlm(conn);
#endif
#if !defined(CURL_DISABLE_HTTP) && defined(USE_SPNEGO)
  /* Cleanup NEGOTIATE connection-related data */
  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
    /* timeout */
    ret_val = FALSE;

  return ret_val;
}

/*
 * IsPipeliningPossible()
 *
 * Return a bitmask with the available pipelining and multiplexing options for
 * the given requested connection.
 */
static int IsPipeliningPossible(const struct Curl_easy *handle,
                                const struct connectdata *conn)
{
  int avail = 0;

  /* If a HTTP protocol and pipelining is enabled */
  if((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
     (!conn->bits.protoconnstart || !conn->bits.close)) {

    if(Curl_pipeline_wanted(handle->multi, CURLPIPE_HTTP1) &&
       (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;

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





/*
 * 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
       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;







|

|
|

|
|



|



|
<
<
<
<
<
<
<







<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<











>
>
>
>













<
|
|
<







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

/*
 * IsMultiplexingPossible()
 *
 * Return a bitmask with the available multiplexing options for the given
 * requested connection.
 */
static int IsMultiplexingPossible(const struct Curl_easy *handle,
                                  const struct connectdata *conn)
{
  int avail = 0;

  /* If a HTTP protocol and multiplexing is enabled */
  if((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
     (!conn->bits.protoconnstart || !conn->bits.close)) {

    if(Curl_multiplex_wanted(handle->multi) &&







       (handle->set.httpversion >= CURL_HTTP_VERSION_2))
      /* allows HTTP/2 */
      avail |= CURLPIPE_MULTIPLEX;
  }
  return avail;
}







#ifndef CURL_DISABLE_PROXY







































































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

  if(!CONN_INUSE(conn) && !conn->data) {
    /* The check for a dead socket makes sense only if the connection isn't 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
      /* disconnect it */
      (void)Curl_disconnect(data, prune.extracted, /* dead_connection */TRUE);
    }
    data->state.conn_cache->last_cleanup = now;
  }
}




static size_t max_pipeline_length(struct Curl_multi *multi)


{







  return multi ? multi->max_pipeline_length : 0;
}



/*
 * 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 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);
  struct connectbundle *bundle;


#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")));

    /* We can't pipeline if we don't know anything about the server */
    if(canpipe) {
      if(bundle->multiuse <= BUNDLE_UNKNOWN) {
        if((bundle->multiuse == BUNDLE_UNKNOWN) && data->set.pipewait) {
          infof(data, "Server doesn't support multi-use 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;
      }
      if((bundle->multiuse == BUNDLE_PIPELINING) &&
         !Curl_pipeline_wanted(data->multi, CURLPIPE_HTTP1)) {
        /* not asked for, switch off */
        infof(data, "Could pipeline, but not asked to!\n");
        canpipe = 0;
      }
      else if((bundle->multiuse == BUNDLE_MULTIPLEX) &&
              !Curl_pipeline_wanted(data->multi, CURLPIPE_MULTIPLEX)) {
        infof(data, "Could multiplex, but not asked to!\n");
        canpipe = 0;
      }
    }

    curr = bundle->conn_list.head;
    while(curr) {
      bool match = FALSE;
      size_t pipeLen;

      /*
       * 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)) {
        /* disconnect it */
        (void)Curl_disconnect(data, check, /* dead_connection */TRUE);
        continue;
      }

      pipeLen = check->send_pipe.size + check->recv_pipe.size;


      if(canpipe) {
        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) {
          /* 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







>
>

|
>
>

>
>
>
>
>
>
>
|
|
|
>
|









|
<











|

>














<
<
<
<
<





<
<
<





<
<
|
|

|
|
|

|





|
|

|
|
<
|
|

|
<
|
|






|












|





|
>

|


|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

|







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

 */
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;
  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;






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



    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_MULTIPLEX ?
           "can multiplex" : "serially"));

    /* 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 multiplex yet, wait\n");
          *waitpipe = TRUE;
          Curl_conncache_unlock(data);
          return FALSE; /* no re-use */
        }

        infof(data, "Server doesn't support multiplex (yet)\n");
        canmultiplex = FALSE;
      }
      if((bundle->multiuse == BUNDLE_MULTIPLEX) &&
         !Curl_multiplex_wanted(data->multi)) {

        infof(data, "Could multiplex, but not asked to!\n");
        canmultiplex = FALSE;
      }
      if(bundle->multiuse == BUNDLE_NO_MULTIUSE) {

        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 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(conn_maxage(data, check, now) || extract_if_dead(check, data)) {
        /* disconnect it */
        (void)Curl_disconnect(data, check, /* dead_connection */TRUE);
        continue;
      }

      multiplexed = CONN_INUSE(check) &&
        (bundle->multiuse == BUNDLE_MULTIPLEX);

      if(canmultiplex) {
        if(check->bits.protoconnstart && check->bits.close)
          continue;
      }















      else {
        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
           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)







<
<
<
<
<
<
<







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







          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
              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
           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 */
        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.








|
|





|
|







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(!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 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
           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) {
          /* 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) {
          /* 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)) ||
              (wantProxyNTLMhttp &&
               (check->proxyntlm.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
             blacklisted. */

          if(pipeLen == 0) {
            /* 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) {
              infof(data, "MAX_CONCURRENT_STREAMS reached, skip (%zu)\n",
                    pipeLen);
              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;
          }
        }
        else {
          /* We have found a connection. Let's stop searching. */
          chosen = check;
          break;
        }
      }







|















|









|

|









|
|
|
<

|





<
<
<
<
<





|

|




<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
|
|
|
<







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->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->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->http_ntlm_state != NTLMSTATE_NONE)) ||
              (wantProxyNTLMhttp &&
               (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(canmultiplex) {
          /* We can multiplex if we want to. Let's continue looking for
             the optimal connection to use. */


          if(!multiplexed) {
            /* We have the optimal connection. Let's stop looking. */
            chosen = check;
            break;
          }






#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(multiplexed >= httpc->settings.max_concurrent_streams) {
              infof(data, "MAX_CONCURRENT_STREAMS reached, skip (%zu)\n",
                    multiplexed);
              continue;
            }
          }
#endif
















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

  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

  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;

  conn->bits.ftp_use_epsv = data->set.ftp_use_epsv;
  conn->bits.ftp_use_eprt = data->set.ftp_use_eprt;

  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);
  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]) {







|
<
<
<
<
<
<
<
<
<




















<



>


|













<
<
<


<
<
<
<
<
<
<
<
|
|
<







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;

#if !defined(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;



#endif









  /* Initialize the easy handle list */
  Curl_llist_init(&conn->easyq, (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
     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->recv_pipe, NULL);

  free(conn->master_buffer);
  free(conn->localdev);
#ifdef USE_SSL
  free(conn->ssl_extra);
#endif
  free(conn);
  return NULL;
}







|
<
<
<







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->easyq, NULL);



  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
  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;
  }
  else {
    uh = data->state.uh = curl_url();
  }

  if(!uh)
    return CURLE_OUT_OF_MEMORY;







|







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

  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
       scope. */
    char *percent = strchr(++hostname, '%');


    conn->bits.ipv6_ip = TRUE;
    if(percent) {
      unsigned int identifier_offset = 3;




      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 == ']') {
        /* The address scope was well formed.  Knock it out of the
           hostname. */
        memmove(percent, endp, strlen(endp) + 1);
        conn->scope_id = (unsigned int)scope;
      }

      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));
          }
        }
        if(scopeidx > 0) {
          char *p = percent + identifier_offset + strlen(ifname);

          /* 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");
      }


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







|

|
>
>

|
|
>
>
>
>


<
<
<
<
<
|
|
<
|
<


>


<
<
<

<
<
<
<
<
<
<
|
|
|
|
<
<
<
<
|
<
<

|
<
<
<

>
>

<
<
<
<







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
       scope. */
    char *zoneid;
    size_t hlen;
    uc = curl_url_get(uh, CURLUPART_ZONEID, &zoneid, 0);
    conn->bits.ipv6_ip = TRUE;

    /* cut off the brackets! */
    hostname++;
    hlen = strlen(hostname);
    hostname[hlen - 1] = 0;
    if(!uc && zoneid) {
      char *endp;
      unsigned long scope;





      scope = strtoul(zoneid, &endp, 10);
      if(!*endp && (scope < UINT_MAX)) {

        /* A plain number, use it direcly as a scope id. */

        conn->scope_id = (unsigned int)scope;
      }
#ifdef HAVE_IF_NAMETOINDEX
      else {
        /* Zone identifier is not numeric */



        unsigned int scopeidx = 0;







        scopeidx = if_nametoindex(zoneid);
        if(!scopeidx)
          infof(data, "Invalid zoneid id: %s; %s\n", zoneid,
                strerror(errno));




        else


          conn->scope_id = scopeidx;




      }
#endif /* HAVE_IF_NAMETOINDEX */
      free(zoneid);
    }




  }

  /* 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
 * 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;

  bool sockstype;






  /* We do the proxy host string parsing here. We want the host name and the








   * port name. Accept a protocol:// prefix
   */

  /* Parse the protocol part if present */
  endofprot = strstr(proxy, "://");
  if(endofprot) {
    proxyptr = endofprot + 3;
    if(checkprefix("https", proxy))
      proxytype = CURLPROXY_HTTPS;
    else if(checkprefix("socks5h", proxy))
      proxytype = CURLPROXY_SOCKS5_HOSTNAME;
    else if(checkprefix("socks5", proxy))
      proxytype = CURLPROXY_SOCKS5;
    else if(checkprefix("socks4a", proxy))
      proxytype = CURLPROXY_SOCKS4A;

    else if(checkprefix("socks4", proxy) || checkprefix("socks", proxy))
      proxytype = CURLPROXY_SOCKS4;
    else if(checkprefix("http:", proxy))
      ; /* 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;

    }
  }
  else
    proxyptr = proxy; /* No xxx:// head: It's a HTTP proxy */





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

    }


  sockstype = proxytype == CURLPROXY_SOCKS5_HOSTNAME ||
              proxytype == CURLPROXY_SOCKS5 ||
              proxytype == CURLPROXY_SOCKS4A ||
              proxytype == CURLPROXY_SOCKS4;




  /* Is there a username and password given in this proxy url? */
  atsign = strchr(proxyptr, '@');
  if(atsign) {
    CURLcode result =
      Curl_parse_login_details(proxyptr, atsign - proxyptr,
                               &proxyuser, &proxypasswd, NULL);
    if(result)
      return result;
    proxyptr = atsign + 1;
  }

  /* start scanning for port number at this point */
  portptr = proxyptr;

  /* detect and extract RFC6874-style IPv6-addresses */
  if(*proxyptr == '[') {
    char *ptr = ++proxyptr; /* advance beyond the initial bracket */
    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 == ']')
      /* yeps, it ended nicely with a bracket as well */
      *ptr++ = 0;
    else
      infof(data, "Invalid IPv6 address format\n");
    portptr = ptr;
    /* 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 */
  prox_portno = strchr(portptr, ':');
  if(prox_portno) {
    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;
  }
  else {
    if(proxyptr[0]=='/') {
      /* 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);
      Curl_safefree(proxypasswd);
      return CURLE_COULDNT_RESOLVE_PROXY;
    }

    /* 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;
    }

    /* 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)
      return CURLE_OUT_OF_MEMORY;
  }

  Curl_safefree(proxyuser);
  Curl_safefree(proxypasswd);

  return CURLE_OK;
}

/*
 * Extract the user and password from the authentication string
 */
static CURLcode parse_proxy_auth(struct Curl_easy *data,
                                 struct connectdata *conn)







<
<
<
<
<

<



>

>
>
>
>
>

|
>
>
>
>
>
>
>
>
|
<
|
|
<
<
<
|

|

|

|

>
|

|




|
>


|
<
>
>
>
>







|
>


>
|
|
|
|
>
>
>


|
<
<
<
|
<
<
|
<
|
<
|
|
<
|
|
<
<
<
<
<
<
<
<
<
<
<
<
|
<
|
<
<
|
<
<
<
<
|
|
|
<
|
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
|
|
<
|
<
<
<
>
|
<
<
|
|
<
<
<
<
<
<











<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
|
|
|
|

|
>
>
>
>
>
|
|
>
>
>
>
|
|
|
<
|
|
|
<
|
|







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 *portptr;

  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;

  /* 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;

    }




    if(strcasecompare("https", scheme))
      proxytype = CURLPROXY_HTTPS;
    else if(strcasecompare("socks5h", scheme))
      proxytype = CURLPROXY_SOCKS5_HOSTNAME;
    else if(strcasecompare("socks5", scheme))
      proxytype = CURLPROXY_SOCKS5;
    else if(strcasecompare("socks4a", scheme))
      proxytype = CURLPROXY_SOCKS4A;
    else if(strcasecompare("socks4", scheme) ||
            strcasecompare("socks", scheme))
      proxytype = CURLPROXY_SOCKS4;
    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);
      result = CURLE_COULDNT_CONNECT;
      goto error;
    }
  }
  else {

    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);
      result = CURLE_NOT_BUILT_IN;
      goto error;
    }

  sockstype =
    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? */
  curl_url_get(uhp, CURLUPART_USER, &proxyuser, CURLU_URLDECODE);



  curl_url_get(uhp, CURLUPART_PASSWORD, &proxypasswd, CURLU_URLDECODE);


  if(proxyuser || proxypasswd) {

    Curl_safefree(proxyinfo->user);

    proxyinfo->user = proxyuser;
    Curl_safefree(proxyinfo->passwd);

    if(!proxypasswd) {
      proxypasswd = strdup("");












      if(!proxypasswd) {

        result = CURLE_OUT_OF_MEMORY;


        goto error;




      }
    }
    proxyinfo->passwd = proxypasswd;

    conn->bits.proxy_user_passwd = TRUE; /* enable it */

  }















  curl_url_get(uhp, CURLUPART_PORT, &portptr, 0);


  if(portptr) {



    port = strtol(portptr, NULL, 10);
    free(portptr);


  }
  else {






    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(port >= 0) {
    proxyinfo->port = port;
    if(conn->port < 0 || sockstype || !conn->socks_proxy.host.rawalloc)
      conn->port = port;
  }

  /* 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;


  error:
  free(scheme);

  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
  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->recv_pipe, NULL);

  Curl_safefree(old_conn->master_buffer);

#ifdef USE_UNIX_SOCKETS
  Curl_safefree(old_conn->unix_domain_socket);
#endif
}

/**







<
|
<
<
<







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->easyq, NULL);




#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
  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);

      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");







|
|
|
|
|
|







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 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
      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
         "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);








|







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 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
  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 */
      *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)
    /* FILE: transfers already have the connection attached */
    Curl_attach_connnection(data, conn);

  return result;
}

/*







|

















|







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))
      /* 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(!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
                          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,
                               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 */







<
<
<
<
<
|
<
<







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





void Curl_close_connections(struct Curl_easy *data);


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
#ifndef HEADER_CURL_URLAPI_INT_H
#define HEADER_CURL_URLAPI_INT_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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"
/* scheme is not URL encoded, the longest libcurl supported ones are 6
   letters */
#define MAX_SCHEME_LEN 8

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









|














|
<
|











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 - 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... */

#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
/* 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 *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->port);
  free(u->path);
  free(u->query);
  free(u->fragment);
  free(u->scratch);
}








>


















>







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
   */
  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(']' != endbracket)
          return CURLUE_MALFORMED_INPUT;
        portptr = &hostname[--zonelen + len + 1];
      }
      else
        return CURLUE_MALFORMED_INPUT;
    }







|







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, "%*[^]]%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
      /* 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)
{
  const char *l = NULL; /* accepted characters */
  size_t len;
  size_t hlen = strlen(hostname);
  (void)flags;

  if(hostname[0] == '[') {
    hostname++;
    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;











  }
  else {
    /* letters from the second string is not ok */
    len = strcspn(hostname, " ");
    if(hlen != len)
      /* hostname with bad content */
      return CURLUE_MALFORMED_INPUT;
  }


  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 *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);




  path = u->scratch = malloc(urllen * 2 + 2);
  if(!path)
    return CURLUE_OUT_OF_MEMORY;

  hostname = &path[urllen + 1];
  hostname[0] = 0;








|




<



|






|
|
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>








>
>














|













>
>
>
>







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(struct Curl_URL *u, char *hostname)
{
  const char *l = NULL; /* accepted characters */
  size_t len;
  size_t hlen = strlen(hostname);


  if(hostname[0] == '[') {
    hostname++;
    l = "0123456789abcdefABCDEF::.";
    hlen -= 2;
  }

  if(l) {
    /* only valid letters are ok */
    len = strspn(hostname, l);
    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 + 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
    if(result)
      return result;

    result = Curl_parse_port(u, hostname);
    if(result)
      return result;

    result = hostname_check(hostname, flags);
    if(result)
      return result;

    u->host = strdup(hostname);
    if(!u->host)
      return CURLUE_OUT_OF_MEMORY;
  }







|







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(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
  case CURLUPART_OPTIONS:
    ptr = u->options;
    ifmissing = CURLUE_NO_OPTIONS;
    break;
  case CURLUPART_HOST:
    ptr = u->host;
    ifmissing = CURLUE_NO_HOST;



    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







>
>
>







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
    ifmissing = CURLUE_NO_FRAGMENT;
    break;
  case CURLUPART_URL: {
    char *url;
    char *scheme;
    char *options = u->options;
    char *port = u->port;

    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)







>







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
          if(h && (h->defport == u->portnum) &&
             (flags & CURLU_NO_DEFAULT_PORT))
            port = NULL;
        }
      }
      if(h && !(h->flags & PROTOPT_URLOPTIONS))
        options = NULL;













      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,
                    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 : "");

    }
    if(!url)
      return CURLUE_OUT_OF_MEMORY;
    *part = url;
    return CURLUE_OK;
  }
  default:







>
>
>
>
>
>
>
>
>
>
>
>









|








>







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) ? "@": "",
                    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
      break;
    case CURLUPART_OPTIONS:
      storep = &u->options;
      break;
    case CURLUPART_HOST:
      storep = &u->host;
      break;



    case CURLUPART_PORT:

      storep = &u->port;
      break;
    case CURLUPART_PATH:
      storep = &u->path;
      break;
    case CURLUPART_QUERY:
      storep = &u->query;







>
>
>

>







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
      *storep = NULL;
    }
    return CURLUE_OK;
  }

  switch(what) {
  case CURLUPART_SCHEME:



    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;


    break;



  case CURLUPART_PORT:


    urlencode = FALSE; /* never */
    port = strtol(part, NULL, 10);  /* Port number must be decimal */
    if((port <= 0) || (port > 0xffff))
      return CURLUE_BAD_PORT_NUMBER;



    storep = &u->port;

    break;
  case CURLUPART_PATH:
    urlskipslash = TRUE;
    storep = &u->path;
    break;
  case CURLUPART_QUERY:
    plusencode = urlencode;
    appendquery = (flags & CURLU_APPENDQUERY)?1:0;







>
>
>


















>
>

>
>
>

>
>

|


>
>
>

>
|







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, &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;
  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
     * replace it.
     */
    CURLUcode result;
    char *oldurl;
    char *redired_url;
    CURLU *handle2;

    if(Curl_is_absolute_url(part, NULL, MAX_SCHEME_LEN)) {
      handle2 = curl_url();
      if(!handle2)
        return CURLUE_OUT_OF_MEMORY;
      result = parseurl(part, handle2, flags);
      if(!result)
        mv_urlhandle(handle2, u);
      else







|







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 + 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
  default:
    return CURLUE_UNKNOWN_PART;
  }
  if(storep) {
    const char *newp = part;
    size_t nalloc = strlen(part);





    if(urlencode) {
      const 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;
        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++) {
        if(Curl_isunreserved(*i) ||
           ((*i == '/') && urlskipslash) ||
           ((*i == '=') && equalsencode) ||
           ((*i == '+') && plusencode)) {
          if((*i == '=') && equalsencode)
            /* only skip the first equals sign */
            equalsencode = FALSE;







>
>
>
>

|







|










|







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 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 = (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 = (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
        strcpy(&p[querylen + addamperand], newp); /* new suffix */
        free((char *)newp);
        free(*storep);
        *storep = p;
        return CURLUE_OK;
      }
    }








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







>
>
>
>
>
>
>










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





#include "cookie.h"
#include "psl.h"
#include "formdata.h"

#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif







>
>
>
>







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







<
<
<
<







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





/* 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
  NTLMSTATE_NONE,
  NTLMSTATE_TYPE1,
  NTLMSTATE_TYPE2,
  NTLMSTATE_TYPE3,
  NTLMSTATE_LAST
} curlntlm;









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







>
>
>
>
>
>
>
>







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







<







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 {

#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
  unsigned char nonce[8];
  void *target_info; /* TargetInfo received in the ntlm type-2 message */
  unsigned int target_info_len;
#endif
};
#endif


#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







>


<
<
<
<
<







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 {





#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
                          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. */

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

  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. */







>







>







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
  /* '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. */

  struct dohdata doh; /* DoH specific data for this request */

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







>

>







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
     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
     other easy handle without careful consideration (== only for
     pipelining/multiplexing) and it cannot be used by another multi
     handle! */
#define CONN_INUSE(c) ((c)->send_pipe.size + (c)->recv_pipe.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







|

|
<
|







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 still used by one or more easy handles and can only used by any
     other easy handle without careful consideration (== only for
     multiplexing) and it cannot be used by another multi handle! */

#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
  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 */

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







>







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
  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?? */


  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)



  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



  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;








<
<
<
<
<
<
<
<
|
<









>
>
>















>
>
>







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

/* Timers */
typedef enum {
  EXPIRE_100_TIMEOUT,
  EXPIRE_ASYNC_NAME,
  EXPIRE_CONNECTTIMEOUT,
  EXPIRE_DNS_PER_NAME,

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







>







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







<







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

};


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







>







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
  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)
  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 */







|







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 */
#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
  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 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 */







>
>







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

  curl_ftpfile ftp_filemethod; /* how to get to a file when FTP is used  */



  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;







>

>
>
>









<
<







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! */


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

  bit ftp_use_port:1;     /* use the FTP PORT command */






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







>

>
>
>
>
>
>

















<
<
<


<


<
<

















|
|

















<







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 no_signal:1;      /* do not use any signal/alarm handler */

  bit tcp_nodelay:1;    /* whether to enable TCP_NODELAY or not */
  bit ignorecl:1;       /* ignore content length */


  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 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_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
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 */

  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







|
|







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

  struct WildcardData wildcard; /* wildcard download state info */

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







>

>







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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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.
 *
 * RFC4616 PLAIN authentication
 * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
 *
 ***************************************************************************/

#include "curl_setup.h"




#include <curl/curl.h>
#include "urldata.h"

#include "vauth/vauth.h"
#include "curl_base64.h"
#include "curl_md5.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
/***************************************************************************
 *                                  _   _ ____  _
 *  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.
 *
 * 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
 *
 * 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.
 * 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,
                                        char **outptr, size_t *outlen)
{
  CURLcode result;
  char *plainauth;
  size_t ulen;

  size_t plen;
  size_t plainlen;

  *outlen = 0;
  *outptr = NULL;

  ulen = strlen(userp);
  plen = strlen(passwdp);

  /* Compute binary message length. Check for overflows. */
  if((ulen > SIZE_T_MAX/4) || (plen > (SIZE_T_MAX/2 - 2)))
    return CURLE_OUT_OF_MEMORY;
  plainlen = 2 * ulen + plen + 2;

  plainauth = malloc(plainlen);
  if(!plainauth)
    return CURLE_OUT_OF_MEMORY;

  /* Calculate the reply */

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

  /* Base64 encode the reply */
  result = Curl_base64_encode(data, plainauth, plainlen, outptr, outlen);
  free(plainauth);

  return result;
}







|
>
|







|
>
|




|
>





>
|
|


|

|






>
|
|
|
|
|







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.
 * 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 *authzid,
                                        const char *authcid,
                                        const char *passwd,
                                        char **outptr, size_t *outlen)
{
  CURLcode result;
  char *plainauth;
  size_t zlen;
  size_t clen;
  size_t plen;
  size_t plainlen;

  *outlen = 0;
  *outptr = NULL;
  zlen = (authzid == NULL ? 0 : strlen(authzid));
  clen = strlen(authcid);
  plen = strlen(passwd);

  /* Compute binary message length. Check for overflows. */
  if(((zlen + clen) > SIZE_T_MAX/4) || (plen > (SIZE_T_MAX/2 - 2)))
    return CURLE_OUT_OF_MEMORY;
  plainlen = zlen + clen + plen + 2;

  plainauth = malloc(plainlen);
  if(!plainauth)
    return CURLE_OUT_OF_MEMORY;

  /* Calculate the reply */
  if(zlen != 0)
    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


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);
}









>
>
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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
  */

  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.
       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);







|
<







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

    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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2014 - 2017, 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * 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
  /* Free the message buffer */
  free(message);

  return result;
}

/*
 * Curl_auth_gssapi_cleanup()
 *
 * 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)
{
  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;







|








|







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_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_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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2014 - 2017, 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * 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
  free(message);
  free(trailer);

  return result;
}

/*
 * Curl_auth_gssapi_cleanup()
 *
 * 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)
{
  /* Free our security context */
  if(krb5->context) {
    s_pSecFn->DeleteSecurityContext(krb5->context);
    free(krb5->context);
    krb5->context = NULL;
  }







|








|







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_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_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
                                         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);

#if defined(USE_NTRESPONSES) && defined(USE_NTLM2SESSION)
#define NTLM2FLAG NTLMFLAG_NEGOTIATE_NTLM2_KEY
#else
#define NTLM2FLAG 0
#endif
  msnprintf((char *)ntlmbuf, NTLM_BUFSIZE,







|







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_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
                                   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);

  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)
{
  /* Free the target info */
  Curl_safefree(ntlm->target_info);

  /* Reset any variables */
  ntlm->target_info_len = 0;
}

#endif /* USE_NTLM && !USE_WINDOWS_SSPI */







|





|
|
|
|
|
|
|
|
|
|









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_cleanup_ntlm(ntlm);

  return result;
}

/*
 * 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
  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);

  /* 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;








|







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_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
    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);

  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)
{
  /* Free our security context */
  if(ntlm->context) {
    s_pSecFn->DeleteSecurityContext(ntlm->context);
    free(ntlm->context);
    ntlm->context = NULL;
  }







|





|








|







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_cleanup_ntlm(ntlm);

  return result;
}

/*
 * 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 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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2016, 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"




#include <curl/curl.h>
#include "urldata.h"

#include "vauth/vauth.h"
#include "curl_base64.h"
#include "warnless.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
/***************************************************************************
 *                                  _   _ ____  _
 *  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.
 *
 * 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







































 * 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).
 * 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,
                    bearer);
  else
    oauth = aprintf("user=%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;
}














































|
|


















<
<
|
|


|











>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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.
 * 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(port == 0 || port == 80)
    oauth = aprintf("n,a=%s,\1host=%s\1auth=Bearer %s\1\1", user, host,
                    bearer);
  else
    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
  (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);
    return CURLE_LOGIN_DENIED;
  }

  if(!nego->spn) {
    /* Generate our SPN */
    char *spn = Curl_auth_build_spn(service, NULL, host);
    if(!spn)







|







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_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
  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;
  }

  if(!output_token.value || !output_token.length) {
    if(output_token.value)
      gss_release_buffer(&unused_status, &output_token);

    return CURLE_OUT_OF_MEMORY;







|







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_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
    return CURLE_REMOTE_ACCESS_DENIED;
  }

  return CURLE_OK;
}

/*
 * Curl_auth_spnego_cleanup()
 *
 * 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)
{
  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;







|








|







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_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_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
  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 */







<







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->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
  (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);
    return CURLE_LOGIN_DENIED;
  }

  if(!nego->spn) {
    /* Generate our SPN */
    nego->spn = Curl_auth_build_spn(service, host, NULL);
    if(!nego->spn)







|







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_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
    return CURLE_REMOTE_ACCESS_DENIED;
  }

  return CURLE_OK;
}

/*
 * Curl_auth_spnego_cleanup()
 *
 * 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)
{
  /* Free our security context */
  if(nego->context) {
    s_pSecFn->DeleteSecurityContext(nego->context);
    free(nego->context);
    nego->context = NULL;
  }







|








|







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_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_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
  /* 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 */







<







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->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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2014 - 2016, 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * 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

  /* 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.
*/
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, "\\/@");







|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|







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:
 *
 * 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
#ifndef HEADER_CURL_VAUTH_H
#define HEADER_CURL_VAUTH_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2014 - 2017, 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









|







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 - 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
#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,
                                        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);








|
>
|







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 *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
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);
#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);







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







|









>
>
>
>
>
>
>







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_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
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);
#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







|







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_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
/* 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);

#endif /* USE_SPNEGO */

#endif /* HEADER_CURL_VAUTH_H */







|




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_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
#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__))
#    define CARES_STATICLIB
#  endif
#  include <ares.h>
#endif

#ifdef USE_LIBIDN2
#include <idn2.h>







|







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(__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
#endif
#ifdef USE_LIBRTMP
  "rtmp",
#endif
#ifndef CURL_DISABLE_RTSP
  "rtsp",
#endif
#if defined(USE_LIBSSH) || defined(USE_LIBSSH2)
  "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",







|







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_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
  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)
  static char ssh_buffer[80];
#endif
#ifdef USE_SSL



  static char ssl_buffer[80];

#endif
#ifdef HAVE_BROTLI
  static char brotli_buffer[80];
#endif

  if(initialized)
    return &version_info;







|



>
>
>

>







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_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
#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 <cyassl/openssl/ssl.h>
#include <cyassl/ssl.h>
#ifdef HAVE_CYASSL_ERROR_SSL_H
#include <cyassl/error-ssl.h>
#else
#include <cyassl/error.h>







>







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







<







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 *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
  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)) {

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







>







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
              !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);


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







>
>







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


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







<




|







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 nread;
  CURLcode cc = CURLE_RECV_ERROR;

  if(pipe_ssloverssl(conn, num, SOS_READ) >= 0) {
    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
  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;







<







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;

  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
      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);
    if(timeout < 0)
      result = CURLE_OPERATION_TIMEDOUT;
    else
      result = set_numeric(data, BACKEND->handle, GSK_HANDSHAKE_TIMEOUT,
                           (timeout + 999) / 1000);
  }
  if(!result)







|







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. */
    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

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







<






|







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;

  struct timeval stmv;
  CURLcode result;

  /* Poll or wait for end of SSL asynchronous handshake. */

  for(;;) {
    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
  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) {


    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;







<









>
>







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;

  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

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. */







<







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;

  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
}


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;


  if(data->set.ftp_ccc != CURLFTPSSL_CCC_ACTIVE)
    return 0;


  close_one(connssl, conn, sockindex);
  rc = 0;
  what = SOCKET_READABLE(conn->sock[sockindex],
                         SSL_SHUTDOWN_TIMEOUT);

  for(;;) {


    if(what < 0) {
      /* anything that gets here is fatally bad */
      failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
      rc = -1;
      break;
    }








<







>


>







>
>







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;

  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
#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 "curl_printf.h"
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

/* Enable GnuTLS debugging by defining GTLSDEBUG */
/*#define GTLSDEBUG */







>







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


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

      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:







>
>
|
|
<

<












|







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;



    /* 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
  /* 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 {


    /* Begin Gyrations to get the public key     */
    gnutls_pubkey_init(&key);

    ret = gnutls_pubkey_import_x509(key, cert, 0);
    if(ret < 0)
      break; /* failed */








<










>
>







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

  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
  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;
    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) {



      for(i = 0; ; i++) {
        certaddrlen = sizeof(certaddr);
        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;







<
|
<
<









>
>
>

|
|
|







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)];

    size_t addrlen = 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++) {
        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
      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");



  }
#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) {



      /* 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) {







>
>
>












<
<








>
>
>







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. */


    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
/*
 * 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];


  /* 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);


  if(BACKEND->session) {




    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,







<


<
<

>







>


>
>
>
>







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

  int retval = 0;
  struct Curl_easy *data = conn->data;



#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
  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! */







<
<
<
<
<
<







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]) {






    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
#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 "polarssl_threadlock.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"








>







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

  /* 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))
      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",







>
|







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


#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;
  }







<
<
<
<
<
<
<














>
>







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








  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

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

    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");
    }


  }
#endif

  connssl->connecting_state = ssl_connect_3;
  infof(data, "SSL connected\n");

  return CURLE_OK;







|



















>
>







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) {
    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
  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) {
      connssl->connecting_state = ssl_connect_2_reading;
      return CURLE_OK;
    }
    else {
      failf(data,
            "SSL_connect failed with error %d: %s",
            detail,







|







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 || 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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
34
35
36
37
38
39
40

41
42
43
44
45
46
47
#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 "curl_printf.h"
#include "nssg.h"
#include <nspr.h>
#include <nss.h>
#include <ssl.h>
#include <sslerr.h>
#include <secerr.h>







>







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
{
  struct_stat st;

  if(filename == NULL)
    return 0;

  if(stat(filename, &st) == 0)
    if(S_ISREG(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







|







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) || 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
    }
    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;
    }


  }
}

#if NSSVERNUM >= 0x030f04 /* 3.15.4 */
static SECStatus CanFalseStartCallback(PRFileDesc *sock, void *client_data,
                                       PRBool *canFalseStart)
{







>
>







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
  *pmod = NULL;
}

/* data might be NULL */
static CURLcode nss_init_core(struct Curl_easy *data, const char *cert_dir)
{
  NSSInitParameters initparams;



  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;



    infof(data, "Unable to initialize NSS database\n");
  }

  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;



  infof(data, "Unable to initialize NSS\n");
  return CURLE_SSL_CACERT_BADFILE;
}

/* data might be NULL */
static CURLcode nss_init(struct Curl_easy *data)
{
  char *cert_dir;







>
>




















>
>
|









>
>
|







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: %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);
  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
  };

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








<







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


  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
#include "openssl.h"
#include "connect.h"
#include "slist.h"
#include "select.h"
#include "vtls.h"
#include "strcase.h"
#include "hostcheck.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







>







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
                    to be at least 256 bytes long. */
  unsigned long sslerror;
  ssize_t nread;
  int buffsize;
  int err;
  bool done = FALSE;


  /* 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);


  if(BACKEND->handle) {
    buffsize = (int)sizeof(buf);
    while(!done) {
      int what = SOCKET_READABLE(conn->sock[sockindex],
                                 SSL_SHUTDOWN_TIMEOUT);
      if(what > 0) {







>







>







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
        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");



    }
#endif

    return CURLE_OK;
  }
}








>
>
>







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
#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]);







<
<
<
<
<







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





      }
      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
  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 */

    case SSL_ERROR_ZERO_RETURN: /* no more data */


      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:







>

>
>







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
        sub[0] = (char) (minor_ver + 'a' - 1);
      }
    }
    else
      sub[0]='\0';
  }

  return msnprintf(buffer, size, "%s/%lx.%lx.%lx%s",




                   OSSL_PACKAGE,
                   (ssleay_value>>28)&0xf,
                   (ssleay_value>>20)&0xff,
                   (ssleay_value>>12)&0xff,
                   sub);
#endif /* OPENSSL_IS_BORINGSSL */
}







|
>
>
>
>







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"
#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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2018, 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * 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
#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 "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







>







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
#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");


  }
#endif

  connssl->connecting_state = ssl_connect_3;
  infof(data, "SSL connected\n");

  return CURLE_OK;







>
>







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

  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!
   * 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 */







|
<
<







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! */


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


#if defined(USE_THREADS_POSIX)
#  ifdef HAVE_PTHREAD_H
#    include <pthread.h>
#  endif
#elif defined(USE_THREADS_WIN32)
#  ifdef HAVE_PROCESS_H
#    include <process.h>
#  endif
#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++) {


    ret = pthread_mutex_init(&mutex_buf[i], NULL);
    if(ret)
      return 0; /* pthread_mutex_init failed */
  }
#elif 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 /* 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++) {


    ret = pthread_mutex_destroy(&mutex_buf[i]);
    if(ret)
      return 0; /* pthread_mutex_destroy failed */
  }
#elif defined(HAVE_PROCESS_H)
  for(i = 0; i < NUMT; i++) {
    ret = CloseHandle(mutex_buf[i]);
    if(!ret)
      return 0; /* CloseHandle failed */

  }
#endif /* HAVE_PTHREAD_H */
  free(mutex_buf);
  mutex_buf = NULL;

  return 1; /* OK */
}

int Curl_polarsslthreadlock_lock_function(int n)
{

  int ret;
#ifdef 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)
  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 /* HAVE_PTHREAD_H */
  return 1; /* OK */
}

int Curl_polarsslthreadlock_unlock_function(int n)
{

  int ret;
#ifdef 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)
  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 /* HAVE_PTHREAD_H */
  return 1; /* OK */
}

#endif /* USE_POLARSSL || USE_MBEDTLS */







|
>

|
<
|
|
|
<
|
|

















<





<

>
>



<
|
<



>

<







<




<

>
>



<
|
<



>

<








>
|
|
<






<
|
<






>

<





>
|
|
<






<
|
<






>

<




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(HAVE_PTHREAD_H)) || \
     (defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)))

#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)

#  include <pthread.h>
#  define POLARSSL_MUTEX_T pthread_mutex_t
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)

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


  mutex_buf = calloc(NUMT * sizeof(POLARSSL_MUTEX_T), 1);
  if(!mutex_buf)
    return 0;     /* error, no number of threads defined */


  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(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)

    mutex_buf[i] = CreateMutex(0, FALSE, 0);
    if(mutex_buf[i] == 0)
      return 0;  /* CreateMutex failed */
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }


  return 1; /* OK */
}

int Curl_polarsslthreadlock_thread_cleanup(void)
{
  int i;


  if(!mutex_buf)
    return 0; /* error, no threads locks defined */


  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(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)

    ret = CloseHandle(mutex_buf[i]);
    if(!ret)
      return 0; /* CloseHandle failed */
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }

  free(mutex_buf);
  mutex_buf = NULL;

  return 1; /* OK */
}

int Curl_polarsslthreadlock_lock_function(int n)
{
  if(n < NUMT) {
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)

    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(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)

    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 */
  }

  return 1; /* OK */
}

int Curl_polarsslthreadlock_unlock_function(int n)
{
  if(n < NUMT) {
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)

    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(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)

    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 */
  }

  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
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "curl_setup.h"

#if (defined USE_POLARSSL) || (defined USE_MBEDTLS)

#if defined(USE_THREADS_POSIX)
#  define POLARSSL_MUTEX_T       pthread_mutex_t
#elif defined(USE_THREADS_WIN32)
#  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







|
<
|
<
<
<
<







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) && defined(HAVE_PTHREAD_H)) || \

    (defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H))





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







>







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
#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"));
      }







<







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;


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







<





<







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;

  SecBuffer outbuf[3];
  SecBufferDesc outbuf_desc;
  SecBuffer inbuf[2];
  SecBufferDesc inbuf_desc;
  SECURITY_STATUS sspi_status = SEC_E_OK;

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

  /* 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 +
      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(;;) {

    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,







|















>







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 */
    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
         !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");


  }
#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;







>
>







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






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







<



<
<
<
<









>
>
>
>
>
>







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

  struct Curl_easy *data = conn->data;
  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  CERT_CONTEXT *pCertContextServer = NULL;





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

#include "curl_setup.h"

#include "urldata.h" /* for the Curl_easy definition */
#include "curl_base64.h"
#include "strtok.h"


#ifdef USE_SECTRANSP

#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wtautological-pointer-compare"
#endif /* __clang__ */







>







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








<







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

    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
#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");




        /* chosenProtocol is a reference to the string within alpnArr
           and doesn't need to be freed separately */
        if(alpnArr)
          CFRelease(alpnArr);
      }
    }







>
>
>







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
  int what;
  int rc;
  char buf[120];

  if(!BACKEND->ssl_ctx)
    return 0;


  if(data->set.ftp_ccc != CURLFTPSSL_CCC_ACTIVE)
    return 0;


  Curl_sectransp_close(conn, sockindex);

  rc = 0;

  what = SOCKET_READABLE(conn->sock[sockindex], SSL_SHUTDOWN_TIMEOUT);








>


>







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

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

    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);
  }







<


>







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

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

    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;







<




>







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

  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

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





    if(!Curl_ssl->sha256sum) {
      /* without sha256 support, this cannot match */
      return result;
    }

    /* compute sha256sum of public key */
    sha256sumdigest = malloc(CURL_SHA256_DIGEST_LENGTH);







<
<
<

<
<
<
<









>
>
>
>
>







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;



  CURLcode result = CURLE_SSL_PINNEDPUBKEYNOTMATCH;





  /* 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
  }

  fp = fopen(pinnedpubkey, "rb");
  if(!fp)
    return result;

  do {




    /* 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)







>
>
>
>







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

    int i;

    selected = current;

    for(i = 0; available_backends[i]; i++) {
      if(i)
        *(p++) = ' ';
      if(selected != available_backends[i])
        *(p++) = '(';
      p += available_backends[i]->version(p, backends + sizeof(backends) - p);
      if(selected != available_backends[i])
        *(p++) = ')';
    }
    *p = '\0';
    total = p - backends;
  }

  if(size < total)
    memcpy(buffer, backends, total + 1);
  else {
    memcpy(buffer, backends, size - 1);
    buffer[size - 1] = '\0';
  }

  return 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) {

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







>




|




|







|






|






<


















>







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] && p < (end - 4); i++) {
      if(i)
        *(p++) = ' ';
      if(selected != available_backends[i])
        *(p++) = '(';
      p += available_backends[i]->version(p, end - p - 2);
      if(selected != available_backends[i])
        *(p++) = ')';
    }
    *p = '\0';
    total = p - backends;
  }

  if(size > total)
    memcpy(buffer, backends, total + 1);
  else {
    memcpy(buffer, backends, size - 1);
    buffer[size - 1] = '\0';
  }

  return CURLMIN(size - 1, total);
}

static int multissl_init(const struct Curl_ssl *backend)
{
  const char *env;
  char *env_tmp;


  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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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 "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"







|















>
>







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


  wc->path = NULL;
  free(wc->pattern);
  wc->pattern = NULL;

  wc->customptr = NULL;
  wc->state = CURLWC_INIT;
}









>
>
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
#ifndef HEADER_CURL_WILDCARD_H
#define HEADER_CURL_WILDCARD_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2010 - 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/curl.h>


#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









|














|

>







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 - 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 "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
};

CURLcode Curl_wildcard_init(struct WildcardData *wc);
void Curl_wildcard_dtor(struct WildcardData *wc);

struct Curl_easy;






#endif /* HEADER_CURL_WILDCARD_H */







>
>
>
>
>

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
 */
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;







<
<







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;


  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
    /* Just copy. */
    outlength = inlength;
    if(outlength)
      memcpy(buf, from, outlength);
  }
  else {
    for(outlength = 0; from < end;) {



      wc = 0;
      switch(size) {
      case 4:
        wc = (wc << 8) | *(const unsigned char *) from++;
        wc = (wc << 8) | *(const unsigned char *) from++;
        /* FALLTHROUGH */
      case 2:







>
>
>







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
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")) {



    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)

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







<
<
<








>
>
>








|
>


>







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;




  /* 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) {
      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
  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)







<
<







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



  /* 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
    curl_cv_func_gethostname="yes"
  else
    AC_MSG_RESULT([no])
    curl_cv_func_gethostname="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







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
	  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'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu 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);; \







|

|







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) --foreign packages/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(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
  ***  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. */

  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)

{
  int i;
  iconv_t cd;
  size_t lslen;

  /**







|









|
|







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. */

  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)

{
  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

  iconv_close(cd);
  return i;
}


static char *
dynconvert(int dccsid, const char * s, int slen, int sccsid)

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







|


|
|







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)

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

  return d;
}


static struct curl_slist *
slist_convert(int dccsid, struct curl_slist * from, int sccsid)

{
  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);

    if(!cp) {
      curl_slist_free_all(to);
      return (struct curl_slist *) NULL;
    }
    nl = Curl_slist_append_nodup(to, cp);
    if(!nl) {







|


|



|







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)

{
  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);

    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


char *
curl_version_ccsid(unsigned int ccsid)

{
  int i;
  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)))

    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,
                       unsigned int sccsid, unsigned int dccsid)

{
  char * s;
  char * d;

  if(!string) {
    errno = EINVAL;
    return (char *) NULL;
    }

  s = dynconvert(ASCII_CCSID, string, length? length: -1, sccsid);







|
|









|
>










|



|
|







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;

  aversion = curl_version();

  if(!aversion)
    return aversion;

  i = strlen(aversion) + 1;
  i *= MAX_CONV_EXPANSION;

  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,
                       unsigned int sccsid, unsigned int dccsid)

{
  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
  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,
                         unsigned int sccsid, unsigned int dccsid)

{
  char * s;
  char * d;

  if(!string) {
    errno = EINVAL;
    return (char *) NULL;
    }

  s = dynconvert(ASCII_CCSID, string, length? length: -1, sccsid);







|
|



|
|







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,
                         unsigned int sccsid, unsigned int dccsid)

{
  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
    *outlength = strlen(s);

  return s;
}


struct curl_slist *
curl_slist_append_ccsid(struct curl_slist * list,
                        const char * data, unsigned int ccsid)

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

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

{
  /* 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. */








|
|


|


















|


|


















|







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)

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

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

{
  /* 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


curl_version_info_data *
curl_version_info_ccsid(CURLversion stamp, unsigned int ccsid)

{
  curl_version_info_data * p;
  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. */







|







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

  if(!id || !cp)
    return (curl_version_info_data *) NULL;

  /* Copy data and convert strings. */

  memcpy((char *) id, (char *) p, sizeof *p);

  if(id->protocols) {
    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++)







|






|


|







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

  if(!id || !cp)
    return (curl_version_info_data *) NULL;

  /* Copy data and convert strings. */

  memcpy((char *) id, (char *) p, sizeof(*p));

  if(id->protocols) {
    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


const char *
curl_easy_strerror_ccsid(CURLcode error, unsigned int ccsid)

{
  int i;
  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)))

    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;

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

    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;

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

    return (const char *) NULL;

  if(convert(buf, i, ccsid, s, -1, ASCII_CCSID) < 0)
    return (const char *) NULL;

  return (const char *) buf;
}







|
|








|
>














|
|








|
>














|
|








|
>







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;

  s = curl_easy_strerror(error);

  if(!s)
    return s;

  i = MAX_CONV_EXPANSION * (strlen(s) + 1);

  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;

  s = curl_share_strerror(error);

  if(!s)
    return s;

  i = MAX_CONV_EXPANSION * (strlen(s) + 1);

  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;

  s = curl_multi_strerror(error);

  if(!s)
    return s;

  i = MAX_CONV_EXPANSION * (strlen(s) + 1);

  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
    }
    free((char *) info);
  }
}


CURLcode
curl_easy_getinfo_ccsid(CURL * curl, CURLINFO info, ...)

{
  va_list arg;
  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) {

    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) {
      case CURLINFO_CERTINFO:
        cipf = *(struct curl_certinfo * *) paramp;
        if(cipf) {
          if(!(cipt = (struct curl_certinfo *) malloc(sizeof *cipt)))

            ret = CURLE_OUT_OF_MEMORY;
          else {
            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++)







|



|

















|
















|



|
>


|
|
|







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, ...)

{
  va_list arg;
  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) {

    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) {
      case CURLINFO_CERTINFO:
        cipf = *(struct curl_certinfo * *) paramp;
        if(cipf) {
          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 *));
            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

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

            ret = CURLE_OUT_OF_MEMORY;

        break;
      }
    }

  va_end(arg);
  return ret;
}


static int
Curl_is_formadd_string(CURLformoption option)

{
  switch (option) {

  case CURLFORM_FILENAME:
  case CURLFORM_CONTENTTYPE:
  case CURLFORM_BUFFER:
  case CURLFORM_FILE:
  case CURLFORM_FILECONTENT:
  case CURLFORM_COPYCONTENTS:







|
|
|
>

>













|







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) {
          *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) {

  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

static int
Curl_formadd_convert(struct curl_forms * forms,
                     int formx, int lengthx, unsigned int ccsid)

{
  int l;
  char * cp;
  char * cp2;

  if(formx < 0 || !forms[formx].value)
    return 0;

  if(lengthx >= 0)
    l = (int) forms[lengthx].value;
  else







|
|







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;

  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
  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;
  unsigned int ccsid;
  int nargs;
  int namex;
  int namelengthx;
  int contentx;
  int lengthx;
  unsigned int contentccsid;







|







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

  if(!lforms)
    return CURL_FORMADD_MEMORY;

  /* Process the arguments, copying them into local array, latching conversion
     indexes and converting when needed. */








|







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

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

      if(!tforms) {
        result = CURL_FORMADD_MEMORY;
        break;
        }

      lforms = tforms;







|







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

      if(!tforms) {
        result = CURL_FORMADD_MEMORY;
        break;
        }

      lforms = tforms;
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885

      if(option == CURLFORM_END)
        break;
      }

    /* Dispatch by option. */

    switch (option) {

    case CURLFORM_END:
      forms = (struct curl_forms *) NULL;       /* Leave array mode. */
      continue;

    case CURLFORM_ARRAY:
      if(!forms) {







|







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

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

{
  cfcdata * p;
  char * b;
  int l;
  size_t ret;

  p = (cfcdata *) arg;

  if((long) len <= 0)
    return (*p->append)(p->arg, buf, len);







|



|







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)

{
  cfcdata * p;
  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
  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_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, ...)

{
  CURLcode result;
  va_list arg;
  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







|













|




|
|
|







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_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, ...)

{
  CURLcode result;
  va_list arg;
  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
       (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) {

  case CURLOPT_ABSTRACT_UNIX_SOCKET:
  case CURLOPT_ALTSVC:
  case CURLOPT_CAINFO:
  case CURLOPT_CAPATH:
  case CURLOPT_COOKIE:
  case CURLOPT_COOKIEFILE:







|




|







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

  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

    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:


    result = Curl_vsetopt(data, tag, arg);
    break;
    }


  va_end(arg);
  return result;
}


char *







|
|

















|

















|












|







|



|







>
>
|

|
>







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_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
     d                 c                   10284
     d  CURLOPT_HTTP09_ALLOWED...
     d                 c                   00285
     d  CURLOPT_ALTSVC_CTRL...
     d                 c                   00286
     d  CURLOPT_ALTSVC...
     d                 c                   10287


      *
      /if not defined(CURL_NO_OLDIES)
     d  CURLOPT_FILE   c                   10001
     d  CURLOPT_INFILE...
     d                 c                   10009
     d  CURLOPT_SSLKEYPASSWD...
     d                 c                   10026







>
>







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


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;







<







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;

  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
	  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'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu 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);; \







|

|







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) --foreign packages/vms/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(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
    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 */







<







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

        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
$! 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"







<
<
<







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_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
$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:







<
<
<









<
<
<







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_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 "#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
   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.







|
|
|
|
|
|
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 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
    <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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>







|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|







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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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
    <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_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" />







>







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







<







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\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
    <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_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" />







>







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







<







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\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
    <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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>







|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|




|







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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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" />







|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|







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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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
    <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_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" />







>







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







<







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\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
    <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_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" />







>







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







<







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\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
    <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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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" />







|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|







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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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" />







|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|







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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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
    <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_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" />







>







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







<







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\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
    <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_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" />







>







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







<







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\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
    <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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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" />







|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|







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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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" />







|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|







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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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
    <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_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" />







>







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







<







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\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
    <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_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" />







>







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







<







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\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
    <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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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" />







|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|







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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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" />







|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|







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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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
    <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_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" />







>







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







<







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\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
    <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_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" />







>







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







<







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\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
    <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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <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>
    <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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</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>
    <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" />







|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|





|







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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>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>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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <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>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
      <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>







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

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







<







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>

      <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
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_gssapi.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\curl_memrchr.c
# End Source File







>
>
>
>







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

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







<
<
<
<







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\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
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_gssapi.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\curl_hmac.h
# End Source File







>
>
>
>







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

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







<
<
<
<







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\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
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.c">
			</File>



			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_memrchr.c">
			</File>
			<File







>
>
>







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







<
<
<







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\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
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.h">
			</File>



			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_hmac.h">
			</File>
			<File







>
>
>







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







<
<
<







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\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
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.c">
			</File>



			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_memrchr.c">
			</File>
			<File







>
>
>







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







<
<
<







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\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
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.h">
			</File>



			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_hmac.h">
			</File>
			<File







>
>
>







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







<
<
<







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\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
			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.c"
			>




			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_memrchr.c"







>
>
>
>







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







<
<
<
<







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\pop3.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\progress.c"
4127
4128
4129
4130
4131
4132
4133




4134
4135
4136
4137
4138
4139
4140
			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.h"
			>




			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_hmac.h"







>
>
>
>







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







<
<
<
<







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\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
			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.c"
			>




			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_memrchr.c"







>
>
>
>







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







<
<
<
<







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\pop3.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\progress.c"
4068
4069
4070
4071
4072
4073
4074




4075
4076
4077
4078
4079
4080
4081
			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.h"
			>




			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_hmac.h"







>
>
>
>







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







<
<
<
<







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\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
@echo off
rem ***************************************************************************
rem *                                  _   _ ____  _
rem *  Project                     ___| | | |  _ \| |
rem *                             / __| | | | |_) | |
rem *                            | (__| |_| |  _ <| |___
rem *                             \___|\___/|_| \_\_____|
rem *
rem * Copyright (C) 2012 - 2018, 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
  set VC_VER=
  set BUILD_PLATFORM=


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

  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








|



















|


>















|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
>







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

      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
  )

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

: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







<
<
|
<







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



:setup

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







:start
  echo.
  set SAVED_PATH=%CD%

  if "%VC_VER%" == "6.0" (
    call "%ABS_VC_PATH%\bin\vcvars32"







>
>
>
>
>
>







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

:x64debug
  rem Configuring 64-bit Debug Build
  perl Configure debug-VC-WIN64A --prefix=%CD%

  rem Perform the build
  call ms\do_win64a
  nmake -f ms\nt.mak
  nmake -f ms\ntdll.mak

  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
  )
  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 tmp32.dbg\lib.pdb "%OUTDIR%\LIB Debug" 1>nul
  move tmp32dll.dbg\lib.pdb "%OUTDIR%\DLL Debug" 1>nul


  rem Remove the intermediate directories
  rd tmp32.dbg /s /q
  rd tmp32dll.dbg /s /q

  if "%BUILD_CONFIG%" == "debug" goto success

:x64release
  rem Configuring 64-bit Release Build
  perl Configure VC-WIN64A --prefix=%CD%

  rem Perform the build
  call ms\do_win64a
  nmake -f ms\nt.mak
  nmake -f ms\ntdll.mak

  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
  )
  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 tmp32\lib.pdb "%OUTDIR%\LIB Release" 1>nul
  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

:x86debug
  rem Configuring 32-bit Debug Build
  perl Configure debug-VC-WIN32 no-asm --prefix=%CD%

  rem Perform the build
  call ms\do_ms
  nmake -f ms\nt.mak
  nmake -f ms\ntdll.mak

  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
  )
  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 tmp32.dbg\lib.pdb "%OUTDIR%\LIB Debug" 1>nul
  move tmp32dll.dbg\lib.pdb "%OUTDIR%\DLL Debug" 1>nul


  rem Remove the intermediate directories
  rd tmp32.dbg /s /q
  rd tmp32dll.dbg /s /q

  if "%BUILD_CONFIG%" == "debug" goto success

:x86release
  rem Configuring 32-bit Release Build
  perl Configure VC-WIN32 no-asm --prefix=%CD%

  rem Perform the build
  call ms\do_ms
  nmake -f ms\nt.mak
  nmake -f ms\ntdll.mak

  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
  )
  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 tmp32\lib.pdb "%OUTDIR%\LIB Release" 1>nul
  move tmp32dll\lib.pdb "%OUTDIR%\DLL Release" 1>nul

  rem Remove the intermediate directories
  rd tmp32 /s /q
  rd tmp32dll /s /q

  goto success








































































































































































































































































:syntax
  rem Display the help
  echo.
  echo Usage: build-openssl ^<compiler^> [platform] [configuration] [directory] [-VSpath] ["VSpath"] [-perlpath] ["perlpath"]
  echo.
  echo Compiler:







|
<
<
|
|

|
|
<
<

|
|
<
<
<
<
|
|
<
<
<
<
>
|
>
>

|
<
<
>
|
<
<
<

|
<
<
|
|

|
|
<
<

|
|
<
<
<
<
|
|
<
<
|
<
|
>
>

|
|
<
|
<
<
<








|
<
<
|
|

|
|
<
<

|
|
<
<
<
<
|
|
<
<
<
<
>
|
>
>

|
<
<
>
|
<
<
<

|
<
<
|
|

|
|
<
<

|
|
<
<
<
<
|
|
<
<
|
<
|
>
>

|
|
<
|
<
<
<


>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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 not "%BUILD_CONFIG%" == "release" (


    rem Configuring 64-bit Static Library Debug Build
    call :configure x64 debug static %LEGACY_BUILD%

    rem Perform the build
    call :build x64 static %LEGACY_BUILD%



    rem Perform the install
    call :install debug static %LEGACY_BUILD%





    rem Configuring 64-bit Shared Library Debug Build




    call :configure x64 debug shared %LEGACY_BUILD%

    rem Perform the build
    call :build x64 shared %LEGACY_BUILD%

    rem Perform the install


    call :install debug shared %LEGACY_BUILD%
  )




  if not "%BUILD_CONFIG%" == "debug" (


    rem Configuring 64-bit Static Library Release Build
    call :configure x64 release static %LEGACY_BUILD%

    rem Perform the build
    call :build x64 static %LEGACY_BUILD%



    rem Perform the install
    call :install release static %LEGACY_BUILD%





    rem Configuring 64-bit Shared Library Release Build


    call :configure x64 release shared %LEGACY_BUILD%


    rem Perform the build
    call :build x64 shared %LEGACY_BUILD%

    rem Perform the install
    call :install release shared %LEGACY_BUILD%

  )




  goto success

:x86
  rem Calculate our output directory
  set OUTDIR=build\Win32\%VC_DESC%
  if not exist %OUTDIR% md %OUTDIR%

  if not "%BUILD_CONFIG%" == "release" (


    rem Configuring 32-bit Static Library Debug Build
    call :configure x86 debug static %LEGACY_BUILD%

    rem Perform the build
    call :build x86 static %LEGACY_BUILD%



    rem Perform the install
    call :install debug static %LEGACY_BUILD%





    rem Configuring 32-bit Shared Library Debug Build




    call :configure x86 debug shared %LEGACY_BUILD%

    rem Perform the build
    call :build x86 shared %LEGACY_BUILD%

    rem Perform the install


    call :install debug shared %LEGACY_BUILD%
  )




  if not "%BUILD_CONFIG%" == "debug" (


    rem Configuring 32-bit Static Library Release Build
    call :configure x86 release static %LEGACY_BUILD%

    rem Perform the build
    call :build x86 static %LEGACY_BUILD%



    rem Perform the install
    call :install release static %LEGACY_BUILD%





    rem Configuring 32-bit Shared Library Release Build


    call :configure x86 release shared %LEGACY_BUILD%


    rem Perform the build
    call :build x86 shared %LEGACY_BUILD%

    rem Perform the install
    call :install release shared %LEGACY_BUILD%

  )




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







<
<
<
<
<
<
<
<








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









: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
      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"
    )
  )

  goto success

:syntax
  rem Display the help







|







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" -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
	  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'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu 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);; \







|

|







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) --foreign scripts/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(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
    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)
    {
      HANDLE  stderr_hnd = GetStdHandle(STD_ERROR_HANDLE);
      CONSOLE_SCREEN_BUFFER_INFO console_info;

      if((stderr_hnd != INVALID_HANDLE_VALUE) &&
         GetConsoleScreenBufferInfo(stderr_hnd, &console_info)) {
        /*







|







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)
    {
      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
  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;

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







>







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

  if(isatty(fileno(outs->stream)) &&
     GetConsoleScreenBufferInfo(
       (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);







|
>

|
<



<














<
<







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
  fhnd = _get_osfhandle(fileno(outs->stream));
  if(isatty(fileno(outs->stream)) &&
     GetConsoleScreenBufferInfo((HANDLE)fhnd, &console_info)) {

    DWORD in_len = (DWORD)(sz * nmemb);
    wchar_t* wc_buf;
    DWORD wc_len;


    /* 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;
    }



    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
{
  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_present = FALSE;
  config->proto_redir = CURLPROTO_ALL & /* All except FILE, SCP and SMB */
                        ~(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;
}








|


|
|







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;
  config->proto_present = FALSE;
  config->proto_redir = CURLPROTO_ALL & /* All except FILE, SCP and SMB */
    ~(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
        --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);
}







<







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] = '_';

    }
  }
#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
 * 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;

  char *word_begin = NULL;
  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)







>
|



<
<







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 = ptr;
  char *ptr2;
  char *escape = NULL;



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








<







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

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


    if(!strncmp(word, "no-", 3)) {
      /* disable this option but ignore the "no-" part when looking for it */
      word += 3;
      toggle = FALSE;

    }

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







>





>







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
    if(numhits > 1) {
      /* this is at least the second match! */
      return PARAM_OPTION_AMBIGUOUS;
    }
    if(hit < 0) {
      return PARAM_OPTION_UNKNOWN;
    }



  }
  else {
    flag++; /* prefixed with one dash, pass it */
    hit = -1;
    parse = flag;
  }








>
>
>







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
#ifndef HEADER_CURL_TOOL_GETPARAM_H
#define HEADER_CURL_TOOL_GETPARAM_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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









|







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 - 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
  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_LAST
} ParameterError;

struct GlobalConfig;
struct OperationConfig;

ParameterError getparameter(const char *flag, char *nextarg, bool *usedarg,







>







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
 * furnished to do so, under 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"




#include "tool_panykey.h"
#include "tool_help.h"
#include "tool_libinfo.h"
#include "tool_version.h"

#include "memdebug.h" /* keep this as LAST include */







>
>
>







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
#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 */




  }
}

void tool_list_engines(CURL *curl)
{
  struct curl_slist *engines = NULL;








>
>
>
>







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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
62
63
64
65
66
67
68


69
70
71
72
73
74
75
    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";


  default:
    return "unknown error";
  }
}

int SetHTTPrequest(struct OperationConfig *config, HttpReq req, HttpReq *store)
{







>
>







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







|
|







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"
"              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
, 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"
, 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"
"\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"







|
|


|
|
|
|
|







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  contains whitespace (or starts with : or =),\n"
"              the parameter must be  enclosed  within  quotes.  Within  double\n"
, stdout);
 fputs(
"              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
 */
#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
     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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0xd2, 0xd0, 0x29, 0x76, 0xc0, 0x88, 0x8d, 0x39, 0xf1, 0x31, 0x61, 0x0c,
  0xb3, 0x72, 0x35, 0x31, 0xcc, 0xe5, 0xaf, 0xab, 0xb2, 0xe1, 0x8d, 0x49,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0xde, 0x4e, 0x7e, 0x78, 0x79, 0xf6, 0xee, 0xe8, 0xdd, 0x37, 0x07, 0xfc,

  0x51, 0xa1, 0x34, 0xf3, 0xb7, 0xec, 0x76, 0x09, 0x3f, 0x18, 0x66, 0x6b,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0x73, 0x00, 0x1c, 0x0c, 0x0c, 0xc2, 0x1a, 0x1a, 0x8a, 0x75, 0xa3, 0xbe,
  0x7a, 0xe9, 0x8f, 0x4b, 0x7e, 0xd3, 0xee, 0x45, 0xf0, 0x7e, 0xbf, 0x55,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0x91, 0x60, 0x69, 0x8e, 0x61, 0xb5, 0x28, 0x42, 0x41, 0xc9, 0x79, 0xc0,
  0x44, 0x82, 0x74, 0xbb, 0x89, 0xdb, 0x6f, 0xfe, 0x6e, 0xd3, 0x91, 0xcb,
  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,
  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,
  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,
  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,
  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,
  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,
  0x64, 0x8b, 0x75, 0xf0, 0x2a, 0x6b, 0x56, 0x55, 0xc1, 0x3e, 0x71, 0xcc,
  0xbd, 0x6b, 0x47, 0x19, 0x01, 0xcc, 0xd2, 0xcc, 0xb7, 0xff, 0x05, 0x1a,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0x75, 0x2b, 0x34, 0x28, 0xdf, 0xd8, 0xd5, 0x63, 0x49, 0x6a, 0xb4, 0x5f,
  0x2f, 0x7a, 0x96, 0x5d, 0x1b, 0x52, 0x8b, 0xa6, 0xa8, 0x1d, 0xe7, 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,
  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,
  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,
  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,
  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,
  0x9e, 0x1d, 0xba, 0x2f, 0x44, 0xcf, 0xee, 0xff, 0x4b, 0xeb, 0x23, 0x7a,
  0x76, 0x64, 0x80, 0x08, 0x43, 0xcd, 0x50, 0xdd, 0x94, 0x57, 0x9f, 0x50,
  0x41, 0x02, 0x44, 0x7c, 0xcf, 0xec, 0x08, 0x60, 0x00, 0x4a, 0x11, 0xe2,
  0xad, 0x73, 0x41, 0x04, 0x65, 0x34, 0xf7, 0x2f, 0x9d, 0x32, 0x33, 0xc4,
  0x22, 0x87, 0x42, 0xb2, 0x23, 0x22, 0xc2, 0x35, 0x94, 0x6a, 0x29, 0x33,
  0x4e, 0x94, 0x01, 0xf9, 0xf5, 0x8b, 0x46, 0x85, 0x50, 0x15, 0xd9, 0xde,
  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,
  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,
  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,
  0xd9, 0xde, 0x14, 0x64, 0xb2, 0x8b, 0x08, 0xde, 0x58, 0x52, 0x11, 0x7b,
  0xf2, 0x5a, 0xbe, 0x59, 0xe3, 0x66, 0x60, 0x97, 0x18, 0x5d, 0x8d, 0xed,
  0x88, 0x93, 0xef, 0x86, 0x2f, 0xc7, 0xc3, 0xd7, 0x87, 0xc7, 0x87, 0xdf,
  0xbc, 0x3c, 0x3f, 0x64, 0x50, 0x71, 0x45, 0x1a, 0x8e, 0x2b, 0x22, 0x56,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0xff, 0xd1, 0x3a, 0xbc, 0xa2, 0x38, 0x3c, 0xce, 0xbf, 0x31, 0x63, 0xa1,
  0x61, 0x0d, 0x03, 0x5a, 0xd6, 0x34, 0x2a, 0xa1, 0x6c, 0xc4, 0x7d, 0x44,
  0x76, 0xb5, 0x69, 0x1d, 0xb4, 0x17, 0xf2, 0x3a, 0x05, 0xb1, 0x50, 0x59,
  0x8b, 0x64, 0xdc, 0x06, 0x3b, 0x6a, 0x27, 0x67, 0x3e, 0x6b, 0x6b, 0x06,
  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,
  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,
  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,
  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,
  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,
  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,
  0xbb, 0xc1, 0x1f, 0xcc, 0xd3, 0x81, 0xd5, 0x83, 0x77, 0xbd, 0x7d, 0x0a,
  0xcf, 0xde, 0x0f, 0x66, 0x09, 0xd0, 0x04, 0x6f, 0xb1, 0xcb, 0x8b, 0xf6,
  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,
  0xb7, 0x58, 0x83, 0x23, 0xe6, 0x0b, 0x84, 0x06, 0xa7, 0x99, 0x43, 0x37,
  0xa5, 0x4d, 0xa1, 0x24, 0xcf, 0xe0, 0x56, 0x13, 0x50, 0xa0, 0xea, 0x4e,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0x3e, 0x11, 0x75, 0x8d, 0x11, 0xe6, 0x24, 0x21, 0x0e, 0xf4, 0xf8, 0x45,

  0xac, 0xef, 0x6b, 0x92, 0x71, 0x73, 0x84, 0x95, 0x3a, 0x4a, 0xe8, 0x74,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0xed, 0xf0, 0xfc, 0x84, 0x1a, 0x63, 0xd3, 0xd0, 0x49, 0x44, 0xdf, 0xe4,
  0xb7, 0x6a, 0xbf, 0xbb, 0x77, 0x3b, 0xd7, 0x6c, 0xab, 0xde, 0xd6, 0xe6,
  0xdb, 0x24, 0x50, 0x68, 0x7a, 0xfa, 0x56, 0xd0, 0xea, 0xa0, 0x60, 0x4d,

  0x84, 0x1c, 0x0f, 0x86, 0x96, 0xa6, 0x29, 0x14, 0x46, 0x1b, 0x79, 0xa2,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0x99, 0x95, 0x5c, 0x08, 0x42, 0x83, 0x99, 0x08, 0x5a, 0x5a, 0xb9, 0x08,
  0xbf, 0x85, 0x6a, 0xf2, 0xa3, 0x9b, 0x59, 0x11, 0xe9, 0x7f, 0x4d, 0x9c,
  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,
  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,
  0xd2, 0xa9, 0xfb, 0xcb, 0x30, 0xad, 0xa7, 0x79, 0xae, 0xbd, 0x5f, 0x10,
  0x1f, 0xcc, 0x90, 0x0e, 0x1b, 0x05, 0xb4, 0xb1, 0xe7, 0xa1, 0x3d, 0x17,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0x64, 0xa4, 0x05, 0xde, 0x81, 0x96, 0xd7, 0xe1, 0xf5, 0x22, 0xbb, 0xc1,
  0x67, 0x18, 0x13, 0x03, 0x65, 0xde, 0x21, 0xac, 0x3e, 0x43, 0x39, 0xb3,
  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,
  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,
  0x0a, 0xb6, 0xa4, 0x5b, 0xd2, 0xd5, 0xda, 0xa8, 0x70, 0x17, 0xd6, 0x25,
  0xa3, 0x3b, 0xf2, 0xa4, 0xa7, 0x7e, 0xf3, 0x6b, 0xf1, 0xf0, 0x4c, 0xea,
  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,
  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,
  0x28, 0xd3, 0xae, 0xe9, 0x16, 0xee, 0x8d, 0x1e, 0x71, 0xa1, 0xab, 0x86,
  0x74, 0x64, 0x9e, 0x01, 0x38, 0x0d, 0x7d, 0x9f, 0xc1, 0x81, 0x5d, 0x26,
  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, 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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0x53, 0x62, 0x9d, 0x82, 0xa5, 0x37, 0x46, 0x1d, 0x33, 0x0c, 0xa0, 0xa4,
  0x3e, 0xab, 0x36, 0x9b, 0xf0, 0x3d, 0x24, 0x58, 0x67, 0x44, 0xdf, 0xd7,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,

  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0x76, 0x0e, 0x66, 0x0a, 0xee, 0x87, 0x7c, 0x5d, 0x20, 0xfa, 0x2e, 0x4a,

  0xe9, 0x09, 0x6b, 0x67, 0x73, 0xcf, 0x1c, 0xf8, 0x0a, 0xdc, 0x3f, 0x0b,
  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,
  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,
  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,
  0xaf, 0xcf, 0x27, 0xb8, 0xf0, 0x9c, 0xa2, 0x06, 0x95, 0xb4, 0x7b, 0x71,

  0x14, 0x62, 0xfd, 0xa1, 0xae, 0x10, 0xca, 0xd0, 0x57, 0x27, 0xb9, 0xcd,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  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,
  0x83, 0x34, 0x14, 0xef, 0xd9, 0xa7, 0xf6, 0x59, 0xf8, 0x8d, 0xf2, 0xc2,
  0x6b, 0x61, 0xd4, 0xf3, 0x86, 0x28, 0xbf, 0x6a, 0x20, 0xa8, 0x62, 0xc6,
  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,
  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,
  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,
  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);







|
|


|
|
|
|
|
|
|
|
|
|
|
|
<
<
|
|
|
|
>
>
|
|
|
|
|
|
|
<
<
<
|
|
|
<
>
>
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
<
|
>
|
>
|
|
|
|
|
|
|
|
<
|
>
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
<
|
|
|
<
>
|
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
>
>
|
<
|
>
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
|
|
<
>
|
<
<
|
|
|
>
>
|
|
|
>
|
<
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
>
>
|
|
|
<
|
>
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
<
|
>
|
|
|
|
|
>
|
|
<
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
<
<
|
|
|
>
>
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
<
|
>
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
>
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
<
|
|
<
|
|
>
|
|
|
|
|
|
<
|
|
<
|
|
<
|
>
>
>
|
<
|
>
|
|
|
|
<
|
<
>
|
>
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
<
|
>
|
>
>
|
|
<
|
|
|
|
|
<
|
|
>
|
|
|
|
<
|
|
|
>
|
|
|
|
|
<
<
|
|
|
|
|
|
|
>
|
>
|
|
|
|
|
|
|
|
<
<
|
|
|
|
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
<
|
>
|
<
<
|
|
|
|
>
>
|
|
<
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
>
|
|
>
>
|
|
<
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
>
|
<
|
|
|
|
>
|
<
|
<
|
<
|
<
<
>
|
|
>
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
>
|
<
|
|
|
|
>
|
|
<
|
<
|
<
|
|
>
>
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
>
|
|
>
|
<
<
<
|
|
|
|
|
>
|
<
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
>
>
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
<
|
<
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
<
|
<
|
|
>
|
>
|
|
|
|
|
|
|
|
|
|
<
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
>
|
|
<
|
>
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
<
|
|
>
|
<
|
|
>
|
|
|
|
|
>
|
>
|
<
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
<
|
|
|
>
|
|
|
|
<
|
|
<
>
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
<
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
>
|
<
|
>
|
<
|
|
|
|
|
|
|
|
<
|
>
|
<
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
>
|
>
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
<
|
<
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
<
<
|
|
<
|
>
>
|
>
|
|
|
>
>
|
|
|
<
<
>
>
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
<
|
<
>
|
<
|
>
>
|
|
<
|
|
|
>
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
>
>
|
|
<
|
|
>
|
|
<
<
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
|
|
<
<
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
<
<
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
>
|
|
>
>
>
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
<
|
<
<
|
|
|
|
|
<
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
<
|
|
|
|
>
|
>
>
|
|
|
|
<
<
|
|
|
<
|
|
<
<
|
>
|
>
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
<
<
|
<
>
|
|
>
|
|
<
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
|
>
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
>
>
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
>
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
>
|
<
|
|
|
<
|
>
|
|
|
|
|
|
<
<
|
>
|
<
|
>
|
>
|
|
<
<
|
|
<
<
|
<
>
|
|
>
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
>
>
|
|
|
|
|
<
<
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
<
|
>
>
|
|
|
|
|
|
>
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
<
|
<
<
<
<
<
<
|
|
|
<
<
|
>
>
|
>
|
|
<
|
<
|
|
|
>
|
|
|
>
>
|
>
>
>
|
>
|
<
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
>
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
<
|
|
>
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
>
>
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
|
|
|
>
|
>
|
|
|
>
|
<
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
>
>
|
|
<
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
>
>
|
<
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
<
|
|
<
>
>
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
>
|
|
<
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
>
|
|
|
|
|
|
|
>
|
|
|
<
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
>
|
|
|
|
>
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
>
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
>
|
<
<
|
|
<
|
|
>
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
<
<
<
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
<
|
|
|
|
>
>
>
|
>
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
<
|
>
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
<
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
>
|
>
|
|
|
<
<
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
<
<
|
>
|
|
>
|
|
|
|
<
|
>
|
|
|
>
>
|
>
|
|
<
<
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
>
|
|
>
|
|
>
|
<
>
|
<
<
|
|
|
|
|
|
|
|
>
|
>
|
<
<
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
<
|
|
>
|
|
|
|
<
>
|
<
|
|
|
|
<
|
>
|
|
|
|
|
|
|
>
|
<
|
>
|
|
|
|
|
|
<
|
|
>
|
|
|
<
|
>
>
|
<
|
>
|
<
|
|
|
|
|
<
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
<
<
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
>
>
|
|
|
<
<
>
|
<
|
<
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<







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


  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,



  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,

  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,

  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,

  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,

  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,

  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,

  0x43, 0xa7, 0xd8, 0x01, 0x23, 0x36, 0xe6, 0xc4, 0xc7, 0x84, 0x31, 0xcc,

  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,

  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,

  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,

  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,

  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,

  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,

  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,


  0x7d, 0x3d, 0x4d, 0x5e, 0x90, 0xf6, 0x0d, 0x32, 0x8d, 0x6e, 0xf0, 0x78,
  0x3b, 0xf9, 0xfe, 0xe5, 0xd9, 0xbb, 0xa3, 0x77, 0x5f, 0x1f, 0xf0, 0x47,

  0x85, 0xd2, 0xcc, 0xdf, 0xb2, 0xdb, 0x25, 0xfc, 0x60, 0x98, 0xad, 0x11,
  0x65, 0x49, 0xf2, 0xba, 0x24, 0x7b, 0x84, 0x18, 0x26, 0x04, 0x56, 0x67,


  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,

  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,

  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,

  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,

  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,

  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,

  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,

  0x4e, 0xdd, 0x95, 0x1a, 0xdb, 0x9e, 0xac, 0xf2, 0x79, 0x2b, 0x26, 0xe0,

  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,

  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,


  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,

  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,


  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,

  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,


  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,

  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,

  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,

  0x27, 0x39, 0xb0, 0xf9, 0xdb, 0x4d, 0x47, 0x48, 0xb1, 0xbd, 0xab, 0x32,

  0x96, 0xf4, 0x24, 0xaa, 0x72, 0x4f, 0x4c, 0x69, 0xf5, 0x30, 0x99, 0x9b,
  0x09, 0x87, 0x4b, 0xc1, 0x4c, 0x4f, 0xe0, 0x5c, 0xe7, 0x32, 0xb0, 0xae,

  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,

  0x0e, 0x40, 0x8a, 0x9b, 0x42, 0x00, 0x05, 0xc6, 0x25, 0x79, 0x65, 0xa6,
  0x94, 0xc3, 0x20, 0xe9, 0x32, 0x52, 0x53, 0x16, 0xb1, 0x02, 0x21, 0x03,

  0x03, 0x1d, 0x08, 0xf3, 0xf9, 0x22, 0xd9, 0xe8, 0xd7, 0x84, 0x36, 0xba,
  0x6f, 0x50, 0x06, 0xa4, 0x73, 0x71, 0x4a, 0xbd, 0x3c, 0x4d, 0x64, 0x4b,

  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,

  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,

  0x28, 0x37, 0x19, 0x52, 0x8d, 0x13, 0x9b, 0x86, 0x75, 0xb2, 0xc5, 0x0a,

  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,

  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,


  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,

  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,

  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,

  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,


  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,


  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,

  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,

  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,

  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,


  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,

  0x91, 0x5d, 0xb1, 0x96, 0xe4, 0x4d, 0xfb, 0xc5, 0xa4, 0x67, 0xd9, 0xb5,

  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,

  0xc4, 0xde, 0x8b, 0x4c, 0xdd, 0x55, 0x5c, 0xd6, 0x4c, 0x13, 0x71, 0xd6,
  0x21, 0xed, 0x85, 0xdd, 0x5a, 0x8c, 0x79, 0x46, 0x4b, 0x4f, 0x6b, 0xe9,

  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,

  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,

  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,

  0x18, 0x6a, 0xc6, 0xf0, 0xa6, 0xa4, 0xfb, 0x84, 0xaa, 0x15, 0x20, 0xe2,

  0x7b, 0x66, 0x47, 0xe8, 0x03, 0x50, 0x8a, 0x10, 0x6f, 0x9d, 0x0b, 0x5c,

  0x28, 0xc3, 0xbc, 0x7f, 0xe1, 0x94, 0x99, 0x21, 0x16, 0x39, 0x14, 0x92,


  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,

  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,

  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,

  0x7c, 0x39, 0x1e, 0xbe, 0x3e, 0x3c, 0x3e, 0xfc, 0xfa, 0xe5, 0xf9, 0x21,

  0x23, 0x8e, 0x2b, 0x0c, 0x71, 0x5c, 0x11, 0xb1, 0x72, 0xf9, 0x5b, 0xd9,

  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,

  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,

  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,

  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,

  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,



  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,

  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,

  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,

  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,

  0x6c, 0xd5, 0x59, 0xc7, 0x77, 0xc2, 0xce, 0x93, 0x10, 0x2d, 0x82, 0x13,

  0x6b, 0x9d, 0x63, 0x8e, 0xeb, 0xa7, 0x29, 0x69, 0x80, 0x94, 0x2f, 0xd6,

  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,

  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,


  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,

  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,

  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,

  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,

  0x09, 0xde, 0x62, 0x97, 0x17, 0xed, 0xbb, 0xcb, 0x65, 0xa5, 0xd6, 0x5d,

  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,

  0x5b, 0x4d, 0x40, 0x81, 0xaa, 0x3b, 0xf9, 0xf0, 0x91, 0xd2, 0x03, 0x64,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  0x85, 0x16, 0xed, 0x74, 0x7f, 0xb7, 0x3f, 0xeb, 0x5d, 0xfa, 0x9a, 0x59,
  0x6d, 0xec, 0x3d, 0xdf, 0x1f, 0xed, 0x3d, 0xfd, 0x7c, 0xb4, 0x47, 0x0d,

  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,

  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,

  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,

  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,

  0xbd, 0x68, 0x80, 0xfe, 0xdf, 0x37, 0x5d, 0xd3, 0x9c, 0x51, 0x2f, 0x34,
  0x5f, 0x0c, 0xb4, 0xd7, 0x85, 0x9e, 0x06, 0x6e, 0xc2, 0xee, 0xbb, 0x3d,

  0x90, 0xdb, 0xf7, 0xcc, 0xe7, 0x9b, 0xc3, 0x97, 0xaf, 0x2d, 0x8c, 0xc0,
  0x2f, 0x0b, 0xea, 0xb0, 0x4f, 0x44, 0x5d, 0x63, 0x84, 0x39, 0x49, 0x88,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,


  0x93, 0xae, 0x2d, 0x01, 0x57, 0x2b, 0x20, 0x8a, 0x66, 0x54, 0xf2, 0x86,

  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,

  0xaf, 0xf5, 0xa1, 0xb0, 0xff, 0x25, 0xdc, 0xec, 0xec, 0x56, 0xd7, 0xc4,
  0x9b, 0xfa, 0x00, 0xc9, 0xdc, 0xdf, 0x0e, 0x92, 0x47, 0x0b, 0x3a, 0x94,


  0xbd, 0xaf, 0xa3, 0xe8, 0x23, 0x9c, 0x58, 0x06, 0x73, 0x49, 0xb3, 0x02,
  0x86, 0x7f, 0x82, 0x95, 0x44, 0x7b, 0xc6, 0x94, 0x69, 0xeb, 0x46, 0xb8,

  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,


  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,

  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,

  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,

  0xbd, 0x39, 0x3b, 0x79, 0x3b, 0x3c, 0x3f, 0xa1, 0xc6, 0xd8, 0x34, 0x74,

  0x12, 0xd1, 0x37, 0xf9, 0xad, 0xda, 0xef, 0xee, 0xdd, 0xce, 0x35, 0xdb,
  0xaa, 0xb7, 0xb5, 0xf9, 0x36, 0x09, 0x14, 0x9a, 0x9e, 0xbe, 0x15, 0xb4,

  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,

  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,

  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,

  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,


  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,

  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,

  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,


  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,

  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,



  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,

  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,

  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,

  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,

  0x72, 0xe9, 0xc4, 0x7d, 0xe8, 0xc5, 0x41, 0x6e, 0x61, 0x92, 0xbc, 0x62,


  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,

  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,

  0x6b, 0xef, 0x17, 0xc4, 0x07, 0x33, 0xa4, 0xc3, 0x46, 0x01, 0x6d, 0xec,

  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,


  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,

  0x31, 0x5a, 0x73, 0xc0, 0xef, 0x06, 0xfc, 0xdd, 0xc9, 0x0a, 0x1c, 0xa2,
  0xf3, 0x05, 0x39, 0x5d, 0x56, 0x9a, 0xf8, 0x09, 0x7c, 0x4f, 0x3c, 0x60,


  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,

  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,


  0x4f, 0x52, 0xc0, 0x71, 0x3a, 0x04, 0xb2, 0x93, 0xd7, 0x2e, 0x41, 0xed,

  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,

  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,

  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,



  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,


  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,

  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,


  0xb1, 0xc5, 0xeb, 0x82, 0xe1, 0x61, 0xf1, 0x7b, 0x01, 0x7f, 0x61, 0x74,
  0xf7, 0x03, 0xc9, 0x55, 0xe2, 0xe4, 0x1d, 0xae, 0x7d, 0x27, 0x30, 0xc1,


  0x57, 0xa7, 0x11, 0xec, 0x05, 0x57, 0x09, 0x4f, 0xec, 0x56, 0x9b, 0xf9,

  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,


  0xe8, 0x8c, 0x40, 0x3d, 0x6b, 0xca, 0xe6, 0xb2, 0x6c, 0x18, 0x74, 0x1a,

  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,

  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,

  0xa0, 0x3a, 0x3e, 0x42, 0x01, 0x9e, 0xcd, 0x62, 0xe5, 0xe1, 0xe4, 0xbb,

  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,

  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,

  0xf9, 0x27, 0xd5, 0x15, 0xaa, 0x00, 0x6b, 0x29, 0x2b, 0xf4, 0x95, 0xd6,






  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,


  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,

  0x82, 0xb5, 0x32, 0x0c, 0x6b, 0x34, 0x9e, 0xe2, 0x5e, 0x04, 0x3a, 0x8f,

  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,

  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,

  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,




  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,


  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,

  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,

  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,

  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,

  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,

  0x37, 0x03, 0xe7, 0x5c, 0xc8, 0x09, 0xe7, 0xa6, 0x09, 0x8a, 0xd7, 0x2e,
  0x46, 0xdb, 0xd1, 0xe4, 0x29, 0x9e, 0x83, 0x48, 0xa4, 0x3a, 0xbd, 0x76,

  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,

  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,

  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,

  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,

  0xff, 0x3d, 0xea, 0x87, 0x83, 0xdc, 0x9f, 0x31, 0xe3, 0x47, 0x0b, 0x74,

  0xea, 0x7a, 0x0d, 0x5b, 0x30, 0xba, 0x05, 0xcb, 0x08, 0x9b, 0xa7, 0x1b,
  0x34, 0xd0, 0x56, 0x24, 0x3f, 0xf0, 0x8f, 0x25, 0x4d, 0x27, 0x92, 0xd9,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,


  0xcc, 0x0a, 0x2e, 0xe8, 0xf5, 0xde, 0xcb, 0xe3, 0xb0, 0x07, 0x92, 0xc5,
  0x29, 0x1f, 0x59, 0xab, 0x41, 0x22, 0x9b, 0x93, 0x3a, 0x84, 0xa0, 0x94,

  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,

  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,

  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,

  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,

  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,




  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,

  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,

  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,

  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,

  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,

  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,


  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,

  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,


  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,

  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,

  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,

  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,

  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,

  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,


  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,

  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,


  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,

  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,



  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,


  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,

  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,

  0x44, 0xdf, 0x45, 0x29, 0x3d, 0x61, 0xed, 0x6c, 0xee, 0x99, 0x03, 0x5f,
  0x81, 0xfb, 0x67, 0x41, 0xd7, 0xe8, 0x43, 0x5d, 0xcf, 0x41, 0xea, 0xf9,


  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,


  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,

  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,

  0x92, 0x76, 0x2f, 0x8e, 0x42, 0xac, 0x3f, 0xd4, 0x15, 0x42, 0x19, 0xfa,
  0xea, 0x24, 0xb7, 0xb9, 0x6e, 0x1d, 0x16, 0xc1, 0x31, 0x9d, 0x79, 0x5d,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,

  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,


  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,

  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,


  0xbf, 0x51, 0x5e, 0x78, 0x2d, 0x8c, 0x7a, 0xde, 0x10, 0xe5, 0x57, 0x0d,
  0x04, 0x55, 0xcc, 0x58, 0xdf, 0xf1, 0xf6, 0xde, 0x7b, 0xe5, 0x79, 0xdb,

  0x69, 0x42, 0xbd, 0x0d, 0x2c, 0x61, 0xd2, 0xa2, 0xa8, 0x85, 0xa6, 0xe7,

  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,

  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,

  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,

};
#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

  /* Free the config structures */
  config_free(config->last);
  config->first = NULL;
  config->last = NULL;
}

#ifdef _WIN32
/* TerminalSettings for Windows */
static struct TerminalSettings {
  HANDLE hStdOut;
  DWORD dwOutputMode;
} TerminalSettings;

static void configure_terminal(void)







|







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
/* 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
}
#else
#define configure_terminal()
#endif

static void restore_terminal(void)
{
#ifdef _WIN32
  /* Restore Console output mode and codepage to whatever they were
   * when Curl started */
  SetConsoleMode(TerminalSettings.hStdOut, TerminalSettings.dwOutputMode);
#endif
}

/*







|







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
  /* 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
   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)
/* 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;







|







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)
/* 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
}

static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx)
{
  sha256_finish(ctx, digest);
}

#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);







|







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)

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







<







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

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

        my_setopt(curl, CURLOPT_INTERLEAVEDATA, &outs);

        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. */







>

>







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








<
<







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


          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
            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) */


        my_setopt_str(curl, CURLOPT_FTPPORT, config->ftpport);

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

        my_setopt_str(curl, CURLOPT_PROXY_KEYPASSWD, config->proxy_key_passwd);

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







>

>














>

|







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

        my_setopt_str(curl, CURLOPT_KRBLEVEL, config->krblevel);

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







>

|







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


        /* new in libcurl 7.6.2: */
        my_setopt_slist(curl, CURLOPT_TELNETOPTIONS, config->telnet_options);

        /* 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)







>


|







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
                        config->proxy_service_name);

        /* new in curl 7.43.0 */
        if(config->service_name)
          my_setopt_str(curl, CURLOPT_SERVICE_NAME,
                        config->service_name);


        /* curl 7.13.0 */
        my_setopt_str(curl, CURLOPT_FTP_ACCOUNT, config->ftp_account);

        my_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, config->ignorecl?1L:0L);


        /* 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);

        /* curl 7.15.2 */
        if(config->localport) {
          my_setopt(curl, CURLOPT_LOCALPORT, config->localport);
          my_setopt_str(curl, CURLOPT_LOCALPORTRANGE, config->localportrange);
        }


        /* curl 7.15.5 */
        my_setopt_str(curl, CURLOPT_FTP_ALTERNATIVE_TO_USER,
                      config->ftp_alternative_to_user);

        /* 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) {







>


|


>





|






>



|







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







<
<
<
<







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.




                   */
                  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
          } /* 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) {







<
<







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


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







<
<
<







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)



            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
        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 */
    }
  }

  for(i = 0; i < glob->size; ++i) {
    pat = &glob->pattern[i];
    switch(pat->type) {
    case UPTSet:







<
|







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! */

      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
 * 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_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 */







|






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

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








<
<







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


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

file
ftp
ftp-ipv6
ftps
http
http-ipv6
http-pipe
http-proxy
http-unix
https
httptls+srp
httptls+srp-ipv6
http/2
imap







<







182
183
184
185
186
187
188

189
190
191
192
193
194
195

file
ftp
ftp-ipv6
ftps
http
http-ipv6

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







<







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

%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
	  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'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu 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);; \







|

|







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) --foreign tests/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(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
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 \
\
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 \
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 \
\
test700 test701 test702 test703 test704 test705 test706 test707 test708 \
test709 test710 test711 test712 test713 test714 test715 \
\
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 \







|













|












|


|







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 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 \
        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 test660 \
\
test700 test701 test702 test703 test704 test705 test706 test707 test708 \
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
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 \
\
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 \
\
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 \







|












|







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 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 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
	  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'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu 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);; \







|

|







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) --foreign tests/data/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(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
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 \
\
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 \
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 \
\
test700 test701 test702 test703 test704 test705 test706 test707 test708 \
test709 test710 test711 test712 test713 test714 test715 \
\
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 \







|













|












|


|







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 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 \
        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 test660 \
\
test700 test701 test702 test703 test704 test705 test706 test707 test708 \
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
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 \
\
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 \
\
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 \







|












|







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 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 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
http
</server>
<features>
!SSPI
crypto
</features>
 <name>
HTTP POST --digest with PUT and 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>







|







63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
http
</server>
<features>
!SSPI
crypto
</features>
 <name>
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
Host: %HOSTIP:%HTTPPORT
Accept: */*

</protocol>
<stripfile>
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_HTTP09_ALLOWED/

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







>





>







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







<







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

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







>







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







<







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_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
# 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/

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







>







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







<







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_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
# 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/

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







>







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







<







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_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
# 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/

# 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







>







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







<







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







<







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

  return (int)ret;
}
/**** End of sample code ****/
</file>
<stripfile>
# CURLOPT_USERAGENT and CURLOPT_MAXREDIRS requires 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/

</stripfile>
</verify>
</testcase>







>









>



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







<







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

  return (int)ret;
}
/**** End of sample code ****/
</file>
<stripfile>
# These options vary with configurations - just ignore them

$_ = '' if /CURLOPT_USERAGENT/
$_ = '' if /CURLOPT_MAXREDIRS/
$_ = '' if /CURLOPT_SSL_VERIFYPEER/
$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
$_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_HTTP09_ALLOWED/

</stripfile>
</verify>
</testcase>







>






>



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







<
<
<



<



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



</file>
<stripfile>
$_ = '' if (($_ !~ /left intact/) && ($_ !~ /Closing connection/))

</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
URL API
 </name>
<tool>
lib1560
</tool>
</client>













</testcase>







>
>
>
>
>
>
>
>
>
>
>
>

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
<testcase>
<info>
<keywords>
FTP

</keywords>
</info>

# Server-side
<reply>
<servercmd>
REPLY PASS 430 temporarily not available




>







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
<testcase>
<info>
<keywords>
HTTP
HTTP GET

</keywords>
</info>
#
# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 503 OK swsbounce





>







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
<testcase>
<info>
<keywords>
HTTP
HTTP GET

</keywords>
</info>
#
# Server-side
<reply>
<data>
HTTP/1.1 503 OK swsbounce





>







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
FAILURE
</keywords>
</info>
# Server-side
<reply>
<data>
</data>




</reply>

# Client-side
<client>
<server>
socks4
</server>







>
>
>
>







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
FAILURE
</keywords>
</info>
# Server-side
<reply>
<data>
</data>




</reply>

# Client-side
<client>
<server>
socks5
</server>







>
>
>
>







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
# Client-side
<client>
<server>
http
socks5
</server>
<setenv>
http_proxy=socks5://%HOSTIP:%SOCKSPORT 
</setenv>
 <name>
HTTP GET via SOCKS5 set in http_proxy environment variable
 </name>
 <command>
http://%HOSTIP:%HTTPPORT/709
</command>







|







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
</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
</info>
#
# Server-side
<reply>
<data>
silly content
</data>


</reply>

#
# Client-side
<client>
<server>
ftp
socks5
</server>
<setenv>
all_proxy=socks5://%HOSTIP:%SOCKSPORT 
</setenv>
 <name>
FTP fetch with all_proxy set to socks5
 </name>
 <command>
ftp://%HOSTIP:%FTPPORT/711
</command>







>
>










|







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

#
# Server-side
<reply>
<servercmd>
AUTH PLAIN
REPLY AUTHENTICATE +
REPLY dXNlcgB1c2VyAHNlY3JldA== A002 OK AUTHENTICATE completed
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body








|







10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

#
# Server-side
<reply>
<servercmd>
AUTH PLAIN
REPLY AUTHENTICATE +
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

#
# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE PLAIN
dXNlcgB1c2VyAHNlY3JldA==
A003 SELECT 819
A004 FETCH 1 BODY[]
A005 LOGOUT
</protocol>
</verify>
</testcase>







|






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

#
# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE PLAIN dXNlcgB1c2VyAHNlY3JldA==
A003 SELECT 825
A004 FETCH 1 BODY[]
A005 LOGOUT
</protocol>
</verify>
</testcase>







|






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 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
# 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
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body








|







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 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
# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE CRAM-MD5
*
A003 AUTHENTICATE PLAIN
dXNlcgB1c2VyAHNlY3JldA==
A004 SELECT 833
A005 FETCH 1 BODY[]
A006 LOGOUT
</protocol>
</verify>
</testcase>







|






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
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
<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
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body








|







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 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
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE NTLM
TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
*
A003 AUTHENTICATE PLAIN
dXNlcgB1c2VyAHNlY3JldA==
A004 SELECT 834
A005 FETCH 1 BODY[]
A006 LOGOUT
</protocol>
</verify>
</testcase>







|






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
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
# 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
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body








|







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 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
# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE DIGEST-MD5
*
A003 AUTHENTICATE PLAIN
dXNlcgB1c2VyAHNlY3JldA==
A004 SELECT 835
A005 FETCH 1 BODY[]
A006 LOGOUT
</protocol>
</verify>
</testcase>







|






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

#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTHENTICATE +
REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== A002 OK AUTHENTICATE completed
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body








|







11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTHENTICATE +
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

#
# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE OAUTHBEARER
dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
A003 SELECT 842
A004 FETCH 1 BODY[]
A005 LOGOUT
</protocol>
</verify>
</testcase>







|






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

#
# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
A003 SELECT 843
A004 FETCH 1 BODY[]
A005 LOGOUT
</protocol>
</verify>
</testcase>







|






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

#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTHENTICATE +

REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0=
REPLY AQ== A002 NO Authentication failed
</servercmd>
</reply>

#
# Client-side
<client>







>
|







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== +
eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0=
REPLY AQ== A002 NO Authentication failed
</servercmd>
</reply>

#
# Client-side
<client>
48
49
50
51
52
53
54
55
56
57
58
59
</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==
AQ==
</protocol>
</verify>
</testcase>







|




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
bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AQ==
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test845.
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==
AQ==
</protocol>
</verify>
</testcase>







|




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

#
# Server-side
<reply>
<servercmd>
AUTH PLAIN
REPLY AUTH +
REPLY dXNlcgB1c2VyAHNlY3JldA== +OK Login successful
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body








|







12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

#
# Server-side
<reply>
<servercmd>
AUTH PLAIN
REPLY AUTH +
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

#
# Verify data after the test has been "shot"
<verify>
<protocol>
CAPA
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
RETR 865
QUIT
</protocol>
</verify>
</testcase>







|





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

#
# Verify data after the test has been "shot"
<verify>
<protocol>
CAPA
AUTH PLAIN dXNlcgB1c2VyAHNlY3JldA==
RETR 871
QUIT
</protocol>
</verify>
</testcase>







|





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 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
# 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
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body








|







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 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
# Verify data after the test has been "shot"
<verify>
<protocol>
CAPA
AUTH CRAM-MD5
*
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
RETR 879
QUIT
</protocol>
</verify>
</testcase>







|





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
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
<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
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body








|







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 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
<verify>
<protocol>
CAPA
AUTH NTLM
TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
*
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
RETR 880
QUIT
</protocol>
</verify>
</testcase>







|





65
66
67
68
69
70
71
72
73
74
75
76
77
<verify>
<protocol>
CAPA
AUTH NTLM
TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
*
AUTH PLAIN
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
# 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
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body








|







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 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
# Verify data after the test has been "shot"
<verify>
<protocol>
CAPA
AUTH DIGEST-MD5
*
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
RETR 881
QUIT
</protocol>
</verify>
</testcase>







|





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

#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTH +
REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +OK Login successful
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body








|







13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTH +
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

#
# Verify data after the test has been "shot"
<verify>
<protocol>
CAPA
AUTH OAUTHBEARER
dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
RETR 887
QUIT
</protocol>
</verify>
</testcase>







|





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

#
# Verify data after the test has been "shot"
<verify>
<protocol>
CAPA
AUTH OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
RETR 888
QUIT
</protocol>
</verify>
</testcase>







|





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

#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTH +
REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0
REPLY AQ== -ERR Authentication failed
</servercmd>
</reply>

#
# Client-side
<client>







|







13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTH +
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
</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==
AQ==
</protocol>
</verify>
</testcase>







|




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
bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AQ==
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test890.
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==
AQ==
</protocol>
</verify>
</testcase>







|




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

#
# Server-side
<reply>
<servercmd>
AUTH PLAIN
REPLY AUTH 334 PLAIN supported
REPLY dXNlcgB1c2VyAHNlY3JldA== 235 Authenticated
</servercmd>
</reply>

#
# Client-side
<client>
<server>







|







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

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 903
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
.
</upload>
</verify>
</testcase>







|











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

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 919
AUTH PLAIN dXNlcgB1c2VyAHNlY3JldA==
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body







|







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 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
# 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
</servercmd>
</reply>

#
# Client-side
<client>
<server>







|







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 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
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 935
AUTH CRAM-MD5
*
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
.
</upload>
</verify>
</testcase>







|











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
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
<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
</servercmd>
</reply>

#
# Client-side
<client>
<server>







|







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 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
<verify>
<protocol>
EHLO 936
AUTH NTLM
TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
*
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
.
</upload>
</verify>
</testcase>







|











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
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
# 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
</servercmd>
</reply>

#
# Client-side
<client>
<server>







|







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 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
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 937
AUTH DIGEST-MD5
*
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
.
</upload>
</verify>
</testcase>







|











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

#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTH 334 OAUTHBEARER supported
REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== 235 Authenticated
</servercmd>
</reply>

#
# Client-side
<client>
<server>







|







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

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 946
AUTH OAUTHBEARER
dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
.
</upload>
</verify>
</testcase>







|











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

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 947
AUTH OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body







|







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

#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTH 334 OAUTHBEARER supported
REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== 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>







|







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 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
</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==
AQ==
</protocol>
</verify>
</testcase>







|




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
bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AQ==
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test949.
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==
AQ==
</protocol>
</verify>
</testcase>







|




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 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
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2012, 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  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
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
	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) \
	lib1591$(EXEEXT) lib1592$(EXEEXT) lib1900$(EXEEXT) \
	lib1905$(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







|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|







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







>
>
>
>







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
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_lib2033_OBJECTS = lib2033-libntlmconnect.$(OBJEXT) \
	$(am__objects_135) $(am__objects_136) $(am__objects_137)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)







|
>
>
>
>
>
>
>
|
|

|


|
|
|
|
|


|
|



|
|
|
|
|


|
|
|
|
|


|
|
|
|
|


|
|



|
|



|
|
|
|
|


|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|
|
|



|
|



|
|



|
|



|
|



|
|



|
|
|
|
|


|
|
|
|
|


|
|
|
|
|


|
|
|
|
|


|
|
|
|
|


|
|
|
|
|


|
|
|
|
|


<
<
<
<
<
<
<







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 = 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_138) $(am__objects_139) $(am__objects_140)
lib2033_OBJECTS = $(am_lib2033_OBJECTS)
lib2033_DEPENDENCIES = $(am__DEPENDENCIES_1)
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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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
	../../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)/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 \







>













<







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)/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
	./$(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)/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 \







|
>
|
|
|
|
|
|
>







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)/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
	./$(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)/lib659-first.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 \







<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|







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)/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-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
	$(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) $(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) \
	$(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,







|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

|
|
|
|
|
|
|
|
|
|
|
|




















>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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) $(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)
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
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)







<
<
<







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)



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


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)



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)







>
>














>
>
>







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
	$(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)





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)








>
>
>
>







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
	$(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/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)








>
>
>
>
>
>







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
	$(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)








<
<
<
<
<
<







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/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
@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)/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







>













<







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)/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
@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)/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)/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







>













>
>
>







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







<
<
<







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)/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
../../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`

























































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








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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








<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







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`

























































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







>













<







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







>













>
>
>







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







<
<
<







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







>













<







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







>













>
>
>







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







<
<
<







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

# 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   \
 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 \
 lib1560 \
 lib1591 lib1592 \
 lib1900 lib1905 \
 lib2033

chkdecimalpoint_SOURCES = chkdecimalpoint.c ../../lib/mprintf.c \
 ../../lib/curl_ctype.c
chkdecimalpoint_LDADD =
chkdecimalpoint_CPPFLAGS = $(AM_CPPFLAGS) -DCURL_STATICLIB \
 -DCURLX_NO_MEMORY_CALLBACKS







|














|
<

|







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        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 lib1559 lib1560 \

 lib1591 lib1592 \
 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
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)







<
<
<
<







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)





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

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)




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)





lib2033_SOURCES = libntlmconnect.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib2033_LDADD = $(TESTUTIL_LIBS)
lib2033_CPPFLAGS = $(AM_CPPFLAGS) -DUSE_PIPELINING







>
>
>



















>
>
>
>




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

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;
  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);
  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",







|







|







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;
  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);
  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
#include "memdebug.h"

static char g_Data[40 * 1024]; /* POST 40KB */

static int sockopt_callback(void *clientp, curl_socket_t curlfd,
                            curlsocktype purpose)
{

  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)curlfd;

#endif
  return CURL_SOCKOPT_OK;
}

int test(char *URL)
{
  CURLcode code;







>



<



>

>







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;

  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
  }
  else {
    printf("curl_easy_perform() failed. e = %d\n", code);
  }

  curl_slist_free_all(pHeaderList);
  curl_easy_cleanup(pCurl);


  return 0;
}







>



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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
95
96
97
98
99
100
101
102

103
104
105
106
107
108
109

struct setcase {
  const char *in;
  const char *set;
  const char *out;
  unsigned int urlflags;
  unsigned int setflags;
  CURLUcode ucode;

};

struct testcase {
  const char *in;
  const char *out;
  unsigned int urlflags;
  unsigned int getflags;







|
>







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; /* 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
  {"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



  {"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]",






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







>
>
>













|
>
>
>
>
>
>







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] | 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
  {"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[] = {




















  {"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",







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
    return 1;
  }
  return 0;
}

/* !checksrc! disable SPACEBEFORECOMMA 1 */
static struct setcase set_parts_list[] = {






































  {"https://host/",
   "path=%4A%4B%4C,",
   "https://host/%4a%4b%4c",
   0, 0, CURLUE_NO_HOST},
  {"https://host/mooo?q#f",
   "path=NULL,query=NULL,fragment=NULL,",
   "https://host/",
   0, 0, CURLUE_NO_HOST},
  {"https://user:secret@host/",
   "user=NULL,password=NULL,",
   "https://host/",
   0, 0, CURLUE_NO_HOST},
  {NULL,
   "scheme=https,user=   @:,host=foobar,",
   "https://%20%20%20%40%3a@foobar/",
   0, CURLU_URLENCODE, CURLUE_OK},
  {NULL,
   "scheme=https,host=  ,path= ,user= ,password= ,query= ,fragment= ,",
   "https://%20:%20@%20%20/%20?+#%20",
   0, CURLU_URLENCODE, 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},




  {"imap://user:secret;opt@host/",
   "options=updated,scheme=imaps,password=p4ssw0rd,",
   "imaps://user:p4ssw0rd;updated@host/",
   0, 0, CURLUE_NO_HOST},
  {"imap://user:secret;optit@host/",
   "scheme=https,",
   "https://user:secret@host/",
   0, 0, CURLUE_NO_HOST},
  {"file:///file#anchor",
   "scheme=https,host=example,",
   "https://example/file#anchor",
   0, 0, CURLUE_NO_HOST},
  {NULL, /* start fresh! */
   "scheme=file,host=127.0.0.1,path=/no,user=anonymous,",
   "file:///no",
   0, 0, 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},
  {NULL, /* start fresh! */
   "scheme=https,host=example.com,",
   "https://example.com/",
   0, CURLU_NON_SUPPORT_SCHEME, 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},
  {"http://example.com/",
   "scheme=foo,", /* not accepted */
   "http://example.com/",
   0, 0, CURLUE_OK},
  {"http://example.com/",
   "scheme=https,path=/hello,fragment=snippet,",
   "https://example.com/hello#snippet",
   0, 0, CURLUE_OK},
  {"http://example.com:80",
   "user=foo,port=1922,",
   "http://foo@example.com:1922/",
   0, 0, CURLUE_OK},
  {"http://example.com:80",
   "user=foo,password=bar,",
   "http://foo:bar@example.com:80/",
   0, 0, CURLUE_OK},
  {"http://example.com:80",
   "user=foo,",
   "http://foo@example.com:80/",
   0, 0, CURLUE_OK},
  {"http://example.com",
   "host=www.example.com,",
   "http://www.example.com/",
   0, 0, CURLUE_OK},
  {"http://example.com:80",
   "scheme=ftp,",
   "ftp://example.com:80/",
   0, 0, CURLUE_OK},
  {NULL, NULL, NULL, 0, 0, 0}
};

static CURLUPart part2id(char *part)
{
  if(!strcmp("url", part))
    return CURLUPART_URL;
  if(!strcmp("scheme", part))







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>



|



|



|



|



|



|
>
>
>
>



|



|



|



|



|



|



|



|



|



|



|



|



|



|
|







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_OK, CURLUE_OK},
  {"https://host/mooo?q#f",
   "path=NULL,query=NULL,fragment=NULL,",
   "https://host/",
   0, 0, CURLUE_OK, CURLUE_OK},
  {"https://user:secret@host/",
   "user=NULL,password=NULL,",
   "https://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, CURLUE_OK},
  {NULL,
   "scheme=https,host=  ,path= ,user= ,password= ,query= ,fragment= ,",
   "https://%20:%20@%20%20/%20?+#%20",
   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, 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, CURLUE_OK},
  {"imap://user:secret;optit@host/",
   "scheme=https,",
   "https://user:secret@host/",
   0, 0, CURLUE_NO_HOST, CURLUE_OK},
  {"file:///file#anchor",
   "scheme=https,host=example,",
   "https://example/file#anchor",
   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, 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, CURLUE_OK},
  {NULL, /* start fresh! */
   "scheme=https,host=example.com,",
   "https://example.com/",
   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, CURLUE_OK},
  {"http://example.com/",
   "scheme=foo,", /* not accepted */
   "http://example.com/",
   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, CURLUE_OK},
  {"http://example.com:80",
   "user=foo,port=1922,",
   "http://foo@example.com:1922/",
   0, 0, CURLUE_OK, CURLUE_OK},
  {"http://example.com:80",
   "user=foo,password=bar,",
   "http://foo:bar@example.com:80/",
   0, 0, CURLUE_OK, CURLUE_OK},
  {"http://example.com:80",
   "user=foo,",
   "http://foo@example.com:80/",
   0, 0, CURLUE_OK, CURLUE_OK},
  {"http://example.com",
   "host=www.example.com,",
   "http://www.example.com/",
   0, 0, CURLUE_OK, CURLUE_OK},
  {"http://example.com:80",
   "scheme=ftp,",
   "ftp://example.com:80/",
   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
    return CURLUPART_PORT;
  if(!strcmp("path", part))
    return CURLUPART_PATH;
  if(!strcmp("query", part))
    return CURLUPART_QUERY;
  if(!strcmp("fragment", part))
    return CURLUPART_FRAGMENT;


  return 9999; /* bad input => bad output */
}

static void updateurl(CURLU *u, const char *cmd, unsigned int setflags)
{
  const char *p = cmd;


  /* 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(!strcmp("NULL", value))
          curl_url_set(u, what, NULL, setflags);


        else
          curl_url_set(u, what, value, setflags);


      }
      p = e + 1;
      continue;
    }
    break;
  }

}

static struct redircase set_url_list[] = {
  {"file://localhost/path?query#frag",
   "foo#another",
   "file:///foo#another",
   0, 0, 0},







>
>



|


>

















>
>
>

|
>
>

|
>
>






|







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 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))
          uc = curl_url_set(u, what, NULL, setflags);
        else if(!strcmp("\"\"", value))
          uc = curl_url_set(u, what, "", setflags);
        else
          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
    }
    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);








      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++;
      }







|
>
>
>
>
>
>
>
>







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) {
      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
        curl_free(url);
      }
    }
    curl_url_cleanup(urlp);
  }
  return error;
}
































































































































int test(char *URL)
{
  (void)URL; /* not used */




  if(append())
    return 5;

  if(set_url())
    return 1;









>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>



>
>
>







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


  return 0;
}







>



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
 * furnished to do so, under 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"



/*
 * 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.
 *







>
>







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







|







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 = 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
  return failed;
}


static int test_signed_short_formatting(void)
{
  int i, j;
  int num_sshort_tests;
  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";







|







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 = 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
  return failed;
}


static int test_unsigned_int_formatting(void)
{
  int i, j;
  int num_uint_tests;
  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";







|







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 = 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
  return failed;
}


static int test_signed_int_formatting(void)
{
  int i, j;
  int num_sint_tests;
  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";







|







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 = 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
  return failed;
}


static int test_unsigned_long_formatting(void)
{
  int i, j;
  int num_ulong_tests;
  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";







|







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 = 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
  return failed;
}


static int test_signed_long_formatting(void)
{
  int i, j;
  int num_slong_tests;
  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";







|







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 = 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
  return failed;
}


static int test_curl_off_t_formatting(void)
{
  int i, j;
  int num_cofft_tests;
  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";







|







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


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

>
>







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
import re
import select
import errno
from random import randint
from struct import pack, unpack
import time

from structure import Structure

CVS_REVISION = '$Revision: 526 $'

# Taken from socket module reference
INADDR_ANY = '0.0.0.0'
BROADCAST_ADDR = '<broadcast>'








|







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

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







|







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)
        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
                    
                    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() )
                        
                        if res.get_ancount() != 1:
                            raise NetBIOSError( 'Malformed response')
                        
                        return NBPositiveNameQueryResponse(res.get_answers())
            except select.error, ex:
                if ex[0] != errno.EINTR and ex[0] != errno.EAGAIN:
                    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()







|





|

|







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())
                        
                        if res.get_ancount() != 1:
                            raise NetBIOSError( 'Malformed response')
                        
                        return NBPositiveNameQueryResponse(res.get_answers())
            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


    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
                        # 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)
                    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"
                            else:
                                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:
                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)

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







|
|






|

|



|

|
|
|







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 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")
                            else:
                                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 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 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


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







|







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 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
        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]) )
            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):







|







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

                data = data + received
                bytes_left = read_length - len(data)
            except select.error, ex:
                if ex[0] != errno.EINTR and ex[0] != errno.EAGAIN:
                    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)

                data = data + received
                bytes_left = read_length - len(data)
            except select.error, ex:
                if ex[0] != errno.EINTR and ex[0] != errno.EAGAIN:
                    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:







|



|

|
















|



|

|







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)

                data = data + received
                bytes_left = read_length - len(data)
            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])

        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)

                data = data + received
                bytes_left = read_length - len(data)
            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])

        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
                continue
            else:
                return addrs
        raise Exception("Host not found")
                
    
    n = get_netbios_host_by_name("some-host")
    print n

if __name__ == '__main__':
    main()







|



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)

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

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

>



















|
|







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
# 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
        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):
           return self.fields[key]
        return None

    def __delitem__(self, key):
        del self.fields[key]

    def __len__(self):







|







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

    def getData(self):
        if self.fields.has_key(NTLMSSP_AV_EOL):
            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







|


|





|














|















|
















|







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

    def getData(self):
        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
        ('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"])'), 
        ('Version',':'),
        ('domain_name',':'),
        ('TargetInfoFields',':'))

    def checkVersion(self, flags):
        if flags is not None:
           if flags & NTLMSSP_NEGOTIATE_VERSION == 0:







|







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"])'),
        ('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

    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']]) 
        #    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'),







|



|







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']])
        #    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
        ('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"])'), 
        ('Version',':=""'),
        ('MICLen','_-MIC','self.checkMIC(self["flags"])'),
        ('MIC',':=""'),
        ('domain_name',':'),
        ('user_name',':'),
        ('host_name',':'),
        ('lanman',':'),







|







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"])'),
        ('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
           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 != ''):            
            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







|







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 != ''):
            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

    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, 
        # 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 
        self['ntlm'] = data[ ntlm_offset : ntlm_end ]

        lanman_offset = self['lanman_offset'] 
        lanman_end    = self['lanman_len'] + lanman_offset
        self['lanman'] = data[ lanman_offset : lanman_end]

        #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







|












|














|
|


|



|







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,
        # 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
        self['ntlm'] = data[ ntlm_offset : ntlm_end ]

        lanman_offset = self['lanman_offset']
        lanman_end    = self['lanman_len'] + lanman_offset
        self['lanman'] = data[ lanman_offset : lanman_end]

        #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
            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 
    # 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)])

    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:







|



|







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
    # method we will create a valid ChallengeResponse
    ntlmChallengeResponse = NTLMAuthChallengeResponse(user, password, ntlmChallenge['challenge'])

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







|







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 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
       # [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: 
        ntlmChallengeResponse['session_key'] = encryptedRandomSessionKey

    return ntlmChallengeResponse, exportedSessionKey


# NTLMv1 Algorithm

def generateSessionKeyV1(password, lmhash, nthash):
    if POW:
        hash = POW.Digest(POW.MD4_DIGEST)
    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 == ''): 
        # 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)   

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 UnicodeDecodeError:
        import sys
        password = password.decode(sys.getfilesystemencoding()).encode('utf_16le')

    if POW:
        hash = POW.Digest(POW.MD4_DIGEST)
    else:        
        hash = MD4.new()
    hash.update(password)
    return hash.digest()

def get_ntlmv1_response(key, challenge):
    return ntlmssp_DES_encrypt(key, challenge)








|










|



|

|


















|













|










>
>






|







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:
        ntlmChallengeResponse['session_key'] = encryptedRandomSessionKey

    return ntlmChallengeResponse, exportedSessionKey


# NTLMv1 Algorithm

def generateSessionKeyV1(password, lmhash, nthash):
    if POW:
        hash = POW.Digest(POW.MD4_DIGEST)
    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 == ''):
        # 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)

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








|







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








|














|







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








|







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
    @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): 
        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)








|






|





|

















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

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


# Contain information about a SMB machine
class SMBMachine:
    def __init__(self, nbname, nbt_type, comment):
        self.__nbname = nbname
        self.__type = nbt_type







|

|







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 & 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 & 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
        ('Mid','<H=0'),
        ('Data','*:'),
    )

    def __init__(self, **kargs):
        Structure.__init__(self, **kargs)

        if self.fields.has_key('Flags2') is False:
             self['Flags2'] = 0
        if self.fields.has_key('Flags1') is False:
             self['Flags1'] = 0

        if not kargs.has_key('data'):
            self['Data'] = []

    def addCommand(self, command):
        if len(self['Data']) == 0:
            self['Command'] = command.command
        else:
            self['Data'][-1]['Parameters']['AndXCommand'] = command.command







|

|


|







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 ('Flags2' in self.fields) is False:
             self['Flags2'] = 0
        if ('Flags1' in self.fields) is False:
             self['Flags1'] = 0

        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
            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)
        else:
            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







|

|







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)
        else:
            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
    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 )
                else:
                    break
        return 0

    def neg_session(self, extended_security = True, negPacket = None):
        def parsePacket(smb):
            if smb.isValidAnswer(SMB.SMB_COM_NEGOTIATE):







|







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

                # 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"
                    return 1
            else:
                return 0

        if negPacket is None:
            smb = NewSMBPacket()
            negSession = SMBCommand(SMB.SMB_COM_NEGOTIATE)







|







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")
                    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
    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'):
            return self._dialects_data['Challenge']
        else:
            return None

    def get_server_time(self):
        timestamp = self._dialects_parameters['HighDateTime']
        timestamp <<= 32







|







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 '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
                   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'):
                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)








|







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

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







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
            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"
        for i in self._Connection.items():
            print "%-40s : %s" % i
        print
        print "SESSION"
        for i in self._Session.items():
            print "%-40s : %s" % i

    def getServerName(self):
        return self._Session['ServerName']

    def getServerIP(self):
        return self._Connection['ServerIP']








|

|
|
|

|







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")
        for i in self._Connection.items():
            print("%-40s : %s" % i)
        print()
        print("SESSION")
        for i in self._Session.items():
            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
        # 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:
            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 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)








|









|







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 ('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 (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
            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):
            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())







|







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 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
                   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'):
                    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]







|







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 '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
    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):
            # 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







|







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

           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:
            raise SessionError(STATUS_INVALID_PARAMETER)

        if self._Session['TreeConnectTable'].has_key(treeId):
            # 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








|


|







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 (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        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
        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:
            raise SessionError(STATUS_INVALID_PARAMETER)

        fileName = string.replace(fileName, '/', '\\')
        if len(fileName) > 0:
            fileName = ntpath.normpath(fileName)
            if fileName[0] == '\\':
                fileName = fileName[1:]







|







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 (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
        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):
               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 







|







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

            # 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:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_CLOSE
        packet['TreeID']  = treeId

        smbClose = SMB2Close()







|

|







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 (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        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

    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:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_READ
        packet['TreeID']  = treeId

        if self._Connection['MaxReadSize'] < bytesToRead:







|

|







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 (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        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
       
    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:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_WRITE
        packet['TreeID']  = treeId

        if self._Connection['MaxWriteSize'] < bytesToWrite:







|

|







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 (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        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
            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:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_QUERY_DIRECTORY
        packet['TreeID']  = treeId

        queryDirectory = SMB2QueryDirectory()







|

|







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 (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        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

        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:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if fileId is None:
            fileId = '\xff'*16
        else:
            if self._Session['OpenTable'].has_key(fileId) is False:
                raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command']            = SMB2_IOCTL
        packet['TreeID']             = treeId
       
        smbIoctl = SMB2Ioctl()







|




|







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 (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if fileId is None:
            fileId = '\xff'*16
        else:
            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
        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:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) 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:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_LOCK
        packet['TreeID']  = treeId

        smbLock = SMB2Lock()







|

|


















|

|







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 (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        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 (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        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
            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:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_QUERY_INFO
        packet['TreeID']  = treeId

        queryInfo = SMB2QueryInfo()







|

|







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 (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        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
        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:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_SET_INFO
        packet['TreeID']  = treeId

        setInfo = SMB2SetInfo()







|

|







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 (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        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
                    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:
                    if (e.get_error_code()) != STATUS_NO_MORE_FILES:
                        raise
                    break 
        finally:
            if fileId is not None:
                self.close(treeId, fileId)
            self.disconnectTree(treeId) 







|







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







|







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







# 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








>
>
>
>
>
>







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
        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:
            LOG.error("outputToJohnFormat: %s" % e)
            pass

    return ret_value

def writeJohnOutputToFile(hash_string, hash_version, file_name):
    fn_data = os.path.splitext(file_name)







|







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 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
    else:
       mode = os.O_RDONLY

    try:
        if sys.platform == 'win32':
            mode |= os.O_BINARY
        fid = os.open(pathName, mode)
    except Exception, 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):







|







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 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
            # UNSUPPORTED
            return None, STATUS_NOT_SUPPORTED

        return infoRecord, errorCode
    else:
        # NOT FOUND
        return None, STATUS_OBJECT_NAME_NOT_FOUND
  except Exception, e:
      LOG.error('queryPathInfo: %s' % e)
      raise

def queryDiskInformation(path):
# TODO: Do something useful here :)
# For now we just return fake values
   totalUnits = 65535







|







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 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
                    # 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'):
                        tailData += shares[i]['comment'] + '\x00'
                    else:
                        tailData += '\x00'
                respData += tailData
            else:
                # We don't support other info levels
                errorCode = STATUS_NOT_SUPPORTED







|







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 '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
            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'):
                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







|







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 '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
        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):
            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)







|







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 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
        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']):
            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)







|







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

        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']):
                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







|
|







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

        respSetup = ''
        respParameters = ''
        respData = ''

        queryFileInfoParameters = smb.SMBQueryFileInformation_Parameters(parameters)

        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
            if connData['OpenedFiles'].has_key(queryFileInfoParameters['FID']):
                fileName = connData['OpenedFiles'][queryFileInfoParameters['FID']]['FileName']

                infoRecord, errorCode = queryFileInformation('', fileName, queryFileInfoParameters['InformationLevel'])

                if infoRecord is not None:
                    respParameters = smb.SMBQueryFileInformationResponse_Parameters()
                    respData = infoRecord







|
|







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 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
        respSetup = ''
        respParameters = ''
        respData = ''
        errorCode = 0

        queryPathInfoParameters = smb.SMBQueryPathInformation_Parameters(flags = recvPacket['Flags2'], data = parameters)

        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
            path = connData['ConnectedShares'][recvPacket['Tid']]['path']
            try:
               infoRecord, errorCode = queryPathInformation(path, decodeSMBString(recvPacket['Flags2'], queryPathInfoParameters['FileName']), queryPathInfoParameters['InformationLevel'])
            except Exception, 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']):
            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):
                searchResult = connData['SIDs'][sid]
                respParameters = smb.SMBFindNext2Response_Parameters()
                endOfSearch = 1
                searchCount = 1
                totalData = 0
                for i in enumerate(searchResult):
                    data = i[1].getData()







|



|

















|

















|
|







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 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 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 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 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
        connData = smbServer.getConnectionData(connId)

        respSetup = ''
        respParameters = ''
        respData = ''
        findFirst2Parameters = smb.SMBFindFirst2_Parameters( recvPacket['Flags2'], data = parameters)

        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
            path = connData['ConnectedShares'][recvPacket['Tid']]['path']

            searchResult, searchCount, errorCode = findFirst2(path,
                          decodeSMBString( recvPacket['Flags2'], findFirst2Parameters['FileName'] ),
                          findFirst2Parameters['InformationLevel'],
                          findFirst2Parameters['SearchAttributes'] )








|







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 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
            # 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):
               # 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:
                   #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







|











|







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 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 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
                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):
               # 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:
                   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 = ''







|











|







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 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 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
                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):
               # 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:
                   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







|








|







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

        respSMBCommand        = smb.SMBCommand(smb.SMB.SMB_COM_CLOSE)
        respParameters        = ''
        respData              = ''

        comClose =  smb.SMBClose_Parameters(SMBCommand['Parameters'])

        if connData['OpenedFiles'].has_key(comClose['FID']):
             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:
                 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:
                         smbServer.log("comClose %s" % e, logging.ERROR)
                         errorCode = STATUS_ACCESS_DENIED
                 del(connData['OpenedFiles'][comClose['FID']])
        else:
            errorCode = STATUS_INVALID_HANDLE

        if errorCode > 0:







|







|







|







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 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 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 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
        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']):
             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:
                 smbServer.log('smbComWrite: %s' % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE


        if errorCode > 0:







|













|







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

        respSMBCommand        = smb.SMBCommand(smb.SMB.SMB_COM_FLUSH)
        respParameters        = ''
        respData              = ''

        comFlush =  smb.SMBFlush_Parameters(SMBCommand['Parameters'])

        if connData['OpenedFiles'].has_key(comFlush['FID']):
             errorCode = STATUS_SUCCESS
             fileHandle = connData['OpenedFiles'][comFlush['FID']]['FileHandle']
             try:
                 os.fsync(fileHandle)
             except Exception, e:
                 smbServer.log("comFlush %s" % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE

        if errorCode > 0:
            respParameters = ''







|




|







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 comFlush['FID'] in connData['OpenedFiles']:
             errorCode = STATUS_SUCCESS
             fileHandle = connData['OpenedFiles'][comFlush['FID']]['FileHandle']
             try:
                 os.fsync(fileHandle)
             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
        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']):
             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:
                     smbServer.log("smbComCreateDirectory: %s" % e, logging.ERROR)
                     errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_SMB_BAD_TID


        if errorCode > 0:







|
















|







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

        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']):
             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:]







|







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 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
                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:
                     smbServer.log("smbComRename: %s" % e, logging.ERROR)
                     errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_SMB_BAD_TID


        if errorCode > 0:







|







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 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
        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']):
             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:
                     smbServer.log("smbComDelete: %s" % e, logging.ERROR)
                     errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_SMB_BAD_TID

        if errorCode > 0:
            respParameters = ''







|















|







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 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 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
        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']):
             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:
                     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







|















|







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 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 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
            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']):
             fileHandle = connData['OpenedFiles'][writeAndX['Fid']]['FileHandle']
             errorCode = STATUS_SUCCESS
             try:
                 if fileHandle != PIPE_FILE_DESCRIPTOR:
                     offset = writeAndX['Offset']
                     if writeAndX.fields.has_key('HighOffset'):
                         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:
                 smbServer.log('smbComWriteAndx: %s' % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE

        if errorCode > 0:
            respParameters = ''







|





|











|







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 writeAndX['Fid'] in connData['OpenedFiles']:
             fileHandle = connData['OpenedFiles'][writeAndX['Fid']]['FileHandle']
             errorCode = STATUS_SUCCESS
             try:
                 if fileHandle != PIPE_FILE_DESCRIPTOR:
                     offset = writeAndX['Offset']
                     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 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

        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']):
             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:
                 smbServer.log('smbComRead: %s ' % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE

        if errorCode > 0:
            respParameters = ''







|













|







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 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 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
        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']):
             fileHandle = connData['OpenedFiles'][readAndX['Fid']]['FileHandle']
             errorCode = 0
             try:
                 if fileHandle != PIPE_FILE_DESCRIPTOR:
                     offset = readAndX['Offset']
                     if readAndX.fields.has_key('HighOffset'):
                         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:
                 smbServer.log('smbComReadAndX: %s ' % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE

        if errorCode > 0:
            respParameters = ''







|





|











|







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 readAndX['Fid'] in connData['OpenedFiles']:
             fileHandle = connData['OpenedFiles'][readAndX['Fid']]['FileHandle']
             errorCode = 0
             try:
                 if fileHandle != PIPE_FILE_DESCRIPTOR:
                     offset = readAndX['Offset']
                     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 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
        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']):
            fileSize, lastWriteTime, fileAttributes = queryFsInformation(
                connData['ConnectedShares'][recvPacket['Tid']]['path'],
                decodeSMBString(recvPacket['Flags2'],queryInformation['FileName']))

            respParameters['FileSize']       = fileSize
            respParameters['LastWriteTime']  = lastWriteTime
            respParameters['FileAttributes'] = fileAttributes







|







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 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
        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']):
            totalUnits, freeUnits = queryDiskInformation(
                        connData['ConnectedShares'][recvPacket['Tid']]['path'])

            respParameters['TotalUnits']    = totalUnits
            respParameters['BlocksPerUnit'] = 1
            respParameters['BlockSize']     = 1
            respParameters['FreeUnits']     = freeUnits







|







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

        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']):
            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








|







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

        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']):
             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:
                 smbServer.log('smbComQueryInformation2 %s' % e,logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED

        if errorCode > 0:
            respParameters = ''
            respData       = ''








|


















|







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 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 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
        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 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'):
                     path = connData['ConnectedShares'][recvPacket['Tid']]['path']
                 else:
                     path = 'NONE'
                     errorCode = STATUS_ACCESS_DENIED

             deleteOnClose = False








|






|







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 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 '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
                     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:
                     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):







|







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 (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
                 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:
                             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)):
                                fid = PIPE_FILE_DESCRIPTOR
                                sock = socket.socket()
                                sock.connect(smbServer.getRegisteredNamedPipes()[unicode(pathName)])
                            else:
                                fid = os.open(pathName, mode)
                     except Exception, 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








|



















|





|







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 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 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 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
        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']):
             path = connData['ConnectedShares'][recvPacket['Tid']]['path']
             openedFile, mode, pathName, errorCode = openFile(path,
                     decodeSMBString(recvPacket['Flags2'],openAndXData['FileName']),
                     openAndXParameters['DesiredAccess'],
                     openAndXParameters['FileAttributes'],
                     openAndXParameters['OpenMode'])
        else:







|







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 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
               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):
                           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()







|







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 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
                    _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'):
                        _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







|







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


           respSMBCommand['Data']           = _dialects_data
           respSMBCommand['Parameters']     = _dialects_parameters
           connData['_dialects_data']       = _dialects_data
           connData['_dialects_parameters'] = _dialects_parameters

        except Exception, e:
           # No NTLM throw an error
           smbServer.log('smbComNegotiate: %s' % e, logging.ERROR)
           respSMBCommand['Data'] = struct.pack('<H',0xffff)


        smbServer.setConnectionData(connId, connData)








|







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 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
           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):
                       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()







|







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

        respSMBCommand        = smb2.SMB2Create_Response()

        ntCreateRequest       = smb2.SMB2Create(recvPacket['Data'])

        respSMBCommand['Buffer'] = '\x00'
        # Get the Tid associated
        if connData['ConnectedShares'].has_key(recvPacket['TreeID']):
             # If we have a rootFid, the path is relative to that fid
             errorCode = STATUS_SUCCESS
             if connData['ConnectedShares'][recvPacket['TreeID']].has_key('path'):
                 path = connData['ConnectedShares'][recvPacket['TreeID']]['path']
             else:
                 path = 'NONE'
                 errorCode = STATUS_ACCESS_DENIED

             deleteOnClose = False








|


|







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 recvPacket['TreeID'] in connData['ConnectedShares']:
             # If we have a rootFid, the path is relative to that fid
             errorCode = STATUS_SUCCESS
             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
                     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:
                     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):







|







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 (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
                 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:
                             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)):
                                fid = PIPE_FILE_DESCRIPTOR
                                sock = socket.socket()
                                sock.connect(smbServer.getRegisteredNamedPipes()[unicode(pathName)])
                            else:
                                fid = os.open(pathName, mode)
                     except Exception, 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








|



















|





|







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

        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'):
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(closeRequest['FileID'])
        else:
            fileID = str(closeRequest['FileID'])

        if connData['OpenedFiles'].has_key(fileID):
             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:
                 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:
                         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']







|






|










|










|







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  'SMB2_CREATE' in connData['LastRequest']:
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(closeRequest['FileID'])
        else:
            fileID = str(closeRequest['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 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 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
        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'):
                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):
                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







|






|
|







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  'SMB2_CREATE' in connData['LastRequest']:
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(queryInfo['FileID'])
        else:
            fileID = str(queryInfo['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

        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'):
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(setInfo['FileID'])
        else:
            fileID = str(setInfo['FileID'])

        if connData['ConnectedShares'].has_key(recvPacket['TreeID']):
            path     = connData['ConnectedShares'][recvPacket['TreeID']]['path']
            if connData['OpenedFiles'].has_key(fileID):
                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'])







|






|

|







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  'SMB2_CREATE' in connData['LastRequest']:
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(setInfo['FileID'])
        else:
            fileID = str(setInfo['FileID'])

        if recvPacket['TreeID'] in connData['ConnectedShares']:
            path     = connData['ConnectedShares'][recvPacket['TreeID']]['path']
            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
                        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:
                             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:







|







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 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
        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'):
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(writeRequest['FileID'])
        else:
            fileID = str(writeRequest['FileID'])

        if connData['OpenedFiles'].has_key(fileID):
             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:
                 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'):
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(readRequest['FileID'])
        else:
            fileID = str(readRequest['FileID'])

        if connData['OpenedFiles'].has_key(fileID):
             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:
                 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'])):
             fileHandle = connData['OpenedFiles'][str(flushRequest['FileID'])]['FileHandle']
             errorCode = STATUS_SUCCESS
             try:
                 os.fsync(fileHandle)
             except Exception, 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:
            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'):
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(queryDirectoryRequest['FileID'])
        else:
            fileID = str(queryDirectoryRequest['FileID'])

        if connData['OpenedFiles'].has_key(fileID) 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








|






|















|



















|






|















|















|




|


















|






|






|







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  'SMB2_CREATE' in connData['LastRequest']:
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(writeRequest['FileID'])
        else:
            fileID = str(writeRequest['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 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  'SMB2_CREATE' in connData['LastRequest']:
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(readRequest['FileID'])
        else:
            fileID = str(readRequest['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 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 str(flushRequest['FileID']) in connData['OpenedFiles']:
             fileHandle = connData['OpenedFiles'][str(flushRequest['FileID'])]['FileHandle']
             errorCode = STATUS_SUCCESS
             try:
                 os.fsync(fileHandle)
             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 (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  'SMB2_CREATE' in connData['LastRequest']:
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(queryDirectoryRequest['FileID'])
        else:
            fileID = str(queryDirectoryRequest['FileID'])

        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

    @staticmethod
    def smb2TreeDisconnect(connId, smbServer, recvPacket):
        connData = smbServer.getConnectionData(connId)

        respSMBCommand = smb2.SMB2TreeDisconnect_Response()

        if connData['ConnectedShares'].has_key(recvPacket['TreeID']):
            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








|







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 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
    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']):
            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







|







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

   @staticmethod
   def fsctlPipeTransceive(connId, smbServer, ioctlRequest):
        connData = smbServer.getConnectionData(connId)

        ioctlResponse = ''

        if connData['OpenedFiles'].has_key(str(ioctlRequest['FileID'])):
             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:
                 smbServer.log('fsctlPipeTransceive: %s ' % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_DEVICE_REQUEST

        smbServer.setConnectionData(connId, connData)
        return ioctlResponse, errorCode







|









|







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







|







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 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
        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:
                # 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):
            del(self.__registeredNamedPipes[unicode(pipeName)])
            return True
        return False

    def unregisterTransaction(self, transCommand):
        if self.__smbTransCommands.has_key(transCommand):
           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







|












|





|







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 ('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 pipeName in self.__registeredNamedPipes:
            del(self.__registeredNamedPipes[unicode(pipeName)])
            return True
        return False

    def unregisterTransaction(self, 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
        # 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):
           originalCommand = self.__smbTransCommands[transCommand]
        else:
           originalCommand = None

        self.__smbTransCommands[transCommand] = callback
        return originalCommand

    def unregisterTransaction2(self, transCommand):
        if self.__smbTrans2Commands.has_key(transCommand):
           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):
           originalCommand = self.__smbTrans2Commands[transCommand]
        else:
           originalCommand = None

        self.__smbTrans2Commands[transCommand] = callback
        return originalCommand

    def unregisterNTTransaction(self, transCommand):
        if self.__smbNTTransCommands.has_key(transCommand):
           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):
           originalCommand = self.__smbNTTransCommands[transCommand]
        else:
           originalCommand = None

        self.__smbNTTransCommands[transCommand] = callback
        return originalCommand

    def unregisterSmbCommand(self, smbCommand):
        if self.__smbCommands.has_key(smbCommand):
           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







|








|





|








|





|








|







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 transCommand in self.__smbTransCommands:
           originalCommand = self.__smbTransCommands[transCommand]
        else:
           originalCommand = None

        self.__smbTransCommands[transCommand] = callback
        return originalCommand

    def unregisterTransaction2(self, 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 transCommand in self.__smbTrans2Commands:
           originalCommand = self.__smbTrans2Commands[transCommand]
        else:
           originalCommand = None

        self.__smbTrans2Commands[transCommand] = callback
        return originalCommand

    def unregisterNTTransaction(self, 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 transCommand in self.__smbNTTransCommands:
           originalCommand = self.__smbNTTransCommands[transCommand]
        else:
           originalCommand = None

        self.__smbNTTransCommands[transCommand] = callback
        return originalCommand

    def unregisterSmbCommand(self, 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
        # callback(connId, smbServer, SMBCommand, recvPacket, transCommands)
        #
        # WHERE:
        #
        # transCommands: a list of transaction subcommands already registered
        #

        if self.__smbCommands.has_key(smbCommand):
           originalCommand = self.__smbCommands[smbCommand]
        else:
           originalCommand = None

        self.__smbCommands[smbCommand] = callback
        return originalCommand

    def unregisterSmb2Command(self, smb2Command):
        if self.__smb2Commands.has_key(smb2Command):
           del(self.__smb2Commands[smb2Command])

    def hookSmb2Command(self, smb2Command, callback):
        if self.__smb2Commands.has_key(smb2Command):
           originalCommand = self.__smb2Commands[smb2Command]
        else:
           originalCommand = None

        self.__smb2Commands[smb2Command] = callback
        return originalCommand








|








|



|







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 smbCommand in self.__smbCommands:
           originalCommand = self.__smbCommands[smbCommand]
        else:
           originalCommand = None

        self.__smbCommands[smbCommand] = callback
        return originalCommand

    def unregisterSmb2Command(self, smb2Command):
        if smb2Command in self.__smb2Commands:
           del(self.__smb2Commands[smb2Command])

    def hookSmb2Command(self, smb2Command, callback):
        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
                    respCommands, respPackets, errorCode = self.__smbCommands[packet['Command']](
                                  connId,
                                  self,
                                  SMBCommand,
                                  packet,
                                  self.__smbTransCommands)
                else:
                    if self.__smbCommands.has_key(packet['Command']):
                       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:
                                   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)







|





|







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

                compoundedPacketsResponse.append((respCommands, respPackets, errorCode))
                compoundedPackets.append(packet)

            else:
                done = False
                while not done:
                    if self.__smb2Commands.has_key(packet['Command']):
                       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:
            #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.







|


















|







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

# 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' 
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)

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

class GSSAPI:
# Generic GSSAPI Header Format 
    def __init__(self, data = None):
        self.fields = {}
        self['UUID'] = GSS_API_SPNEGO_UUID
        if data:
             self.fromString(data)
        pass

    def __setitem__(self,key,value):
        self.fields[key] = value

    def __getitem__(self, key):
        return self.fields[key]
>















|



















|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|


|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|


|




|







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

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

class GSSAPI:
# Generic GSSAPI Header Format
    def __init__(self, data = None):
        self.fields = {}
        self['UUID'] = GSS_API_SPNEGO_UUID
        if 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
        # 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) 
        # Now we should have a OID tag
       	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)                
        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])

    def getData(self):
        ans = pack('B',ASN1_AID)
        ans += asn1encode(
               pack('B',ASN1_OID) + 
               asn1encode(self['UUID']) +
               self['Payload'] )
        return ans

class SPNEGO_NegTokenResp:
    # http://tools.ietf.org/html/rfc4178#page-9
    # NegTokenResp ::= SEQUENCE {







|

|




|




|


|




|







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)
        # Now we should have a OID tag
        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)
        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]))

    def getData(self):
        ans = pack('B',ASN1_AID)
        ans += asn1encode(
               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
    # 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)
        pass

    def __setitem__(self,key,value):
        self.fields[key] = value

    def __getitem__(self, key):
        return self.fields[key]







|







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







|







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)
        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
            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])
        
    def getData(self):
        ans = pack('B',SPNEGO_NegTokenResp.SPNEGO_NEG_TOKEN_RESP)
        if self.fields.has_key('NegResult') and self.fields.has_key('SupportedMech'):
            # Server resp
            ans += asn1encode(
               pack('B', ASN1_SEQUENCE) +
               asn1encode(
               pack('B',SPNEGO_NegTokenResp.SPNEGO_NEG_TOKEN_TARG) +
               asn1encode(
               pack('B',ASN1_ENUMERATED) + 
               asn1encode( self['NegResult'] )) +
               pack('B',ASN1_SUPPORTED_MECH) +
               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'):
            # Server resp
            ans += asn1encode(
               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 
    # NegTokeInit :: = SEQUENCE {
    #   mechTypes	[0] MechTypeList,
    #   reqFlags        [1] ContextFlags 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] 
        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]
        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:]

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







|
|


|






|


|





|


|
















|

|

|






|





|


















|
|
|
|
|
|
|
|







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

    def getData(self):
        ans = pack('B',SPNEGO_NegTokenResp.SPNEGO_NEG_TOKEN_RESP)
        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) +
               asn1encode( self['NegResult'] )) +
               pack('B',ASN1_SUPPORTED_MECH) +
               asn1encode(
               pack('B',ASN1_OID) +
               asn1encode(self['SupportedMech'])) +
               pack('B',ASN1_RESPONSE_TOKEN ) +
               asn1encode(
               pack('B', ASN1_OCTET_STRING) + asn1encode(self['ResponseToken']))))
        elif 'NegResult' 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) +
               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
    # NegTokeInit :: = SEQUENCE {
    #   mechTypes       [0] MechTypeList,
    #   reqFlags        [1] ContextFlags 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]
        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]
        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:]

        # 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
        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'):
            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) + 
               asn1encode(mechTypes)) + mechToken ))


        self['Payload'] = ans
        return GSSAPI.getData(self)
     







|










|





<
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 '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) +
               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

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

>







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

        if format is None:
            format = self.formatForField(fieldName)

        if self.fields.has_key(fieldName):
            ans = self.pack(format, self.fields[fieldName], field = fieldName)
        else:
            ans = self.pack(format, None, field = fieldName)

        if self.debug:
            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]):
                    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)
            size = self.calcUnpackSize(field[1], data, field[0])
            if self.debug:
                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:
                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:]







|




|





|










|
|















|


|





|







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

        if format is None:
            format = self.formatForField(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)

        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 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))
            size = self.calcUnpackSize(field[1], data, field[0])
            if self.debug:
                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 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

    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)

        if field:
            addressField = self.findAddressFieldFor(field)
            if (addressField is not None) and (data is None):
                return ''

        # void specifier







|







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

        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

        # 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):
                    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:







|







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 (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
        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"
                else:
                    return self.pack(two[0], len(data))+answer
            return answer

        # "printf" string specifier
        if format[:1] == '%':
            # format string like specifier







|







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")
                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
                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"
        
        # 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)

        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)
            return answer

        # address specifier
        two = format.split('&')
        if len(two) == 2:
            return self.unpack(two[0],data)








|










|




















|







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")
        
        # 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))

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








|





|







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

        # 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"
            elif two[0]:
                answer += self.calcPackSize(two[0], len(data))

            for each in data:
                answer += self.calcPackSize(two[1], each)
            return answer








|







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

        # void specifier
        if format[:1] == '_':
            return 0

        addressField = self.findAddressFieldFor(field)
        if addressField is not None:







|







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

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

        # asciiz specifier
        if format[:1] == 'z':
            return data.index('\x00')+1

        # asciiz specifier
        if format[:1] == 'u':







|







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

        # 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

        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)

    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]







|







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)

    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
    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
        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
                else:
                    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
            else:
                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
        testName = self.__class__.__name__
        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....."
        b = self.create(a_str)
        b.dump("unpacked.....")
        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

class _Test_simple(_StructureTest):
    class theClass(Structure):
        commonHdr = ()
        structure = (
                ('int1', '!L'),
                ('len1','!L-z1'),







|







|

|






|

|











|
|

|




|
|


|


|
|







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)
        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)
                else:
                    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)
            else:
                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)
        testName = self.__class__.__name__
        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.....")
        b = self.create(a_str)
        b.dump("unpacked.....")
        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)

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
        
if __name__ == '__main__':
    _Test_simple().run()

    try:
        _Test_fixedLength().run()
    except:
        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()







|








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

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

import re

from random import randrange
from struct import pack, unpack






def generate():
    # UHm... crappy Python has an maximum integer of 2**31-1.
    top = (1L<<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)








>
>
>
>
>


|







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 = (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
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) 
#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') 
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: 
        (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)







|

|
|
|
|
|


|







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)
#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')
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:
        (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
.\" * furnished to do so, under the 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"

.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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
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 $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







|







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 = 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
#######################################################################
# 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;







<







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 $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
    $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 .= "--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







|







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 ";
    $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
    }
    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);
    }

    # 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);
    }

    # 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);

    # Find out ssh client canonical file name
    my $ssh = find_ssh();
    if(!$ssh) {
        logmsg "RUN: SOCKS server cannot find $sshexe\n";
        $doesntrun{$pidfile} = 1;
        return (0,0);
    }

    # 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);
    }

    # 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

    if($sshpid <= 0 || !pidexists($sshpid)) {
        # 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);
}

#######################################################################
# start the dict server
#
sub rundictserver {
    my ($verbose, $alt, $port) = @_;







<
<
<
<
<
<
|
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
|
<
<
|
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|

|


<
<
<
<





<
<
<
<
<
<
<
<
<
<
<




|







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







    # start our socks server, get commands from the FTP cmd file







    my $cmd="server/socksd".










        " --port $port ".




        " --pidfile $pidfile".


        " --backend $HOSTIP".









        " --config $FTPDCMD";




























    my ($sockspid, $pid2) = startnew($cmd, $pidfile, 30, 0);

    if($sockspid <= 0 || !pidexists($sockspid)) {
        # it is NOT alive
        logmsg "RUN: failed to start the $srvrname server\n";




        stopserver($server, "$pid2");
        $doesntrun{$pidfile} = 1;
        return (0,0);
    }












    if($verbose) {
        logmsg "RUN: $srvrname server is now running PID $pid2\n";
    }

    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
                        }
                        if($debug_build || ($has_shared ne "yes")) {
                            # print "Skipping LD_PRELOAD due to no release shared build\n";
                            next;
                        }
                    }
                    $ENV{$var} = "$content";

                }
            }
        }
    }

    if(!$why) {
        my @precheck = getpart("client", "precheck");







>







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







|







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 = 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
                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" ) {
            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";
                }
            }
            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');
            }







|








>
|
|
|
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







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") {
            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";
            }
        }
        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";


















            }
        }
        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
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)
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 \







|







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

















	../../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) \
	../../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) \
	../../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) \
	../../lib/tftpd-nonblock.$(OBJEXT) \
	../../lib/tftpd-strtoofft.$(OBJEXT) \
	../../lib/tftpd-warnless.$(OBJEXT) \
	../../lib/tftpd-curl_ctype.$(OBJEXT)
am__objects_20 = 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)
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@)







|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>




|

|
|
|






|




|


|
|
|







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/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_20 = sws-getpart.$(OBJEXT) ../../lib/sws-base64.$(OBJEXT) \
	../../lib/sws-memdebug.$(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_22 = ../../lib/tftpd-mprintf.$(OBJEXT) \
	../../lib/tftpd-nonblock.$(OBJEXT) \
	../../lib/tftpd-strtoofft.$(OBJEXT) \
	../../lib/tftpd-warnless.$(OBJEXT) \
	../../lib/tftpd-curl_ctype.$(OBJEXT)
am__objects_23 = tftpd-getpart.$(OBJEXT) \
	../../lib/tftpd-base64.$(OBJEXT) \
	../../lib/tftpd-memdebug.$(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
	../../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)/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 \







>
>
>
>
>
>
>
>







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
	./$(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)/sws-getpart.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)
DIST_SOURCES = $(fake_ntlm_SOURCES) $(getpart_SOURCES) \
	$(resolve_SOURCES) $(rtspd_SOURCES) $(sockfilt_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,







>
>
|
|
|




















|
|


|







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-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) $(socksd_SOURCES) \
	$(sws_SOURCES) $(tftpd_SOURCES)
DIST_SOURCES = $(fake_ntlm_SOURCES) $(getpart_SOURCES) \
	$(resolve_SOURCES) $(rtspd_SOURCES) $(sockfilt_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
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)






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)







>
>
>
>
>
>







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
	../../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/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) \







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
@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)/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







>
>
>
>
>
>
>
>







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
@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)/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








>
>
>







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








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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







>
>
>
>
>
>
>
>







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







>
>
>







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







>
>
>
>
>
>
>
>







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







>
>
>







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
noinst_PROGRAMS = getpart resolve rtspd sockfilt sws tftpd fake_ntlm

CURLX_SRCS = \
 ../../lib/mprintf.c \
 ../../lib/nonblock.c \
 ../../lib/strtoofft.c \
 ../../lib/warnless.c \
 ../../lib/curl_ctype.c
|







1
2
3
4
5
6
7
8
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

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)







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)







>
>
>
>
>
>







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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
                     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;







<
<






<







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

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







<
<
<
<
<
<
<
<







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







<
<
<
<
<







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);
    }
  }






  /* **** 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
       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 &&
     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) {







<
|









<
<
<
<
<
<
<
<
<
<
<
<
<







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













  }

  /* 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
  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->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;







<
<
<
<
|
|
<









<







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




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







<
<
<
<
<
<
<
<
<
<
<







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

    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);
  if(got_exit_signal)
    return -1;

  return fail ? -1 : 1;
}

/* returns -1 on failure */







<
<
<
<
<



















|







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(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->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
            /* 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;
            }







<







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

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







<







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. */


  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
#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))
    msnprintf(buf, sizeof(buf), "Unknown error %lu (%#lx)", err, err);
  if(msg)
    fprintf(stderr, "%s: ", msg);
  fprintf(stderr, "%s\n", buf);
}
#endif  /* WIN32 */








|
|







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(!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
#!/usr/bin/env perl
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2014, 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.
# Also creates the ssh configuration files needed for these tests.

use strict;
use warnings;
use Cwd;
use Cwd 'abs_path';









|














|







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







<







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 $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
        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
#
$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';








<
<
<
<
<
<
<
<
















|



<







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








    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 and sftp server log file names
#
$sshdlog = server_logfilename($logdir, 'ssh', $ipvnum, $idnum);
$sftplog = server_logfilename($logdir, 'sftp', $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
#***************************************************************************
# 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';
    exit 1;
}
logmsg "ssh server found $sshd is $sshdverstr" if($verbose);


#***************************************************************************
#  ssh daemon command line options we might use and version support







|







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


#***************************************************************************
# 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';
    exit 1;
}


#***************************************************************************
# Find out sftp server plugin canonical file name
#







|







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 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
#***************************************************************************
# 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';
    exit 1;
}
logmsg "ssh client found $ssh is $sshverstr" if($verbose);


#***************************************************************************
#  ssh client command line options we might use and version support







|







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


#***************************************************************************
# 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';
    exit 1;
}


#***************************************************************************
#  ssh keygen command line options we actually use and version support
#







|







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







<







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, '#';
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
.\" * furnished to do so, under the 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"

.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







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the 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.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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2016, 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
203
204
205
206
207
208
209
210
211
212
213
214
  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







<
<
<
<

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");





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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 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







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/* 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");







<







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

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

/* 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;








<
<
<


<









<
<
<
<
<
<
<
<
<
<
<
<







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 void unit_stop(void)
{

  curl_global_cleanup();
}

static CURLcode unit_setup(void)
{
  int res = CURLE_OK;

  global_init(CURL_GLOBAL_ALL);













  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
  },
};

UNITTEST_START
  int i;
  int testnum = sizeof(tests) / sizeof(struct testcase);

  for(i = 0; i < testnum; ++i, curl_easy_reset(easy)) {
    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;






    Curl_hostcache_clean(easy, hostcache);

    easy->dns.hostcache = hostcache;

    easy->dns.hostcachetype = HCACHE_GLOBAL;

    list = curl_slist_append(NULL, tests[i].optval);
    if(!list)
        goto unit_test_abort;
    curl_easy_setopt(easy, CURLOPT_RESOLVE, list);

    Curl_loadhostpairs(easy);







|







>
>
>
>
>
|
|
>
|
>
|







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) {
    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);

    Curl_loadhostpairs(easy);
210
211
212
213
214
215
216
217

218
219
220
221
222
223
224
225
        problem = true;
        break;
      }

      addr = addr->ai_next;
    }

    Curl_hostcache_clean(easy, easy->dns.hostcache);

    curl_slist_free_all(list);

    if(problem) {
      unitfail++;
      continue;
    }
  }
UNITTEST_STOP







|
>








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_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
    if(CURLE_OK != Curl_shuffle_addr(easy, &addrhead))
      break;
    if(addrhead != addrs)
      break;
  }

  curl_easy_cleanup(easy);


  abort_unless(addrhead != addrs, "addresses are not being reordered");

  return 0;
}
UNITTEST_STOP







>






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

/* 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;








<
<
<


<









<
<
<
<
<
<
<
<
<
<
<
<







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 void unit_stop(void)
{

  curl_global_cleanup();
}

static CURLcode unit_setup(void)
{
  int res = CURLE_OK;

  global_init(CURL_GLOBAL_ALL);













  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
  },
  { "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)) {
    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;











    list = curl_slist_append(NULL, tests[i].optval);
    if(!list)
        goto unit_test_abort;

    curl_easy_setopt(easy, CURLOPT_RESOLVE, list);








>






<
<
<

|







>
>
>
>
>
>
>
>
>
>







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. */




  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
        problem = true;
        break;
      }

      addr = addr->ai_next;
    }




    curl_slist_free_all(list);

    if(problem) {
      unitfail++;
      continue;
    }
  }

  Curl_hostcache_clean(easy, easy->dns.hostcache);

UNITTEST_STOP







>
>
>







|
<
<

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


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
  return CURLE_OK;
}

static void unit_stop(void)
{
}

#ifdef __MINGW32__


UNITTEST_START
{
  return 0;
}
UNITTEST_STOP
#else








|
>
>







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)
{
}

#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
  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");
  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:
  free(ipv6port);
  curl_url_cleanup(u);
}
UNITTEST_STOP







|















|





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");
  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 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
!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







<
<
<
<
<
<







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 "$(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
LFLAGS = $(LFLAGS) $(NGHTTP2_LFLAGS) $(NGHTTP2_LIBS)
!ENDIF

!IF "$(GEN_PDB)"=="true"
CFLAGS = $(CFLAGS) $(CFLAGS_PDB) /Fd"$(LIB_DIROBJ)\$(PDB)"
LFLAGS = $(LFLAGS) $(LFLAGS_PDB)
!ENDIF







LIB_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib
CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl
DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\

#
# curl.exe







>
>
>
>
>
>







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
@echo OFF






















@if exist %OUTFILE% (
    del %OUTFILE%
)

@echo %MACRO_NAME% = \> %OUTFILE%
@for %%i in (%*) do @echo		%DIROBJ%/%%i \>>  %OUTFILE%
@echo. >>  %OUTFILE%

:END
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|


>
|
|
|
>

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

:END