mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-12-06 07:12:28 +01:00
Compare commits
6943 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
54206c62b3 | ||
|
|
67f7119717 | ||
|
|
133b19f205 | ||
|
|
fce393024a | ||
|
|
7d3cf831d5 | ||
|
|
dc27047ed4 | ||
|
|
b9a9c1af07 | ||
|
|
e3f5f2d14e | ||
|
|
ff9401303b | ||
|
|
2a6f1cf35c | ||
|
|
b86b4d15c6 | ||
|
|
23ffa4ccdb | ||
|
|
cbba687ffa | ||
|
|
613d428ced | ||
|
|
6489fca16b | ||
|
|
3c747b377f | ||
|
|
a859e14e19 | ||
|
|
6dd37cb2d5 | ||
|
|
7e8ed5ecc1 | ||
|
|
d396a778b7 | ||
|
|
25badf9534 | ||
|
|
314b69c7d8 | ||
|
|
bc55f7787e | ||
|
|
4bda2f9b0f | ||
|
|
d822d85ea1 | ||
|
|
7001940483 | ||
|
|
3c5c74c496 | ||
|
|
c80aba2342 | ||
|
|
84d5e42896 | ||
|
|
53edd410c7 | ||
|
|
7f9cc357e8 | ||
|
|
e2cbbcf646 | ||
|
|
e938b93f48 | ||
|
|
4a042ae84f | ||
|
|
c48ae344a8 | ||
|
|
e09be04df6 | ||
|
|
d625c1d004 | ||
|
|
cae77784db | ||
|
|
14bd6b0cc5 | ||
|
|
e11f8df064 | ||
|
|
e2da6d36ba | ||
|
|
27c2f2ae4d | ||
|
|
727f3dd7a1 | ||
|
|
7b560e5ffa | ||
|
|
50c9a91942 | ||
|
|
d9f913016c | ||
|
|
a442cb91a1 | ||
|
|
41aaa912e7 | ||
|
|
6ebdb0c0c1 | ||
|
|
914b52cf4a | ||
|
|
b451dfe877 | ||
|
|
7986ee58de | ||
|
|
5a9083e4fc | ||
|
|
6a398f9947 | ||
|
|
8495a138c6 | ||
|
|
2c1d962bdc | ||
|
|
0fbd0e8cc7 | ||
|
|
5c187f5cda | ||
|
|
cb7650240c | ||
|
|
9d92e190eb | ||
|
|
42d9065c11 | ||
|
|
f300832edb | ||
|
|
683baf46b2 | ||
|
|
89a13b75f7 | ||
|
|
7472d95b0c | ||
|
|
ecba1d2cb7 | ||
|
|
fcff16b6f7 | ||
|
|
a3f7c0d67f | ||
|
|
98ca15699b | ||
|
|
dec6fba68d | ||
|
|
e1eb7421fb | ||
|
|
ea7183b6bd | ||
|
|
d6a36f4b60 | ||
|
|
6e11978638 | ||
|
|
7f6842705c | ||
|
|
9deb6cd4fa | ||
|
|
e6d723c675 | ||
|
|
400b4e71cf | ||
|
|
3c3197d72d | ||
|
|
cffc13696d | ||
|
|
ff72f944ba | ||
|
|
b067688c8e | ||
|
|
8ccc30725a | ||
|
|
c38b8c6d12 | ||
|
|
107d9dc533 | ||
|
|
c669a0beb7 | ||
|
|
f992ccdcad | ||
|
|
e6dc0d98f5 | ||
|
|
1250e428a7 | ||
|
|
ddecade935 | ||
|
|
de914247be | ||
|
|
6a51cd9f7f | ||
|
|
2042b54d2d | ||
|
|
5267c87ca7 | ||
|
|
6731feb751 | ||
|
|
10f8a49e36 | ||
|
|
a6371ef5d3 | ||
|
|
2d3e6c6d02 | ||
|
|
9b1d39c14e | ||
|
|
5893851029 | ||
|
|
42177add17 | ||
|
|
84fdd2e056 | ||
|
|
bc01863654 | ||
|
|
cbb4dd8f22 | ||
|
|
0439b62257 | ||
|
|
a93197cdcb | ||
|
|
b8031f4510 | ||
|
|
db8437b01c | ||
|
|
63f7bcf652 | ||
|
|
109abea454 | ||
|
|
c7ae97f8ea | ||
|
|
d61f4101ad | ||
|
|
ec70c9691f | ||
|
|
18111ac8bc | ||
|
|
5a761c7184 | ||
|
|
510ed00b11 | ||
|
|
fa06fed86f | ||
|
|
871dd729b2 | ||
|
|
7e209a7275 | ||
|
|
0bb84b374e | ||
|
|
92e24a5779 | ||
|
|
e48ba283d8 | ||
|
|
0bf9ee9fa5 | ||
|
|
c60e5cc48a | ||
|
|
642005cf1d | ||
|
|
b0956a8f74 | ||
|
|
2fb8cbda38 | ||
|
|
c16278a5ab | ||
|
|
bfe54a29ae | ||
|
|
265d6643e5 | ||
|
|
d87f055bb2 | ||
|
|
1af5afdaab | ||
|
|
864bb9f0db | ||
|
|
1007aaee4c | ||
|
|
8126a199f5 | ||
|
|
b435deac9d | ||
|
|
8a9b15dee3 | ||
|
|
c5a54a3d4f | ||
|
|
bcdf2ef36f | ||
|
|
3df0c8caef | ||
|
|
50eb46d294 | ||
|
|
ff922f6324 | ||
|
|
1e1da422ea | ||
|
|
3e5a035046 | ||
|
|
6e5338d091 | ||
|
|
d73a7e0ff3 | ||
|
|
a6c0433a2e | ||
|
|
ca5a43a3ab | ||
|
|
4710b38505 | ||
|
|
9cde97c22b | ||
|
|
323f504138 | ||
|
|
d7df929ada | ||
|
|
2667d5de0f | ||
|
|
49548b913d | ||
|
|
17c148d90e | ||
|
|
17621d2a5e | ||
|
|
8984c2b316 | ||
|
|
5d906e1da4 | ||
|
|
dba48d6387 | ||
|
|
0403231a0d | ||
|
|
8712414123 | ||
|
|
2485a98d4f | ||
|
|
cc8929ef4a | ||
|
|
ede8382c6a | ||
|
|
dc22584f72 | ||
|
|
7cb4a68043 | ||
|
|
ded91329bc | ||
|
|
81f5be30aa | ||
|
|
ba2518f862 | ||
|
|
3a6c71e523 | ||
|
|
8013129c5b | ||
|
|
5ea92df4ca | ||
|
|
afffd3061a | ||
|
|
8ea2109b37 | ||
|
|
fa8f35ea38 | ||
|
|
50576d044b | ||
|
|
3f797b2de3 | ||
|
|
9124d08fdb | ||
|
|
e4ae5bdce1 | ||
|
|
5f37f2c8df | ||
|
|
9dc66b46fc | ||
|
|
0ca4f85dc7 | ||
|
|
9c512849ef | ||
|
|
9550d5b67d | ||
|
|
dd40f49e5f | ||
|
|
90fb81d1d9 | ||
|
|
3c401e7b3d | ||
|
|
dc53a3ba42 | ||
|
|
3c1ebe9f4a | ||
|
|
73c984a637 | ||
|
|
ae30cb5557 | ||
|
|
311e7a9992 | ||
|
|
2f86f95c3f | ||
|
|
f61aaf83f6 | ||
|
|
66920b4d8f | ||
|
|
038ee090b7 | ||
|
|
6a028b1883 | ||
|
|
64e5a8c099 | ||
|
|
abad7f2790 | ||
|
|
c683b47ac3 | ||
|
|
0c4e7fc178 | ||
|
|
c4fba680d1 | ||
|
|
0d1a05ecd1 | ||
|
|
eb453462c1 | ||
|
|
5a91ed01eb | ||
|
|
2fcd542b0b | ||
|
|
146619de91 | ||
|
|
41a122a266 | ||
|
|
1c0fa2ad58 | ||
|
|
a053abfba4 | ||
|
|
e5848f4731 | ||
|
|
32a18795fb | ||
|
|
6b556ca5b0 | ||
|
|
a5b5ac1ed5 | ||
|
|
1cae72c872 | ||
|
|
878bb12a72 | ||
|
|
e0249b05d2 | ||
|
|
1fa5286c87 | ||
|
|
f3f0c7d8da | ||
|
|
afb814788f | ||
|
|
efa4c6c34e | ||
|
|
f3e34e1d44 | ||
|
|
ce304f33de | ||
|
|
c42fe42787 | ||
|
|
20a7297ac4 | ||
|
|
21809731e2 | ||
|
|
d770c7d7fa | ||
|
|
89e1c3ecfa | ||
|
|
f76ae4619b | ||
|
|
2945ff1016 | ||
|
|
51e1ff4976 | ||
|
|
87677cfc85 | ||
|
|
3ee626ce3c | ||
|
|
c4426b0f07 | ||
|
|
1a5ec26392 | ||
|
|
2275e689ce | ||
|
|
10741a97ea | ||
|
|
1cc0446bc1 | ||
|
|
cec7ace28b | ||
|
|
6e4f380e36 | ||
|
|
d68e4acb50 | ||
|
|
052ebe5acf | ||
|
|
128267a236 | ||
|
|
b1365a051d | ||
|
|
3452aaf5d5 | ||
|
|
335f3dbe2f | ||
|
|
97620c4e17 | ||
|
|
75f759079a | ||
|
|
315ffed12f | ||
|
|
c347435151 | ||
|
|
183acd4196 | ||
|
|
1e40081d1f | ||
|
|
cd3e4fc8f1 | ||
|
|
e860cc9fad | ||
|
|
aa119e1413 | ||
|
|
33e4b11509 | ||
|
|
5911330f8b | ||
|
|
e0e0d1ee0b | ||
|
|
3188cb4a5a | ||
|
|
a3e6bdd8e4 | ||
|
|
ecc0fe4678 | ||
|
|
a819b9fc2a | ||
|
|
a4eccb259a | ||
|
|
6e1436f1cd | ||
|
|
9e49b9100f | ||
|
|
950c7768bc | ||
|
|
13bb9a2041 | ||
|
|
44e875618f | ||
|
|
25fbdfb43a | ||
|
|
43c4947cb9 | ||
|
|
b18a0830f3 | ||
|
|
48bf30aa2d | ||
|
|
f05fabdb79 | ||
|
|
274fec7bd0 | ||
|
|
86b7ccef93 | ||
|
|
054000fb37 | ||
|
|
76cdcc9f32 | ||
|
|
e8aa1caa4e | ||
|
|
4141f76105 | ||
|
|
23b339d410 | ||
|
|
cc01b0f0dc | ||
|
|
4d28a14c33 | ||
|
|
15178da4e3 | ||
|
|
edda8bc490 | ||
|
|
41cf61dcf7 | ||
|
|
4f8184a6a6 | ||
|
|
3017085a44 | ||
|
|
506e927df5 | ||
|
|
8f776e14a2 | ||
|
|
5b3c70fb18 | ||
|
|
6fe6c4e0f6 | ||
|
|
359163c442 | ||
|
|
0b89b1b912 | ||
|
|
6451c4d49f | ||
|
|
8163c6c041 | ||
|
|
29108e1cb4 | ||
|
|
6bc690491f | ||
|
|
9524211b9a | ||
|
|
9d020a3e59 | ||
|
|
d92ebf7b31 | ||
|
|
1667998b4e | ||
|
|
6b87423293 | ||
|
|
3e701a743b | ||
|
|
ffeb16fe1e | ||
|
|
e995511c57 | ||
|
|
cc3b1163f1 | ||
|
|
335ed8d91b | ||
|
|
1a7d702e4e | ||
|
|
25925f2680 | ||
|
|
0daa6d6fb0 | ||
|
|
6106e8f79f | ||
|
|
a2a3ce1d7a | ||
|
|
c36d01b46b | ||
|
|
b3d5493a6b | ||
|
|
735588aa1a | ||
|
|
0876a7d37e | ||
|
|
aca9d28a7a | ||
|
|
6911d0b5e1 | ||
|
|
eb6d13a8c0 | ||
|
|
09f8c6ddcd | ||
|
|
f63bb4c7fb | ||
|
|
28920f1781 | ||
|
|
e457dbdea3 | ||
|
|
c76a3366ec | ||
|
|
0564842871 | ||
|
|
f84df03651 | ||
|
|
fc62733d65 | ||
|
|
cfe1eca185 | ||
|
|
34a9d03d3d | ||
|
|
79fa06f9d6 | ||
|
|
c7de9053b4 | ||
|
|
6d1a85b947 | ||
|
|
4800aa9bfc | ||
|
|
92a30b4e41 | ||
|
|
6b238d847f | ||
|
|
3a13da3201 | ||
|
|
4332d2151e | ||
|
|
e56bc9d15f | ||
|
|
ce4edf9cb1 | ||
|
|
d72f95677e | ||
|
|
d087c86243 | ||
|
|
6e7c3362b3 | ||
|
|
246519c5e1 | ||
|
|
8e34d7885c | ||
|
|
1902c5f3f4 | ||
|
|
48d3b30204 | ||
|
|
f474533447 | ||
|
|
bf3501b737 | ||
|
|
cda683df63 | ||
|
|
e5537c1cb0 | ||
|
|
e49a086edf | ||
|
|
69bf745246 | ||
|
|
2211876b57 | ||
|
|
cb5411440d | ||
|
|
1b72868abf | ||
|
|
9126d617c5 | ||
|
|
aa7758a20f | ||
|
|
81b33625f9 | ||
|
|
daad30b2b3 | ||
|
|
e319ca2998 | ||
|
|
99b3c45f05 | ||
|
|
3fd417e230 | ||
|
|
b90bacba48 | ||
|
|
7fe3afbbc2 | ||
|
|
8b9c9f677a | ||
|
|
620997c193 | ||
|
|
06f480cb83 | ||
|
|
c69d7bc758 | ||
|
|
3926889c97 | ||
|
|
34074a9c70 | ||
|
|
81380a0d60 | ||
|
|
65878c69be | ||
|
|
7c4fb183d0 | ||
|
|
699e1f0516 | ||
|
|
269d45bfc0 | ||
|
|
f371f8be3e | ||
|
|
a965607f14 | ||
|
|
59567daea7 | ||
|
|
ef566186be | ||
|
|
46150322a3 | ||
|
|
2bb2c748bd | ||
|
|
a5c4951914 | ||
|
|
dfd80d2165 | ||
|
|
4dbaaafbf1 | ||
|
|
25c2c601c9 | ||
|
|
9403d87d84 | ||
|
|
f50d374393 | ||
|
|
eeeb7fb4ab | ||
|
|
20c9dcd2d6 | ||
|
|
38ff48595d | ||
|
|
c7c206ecdc | ||
|
|
bfd2adab5e | ||
|
|
786ac95dc0 | ||
|
|
1660dc24b3 | ||
|
|
aa50b0fbb9 | ||
|
|
3df93dcc19 | ||
|
|
1f0328c5d5 | ||
|
|
3f635033cc | ||
|
|
8130babad3 | ||
|
|
37c4406b23 | ||
|
|
5d6b8b20c4 | ||
|
|
396c4bbdd7 | ||
|
|
16a0ae6a7b | ||
|
|
dd28d100d6 | ||
|
|
91e22aa4e4 | ||
|
|
cdc78f81f7 | ||
|
|
91491c7cf3 | ||
|
|
b3492b73ad | ||
|
|
15791cf94e | ||
|
|
5417d4854d | ||
|
|
bb1c0a5eee | ||
|
|
3a65359d59 | ||
|
|
ffa835efac | ||
|
|
f241825c73 | ||
|
|
2c8c788d81 | ||
|
|
2ae9753d79 | ||
|
|
93e6aa6310 | ||
|
|
ae74aa336f | ||
|
|
64866098e7 | ||
|
|
20b54f3086 | ||
|
|
aac4fbe941 | ||
|
|
356b2f5910 | ||
|
|
4d493bbb80 | ||
|
|
49729086ac | ||
|
|
329655a1bf | ||
|
|
b0067e8934 | ||
|
|
22d9343f2c | ||
|
|
9c93ec0bc3 | ||
|
|
c6c72d3721 | ||
|
|
424f9306c4 | ||
|
|
5d552ca236 | ||
|
|
28896acb83 | ||
|
|
6f37be1afd | ||
|
|
4fd581b812 | ||
|
|
bad6e99258 | ||
|
|
27359d3d32 | ||
|
|
f8f34787b3 | ||
|
|
d61c2496b6 | ||
|
|
5569c5c803 | ||
|
|
d0812ee5a8 | ||
|
|
9634e58f0a | ||
|
|
9610d45ebf | ||
|
|
85c813d84c | ||
|
|
ab55500f01 | ||
|
|
af0432a44b | ||
|
|
2b7161208e | ||
|
|
5514d7c3d8 | ||
|
|
823e17288c | ||
|
|
866daf2059 | ||
|
|
ae38cef7b1 | ||
|
|
e36f55ea41 | ||
|
|
819d3dc7a6 | ||
|
|
ac99b2036d | ||
|
|
46cce45b13 | ||
|
|
d685348644 | ||
|
|
d15b7a9955 | ||
|
|
99db73a34f | ||
|
|
85e4eff571 | ||
|
|
d8bc2d5c75 | ||
|
|
4704c03209 | ||
|
|
70faef3fdb | ||
|
|
663ff55af9 | ||
|
|
229c1c38a3 | ||
|
|
68d2573344 | ||
|
|
c437fe9ff0 | ||
|
|
c93ee3dc1a | ||
|
|
0f45c08188 | ||
|
|
55aaffb7b3 | ||
|
|
aeafbfa2e1 | ||
|
|
cd7c9a8da4 | ||
|
|
382e62c7d8 | ||
|
|
ae35430c96 | ||
|
|
c0bfc34a75 | ||
|
|
bda335a505 | ||
|
|
38289f3bc1 | ||
|
|
3d0a68c9e8 | ||
|
|
a9df046f21 | ||
|
|
2d9a24d1d6 | ||
|
|
45718d7679 | ||
|
|
2ea7ff6b14 | ||
|
|
4f7c82ba8a | ||
|
|
79bcb7790c | ||
|
|
1ff6bdd777 | ||
|
|
3e674a896f | ||
|
|
3aba805bc9 | ||
|
|
09ab5477e8 | ||
|
|
da273761d1 | ||
|
|
4f2324cae7 | ||
|
|
57207bbe96 | ||
|
|
b8a5986504 | ||
|
|
b54c2124cf | ||
|
|
9a150b677e | ||
|
|
01ec2671b3 | ||
|
|
dd0004f80d | ||
|
|
e59c6c3c18 | ||
|
|
c27d7db0a7 | ||
|
|
7e7943f962 | ||
|
|
cb5fd17635 | ||
|
|
c5e40dde74 | ||
|
|
5deb0fcbc6 | ||
|
|
62055bed3f | ||
|
|
182acfcf3e | ||
|
|
52aa475581 | ||
|
|
64a3e50d6c | ||
|
|
0750574a03 | ||
|
|
3dca4dd4bb | ||
|
|
410710b02c | ||
|
|
48be05e8f1 | ||
|
|
36e680c603 | ||
|
|
5da1b44371 | ||
|
|
9b3ee1ed17 | ||
|
|
3f2075070a | ||
|
|
208c4e2af2 | ||
|
|
a9b911750f | ||
|
|
8d9ba4329d | ||
|
|
bc18b3592c | ||
|
|
fa744121fc | ||
|
|
f4dc18c872 | ||
|
|
d02dea5df2 | ||
|
|
b1b02e0425 | ||
|
|
6854e9b974 | ||
|
|
3894c903bc | ||
|
|
d21358e91f | ||
|
|
21cdbd90e9 | ||
|
|
12f4e4fd8c | ||
|
|
3ea3ed6672 | ||
|
|
4840e3575b | ||
|
|
f0672bdbc9 | ||
|
|
2963d10325 | ||
|
|
501643c10a | ||
|
|
73a6141f3f | ||
|
|
738d1ef682 | ||
|
|
30a4b26306 | ||
|
|
fdc1a51cba | ||
|
|
9c7d8da298 | ||
|
|
0146b845d9 | ||
|
|
fc3a905c90 | ||
|
|
aa79afd7ae | ||
|
|
f17400092d | ||
|
|
e1d3cf57c8 | ||
|
|
2a50ac1891 | ||
|
|
0724fa3aa9 | ||
|
|
ba46c62500 | ||
|
|
1276867860 | ||
|
|
5249f6cba7 | ||
|
|
353e0a8400 | ||
|
|
ec4e65bdd9 | ||
|
|
e5d3944726 | ||
|
|
e67beb27dd | ||
|
|
5cfa9fd83e | ||
|
|
84a4cc01e1 | ||
|
|
32ad9988a3 | ||
|
|
fcdf542c47 | ||
|
|
3cebfaa648 | ||
|
|
74fa59590a | ||
|
|
4958d7a88f | ||
|
|
487c58558e | ||
|
|
cf1e53f9c8 | ||
|
|
75b728be7e | ||
|
|
6428088e46 | ||
|
|
c0a1e8d5a5 | ||
|
|
7a9733dcca | ||
|
|
9146076e28 | ||
|
|
b25276deec | ||
|
|
947c6ec3e1 | ||
|
|
ea94f44f66 | ||
|
|
e48797db1a | ||
|
|
0439ca67d9 | ||
|
|
399c871d79 | ||
|
|
6abe18a4f8 | ||
|
|
77f45954d0 | ||
|
|
982dac9446 | ||
|
|
486e93f418 | ||
|
|
259768e896 | ||
|
|
c792db2c60 | ||
|
|
b6a3754ee5 | ||
|
|
e4cc55dc19 | ||
|
|
eb4c6df609 | ||
|
|
05b5f9aa97 | ||
|
|
a9d2150b0f | ||
|
|
b17078fe1a | ||
|
|
9a5c4aba58 | ||
|
|
9897a80216 | ||
|
|
19cc93437e | ||
|
|
39247fcbc1 | ||
|
|
3b61613d1b | ||
|
|
81b1e5636d | ||
|
|
e066735fe9 | ||
|
|
63b7134dce | ||
|
|
e110334c2c | ||
|
|
77eef4d783 | ||
|
|
e2df71d87c | ||
|
|
68e7f4e820 | ||
|
|
376ac85029 | ||
|
|
b1b9310a50 | ||
|
|
024949f17e | ||
|
|
74d995aae0 | ||
|
|
5b60f0cc11 | ||
|
|
a72f4f0606 | ||
|
|
752df0dae7 | ||
|
|
2d4ff404bd | ||
|
|
62fa074f9f | ||
|
|
c8f5659090 | ||
|
|
79b63556bb | ||
|
|
1f81d42416 | ||
|
|
75bfc336fc | ||
|
|
1af67f39ca | ||
|
|
2aca213ba1 | ||
|
|
730249a887 | ||
|
|
0e1cad4ca9 | ||
|
|
2afd7707fe | ||
|
|
01cf71e49a | ||
|
|
2f677ecebd | ||
|
|
d958f8291a | ||
|
|
f435225940 | ||
|
|
e321af4a29 | ||
|
|
929a92f6c5 | ||
|
|
39d3754b18 | ||
|
|
d7ef5a85dc | ||
|
|
519a3b5b79 | ||
|
|
89dea9bd92 | ||
|
|
ab269f6155 | ||
|
|
dcc263ca5d | ||
|
|
c2a5ac96cd | ||
|
|
85a4c5eb93 | ||
|
|
cd2098fad7 | ||
|
|
7c538873b6 | ||
|
|
ebcf403f4a | ||
|
|
417cefa059 | ||
|
|
1960b5a605 | ||
|
|
c401c0f9db | ||
|
|
a152bb1123 | ||
|
|
7c27b7b727 | ||
|
|
f3f1a2bb5d | ||
|
|
b2feff7d38 | ||
|
|
22c184bf75 | ||
|
|
5ca5b54bf6 | ||
|
|
a928e8a3db | ||
|
|
2e624789ff | ||
|
|
ef95fa9f5f | ||
|
|
cecf92e5b8 | ||
|
|
8437a5f5ac | ||
|
|
564c903fbd | ||
|
|
268de3cd24 | ||
|
|
d20f48f876 | ||
|
|
88e2a3761c | ||
|
|
e136c2eadf | ||
|
|
b2b50f5e82 | ||
|
|
26a7e9653f | ||
|
|
76948b6364 | ||
|
|
0f57624a61 | ||
|
|
8aaf2f8577 | ||
|
|
8ce8410a5b | ||
|
|
a0ce9e52fa | ||
|
|
53288309a5 | ||
|
|
275f7e15c0 | ||
|
|
7de2869a53 | ||
|
|
ab7a1a6ec4 | ||
|
|
b8d1d7cdf1 | ||
|
|
8b2b74c34b | ||
|
|
a004ebfffb | ||
|
|
b51d6e9d92 | ||
|
|
b96e41285c | ||
|
|
9295e6f5c8 | ||
|
|
e80809f629 | ||
|
|
5ac4db752d | ||
|
|
746b438500 | ||
|
|
0964c0356b | ||
|
|
7500d16524 | ||
|
|
b3bdff741c | ||
|
|
fcb6bc70f8 | ||
|
|
9c5b3a2300 | ||
|
|
2d7ffaf07f | ||
|
|
9b7d5cd1a9 | ||
|
|
bcb5041df2 | ||
|
|
235707278f | ||
|
|
db85595124 | ||
|
|
15758171f0 | ||
|
|
d08610882a | ||
|
|
21434c471b | ||
|
|
87d8bebd0d | ||
|
|
e4d84e2c1c | ||
|
|
16036e0419 | ||
|
|
58714d8c68 | ||
|
|
ddf684c4d2 | ||
|
|
daa76be77e | ||
|
|
600e460416 | ||
|
|
e095904e1b | ||
|
|
599d5c17a0 | ||
|
|
6f98b8c5ae | ||
|
|
eb2eb9ccf5 | ||
|
|
19d01835d3 | ||
|
|
f38a61bdb3 | ||
|
|
ed280cdbfe | ||
|
|
66909168ac | ||
|
|
38a1c8becb | ||
|
|
1816a1eb34 | ||
|
|
dad9a2b916 | ||
|
|
b3bbd939e3 | ||
|
|
cc84ebf8c2 | ||
|
|
2438e975e7 | ||
|
|
04d833d3e6 | ||
|
|
2f872b3755 | ||
|
|
bd1f5ff194 | ||
|
|
613212f9e1 | ||
|
|
4aff4a9c82 | ||
|
|
264af550d5 | ||
|
|
822546bf7d | ||
|
|
2ac2439c33 | ||
|
|
37dbd77628 | ||
|
|
733ceada5e | ||
|
|
847f92956f | ||
|
|
73f2aaf9d8 | ||
|
|
c86a250795 | ||
|
|
c6170aa4c7 | ||
|
|
89ae495c36 | ||
|
|
5526c33d69 | ||
|
|
e816636676 | ||
|
|
40e8bc530c | ||
|
|
9684467dc0 | ||
|
|
8e83fd7d50 | ||
|
|
fac1cc57d7 | ||
|
|
6511e0f3e6 | ||
|
|
9c1c932e68 | ||
|
|
82c85c1a9c | ||
|
|
7cec2d0e18 | ||
|
|
2f8ed1a6bd | ||
|
|
781da9dc59 | ||
|
|
1e6a4dc5c8 | ||
|
|
282fbcc3e5 | ||
|
|
cd9c156937 | ||
|
|
cd840ef70a | ||
|
|
55190c2125 | ||
|
|
01cdc83aeb | ||
|
|
b9e0a36816 | ||
|
|
fccb761ef2 | ||
|
|
0ffb4e62e6 | ||
|
|
bd1102d3b7 | ||
|
|
91427646f5 | ||
|
|
596e6cc2c3 | ||
|
|
9c99e75939 | ||
|
|
047f71b434 | ||
|
|
91b1ec6d5c | ||
|
|
a7df3cfb40 | ||
|
|
949a80dc0a | ||
|
|
095c884331 | ||
|
|
32a8bcf525 | ||
|
|
a469bfd4da | ||
|
|
6921684cd9 | ||
|
|
76c069e8bf | ||
|
|
b571978f24 | ||
|
|
b8236e183c | ||
|
|
2a7e957c61 | ||
|
|
467c4ba2cf | ||
|
|
324af04426 | ||
|
|
1b5d9a34df | ||
|
|
c52920755a | ||
|
|
faef63e8a7 | ||
|
|
ff135384ef | ||
|
|
a51602018e | ||
|
|
1616942943 | ||
|
|
ba7b7b65a1 | ||
|
|
40ff182c31 | ||
|
|
d9071abd8b | ||
|
|
b4f453f687 | ||
|
|
4c742f7742 | ||
|
|
fda51920b7 | ||
|
|
4905fda371 | ||
|
|
1ae1288a88 | ||
|
|
6fb0e991ea | ||
|
|
650176fac7 | ||
|
|
95aad6ceb5 | ||
|
|
7cd5d812d2 | ||
|
|
b2ff24453c | ||
|
|
12eacfa67b | ||
|
|
cd25e91321 | ||
|
|
518bfeca3f | ||
|
|
76495f07b8 | ||
|
|
ccecd1a627 | ||
|
|
8f3eff293d | ||
|
|
806c9230cd | ||
|
|
24b6b6cad5 | ||
|
|
971fd40353 | ||
|
|
2aba8c639e | ||
|
|
1a51ce1e66 | ||
|
|
1398e7702b | ||
|
|
a45f604cd8 | ||
|
|
ec29650029 | ||
|
|
4b31e34ea4 | ||
|
|
ae83c28bc8 | ||
|
|
58327ca23c | ||
|
|
5b540aed73 | ||
|
|
6e080044a0 | ||
|
|
42ba0b6271 | ||
|
|
a1fa8dd701 | ||
|
|
aea1efd5f2 | ||
|
|
5ae05e26c4 | ||
|
|
023221bd3b | ||
|
|
14575f3efd | ||
|
|
9f3eb33d80 | ||
|
|
225d0b9482 | ||
|
|
65c0d3d425 | ||
|
|
3d3fc2f3cd | ||
|
|
f9a72e8d75 | ||
|
|
7b212e0e57 | ||
|
|
a108ce8015 | ||
|
|
ff21a05c96 | ||
|
|
25eb869d5f | ||
|
|
ff40128df6 | ||
|
|
b2ed787c3a | ||
|
|
ec5b2bc8d2 | ||
|
|
3a71da35a9 | ||
|
|
4c788abad1 | ||
|
|
3737cc37f6 | ||
|
|
d0c2cb7ae1 | ||
|
|
db945f6aed | ||
|
|
b3f5ed55a1 | ||
|
|
fa5a16e9fc | ||
|
|
0c233c6578 | ||
|
|
8100779512 | ||
|
|
d766baef12 | ||
|
|
95d0cb18e4 | ||
|
|
976b0a8f1d | ||
|
|
919cb8e05c | ||
|
|
cac068dad9 | ||
|
|
7520c09087 | ||
|
|
edf096fc13 | ||
|
|
2ebf257f84 | ||
|
|
57e7cee84e | ||
|
|
adaf24310d | ||
|
|
94f52d6dc0 | ||
|
|
3080b55d02 | ||
|
|
bbb682a440 | ||
|
|
f3d988d8ab | ||
|
|
2c122a4401 | ||
|
|
26ce38a4ac | ||
|
|
5084fb82b8 | ||
|
|
798c194025 | ||
|
|
11e214f332 | ||
|
|
ddd3ac3663 | ||
|
|
bacce9bb37 | ||
|
|
aa819c8b97 | ||
|
|
af768d5c22 | ||
|
|
2bf5ae3272 | ||
|
|
a074b14631 | ||
|
|
ac7d53cc37 | ||
|
|
6d46d45983 | ||
|
|
eea2f19d82 | ||
|
|
2dfbab457a | ||
|
|
5e5f82d1a2 | ||
|
|
5e4637e15c | ||
|
|
a3d2e93b14 | ||
|
|
100454398c | ||
|
|
cce43beeae | ||
|
|
ebcb61b34b | ||
|
|
47b880fa8d | ||
|
|
cd76f05a86 | ||
|
|
9173fc9815 | ||
|
|
7df5cb84b5 | ||
|
|
e6b3c2061e | ||
|
|
563a3d3587 | ||
|
|
3be1e0b6ff | ||
|
|
93899bf5a9 | ||
|
|
ec120d1cbb | ||
|
|
df7a2ab467 | ||
|
|
a39a743abe | ||
|
|
eca86ad449 | ||
|
|
a1c8f3a528 | ||
|
|
26495a8455 | ||
|
|
32df7315be | ||
|
|
7995181235 | ||
|
|
75dc2a12e2 | ||
|
|
ae39c5b8cb | ||
|
|
eb43fbbb2a | ||
|
|
e4ed5c47a3 | ||
|
|
e4b9a21acc | ||
|
|
bfb9dfea7e | ||
|
|
8ed2089070 | ||
|
|
583ec5d819 | ||
|
|
59280a133c | ||
|
|
ba12de867e | ||
|
|
ca3d02fc61 | ||
|
|
a49c4c7682 | ||
|
|
4f52c67566 | ||
|
|
7a6a96254c | ||
|
|
6abb863a54 | ||
|
|
e8463403f5 | ||
|
|
815a4e7dc1 | ||
|
|
df2f68da44 | ||
|
|
a8fc3f5f74 | ||
|
|
d3c5cc7b13 | ||
|
|
760e43ad2c | ||
|
|
229734e45f | ||
|
|
66952fe301 | ||
|
|
cb659474d9 | ||
|
|
d429776418 | ||
|
|
d034f6a77f | ||
|
|
1920aee415 | ||
|
|
783079266e | ||
|
|
bd41774960 | ||
|
|
4aa25285a3 | ||
|
|
7fd1f5b5d3 | ||
|
|
72ee5ed10d | ||
|
|
048a44cbe5 | ||
|
|
6f5f7ece06 | ||
|
|
b3d28e2309 | ||
|
|
1dc3ebf891 | ||
|
|
6bd1ab576c | ||
|
|
8e6272bfee | ||
|
|
0aca5e222f | ||
|
|
b8411a90cd | ||
|
|
4e9365f76b | ||
|
|
602fe15641 | ||
|
|
8b2e792d31 | ||
|
|
aca1cdf0b6 | ||
|
|
af23df842d | ||
|
|
b266e3d4bf | ||
|
|
4e08242074 | ||
|
|
0690315d9e | ||
|
|
207ee59acd | ||
|
|
e97bfecb7f | ||
|
|
fe1fd86216 | ||
|
|
4f3f155bbf | ||
|
|
f284849fce | ||
|
|
527da94dfa | ||
|
|
7970c2a6af | ||
|
|
c61199dd27 | ||
|
|
29ad4ecc78 | ||
|
|
ebde5310b9 | ||
|
|
5e6aef5dfd | ||
|
|
cb539579b5 | ||
|
|
d0d136ede5 | ||
|
|
4df1f9fb18 | ||
|
|
3c576da42f | ||
|
|
709e3d2822 | ||
|
|
9082908606 | ||
|
|
8d801dadc4 | ||
|
|
87db82cacd | ||
|
|
d33d3a9f57 | ||
|
|
4794558c08 | ||
|
|
a44bd97cda | ||
|
|
807c5e2240 | ||
|
|
b08273b127 | ||
|
|
796a237128 | ||
|
|
bd49c6bedb | ||
|
|
86a832da29 | ||
|
|
e72cb6801a | ||
|
|
1e01511ca0 | ||
|
|
26e0f56bf9 | ||
|
|
157e73b67e | ||
|
|
6074480ffb | ||
|
|
ec3d9a2cae | ||
|
|
c7c45bf2b8 | ||
|
|
49f6c5cdca | ||
|
|
52edef0867 | ||
|
|
0e5014788b | ||
|
|
7b9aaacc4b | ||
|
|
d891b83e4b | ||
|
|
7e10aa57c4 | ||
|
|
e3f57074aa | ||
|
|
a29ecaf1d3 | ||
|
|
cefcaaf287 | ||
|
|
800c0f7a56 | ||
|
|
2593077361 | ||
|
|
e4595f63c4 | ||
|
|
b7b5774df1 | ||
|
|
f60fb5a70e | ||
|
|
19077ee1ed | ||
|
|
26df3a8452 | ||
|
|
b63140b423 | ||
|
|
eeff7b0f0a | ||
|
|
f15ed36da1 | ||
|
|
1efca833a4 | ||
|
|
159370446f | ||
|
|
a9b0f76698 | ||
|
|
7fcd747819 | ||
|
|
cd87a64621 | ||
|
|
63147fdede | ||
|
|
dfd83bc7a4 | ||
|
|
3392f0a271 | ||
|
|
10d5907f46 | ||
|
|
0f3d2c7085 | ||
|
|
485927ed0d | ||
|
|
0d4f3cf0a5 | ||
|
|
4f08bfd0a2 | ||
|
|
54e7cb8d9e | ||
|
|
fab39a6495 | ||
|
|
008bfa2cd2 | ||
|
|
5907a6a67d | ||
|
|
85880e6037 | ||
|
|
042be7d7d1 | ||
|
|
26d85e53a4 | ||
|
|
f3e913b56a | ||
|
|
99ace42447 | ||
|
|
6c6d03ac5e | ||
|
|
8249b5dbfa | ||
|
|
2a4bd6a7fc | ||
|
|
82981384d5 | ||
|
|
a7a49d9eaa | ||
|
|
808f67a3b2 | ||
|
|
9a7b8e41eb | ||
|
|
c7e853bf99 | ||
|
|
ac97b36b1c | ||
|
|
181c92a868 | ||
|
|
86b7078464 | ||
|
|
a1a0333e56 | ||
|
|
85715e893b | ||
|
|
2897297252 | ||
|
|
17b75cd010 | ||
|
|
363a225554 | ||
|
|
449c23ba4e | ||
|
|
78ee489906 | ||
|
|
cec1004da8 | ||
|
|
666bbeba6e | ||
|
|
770b2ab26d | ||
|
|
2420aa7a21 | ||
|
|
a5d07af89a | ||
|
|
9bccdf4f71 | ||
|
|
b5dbafb3e2 | ||
|
|
22a1f41ecb | ||
|
|
739c4bcfc8 | ||
|
|
85f288651b | ||
|
|
50387cc516 | ||
|
|
6123838a48 | ||
|
|
7ffbada725 | ||
|
|
88776ceaa6 | ||
|
|
35fbdd0bae | ||
|
|
0770c28207 | ||
|
|
92979d23cf | ||
|
|
3187dc816e | ||
|
|
cfd571cfc2 | ||
|
|
89eb473dce | ||
|
|
911f0928cf | ||
|
|
394fc8eb79 | ||
|
|
57b6ced957 | ||
|
|
506d92107c | ||
|
|
665bb83297 | ||
|
|
7fc0f69e48 | ||
|
|
67703b49d8 | ||
|
|
ad6eba1670 | ||
|
|
0ef2e96121 | ||
|
|
664e09f1ff | ||
|
|
27baab992a | ||
|
|
099e3c67b2 | ||
|
|
959d8fc25c | ||
|
|
5ef442c2b8 | ||
|
|
ba79e092a0 | ||
|
|
9677a3a9ea | ||
|
|
4c0832e6e6 | ||
|
|
6fc643f483 | ||
|
|
3f4210437d | ||
|
|
67f2356ef7 | ||
|
|
81d0dd686b | ||
|
|
a24e747e16 | ||
|
|
05f52246a2 | ||
|
|
b46408d554 | ||
|
|
58701000cd | ||
|
|
5a5e475c6e | ||
|
|
ff89a08ee4 | ||
|
|
f5487e9137 | ||
|
|
857eac3d10 | ||
|
|
f0fa8e3bc3 | ||
|
|
9d5b75bb7a | ||
|
|
7b8fee7cdb | ||
|
|
64c53fcc61 | ||
|
|
10d038e43f | ||
|
|
f1f85335a7 | ||
|
|
bd1ebb7a10 | ||
|
|
e2bbaa2430 | ||
|
|
ba702509c8 | ||
|
|
448666c896 | ||
|
|
8f660fc6b1 | ||
|
|
fd66b6b103 | ||
|
|
e83eeb3cca | ||
|
|
f537a62ca6 | ||
|
|
b30ea34d05 | ||
|
|
6fddb31a07 | ||
|
|
79d79aa80c | ||
|
|
fbc7ad6788 | ||
|
|
fcac6a9322 | ||
|
|
dc700ad620 | ||
|
|
74540844d2 | ||
|
|
23483a80c7 | ||
|
|
ade2698bb4 | ||
|
|
85de7432a2 | ||
|
|
6805c36004 | ||
|
|
1cff5b35d4 | ||
|
|
9c5584956e | ||
|
|
2af497efbb | ||
|
|
58a09e6838 | ||
|
|
b5b93e962b | ||
|
|
10e0fb2b54 | ||
|
|
0a6f9ed967 | ||
|
|
a7edfa221e | ||
|
|
451e953d26 | ||
|
|
5c2c4a6649 | ||
|
|
09580594e6 | ||
|
|
efc9ae98ed | ||
|
|
7da0822419 | ||
|
|
e1c6df0df3 | ||
|
|
7965a0313c | ||
|
|
0cc61d0ef0 | ||
|
|
1966171838 | ||
|
|
2643fbdea4 | ||
|
|
82bbb0cc05 | ||
|
|
d91927ee97 | ||
|
|
ae670c35f7 | ||
|
|
d1ccadbac2 | ||
|
|
78a661db79 | ||
|
|
b65f977c54 | ||
|
|
1b87e186c4 | ||
|
|
3eb1e6303c | ||
|
|
3b8efecc52 | ||
|
|
6716d555ff | ||
|
|
27c56cde22 | ||
|
|
a635e24fc2 | ||
|
|
dce0abc8b9 | ||
|
|
88e13d8326 | ||
|
|
061be74cdb | ||
|
|
d6f2f66f2b | ||
|
|
b8d0396f71 | ||
|
|
a0df1e09a6 | ||
|
|
7e03828f35 | ||
|
|
9407974c10 | ||
|
|
3381a884d0 | ||
|
|
415c2d0795 | ||
|
|
92d0707291 | ||
|
|
c6f3737c2a | ||
|
|
ec77f2ab92 | ||
|
|
0b784ff2c1 | ||
|
|
c443326fb1 | ||
|
|
2ac171a30f | ||
|
|
7369169331 | ||
|
|
d5470d92ec | ||
|
|
cc7e7300ce | ||
|
|
3ce4c95e61 | ||
|
|
1ab3a0bd73 | ||
|
|
99f1f4c22a | ||
|
|
41a4dd4c1c | ||
|
|
1080969b51 | ||
|
|
6165c2d8b3 | ||
|
|
036693a14d | ||
|
|
c9d39ce7ae | ||
|
|
da84326bd0 | ||
|
|
f255392a75 | ||
|
|
af3154a0d4 | ||
|
|
d2b96636db | ||
|
|
635eac7704 | ||
|
|
51417cc8c3 | ||
|
|
2614450e4b | ||
|
|
8ea27b0aca | ||
|
|
4f76aec6b3 | ||
|
|
dfdb33befb | ||
|
|
e76bd11f53 | ||
|
|
4b4399f63f | ||
|
|
796189ce68 | ||
|
|
a8f80ebfe9 | ||
|
|
cb3662cc4d | ||
|
|
fb237dd568 | ||
|
|
799cb79612 | ||
|
|
1c22cc2f52 | ||
|
|
0bb2f72ee2 | ||
|
|
b16d267f9d | ||
|
|
9ffa923da6 | ||
|
|
8feccffec0 | ||
|
|
3a16b2e92c | ||
|
|
a8bfa6a16c | ||
|
|
e135012acd | ||
|
|
9de6a38e13 | ||
|
|
0baf873534 | ||
|
|
35a66fe776 | ||
|
|
0be8a5f9f4 | ||
|
|
01fe39fbb9 | ||
|
|
cfc124fabf | ||
|
|
15961b353a | ||
|
|
d4573e233a | ||
|
|
9307abe7f5 | ||
|
|
05bab8ec4c | ||
|
|
9e9ae54455 | ||
|
|
e696d9b324 | ||
|
|
43e04f3fc7 | ||
|
|
62701154f1 | ||
|
|
15f29eedee | ||
|
|
439d665096 | ||
|
|
418a99a62b | ||
|
|
1eac13b6bf | ||
|
|
e58bd419f6 | ||
|
|
5e176a390f | ||
|
|
a49cfc5a91 | ||
|
|
d3fedffa6a | ||
|
|
33c3e3fb0f | ||
|
|
1d23be8429 | ||
|
|
7a4e88c146 | ||
|
|
cfeb022340 | ||
|
|
0cc655074d | ||
|
|
a5ba96e991 | ||
|
|
b2949f114b | ||
|
|
e3df7bccac | ||
|
|
2c45438422 | ||
|
|
4ef1d48c0c | ||
|
|
7b6a672c64 | ||
|
|
883529eaf3 | ||
|
|
afc10ea112 | ||
|
|
488e5d9eb5 | ||
|
|
6d976b5d90 | ||
|
|
b44e2d3b30 | ||
|
|
a196bbcbcd | ||
|
|
6000e3a47d | ||
|
|
623f5822b3 | ||
|
|
c6dadc537b | ||
|
|
98a0c76a08 | ||
|
|
a2d5b5a0e2 | ||
|
|
d376ba5994 | ||
|
|
6a4b9430c0 | ||
|
|
3bf735161f | ||
|
|
4d0c835df3 | ||
|
|
6eb4138595 | ||
|
|
53817dcc90 | ||
|
|
99044ce6c6 | ||
|
|
575a245f8d | ||
|
|
385710672f | ||
|
|
beb3565001 | ||
|
|
ec7f50d925 | ||
|
|
1a479e9bda | ||
|
|
19cc363b09 | ||
|
|
760b49bc6c | ||
|
|
70eca8cb24 | ||
|
|
ff0249d662 | ||
|
|
d450a5ee95 | ||
|
|
1cf927aef9 | ||
|
|
8678402c25 | ||
|
|
ee2ea0cb02 | ||
|
|
cf0b4d4ed4 | ||
|
|
cc50049bca | ||
|
|
c6a76eb9af | ||
|
|
67e8e373a7 | ||
|
|
304964ba71 | ||
|
|
d2c58765cd | ||
|
|
385d21e6dc | ||
|
|
0fd6956bb0 | ||
|
|
5073477415 | ||
|
|
c56147e04b | ||
|
|
79fc366f23 | ||
|
|
9d4ff13c2b | ||
|
|
e18ae5abd6 | ||
|
|
f3ef4f3658 | ||
|
|
73a62b4bf6 | ||
|
|
cd47113ed8 | ||
|
|
8793e6ded7 | ||
|
|
29a3c36e26 | ||
|
|
141ac0d09f | ||
|
|
657ab4261c | ||
|
|
5491fbee5b | ||
|
|
18f82f0006 | ||
|
|
30ca2370ab | ||
|
|
21eaee0e23 | ||
|
|
cd7e1e1e2b | ||
|
|
4b30e82aee | ||
|
|
83c0212b59 | ||
|
|
4eb0ee23db | ||
|
|
b4a72b6223 | ||
|
|
c9a7abdd09 | ||
|
|
49d11b2e36 | ||
|
|
83764fbbb4 | ||
|
|
64ec19f018 | ||
|
|
692c88f0e9 | ||
|
|
8dbe88782c | ||
|
|
b08829817f | ||
|
|
585f47c2d9 | ||
|
|
56a254ba9c | ||
|
|
55ead61ea8 | ||
|
|
f96cfe08f4 | ||
|
|
49081d0d82 | ||
|
|
a31ebc248e | ||
|
|
3d11b6efa3 | ||
|
|
13cd461a1f | ||
|
|
68b7e5971d | ||
|
|
24655fd975 | ||
|
|
05d12f68ad | ||
|
|
d84fe592c8 | ||
|
|
b4505600c7 | ||
|
|
a4ea71d18f | ||
|
|
729826ec40 | ||
|
|
a8b0c0be07 | ||
|
|
926de68a79 | ||
|
|
cf850598eb | ||
|
|
2b9f076024 | ||
|
|
d63e643081 | ||
|
|
9a2bcd2508 | ||
|
|
f3b9d64df7 | ||
|
|
68c58281e5 | ||
|
|
07df91d4e8 | ||
|
|
378a69ea85 | ||
|
|
191e132c6c | ||
|
|
fce07bbeab | ||
|
|
3e427c57f0 | ||
|
|
9afebfdd72 | ||
|
|
109b841d8d | ||
|
|
b94ddb0cd3 | ||
|
|
b073d08a52 | ||
|
|
fcf0b74c79 | ||
|
|
e7fd4224ad | ||
|
|
8778e69f9d | ||
|
|
108247dccc | ||
|
|
9b3b9562c0 | ||
|
|
e7f1a34fe1 | ||
|
|
0a29ca2946 | ||
|
|
0e8f1a9bf9 | ||
|
|
a9f6b012b8 | ||
|
|
4ba4bddb09 | ||
|
|
3b51368be2 | ||
|
|
0111fd0d0e | ||
|
|
cc86e01df9 | ||
|
|
1dfee5fbfa | ||
|
|
21f65f087d | ||
|
|
ac849b958f | ||
|
|
806a1202c5 | ||
|
|
2ee1770383 | ||
|
|
21da04364d | ||
|
|
a66ba27791 | ||
|
|
3fa3298a31 | ||
|
|
eccb3f6d0b | ||
|
|
29901d65ed | ||
|
|
0bb83ed5e9 | ||
|
|
2d14742a05 | ||
|
|
6eaaadec71 | ||
|
|
b89f7515fd | ||
|
|
05096854bc | ||
|
|
68d74bc28a | ||
|
|
1475625705 | ||
|
|
935e83a490 | ||
|
|
4df58494a0 | ||
|
|
f16dfd8ca2 | ||
|
|
72dc5b3489 | ||
|
|
b89cc9b973 | ||
|
|
e7faec6b0e | ||
|
|
7866dc2e34 | ||
|
|
070add461f | ||
|
|
1211acd59c | ||
|
|
d78c39b3ab | ||
|
|
81bb4b5951 | ||
|
|
9461294ffc | ||
|
|
7087582a36 | ||
|
|
201be08a85 | ||
|
|
c3729d06d0 | ||
|
|
e8f730e61f | ||
|
|
c5bbee7a0a | ||
|
|
8c00842614 | ||
|
|
72437b50b4 | ||
|
|
e9b24eba85 | ||
|
|
2b0f786b2d | ||
|
|
2262ac1684 | ||
|
|
c68f42e0ee | ||
|
|
73cee9a43d | ||
|
|
6d766ccbb5 | ||
|
|
bcf581dc82 | ||
|
|
c782b45b97 | ||
|
|
7858053bb9 | ||
|
|
2d0d4119f4 | ||
|
|
d2d76bb560 | ||
|
|
bc22df8ba8 | ||
|
|
b053b1e200 | ||
|
|
d3c0ec5651 | ||
|
|
695799c39a | ||
|
|
85d1649696 | ||
|
|
1417f9b7de | ||
|
|
0e31aafc09 | ||
|
|
17e78a9e6f | ||
|
|
42751cc8fb | ||
|
|
e67d090c35 | ||
|
|
ddd0494cf4 | ||
|
|
2222807624 | ||
|
|
488814bb2d | ||
|
|
4206b022b6 | ||
|
|
b87c891ec4 | ||
|
|
5eb4691cd6 | ||
|
|
bfcbc13b8a | ||
|
|
5c5edb4785 | ||
|
|
edfe940543 | ||
|
|
8b8396b945 | ||
|
|
97f2b6b701 | ||
|
|
92bf6ed0a7 | ||
|
|
29c1c3df1f | ||
|
|
cd8954db14 | ||
|
|
431221f172 | ||
|
|
3ecb14dcda | ||
|
|
a325eb52bd | ||
|
|
84217917d5 | ||
|
|
af052b0627 | ||
|
|
c70c08bb07 | ||
|
|
2e8029a45b | ||
|
|
a9a454faf7 | ||
|
|
3378b03c1f | ||
|
|
8d9911e383 | ||
|
|
60ae4c1121 | ||
|
|
5ed7d043c4 | ||
|
|
c28ec457fd | ||
|
|
a79ef1efb2 | ||
|
|
1299aa68b3 | ||
|
|
681debd8f6 | ||
|
|
0db06964dc | ||
|
|
6ce1816e3f | ||
|
|
7fdfbe3c52 | ||
|
|
3e516df214 | ||
|
|
899b4aaeec | ||
|
|
d2612bed3a | ||
|
|
42b255a4a2 | ||
|
|
18c01f7151 | ||
|
|
4cd1d639ed | ||
|
|
2732d6c3dc | ||
|
|
8e4f5cc7b3 | ||
|
|
e58a3ab7e0 | ||
|
|
e0e1c729cd | ||
|
|
7c6b558647 | ||
|
|
217c924d42 | ||
|
|
7b92cbcb9a | ||
|
|
c882f0baf0 | ||
|
|
f1f124dcbf | ||
|
|
d4ce5b86ec | ||
|
|
16c1b9ed73 | ||
|
|
42ee2463c7 | ||
|
|
2fc9ae5d28 | ||
|
|
28dc7356a8 | ||
|
|
f6c585902a | ||
|
|
693cf9950f | ||
|
|
cef3ee2d80 | ||
|
|
8fac136056 | ||
|
|
fa707047e6 | ||
|
|
c009215983 | ||
|
|
d51d5ce86d | ||
|
|
36da83592a | ||
|
|
0a57c459b6 | ||
|
|
73fe420d09 | ||
|
|
a85cdb5947 | ||
|
|
511f8a91f1 | ||
|
|
2d1da95bc1 | ||
|
|
967adaf9db | ||
|
|
8ca60df1ab | ||
|
|
4832267307 | ||
|
|
6bb01066fb | ||
|
|
522124d695 | ||
|
|
d9c4e14c40 | ||
|
|
00944a5d71 | ||
|
|
e9bc99253d | ||
|
|
e9a45a6d06 | ||
|
|
497b9ba55b | ||
|
|
d1d04b1b32 | ||
|
|
826f805902 | ||
|
|
b1b0ac4433 | ||
|
|
3f28f88a35 | ||
|
|
938306a7bc | ||
|
|
1568366d9c | ||
|
|
79614562b9 | ||
|
|
96e495c61d | ||
|
|
e4dd957bbc | ||
|
|
aace685202 | ||
|
|
fa6f999754 | ||
|
|
f18649567f | ||
|
|
ae580c7749 | ||
|
|
c711764850 | ||
|
|
7d5dc101fa | ||
|
|
252e69a6ba | ||
|
|
c4be603279 | ||
|
|
90bf35bb1e | ||
|
|
47fb653044 | ||
|
|
4fe306c9ad | ||
|
|
03a58d36da | ||
|
|
d379dd4c8d | ||
|
|
7fc31e20b3 | ||
|
|
d11fe09419 | ||
|
|
c49ff490bc | ||
|
|
3f66297593 | ||
|
|
37d2317b68 | ||
|
|
a1d55e5a54 | ||
|
|
0ba0f11c4a | ||
|
|
f0c60b42c2 | ||
|
|
88adaa9d2d | ||
|
|
56099e79da | ||
|
|
4ba4268282 | ||
|
|
2661b6a71c | ||
|
|
e58a89af2d | ||
|
|
ad3d8675e7 | ||
|
|
18d9ca5928 | ||
|
|
5ab955d9c4 | ||
|
|
2b4a90781a | ||
|
|
10dece1c80 | ||
|
|
9dd0b055d0 | ||
|
|
9e460ebe0a | ||
|
|
7106bfcfb9 | ||
|
|
c936de7c20 | ||
|
|
60b5adab63 | ||
|
|
e3c8b3d524 | ||
|
|
8b79fd3da1 | ||
|
|
feedc183a4 | ||
|
|
c4282e63fb | ||
|
|
82f97d33d1 | ||
|
|
c1d43aff05 | ||
|
|
a14c166aab | ||
|
|
7d39ac4e1e | ||
|
|
f40d8b669c | ||
|
|
4b0a5bd1b8 | ||
|
|
6995467ff6 | ||
|
|
ad42a2b89a | ||
|
|
c4334f5142 | ||
|
|
4c3d243672 | ||
|
|
340c17f422 | ||
|
|
18a99a7d8f | ||
|
|
31b133b012 | ||
|
|
eb9acd9b56 | ||
|
|
02362a4807 | ||
|
|
466a93dca5 | ||
|
|
c89e30b3d9 | ||
|
|
d88b7f6fde | ||
|
|
d0a13c1a5a | ||
|
|
df9275819e | ||
|
|
5b5bfaf696 | ||
|
|
3d9c8a670e | ||
|
|
cf65571be7 | ||
|
|
66eae05e75 | ||
|
|
d1648dd707 | ||
|
|
7f2534819e | ||
|
|
e678931cee | ||
|
|
965dbf2c12 | ||
|
|
624f34ae13 | ||
|
|
d60eced317 | ||
|
|
c813c5e953 | ||
|
|
5ce9c5b09f | ||
|
|
7df33bc8c0 | ||
|
|
0abaac90a8 | ||
|
|
e5a526e4d6 | ||
|
|
8131f40269 | ||
|
|
743f9a9f51 | ||
|
|
0a54e34a9b | ||
|
|
53c84577c0 | ||
|
|
00e5d54be7 | ||
|
|
d13acdb484 | ||
|
|
92c1a8c45d | ||
|
|
939479f55e | ||
|
|
d19d0cb70d | ||
|
|
31ce32709e | ||
|
|
4f27af9949 | ||
|
|
b31280e387 | ||
|
|
03980304cf | ||
|
|
c852ae1a22 | ||
|
|
58f3841383 | ||
|
|
9385f0673b | ||
|
|
2bc0d19c9d | ||
|
|
fe1fa45956 | ||
|
|
6fa993645e | ||
|
|
144ff82402 | ||
|
|
f285b0c053 | ||
|
|
7e9cf297ac | ||
|
|
d780355784 | ||
|
|
b0194ba6af | ||
|
|
deba582353 | ||
|
|
303c6715dd | ||
|
|
b4ff988bd8 | ||
|
|
7e3b8b5cdb | ||
|
|
7353696014 | ||
|
|
a60eab6e36 | ||
|
|
23f9eb57e5 | ||
|
|
ad1eb93a05 | ||
|
|
2fb0c499ea | ||
|
|
fbebdc09b7 | ||
|
|
e56164f1e3 | ||
|
|
ff870ca088 | ||
|
|
52d91c4772 | ||
|
|
c80342e8d4 | ||
|
|
4d193ecb6a | ||
|
|
ce9024efc5 | ||
|
|
23788b04c6 | ||
|
|
c0e577c4dc | ||
|
|
00a0c4e69d | ||
|
|
81f91e2095 | ||
|
|
3b36df48e9 | ||
|
|
d1bfa9cd9c | ||
|
|
e5b03d9cbd | ||
|
|
3420cb0365 | ||
|
|
4a4762654b | ||
|
|
56d35bf409 | ||
|
|
4f97ea8da7 | ||
|
|
f367703574 | ||
|
|
8c64192ac7 | ||
|
|
11e3aa660e | ||
|
|
3dc75dc3d1 | ||
|
|
be0ef0cc28 | ||
|
|
470f8674df | ||
|
|
4da30e9eca | ||
|
|
09ea858dbf | ||
|
|
296c931d55 | ||
|
|
94b6e4598c | ||
|
|
f5173ca9bf | ||
|
|
1c16ada670 | ||
|
|
67308bcf6f | ||
|
|
0649da4cfb | ||
|
|
18df24d390 | ||
|
|
c2b275ddbc | ||
|
|
fc85c1a0c1 | ||
|
|
7f30e52fda | ||
|
|
042a5481ca | ||
|
|
4bb79b6c31 | ||
|
|
d6acdc77e0 | ||
|
|
7c898c3e4e | ||
|
|
3ea24183b9 | ||
|
|
d0dbdb1ab5 | ||
|
|
c2f5de1c55 | ||
|
|
fbcd8e32b8 | ||
|
|
ca4fa1ac74 | ||
|
|
fc415cf32a | ||
|
|
2faa61ac31 | ||
|
|
fd6ebe2895 | ||
|
|
08f81160cc | ||
|
|
9a071746ed | ||
|
|
bd5fd66408 | ||
|
|
1bd4565186 | ||
|
|
b2877365de | ||
|
|
981a1c56fb | ||
|
|
ce92341e75 | ||
|
|
46ceeed10d | ||
|
|
456ff10f02 | ||
|
|
dedda09560 | ||
|
|
8371c445ce | ||
|
|
93424d1adc | ||
|
|
d05d803f5e | ||
|
|
963e283db5 | ||
|
|
b78d76e1bb | ||
|
|
50446e425d | ||
|
|
72cd146665 | ||
|
|
f5d8786ffd | ||
|
|
ce5ae56f67 | ||
|
|
76c0df849a | ||
|
|
f64f0b2e33 | ||
|
|
4051988403 | ||
|
|
db102a5237 | ||
|
|
7f92d6003d | ||
|
|
6fb05be9da | ||
|
|
d0ebba6c5e | ||
|
|
29b0298f1e | ||
|
|
4d5897d519 | ||
|
|
7bcaab4f3a | ||
|
|
93c21103aa | ||
|
|
26a1a4418e | ||
|
|
0b62385ddb | ||
|
|
6535d461be | ||
|
|
3fa8994f4e | ||
|
|
ff6a4bb72d | ||
|
|
ff84e7c6e2 | ||
|
|
3716ba2ba2 | ||
|
|
c7b2a21fcb | ||
|
|
b0d07a75e5 | ||
|
|
60b7448d8a | ||
|
|
f980c59860 | ||
|
|
6c791541ee | ||
|
|
72cccb691c | ||
|
|
cb122819ae | ||
|
|
0dfc622b58 | ||
|
|
7d84d084a4 | ||
|
|
f2ef0966eb | ||
|
|
2806348f73 | ||
|
|
b95aa7a28c | ||
|
|
961239ac8d | ||
|
|
326375ad9a | ||
|
|
16a6915525 | ||
|
|
28781d9bfb | ||
|
|
3ef8046f5c | ||
|
|
03a612487d | ||
|
|
60b90075ac | ||
|
|
bc23615508 | ||
|
|
548cc074f4 | ||
|
|
3970b7b754 | ||
|
|
20598960a5 | ||
|
|
1200bbe7cc | ||
|
|
fa7e0e4758 | ||
|
|
9d87e444ac | ||
|
|
294bebb4a7 | ||
|
|
140fddbba8 | ||
|
|
bc1b0eb41b | ||
|
|
42d47b61a0 | ||
|
|
839a25e129 | ||
|
|
7979c5d9eb | ||
|
|
cba658baba | ||
|
|
34549445a8 | ||
|
|
a976ac3353 | ||
|
|
52c8b1ecbb | ||
|
|
56cc5d9355 | ||
|
|
a5f9256ac6 | ||
|
|
9505f8116b | ||
|
|
a5bd22b0cf | ||
|
|
1b5ec785f5 | ||
|
|
80e1b1adf4 | ||
|
|
6a6cd82070 | ||
|
|
161edbf2f6 | ||
|
|
667db0f2de | ||
|
|
f09d22a00d | ||
|
|
f1d4e500ba | ||
|
|
b5aac6d802 | ||
|
|
43c3a15a50 | ||
|
|
9f8d9c5d10 | ||
|
|
4084e6f584 | ||
|
|
7fa2987bb9 | ||
|
|
09ead1b6ea | ||
|
|
bc07b9e659 | ||
|
|
5bd2fd3391 | ||
|
|
4030193f31 | ||
|
|
a1dcf1f717 | ||
|
|
f0ce40dff3 | ||
|
|
f6b5511546 | ||
|
|
0be1c41e63 | ||
|
|
c8e81a2dad | ||
|
|
dd708166aa | ||
|
|
3e7c1e207d | ||
|
|
8f51b0907a | ||
|
|
c4160a3887 | ||
|
|
b76fd38854 | ||
|
|
9db68e7d39 | ||
|
|
ba3d16b48b | ||
|
|
c8ad075372 | ||
|
|
9912552a85 | ||
|
|
0088c0375a | ||
|
|
70502a698e | ||
|
|
a323e753ff | ||
|
|
e58ce626d5 | ||
|
|
106bf5145b | ||
|
|
c5c51ec0c1 | ||
|
|
f64c912d02 | ||
|
|
7884bcc21d | ||
|
|
7ebfe5ce69 | ||
|
|
08168c39c8 | ||
|
|
319c533196 | ||
|
|
56b6b7e732 | ||
|
|
30f49a61df | ||
|
|
12fbff22b2 | ||
|
|
02aac2c52e | ||
|
|
faabb9e111 | ||
|
|
b639599ade | ||
|
|
91b4aaf9e1 | ||
|
|
700334753d | ||
|
|
d451c0867c | ||
|
|
501e9260b2 | ||
|
|
27047bb3dc | ||
|
|
953af7589c | ||
|
|
14dea78ddc | ||
|
|
5737ed3bce | ||
|
|
82de139be5 | ||
|
|
c533dc969d | ||
|
|
34506daff6 | ||
|
|
c0808448be | ||
|
|
f8a729f4b4 | ||
|
|
c021165483 | ||
|
|
a21740f260 | ||
|
|
3ab8922143 | ||
|
|
c0edd1bf7a | ||
|
|
25d71d818a | ||
|
|
5dc7a6a815 | ||
|
|
e0fce6cc5b | ||
|
|
7fba56f27b | ||
|
|
33d2b27b91 | ||
|
|
088b594fa8 | ||
|
|
a1a38b7b39 | ||
|
|
500bf0f3f5 | ||
|
|
a2534263fe | ||
|
|
77e8f9a8ab | ||
|
|
f3ceebabd9 | ||
|
|
9e094fded6 | ||
|
|
ebcb403411 | ||
|
|
dd9b3c651f | ||
|
|
065a64371e | ||
|
|
99b44cf33a | ||
|
|
d6380a1084 | ||
|
|
dd4fde9599 | ||
|
|
8236b58a29 | ||
|
|
7ea64b53ad | ||
|
|
441b324afe | ||
|
|
669ce1faca | ||
|
|
f08d4a53b3 | ||
|
|
7f8eec9dca | ||
|
|
8333830bd7 | ||
|
|
2ca5d23aac | ||
|
|
aa5284c8f1 | ||
|
|
a1d2a72a78 | ||
|
|
58d27a9438 | ||
|
|
b4e4aa9822 | ||
|
|
856d8c303d | ||
|
|
f0713c8940 | ||
|
|
d23ac6f598 | ||
|
|
6948c0a30a | ||
|
|
4c11554d2c | ||
|
|
20f906bf9b | ||
|
|
1a61a7a39f | ||
|
|
0db7ab64ee | ||
|
|
33851d51ab | ||
|
|
6ddb21ab95 | ||
|
|
289b70d276 | ||
|
|
eab1c1260c | ||
|
|
61435d26dc | ||
|
|
fc0878e688 | ||
|
|
352229efbd | ||
|
|
44e4e67aa8 | ||
|
|
c9a082614d | ||
|
|
f948a80242 | ||
|
|
c71edc0719 | ||
|
|
71524271e9 | ||
|
|
d5923ef808 | ||
|
|
ef136acb6c | ||
|
|
a5956cfa82 | ||
|
|
703de01ebf | ||
|
|
8343e35146 | ||
|
|
0679b502f2 | ||
|
|
e790842007 | ||
|
|
a9d53e98de | ||
|
|
908082e7c3 | ||
|
|
8ec6187dc7 | ||
|
|
50ce4cbea5 | ||
|
|
3904900243 | ||
|
|
33d6e6ce6c | ||
|
|
363a4dbdef | ||
|
|
e635abe552 | ||
|
|
df6bec236f | ||
|
|
78cb7963fb | ||
|
|
b251d81065 | ||
|
|
11ee80a070 | ||
|
|
8050e1f853 | ||
|
|
f18e3be4f2 | ||
|
|
87f5368d3c | ||
|
|
945bfaf0ea | ||
|
|
1cef7df006 | ||
|
|
c2899ad4cb | ||
|
|
7e274a1ff4 | ||
|
|
7e27e1420e | ||
|
|
7367f72f4a | ||
|
|
81f1f49d5d | ||
|
|
bceaf46e2f | ||
|
|
649714429b | ||
|
|
dbb02241c5 | ||
|
|
f228ca7961 | ||
|
|
5b973448bf | ||
|
|
d5935a37bb | ||
|
|
5693cc9eb3 | ||
|
|
feff2ba09e | ||
|
|
caf81f1367 | ||
|
|
f58b418b7d | ||
|
|
cec976b70a | ||
|
|
1e5f6ba39c | ||
|
|
b8452d29d6 | ||
|
|
b0d4858e42 | ||
|
|
8d6c957cbc | ||
|
|
1e5cd7f140 | ||
|
|
e64d09b6f7 | ||
|
|
4d09ba5080 | ||
|
|
c8e2b9cb99 | ||
|
|
be863e763f | ||
|
|
cc19685207 | ||
|
|
461862be46 | ||
|
|
1c7850de17 | ||
|
|
f4622fac41 | ||
|
|
244e9c96ad | ||
|
|
645621b243 | ||
|
|
2647a09790 | ||
|
|
bee14cad16 | ||
|
|
e966289ddb | ||
|
|
32a5641ace | ||
|
|
d6ed56aed6 | ||
|
|
14e1214645 | ||
|
|
0b22423ab8 | ||
|
|
4c9296c07f | ||
|
|
8b1e7c6a48 | ||
|
|
c73302f715 | ||
|
|
6fff22391c | ||
|
|
6d280c5f3c | ||
|
|
929be0b4e6 | ||
|
|
4e8e5a7fed | ||
|
|
721e55458c | ||
|
|
5a13c02774 | ||
|
|
c15121377f | ||
|
|
5b6f340a7b | ||
|
|
b52deed4dd | ||
|
|
2199aa0635 | ||
|
|
5c1a1a30ee | ||
|
|
47fe955d35 | ||
|
|
ac5d907002 | ||
|
|
55ed95b42c | ||
|
|
1ec523b018 | ||
|
|
d5747a61f1 | ||
|
|
eb574e8a35 | ||
|
|
ff3fb3da65 | ||
|
|
57375ca13f | ||
|
|
de48646581 | ||
|
|
f4bb7a9d29 | ||
|
|
bd8590212d | ||
|
|
c475c72ead | ||
|
|
d9ec33f51e | ||
|
|
64127b5c1b | ||
|
|
4f1db9a00f | ||
|
|
ba29a37871 | ||
|
|
e5ce88f007 | ||
|
|
53b81af704 | ||
|
|
67893fb8f8 | ||
|
|
8fa23436f9 | ||
|
|
e75eec7392 | ||
|
|
26b21ed031 | ||
|
|
c556322fc5 | ||
|
|
a6b2bf69f1 | ||
|
|
0da51d25bc | ||
|
|
c47212ff90 | ||
|
|
9fb79b8930 | ||
|
|
d545aa01b2 | ||
|
|
2162b7e67f | ||
|
|
93040fc757 | ||
|
|
a3457c29cb | ||
|
|
c0ed56cba0 | ||
|
|
4bc719470c | ||
|
|
c01f0bffde | ||
|
|
0e32f19de8 | ||
|
|
ab15584eed | ||
|
|
ed579fbb9c | ||
|
|
21c03b74b6 | ||
|
|
657acc90e4 | ||
|
|
fa144d3307 | ||
|
|
5cc05d082d | ||
|
|
49712f8f4e | ||
|
|
b0550027c3 | ||
|
|
c78e717ef6 | ||
|
|
9c2e6a8f31 | ||
|
|
898c92045d | ||
|
|
b3df439c51 | ||
|
|
b56f9490f5 | ||
|
|
3dfbd14de2 | ||
|
|
e8899bf9fc | ||
|
|
e94928318e | ||
|
|
d3ab62c4b1 | ||
|
|
b3c9f7647f | ||
|
|
5d6d42d15d | ||
|
|
58863c0c41 | ||
|
|
13673d2c79 | ||
|
|
2978a9aa40 | ||
|
|
9ceacd4867 | ||
|
|
32a938abd2 | ||
|
|
5a08ae4f41 | ||
|
|
dae4eb2d0e | ||
|
|
1600ca2c03 | ||
|
|
bf85902485 | ||
|
|
7ffb61f650 | ||
|
|
eb8ab8ef15 | ||
|
|
3ba4c8a1c7 | ||
|
|
afa7a27f33 | ||
|
|
e1a0887f51 | ||
|
|
ff42459239 | ||
|
|
71dd22a55d | ||
|
|
f9345c7699 | ||
|
|
a2dcbb9c13 | ||
|
|
2d32ba5ca2 | ||
|
|
7b3c9bea58 | ||
|
|
351bf49d9f | ||
|
|
164c3fa9cb | ||
|
|
89299eb1f7 | ||
|
|
dae83c53fb | ||
|
|
ad41796ddb | ||
|
|
e42ba05883 | ||
|
|
b83f1e7694 | ||
|
|
6fbe4c3e2e | ||
|
|
fe9bb31b09 | ||
|
|
8dac5e34be | ||
|
|
9a8ed80026 | ||
|
|
ee7726c4ec | ||
|
|
99eb84c104 | ||
|
|
25ce3880c4 | ||
|
|
b8f8d09f97 | ||
|
|
ab923bc2c3 | ||
|
|
10d85d4f51 | ||
|
|
2637dc35a7 | ||
|
|
dfee5b9a6c | ||
|
|
aff2588cce | ||
|
|
dc05d38867 | ||
|
|
9ceb22a2c0 | ||
|
|
db89c1d8b8 | ||
|
|
ecedbc38ec | ||
|
|
3e7ff4059e | ||
|
|
ba379ceba2 | ||
|
|
0a956906de | ||
|
|
75d6765adc | ||
|
|
6bceebbb1a | ||
|
|
6d8575d0d0 | ||
|
|
32e01b5f1a | ||
|
|
302fe53704 | ||
|
|
66008d5ca4 | ||
|
|
7c313703a2 | ||
|
|
2eabc77deb | ||
|
|
22b566cb15 | ||
|
|
2243e22630 | ||
|
|
781c5a76d9 | ||
|
|
0e3fd6a582 | ||
|
|
d1b4d4b599 | ||
|
|
65455b454e | ||
|
|
941c87f6d7 | ||
|
|
aa8fbf8102 | ||
|
|
a50683d6ca | ||
|
|
fc92aef4d1 | ||
|
|
62eb9c2012 | ||
|
|
37c9392e59 | ||
|
|
0d0fc23f9e | ||
|
|
b0375d9c9a | ||
|
|
cc313bfba1 | ||
|
|
4cf7b7022e | ||
|
|
3ef1eb8529 | ||
|
|
3a466d6fd2 | ||
|
|
3fa6064068 | ||
|
|
a09111052a | ||
|
|
ac6f77a744 | ||
|
|
9e1019b1cf | ||
|
|
77b9e6560b | ||
|
|
279393337e | ||
|
|
96793193b5 | ||
|
|
406a519400 | ||
|
|
70e40ce857 | ||
|
|
5fb6be4bf6 | ||
|
|
7ac097255e | ||
|
|
c02aae417a | ||
|
|
068642e53b | ||
|
|
b7a882f42b | ||
|
|
04d6ff274b | ||
|
|
c11c286206 | ||
|
|
bdeeae47a2 | ||
|
|
453bb43629 | ||
|
|
e35b2e5daa | ||
|
|
f418ad74f5 | ||
|
|
587d0b2c36 | ||
|
|
86f86f516a | ||
|
|
11562c430a | ||
|
|
5745862fa8 | ||
|
|
281f248d91 | ||
|
|
d6d6ce9c5f | ||
|
|
3856b77e15 | ||
|
|
91a54c11eb | ||
|
|
0fcb0b7d8e | ||
|
|
9f90ca1b48 | ||
|
|
ee8629835b | ||
|
|
e164d462b4 | ||
|
|
8e5fec785e | ||
|
|
cebf6dcd01 | ||
|
|
4aa83d1350 | ||
|
|
96104688e1 | ||
|
|
32666b5ae8 | ||
|
|
6a776624ac | ||
|
|
4fc7e27417 | ||
|
|
e74cceb3f4 | ||
|
|
7bd4cfc5b3 | ||
|
|
0791349455 | ||
|
|
b83e39a540 | ||
|
|
4905cd425f | ||
|
|
bef832f4e0 | ||
|
|
b55f38290b | ||
|
|
51e1598e42 | ||
|
|
6b906b9a9c | ||
|
|
f1ef3bdcd7 | ||
|
|
c16e176fbe | ||
|
|
55fccf03fa | ||
|
|
d3f9ae4868 | ||
|
|
debeafa36b | ||
|
|
39e946630d | ||
|
|
8d815e8ee0 | ||
|
|
430b57833d | ||
|
|
e32c48d0dd | ||
|
|
e2402b1c8f | ||
|
|
36abdd7114 | ||
|
|
79f54771b5 | ||
|
|
2556f84752 | ||
|
|
c8e624850b | ||
|
|
56692e23f5 | ||
|
|
b38ce9452d | ||
|
|
fcba193a3c | ||
|
|
6fc7fa3b13 | ||
|
|
ad4216a3fc | ||
|
|
08c3a38b67 | ||
|
|
b8165af054 | ||
|
|
90b6912daa | ||
|
|
862727e9bf | ||
|
|
9e9a3262eb | ||
|
|
c268189e38 | ||
|
|
94431a7a33 | ||
|
|
b4d5b44e00 | ||
|
|
16f006362e | ||
|
|
dfec577417 | ||
|
|
33e2f8766a | ||
|
|
31a080a9cb | ||
|
|
14e9c8954c | ||
|
|
dff7352e2e | ||
|
|
30bb6c9fb9 | ||
|
|
7485ec2223 | ||
|
|
60082864a6 | ||
|
|
dcb8f21b2b | ||
|
|
b18a97e777 | ||
|
|
c7d93bd470 | ||
|
|
7bf8917c08 | ||
|
|
093198e3d5 | ||
|
|
e48bd29584 | ||
|
|
1444981bdc | ||
|
|
e3f6bbfcc9 | ||
|
|
89922b254c | ||
|
|
ea8918291b | ||
|
|
21445fa01a | ||
|
|
8d340eecc1 | ||
|
|
463826bf13 | ||
|
|
40eda1b972 | ||
|
|
a5c3e303c7 | ||
|
|
270a21ebae | ||
|
|
6aa96e5f81 | ||
|
|
1792714901 | ||
|
|
54ab16ab35 | ||
|
|
c58959eba2 | ||
|
|
2f53d58cd9 | ||
|
|
e0d6f8a311 | ||
|
|
e48ec75896 | ||
|
|
58d8c65990 | ||
|
|
dd66380132 | ||
|
|
92dd801ecd | ||
|
|
fba1db29b3 | ||
|
|
1111c1952b | ||
|
|
7833862342 | ||
|
|
78c1a6f326 | ||
|
|
060ddca1ab | ||
|
|
a9fd2f76d2 | ||
|
|
d1837b54b4 | ||
|
|
26746ac9ee | ||
|
|
c019b10aa8 | ||
|
|
0cd316116b | ||
|
|
c92a556093 | ||
|
|
d6f6752af0 | ||
|
|
d7e04e9b0a | ||
|
|
c1aaa1bcf6 | ||
|
|
10fe14e783 | ||
|
|
0231902a69 | ||
|
|
dbeb8cfbec | ||
|
|
96bd150518 | ||
|
|
cb1fb19dea | ||
|
|
3b37f5b156 | ||
|
|
a989634ba5 | ||
|
|
d865186f23 | ||
|
|
e63245a6dc | ||
|
|
682fd15441 | ||
|
|
bbd81b9395 | ||
|
|
cb6186ea60 | ||
|
|
12bfc7d56a | ||
|
|
7dc4ccc87d | ||
|
|
622894a7e3 | ||
|
|
965ec8ec81 | ||
|
|
103b2fe5fd | ||
|
|
b6bfde6d64 | ||
|
|
1ec2752ed2 | ||
|
|
a5b6b2e9b5 | ||
|
|
f51b100a8c | ||
|
|
412db758e8 | ||
|
|
f617f69be8 | ||
|
|
b81d278aee | ||
|
|
aee4bfa369 | ||
|
|
517f0e1bac | ||
|
|
08837d2cd0 | ||
|
|
9a4c823366 | ||
|
|
7f3ad4fc2c | ||
|
|
9e7b759236 | ||
|
|
67853b464c | ||
|
|
51ffd4a377 | ||
|
|
dada2e85a2 | ||
|
|
2a53824b02 | ||
|
|
3dc1dfa4a2 | ||
|
|
95e0d1a560 | ||
|
|
8effbf7e4d | ||
|
|
72ad1abd39 | ||
|
|
2a89d87fab | ||
|
|
33eeee0ff2 | ||
|
|
3c46388be5 | ||
|
|
d37b9497a2 | ||
|
|
17512f2a28 | ||
|
|
597a9f6dd6 | ||
|
|
e90b399329 | ||
|
|
7c8be662c6 | ||
|
|
e38b005a8b | ||
|
|
f0abb4473e | ||
|
|
d62e90f5b4 | ||
|
|
4ecf8ecd06 | ||
|
|
9a3b72f762 | ||
|
|
7285af4771 | ||
|
|
ec37e8f0dc | ||
|
|
41f05f6864 | ||
|
|
cc2fa94fa1 | ||
|
|
2f579311b8 | ||
|
|
ac034040ce | ||
|
|
59410b9d62 | ||
|
|
6f665da016 | ||
|
|
c567c92d4b | ||
|
|
75b2dfa66d | ||
|
|
c40826c140 | ||
|
|
175aa510c8 | ||
|
|
236ac7d062 | ||
|
|
00f1b2bfa7 | ||
|
|
a9fad83971 | ||
|
|
1550dc7f1f | ||
|
|
bbb4c109d7 | ||
|
|
a6fa091ab3 | ||
|
|
6a1fa88e15 | ||
|
|
787e79c687 | ||
|
|
7468d96c51 | ||
|
|
9c9ece3d95 | ||
|
|
316b3a8851 | ||
|
|
2023057fbb | ||
|
|
94c048d018 | ||
|
|
e126af63ed | ||
|
|
750359d780 | ||
|
|
8588b2b11a | ||
|
|
4594c912a6 | ||
|
|
afcfd81496 | ||
|
|
aa06aaab8e | ||
|
|
fdca881e34 | ||
|
|
81de7a5863 | ||
|
|
efbf044ea0 | ||
|
|
46a1c09abe | ||
|
|
6a3e795d73 | ||
|
|
e0f08cd5c1 | ||
|
|
a539308545 | ||
|
|
3364a46139 | ||
|
|
fb4e64d15e | ||
|
|
68349e48cd | ||
|
|
4dff8b16f1 | ||
|
|
9245565085 | ||
|
|
86ca381a3c | ||
|
|
a7952e15c7 | ||
|
|
643f81b5db | ||
|
|
cf5a66a204 | ||
|
|
e05239f3d9 | ||
|
|
0e73b58abf | ||
|
|
59dc5dcd54 | ||
|
|
adedc7c667 | ||
|
|
29ad568791 | ||
|
|
453a3c4852 | ||
|
|
2e824827b7 | ||
|
|
3393d13b67 | ||
|
|
1da7689526 | ||
|
|
806758d06f | ||
|
|
580f9bf03a | ||
|
|
707a648a4c | ||
|
|
213a19c9f3 | ||
|
|
e32ed90d21 | ||
|
|
2f822abb47 | ||
|
|
1ca83bc629 | ||
|
|
77485747f1 | ||
|
|
40adf4b944 | ||
|
|
2aad5a7f3a | ||
|
|
0f29a5be9f | ||
|
|
397c2698ae | ||
|
|
0f00bb77fe | ||
|
|
a73303a047 | ||
|
|
0334243a69 | ||
|
|
bb809c865f | ||
|
|
20750c260e | ||
|
|
37dd1b3ed0 | ||
|
|
f3ac3476cb | ||
|
|
67ae1c9f69 | ||
|
|
fd583dbbc3 | ||
|
|
d8d0af2bb3 | ||
|
|
b176085e14 | ||
|
|
4cfdb71d3a | ||
|
|
38590e321e | ||
|
|
a09900a64f | ||
|
|
4a7d982a2b | ||
|
|
ee69468104 | ||
|
|
4739ab58cc | ||
|
|
be5b982e45 | ||
|
|
86ad4ed6c1 | ||
|
|
3056a4db83 | ||
|
|
adc8a360ad | ||
|
|
719dafa679 | ||
|
|
ecf7d4e59d | ||
|
|
45863bc7c5 | ||
|
|
ea0545779a | ||
|
|
e625bab7eb | ||
|
|
2930d609ea | ||
|
|
069ca214ff | ||
|
|
d699db2d19 | ||
|
|
8e15de5c83 | ||
|
|
69a90ef9e7 | ||
|
|
d39361705a | ||
|
|
4512c10ce5 | ||
|
|
5e24167d6c | ||
|
|
64d28ba435 | ||
|
|
7febbdf52b | ||
|
|
b64b98490e | ||
|
|
f40602cc59 | ||
|
|
ef8afa7873 | ||
|
|
df4fc947ec | ||
|
|
eecfbf3fa6 | ||
|
|
cfbe7669b4 | ||
|
|
ccaeb87b01 | ||
|
|
fc98f35ea7 | ||
|
|
998f867c29 | ||
|
|
eb8325afcb | ||
|
|
7674c29c78 | ||
|
|
573734fab8 | ||
|
|
2cbd983b4c | ||
|
|
18983f5476 | ||
|
|
75ef154c12 | ||
|
|
414a354511 | ||
|
|
2168511e5b | ||
|
|
f64d6bc687 | ||
|
|
3e83729cb2 | ||
|
|
83256cdacb | ||
|
|
f748fe688c | ||
|
|
188f5c7c3c | ||
|
|
838346e4f7 | ||
|
|
12dc03a903 | ||
|
|
e17c2f2397 | ||
|
|
071baf63b0 | ||
|
|
1795d5bcc9 | ||
|
|
27125c6f72 | ||
|
|
12694dcf69 | ||
|
|
e7d8ef924f | ||
|
|
0f682b7da1 | ||
|
|
2b385f28f0 | ||
|
|
ac8e914a25 | ||
|
|
3067c86d65 | ||
|
|
96afc15fa2 | ||
|
|
66f694bb39 | ||
|
|
06025cd19d | ||
|
|
fc698a4df2 | ||
|
|
2cd47c0415 | ||
|
|
b032f2dd87 | ||
|
|
3acd442c2e | ||
|
|
6b43e5c80e | ||
|
|
183380fe57 | ||
|
|
7abc5f3ead | ||
|
|
1867f9aa1f | ||
|
|
f47c7e0ef1 | ||
|
|
36ab866c2c | ||
|
|
f943deb2c3 | ||
|
|
27ea25a999 | ||
|
|
989b353fbd | ||
|
|
c1607d14dc | ||
|
|
85884d14cd | ||
|
|
08cf275bc8 | ||
|
|
88ba3c47c2 | ||
|
|
4aee44b1c0 | ||
|
|
e3d4c067df | ||
|
|
dfc626c99c | ||
|
|
8786516c58 | ||
|
|
34e945128f | ||
|
|
7db6165b46 | ||
|
|
883f2e92ae | ||
|
|
3e8b003515 | ||
|
|
ed66e9e9b9 | ||
|
|
f87e11d16a | ||
|
|
5a64556fbf | ||
|
|
d71f4b33d7 | ||
|
|
c91bc03532 | ||
|
|
348fab33a8 | ||
|
|
68f3df4975 | ||
|
|
f6f8996aa9 | ||
|
|
8533f962c6 | ||
|
|
af33c0c69f | ||
|
|
50b1402d66 | ||
|
|
cfd5c62386 | ||
|
|
569f72c360 | ||
|
|
df74d49f72 | ||
|
|
eac31dfd03 | ||
|
|
0b1a7ee346 | ||
|
|
77ba2b40e7 | ||
|
|
94239f5526 | ||
|
|
148edc005a | ||
|
|
ec59f4d37e | ||
|
|
2c03878c3b | ||
|
|
c8c845a659 | ||
|
|
a54f1970f1 | ||
|
|
7f602937a3 | ||
|
|
c2631c914d | ||
|
|
c17014a055 | ||
|
|
c572226b0d | ||
|
|
6718b0683e | ||
|
|
3735df4f53 | ||
|
|
4746ef09cd | ||
|
|
ed93bbd16d | ||
|
|
041daab068 | ||
|
|
e5c831a800 | ||
|
|
b8ed3eb824 | ||
|
|
95f9f04612 | ||
|
|
823c72bf27 | ||
|
|
9b387485b5 | ||
|
|
56e27bdd49 | ||
|
|
30e8c3e951 | ||
|
|
96b7e4c67f | ||
|
|
65d93c97ea | ||
|
|
a92b8acba7 | ||
|
|
85f4c38b4e | ||
|
|
40c51a1f05 | ||
|
|
a6c2e995af | ||
|
|
596e671973 | ||
|
|
d38b2eb8ef | ||
|
|
bb9444e19a | ||
|
|
26d406fec3 | ||
|
|
dda0b8af45 | ||
|
|
d5ce4e0f6b | ||
|
|
e5cfe710fa | ||
|
|
2a0e2ce0a2 | ||
|
|
ef56433684 | ||
|
|
8bc3a39586 | ||
|
|
e13a671f86 | ||
|
|
48f82c75c1 | ||
|
|
a5955657c5 | ||
|
|
319657e815 | ||
|
|
c589001dff | ||
|
|
c04cd2228e | ||
|
|
cba51b4a5e | ||
|
|
8962ddca01 | ||
|
|
1808a4373b | ||
|
|
bb22afb7f1 | ||
|
|
ce571cb6ca | ||
|
|
ac9afbfede | ||
|
|
4e8130bd99 | ||
|
|
00c9321b1d | ||
|
|
8e8b582747 | ||
|
|
6f2e843193 | ||
|
|
7d9460a560 | ||
|
|
32f2b14429 | ||
|
|
651f8512eb | ||
|
|
3dac7d16e7 | ||
|
|
240f80b467 | ||
|
|
17b5a36b59 | ||
|
|
ea326a5f29 | ||
|
|
c271415328 | ||
|
|
f28c7d029c | ||
|
|
d7f317fa58 | ||
|
|
3f2c34edd2 | ||
|
|
566a8ac5ac | ||
|
|
71b5bc4fe6 | ||
|
|
a427783bac | ||
|
|
23dc6a44f6 | ||
|
|
9ef5a01de4 | ||
|
|
cdfe3ee7c8 | ||
|
|
c3c73c7e24 | ||
|
|
af8d308a69 | ||
|
|
a7da245656 | ||
|
|
e9713f9635 | ||
|
|
3dbde04d18 | ||
|
|
1611588682 | ||
|
|
93c72822a3 | ||
|
|
6f5bcf12c6 | ||
|
|
07dba02897 | ||
|
|
db685879af | ||
|
|
94e8d6fe13 | ||
|
|
0d1fbfb755 | ||
|
|
10c52cf569 | ||
|
|
7661df0847 | ||
|
|
e8ad6ec673 | ||
|
|
3ef48cbdd5 | ||
|
|
5fe36872c5 | ||
|
|
d33955c290 | ||
|
|
606a60e901 | ||
|
|
93f5154429 | ||
|
|
a6e046c6c3 | ||
|
|
8eae8cb86c | ||
|
|
abe5013f1d | ||
|
|
ca7de4bcb1 | ||
|
|
9a9b5860df | ||
|
|
0971636c07 | ||
|
|
50fcec63e0 | ||
|
|
8a87dc63b1 | ||
|
|
efea3aa385 | ||
|
|
86bab5b7c3 | ||
|
|
675ed82c0b | ||
|
|
58dd0198dd | ||
|
|
16f833a516 | ||
|
|
0392830950 | ||
|
|
04efc6b4a4 | ||
|
|
8edd7d54cf | ||
|
|
f19744ae88 | ||
|
|
01ee119c59 | ||
|
|
4cd60aca22 | ||
|
|
81ba791ee7 | ||
|
|
c7a94a80df | ||
|
|
c509226bab | ||
|
|
312b35051d | ||
|
|
e401d85af7 | ||
|
|
e4c9af176b | ||
|
|
9c354ee269 | ||
|
|
96d880839a | ||
|
|
e23db7efbd | ||
|
|
fd540f1820 | ||
|
|
7d55a85fa6 | ||
|
|
fa7ef870dd | ||
|
|
ecacb874e4 | ||
|
|
0b2e0a1b28 | ||
|
|
a08d60fbbe | ||
|
|
ef6041c14f | ||
|
|
25954758d7 | ||
|
|
0ae1578dce | ||
|
|
2039b85be3 | ||
|
|
8eae73dd02 | ||
|
|
fe9a24a1b8 | ||
|
|
3d974eed03 | ||
|
|
329b58c8cd | ||
|
|
2d82e3ef9a | ||
|
|
faaf644331 | ||
|
|
d7aedb439e | ||
|
|
9c11840e40 | ||
|
|
4c36b80300 | ||
|
|
f7fa5aab70 | ||
|
|
17aeefe1b0 | ||
|
|
825ae5b8aa | ||
|
|
3513f6d83c | ||
|
|
4ad4badcfe | ||
|
|
b67837c0ef | ||
|
|
b5f3f910f6 | ||
|
|
b0a7448394 | ||
|
|
bed7763a3b | ||
|
|
572c075a4b | ||
|
|
bad7756af2 | ||
|
|
45c89030ac | ||
|
|
7aad4f4253 | ||
|
|
9e9385a877 | ||
|
|
431d69ac87 | ||
|
|
3be24f1e6f | ||
|
|
c45deb3f87 | ||
|
|
213674511e | ||
|
|
6548e3f7d0 | ||
|
|
a269ae7e30 | ||
|
|
862295d9f3 | ||
|
|
61e130e68c | ||
|
|
236e32fb3d | ||
|
|
067ea68979 | ||
|
|
7504503d5f | ||
|
|
108d0d49ec | ||
|
|
2c424a0911 | ||
|
|
ffe1b287a8 | ||
|
|
485fca34b0 | ||
|
|
0b984e9a23 | ||
|
|
74e084c893 | ||
|
|
47ae192cf8 | ||
|
|
80b7fd5f3f | ||
|
|
0227b16d06 | ||
|
|
2a1af17f67 | ||
|
|
b6e9746198 | ||
|
|
bc141831f7 | ||
|
|
acd3fd0c3e | ||
|
|
2369266b8a | ||
|
|
e707ff530d | ||
|
|
9fe640b187 | ||
|
|
750aa163c5 | ||
|
|
018b1da2b9 | ||
|
|
170e268199 | ||
|
|
5755a94cc1 | ||
|
|
4f06024d9f | ||
|
|
2a1330083d | ||
|
|
d03393ffe9 | ||
|
|
d6dde225bd | ||
|
|
6c33c38c08 | ||
|
|
4068423c48 | ||
|
|
195e7e185a | ||
|
|
87140ab4cc | ||
|
|
9aff2d5ee1 | ||
|
|
858e493b52 | ||
|
|
f0c93ae9dc | ||
|
|
9455bfe6c2 | ||
|
|
467790c8d8 | ||
|
|
c2076373e8 | ||
|
|
a4ab6126b0 | ||
|
|
ce5f7bd4ff | ||
|
|
f5d39ef7f2 | ||
|
|
89b8be98d6 | ||
|
|
87fc5e4923 | ||
|
|
e6f1e598a9 | ||
|
|
2398e753bf | ||
|
|
847b721558 | ||
|
|
b00fe1d12f | ||
|
|
6214d0c9a5 | ||
|
|
4a8beb8588 | ||
|
|
feca7412d2 | ||
|
|
dfb163546b | ||
|
|
f45cbdd0f7 | ||
|
|
7a02787bee | ||
|
|
3059570404 | ||
|
|
b501953d41 | ||
|
|
c5836e3525 | ||
|
|
59c58aa3cf | ||
|
|
b1c48e66c9 | ||
|
|
d4796c46b1 | ||
|
|
2b9bfc0ec2 | ||
|
|
188eefeeac | ||
|
|
22d43c25b2 | ||
|
|
a7ae1c3b9c | ||
|
|
42cf8b0bc4 | ||
|
|
42348d6b43 | ||
|
|
2c6f11fc1c | ||
|
|
f0c2f9235e | ||
|
|
3a73f8f84f | ||
|
|
8e911101b7 | ||
|
|
a96f9d9bfb | ||
|
|
03761c5dd4 | ||
|
|
d3298c422b | ||
|
|
b0c1684ff3 | ||
|
|
9f6c5381a1 | ||
|
|
e209dc1229 | ||
|
|
9df40a9b69 | ||
|
|
bd687b41d3 | ||
|
|
526aaf7302 | ||
|
|
72ed2f1d43 | ||
|
|
e14cc69441 | ||
|
|
d78bbbf69a | ||
|
|
f696107c90 | ||
|
|
475191cf7f | ||
|
|
69a463ad02 | ||
|
|
51fc193395 | ||
|
|
45c865ede8 | ||
|
|
3f5a80d692 | ||
|
|
69238bfc23 | ||
|
|
6a7fb4c10c | ||
|
|
732d9b83ba | ||
|
|
50214a6a07 | ||
|
|
bc9f0fe56c | ||
|
|
40604f6076 | ||
|
|
b17b6e07ea | ||
|
|
3f2c75d920 | ||
|
|
d08c7a9b96 | ||
|
|
8591529aad | ||
|
|
33d46172a6 | ||
|
|
dbd1f27862 | ||
|
|
2eae0a9d3a | ||
|
|
8b6fa32d12 | ||
|
|
90b6f5613e | ||
|
|
d1527710f9 | ||
|
|
657af10361 | ||
|
|
7e853abc4b | ||
|
|
9f0cb9148f | ||
|
|
edf74313ef | ||
|
|
14c92efd38 | ||
|
|
2190419b83 | ||
|
|
0c410f8a14 | ||
|
|
a4bcba8971 | ||
|
|
24dbec71f8 | ||
|
|
763744268d | ||
|
|
00a80adfae | ||
|
|
98b7642232 | ||
|
|
19d1e4dcc9 | ||
|
|
d18f929faf | ||
|
|
04ef8b8de5 | ||
|
|
f8e0c9e27a | ||
|
|
907e0fa8c8 | ||
|
|
47fcb9562f | ||
|
|
cee6d03033 | ||
|
|
57cc7037f6 | ||
|
|
7c9a38e0f3 | ||
|
|
f594f485a4 | ||
|
|
f709a5747a | ||
|
|
75494066ea | ||
|
|
60baa49007 | ||
|
|
8ebb7b4952 | ||
|
|
bbea303fbc | ||
|
|
83eb07959d | ||
|
|
e830b3cffe | ||
|
|
15cd05cdfb | ||
|
|
a9eebe3b71 | ||
|
|
fa4a90f905 | ||
|
|
96e5a2909d | ||
|
|
a6839e823e | ||
|
|
cb4a688e02 | ||
|
|
ab6bcd32a9 | ||
|
|
67f97b0e15 | ||
|
|
f824be6b7b | ||
|
|
fbeaa1c487 | ||
|
|
57ee3c6a6d | ||
|
|
a4011376e0 | ||
|
|
69ef9c8a6a | ||
|
|
8ef844ca53 | ||
|
|
a97bad97ae | ||
|
|
c245637c38 | ||
|
|
4a4f537ee8 | ||
|
|
44585b98cc | ||
|
|
4520f7646f | ||
|
|
bebac4773a | ||
|
|
9e76e14a79 | ||
|
|
826cdbb507 | ||
|
|
4dfda3240c | ||
|
|
aae155e954 | ||
|
|
fdcb481f07 | ||
|
|
1c78584f41 | ||
|
|
685b3ee41b | ||
|
|
b674e332fc | ||
|
|
57324f1703 | ||
|
|
ac869ec855 | ||
|
|
b774ba9888 | ||
|
|
54a6f2f51b | ||
|
|
d449420a45 | ||
|
|
bafac95266 | ||
|
|
3bd27d5695 | ||
|
|
0416f6361c | ||
|
|
9abf0b7176 | ||
|
|
aaf776ddc9 | ||
|
|
79465334fe | ||
|
|
f8ca5cdf56 | ||
|
|
ac19a50f5f | ||
|
|
8e31f7fb07 | ||
|
|
fdb2fecd45 | ||
|
|
a0b521ba8e | ||
|
|
5dbeb68ed2 | ||
|
|
c7c2baae03 | ||
|
|
f60bdbaece | ||
|
|
91dbd92193 | ||
|
|
099ec16403 | ||
|
|
23316d4e1e | ||
|
|
966def13c5 | ||
|
|
0899723510 | ||
|
|
434a63a98a | ||
|
|
d27d021913 | ||
|
|
a84c261ff3 | ||
|
|
ff434f9d38 | ||
|
|
49f910a56b | ||
|
|
90846013c2 | ||
|
|
b2d9da0b4b | ||
|
|
3cec3b866d | ||
|
|
6ba204a259 | ||
|
|
51d0df97d3 | ||
|
|
4c14290694 | ||
|
|
5fa77b04ea | ||
|
|
dbbf318e1c | ||
|
|
9e3763e6e5 | ||
|
|
42cd7df813 | ||
|
|
64529cefa5 | ||
|
|
70c35642a4 | ||
|
|
ebf48800e6 | ||
|
|
673660d362 | ||
|
|
ab8a12e211 | ||
|
|
8c0debfe65 | ||
|
|
71f497947e | ||
|
|
06bdaf1fb1 | ||
|
|
840455b872 | ||
|
|
66d01b688c | ||
|
|
2db607c716 | ||
|
|
c41130080d | ||
|
|
85cefec5a3 | ||
|
|
1b1756de22 | ||
|
|
648bf25557 | ||
|
|
e8a3ac592d | ||
|
|
151738a4cb | ||
|
|
e26d4e1762 | ||
|
|
b7fe35a2af | ||
|
|
3c93509471 | ||
|
|
f11c1613bd | ||
|
|
ecfa77f6e7 | ||
|
|
132bb6db29 | ||
|
|
f40168e614 | ||
|
|
7b7cb959f9 | ||
|
|
dfa83314df | ||
|
|
867153c5ea | ||
|
|
0612b52881 | ||
|
|
a4d8091625 | ||
|
|
aa9f364dc6 | ||
|
|
7cb4521082 | ||
|
|
07da8d5e36 | ||
|
|
f9d213650c | ||
|
|
eb407e3b5c | ||
|
|
23cb67e0a1 | ||
|
|
b3864f2d10 | ||
|
|
927685fd63 | ||
|
|
0448b8e3ae | ||
|
|
8ff95a71dd | ||
|
|
ec916d1f5f | ||
|
|
e3613e7dc1 | ||
|
|
50df01d00e | ||
|
|
7bb94227be | ||
|
|
76629e1b52 | ||
|
|
e95cff0bde | ||
|
|
9dca70ec9e | ||
|
|
75d239356a | ||
|
|
982e09a486 | ||
|
|
8bd05871d0 | ||
|
|
2f99fda88e | ||
|
|
2a0fa53c0d | ||
|
|
f7d8993a1f | ||
|
|
9fce70809e | ||
|
|
830b1a8a8d | ||
|
|
d335d356ca | ||
|
|
b2e969eb8f | ||
|
|
6db8b84048 | ||
|
|
0240a7d43d | ||
|
|
f88443afa3 | ||
|
|
c3f1d39563 | ||
|
|
ce3d7f90fd | ||
|
|
4b827a8d9c | ||
|
|
f07e17f6aa | ||
|
|
257b0f0d69 | ||
|
|
dd518fcafb | ||
|
|
020bff1485 | ||
|
|
96d31cf64e | ||
|
|
f35ca71454 | ||
|
|
d1bea790f3 | ||
|
|
0140925e65 | ||
|
|
5baec6cb58 | ||
|
|
948ee96f1a | ||
|
|
099c74481d | ||
|
|
2381e33236 | ||
|
|
09476fa6e5 | ||
|
|
061c10ea69 | ||
|
|
cb21fefbd9 | ||
|
|
c1c3be8b4e | ||
|
|
41ff76a6af | ||
|
|
a95e87d14d | ||
|
|
725bad0963 | ||
|
|
e31859a5ed | ||
|
|
ab99400f9d | ||
|
|
603e549c85 | ||
|
|
1e09bfca09 | ||
|
|
59812b947a | ||
|
|
ca054644ef | ||
|
|
bef7d793d3 | ||
|
|
ffc61e01f7 | ||
|
|
647f7ddeec | ||
|
|
6a7386ddb8 | ||
|
|
3afc379746 | ||
|
|
5b46db5e6b | ||
|
|
6908d20128 | ||
|
|
6dc9e9659d | ||
|
|
e79fc867c5 | ||
|
|
b2c6958750 | ||
|
|
05b6108c66 | ||
|
|
a70f278117 | ||
|
|
ae786a016d | ||
|
|
8e4945ab28 | ||
|
|
167528d70f | ||
|
|
ecb45ef6df | ||
|
|
1e1d6f6437 | ||
|
|
99c2d37b8c | ||
|
|
fe1bc18ac9 | ||
|
|
3c70573be0 | ||
|
|
cf20526f9f | ||
|
|
f398f1113d | ||
|
|
2a32ded575 | ||
|
|
a74f037a49 | ||
|
|
c7c81ed95d | ||
|
|
7a4ee286be | ||
|
|
37ba19776a | ||
|
|
4b4ffba080 | ||
|
|
62b880cb78 | ||
|
|
bdceb24fd9 | ||
|
|
b4fc43d787 | ||
|
|
d399bd5b6a | ||
|
|
6b05fcf704 | ||
|
|
009d8e13da | ||
|
|
52495c17d6 | ||
|
|
93ac75cddb | ||
|
|
fe08d4e851 | ||
|
|
7524a35751 | ||
|
|
055c7db5a4 | ||
|
|
6beb421a35 | ||
|
|
312fd57772 | ||
|
|
44c08c3a73 | ||
|
|
0bb5974ab6 | ||
|
|
6dcdf6ec76 | ||
|
|
ff4485d8ae | ||
|
|
eacfa36fe6 | ||
|
|
fdbb0b0e2f | ||
|
|
cf6eb64f0b | ||
|
|
85773ad869 | ||
|
|
a02c168a0d | ||
|
|
53ba38e98d | ||
|
|
6bc7d7c698 | ||
|
|
f16d4f0523 | ||
|
|
b5dac0c333 | ||
|
|
1c8f1b2c27 | ||
|
|
8d9e9eaff9 | ||
|
|
b900c43ceb | ||
|
|
d62d6cc852 | ||
|
|
150afecc29 | ||
|
|
ea57984912 | ||
|
|
11006dac35 | ||
|
|
dd4840caf6 | ||
|
|
66b6bae596 | ||
|
|
3f7afb8375 | ||
|
|
deacf76ca4 | ||
|
|
5e110f2844 | ||
|
|
7c0d8fc29c | ||
|
|
a626ccfcad | ||
|
|
a9810ccb72 | ||
|
|
26b3970485 | ||
|
|
90ad129b83 | ||
|
|
e851c044b5 | ||
|
|
a597368c46 | ||
|
|
105c694903 | ||
|
|
d7b2453980 | ||
|
|
d4b1d5c938 | ||
|
|
7e281a3354 | ||
|
|
f9f2657c98 | ||
|
|
1c793edf7d | ||
|
|
133ddb118c | ||
|
|
af850dac99 | ||
|
|
f554b444c0 | ||
|
|
cb8aa21fb1 | ||
|
|
c0a7db8899 | ||
|
|
dd4df6a46b | ||
|
|
02b5cae2ad | ||
|
|
ba41e466cf | ||
|
|
6d0390bad9 | ||
|
|
ee9477dc21 | ||
|
|
37212a632c | ||
|
|
105c5759f3 | ||
|
|
7144e92ce2 | ||
|
|
565a208f20 | ||
|
|
452a4654da | ||
|
|
d105b0bd9f | ||
|
|
4c7aee75c1 | ||
|
|
4acd819478 | ||
|
|
3d2229ca05 | ||
|
|
b5faf5800b | ||
|
|
290ff5b839 | ||
|
|
be0a789e7d | ||
|
|
75af7dc269 | ||
|
|
9d88102520 | ||
|
|
656f971823 | ||
|
|
dad07da2e9 | ||
|
|
08d9cbfe48 | ||
|
|
a101f6490f | ||
|
|
b248483841 | ||
|
|
c727795881 | ||
|
|
f4c2b4cc7e | ||
|
|
bf8621c921 | ||
|
|
8bd9a52de3 | ||
|
|
eb61ae37ae | ||
|
|
82c5c4d285 | ||
|
|
68c70dd1b9 | ||
|
|
5fde96d563 | ||
|
|
8772219492 | ||
|
|
6b7f4cbe17 | ||
|
|
06e4b6251c | ||
|
|
d8af3ea855 | ||
|
|
4794869bd8 | ||
|
|
4462b7be5c | ||
|
|
756ab1191e | ||
|
|
e2d4d400ff | ||
|
|
2022098b13 | ||
|
|
a26b8dff18 | ||
|
|
ee3c7f335f | ||
|
|
bf93f9f987 | ||
|
|
a001e6ef09 | ||
|
|
36dce454dd | ||
|
|
e28b705f0d | ||
|
|
f3b631fbb4 | ||
|
|
16c8f8c9cd | ||
|
|
1843a27c2a | ||
|
|
7a0185dbcc | ||
|
|
17302a9422 | ||
|
|
78f2d44a0e | ||
|
|
eb978a74f2 | ||
|
|
66aa02a382 | ||
|
|
8236a0fa2d | ||
|
|
9635417ae5 | ||
|
|
373e502501 | ||
|
|
f1d9e89418 | ||
|
|
cd98e84ca5 | ||
|
|
454cb69700 | ||
|
|
e8b9d20865 | ||
|
|
bc09af4ad3 | ||
|
|
730badd378 | ||
|
|
e410841f10 | ||
|
|
8b212f2169 | ||
|
|
c8f8ecc4d6 | ||
|
|
dacb0bd87f | ||
|
|
6adc7f9ee6 | ||
|
|
dddd12f66b | ||
|
|
384c807d6a | ||
|
|
01a05502e8 | ||
|
|
d062fc1d31 | ||
|
|
a01a7a44cd | ||
|
|
d25d5327e5 | ||
|
|
968762c135 | ||
|
|
0e23b89352 | ||
|
|
219ee76bf2 | ||
|
|
39bbf17caf | ||
|
|
f40a6d496a | ||
|
|
f2e782f5dd | ||
|
|
f199ad7a42 | ||
|
|
d760e66fdb | ||
|
|
512f0a814c | ||
|
|
5668b1bd7a | ||
|
|
c6dcf3f1d3 | ||
|
|
eae1c5afdd | ||
|
|
4bbe885f35 | ||
|
|
a2416bf7f5 | ||
|
|
58e9e54b7f | ||
|
|
767979ea44 | ||
|
|
bd7715b180 | ||
|
|
df24305698 | ||
|
|
cdc0441405 | ||
|
|
edf4f7eacc | ||
|
|
8e75e940dd | ||
|
|
d694600146 | ||
|
|
0989f62256 | ||
|
|
63f045ef2e | ||
|
|
91b68f3b45 | ||
|
|
39910885d9 | ||
|
|
506ec0f947 | ||
|
|
c96f3a877f | ||
|
|
2a0278fbb1 | ||
|
|
ee869a49f4 | ||
|
|
343ba8733b | ||
|
|
e6009794ee | ||
|
|
971c12b937 | ||
|
|
849af08ee9 | ||
|
|
6547fa9cc3 | ||
|
|
4eaa03e9ba | ||
|
|
d0b3891002 | ||
|
|
e25936c1f1 | ||
|
|
6672499dde | ||
|
|
dea24c905b | ||
|
|
7e4cb20ac3 | ||
|
|
d4cf12bc17 | ||
|
|
aee97e414f | ||
|
|
96d94d6217 | ||
|
|
0a673129ac | ||
|
|
51a8d2235c | ||
|
|
26ecd88074 | ||
|
|
65685d4525 | ||
|
|
744a1528cc | ||
|
|
bb92154145 | ||
|
|
8057773c4f | ||
|
|
9f625de51a | ||
|
|
06c9b95e09 | ||
|
|
804665df69 | ||
|
|
0f3dfec7f2 | ||
|
|
39a0ff99b2 | ||
|
|
d34287b2cc | ||
|
|
831a9fe012 | ||
|
|
15e2ec2cf0 | ||
|
|
9ad7c8e95b | ||
|
|
bb2d7063c4 | ||
|
|
70e127b219 | ||
|
|
ef12da774e | ||
|
|
6cd5a7eab9 | ||
|
|
d119cf6e96 | ||
|
|
9b3a878c18 | ||
|
|
365b264656 | ||
|
|
1184d6aecb | ||
|
|
b12edf70bb | ||
|
|
53c1da8f94 | ||
|
|
213b810279 | ||
|
|
8a4617d3c2 | ||
|
|
c108b31954 | ||
|
|
fd6829f757 | ||
|
|
dabb2cc9a0 | ||
|
|
4ecb06c901 | ||
|
|
375bc4cc69 | ||
|
|
9265ff53d0 | ||
|
|
75ad56338b | ||
|
|
db24ce7708 | ||
|
|
2d45ecff22 | ||
|
|
5d98f3866c | ||
|
|
106f31db6a | ||
|
|
9a5bdc9b4f | ||
|
|
0b829be798 | ||
|
|
94bb75fb7c | ||
|
|
7d84d0f83e | ||
|
|
bc40b61ef1 | ||
|
|
73c3d5fc81 | ||
|
|
13575029c0 | ||
|
|
ea016382f2 | ||
|
|
782344eed8 | ||
|
|
95fb7859d2 | ||
|
|
9d3e626b55 | ||
|
|
a6e8b9037a | ||
|
|
c9f91ecee9 | ||
|
|
7cb2d3f143 | ||
|
|
a975b4937a | ||
|
|
fce8e0fef0 | ||
|
|
12fe55a258 | ||
|
|
3bbc2c1f4c | ||
|
|
99671b754f | ||
|
|
9fc5f6271b | ||
|
|
4647f3046e | ||
|
|
c44cddabfa | ||
|
|
9ff91c29f2 | ||
|
|
e303cc536c | ||
|
|
afdfefc9ad | ||
|
|
3033914e2d | ||
|
|
70b124cfa0 | ||
|
|
38a5313ed2 | ||
|
|
9291e2777d | ||
|
|
465da5136d | ||
|
|
568e7481d8 | ||
|
|
a0297933ce | ||
|
|
50dad6801b | ||
|
|
ee7475a9d4 | ||
|
|
ba988f1d3f | ||
|
|
db029ed29f | ||
|
|
41d38975f7 | ||
|
|
eecadab387 | ||
|
|
e27e6c0b2d | ||
|
|
30a5d646ec | ||
|
|
882fb3e049 | ||
|
|
0423781363 | ||
|
|
43cfb3cd10 | ||
|
|
de15c9746f | ||
|
|
1371bf89e0 | ||
|
|
3b8f8d7fc8 | ||
|
|
a828c214b5 | ||
|
|
3381144d2e | ||
|
|
a19883f875 | ||
|
|
482722af0a | ||
|
|
02bac61c9c | ||
|
|
e8ee5831d3 | ||
|
|
083b4f0d3b | ||
|
|
c0280b43f2 | ||
|
|
d153e977a7 | ||
|
|
eee7bf0c97 | ||
|
|
0c94606fcf | ||
|
|
ed75bab7b2 | ||
|
|
bff6e0d277 | ||
|
|
c325017675 | ||
|
|
4b12c9a9fc | ||
|
|
0d57744efa | ||
|
|
e882d64d8a | ||
|
|
16f910e350 | ||
|
|
e2c2ef9788 | ||
|
|
a98b4adead | ||
|
|
186fe53279 | ||
|
|
c9917c826a | ||
|
|
aedebecae2 | ||
|
|
482dd0e8f8 | ||
|
|
cae2e7de80 | ||
|
|
e76ce05e29 | ||
|
|
a98174be85 | ||
|
|
b68cfbf794 | ||
|
|
17d8f2884e | ||
|
|
050b8fa7df | ||
|
|
c30c9b2168 | ||
|
|
358735a199 | ||
|
|
d909bbc297 | ||
|
|
2adb2f82d7 | ||
|
|
5a013127ec | ||
|
|
1219e5c244 | ||
|
|
4aec48c2ca | ||
|
|
8d54ddf426 | ||
|
|
c21cdb8055 | ||
|
|
05824e6acd | ||
|
|
b3b680f073 | ||
|
|
598fe85243 | ||
|
|
e7ac84fca3 | ||
|
|
b9ea6be842 | ||
|
|
d46dbc0fa8 | ||
|
|
0e10f12ec0 | ||
|
|
8f178b2c29 | ||
|
|
d41fe80b8e | ||
|
|
96e992bd26 | ||
|
|
465c421707 | ||
|
|
f7e9622084 | ||
|
|
79e000f63d | ||
|
|
10af0e8c93 | ||
|
|
d13cf0e29a | ||
|
|
1671922f7e | ||
|
|
c9da795bf3 | ||
|
|
69eb1401a9 | ||
|
|
aa06ac119f | ||
|
|
1afee59c95 | ||
|
|
4decad6f6b | ||
|
|
a37f786a37 | ||
|
|
8f98e572e1 | ||
|
|
c818f8af82 | ||
|
|
fac8bcc20c | ||
|
|
1d004f2788 | ||
|
|
cef4ea786a | ||
|
|
8ebf24d8e7 | ||
|
|
69b02f7e46 | ||
|
|
b788e05396 | ||
|
|
5dc4e74c98 | ||
|
|
436ef1cff6 | ||
|
|
d77a78cdf1 | ||
|
|
66cb855db0 | ||
|
|
fb3aa9628d | ||
|
|
89c81d9f22 | ||
|
|
cffcfad42a | ||
|
|
21f5976d35 | ||
|
|
21ada251fe | ||
|
|
44801c50f3 | ||
|
|
6a1fb8cb73 | ||
|
|
8e8cefb3f6 | ||
|
|
e0e4fa3b3e | ||
|
|
b9dbda5ddc | ||
|
|
931a2c516f | ||
|
|
2f9e1cf4df | ||
|
|
68d1c38f3b | ||
|
|
c4acea6c82 | ||
|
|
7ebabddfe0 | ||
|
|
a047ddffc0 | ||
|
|
92992a5406 | ||
|
|
593f850693 | ||
|
|
f87db1ac14 | ||
|
|
363e498462 | ||
|
|
a03dd44924 | ||
|
|
554b27a82a | ||
|
|
7062ead4fd | ||
|
|
5f2f084091 | ||
|
|
a560121775 | ||
|
|
b0a346709e | ||
|
|
7b64cd2a8e | ||
|
|
9ecfecb83e | ||
|
|
ec4565263d | ||
|
|
ed1da364e5 | ||
|
|
942dbbc8fa | ||
|
|
3e8f9cbbf2 | ||
|
|
322b5dac79 | ||
|
|
5a85fee3f1 | ||
|
|
ca472b6750 | ||
|
|
8e3d0af08e | ||
|
|
12f2b900ca | ||
|
|
6228dff809 | ||
|
|
d34b3190f7 | ||
|
|
4f5348c7d4 | ||
|
|
aff871f127 | ||
|
|
9f00359e17 | ||
|
|
0871436488 | ||
|
|
6aa598b029 | ||
|
|
83e22fa9f0 | ||
|
|
a230340578 | ||
|
|
2da78c6591 | ||
|
|
46350200d7 | ||
|
|
00502e94b5 | ||
|
|
70ce7ee106 | ||
|
|
cf4ae38699 | ||
|
|
09f83e48ff | ||
|
|
bcbce5dd48 | ||
|
|
0a0ef50caf | ||
|
|
e20f1587cd | ||
|
|
715e3856f2 | ||
|
|
850166eca1 | ||
|
|
00cca7be69 | ||
|
|
0a43f69e87 | ||
|
|
c84d2d895e | ||
|
|
87d5f45277 | ||
|
|
137f37cd41 | ||
|
|
18722d7874 | ||
|
|
307e1351df | ||
|
|
441fbd63bb | ||
|
|
073b723c09 | ||
|
|
37bc73865d | ||
|
|
e2bced978e | ||
|
|
a6d8c4343f | ||
|
|
d5654d64d5 | ||
|
|
06459eb37b | ||
|
|
d08fea551e | ||
|
|
924692bf1c | ||
|
|
ec9e8916b1 | ||
|
|
d3be8ee2b7 | ||
|
|
16f869fe5a | ||
|
|
a90858193e | ||
|
|
6dcf63009e | ||
|
|
5f8f86b5a7 | ||
|
|
a78117e094 | ||
|
|
44421920b3 | ||
|
|
0e79fbda05 | ||
|
|
9ab89c634b | ||
|
|
0a6f12f448 | ||
|
|
8612bdd03d | ||
|
|
f08d3e12ca | ||
|
|
deda47f461 | ||
|
|
2751f5e254 | ||
|
|
2ac1ff1d0a | ||
|
|
30e8c70055 | ||
|
|
62600b3be0 | ||
|
|
57b9130cf7 | ||
|
|
b557a7fa16 | ||
|
|
73e336adfa | ||
|
|
86b27a3088 | ||
|
|
cce699a465 | ||
|
|
d662a39a12 | ||
|
|
49c6c2c529 | ||
|
|
29f3eec957 | ||
|
|
c1d875d841 | ||
|
|
d28e3c4f08 | ||
|
|
cedfb95f9b | ||
|
|
59430ee83e | ||
|
|
b436d2a7f4 | ||
|
|
84d2ad70e6 | ||
|
|
1bd9549e45 | ||
|
|
2409a0d04e | ||
|
|
635fed0427 | ||
|
|
5d7e75c5d8 | ||
|
|
c0e97b4e96 | ||
|
|
b2842dcd52 | ||
|
|
112f1016ed | ||
|
|
c78c504043 | ||
|
|
27349c5c69 | ||
|
|
872aa2b358 | ||
|
|
72abc0f219 | ||
|
|
4d565eade6 | ||
|
|
2df7e46cb1 | ||
|
|
105205312b | ||
|
|
97f7461aa9 | ||
|
|
7e2eaf43ca | ||
|
|
d752ab0151 | ||
|
|
c87a7cb2c0 | ||
|
|
6aff2803e5 | ||
|
|
fcfca6efda | ||
|
|
0ebe832f8e | ||
|
|
86ed82dcec | ||
|
|
769b69999f | ||
|
|
91ee066751 | ||
|
|
404d08ef6d | ||
|
|
11487cd591 | ||
|
|
51a30977d2 | ||
|
|
c0366ba40c | ||
|
|
3f5bc3464d | ||
|
|
fcd6be71b0 | ||
|
|
ad22cf5051 | ||
|
|
8f66c50721 | ||
|
|
6f834e99d2 | ||
|
|
86c7b31b6d | ||
|
|
6d918b565f | ||
|
|
52575a44b2 | ||
|
|
d5eebd6ab4 | ||
|
|
3f44ecb77a | ||
|
|
9bd4426225 | ||
|
|
4af0a33f1f | ||
|
|
636bde6343 | ||
|
|
16579e0b1f | ||
|
|
292d3faa9e | ||
|
|
6d2f7f6e54 | ||
|
|
a131a41874 | ||
|
|
48ffc19193 | ||
|
|
e75c0dbaa1 | ||
|
|
0c0f63a2a8 | ||
|
|
c9942aa828 | ||
|
|
ca56f0747e | ||
|
|
e77c01d00a | ||
|
|
c85775922e | ||
|
|
da0c9c2ce9 | ||
|
|
42b388317e | ||
|
|
6a570ae57e | ||
|
|
5e6aa45658 | ||
|
|
5fa8af1c9a | ||
|
|
2e4bf9ef1b | ||
|
|
ba9f55679d | ||
|
|
2c999a550b | ||
|
|
805de248d3 | ||
|
|
1240874e41 | ||
|
|
feff50e7e0 | ||
|
|
33558d14e5 | ||
|
|
c37fc73a02 | ||
|
|
d152537e50 | ||
|
|
5d4e87373f | ||
|
|
1c36156594 | ||
|
|
300701a06b | ||
|
|
a776f15557 | ||
|
|
1c89f8a855 | ||
|
|
81e4d9c2ee | ||
|
|
49be6be8f4 | ||
|
|
b861a9c5d0 | ||
|
|
9828e6cafc | ||
|
|
3d8d9ef61c | ||
|
|
5d13978bbf | ||
|
|
b844aecb9e | ||
|
|
f57c8c1c35 | ||
|
|
bbbc5f6e6c | ||
|
|
ac0c60b740 | ||
|
|
f2f95a20a3 | ||
|
|
12f213ffad | ||
|
|
66e1cf96e2 | ||
|
|
c3b7229fbb | ||
|
|
f96a0ce9d2 | ||
|
|
ba592070f7 | ||
|
|
6a2ea62f82 | ||
|
|
6cfd817b5a | ||
|
|
c99ef4b09f | ||
|
|
7e131f8fb6 | ||
|
|
10171c19c3 | ||
|
|
e0853095e3 | ||
|
|
5a365506f7 | ||
|
|
4aee1b378a | ||
|
|
9f5e3ecb8c | ||
|
|
7b9614fcf3 | ||
|
|
8e62a0e22d | ||
|
|
f89d3d5077 | ||
|
|
145e059cdf | ||
|
|
22916a7e8d | ||
|
|
07f458f991 | ||
|
|
6180a58d7a | ||
|
|
5cc2a7c09e | ||
|
|
e584653b72 | ||
|
|
f4b346a6f8 | ||
|
|
cb1b71bc57 | ||
|
|
95060efb7d | ||
|
|
b82dd61a0c | ||
|
|
c84d10686f | ||
|
|
d652a81078 | ||
|
|
fc76d2df38 | ||
|
|
1a98682ea0 | ||
|
|
64437a531b | ||
|
|
4d26170bd6 | ||
|
|
36831a3d6a | ||
|
|
e7c0df4eac | ||
|
|
a296c19633 | ||
|
|
8b5f7a0770 | ||
|
|
7b9a36be7d | ||
|
|
cbe1628cf2 | ||
|
|
d482c078bc | ||
|
|
38f9332905 | ||
|
|
96f1f9e45e | ||
|
|
f031cd9b42 | ||
|
|
3aa15c8a23 | ||
|
|
a3cc3aa8b8 | ||
|
|
29f67448e9 | ||
|
|
976a3ed3bf | ||
|
|
98c0944419 | ||
|
|
bf78b197a3 | ||
|
|
427960fee8 | ||
|
|
75da7d80dc | ||
|
|
7eb730ee03 | ||
|
|
4b9fa7a417 | ||
|
|
6163acc8c5 | ||
|
|
4add5b6bf0 | ||
|
|
1ae3b37fbe | ||
|
|
23c710cf53 | ||
|
|
e29b81c444 | ||
|
|
73dba6d6e0 | ||
|
|
09e845a539 | ||
|
|
e1744ceab2 | ||
|
|
cbb1b1f28e | ||
|
|
59f9938849 | ||
|
|
8db318094f | ||
|
|
5a4206e05d | ||
|
|
6794ae35a1 | ||
|
|
8676913e73 | ||
|
|
2ef120fdcd | ||
|
|
08c1a14b13 | ||
|
|
4a138aa918 | ||
|
|
793a21a825 | ||
|
|
6fd76054b4 | ||
|
|
c80be9e54b | ||
|
|
56ebae773c | ||
|
|
fad6647255 | ||
|
|
edb2b60f2f | ||
|
|
d894ccb4ea | ||
|
|
bd09dc8ea8 | ||
|
|
a1e19e1cf8 | ||
|
|
799dbfc2c5 | ||
|
|
54e6cf95d7 | ||
|
|
3ea0e391db | ||
|
|
4fd21f7764 | ||
|
|
f8009451a9 | ||
|
|
f5c48a00b4 | ||
|
|
c70338a9a9 | ||
|
|
e83540d80c | ||
|
|
24dde5d42b | ||
|
|
8e15afb2c4 | ||
|
|
911cd678ff | ||
|
|
f11770b88b | ||
|
|
514ef9a9c5 | ||
|
|
57070aa8ff | ||
|
|
e06c6b5ac8 | ||
|
|
a6dada6c36 | ||
|
|
a058cf2ff0 | ||
|
|
142d25c0d7 | ||
|
|
4e6231a321 | ||
|
|
29d87a3743 | ||
|
|
9a2b06f35f | ||
|
|
4e2f3a289c | ||
|
|
db70cd058a | ||
|
|
b6cdf18165 | ||
|
|
7d710cbf8c | ||
|
|
654c4e3c06 | ||
|
|
a3271b08b7 | ||
|
|
b0de5970ce | ||
|
|
db7f84f9f8 | ||
|
|
58140e1d3a | ||
|
|
315d9c308b | ||
|
|
d13c0ee393 | ||
|
|
7740cac6dd | ||
|
|
ead8e5e0c3 | ||
|
|
195de818b6 | ||
|
|
5c0113ce59 | ||
|
|
db2341c842 | ||
|
|
b7b87096d8 | ||
|
|
6a41b22a1b | ||
|
|
5696065727 | ||
|
|
e9281843bf | ||
|
|
43184a271f | ||
|
|
a7e1bc34de | ||
|
|
98c46f7eb0 | ||
|
|
3de0f042c6 | ||
|
|
f115032095 | ||
|
|
0b628cb50e | ||
|
|
751775a04c | ||
|
|
177bb3c569 | ||
|
|
3cf8c629fa | ||
|
|
3947250daa | ||
|
|
96be211c88 | ||
|
|
b00b8ae71b | ||
|
|
45f416c4f1 | ||
|
|
c58149f5b6 | ||
|
|
579a6c9311 | ||
|
|
08e7a23121 | ||
|
|
bf190fd3d8 | ||
|
|
ea3a73b598 | ||
|
|
9989fb4bbc | ||
|
|
0524f4a540 | ||
|
|
43febd392c | ||
|
|
dea894161a | ||
|
|
710f07049d | ||
|
|
fe977c4288 | ||
|
|
f5b9d86e42 | ||
|
|
9ab4802d07 | ||
|
|
f0828ebbc0 | ||
|
|
84b1624b23 | ||
|
|
47da39a2ff | ||
|
|
7bec3b30b7 | ||
|
|
ad5a62b62d | ||
|
|
f080798000 | ||
|
|
6af81d649f | ||
|
|
5f3f8eeec6 | ||
|
|
9b4302bc2f | ||
|
|
fa618a2bf7 | ||
|
|
6915025c7e | ||
|
|
5cf80c05a5 | ||
|
|
711afeb688 | ||
|
|
96165cd21d | ||
|
|
1a07f40c4b | ||
|
|
eb5ea82bb1 | ||
|
|
cd9ff08235 | ||
|
|
957713015a | ||
|
|
a639772dfe | ||
|
|
6c85d97d6c | ||
|
|
7feb13671a | ||
|
|
3f066cca4a | ||
|
|
c86d221ba5 | ||
|
|
5870dad639 | ||
|
|
53a70c6e77 | ||
|
|
45fecf0059 | ||
|
|
a6e4b77273 | ||
|
|
f932cc4073 | ||
|
|
6bf77166e1 | ||
|
|
6b9d0d5df5 | ||
|
|
9778322d99 | ||
|
|
6ff04ec91b | ||
|
|
c7700fcd72 | ||
|
|
027b1d5cab | ||
|
|
ce65a1c2a7 | ||
|
|
650b0c7c30 | ||
|
|
823b23f800 | ||
|
|
b47db88ded | ||
|
|
20b92f50d9 | ||
|
|
b401ad85d1 | ||
|
|
e9df63119b | ||
|
|
caa6c9b471 | ||
|
|
bb8e43f16c | ||
|
|
2c71d08ea2 | ||
|
|
500f7901ac | ||
|
|
5fb716fc21 | ||
|
|
31ef970f23 | ||
|
|
a770eaf500 | ||
|
|
e171f3af41 | ||
|
|
1041284384 | ||
|
|
6555de6ef5 | ||
|
|
b81e77cffa | ||
|
|
a1741f21cc | ||
|
|
76a36f45bf | ||
|
|
a767beec60 | ||
|
|
183bea3b98 | ||
|
|
6981cbb985 | ||
|
|
fdfcc6c5ea | ||
|
|
b86ecf7441 | ||
|
|
5107d1b69b | ||
|
|
e133c8c2c3 | ||
|
|
450ab7c289 | ||
|
|
32bfb808ae | ||
|
|
1f19804cab | ||
|
|
9ff6003dfc | ||
|
|
f725ea7d0d | ||
|
|
39d17a94c6 | ||
|
|
8153e5338f | ||
|
|
999caea021 | ||
|
|
b70665865f | ||
|
|
6a9e0c52c3 | ||
|
|
44b3709d1d | ||
|
|
b060165817 | ||
|
|
98fc073f89 | ||
|
|
ba29f0ccd1 | ||
|
|
3473e19508 | ||
|
|
22bd7dcc42 | ||
|
|
79d09d02ed | ||
|
|
a6313fa46c | ||
|
|
2a7431bd61 | ||
|
|
90851459c8 | ||
|
|
27c9bf137c | ||
|
|
2205790dd4 | ||
|
|
0115c2f70a | ||
|
|
7bce99d77b | ||
|
|
47b65868f4 | ||
|
|
8735a06f3c | ||
|
|
d35fecbeea | ||
|
|
0e388639cc | ||
|
|
17e6ad1fe8 | ||
|
|
a3f077c783 | ||
|
|
86b3229746 | ||
|
|
06b0e35fb9 | ||
|
|
6fbca1acfd | ||
|
|
f0e36c6365 | ||
|
|
e9cb7000cc | ||
|
|
0e8b0e414a | ||
|
|
ec3114d6d8 | ||
|
|
60fc51ed22 | ||
|
|
603b775f4a | ||
|
|
964ce3d6aa | ||
|
|
fb88e1c1c9 | ||
|
|
7081b89e97 | ||
|
|
c6ab1aa227 | ||
|
|
8a509afc20 | ||
|
|
6a95e0877b | ||
|
|
28c37ab465 | ||
|
|
842edbcbe7 | ||
|
|
3e556c710b | ||
|
|
4289ffef1c | ||
|
|
0c051a83a7 | ||
|
|
82dedb1fbb | ||
|
|
04c0f309be | ||
|
|
8408d51359 | ||
|
|
a8ada492b2 | ||
|
|
55d6ee65ae | ||
|
|
69ecf8aea7 | ||
|
|
f2b51668b4 | ||
|
|
c2527c9e1b | ||
|
|
0bcd45c1d4 | ||
|
|
ecf0022fd1 | ||
|
|
4d4a70ad0e | ||
|
|
0f45a8c180 | ||
|
|
ad3e740c09 | ||
|
|
7e6cc02e09 | ||
|
|
7000ef4471 | ||
|
|
0beda6fa89 | ||
|
|
a41d2e43fd | ||
|
|
c98158b460 | ||
|
|
02a53c582c | ||
|
|
192f4825a2 | ||
|
|
bcce3acd5f | ||
|
|
8cd6b9275a | ||
|
|
5fa9dfac6a | ||
|
|
fe51c7b960 | ||
|
|
cf5346c263 | ||
|
|
776b3b5efa | ||
|
|
520524285a | ||
|
|
ec8cb1668c | ||
|
|
1b7b59466d | ||
|
|
e45e9c20dd | ||
|
|
450cb1771c | ||
|
|
f7a3d45c2c | ||
|
|
65eb625843 | ||
|
|
c06b957a8a | ||
|
|
05064dfaf4 | ||
|
|
425610b98a | ||
|
|
0d34b97948 | ||
|
|
c6426245e4 | ||
|
|
6fe41870ab | ||
|
|
2d4e02f277 | ||
|
|
6d7d3fff6d | ||
|
|
cc145eaf2e | ||
|
|
da6d1d359c | ||
|
|
92ae57c9ee | ||
|
|
8409979dc5 | ||
|
|
8bc92a2cbb | ||
|
|
2de4c03faa | ||
|
|
382a7c94a2 | ||
|
|
1d7a00666e | ||
|
|
14c0289542 | ||
|
|
69ebdfd689 | ||
|
|
fc21ece784 | ||
|
|
a3ededdcf1 | ||
|
|
0178b20983 | ||
|
|
f9142a1c56 | ||
|
|
b19209c45c | ||
|
|
73b5b9d7b7 | ||
|
|
0a9d646bd7 | ||
|
|
24edfe2190 | ||
|
|
0bb8127372 | ||
|
|
1b8a69154f | ||
|
|
f2155b49e2 | ||
|
|
62c9b99e72 | ||
|
|
2a344e1d87 | ||
|
|
ae14aa991d | ||
|
|
2885c8a4ab | ||
|
|
3d411431c6 | ||
|
|
1800faf0dd | ||
|
|
19ded3809f | ||
|
|
40cd255051 | ||
|
|
ad4677a67c | ||
|
|
d9e0d016c6 | ||
|
|
c570fd03d1 | ||
|
|
1e0565f17b | ||
|
|
3ff464641a | ||
|
|
7cb3d305d4 | ||
|
|
e46dba43ad | ||
|
|
afad96a52a | ||
|
|
1a00341e6b | ||
|
|
3388c8ed09 | ||
|
|
6d4967ffef | ||
|
|
b27366e1e6 | ||
|
|
95a29b5d1d | ||
|
|
d320867569 | ||
|
|
aabd388070 | ||
|
|
7db6594358 | ||
|
|
388ca1c645 | ||
|
|
7c04b00e2b | ||
|
|
dac0644f07 | ||
|
|
7d103fe0f0 | ||
|
|
901d9f3f6e | ||
|
|
ddc9e74aa8 | ||
|
|
12690de9de | ||
|
|
6b30cdac09 | ||
|
|
ccb7528a59 | ||
|
|
01ed8a07af | ||
|
|
a9f399d6cc | ||
|
|
a527a485f8 | ||
|
|
f0c8f6d47b | ||
|
|
a29dc3893f | ||
|
|
c6f392bf6c | ||
|
|
f2ded2fdb7 | ||
|
|
080737fd1f | ||
|
|
1040757556 | ||
|
|
38d612e5ba | ||
|
|
c20aa2ad5f | ||
|
|
a7c3753c5a | ||
|
|
ebf72eb126 | ||
|
|
be49a80bc7 | ||
|
|
23da770364 | ||
|
|
6186ac0245 | ||
|
|
364c33060b | ||
|
|
3922f76ab5 | ||
|
|
bb2c9196f5 | ||
|
|
1c8d3e0dca | ||
|
|
6b556a5206 | ||
|
|
bbd308a908 | ||
|
|
b5b8f7c35a | ||
|
|
de592267fe | ||
|
|
5bb89328d0 | ||
|
|
75fbb3d551 | ||
|
|
eb0fb2fef7 | ||
|
|
b1b92e95ab | ||
|
|
3a68b7ac0d | ||
|
|
3976018980 | ||
|
|
1dac708323 | ||
|
|
d4187242b9 | ||
|
|
61c0d81667 | ||
|
|
c3e4b6da46 | ||
|
|
38c7cf474d | ||
|
|
ec4cbe5380 | ||
|
|
465ca97531 | ||
|
|
2f7a2d5134 | ||
|
|
c1b5af21f0 | ||
|
|
cfb788941c | ||
|
|
69435dd951 | ||
|
|
3b09a39576 | ||
|
|
53f81ce9c7 | ||
|
|
e064380a7d | ||
|
|
9375e255e1 | ||
|
|
a56fc57a83 | ||
|
|
4f75dc06b9 | ||
|
|
d3b7a5146c | ||
|
|
bc487f43f7 | ||
|
|
088ac71930 | ||
|
|
27cad422b9 | ||
|
|
5a63271f0e | ||
|
|
9a35684507 | ||
|
|
0d2714a1d9 | ||
|
|
553e4b28bf | ||
|
|
b579e45ed7 | ||
|
|
1662bcfae4 | ||
|
|
8652b7d358 | ||
|
|
1cf8aacc11 | ||
|
|
13ef4c1236 | ||
|
|
68dd25a4a5 | ||
|
|
bcb1c6c080 | ||
|
|
2372116acc | ||
|
|
508dd2b509 | ||
|
|
61b69eeed2 | ||
|
|
dc8652806e | ||
|
|
af6db7d895 | ||
|
|
64ec99be33 | ||
|
|
53e906d0f3 | ||
|
|
780a6a7b40 | ||
|
|
737fbf661a | ||
|
|
c0243a92d0 | ||
|
|
3a8fcd1b0b | ||
|
|
04d9693b51 | ||
|
|
0023716053 | ||
|
|
37b46df738 | ||
|
|
ba06198012 | ||
|
|
acf9caa4ae | ||
|
|
d69e345bc0 | ||
|
|
c5b25fa132 | ||
|
|
262ecda2bf | ||
|
|
f243539362 | ||
|
|
ec33891f6f | ||
|
|
f007188fa0 | ||
|
|
170fd813f0 | ||
|
|
4c59359cf7 | ||
|
|
ddf25b7869 | ||
|
|
4914f3b2c3 | ||
|
|
08faed7d86 | ||
|
|
989e0f28d6 | ||
|
|
54f41095e9 | ||
|
|
faaa72d398 | ||
|
|
97b36eb53c | ||
|
|
2503525016 | ||
|
|
e96fedfefe | ||
|
|
f279d8d6d1 | ||
|
|
4bfba20877 | ||
|
|
504bd93007 | ||
|
|
2f2fe72808 | ||
|
|
5babf47e70 | ||
|
|
78a588cacb | ||
|
|
205f8a6479 | ||
|
|
34c1e1a9ad | ||
|
|
0885884839 | ||
|
|
c471120a80 | ||
|
|
3202cc7021 | ||
|
|
fc34b3f144 | ||
|
|
fb974a4551 | ||
|
|
3d99fea575 | ||
|
|
feb04c64a8 | ||
|
|
d3dbf9e83f | ||
|
|
9b6d7a5275 | ||
|
|
754fd03750 | ||
|
|
adfa5d63bb | ||
|
|
81ff956a48 | ||
|
|
daefe27fec | ||
|
|
6106ff8b31 | ||
|
|
1e6c180690 | ||
|
|
d1a950d59f | ||
|
|
641fadc1fb | ||
|
|
5299061282 | ||
|
|
d0c029c83e | ||
|
|
5aced2e44b | ||
|
|
18ab42dc83 | ||
|
|
a748508bc9 | ||
|
|
8b453e6a3b | ||
|
|
3196ada481 | ||
|
|
7c4734c24d | ||
|
|
813f7b50c1 | ||
|
|
6532d2b650 | ||
|
|
e0baad417a | ||
|
|
f6759de1e9 | ||
|
|
7648171fe2 | ||
|
|
71c3264ea7 | ||
|
|
49455965c0 | ||
|
|
5f0467b084 | ||
|
|
6adcabda29 | ||
|
|
52b67b46fc | ||
|
|
a700e3b39e | ||
|
|
4fbbdf8732 | ||
|
|
9a91fef337 | ||
|
|
53cc067c17 | ||
|
|
d3183708e8 | ||
|
|
44771150b7 | ||
|
|
ac2b2d82d2 | ||
|
|
11c42eb8d4 | ||
|
|
dc0230c476 | ||
|
|
0a8c343e6e | ||
|
|
afdbef1a81 | ||
|
|
f659338e5e | ||
|
|
4a82d81efe | ||
|
|
6b4208be9b | ||
|
|
3d78c7f43a | ||
|
|
34df4509af | ||
|
|
6c3b2b938a | ||
|
|
59588b12c8 | ||
|
|
3eaa29e7c2 | ||
|
|
c3c2bb7ad8 | ||
|
|
0e64c74a78 | ||
|
|
d2dc57585c | ||
|
|
e0fe7989e9 | ||
|
|
709305df0e | ||
|
|
24445123fc | ||
|
|
450a64b58b | ||
|
|
b3a9c8d83f | ||
|
|
35c92723c7 | ||
|
|
719e7a9d56 | ||
|
|
eed9e56bf4 | ||
|
|
1d214ed26a | ||
|
|
2d9d92b7d7 | ||
|
|
240cb2d627 | ||
|
|
bd69466e94 | ||
|
|
e6a7597444 | ||
|
|
1852b370d7 | ||
|
|
12fa7c41f6 | ||
|
|
fc85ed8730 | ||
|
|
65f10ff840 | ||
|
|
6809d84a00 | ||
|
|
2752cd1390 | ||
|
|
10b56415e8 | ||
|
|
bd87c80943 | ||
|
|
f71e7ef1cc | ||
|
|
756ad17c2c | ||
|
|
29c1b20b41 | ||
|
|
aa5097e0d4 | ||
|
|
2ccfee2e45 | ||
|
|
bf1311b902 | ||
|
|
71efb3bc84 | ||
|
|
439bdde849 | ||
|
|
c7fed20f3c | ||
|
|
3dd6e5664c | ||
|
|
d4ee308ffd | ||
|
|
a272f3e3b9 | ||
|
|
f6027719d2 | ||
|
|
38402e78c0 | ||
|
|
eae1ac6558 | ||
|
|
0b019401bd | ||
|
|
73cda2324a | ||
|
|
3dba894369 | ||
|
|
659ee81e80 | ||
|
|
99c307a68e | ||
|
|
d28eea342a | ||
|
|
29078bc428 | ||
|
|
6bcb5ae66b | ||
|
|
cf1e68fb0e | ||
|
|
43288a6760 | ||
|
|
9ee7d04560 | ||
|
|
16bf215d8a | ||
|
|
99ed77da8c | ||
|
|
b9f733c401 | ||
|
|
18966d424c | ||
|
|
c725b886e1 | ||
|
|
9b7eaf5117 | ||
|
|
36a55660bf | ||
|
|
0946e5945f | ||
|
|
8ec1a5627d | ||
|
|
df718bcb0f | ||
|
|
8eefbcae45 | ||
|
|
8cf28730cb | ||
|
|
f894e2b9a2 | ||
|
|
e3cd31f057 | ||
|
|
05086cda3b | ||
|
|
7c2d6f8a23 | ||
|
|
7423abb136 | ||
|
|
310fa7127d | ||
|
|
3250c16cdc | ||
|
|
02f35383bd | ||
|
|
1d5fef4930 | ||
|
|
dddea008e9 | ||
|
|
dd8ec8f09e | ||
|
|
98dbbd84ac | ||
|
|
382a27cb2f | ||
|
|
eeda958f33 | ||
|
|
2f9cac8d18 | ||
|
|
9d432187aa | ||
|
|
b13165f95a | ||
|
|
110c20d25f | ||
|
|
4def7f143c | ||
|
|
908d524631 | ||
|
|
6c74274502 | ||
|
|
ee8cd82e9d | ||
|
|
820e692e57 | ||
|
|
5b95cfda40 | ||
|
|
b2c4fed39c | ||
|
|
96c6dc01eb | ||
|
|
f545532556 | ||
|
|
8ac9968096 | ||
|
|
a9ee9a69a4 | ||
|
|
46a50265a3 | ||
|
|
41e9e0b965 | ||
|
|
388d090b91 | ||
|
|
1a60fb3c96 | ||
|
|
baa2768a69 | ||
|
|
04fb86556a | ||
|
|
90cf47cdce | ||
|
|
bf96cbe980 | ||
|
|
66dc1cc15d | ||
|
|
a05e3f02b8 | ||
|
|
8ec01450f8 | ||
|
|
b2962e0522 | ||
|
|
8980fc5524 | ||
|
|
f54da22f6f | ||
|
|
cebc0ec4a1 | ||
|
|
812224f7f7 | ||
|
|
d78e2dad29 | ||
|
|
7e35679ec2 | ||
|
|
b39f457363 | ||
|
|
18b7955384 | ||
|
|
0e625e6928 | ||
|
|
65ae85061f | ||
|
|
e2c1547d95 | ||
|
|
2d5a427bd4 | ||
|
|
45bd0d1f25 | ||
|
|
f38084f0cf | ||
|
|
0d929a210f | ||
|
|
057f5beac6 | ||
|
|
26021e11f7 | ||
|
|
941ecc76a1 | ||
|
|
12806af6aa | ||
|
|
55886b0a50 | ||
|
|
577b5ef2bd | ||
|
|
780c38a5e5 | ||
|
|
6756bf7d4b | ||
|
|
9c0b2338cf | ||
|
|
a0ef1a672c | ||
|
|
1fd265d316 | ||
|
|
e3b23822fd | ||
|
|
ab3c8268f0 | ||
|
|
6f306121a6 | ||
|
|
8399516475 | ||
|
|
a60ea61291 | ||
|
|
64cff74861 | ||
|
|
e2c1e656b9 | ||
|
|
cdc1d0c02b | ||
|
|
151a0955cf | ||
|
|
40406bd3fe | ||
|
|
1cc3e6e510 | ||
|
|
064ab58f3c | ||
|
|
85c0a2e602 | ||
|
|
809e880bd1 | ||
|
|
7df093c94b | ||
|
|
f572e29a13 | ||
|
|
681a6ef73c | ||
|
|
bf37087a10 | ||
|
|
a18b46d8ad | ||
|
|
74bb90b414 | ||
|
|
8334767c16 | ||
|
|
0d126afb1f | ||
|
|
b7d80ab335 | ||
|
|
b0e376ae76 | ||
|
|
a3bcb6c15a | ||
|
|
88269636d3 | ||
|
|
4f5076346d | ||
|
|
89de913e95 | ||
|
|
0e73c4598e | ||
|
|
6b8aef9fdd | ||
|
|
1811dd67bf | ||
|
|
6d4379059c | ||
|
|
a0f3704b41 | ||
|
|
9274b3f14d | ||
|
|
0a3e540a10 | ||
|
|
4657afd899 | ||
|
|
2082f06443 | ||
|
|
b49f8623f6 | ||
|
|
69e4138223 | ||
|
|
5fec8666e3 | ||
|
|
8af4a94864 | ||
|
|
ab873129f8 | ||
|
|
6155207407 | ||
|
|
98a58daf57 | ||
|
|
0aaa40cd53 | ||
|
|
a6b44ea1bb | ||
|
|
ca0ca2e5a8 | ||
|
|
14a388b3fe | ||
|
|
82a8d96fba | ||
|
|
ad3ea966cb | ||
|
|
8d9dd1d19c | ||
|
|
337ee77a99 | ||
|
|
c09991ebdb | ||
|
|
5188293242 | ||
|
|
2805fe0a06 | ||
|
|
b4757b514d | ||
|
|
630edde10f | ||
|
|
e9e139c364 | ||
|
|
60c01ef9a9 | ||
|
|
5dbadccd7f | ||
|
|
49a968219f | ||
|
|
8b934abcf2 | ||
|
|
fa74d3e88c | ||
|
|
1123e25136 | ||
|
|
7c15001042 | ||
|
|
bf388e5428 | ||
|
|
661be41c5a | ||
|
|
8be4ac6869 | ||
|
|
81f9259063 | ||
|
|
a97424d46c | ||
|
|
b639f3c8ec | ||
|
|
13ca1a7f09 | ||
|
|
16098c38c8 | ||
|
|
c4b259e0f8 | ||
|
|
e04855a0da | ||
|
|
8199f97e7a | ||
|
|
2eef3ab645 | ||
|
|
d56ec56458 | ||
|
|
0293415db1 | ||
|
|
6e935d9d84 | ||
|
|
99ae561caa | ||
|
|
3f8421fc17 | ||
|
|
324b1039cf | ||
|
|
961d905433 | ||
|
|
3c79f3943f | ||
|
|
1e7b2c052a | ||
|
|
ff082b98cb | ||
|
|
3236931416 | ||
|
|
ed0c798252 | ||
|
|
5943b802d7 | ||
|
|
b875a86e1d | ||
|
|
0a35a62235 | ||
|
|
e98b07de03 | ||
|
|
de5217745c | ||
|
|
ec53adc2b7 | ||
|
|
b57ab74ee7 | ||
|
|
69368d972d | ||
|
|
a00f9e4211 | ||
|
|
3cb9cd7724 | ||
|
|
9632d0ab8a | ||
|
|
68b68e676b | ||
|
|
c7ced46707 | ||
|
|
ecc194cb62 | ||
|
|
a1b4ffcf52 | ||
|
|
ae809ad320 | ||
|
|
7d1c18a569 | ||
|
|
71f034c4ea | ||
|
|
b156b40f8f | ||
|
|
8d5a9dc722 | ||
|
|
06dc6909c4 | ||
|
|
c639b7d5f4 | ||
|
|
a38e144320 | ||
|
|
059c45f202 | ||
|
|
eccceea7fb | ||
|
|
ad340c3007 | ||
|
|
c214f45e14 | ||
|
|
c8620070b9 | ||
|
|
61a371b106 | ||
|
|
5210df6882 | ||
|
|
edb7991979 | ||
|
|
90d6069a16 | ||
|
|
880a4e3ca6 | ||
|
|
18e30c7e44 | ||
|
|
0113224cb6 | ||
|
|
d1bd936765 | ||
|
|
2c41eecdb1 | ||
|
|
1a9e38a1dd | ||
|
|
9f3f619774 | ||
|
|
795e234c6f | ||
|
|
23fdcbfeb8 | ||
|
|
ee3e36672c | ||
|
|
119b4e4529 | ||
|
|
cc6112cbc4 | ||
|
|
f16c9cd3c6 | ||
|
|
9e4c24baa3 | ||
|
|
801609fb78 | ||
|
|
4c8630d29f | ||
|
|
4e426af114 | ||
|
|
5b66fe47db | ||
|
|
7ae9b15b5c | ||
|
|
67323994fc | ||
|
|
fcc7a7452a | ||
|
|
1bb0caed6f | ||
|
|
23a445619b | ||
|
|
837d9ca688 | ||
|
|
9b121a6414 | ||
|
|
5f1aafb961 | ||
|
|
615ff08d1a | ||
|
|
3320d1e1c7 | ||
|
|
3deb177ab7 | ||
|
|
41dad58489 | ||
|
|
cb8a240f1a | ||
|
|
871ef2cdfe | ||
|
|
6c0bc43776 | ||
|
|
a16d18d83c | ||
|
|
e499c3c6e3 | ||
|
|
ddd261c943 | ||
|
|
a1f9ff0aaa | ||
|
|
d636ea9338 | ||
|
|
1747e68d1d | ||
|
|
c4c710d39d | ||
|
|
9a5dbda063 | ||
|
|
bd9c876e36 | ||
|
|
903d847058 | ||
|
|
789e42e26f | ||
|
|
85e11ca341 | ||
|
|
0da81d22d3 | ||
|
|
52b993095d | ||
|
|
363e0a40e5 | ||
|
|
7ea0a6d642 | ||
|
|
035d410a89 | ||
|
|
b0b42071f2 | ||
|
|
5c24009eb5 | ||
|
|
00340f33c3 | ||
|
|
01c285fc4a | ||
|
|
87797e117e | ||
|
|
a5cc9a5517 | ||
|
|
806acf8cd0 | ||
|
|
04f6302ecc | ||
|
|
1df977fae2 | ||
|
|
9105c2cf4a | ||
|
|
6d43fcf8fb | ||
|
|
fafae1cbb5 | ||
|
|
419e673d5b | ||
|
|
48f47de95c | ||
|
|
44a1df4353 | ||
|
|
13b3c78c7f | ||
|
|
e362c2c078 | ||
|
|
814adbb8c4 | ||
|
|
cf86b6c107 | ||
|
|
12a83e5a1c | ||
|
|
0f769eec81 | ||
|
|
0737c788fc | ||
|
|
3fe9aea5b5 | ||
|
|
ab6ba848b8 | ||
|
|
0a38800e44 | ||
|
|
6be5618d22 | ||
|
|
95d9462a71 | ||
|
|
e05cd9f47b | ||
|
|
aa09302ca0 | ||
|
|
6d6b9fd269 | ||
|
|
6d265452cf | ||
|
|
65d20f2d08 | ||
|
|
a229e30b08 | ||
|
|
d246a37b11 | ||
|
|
e839595053 | ||
|
|
a711eb31f4 | ||
|
|
b117a6d4cd | ||
|
|
36b1004e26 | ||
|
|
c75c47fdd2 | ||
|
|
0f626c8d30 | ||
|
|
021783dcc1 | ||
|
|
1f339862db | ||
|
|
4446d9ce4b | ||
|
|
92b08a4faf | ||
|
|
d311b4bd53 | ||
|
|
a6dfc3be2f | ||
|
|
750e7b73e3 | ||
|
|
6a36967e6f | ||
|
|
d6d7ade6e3 | ||
|
|
151d98df51 | ||
|
|
fa744e53d3 | ||
|
|
e0df2c584f | ||
|
|
3c88477270 | ||
|
|
df46e5137c | ||
|
|
ffe8133865 | ||
|
|
7140e82189 | ||
|
|
cb743da215 | ||
|
|
4d24ba1f35 | ||
|
|
87411da95f | ||
|
|
d25d1ecb3a | ||
|
|
2a00a88e2a | ||
|
|
b01220d2c5 | ||
|
|
58dd2bff41 | ||
|
|
f34773ed73 | ||
|
|
9b5cc7cda7 | ||
|
|
77db8f04b9 | ||
|
|
9319bc579c | ||
|
|
73784b9e12 | ||
|
|
533f960854 | ||
|
|
765208a181 | ||
|
|
4417701ea7 | ||
|
|
f66eaf8f44 | ||
|
|
0dd9c386ee | ||
|
|
af8c871411 | ||
|
|
50e1e6596e | ||
|
|
d8897c585d | ||
|
|
7d32dc312f | ||
|
|
eff1e4bd7e | ||
|
|
ac50b46608 | ||
|
|
a0e2a3db1d | ||
|
|
0cc981ec18 | ||
|
|
8170b91f76 | ||
|
|
d1a7bb0136 | ||
|
|
56caa10e56 | ||
|
|
926496b59d | ||
|
|
102d30db2d | ||
|
|
5281a85b67 | ||
|
|
de28c812e8 | ||
|
|
eea73deab3 | ||
|
|
67c02e3522 | ||
|
|
19dd2a693b | ||
|
|
3df133652a | ||
|
|
80d2034083 | ||
|
|
db9389d24c | ||
|
|
c996be321c | ||
|
|
6ff6a4989a | ||
|
|
2655255d4d | ||
|
|
8485afa3a5 | ||
|
|
2759091ede | ||
|
|
ae02b71a85 | ||
|
|
4445569bb0 | ||
|
|
a604394b20 | ||
|
|
dd8a337b14 | ||
|
|
0572d44996 | ||
|
|
38aa116c59 | ||
|
|
61666bae69 | ||
|
|
362a26a404 | ||
|
|
81fa3da101 | ||
|
|
bd1fb86492 | ||
|
|
238298f695 | ||
|
|
194f7375da | ||
|
|
3581c5b078 | ||
|
|
c5572acd38 | ||
|
|
acc2fea7e3 | ||
|
|
3dc7b64fa1 | ||
|
|
79f2c21dfb | ||
|
|
df36c44bc2 | ||
|
|
c4db65cc08 | ||
|
|
c86ddb3b7d | ||
|
|
a1aebdc5d6 | ||
|
|
b49a1f27eb | ||
|
|
e7fd84e031 | ||
|
|
9d9e18f614 | ||
|
|
c8199de188 | ||
|
|
fc331da883 | ||
|
|
b6d3fa8c66 | ||
|
|
3cebea1801 | ||
|
|
2e9ee81dcd | ||
|
|
cf4da5c4d1 | ||
|
|
9d1ec0b319 | ||
|
|
9c5108c1ca | ||
|
|
2807be7080 | ||
|
|
ec7b18dab5 | ||
|
|
b9e20dc5c9 | ||
|
|
cfdc852f03 | ||
|
|
92514e33bb | ||
|
|
572a2a06d1 | ||
|
|
f076fcd539 | ||
|
|
4ac59875af | ||
|
|
780ca38f2f | ||
|
|
97ea5e9dba | ||
|
|
9e83bc6544 | ||
|
|
37aefe5811 | ||
|
|
d686b48f65 | ||
|
|
f319362e35 | ||
|
|
0d9b1654ec | ||
|
|
940e726754 | ||
|
|
f43824762a | ||
|
|
cd53bb7eff | ||
|
|
60fc90bb8e | ||
|
|
a9437d69ab | ||
|
|
5d91caebe9 | ||
|
|
eb4131e1c7 | ||
|
|
07f0ba213e | ||
|
|
48382564d1 | ||
|
|
274386a078 | ||
|
|
557d015662 | ||
|
|
5985f0eefa | ||
|
|
82258915da | ||
|
|
11a1f090d3 | ||
|
|
a0d48c588a | ||
|
|
5e2424da58 | ||
|
|
72a6696f5c | ||
|
|
9087116ee5 | ||
|
|
89e0dcba5e | ||
|
|
7698064f5a | ||
|
|
ab31e96385 | ||
|
|
a9dcad629b | ||
|
|
e49679484a | ||
|
|
290226539f | ||
|
|
75efc79930 | ||
|
|
905496e926 | ||
|
|
64579eef7e | ||
|
|
e0a648240f | ||
|
|
7bad8f3348 | ||
|
|
11a197a387 | ||
|
|
ee1384341e | ||
|
|
fb01ed55e5 | ||
|
|
5a0a5d9ff1 | ||
|
|
58e3232710 | ||
|
|
2cd7238e76 | ||
|
|
21f0043b27 | ||
|
|
b7599c0f30 | ||
|
|
d8494ef1ae | ||
|
|
727b32e886 | ||
|
|
8124efa505 | ||
|
|
a5cff4d797 | ||
|
|
d1e5828644 | ||
|
|
18d73d6d76 | ||
|
|
4a3a24dcc1 | ||
|
|
591159c4a9 | ||
|
|
7baf959975 | ||
|
|
3f02935844 | ||
|
|
f98251a05a | ||
|
|
80f0741103 | ||
|
|
e28707055b | ||
|
|
698c3415ea | ||
|
|
daf43989fc | ||
|
|
c7586de280 | ||
|
|
506b9deec5 | ||
|
|
1fc0191311 | ||
|
|
1f9e04f72d | ||
|
|
a71bdc761e | ||
|
|
9d8f4d5cfa | ||
|
|
ee87fdc869 | ||
|
|
bf63a18c5f | ||
|
|
ddba30988b | ||
|
|
b0e2c959eb | ||
|
|
28bec8e1bf | ||
|
|
86702186f2 | ||
|
|
82b1a2bd7a | ||
|
|
d36cf71a2d | ||
|
|
1dd1062be1 | ||
|
|
c0e3b86064 | ||
|
|
6210a8491f | ||
|
|
33a4f05ffa | ||
|
|
a74d3005f8 | ||
|
|
bca833dad7 | ||
|
|
f981e05908 | ||
|
|
b5abd777b0 | ||
|
|
b2c9add47e | ||
|
|
a401a192b8 | ||
|
|
ad1b007dd1 | ||
|
|
71e35c8b4d | ||
|
|
2e504b2dac | ||
|
|
6e9df9e452 | ||
|
|
8aa5899196 | ||
|
|
b6608ad31d | ||
|
|
edb39039dd | ||
|
|
bacf518189 | ||
|
|
1244044647 | ||
|
|
b960ce1426 | ||
|
|
c55a889c23 | ||
|
|
829af30568 | ||
|
|
a3007e11ca | ||
|
|
9a981b5292 | ||
|
|
4464a6c3f6 | ||
|
|
d30ac20fad | ||
|
|
7bb2d94e53 | ||
|
|
7ff4509858 | ||
|
|
f2997e4c00 | ||
|
|
133e9d4705 | ||
|
|
501ca4bcf5 | ||
|
|
9212942724 | ||
|
|
683c1a6512 | ||
|
|
9b0d33048c | ||
|
|
bc8bf2c329 | ||
|
|
f0002501f7 | ||
|
|
c4cc0154be | ||
|
|
cba4c3cdc4 | ||
|
|
c51d3b5465 | ||
|
|
e179adc4a0 | ||
|
|
47f3740a70 | ||
|
|
2880370047 | ||
|
|
61a055a1c6 | ||
|
|
64b4cfa59f | ||
|
|
c799ffd223 | ||
|
|
2ec039365f | ||
|
|
26e731b487 | ||
|
|
34bae90820 | ||
|
|
b55a052a22 | ||
|
|
011aabe9ed | ||
|
|
a17a6527f6 | ||
|
|
122c6256ca | ||
|
|
73aaff1b29 | ||
|
|
c7fbc16357 | ||
|
|
bc728db15b | ||
|
|
2eebbd307d | ||
|
|
dc851a729e | ||
|
|
6007fd630f | ||
|
|
cb0ecb2afb | ||
|
|
84a785ea67 | ||
|
|
cc1e4d2194 | ||
|
|
b2d84dcebd | ||
|
|
958d77ba52 | ||
|
|
c4b38869ab | ||
|
|
fd1968dd22 | ||
|
|
88b80ebdf5 | ||
|
|
2445ab8d8e | ||
|
|
0e1931f178 | ||
|
|
3e923b4993 | ||
|
|
8181498d86 | ||
|
|
57dd611111 | ||
|
|
b3162bd41c | ||
|
|
cd2adbad9a | ||
|
|
99730ac4f9 | ||
|
|
d2ab3383ad | ||
|
|
3b15a6b39e | ||
|
|
651e58f443 | ||
|
|
769f9e33e9 | ||
|
|
cf77bb7cfc | ||
|
|
c75b76ddf5 | ||
|
|
4dec8d7925 | ||
|
|
934e7b614c | ||
|
|
416b14de72 | ||
|
|
b87099c790 | ||
|
|
052725fdc7 | ||
|
|
f90b79791f | ||
|
|
4c32c95b33 | ||
|
|
c00d47cc99 | ||
|
|
ea53c7dc85 | ||
|
|
2b923c681e | ||
|
|
7a8e918519 | ||
|
|
d99ae3809d | ||
|
|
51e6d0a336 | ||
|
|
228844c017 | ||
|
|
87e628a9e9 | ||
|
|
e6885e25b5 | ||
|
|
f31ffc4596 | ||
|
|
4114f00c05 | ||
|
|
8f7209f886 | ||
|
|
d80146c704 | ||
|
|
577f379a12 | ||
|
|
3d73915358 | ||
|
|
a5317d50a5 | ||
|
|
143bd6cc80 | ||
|
|
5cc8f970c0 | ||
|
|
c9058280e0 | ||
|
|
5af50cfd55 | ||
|
|
d846142f0c | ||
|
|
0ba0f9d2b9 | ||
|
|
f4f9c1865e | ||
|
|
c40439ae6b | ||
|
|
683fa2a392 | ||
|
|
246bf1df64 | ||
|
|
9a868e9239 | ||
|
|
ab3cde1939 | ||
|
|
bec3e156fb | ||
|
|
086afbbaa5 | ||
|
|
cd4d73114c | ||
|
|
14ca506774 | ||
|
|
984bf67d84 | ||
|
|
2b3ae8b638 | ||
|
|
bb9ae18c71 | ||
|
|
ce01457510 | ||
|
|
d1a46b491e | ||
|
|
31df99f7d6 | ||
|
|
5e11b2b056 | ||
|
|
d106934336 | ||
|
|
68718361a7 | ||
|
|
c887865d54 | ||
|
|
dc48944979 | ||
|
|
d22b8b1d3a | ||
|
|
56619b20cf | ||
|
|
12ebf77e22 | ||
|
|
845af8bd96 | ||
|
|
680f08c2b8 | ||
|
|
82bac4173e | ||
|
|
8a8fda3e02 | ||
|
|
1c5b685398 | ||
|
|
e95084f138 | ||
|
|
e12d268662 | ||
|
|
6a3f17cd36 | ||
|
|
db0774a81b | ||
|
|
34615d3a74 | ||
|
|
189499c10b | ||
|
|
de613a8a98 | ||
|
|
c0369b2e10 | ||
|
|
07ebbb6c84 | ||
|
|
73ed657e00 | ||
|
|
b37217b181 | ||
|
|
b02e6e222f | ||
|
|
c52abed4d3 | ||
|
|
9e57efe82c | ||
|
|
77ab872bec | ||
|
|
27acebc5f5 | ||
|
|
2755d9941c | ||
|
|
488982f424 | ||
|
|
086e12c6ca | ||
|
|
9b19f16698 | ||
|
|
b13fd68848 | ||
|
|
3e51426379 | ||
|
|
105781fa76 | ||
|
|
d2be12bb07 | ||
|
|
fdc15e12c4 | ||
|
|
e548743cbf | ||
|
|
7499f875a6 | ||
|
|
cdef752a9c | ||
|
|
1483941bea | ||
|
|
9cc15be7f2 | ||
|
|
453e1bfaec | ||
|
|
82439327fa | ||
|
|
f60002e87d | ||
|
|
9fc6382909 | ||
|
|
ebad08aa97 | ||
|
|
599f1dd157 | ||
|
|
bb5ce67d57 | ||
|
|
f948ce399e | ||
|
|
954c60947d | ||
|
|
98b6783c05 | ||
|
|
0894d2886a | ||
|
|
4995b4abe3 | ||
|
|
35ef19cfc8 | ||
|
|
09824a718f | ||
|
|
f4e85af53c | ||
|
|
74a909cfbc | ||
|
|
0bfdfd8433 | ||
|
|
1f5cf776b2 | ||
|
|
cdd6840826 | ||
|
|
ab27ee4cf4 | ||
|
|
6211295155 | ||
|
|
befd7ceb89 | ||
|
|
2cead6f328 | ||
|
|
4e3d58f75a | ||
|
|
24fddf1ded | ||
|
|
87cd65ff03 | ||
|
|
219e3d61f8 | ||
|
|
4ade06f36f | ||
|
|
786510a937 | ||
|
|
0c6df39a45 | ||
|
|
648ad0cd90 | ||
|
|
cd0d43382f | ||
|
|
98b730c806 | ||
|
|
4b787b22c8 | ||
|
|
5c6f5a1610 | ||
|
|
0b8d5f7b98 | ||
|
|
314d481dcd | ||
|
|
0980c68e6f | ||
|
|
983bfa2088 | ||
|
|
3a9928de65 | ||
|
|
1fd5fb2f7e | ||
|
|
4ac88fa8d3 | ||
|
|
5f8f9e33f1 | ||
|
|
f0c71ae2ae | ||
|
|
0c7ecdc954 | ||
|
|
73a687df7d | ||
|
|
b683110e72 | ||
|
|
3840015e7d | ||
|
|
639b8112b6 | ||
|
|
2bf17f5d3c | ||
|
|
4823d4c32a | ||
|
|
c8c035eeef | ||
|
|
155bd09fd0 | ||
|
|
f546e5a8ef | ||
|
|
2ccb0c8f42 | ||
|
|
05303ce6c6 | ||
|
|
d8f3029952 | ||
|
|
09c28f75b3 | ||
|
|
57671e267d | ||
|
|
b692108f1e | ||
|
|
2815aecd0c | ||
|
|
b9f2b1e7c6 | ||
|
|
bd9ba7ef1f | ||
|
|
a015bd1ebd | ||
|
|
d6cf167d52 | ||
|
|
3fc2194fd5 | ||
|
|
72c14994f0 | ||
|
|
fddb6a31a7 | ||
|
|
278ae7763a | ||
|
|
5cafaef0a9 | ||
|
|
fcd297ffb2 | ||
|
|
969b9eb89d | ||
|
|
4fb5bd76fb | ||
|
|
8043bb9087 | ||
|
|
69912ba3c7 | ||
|
|
19034d9dff | ||
|
|
cf0fcf5a2a | ||
|
|
149c593d89 | ||
|
|
ab5a33fc31 | ||
|
|
f5a55b3024 | ||
|
|
7422ab9e55 | ||
|
|
f66256cc13 | ||
|
|
9cf7a63c77 | ||
|
|
7842812e24 | ||
|
|
ec59d7d26b | ||
|
|
ea23525f66 | ||
|
|
87762a9b17 | ||
|
|
bc3a899acf | ||
|
|
5e01ffdfd8 | ||
|
|
794cbd8708 | ||
|
|
661b485b58 | ||
|
|
64399d45c1 | ||
|
|
653a9e6e7f | ||
|
|
71e07dc6c7 | ||
|
|
69ceebeb05 | ||
|
|
ccb2724fc4 | ||
|
|
ec6d6adebc | ||
|
|
3899248305 | ||
|
|
4557992334 | ||
|
|
d0e9108800 | ||
|
|
dc80d000aa | ||
|
|
775caabeeb | ||
|
|
e8b6e95f8e | ||
|
|
d2614d01fd | ||
|
|
4262794668 | ||
|
|
a6237e5473 | ||
|
|
0b14d785ca | ||
|
|
6bdf415adb | ||
|
|
ebabdd37b4 | ||
|
|
11c5230628 | ||
|
|
bfe029bb0c | ||
|
|
cbf12bb54b | ||
|
|
b01d8e01e3 | ||
|
|
985b222123 | ||
|
|
b4b8929ab1 | ||
|
|
48a217648c | ||
|
|
12ae714c70 | ||
|
|
2c51887668 | ||
|
|
69e11136e8 | ||
|
|
c2190f71ca | ||
|
|
5378fee1c3 | ||
|
|
cefc37a553 | ||
|
|
264253757c | ||
|
|
2512e958fa | ||
|
|
cb2c0733e2 | ||
|
|
280aa6da91 | ||
|
|
9554adda28 | ||
|
|
f3fa7119ac | ||
|
|
0d022d420b | ||
|
|
ec530a2c91 | ||
|
|
ebeeafc94f | ||
|
|
17e28ae85d | ||
|
|
da6434a65a | ||
|
|
a2623b1a9a | ||
|
|
1738b38536 | ||
|
|
7235647e67 | ||
|
|
2a1e3b2b77 | ||
|
|
61823a5d62 | ||
|
|
ba96c6f3bb | ||
|
|
fd8931c87e | ||
|
|
7530b3c971 | ||
|
|
64616f1408 | ||
|
|
004d9b09b8 | ||
|
|
8d46840e09 | ||
|
|
753a12f436 | ||
|
|
8e667e69f6 | ||
|
|
4d09be25aa | ||
|
|
0f499e36fb | ||
|
|
f5beaabded | ||
|
|
248809ca1f | ||
|
|
f9bc7458d4 | ||
|
|
c4459dff40 | ||
|
|
16381929ba | ||
|
|
f1b03b36f7 | ||
|
|
e9ba6fd034 | ||
|
|
bb03e17e2d | ||
|
|
09875a5180 | ||
|
|
4912202cfa | ||
|
|
f57da6655c | ||
|
|
ac34714837 | ||
|
|
b4ce31cae3 | ||
|
|
5dffbca636 | ||
|
|
fec9fcda7d | ||
|
|
306776626a | ||
|
|
15be6827ea | ||
|
|
8c0a786918 | ||
|
|
8aa67114a9 | ||
|
|
1bbb26334a | ||
|
|
1227b0a633 | ||
|
|
6c315e8aee | ||
|
|
88faac7bbc | ||
|
|
9bb7e8d614 | ||
|
|
286f97fad0 | ||
|
|
f0a02e0d9d | ||
|
|
8185bfe893 | ||
|
|
d577cebd89 | ||
|
|
0e5514003a | ||
|
|
167161d8ce | ||
|
|
b8b0ecabd8 | ||
|
|
bb05de2e80 | ||
|
|
7890e87234 | ||
|
|
25c05867d6 | ||
|
|
a421270c19 | ||
|
|
764fb57fdc | ||
|
|
3fd846687e | ||
|
|
ff9c939720 | ||
|
|
234db2be3f | ||
|
|
fc44d53bb0 | ||
|
|
555a4b5f5c | ||
|
|
a6e6df1445 | ||
|
|
2010d697c8 | ||
|
|
26045a9be5 | ||
|
|
06e5b8a06a | ||
|
|
94aef197dd | ||
|
|
a86e7eeba0 | ||
|
|
95a3ce68ce | ||
|
|
9ab1e69697 | ||
|
|
4f03cf7e1e | ||
|
|
60d80fd5fc | ||
|
|
350d3ad386 | ||
|
|
d6065e8814 | ||
|
|
363808a57b | ||
|
|
3402835c8e | ||
|
|
911d37e4d7 | ||
|
|
72e1e242a3 | ||
|
|
c42ff338e7 | ||
|
|
4f81fcd5cc | ||
|
|
d47f1ef406 | ||
|
|
422246825b | ||
|
|
b0ccd2a8a0 | ||
|
|
76c72351a5 | ||
|
|
03df3c5293 | ||
|
|
dd31574b4f | ||
|
|
eb52ac55a7 | ||
|
|
d167582f6b | ||
|
|
dd6cb054a7 | ||
|
|
b97557ce7b | ||
|
|
964fd1095e | ||
|
|
fcc6c2384b | ||
|
|
a5d73f41b5 | ||
|
|
1b305bf789 | ||
|
|
943752db30 | ||
|
|
60a2a39e88 | ||
|
|
532563e861 | ||
|
|
3ee27bd434 | ||
|
|
55e68441cb | ||
|
|
7ec481d99b | ||
|
|
129e947720 | ||
|
|
e964060a6a | ||
|
|
74696d2e44 | ||
|
|
78746fdb6f | ||
|
|
ed2068fb03 | ||
|
|
b61c4d3693 | ||
|
|
81b9952e34 | ||
|
|
64958264c5 | ||
|
|
bda52a51a7 | ||
|
|
bab4136411 | ||
|
|
e4fe335e75 | ||
|
|
0a7ac4d42a | ||
|
|
95233b5299 | ||
|
|
8b6f68abcf | ||
|
|
e9dfb3cb63 | ||
|
|
5b0badc215 | ||
|
|
6f4398889e | ||
|
|
dd4722fc1f | ||
|
|
eec27f0e89 | ||
|
|
baf51a2e2f | ||
|
|
256eb17ae5 | ||
|
|
610d29dab0 | ||
|
|
5ad4b6249e | ||
|
|
aaef4a2d5b | ||
|
|
557bd3f438 | ||
|
|
27b28cf6ec | ||
|
|
cc150cc2c6 | ||
|
|
345bda69ec | ||
|
|
478b6b53a9 | ||
|
|
a9a1204ab9 | ||
|
|
e7ced1aeab | ||
|
|
56f95934f5 | ||
|
|
88ee62be26 | ||
|
|
961d41d0bd | ||
|
|
9c824aa0b5 | ||
|
|
efff2a78c8 | ||
|
|
608f823516 | ||
|
|
e68ffdbc81 | ||
|
|
3dc9a8b980 | ||
|
|
bec0b6e8c3 | ||
|
|
8c01612851 | ||
|
|
b0e5db0eb0 | ||
|
|
7c8fbc35bc | ||
|
|
b637429e44 | ||
|
|
d52bb78d2c | ||
|
|
1be36fe6a9 | ||
|
|
1088375b38 | ||
|
|
285322982f | ||
|
|
4e6be9172a | ||
|
|
0e1333ed5f | ||
|
|
cd74fb6a6d | ||
|
|
ec2d529832 | ||
|
|
257556bbf5 | ||
|
|
93d93b4805 | ||
|
|
e368453751 | ||
|
|
d0dc095c84 | ||
|
|
360fdca5ac | ||
|
|
e1b95913ea | ||
|
|
a3ea9e2985 | ||
|
|
e9bf3e13d0 | ||
|
|
9e02471ded | ||
|
|
094fda0e73 | ||
|
|
d2de560060 | ||
|
|
5315eb546f | ||
|
|
7fa521a046 | ||
|
|
0244c4046e | ||
|
|
7e8c93bea2 | ||
|
|
8cd7a44a25 | ||
|
|
9a1e6cc3e8 | ||
|
|
34220ec447 | ||
|
|
f0135a02f5 | ||
|
|
0b7e013fbe | ||
|
|
850eef0c1a | ||
|
|
5a581f46df | ||
|
|
b334621d76 | ||
|
|
a768855a7a | ||
|
|
7ddeb0d00f | ||
|
|
2ba437b6dc | ||
|
|
f2920bc30d | ||
|
|
d043f46270 | ||
|
|
1e1b111678 | ||
|
|
1f5ce4f619 | ||
|
|
524da5dc54 | ||
|
|
a2a6303a22 | ||
|
|
6805d8c7e0 | ||
|
|
5ae9de4e3b | ||
|
|
2f9b930c6b | ||
|
|
e243ef5907 | ||
|
|
7b162c7513 | ||
|
|
5b8f105308 | ||
|
|
1df47352cc | ||
|
|
e4225cbab8 | ||
|
|
83ca7654b1 | ||
|
|
8065dbc2e7 | ||
|
|
d03fcad9bd | ||
|
|
e494fc04e5 | ||
|
|
d77c9139ad | ||
|
|
4479d99a9a | ||
|
|
072c289f5e | ||
|
|
a538f655be | ||
|
|
b888a6ba37 | ||
|
|
de988f6a76 | ||
|
|
2b325de680 | ||
|
|
d83fac4247 | ||
|
|
0a5ea859ea | ||
|
|
9a93b150f0 | ||
|
|
5476b9098e | ||
|
|
e5a75cfd1c | ||
|
|
1f745c4588 | ||
|
|
6c7f49d563 | ||
|
|
dae51a4a2b | ||
|
|
d113324a90 | ||
|
|
1cab99b3ca | ||
|
|
f7d08d3371 | ||
|
|
02d22dca95 | ||
|
|
7764cb2b80 | ||
|
|
be5f8413ca | ||
|
|
ce48d880d9 | ||
|
|
8d950620b7 | ||
|
|
10b33d0f79 | ||
|
|
2706486559 | ||
|
|
d1e468fefb | ||
|
|
0ac90ac395 | ||
|
|
fef779feca | ||
|
|
ced890301c | ||
|
|
7d73d90c1a | ||
|
|
4e40260f1f | ||
|
|
3aebb8cb41 | ||
|
|
fcbeb2fa22 | ||
|
|
7a3cbf1876 | ||
|
|
3dda72e47f | ||
|
|
1458349cb3 | ||
|
|
a2bfd5fcfc | ||
|
|
6501374a34 | ||
|
|
63669000ab | ||
|
|
f9a62667cf | ||
|
|
6cc1466baa | ||
|
|
bcd77ac65e | ||
|
|
0786a0a088 | ||
|
|
c14e79f8df | ||
|
|
8cc6a30557 | ||
|
|
5c1f79ab26 | ||
|
|
799c4837d3 | ||
|
|
5eeb79ffa1 | ||
|
|
159f9494a9 | ||
|
|
8316469cfc | ||
|
|
7a434d19a6 | ||
|
|
95ac7724a6 | ||
|
|
e236ba4daf | ||
|
|
5746df4046 | ||
|
|
e9570d1a00 | ||
|
|
e0d3a3b0ed | ||
|
|
3183d73e4d | ||
|
|
c8700dd246 | ||
|
|
08ebc59db0 | ||
|
|
7329fa9cf5 | ||
|
|
27becdec97 | ||
|
|
8d662e9327 | ||
|
|
ff7636ea01 | ||
|
|
8f14f392fd | ||
|
|
a1abc79f28 | ||
|
|
5fad7e1b87 | ||
|
|
3d0f751211 | ||
|
|
8864f944e2 | ||
|
|
918984ee64 | ||
|
|
b29f106c51 | ||
|
|
71f8280c5e | ||
|
|
0ff293707a | ||
|
|
9adab801ac | ||
|
|
43e7776f4d | ||
|
|
aee91b4f6f | ||
|
|
ffd36ea662 | ||
|
|
abf80cc112 | ||
|
|
43d26fa6b6 | ||
|
|
d02a8ba2b9 | ||
|
|
9acc606e4d | ||
|
|
e52386ccfb | ||
|
|
1d40c06c19 | ||
|
|
c175cdf3d8 | ||
|
|
7924784215 | ||
|
|
06cbc96722 | ||
|
|
dcda332a93 | ||
|
|
eac4e991bd | ||
|
|
9284344480 | ||
|
|
2c03467eec | ||
|
|
b67cda7cbb | ||
|
|
f04655c814 | ||
|
|
cd6aa0774f | ||
|
|
6d3052c5dd | ||
|
|
fb27ed4deb | ||
|
|
572a335c38 | ||
|
|
f21b298e5e | ||
|
|
b7c1750485 | ||
|
|
bfd10d7b06 | ||
|
|
ed801de016 | ||
|
|
9df6e97c88 | ||
|
|
e7c5f48d15 | ||
|
|
7ef112cf30 | ||
|
|
f6de42a2ae | ||
|
|
8acb62f6ee | ||
|
|
1d6fbf1c35 | ||
|
|
f92b487947 | ||
|
|
6a67155404 | ||
|
|
f42e647430 | ||
|
|
7c65c1e3aa | ||
|
|
9f51003366 | ||
|
|
512eb93a62 | ||
|
|
9c919db9ae | ||
|
|
61ada2c1dc | ||
|
|
bd5bff321e | ||
|
|
ee3a302cf2 | ||
|
|
fb3752a8ef | ||
|
|
548b748f50 | ||
|
|
771009f333 | ||
|
|
db731d307e | ||
|
|
c6f3f386df | ||
|
|
8d781a737b | ||
|
|
e9af0bb72b | ||
|
|
d8bbec9594 | ||
|
|
f1a37da94c | ||
|
|
bca7b02ae9 | ||
|
|
e761b3235c | ||
|
|
219ddf3e11 | ||
|
|
afae58b231 | ||
|
|
b5db0d0397 | ||
|
|
563af4211a | ||
|
|
184bd51b87 | ||
|
|
895af3c3ab | ||
|
|
6783bcd273 | ||
|
|
1d51f3af0c | ||
|
|
26d8120168 | ||
|
|
21f744e218 | ||
|
|
841f815be3 | ||
|
|
3c231ee9b7 | ||
|
|
3d31e2f2a9 | ||
|
|
8516e9da70 | ||
|
|
d6b0263144 | ||
|
|
91768c025c | ||
|
|
57aee92bfe | ||
|
|
89de1a8cf6 | ||
|
|
ccd4724263 | ||
|
|
f6a06a5618 | ||
|
|
5684b5909f | ||
|
|
60cbd7a88c | ||
|
|
2db68acab9 | ||
|
|
b04bd5fa74 | ||
|
|
4d26535758 | ||
|
|
5407e42b76 | ||
|
|
8f02ea1d42 | ||
|
|
3ed5a935fb | ||
|
|
f24b0c2ffe | ||
|
|
127ad508b4 | ||
|
|
cbc067b490 | ||
|
|
4087b4e6b9 | ||
|
|
c35da0085f | ||
|
|
f8ea50caae | ||
|
|
20801615f3 | ||
|
|
9279736fe6 | ||
|
|
d84a0c6503 | ||
|
|
8fb2d04ce8 | ||
|
|
c06cb4664a | ||
|
|
039d19dacf | ||
|
|
4dfb47cdd9 | ||
|
|
499fe3e218 | ||
|
|
855b23b3fe | ||
|
|
72b2876b6a | ||
|
|
f4d0286109 | ||
|
|
544cec0434 | ||
|
|
bcc097718f | ||
|
|
0dc176b4f1 | ||
|
|
47401cba1f | ||
|
|
8a2826f3a9 | ||
|
|
81f8ece236 | ||
|
|
3c2cf79675 | ||
|
|
a841ba4084 | ||
|
|
3024026d9e | ||
|
|
fb03a3bf67 | ||
|
|
e53bbd668b | ||
|
|
fc05511354 | ||
|
|
ca35a75a7d | ||
|
|
15b7e4f05e | ||
|
|
49c84f099a | ||
|
|
43b267ea51 | ||
|
|
a8441b28e8 | ||
|
|
3002e592c3 | ||
|
|
4f12f8b04f | ||
|
|
36e3939ec2 | ||
|
|
c803bf1849 | ||
|
|
ee98f577e2 | ||
|
|
4a86638ce8 | ||
|
|
e037b5c438 | ||
|
|
f45343a345 | ||
|
|
94a7e52c1f | ||
|
|
2b42895bc7 | ||
|
|
d98d152d23 | ||
|
|
b645a7faf5 | ||
|
|
ffa841e7c1 | ||
|
|
98cee991ef | ||
|
|
0a617a05d0 | ||
|
|
e66d6a9399 | ||
|
|
ef65c47592 | ||
|
|
1592ecdc55 | ||
|
|
96742852eb | ||
|
|
de0e660d28 | ||
|
|
d057ffe80f | ||
|
|
9a2d4fe46b | ||
|
|
e650d11b30 | ||
|
|
a4d715e25d | ||
|
|
af0e1f609e | ||
|
|
1ab5b481ff | ||
|
|
26ee1246ae | ||
|
|
d0402332f7 | ||
|
|
43c7417906 | ||
|
|
56540a55ec | ||
|
|
35ec4de776 | ||
|
|
c5748983f6 | ||
|
|
791ee013ac | ||
|
|
5797673daa | ||
|
|
3972022fa2 | ||
|
|
39201e5042 | ||
|
|
ff34a73fbd | ||
|
|
539ac32806 | ||
|
|
7a86cffd0a | ||
|
|
bc7ed8eaab | ||
|
|
9c5ed01130 | ||
|
|
e58906cb4d | ||
|
|
7a1a4541c0 | ||
|
|
04df392866 | ||
|
|
f3a325fe1a | ||
|
|
ce7b1576e0 | ||
|
|
686d2759f4 | ||
|
|
78b8bd80e4 | ||
|
|
1943d9819f | ||
|
|
1670769119 | ||
|
|
59a0cf94ab | ||
|
|
3e4faf602a | ||
|
|
454a724f4e | ||
|
|
cfecbb24ca | ||
|
|
762b594927 | ||
|
|
8d3d290e33 | ||
|
|
0df903090d | ||
|
|
6812fa4764 | ||
|
|
cd97d74f0f | ||
|
|
00f6763228 | ||
|
|
aafd74f9ea | ||
|
|
f61ee85f80 | ||
|
|
e33b130606 | ||
|
|
15e74357cf | ||
|
|
0dbfe314a3 | ||
|
|
00a1864a95 | ||
|
|
6c096b72b5 | ||
|
|
a8e62e1bc1 | ||
|
|
42aa8f263a | ||
|
|
af95ff5f8b | ||
|
|
f0093375b8 | ||
|
|
7d26e61d82 | ||
|
|
e035000864 | ||
|
|
6db5d83615 | ||
|
|
86a04a867b | ||
|
|
f3823232e0 | ||
|
|
6b8b23c401 | ||
|
|
6fd2a9b677 | ||
|
|
da559b5568 | ||
|
|
24587ab459 | ||
|
|
c7e49b58a8 | ||
|
|
c5680c29bd | ||
|
|
1144121d08 | ||
|
|
fa6736e69d | ||
|
|
10e6b43a2f | ||
|
|
0809e7cf9f | ||
|
|
12fd43e1c6 | ||
|
|
397a795e75 | ||
|
|
1f9ade0ab6 | ||
|
|
83407c386c | ||
|
|
b791d90b35 | ||
|
|
574e934bf3 | ||
|
|
b57ea3a229 | ||
|
|
771f3c49e5 | ||
|
|
13e1305a76 | ||
|
|
9214df482e | ||
|
|
b1a9e87ecf | ||
|
|
0a34403ef8 | ||
|
|
e5bb0ba004 | ||
|
|
2147fe479c | ||
|
|
93e7988df7 | ||
|
|
7801e8368b | ||
|
|
91d7f28c67 | ||
|
|
8171c7766c | ||
|
|
3f69ceac40 | ||
|
|
4be9e0d396 | ||
|
|
6bd8a93ff4 | ||
|
|
e39797d860 | ||
|
|
254ddcad51 | ||
|
|
abd8bd6f36 | ||
|
|
fd6c33980b | ||
|
|
2d5d5746d1 | ||
|
|
314b63eebf | ||
|
|
f382d54e9a | ||
|
|
9581e4ff98 | ||
|
|
b7a57ac4b0 | ||
|
|
df5295ae85 | ||
|
|
c8ad8b18bb | ||
|
|
44cc254620 | ||
|
|
cef512a123 | ||
|
|
7895d43a98 | ||
|
|
4f4a80cc04 | ||
|
|
d6597038ee | ||
|
|
ec3e8de780 | ||
|
|
f667b52cca | ||
|
|
48b54131f6 | ||
|
|
d172b9add6 | ||
|
|
2d9f21a2ea | ||
|
|
247759b75b | ||
|
|
987166f4da | ||
|
|
90d368ae30 | ||
|
|
a2d33a7d76 | ||
|
|
51f9310b9f | ||
|
|
dca3d477c9 | ||
|
|
02cdf8ac63 | ||
|
|
6b370e85d5 | ||
|
|
05e80aad90 | ||
|
|
4ad255b8e0 | ||
|
|
09a60cdefa | ||
|
|
eacf5a3813 | ||
|
|
e951c619c5 | ||
|
|
6c5b8dc31c | ||
|
|
fd0e7a4efa | ||
|
|
a4c4548c3a | ||
|
|
8efc29972d | ||
|
|
7977fbb9c5 | ||
|
|
681bab558b | ||
|
|
107107107c | ||
|
|
3a804674c9 | ||
|
|
91673f8fdc | ||
|
|
86919ec0e1 | ||
|
|
0e320d17c1 | ||
|
|
d063f0b335 | ||
|
|
781b2b4548 | ||
|
|
bb65e6797f | ||
|
|
b0f0641564 | ||
|
|
16aae4eb77 | ||
|
|
3a1082fe0d | ||
|
|
dba2baba9c | ||
|
|
ffe00e8619 | ||
|
|
3fa45ff994 | ||
|
|
73ff506b88 | ||
|
|
3a1676e558 | ||
|
|
0db9850a73 | ||
|
|
11ee1f3eb2 | ||
|
|
14951d8713 | ||
|
|
065ee621b8 | ||
|
|
12c83b340d | ||
|
|
d2897bc6a0 | ||
|
|
5920372929 | ||
|
|
1fa82eec89 | ||
|
|
8c2fd50957 | ||
|
|
2f7d38bb81 | ||
|
|
4f8b5849b7 | ||
|
|
7f216f2581 | ||
|
|
6ffd38c393 | ||
|
|
801e7f3c2f | ||
|
|
c7140df5f8 | ||
|
|
6b5f0957ce | ||
|
|
f2ed50e6b0 | ||
|
|
511ca82e30 | ||
|
|
00274bb4da | ||
|
|
a4d94a83b9 | ||
|
|
0de9960772 | ||
|
|
aa7c9dd15d | ||
|
|
628354ba92 | ||
|
|
17b1a34ebf | ||
|
|
349f251d14 | ||
|
|
3942a464fe | ||
|
|
2331dc3256 | ||
|
|
8c3fb3998c | ||
|
|
327c577024 | ||
|
|
d572d90bb7 | ||
|
|
b42fae0989 | ||
|
|
d92008abe4 | ||
|
|
484a3e6824 | ||
|
|
08b02efc6c | ||
|
|
4728478247 | ||
|
|
4704367382 | ||
|
|
14cca55b50 | ||
|
|
248f9424ac | ||
|
|
b404d37eb0 | ||
|
|
14170afe8a | ||
|
|
58fdf58150 | ||
|
|
000ec71629 | ||
|
|
3e794e7fdb | ||
|
|
c38ca21a81 | ||
|
|
f923eaf09a | ||
|
|
5b980b99a0 | ||
|
|
22240777aa | ||
|
|
f95395b351 | ||
|
|
df24cff0b1 | ||
|
|
6dda047128 | ||
|
|
e9efa73eed | ||
|
|
1c0b3fc7e0 | ||
|
|
580bd2b25e | ||
|
|
d6aa834b5f | ||
|
|
f526027778 | ||
|
|
949e93bec7 | ||
|
|
cd016be86e | ||
|
|
84753db574 | ||
|
|
ef0bee9228 | ||
|
|
a60cee6536 | ||
|
|
108846055b | ||
|
|
b9179de288 | ||
|
|
0c4b2ff06b | ||
|
|
8c9090fd03 | ||
|
|
ef66b002e0 | ||
|
|
0d1c0e72a6 | ||
|
|
37f24d8c1c | ||
|
|
3571e6ef85 | ||
|
|
ed542b2cb4 | ||
|
|
b950651487 | ||
|
|
09700360f7 | ||
|
|
29a6db8960 | ||
|
|
6d737e61fd | ||
|
|
d874ca5d8c | ||
|
|
1adc408ad7 | ||
|
|
83026fd263 | ||
|
|
92824b6729 | ||
|
|
7563655221 | ||
|
|
6889b48973 | ||
|
|
9766d87126 | ||
|
|
bba528e2ae | ||
|
|
7c39c1de9b | ||
|
|
81c2fb508b | ||
|
|
350257e1a4 | ||
|
|
0e07d3c58f | ||
|
|
0d4543ca2a | ||
|
|
20cc2d7267 | ||
|
|
39a832d07f | ||
|
|
13136ec083 | ||
|
|
31a5a77ae5 | ||
|
|
1c014299eb | ||
|
|
7c47b0029c | ||
|
|
61d9852632 | ||
|
|
cb2748ae08 | ||
|
|
900d7df40f | ||
|
|
6837370a62 | ||
|
|
9cfdd8afea | ||
|
|
7b24df0957 | ||
|
|
122555fb66 | ||
|
|
d836033212 | ||
|
|
510041a873 | ||
|
|
8b4b6ba946 | ||
|
|
d36a715b24 | ||
|
|
599e00d6da | ||
|
|
3cd8891ab8 | ||
|
|
e3e6fb5489 | ||
|
|
a9303acfdf | ||
|
|
b4ec4f46b8 | ||
|
|
6ee9d0f35f | ||
|
|
a0040e6fb1 | ||
|
|
28d7af313b | ||
|
|
39ef39aa4e | ||
|
|
d9a1308624 | ||
|
|
56dd09f4fe | ||
|
|
de495952fd | ||
|
|
1ce5349199 | ||
|
|
dcd011048d | ||
|
|
12e3c9e08b | ||
|
|
262ff01619 | ||
|
|
76ccaf5e6f | ||
|
|
47e4a95d8f | ||
|
|
c0bafbc804 | ||
|
|
61c64d1060 | ||
|
|
3e1e1a683c | ||
|
|
18f59d3be8 | ||
|
|
bf739aa156 | ||
|
|
43b7d1fe98 | ||
|
|
cc21d1b3cf | ||
|
|
08333e0876 | ||
|
|
2f93df480b | ||
|
|
56fe450959 | ||
|
|
6f9adbd162 | ||
|
|
f48c535802 | ||
|
|
5f7e5a9844 | ||
|
|
3f3b4bc363 | ||
|
|
68466f05b6 | ||
|
|
e6b4655142 | ||
|
|
f690d55045 | ||
|
|
d523f9cc6b | ||
|
|
7ca15c60bb | ||
|
|
8abd3e8bb4 | ||
|
|
6730dc1dc4 | ||
|
|
6b40d69a8f | ||
|
|
d6420b8803 | ||
|
|
a4ad0a9468 | ||
|
|
a09fd80905 | ||
|
|
0617e9e14b | ||
|
|
cb4711203b | ||
|
|
e3e39e8de3 | ||
|
|
209b14fbac | ||
|
|
04c9d01390 | ||
|
|
c9d8e59dbf | ||
|
|
86b194014b | ||
|
|
e7c827f73b | ||
|
|
abe498f35c | ||
|
|
49c02854f5 | ||
|
|
cccfb89aa0 | ||
|
|
2981867375 | ||
|
|
56d922999f | ||
|
|
813c3298ad | ||
|
|
02832d9623 | ||
|
|
0ab36ef44d | ||
|
|
9bb46aa944 | ||
|
|
474baca6d8 | ||
|
|
88d0b7d135 | ||
|
|
aea1ec2594 | ||
|
|
22a7b026e7 | ||
|
|
c8d4a0dcdc | ||
|
|
f16949c292 | ||
|
|
f910a152f1 | ||
|
|
270c2e58a0 | ||
|
|
a586d1c529 | ||
|
|
09b047611b | ||
|
|
e5005597fe | ||
|
|
38bfefcdfa | ||
|
|
44fe6f6d39 | ||
|
|
4fe17fcecf | ||
|
|
276ee81da8 | ||
|
|
5e158bd3f2 | ||
|
|
2b924175aa | ||
|
|
37a722cc1d | ||
|
|
a84223bdc6 | ||
|
|
4df1a938b1 | ||
|
|
94a3b1cfe8 | ||
|
|
a21c6c4628 | ||
|
|
58f0fa3ca5 | ||
|
|
97bd8f7bc1 | ||
|
|
4c0ef37a5c | ||
|
|
1df8f52a9f | ||
|
|
f9434091c3 | ||
|
|
59f253ba24 | ||
|
|
c52d447381 | ||
|
|
524b065bc8 | ||
|
|
f7b55ec8d4 | ||
|
|
e7fc2bfa3b | ||
|
|
22e3075c64 | ||
|
|
09ead539a5 | ||
|
|
5272dd951b | ||
|
|
7eee9e7b05 | ||
|
|
e5eb727110 | ||
|
|
7352a5a495 | ||
|
|
3d859a7493 | ||
|
|
3587cfd2df | ||
|
|
de2be90636 | ||
|
|
9f35c3f52d | ||
|
|
22910c02a9 | ||
|
|
fef8905dc2 | ||
|
|
0f7534c755 | ||
|
|
4d0330bf82 | ||
|
|
026efd96b2 | ||
|
|
f6af5ff13a | ||
|
|
0d7b7585a8 | ||
|
|
6283600b84 | ||
|
|
f6e04ffdd2 | ||
|
|
44b42f68fd | ||
|
|
56241838c0 | ||
|
|
26475f8f40 | ||
|
|
ff5e31f396 | ||
|
|
59b1c324a9 | ||
|
|
1f627caa81 | ||
|
|
7dc3a50ddf | ||
|
|
cfe08de951 | ||
|
|
48ad959697 | ||
|
|
05881ffa62 | ||
|
|
8b3ed7b599 | ||
|
|
48ad7ca3a0 | ||
|
|
cbec04cd0f | ||
|
|
3fde455932 | ||
|
|
ba727e13ae | ||
|
|
2248007c9a | ||
|
|
2359ba9aed | ||
|
|
b736691bde | ||
|
|
50bf528f3f | ||
|
|
7e3eab9915 | ||
|
|
dc0793b731 | ||
|
|
c194804fec | ||
|
|
d41e405420 | ||
|
|
516cb959cb | ||
|
|
704e74b904 | ||
|
|
b70f08d850 | ||
|
|
53f2594983 | ||
|
|
7573d7289b | ||
|
|
f9abe40494 | ||
|
|
88bb26afb4 | ||
|
|
dac0baac0d | ||
|
|
f7eacf70ec | ||
|
|
067b35217a | ||
|
|
c3888f5bbb | ||
|
|
af3ef02ca0 | ||
|
|
c49ebba648 | ||
|
|
933d96af5f | ||
|
|
bf6044fced | ||
|
|
1a0392bf15 | ||
|
|
ad00c44231 | ||
|
|
69f321a471 | ||
|
|
37383f4217 | ||
|
|
b84e95d768 | ||
|
|
4369fb234e | ||
|
|
58040d478a | ||
|
|
46a54f5474 | ||
|
|
e31173e33e | ||
|
|
5b0ef401f7 | ||
|
|
1650dd1c7d | ||
|
|
84f123041a | ||
|
|
f258ae795c | ||
|
|
33e80a733d | ||
|
|
20331a77ce | ||
|
|
4e6b37ca04 | ||
|
|
646ad3eed4 | ||
|
|
edcc2a9e0d | ||
|
|
0e20acdf55 | ||
|
|
f262e77fbd | ||
|
|
244aa6879a | ||
|
|
e9fe90244f | ||
|
|
a90376a7c4 | ||
|
|
aff7d8a994 | ||
|
|
7f4b6b1ae7 | ||
|
|
78bcb0fd53 | ||
|
|
c733e794de | ||
|
|
99fc90648b | ||
|
|
2587545eed | ||
|
|
ac300c7356 | ||
|
|
2af2db2cbf | ||
|
|
d5ca9dacb6 | ||
|
|
5e436984a2 | ||
|
|
be972f04ac | ||
|
|
00c87a8fc9 | ||
|
|
e51656e070 | ||
|
|
9dc6d920ce | ||
|
|
354db953e6 | ||
|
|
e67cf68321 | ||
|
|
60d35e17ac | ||
|
|
d161d8c545 | ||
|
|
f66b29f043 | ||
|
|
77f6db2543 | ||
|
|
5eabe9aa33 | ||
|
|
76c1681173 | ||
|
|
67ba381dfe | ||
|
|
9a6285942b | ||
|
|
d93f16fe87 | ||
|
|
214c1ccc7e | ||
|
|
d1ac92fd99 | ||
|
|
263b7854c1 | ||
|
|
843aed228e | ||
|
|
bf71b1fcf7 | ||
|
|
81c216f330 | ||
|
|
e4b242955c | ||
|
|
3fac832567 | ||
|
|
08011e9b78 | ||
|
|
ee7ed1fdc3 | ||
|
|
d63a712cc5 | ||
|
|
c549d7154b | ||
|
|
590483b81f | ||
|
|
9ba9d9424e | ||
|
|
962e140cea | ||
|
|
9afa960979 | ||
|
|
8b4f3fa775 | ||
|
|
5fb0b2c190 | ||
|
|
266ab28145 | ||
|
|
2acac67570 | ||
|
|
361ef33856 | ||
|
|
c0c52c33b9 | ||
|
|
4ed92f4155 | ||
|
|
cb953a418f | ||
|
|
9c1f258be3 | ||
|
|
c6641748ce | ||
|
|
12efd29121 | ||
|
|
a4bd1755cf | ||
|
|
683c061e60 | ||
|
|
0e625e193e | ||
|
|
43302f937c | ||
|
|
792ac5ed64 | ||
|
|
90548468ee | ||
|
|
1584aba387 | ||
|
|
caea340985 | ||
|
|
ab6c74b3c1 | ||
|
|
f06c8b22e8 | ||
|
|
68fdc49528 | ||
|
|
cd73d738e5 | ||
|
|
ab50e5483e | ||
|
|
8a72bdb422 | ||
|
|
df39bd39b0 | ||
|
|
d58df667b9 | ||
|
|
7a24642c56 | ||
|
|
1a90adfb5e | ||
|
|
3832d4fa1c | ||
|
|
8f328b2624 | ||
|
|
80ef348600 | ||
|
|
e2a9c0a8f3 | ||
|
|
780a234467 | ||
|
|
ea9dc9317d | ||
|
|
15af1bca69 | ||
|
|
479150b214 | ||
|
|
e1d1d16227 | ||
|
|
877dd1f98d | ||
|
|
7df7ac57cc | ||
|
|
e5793acd78 | ||
|
|
24e76f2960 | ||
|
|
75e66ab5e0 | ||
|
|
b3725baf5a | ||
|
|
f1d9a014c0 | ||
|
|
8e3112734e | ||
|
|
eb850681ee | ||
|
|
70308d05f3 | ||
|
|
c7e5a62909 | ||
|
|
f72d148d37 | ||
|
|
d8435163bb | ||
|
|
af11546b1e | ||
|
|
63f16d7a46 | ||
|
|
c765de81d4 | ||
|
|
02e1c49818 | ||
|
|
71b15c1fa6 | ||
|
|
65e9388f00 | ||
|
|
056d43eca7 | ||
|
|
55ec4808f1 | ||
|
|
2cfa5406e7 | ||
|
|
86716dc37b | ||
|
|
f9ab077908 | ||
|
|
8b3a3e4ac8 | ||
|
|
45f5819ef3 | ||
|
|
3f55067414 | ||
|
|
797b69fe8f | ||
|
|
019fa390f2 | ||
|
|
42de2a3e0b | ||
|
|
f90bf2dd40 | ||
|
|
dc8fc9fc79 | ||
|
|
3d49976b3c | ||
|
|
eed38e1bbc | ||
|
|
9595297a3a | ||
|
|
7c5b5d25e3 | ||
|
|
2e22a0d9bb | ||
|
|
ba2a8ebf2e | ||
|
|
381c7544fa | ||
|
|
4752c4014b | ||
|
|
24642a4c18 | ||
|
|
62979c7bd9 | ||
|
|
7b9fb7ad9c | ||
|
|
7f830d555d | ||
|
|
9aafd8c09f | ||
|
|
6781eb7c76 | ||
|
|
3e09b97f58 | ||
|
|
e7b9513d4a | ||
|
|
34c36c73ee | ||
|
|
2821eb7397 | ||
|
|
65c9cd99cd | ||
|
|
b217e8384c | ||
|
|
df96be199b | ||
|
|
ecc55048c5 | ||
|
|
e58911cc95 | ||
|
|
269c4604aa | ||
|
|
8f1dc7a2d4 | ||
|
|
da91a841b7 | ||
|
|
4323ca4a01 | ||
|
|
fff0c96bf3 | ||
|
|
7167fbf545 | ||
|
|
e4aff539b0 | ||
|
|
d0e31f4ec3 | ||
|
|
3e06446297 | ||
|
|
4237039d53 | ||
|
|
5ae7dbf77c | ||
|
|
f1037f75d9 | ||
|
|
a7cb513a89 | ||
|
|
e3ec71c683 | ||
|
|
f7870d4968 | ||
|
|
80ef0ce9b5 | ||
|
|
696a3c4a42 | ||
|
|
81a01134bb | ||
|
|
70c291753c | ||
|
|
3c7ada8e83 | ||
|
|
46b3027981 | ||
|
|
334999f639 | ||
|
|
dabfce5c82 | ||
|
|
0a8d9a12ab | ||
|
|
19b2da2590 | ||
|
|
17a074e1ac | ||
|
|
38d5f688b3 | ||
|
|
e307a1b4bd | ||
|
|
a50e22a11f | ||
|
|
c995505023 | ||
|
|
1f8f428a59 | ||
|
|
e10c6cbaf7 | ||
|
|
5870da0b55 | ||
|
|
5f729d4dbf | ||
|
|
ebde86b967 | ||
|
|
14a425e487 | ||
|
|
1f1d1da87b | ||
|
|
129ade2f73 | ||
|
|
c37c6fb6de | ||
|
|
5736fa3351 | ||
|
|
3e84a2acc0 | ||
|
|
77c252a4c0 | ||
|
|
e4f92ddf77 | ||
|
|
1f3b1e1c99 | ||
|
|
73bdf7481e | ||
|
|
c2ab3c664c | ||
|
|
ddec5d6908 | ||
|
|
975aae1d13 | ||
|
|
9e62ca562b | ||
|
|
d28b0ba2fa | ||
|
|
aba332d4c4 | ||
|
|
543fb7a9cb | ||
|
|
67b3fc70f8 | ||
|
|
2268aa9093 | ||
|
|
4b8ee85995 | ||
|
|
86ead1b93b | ||
|
|
7ec7f261b1 | ||
|
|
1685769bd9 | ||
|
|
2acb6ed60d | ||
|
|
144244e902 | ||
|
|
7cf9d1380b | ||
|
|
f188019244 | ||
|
|
38dfc88e8d | ||
|
|
95c36221fa | ||
|
|
b30ac48513 | ||
|
|
4fcc1c0f31 | ||
|
|
1a2fad4eac | ||
|
|
da4f4dafbd | ||
|
|
e5876b3a1b | ||
|
|
9c2d94ca1a | ||
|
|
ae4f837f57 | ||
|
|
c6c4aa4634 | ||
|
|
bcda172ae7 | ||
|
|
d511e76a63 | ||
|
|
56e982375e | ||
|
|
e3eaf5f29e | ||
|
|
e56609d836 | ||
|
|
460fb66949 | ||
|
|
b955469721 | ||
|
|
6378e16fdf | ||
|
|
8b48fd95fe | ||
|
|
5600430a05 | ||
|
|
50ad7ba1f6 | ||
|
|
fe6cb4774e | ||
|
|
91fefd4671 | ||
|
|
677d5f09ce | ||
|
|
c7f5475b56 | ||
|
|
42e3add6a1 | ||
|
|
8dc98bbc1b | ||
|
|
f98595bee5 | ||
|
|
fafefb2cf5 | ||
|
|
1cbcf7e1ad | ||
|
|
df080fbc53 | ||
|
|
bd66dfedc9 | ||
|
|
69faf14a79 | ||
|
|
1a443cf6b5 | ||
|
|
2fb68bfc03 | ||
|
|
4d70c483b2 | ||
|
|
29256df5b1 | ||
|
|
a74156fe5b | ||
|
|
57473ff98d | ||
|
|
00618995d9 | ||
|
|
6a340afb8a | ||
|
|
dfbc49513d | ||
|
|
7bb830a228 | ||
|
|
b3f002f68f | ||
|
|
ea949a5f28 | ||
|
|
53457262d4 | ||
|
|
472efc08eb | ||
|
|
0525070898 | ||
|
|
cbc1c472d5 | ||
|
|
aca9884e76 | ||
|
|
17fb601c02 | ||
|
|
76ac8ffbd6 | ||
|
|
fe0c164de2 | ||
|
|
ea2c5294df | ||
|
|
3c0681ad6d | ||
|
|
0debcfed0a | ||
|
|
06f733a7f2 | ||
|
|
ad6a72e369 | ||
|
|
b40ed5bdb7 | ||
|
|
ee6e4c493d | ||
|
|
9c0c8f2bc7 | ||
|
|
43cc62d267 | ||
|
|
d304b52391 | ||
|
|
a86b278115 | ||
|
|
ae491f04a1 | ||
|
|
1e108d97b2 | ||
|
|
f0ab4b51dc | ||
|
|
8db02dcf40 | ||
|
|
63104af8e9 | ||
|
|
b5dcfb3431 | ||
|
|
a5e455d8ed | ||
|
|
6781373727 | ||
|
|
b07960d3bc | ||
|
|
977d729ee0 | ||
|
|
a33b2afe08 | ||
|
|
2eb0d19a75 | ||
|
|
9ecd1e37fa | ||
|
|
3ab9e04db7 | ||
|
|
f185aba5fc | ||
|
|
2431fcc2a1 | ||
|
|
1060e93783 | ||
|
|
5aee8a8a81 | ||
|
|
28b9f4238a | ||
|
|
a09c2dbdd7 | ||
|
|
e1a5a24a93 | ||
|
|
ddb042148d | ||
|
|
2d9929059f | ||
|
|
b0e352c44e | ||
|
|
2ff407ac6a | ||
|
|
b0e5de4c9c | ||
|
|
970fe0df12 | ||
|
|
38097783b8 | ||
|
|
ae1729bd8a | ||
|
|
72f0637efe | ||
|
|
4e139ee080 | ||
|
|
57b9acec62 | ||
|
|
c1f31d37f5 | ||
|
|
4b2f56e035 | ||
|
|
d84d82c166 | ||
|
|
f44e50b9cd | ||
|
|
d0451932bf | ||
|
|
92749f011e | ||
|
|
9080d09583 | ||
|
|
afc71341a5 | ||
|
|
1cdb2c6a26 | ||
|
|
c62deeefd4 | ||
|
|
4953e79588 | ||
|
|
5c0bf14554 | ||
|
|
62102293b5 | ||
|
|
3eb37344cd | ||
|
|
fcfeac818f | ||
|
|
c13a46b07b | ||
|
|
705693ecf8 | ||
|
|
8848dc6673 | ||
|
|
47e784d5d0 | ||
|
|
a346767a72 | ||
|
|
107641626a | ||
|
|
83624e1f68 | ||
|
|
2ce164be09 | ||
|
|
24d7374a22 | ||
|
|
aa48bd91f4 | ||
|
|
ac986c7c61 | ||
|
|
cad96cef72 | ||
|
|
41cfa6349a | ||
|
|
62beaf299f | ||
|
|
b928cb0223 | ||
|
|
4b2562d02a | ||
|
|
b5faa8f83c | ||
|
|
53bfc6fa59 | ||
|
|
adece0b73e | ||
|
|
063df64108 | ||
|
|
f1f93b8f81 | ||
|
|
5784ffc972 | ||
|
|
91737b11fe | ||
|
|
bf61c826d5 | ||
|
|
5816505e61 | ||
|
|
6e1c7a2c16 | ||
|
|
c9afb3daaa | ||
|
|
7fdbadf645 | ||
|
|
27c86422c7 | ||
|
|
1b775febcd | ||
|
|
f0d51899c1 | ||
|
|
3fa9d23627 | ||
|
|
2b18813115 | ||
|
|
430fd759fe | ||
|
|
0556837e3b | ||
|
|
d4802cc766 | ||
|
|
0031c41630 | ||
|
|
f745971cc8 | ||
|
|
456b649b19 | ||
|
|
4035dcf8e3 | ||
|
|
dff5707e19 | ||
|
|
0f5603a4bc | ||
|
|
a4c1fcb59a | ||
|
|
d0a824996b | ||
|
|
69b34693f0 | ||
|
|
9a63ed6c50 | ||
|
|
6f6eda6413 | ||
|
|
86d2316089 | ||
|
|
064fc81697 | ||
|
|
b7e4de6ea5 | ||
|
|
a146aabcaf | ||
|
|
9ecb6c4e34 | ||
|
|
3ccfb86e1b | ||
|
|
9c21f43df6 | ||
|
|
87c07679e1 | ||
|
|
6de4c27b32 | ||
|
|
995e9b5f9f | ||
|
|
e03f323fdd | ||
|
|
f2bca2ef67 | ||
|
|
0b88d5f077 | ||
|
|
9f67e00e40 | ||
|
|
9d71369b2c | ||
|
|
2dd0f488a1 | ||
|
|
dd7f24b20e | ||
|
|
ccb7531289 | ||
|
|
4d0179174a | ||
|
|
3ddcf60a11 | ||
|
|
3b581aaf94 | ||
|
|
0c68a6afdd | ||
|
|
fd29382290 | ||
|
|
1d3f91a1b8 | ||
|
|
999252a806 | ||
|
|
da3c9948e6 | ||
|
|
daa8265a47 | ||
|
|
f807ebf9ba | ||
|
|
8c3a4c260e | ||
|
|
06f4dfb9f1 | ||
|
|
af89eb5404 | ||
|
|
dc0a086400 | ||
|
|
8aec943093 | ||
|
|
99b6963fab | ||
|
|
b3c65b7bca | ||
|
|
0ec526c5f1 | ||
|
|
8af694da2e | ||
|
|
05d1b3605e | ||
|
|
5ba8daf518 | ||
|
|
286e154d05 | ||
|
|
a0c1b250b6 | ||
|
|
6527eef655 | ||
|
|
f39a0a5fbe | ||
|
|
a06a93d5ba | ||
|
|
f6e4cc14a2 | ||
|
|
658b4f70ef | ||
|
|
fc5840cda6 | ||
|
|
2f6db5802f | ||
|
|
77c191df42 | ||
|
|
d85bb3f4eb | ||
|
|
3a6399aaaa | ||
|
|
de6f3b5653 | ||
|
|
0262076bfe | ||
|
|
7aca2785b6 | ||
|
|
6dc35a3772 | ||
|
|
2efc4812d7 | ||
|
|
bb9c063e80 | ||
|
|
22e51e1615 | ||
|
|
03a46a499e | ||
|
|
f0e01ceb8f | ||
|
|
c2c74982c4 | ||
|
|
c390c02acb | ||
|
|
56d46b5a49 | ||
|
|
0a7a12bbff | ||
|
|
ace187cdd0 | ||
|
|
0aa1aff6ba | ||
|
|
c54ddabe0b | ||
|
|
e5029c532b | ||
|
|
a4cd9e022a | ||
|
|
99bbcd15e1 | ||
|
|
9d11c8cbb5 | ||
|
|
92d1534917 | ||
|
|
abd8bbd6ef | ||
|
|
13abe785a9 | ||
|
|
6a9d1edee1 | ||
|
|
69bdbe97a8 | ||
|
|
de7ed1cbe9 | ||
|
|
7d3bbd3cf7 | ||
|
|
59e7379010 | ||
|
|
be9be6e5c9 | ||
|
|
867f0e1f02 | ||
|
|
202aed560b | ||
|
|
fdc9619e7c | ||
|
|
737b0dfd42 | ||
|
|
66371457fd | ||
|
|
1d85c9d201 | ||
|
|
3a026a7dc3 | ||
|
|
0502f7881f | ||
|
|
50354253c8 | ||
|
|
954d83b6a0 | ||
|
|
f83a877331 | ||
|
|
2a8d740d63 | ||
|
|
c84e5489f2 | ||
|
|
aa08df0455 | ||
|
|
e51d16aa37 | ||
|
|
98e40d12ef | ||
|
|
e6e0210e73 | ||
|
|
83a2f06e3a | ||
|
|
a5c3c7d2e5 | ||
|
|
65b2a0d538 | ||
|
|
d099148961 | ||
|
|
6f901636bf | ||
|
|
b087d79a08 | ||
|
|
904ec44a8c | ||
|
|
6f6503ee32 | ||
|
|
441713d959 | ||
|
|
e75e437a4a | ||
|
|
0d87d909c6 | ||
|
|
2d4df57d87 | ||
|
|
b7df539871 | ||
|
|
d53f2f10fb | ||
|
|
5940247200 | ||
|
|
9a392d2b5c | ||
|
|
a981c65d2f | ||
|
|
81805945ce | ||
|
|
70a3c5d440 | ||
|
|
7fe15f5f8d | ||
|
|
9c5c4457b6 | ||
|
|
1e605de31e | ||
|
|
1e9afdc289 | ||
|
|
1f6ca25820 | ||
|
|
8e2c34a003 | ||
|
|
c2f0fbcd82 | ||
|
|
85b33e9cae | ||
|
|
6250e478f4 | ||
|
|
66368debf8 | ||
|
|
aaac4c1bde | ||
|
|
974a3c8807 | ||
|
|
369f1132f3 | ||
|
|
2524c35638 | ||
|
|
d906ccc77e | ||
|
|
a2f93b0696 | ||
|
|
77c9dff054 | ||
|
|
09f9f21261 | ||
|
|
5f6d1644cf | ||
|
|
c18e5e07cc | ||
|
|
000414c47d | ||
|
|
2ffa8f4623 | ||
|
|
53c9fb3e00 | ||
|
|
342b25d00e | ||
|
|
88abf3a6ba | ||
|
|
71a5e5333a | ||
|
|
5dfa908835 | ||
|
|
ea0c559bc3 | ||
|
|
15ae06a7c4 | ||
|
|
b6a0296d00 | ||
|
|
2f361e94dd | ||
|
|
89c2bb5cf1 | ||
|
|
b164345561 | ||
|
|
3cc212940c | ||
|
|
2aec81330b | ||
|
|
f16b387ad9 | ||
|
|
0a6968cfe5 | ||
|
|
8f19d11f29 | ||
|
|
a34201ebff | ||
|
|
6a7324ab3e | ||
|
|
f4d0261387 | ||
|
|
7f7bd961e2 | ||
|
|
fcbacf8afd | ||
|
|
e75de44907 | ||
|
|
161fa95066 | ||
|
|
8f8605ab2f | ||
|
|
544a458f20 | ||
|
|
285b9dad83 | ||
|
|
770a607ba5 | ||
|
|
a2d4bd4fff | ||
|
|
fe8d524352 | ||
|
|
e212f16962 | ||
|
|
020fdcc781 | ||
|
|
194bfc54d1 | ||
|
|
9b050a33e4 | ||
|
|
b6fccee6a4 | ||
|
|
23468a2d07 | ||
|
|
2c7c1c501d | ||
|
|
3cbdc3a198 | ||
|
|
dcb2e8cd9e | ||
|
|
571bdfc828 | ||
|
|
0aed00a758 | ||
|
|
58847fa2ca | ||
|
|
bba5285740 | ||
|
|
e7234fd4b2 | ||
|
|
400002e64c | ||
|
|
d59707bc4b | ||
|
|
926fa73fee | ||
|
|
cd8cb9cced | ||
|
|
fad79a96a2 | ||
|
|
b6128c5dfa | ||
|
|
68a1da31a0 | ||
|
|
2c2003aa5b | ||
|
|
f4bcf9ad1d | ||
|
|
7e0f2f9b12 | ||
|
|
50be3bd2e5 | ||
|
|
3c614d95b8 | ||
|
|
aaa20c0ff0 | ||
|
|
0531b3d801 | ||
|
|
40493c564f | ||
|
|
bbaa93c846 | ||
|
|
72680c7707 | ||
|
|
039ca6e839 | ||
|
|
9fadd48ea3 | ||
|
|
4bf9700562 | ||
|
|
966aec7ad7 | ||
|
|
78972cd611 | ||
|
|
24e4a43ec4 | ||
|
|
c3415bcff2 | ||
|
|
35a380676e | ||
|
|
d3ff67ffb5 | ||
|
|
6f874be41b | ||
|
|
cb0929d933 | ||
|
|
dfbd63df94 | ||
|
|
76bfe54c7e | ||
|
|
9cbcce671d | ||
|
|
0628a5d931 | ||
|
|
696be6aacd | ||
|
|
766cc2d42f | ||
|
|
2dc6adc038 | ||
|
|
27cc5c8a63 | ||
|
|
d0c4b2de9f | ||
|
|
cd6552d344 | ||
|
|
20bd723e7c | ||
|
|
2d3fe7ce1c | ||
|
|
4f76211551 | ||
|
|
c918f395b9 | ||
|
|
4a4f318e24 | ||
|
|
e7b1fc6696 | ||
|
|
76bf720adf | ||
|
|
2169e8d935 | ||
|
|
ddbe496097 | ||
|
|
3f80d0b7d8 | ||
|
|
2eebecfb17 | ||
|
|
70c24a9466 | ||
|
|
4ab2e40d8a | ||
|
|
568af756cc | ||
|
|
f5366c91a7 | ||
|
|
b5f1f50a16 | ||
|
|
6ac9e6f9c4 | ||
|
|
39815801aa | ||
|
|
11ab9b7fa9 | ||
|
|
baa422e65b | ||
|
|
a7f1e788e6 | ||
|
|
6c44664c19 | ||
|
|
f2d6b52561 | ||
|
|
8405314399 | ||
|
|
3321ada41e | ||
|
|
ff8aa9112a | ||
|
|
0fc3e5fa1e | ||
|
|
98f534b1bd | ||
|
|
f85881c18c | ||
|
|
b8b5b93b63 | ||
|
|
20e25cd928 | ||
|
|
a7d4da25a4 | ||
|
|
ac83871214 | ||
|
|
a1608b636f | ||
|
|
d862817485 | ||
|
|
63210449c6 | ||
|
|
4a32b70aec | ||
|
|
9199b1b1d8 | ||
|
|
a49446c9e9 | ||
|
|
f5e529db61 | ||
|
|
eec9578619 | ||
|
|
d81a5b1423 | ||
|
|
3cbe42df0a | ||
|
|
a2da525064 | ||
|
|
7c2b08b9b6 | ||
|
|
99af70ae59 | ||
|
|
5a0b93742c | ||
|
|
7c7cc3914d | ||
|
|
0d64b0f94d | ||
|
|
f18e80e899 | ||
|
|
210999b874 | ||
|
|
046d029e89 | ||
|
|
7d89938624 | ||
|
|
6ff9aab2ca | ||
|
|
5f47730fc0 | ||
|
|
9e62e98f79 | ||
|
|
763828837b | ||
|
|
f9d9d12f11 | ||
|
|
56f7359da4 | ||
|
|
6fed80333c | ||
|
|
befd38d9ae | ||
|
|
98b668b3a8 | ||
|
|
f103004aa0 | ||
|
|
5b4631dcf9 | ||
|
|
177933e212 | ||
|
|
83d3658ef0 | ||
|
|
44f0ca08e2 | ||
|
|
338dc62474 | ||
|
|
a736350859 | ||
|
|
156b092dc9 | ||
|
|
122bb4d829 | ||
|
|
7508949ca8 | ||
|
|
c882c8f417 | ||
|
|
ac59073071 | ||
|
|
7311c161f6 | ||
|
|
9ba3e6d3f7 | ||
|
|
5db38c0127 | ||
|
|
191cb92300 | ||
|
|
2491aad6f2 | ||
|
|
4b239a0b87 | ||
|
|
2768727e2f | ||
|
|
309759b725 | ||
|
|
18627960d7 | ||
|
|
160b131de3 | ||
|
|
613777afde | ||
|
|
dcfd29c2d9 | ||
|
|
a7d0c4fb1e | ||
|
|
3a2b9f83ec | ||
|
|
48870f3e8b | ||
|
|
1f93fc902b | ||
|
|
c646476ca8 | ||
|
|
de94f6c2f6 | ||
|
|
f0c4aa6777 | ||
|
|
0811d2d527 | ||
|
|
3abf14beef | ||
|
|
638f20c80f | ||
|
|
04cac6cd33 | ||
|
|
1d0f6eebdc | ||
|
|
16620f6835 | ||
|
|
88bfd3c3a7 | ||
|
|
4b11a4256e | ||
|
|
1dc00ccedd | ||
|
|
7832acbceb | ||
|
|
0042f4e16e | ||
|
|
ffc9211ce2 | ||
|
|
8217840acc | ||
|
|
cd7253bac9 | ||
|
|
d3b0a3dc46 | ||
|
|
e91dd3e373 | ||
|
|
6e497ae372 | ||
|
|
7398200980 | ||
|
|
8ed42410bf | ||
|
|
8f271861f5 | ||
|
|
f6a70e2e08 | ||
|
|
52780e65e7 | ||
|
|
57cd4ff3c6 | ||
|
|
2e28e2d293 | ||
|
|
13e2f26a67 | ||
|
|
73b77525eb | ||
|
|
a84cf030bb | ||
|
|
af05ebe428 | ||
|
|
c5a06dab0a | ||
|
|
11bace8804 | ||
|
|
7a9a46e093 | ||
|
|
8bd58b1ad4 | ||
|
|
c681395fb2 | ||
|
|
33580e0aa1 | ||
|
|
47436bd774 | ||
|
|
a992a5fba9 | ||
|
|
94e2f464e3 | ||
|
|
56471f4ad4 | ||
|
|
cacb852a1e | ||
|
|
6dca588370 | ||
|
|
cdf25d902a | ||
|
|
2a26bc6668 | ||
|
|
4e12e70929 | ||
|
|
f0ad20a250 | ||
|
|
8ae727ca04 | ||
|
|
5b6537674f | ||
|
|
126141cdce | ||
|
|
fe17c83020 | ||
|
|
b8928d230a | ||
|
|
675c9a7945 | ||
|
|
1a73b0a0da | ||
|
|
f7b845d49c | ||
|
|
0bd64a0e72 | ||
|
|
acded1e08a | ||
|
|
a4f4b81e6b | ||
|
|
0b18ec8208 | ||
|
|
e3944bc67f | ||
|
|
b085284c55 | ||
|
|
31b55e0030 | ||
|
|
7a4918e4a4 | ||
|
|
1e1880893a | ||
|
|
363cc60c82 | ||
|
|
b09970f159 | ||
|
|
52930a7597 | ||
|
|
96fa531566 | ||
|
|
64997662d2 | ||
|
|
900ebf6583 | ||
|
|
ce94a4ecea | ||
|
|
7b6482c01d | ||
|
|
a043e95d24 | ||
|
|
f56ecb6d3f | ||
|
|
e24ada37bf | ||
|
|
546b52200b | ||
|
|
327c000c82 | ||
|
|
1b0b2fe21e | ||
|
|
e327d47169 | ||
|
|
35ee550171 | ||
|
|
f27325fd98 | ||
|
|
2447fdb90d | ||
|
|
7ab13a44d7 | ||
|
|
1745c8c607 | ||
|
|
c6c5faa95c | ||
|
|
df39bac449 | ||
|
|
c3bf9bd4a0 | ||
|
|
1ac82546ec | ||
|
|
b09b0bc43b | ||
|
|
0224c7a9eb | ||
|
|
ca0d38d19d | ||
|
|
b62ac7a046 | ||
|
|
daa53b77cf | ||
|
|
b8477a470f | ||
|
|
2f44523e6d | ||
|
|
2fa5f6f242 | ||
|
|
a86cce5d70 | ||
|
|
9856f170a7 | ||
|
|
ba35619718 | ||
|
|
37331d8ead | ||
|
|
d17784b231 | ||
|
|
18e1b45388 | ||
|
|
9b083f801c | ||
|
|
f0907d6f96 | ||
|
|
71d58e3a67 | ||
|
|
37425d6fcd | ||
|
|
1f295bba5b | ||
|
|
a50be7a912 | ||
|
|
f9d52ea5b9 | ||
|
|
e192869e15 | ||
|
|
f1be9bbf6c | ||
|
|
d331ff3193 | ||
|
|
035a187c42 | ||
|
|
3c37036f7a | ||
|
|
14b6d6291b | ||
|
|
5720a32bc5 | ||
|
|
11f57f259c | ||
|
|
3fc6375ec5 | ||
|
|
f8e05f8e3c | ||
|
|
98c0b3a2b1 | ||
|
|
6423c23a9a | ||
|
|
dece8a69f6 | ||
|
|
5724d2d4c7 | ||
|
|
b1736b6411 | ||
|
|
703ec474f5 | ||
|
|
64a109d28a | ||
|
|
dc2ec17886 | ||
|
|
1d9dd8d29d | ||
|
|
8b0e1d6c03 | ||
|
|
f1a9f6263e | ||
|
|
a049c6fd6b | ||
|
|
9609767c51 | ||
|
|
86a8e0716f | ||
|
|
b5e9f09972 | ||
|
|
4d9a167f56 | ||
|
|
b704cc8375 | ||
|
|
e34c956196 | ||
|
|
7197dd751a | ||
|
|
0b9e4ffe54 | ||
|
|
486ba6121d | ||
|
|
1015c126d7 | ||
|
|
1caf81811a | ||
|
|
4c2a11b6d0 | ||
|
|
8fd3b26308 | ||
|
|
617d21fa84 | ||
|
|
4a88ffe250 | ||
|
|
41b68ef353 | ||
|
|
72c85744b9 | ||
|
|
c7b5bbd467 | ||
|
|
082bbc7336 | ||
|
|
087dccd194 | ||
|
|
61450335a5 | ||
|
|
67649d7976 | ||
|
|
6247969ede | ||
|
|
efd38fa940 | ||
|
|
551472220e | ||
|
|
01703b1350 | ||
|
|
e9d785475e | ||
|
|
9e008996ab | ||
|
|
bcfae17219 | ||
|
|
ddea45160b | ||
|
|
53f13a9721 | ||
|
|
3e33f064bf | ||
|
|
aa0afc9a4e | ||
|
|
a0d1cf26d0 | ||
|
|
01d14aed80 | ||
|
|
3c4c830e20 | ||
|
|
0c9c481cee | ||
|
|
7dae376646 | ||
|
|
ccb89bd76a | ||
|
|
b2317543c8 | ||
|
|
b812ef2771 | ||
|
|
7618e7f3fb | ||
|
|
b6732fbae9 | ||
|
|
68fa377d13 | ||
|
|
7a9561b966 | ||
|
|
c061991c43 | ||
|
|
bdac1d9bfd | ||
|
|
266c4209c4 | ||
|
|
fb26da1cb0 | ||
|
|
d623720f4d | ||
|
|
9d4fcbf946 | ||
|
|
896db3806d | ||
|
|
691b986e36 | ||
|
|
5416f60643 | ||
|
|
67e2e154fa | ||
|
|
330dea181a | ||
|
|
7bc673002f | ||
|
|
ae8d1a3a60 | ||
|
|
27975e9dfd | ||
|
|
bff938ccf5 | ||
|
|
53f317e076 | ||
|
|
0a7df9d02e | ||
|
|
408ffd3d2c | ||
|
|
a211895e28 | ||
|
|
19763f8973 | ||
|
|
99d6f9c7a9 | ||
|
|
63e4ac80bd | ||
|
|
24983ea329 | ||
|
|
6cab5b5591 | ||
|
|
c9d2aed286 | ||
|
|
a16cc3ac8a | ||
|
|
ba1699a831 | ||
|
|
20c69a0e3e | ||
|
|
bdc5ed094b | ||
|
|
088d22675b | ||
|
|
fc9b3c13e6 | ||
|
|
14a64e2529 | ||
|
|
f5415fb4ac | ||
|
|
20076ed57e | ||
|
|
006b8574ae | ||
|
|
1de7ac3c67 | ||
|
|
8d1fc18941 | ||
|
|
06dc99ab85 | ||
|
|
e4059dfe6a | ||
|
|
4048b1e515 | ||
|
|
ccb46df905 | ||
|
|
a16d8ba3ea | ||
|
|
a485957130 | ||
|
|
56d34e0e80 | ||
|
|
11824b3916 | ||
|
|
5ca6381624 | ||
|
|
024b184008 | ||
|
|
7a105333dc | ||
|
|
332eb5fbd6 | ||
|
|
5b0dac797c | ||
|
|
86ddc00bb1 | ||
|
|
3107f37864 | ||
|
|
17f5fec538 | ||
|
|
03b76b4606 | ||
|
|
a3e8a61547 | ||
|
|
a8d5a8734a | ||
|
|
10bbb7fa1f | ||
|
|
8c5f2b249c | ||
|
|
332c512eed | ||
|
|
d10584ac6c | ||
|
|
d2b761b7de | ||
|
|
49c5ce30cc | ||
|
|
95725bf7fc | ||
|
|
94c62b1eec | ||
|
|
02febd3f65 | ||
|
|
497fbb17a8 | ||
|
|
5ddb1d6649 | ||
|
|
396c129d41 | ||
|
|
f64a7bb820 | ||
|
|
4a9be0a8d2 | ||
|
|
bf1756448e | ||
|
|
ed8f60431f | ||
|
|
6f1f75bc8f | ||
|
|
963d150e93 | ||
|
|
c1f1b1174d | ||
|
|
1ddeef71c6 | ||
|
|
b7eefeac8b | ||
|
|
e57f36fc5b | ||
|
|
32116086b3 | ||
|
|
878da3b474 | ||
|
|
73320d4180 | ||
|
|
a1d31f640a | ||
|
|
9c7230e79f | ||
|
|
98687d474b | ||
|
|
7b57b8f2ca | ||
|
|
55c98bfaef | ||
|
|
e9a45a2f45 | ||
|
|
2212a131ef | ||
|
|
deacf05769 | ||
|
|
870224cde0 | ||
|
|
e557c962fb | ||
|
|
5a3c218239 | ||
|
|
1e71deb0db | ||
|
|
dea1d01de2 | ||
|
|
e9bea1c742 | ||
|
|
d51bb8b1cc | ||
|
|
aad5283786 | ||
|
|
66df38957b | ||
|
|
7cbafd603a | ||
|
|
3e48c9744b | ||
|
|
a982280400 | ||
|
|
d62983e1a2 | ||
|
|
90ac24e524 | ||
|
|
0b2ba98238 | ||
|
|
916ce7899b | ||
|
|
b978aa6dca | ||
|
|
6565855005 | ||
|
|
9f80a55652 | ||
|
|
9d895e6b15 | ||
|
|
a7acb84b8b | ||
|
|
8d54453981 | ||
|
|
452fb59c74 | ||
|
|
ba45daff35 | ||
|
|
b3fb6d7d18 | ||
|
|
5dc3467337 | ||
|
|
729757b1dd | ||
|
|
393f9d329d | ||
|
|
820390b7ed | ||
|
|
e0790f758e | ||
|
|
2f333424a6 | ||
|
|
a67b347966 | ||
|
|
dedf09017a | ||
|
|
cd07ab5b5f | ||
|
|
6892cb1c7e | ||
|
|
b518a9a338 | ||
|
|
54d078f379 | ||
|
|
b0a0533a4f | ||
|
|
399f20ae54 | ||
|
|
554ba9d6a6 | ||
|
|
2c05e9719d | ||
|
|
cb9e7358d2 | ||
|
|
ae01e1d2c3 | ||
|
|
2766e5ca6f | ||
|
|
ca0c4f2cc0 | ||
|
|
70c98fff19 | ||
|
|
b5698ee101 | ||
|
|
379138af27 | ||
|
|
1864419561 | ||
|
|
c4a8bb26fb | ||
|
|
a9ddb1d3b3 | ||
|
|
314670a347 | ||
|
|
ad49c54531 | ||
|
|
43ac33c2b4 | ||
|
|
83fdcff178 | ||
|
|
ee4009e123 | ||
|
|
2decf1ecda | ||
|
|
1d7fbd6a9a | ||
|
|
1213708b72 | ||
|
|
6cc5428d5e | ||
|
|
8fcebebae3 | ||
|
|
f801dc6558 | ||
|
|
8716ac554f | ||
|
|
d7b4753007 | ||
|
|
a9b0d25c01 | ||
|
|
4c7fc8a70a | ||
|
|
f8e9ea45ba | ||
|
|
1b6c14be8d | ||
|
|
a5bb925a3d | ||
|
|
6a14849381 | ||
|
|
f93dbb8f49 | ||
|
|
f83b19cecf | ||
|
|
1e09be19f5 | ||
|
|
c1de0bc28c | ||
|
|
1a5a0f5eca | ||
|
|
8b0cd60be9 | ||
|
|
2239a52e9b | ||
|
|
c9214ce6c0 | ||
|
|
bb9b5e6aff | ||
|
|
0327ecc5c1 | ||
|
|
ccdea1c4ad | ||
|
|
c22e1e71f0 | ||
|
|
aff63028d4 | ||
|
|
7a7b168af3 | ||
|
|
bdf6a1c70e | ||
|
|
d1e07434a1 | ||
|
|
c0d823f1d8 | ||
|
|
8d0947f07f | ||
|
|
161d8ef47a | ||
|
|
8c139206d7 | ||
|
|
e3a7fddddf | ||
|
|
923ba6f3bb | ||
|
|
729cd9284e | ||
|
|
140c5bfc3e | ||
|
|
a5f0faefc3 | ||
|
|
608f8de347 | ||
|
|
3e8a00d264 | ||
|
|
7d5a72c9e0 | ||
|
|
48d0f80a86 | ||
|
|
bd6c187fcd | ||
|
|
585837a3f0 | ||
|
|
b4e821c28d | ||
|
|
589ac1c5d4 | ||
|
|
c9e8b87c60 | ||
|
|
41f5158247 | ||
|
|
d2993474fb | ||
|
|
77e312fb99 | ||
|
|
cd6ef2958b | ||
|
|
40f3adc45f | ||
|
|
cfa2d4aaa8 | ||
|
|
bdefeaf6f9 | ||
|
|
0958c10f88 | ||
|
|
4adf412049 | ||
|
|
03332c340d | ||
|
|
63ecb56b51 | ||
|
|
cbd895a29c | ||
|
|
9cbe77904d | ||
|
|
a6350d5dd1 | ||
|
|
19b5b47b26 | ||
|
|
52a0b38379 | ||
|
|
a4fdbf0a88 | ||
|
|
3990e2d3e6 | ||
|
|
53af2dbb3f | ||
|
|
5bdd1cf837 | ||
|
|
5dfe3f414d | ||
|
|
324fa10918 | ||
|
|
aad06faf1f | ||
|
|
1a3c01154a | ||
|
|
df338f0552 | ||
|
|
e5d0e035d0 | ||
|
|
6d91a9fe6f | ||
|
|
935e398930 | ||
|
|
2afc7cbaaa | ||
|
|
1b5cf118e7 | ||
|
|
a3a4c0a906 | ||
|
|
3ae7debc17 | ||
|
|
dab53f4e41 | ||
|
|
9da7910fc9 | ||
|
|
3609eb25c9 | ||
|
|
55c75d2c87 | ||
|
|
ded828dfc9 | ||
|
|
c69c70cf5f | ||
|
|
7cd79714fa | ||
|
|
87af905018 | ||
|
|
7205a93751 | ||
|
|
f8097a428c | ||
|
|
228988ca2b | ||
|
|
d2b0b019ec | ||
|
|
a5d74c5e96 | ||
|
|
3e7e077fad | ||
|
|
dbb03ae2d7 | ||
|
|
06d2c5357b | ||
|
|
c8e7530e37 | ||
|
|
cdffaa1598 | ||
|
|
b836d2497d | ||
|
|
bdd94f053c | ||
|
|
f88c3ae417 | ||
|
|
b09ac19e61 | ||
|
|
826dc7d5a6 | ||
|
|
fa5a2b6a85 | ||
|
|
8b8120cfb7 | ||
|
|
e6a3b59229 | ||
|
|
0eb0b1e1c9 | ||
|
|
1becd2f788 | ||
|
|
7c0b93f815 | ||
|
|
fa852c7dbe | ||
|
|
73ca2119ed | ||
|
|
86dbb859b7 | ||
|
|
e1e370999e | ||
|
|
038c708a0a | ||
|
|
c71bc25090 | ||
|
|
52fe86b56c | ||
|
|
004ebfdaee | ||
|
|
d0edd44a69 | ||
|
|
ea5e837bd6 | ||
|
|
bbf52f3cea | ||
|
|
d788b12a8e | ||
|
|
8a9320c4ef | ||
|
|
5cc9bd7702 | ||
|
|
aa7e2376ec | ||
|
|
ff211a9508 | ||
|
|
930895a218 | ||
|
|
3452e18da1 | ||
|
|
b5d4b5a21c | ||
|
|
2dc798d539 | ||
|
|
805d52987f | ||
|
|
c2467b7b38 | ||
|
|
22b8cfd0ba | ||
|
|
10a55f16cc | ||
|
|
8e4451d1ab | ||
|
|
0b5c6350ae | ||
|
|
48cd56acc2 | ||
|
|
71e16bfac3 | ||
|
|
b7c579adf9 | ||
|
|
461fa6a88a | ||
|
|
dfee46604a | ||
|
|
a7c9827ad4 | ||
|
|
f580bee32c | ||
|
|
de9d859f4a | ||
|
|
3aaa0172d5 | ||
|
|
29e7eda887 | ||
|
|
7cb32a3680 | ||
|
|
a4d4ab1df9 | ||
|
|
4bef176e9b | ||
|
|
d2de8a87bf | ||
|
|
12cad7c393 | ||
|
|
be1238cc95 | ||
|
|
67378c7dea | ||
|
|
c13039396c | ||
|
|
e940632d93 | ||
|
|
6db25aa7fa | ||
|
|
0012f39384 | ||
|
|
0e7e5b59ae | ||
|
|
d459da1378 | ||
|
|
3063369322 | ||
|
|
a90ad62fc0 | ||
|
|
cd01a1eb09 | ||
|
|
090a769bf6 | ||
|
|
014846cf31 | ||
|
|
b83cb2dbf5 | ||
|
|
112b7f6571 | ||
|
|
68a878264c | ||
|
|
a771f168eb | ||
|
|
79b5b79de1 | ||
|
|
7cc8380330 | ||
|
|
e91df31f8c | ||
|
|
663b2c9c5e | ||
|
|
801467e565 | ||
|
|
447d2b6f93 | ||
|
|
9ccf39b27f | ||
|
|
d4af8dd89a | ||
|
|
932f31e37b | ||
|
|
0878db4e17 | ||
|
|
037586d7bb | ||
|
|
cb7cf40b5e | ||
|
|
3632412c48 | ||
|
|
4b858648e5 | ||
|
|
85bebebb36 | ||
|
|
980be9e0e8 | ||
|
|
ad1027455a | ||
|
|
9dc238187f | ||
|
|
73d45f3bf0 | ||
|
|
96400234a8 | ||
|
|
2e5f321583 | ||
|
|
5a9b29b73a | ||
|
|
1b2260132b | ||
|
|
1479468730 | ||
|
|
f0b7afd7cc | ||
|
|
870d26f9d8 | ||
|
|
f6d465667a | ||
|
|
aaae30cb84 | ||
|
|
fbb9396813 | ||
|
|
b9a4abce0e | ||
|
|
d0cc5c0fc7 | ||
|
|
b7c2bfbcde | ||
|
|
8be2a55ccc | ||
|
|
81270f3142 | ||
|
|
eb0d006168 | ||
|
|
a47bda026b | ||
|
|
5129d0da45 | ||
|
|
b86ec2ffcf | ||
|
|
20eb4352fb | ||
|
|
e76d8eb046 | ||
|
|
c8fefc4434 | ||
|
|
2c18d67769 | ||
|
|
428771f1d7 | ||
|
|
038148bf06 | ||
|
|
6786734d95 | ||
|
|
1446254a03 | ||
|
|
3bcd76bd4e | ||
|
|
0bcece4585 | ||
|
|
035ab590ec | ||
|
|
8e6e57de86 | ||
|
|
4c1026436f | ||
|
|
9f97bab717 | ||
|
|
76518d4c59 | ||
|
|
eba7d3b172 | ||
|
|
b8311caa6b | ||
|
|
5b044a93c1 | ||
|
|
f009d36811 | ||
|
|
f43260bd58 | ||
|
|
cf384795d2 | ||
|
|
423cc1685c | ||
|
|
0a23a5ef50 | ||
|
|
629d608d4f | ||
|
|
00be247913 | ||
|
|
5ed0cc293d | ||
|
|
5401cb7392 | ||
|
|
e26ae9899c | ||
|
|
48296c2ba6 | ||
|
|
b858fceb4f | ||
|
|
195fb1cf66 | ||
|
|
52acc23ecf | ||
|
|
0a34fc4bcd | ||
|
|
bec91aab7b | ||
|
|
5a049d41fd | ||
|
|
6f4dbf4fcd | ||
|
|
bf66c36ba4 | ||
|
|
0c10f47e85 | ||
|
|
1bad9a939f | ||
|
|
8d6504d6e3 | ||
|
|
04c187deb5 | ||
|
|
bc938ce630 | ||
|
|
e5f95a450d | ||
|
|
b31d38eef7 | ||
|
|
db402cb8af | ||
|
|
1af6550db7 | ||
|
|
7795f5207f | ||
|
|
a9b8a50c31 | ||
|
|
a9418fa1e7 | ||
|
|
08f48d27e8 | ||
|
|
25a66da4ca | ||
|
|
ff61bc9e7c | ||
|
|
3e8f4ba018 | ||
|
|
f9eb6a31bd | ||
|
|
4f8cac731b | ||
|
|
3e496f6625 | ||
|
|
2d62f9c4c5 | ||
|
|
78811b8816 | ||
|
|
e38cd5149a | ||
|
|
dc2a1e270a | ||
|
|
44ab50553d | ||
|
|
7c683c368d | ||
|
|
62ca7a9b60 | ||
|
|
632e36ab44 | ||
|
|
0057c89eaa | ||
|
|
9e9a55df46 | ||
|
|
9463238490 | ||
|
|
b7ff2ecffb | ||
|
|
fad89f1c3b | ||
|
|
5063eefa96 | ||
|
|
1b34fa26ac | ||
|
|
25827c12a3 | ||
|
|
cb32fd15ee | ||
|
|
d6dcab443d | ||
|
|
c32fec774f | ||
|
|
ddac4686a7 | ||
|
|
2865865382 | ||
|
|
7ce835e878 | ||
|
|
7e0fdbbe99 | ||
|
|
fd1f2ca1c6 | ||
|
|
a6a92f7b6b | ||
|
|
4f85f151fd | ||
|
|
478ae0715e | ||
|
|
714eb6dcc5 | ||
|
|
89942ed92a | ||
|
|
6ed9251f44 | ||
|
|
2c32a721fc | ||
|
|
08aaae7999 | ||
|
|
78bad361ab | ||
|
|
2005c89baa | ||
|
|
8c6aa9db31 | ||
|
|
58eef983e2 | ||
|
|
390b192f0a | ||
|
|
7b40859eff | ||
|
|
d0126f0fa0 | ||
|
|
0c034ad7de | ||
|
|
aeeceb7d0b | ||
|
|
d5f16ce272 | ||
|
|
c89362f6a2 | ||
|
|
8a029159cd | ||
|
|
891ebd0cb1 | ||
|
|
382509d778 | ||
|
|
f9ee8978ff | ||
|
|
e71c2df39d | ||
|
|
cfc7865f82 | ||
|
|
cf6606065d | ||
|
|
9feb92df1b | ||
|
|
be26810cd7 | ||
|
|
df79b6c238 | ||
|
|
82c86ed2f7 | ||
|
|
9077563dac | ||
|
|
8d15f44b33 | ||
|
|
b3fbada10e | ||
|
|
31cdd7bdd2 | ||
|
|
c464e90d5d | ||
|
|
670d2b191c | ||
|
|
7bddb87306 | ||
|
|
2025f02105 | ||
|
|
1078626eea | ||
|
|
16c6b44f55 | ||
|
|
6b3b06df25 | ||
|
|
e3b3b0cda7 | ||
|
|
bb2cc196a6 | ||
|
|
d3bc96a201 | ||
|
|
11ba6e45ab | ||
|
|
a742501a4f | ||
|
|
70346028c5 | ||
|
|
3359458175 | ||
|
|
6784301376 | ||
|
|
51d19e7c31 | ||
|
|
0652870204 | ||
|
|
67dd6754a6 | ||
|
|
34274ec391 | ||
|
|
28feea0447 | ||
|
|
53267e283b | ||
|
|
15ed963a29 | ||
|
|
c652d0b183 | ||
|
|
22c55cbcfa | ||
|
|
c24d89dd34 | ||
|
|
f10ea1fb9b | ||
|
|
eb72cc9f04 | ||
|
|
ee288340b0 | ||
|
|
a69248299d | ||
|
|
caa83d20f7 | ||
|
|
486d48e4f8 | ||
|
|
8480674708 | ||
|
|
7c62574e59 | ||
|
|
22584fb2d1 | ||
|
|
90ac9165e2 | ||
|
|
bcb69a54b2 | ||
|
|
f93cb262ba | ||
|
|
67949bb5b7 | ||
|
|
e56da4eb46 | ||
|
|
f7fdfe52bc | ||
|
|
7de0ff337b | ||
|
|
e1c0a917fa | ||
|
|
ead180aa60 | ||
|
|
58d367d704 | ||
|
|
a1ab6c28c1 | ||
|
|
59e46f09b7 | ||
|
|
7766076042 | ||
|
|
b96864c7e6 | ||
|
|
79513f06a4 | ||
|
|
00ff53499a | ||
|
|
142b44d4be | ||
|
|
7f28489c70 | ||
|
|
a58c12db0b | ||
|
|
12e1be2626 | ||
|
|
f81674232e | ||
|
|
eb086b0e3f | ||
|
|
b6b9085773 | ||
|
|
241989c5fa | ||
|
|
f944573b3c | ||
|
|
c66b155dcb | ||
|
|
5662867730 | ||
|
|
dbecf0fa50 | ||
|
|
62cb532460 | ||
|
|
f9bc682115 | ||
|
|
6cf0c5cd6d | ||
|
|
8a2a76da1e | ||
|
|
e07484f057 | ||
|
|
0070fce286 | ||
|
|
a2e8e3090c | ||
|
|
0ac68def49 | ||
|
|
def364fe28 | ||
|
|
c06707c891 | ||
|
|
d7a8d385d8 | ||
|
|
3567c43fb5 | ||
|
|
aaaeb66cc8 | ||
|
|
4ed76a15ff | ||
|
|
b5837d1271 | ||
|
|
e4c3b1c2bd | ||
|
|
ea916fd7e1 | ||
|
|
4bee8dc37f | ||
|
|
8b01d05146 | ||
|
|
376e564cff | ||
|
|
caf02d1841 | ||
|
|
6cf73fad13 | ||
|
|
cfe660ab35 | ||
|
|
8eaf76394c | ||
|
|
a692adefd7 | ||
|
|
e05f1c37ad | ||
|
|
923fcc3b3d | ||
|
|
c50b9bc4b4 | ||
|
|
e1f95ceb54 | ||
|
|
eb77495d5f | ||
|
|
270d602a26 | ||
|
|
dd41ee68de | ||
|
|
46dc40f3f1 | ||
|
|
7c7af2e102 | ||
|
|
36189b8c3b | ||
|
|
cde802b16c | ||
|
|
1500e5f588 | ||
|
|
fbe91fb245 | ||
|
|
321e7d6977 | ||
|
|
56488a4ac9 | ||
|
|
4a75f44d47 | ||
|
|
deb4b03200 | ||
|
|
df94c906da | ||
|
|
4d50d9daa4 | ||
|
|
0624bdc72d | ||
|
|
ccec6e53c0 | ||
|
|
68d411918d | ||
|
|
f14d47bfe6 | ||
|
|
0af452720e | ||
|
|
db8e6fe7a7 | ||
|
|
631d7d0ce7 | ||
|
|
ed345e5b65 | ||
|
|
d3a66af7d6 | ||
|
|
52deff06ba | ||
|
|
838cbe1840 | ||
|
|
70804e2ba6 | ||
|
|
07c925223b | ||
|
|
c2cbc62be6 | ||
|
|
9d74d42f2a | ||
|
|
a36f25c7b2 | ||
|
|
86fb5412fa | ||
|
|
c5b9ab3aca | ||
|
|
bf6f43ec3a | ||
|
|
36159c2bd4 | ||
|
|
72e1d03860 | ||
|
|
ed1b8f2545 | ||
|
|
1ad0f24ecd | ||
|
|
586440622b | ||
|
|
6231b07d2a | ||
|
|
1dcf5e4f85 | ||
|
|
9ba8f4795c | ||
|
|
951fe3491e | ||
|
|
6ae1f1b02c | ||
|
|
673e84920b | ||
|
|
d1e1c14dc3 | ||
|
|
11db3151ae | ||
|
|
65f81aca0f | ||
|
|
187216096d | ||
|
|
3f9b699eef | ||
|
|
5f8564c655 | ||
|
|
cbe0000d23 | ||
|
|
0e278d2299 | ||
|
|
21d725daa5 | ||
|
|
247e90b3d0 |
|
|
@ -1,26 +1,26 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
# Pull all the submodules except llvm
|
||||
# Pull all the submodules except some
|
||||
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
||||
# shellcheck disable=SC2046
|
||||
git submodule -q update --init --depth 1 $(awk '/path/ && !/llvm/ { print $3 }' .gitmodules)
|
||||
|
||||
# Prefer newer Clang than in base system (see also .ci/install-freebsd.sh)
|
||||
# libc++ isn't in llvm* packages, so download manually
|
||||
fetch https://github.com/llvm/llvm-project/releases/download/llvmorg-11.0.0/libcxx-11.0.0.src.tar.xz
|
||||
tar xf libcxx-11.0.0.src.tar.xz
|
||||
export CC=clang11 CXX=clang++11
|
||||
export CXXFLAGS="$CXXFLAGS -nostdinc++ -isystem $PWD/libcxx-11.0.0.src/include"
|
||||
git config --global --add safe.directory .
|
||||
git submodule -q update --init --depth 1 $(awk '/path/ && !/llvm/ && !/opencv/ && !/libpng/ && !/libsdl-org/ && !/curl/ && !/zlib/ && !/libusb/ && !/feralinteractive/ { print $3 }' .gitmodules)
|
||||
|
||||
CONFIGURE_ARGS="
|
||||
-DWITH_LLVM=OFF
|
||||
-DWITH_LLVM=ON
|
||||
-DUSE_SDL=OFF
|
||||
-DUSE_PRECOMPILED_HEADERS=OFF
|
||||
-DUSE_NATIVE_INSTRUCTIONS=OFF
|
||||
-DUSE_SYSTEM_FFMPEG=ON
|
||||
-DUSE_SYSTEM_CURL=ON
|
||||
-DUSE_SYSTEM_LIBPNG=ON
|
||||
-DUSE_SYSTEM_LIBUSB=ON
|
||||
-DUSE_SYSTEM_OPENCV=ON
|
||||
"
|
||||
|
||||
# base Clang workaround (missing clang-scan-deps)
|
||||
CONFIGURE_ARGS="$CONFIGURE_ARGS -DCMAKE_CXX_SCAN_FOR_MODULES=OFF"
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
cmake -B build -G Ninja $CONFIGURE_ARGS
|
||||
cmake --build build
|
||||
|
|
|
|||
55
.ci/build-linux-aarch64.sh
Executable file
55
.ci/build-linux-aarch64.sh
Executable file
|
|
@ -0,0 +1,55 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
cd rpcs3 || exit 1
|
||||
|
||||
shellcheck .ci/*.sh
|
||||
|
||||
git config --global --add safe.directory '*'
|
||||
|
||||
# Pull all the submodules except some
|
||||
# shellcheck disable=SC2046
|
||||
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ && !/libsdl-org/ && !/curl/ && !/zlib/ { print $3 }' .gitmodules)
|
||||
|
||||
mkdir build && cd build || exit 1
|
||||
|
||||
if [ "$COMPILER" = "gcc" ]; then
|
||||
# These are set in the dockerfile
|
||||
export CC="${GCC_BINARY}"
|
||||
export CXX="${GXX_BINARY}"
|
||||
export LINKER=gold
|
||||
else
|
||||
export CC="${CLANG_BINARY}"
|
||||
export CXX="${CLANGXX_BINARY}"
|
||||
export LINKER="${LLD_BINARY}"
|
||||
fi
|
||||
|
||||
export LINKER_FLAG="-fuse-ld=${LINKER}"
|
||||
|
||||
cmake .. \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DUSE_NATIVE_INSTRUCTIONS=OFF \
|
||||
-DUSE_PRECOMPILED_HEADERS=OFF \
|
||||
-DCMAKE_EXE_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||
-DCMAKE_MODULE_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||
-DCMAKE_SHARED_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||
-DUSE_SYSTEM_CURL=ON \
|
||||
-DUSE_SDL=ON \
|
||||
-DUSE_SYSTEM_SDL=ON \
|
||||
-DUSE_SYSTEM_FFMPEG=OFF \
|
||||
-DUSE_SYSTEM_OPENCV=ON \
|
||||
-DUSE_DISCORD_RPC=ON \
|
||||
-DOpenGL_GL_PREFERENCE=LEGACY \
|
||||
-DLLVM_DIR=/opt/llvm/lib/cmake/llvm \
|
||||
-DSTATIC_LINK_LLVM=ON \
|
||||
-DBUILD_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
|
||||
-DRUN_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
|
||||
-G Ninja
|
||||
|
||||
ninja; build_status=$?;
|
||||
|
||||
cd ..
|
||||
|
||||
# If it compiled succesfully let's deploy.
|
||||
if [ "$build_status" -eq 0 ]; then
|
||||
.ci/deploy-linux.sh "aarch64"
|
||||
fi
|
||||
|
|
@ -1,65 +1,66 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
# Setup Qt variables
|
||||
export QT_BASE_DIR=/opt/qt${QTVERMIN}
|
||||
export PATH=$QT_BASE_DIR/bin:$PATH
|
||||
export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib
|
||||
|
||||
cd rpcs3 || exit 1
|
||||
|
||||
# Pull all the submodules except llvm, since it is built separately and we just download that build
|
||||
shellcheck .ci/*.sh
|
||||
|
||||
git config --global --add safe.directory '*'
|
||||
|
||||
# Pull all the submodules except some
|
||||
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
||||
# shellcheck disable=SC2046
|
||||
git submodule -q update --init $(awk '/path/ && !/llvm/ { print $3 }' .gitmodules)
|
||||
|
||||
# Download pre-compiled llvm libs
|
||||
curl -sLO https://github.com/RPCS3/llvm-mirror/releases/download/custom-build/llvmlibs-linux.tar.gz
|
||||
mkdir llvmlibs
|
||||
tar -xzf ./llvmlibs-linux.tar.gz -C llvmlibs
|
||||
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ && !/libsdl-org/ && !/curl/ && !/zlib/ { print $3 }' .gitmodules)
|
||||
|
||||
mkdir build && cd build || exit 1
|
||||
|
||||
if [ "$COMPILER" = "gcc" ]; then
|
||||
# These are set in the dockerfile
|
||||
export CC=${GCC_BINARY}
|
||||
export CXX=${GXX_BINARY}
|
||||
export CC="${GCC_BINARY}"
|
||||
export CXX="${GXX_BINARY}"
|
||||
export LINKER=gold
|
||||
# We need to set the following variables for LTO to link properly
|
||||
export AR=/usr/bin/gcc-ar-$GCCVER
|
||||
export RANLIB=/usr/bin/gcc-ranlib-$GCCVER
|
||||
export AR=/usr/bin/gcc-ar-"$GCCVER"
|
||||
export RANLIB=/usr/bin/gcc-ranlib-"$GCCVER"
|
||||
export CFLAGS="-fuse-linker-plugin"
|
||||
else
|
||||
export CC=${CLANG_BINARY}
|
||||
export CXX=${CLANGXX_BINARY}
|
||||
export CC="${CLANG_BINARY}"
|
||||
export CXX="${CLANGXX_BINARY}"
|
||||
export LINKER=lld
|
||||
export AR=/usr/bin/llvm-ar-$LLVMVER
|
||||
export RANLIB=/usr/bin/llvm-ranlib-$LLVMVER
|
||||
export AR=/usr/bin/llvm-ar-"$LLVMVER"
|
||||
export RANLIB=/usr/bin/llvm-ranlib-"$LLVMVER"
|
||||
fi
|
||||
|
||||
export CFLAGS="$CFLAGS -fuse-ld=${LINKER}"
|
||||
export LINKER_FLAG="-fuse-ld=${LINKER}"
|
||||
|
||||
cmake .. \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DBUILD_LLVM_SUBMODULE=OFF \
|
||||
-DLLVM_DIR=llvmlibs/lib/cmake/llvm/ \
|
||||
-DUSE_NATIVE_INSTRUCTIONS=OFF \
|
||||
-DUSE_PRECOMPILED_HEADERS=OFF \
|
||||
-DCMAKE_C_FLAGS="$CFLAGS" \
|
||||
-DCMAKE_CXX_FLAGS="$CFLAGS" \
|
||||
-DCMAKE_EXE_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||
-DCMAKE_MODULE_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||
-DCMAKE_SHARED_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||
-DCMAKE_AR="$AR" \
|
||||
-DCMAKE_RANLIB="$RANLIB" \
|
||||
-DUSE_SYSTEM_CURL=ON \
|
||||
-DUSE_SDL=ON \
|
||||
-DUSE_SYSTEM_SDL=ON \
|
||||
-DUSE_SYSTEM_FFMPEG=OFF \
|
||||
-DUSE_SYSTEM_OPENCV=ON \
|
||||
-DUSE_DISCORD_RPC=ON \
|
||||
-DOpenGL_GL_PREFERENCE=LEGACY \
|
||||
-DLLVM_DIR=/opt/llvm/lib/cmake/llvm \
|
||||
-DSTATIC_LINK_LLVM=ON \
|
||||
-DBUILD_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
|
||||
-DRUN_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
|
||||
-G Ninja
|
||||
|
||||
ninja; build_status=$?;
|
||||
|
||||
cd ..
|
||||
|
||||
# If it compiled succesfully let's deploy depending on the build pipeline (Azure Pipelines).
|
||||
# Azure publishes PRs as artifacts only.
|
||||
{ [ "$IS_AZURE" = "true" ];
|
||||
} && SHOULD_DEPLOY="true" || SHOULD_DEPLOY="false"
|
||||
|
||||
if [ "$build_status" -eq 0 ] && [ "$SHOULD_DEPLOY" = "true" ]; then
|
||||
.ci/deploy-linux.sh
|
||||
# If it compiled succesfully let's deploy.
|
||||
if [ "$build_status" -eq 0 ]; then
|
||||
.ci/deploy-linux.sh "x86_64"
|
||||
fi
|
||||
|
|
|
|||
125
.ci/build-mac-arm64.sh
Executable file
125
.ci/build-mac-arm64.sh
Executable file
|
|
@ -0,0 +1,125 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
||||
export HOMEBREW_NO_ENV_HINTS=1
|
||||
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||
|
||||
brew install -f --overwrite --quiet pipenv googletest opencv@4 ffmpeg@5 "llvm@$LLVM_COMPILER_VER" glew sdl3 vulkan-headers
|
||||
brew unlink --quiet ffmpeg qtbase qtsvg qtdeclarative
|
||||
brew link -f --quiet "llvm@$LLVM_COMPILER_VER" ffmpeg@5
|
||||
|
||||
# moltenvk based on commit for 1.4.0 release
|
||||
export HOMEBREW_DEVELOPER=1 # Prevents blocking of local formulae
|
||||
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/ea2bec5f1f4384e188d7fc0702ab21a20a2ced08/Formula/m/molten-vk.rb
|
||||
/opt/homebrew/bin/brew install -f --overwrite --formula --quiet ./molten-vk.rb
|
||||
export HOMEBREW_DEVELOPER=0
|
||||
|
||||
export CXX=clang++
|
||||
export CC=clang
|
||||
|
||||
export BREW_PATH;
|
||||
BREW_PATH="$(brew --prefix)"
|
||||
export BREW_BIN="/opt/homebrew/bin"
|
||||
export BREW_SBIN="/opt/homebrew/sbin"
|
||||
export CMAKE_EXTRA_OPTS='-DLLVM_TARGETS_TO_BUILD=arm64'
|
||||
|
||||
export WORKDIR;
|
||||
WORKDIR="$(pwd)"
|
||||
|
||||
# Setup ccache
|
||||
if [ ! -d "$CCACHE_DIR" ]; then
|
||||
mkdir -p "$CCACHE_DIR"
|
||||
fi
|
||||
|
||||
# Get Qt
|
||||
if [ ! -d "/tmp/Qt/$QT_VER" ]; then
|
||||
mkdir -p "/tmp/Qt"
|
||||
git clone https://github.com/engnr/qt-downloader.git
|
||||
cd qt-downloader
|
||||
git checkout f52efee0f18668c6d6de2dec0234b8c4bc54c597
|
||||
sed -i '' "s/'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/'qt{0}_{0}{1}{2}'.format(major, minor, patch), 'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/g" qt-downloader
|
||||
sed -i '' "s/'{}\/{}\/qt{}_{}\/'/'{0}\/{1}\/qt{2}_{3}\/qt{2}_{3}\/'/g" qt-downloader
|
||||
cd "/tmp/Qt"
|
||||
"$BREW_PATH/bin/pipenv" run pip3 uninstall py7zr requests semantic_version lxml
|
||||
"$BREW_PATH/bin/pipenv" run pip3 install py7zr requests semantic_version lxml --no-cache
|
||||
mkdir -p "$QT_VER/macos" ; ln -s "macos" "$QT_VER/clang_64"
|
||||
sed -i '' 's/args\.version \/ derive_toolchain_dir(args) \/ //g' "$WORKDIR/qt-downloader/qt-downloader"
|
||||
"$BREW_PATH/bin/pipenv" run "$WORKDIR/qt-downloader/qt-downloader" macos desktop "$QT_VER" clang_64 --opensource --addons qtmultimedia qtimageformats -o "$QT_VER/clang_64"
|
||||
fi
|
||||
|
||||
cd "$WORKDIR"
|
||||
ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER"
|
||||
|
||||
export Qt6_DIR="$WORKDIR/qt-downloader/$QT_VER/clang_64/lib/cmake/Qt$QT_VER_MAIN"
|
||||
export SDL3_DIR="$BREW_PATH/opt/sdl3/lib/cmake/SDL3"
|
||||
|
||||
export PATH="$BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/bin:$WORKDIR/qt-downloader/$QT_VER/clang_64/bin:$BREW_BIN:$BREW_SBIN:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:$PATH"
|
||||
export LDFLAGS="-L$BREW_PATH/lib $BREW_PATH/opt/ffmpeg@5/lib/libavcodec.dylib $BREW_PATH/opt/ffmpeg@5/lib/libavformat.dylib $BREW_PATH/opt/ffmpeg@5/lib/libavutil.dylib $BREW_PATH/opt/ffmpeg@5/lib/libswscale.dylib $BREW_PATH/opt/ffmpeg@5/lib/libswresample.dylib $BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++.1.dylib $BREW_PATH/lib/libSDL3.dylib $BREW_PATH/lib/libGLEW.dylib $BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/unwind/libunwind.1.dylib -Wl,-rpath,$BREW_PATH/lib"
|
||||
export CPPFLAGS="-I$BREW_PATH/include -I$BREW_PATH/include -no-pie -D__MAC_OS_X_VERSION_MIN_REQUIRED=140000"
|
||||
export CFLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=140000"
|
||||
export LIBRARY_PATH="$BREW_PATH/lib"
|
||||
export LD_LIBRARY_PATH="$BREW_PATH/lib"
|
||||
|
||||
export VULKAN_SDK
|
||||
VULKAN_SDK="$BREW_PATH/opt/molten-vk"
|
||||
ln -s "$VULKAN_SDK/lib/libMoltenVK.dylib" "$VULKAN_SDK/lib/libvulkan.dylib" || true
|
||||
export VK_ICD_FILENAMES="$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json"
|
||||
|
||||
export LLVM_DIR
|
||||
LLVM_DIR="$BREW_PATH/opt/llvm@$LLVM_COMPILER_VER"
|
||||
# exclude ffmpeg, LLVM, opencv, and sdl from submodule update
|
||||
# shellcheck disable=SC2046
|
||||
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/ffmpeg/ && !/llvm/ && !/opencv/ && !/SDL/ && !/feralinteractive/ { print $3 }' .gitmodules)
|
||||
|
||||
# 3rdparty fixes
|
||||
sed -i '' "s/extern const double NSAppKitVersionNumber;/const double NSAppKitVersionNumber = 1343;/g" 3rdparty/hidapi/hidapi/mac/hid.c
|
||||
|
||||
mkdir build && cd build || exit 1
|
||||
|
||||
export MACOSX_DEPLOYMENT_TARGET=14.0
|
||||
|
||||
"$BREW_PATH/bin/cmake" .. \
|
||||
-DBUILD_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
|
||||
-DRUN_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
|
||||
-DUSE_SDL=ON \
|
||||
-DUSE_DISCORD_RPC=ON \
|
||||
-DUSE_VULKAN=ON \
|
||||
-DUSE_ALSA=OFF \
|
||||
-DUSE_PULSE=OFF \
|
||||
-DUSE_AUDIOUNIT=ON \
|
||||
-DUSE_SYSTEM_FFMPEG=ON \
|
||||
-DLLVM_CCACHE_BUILD=OFF \
|
||||
-DLLVM_BUILD_RUNTIME=OFF \
|
||||
-DLLVM_BUILD_TOOLS=OFF \
|
||||
-DLLVM_INCLUDE_DOCS=OFF \
|
||||
-DLLVM_INCLUDE_EXAMPLES=OFF \
|
||||
-DLLVM_INCLUDE_TESTS=OFF \
|
||||
-DLLVM_INCLUDE_TOOLS=OFF \
|
||||
-DLLVM_INCLUDE_UTILS=OFF \
|
||||
-DLLVM_USE_PERF=OFF \
|
||||
-DLLVM_ENABLE_Z3_SOLVER=OFF \
|
||||
-DUSE_NATIVE_INSTRUCTIONS=OFF \
|
||||
-DUSE_SYSTEM_MVK=ON \
|
||||
-DUSE_SYSTEM_FAUDIO=OFF \
|
||||
-DUSE_SYSTEM_SDL=ON \
|
||||
-DUSE_SYSTEM_OPENCV=ON \
|
||||
"$CMAKE_EXTRA_OPTS" \
|
||||
-DLLVM_TARGET_ARCH=arm64 \
|
||||
-DCMAKE_OSX_ARCHITECTURES=arm64 \
|
||||
-DCMAKE_IGNORE_PATH="$BREW_PATH/lib" \
|
||||
-DCMAKE_IGNORE_PREFIX_PATH=/opt/homebrew/opt \
|
||||
-DCMAKE_CXX_FLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=140000" \
|
||||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
||||
-DCMAKE_OSX_SYSROOT="$(xcrun --sdk macosx --show-sdk-path)" \
|
||||
-G Ninja
|
||||
|
||||
"$BREW_PATH/bin/ninja"; build_status=$?;
|
||||
|
||||
cd ..
|
||||
|
||||
# If it compiled succesfully let's deploy.
|
||||
if [ "$build_status" -eq 0 ]; then
|
||||
.ci/deploy-mac-arm64.sh
|
||||
fi
|
||||
140
.ci/build-mac.sh
140
.ci/build-mac.sh
|
|
@ -1,27 +1,127 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
export CCACHE_SLOPPINESS=pch_defines,time_macros
|
||||
export CMAKE_PREFIX_PATH=/usr/local/opt/qt5/
|
||||
export PATH="/usr/local/opt/ccache/libexec:$PATH"
|
||||
# shellcheck disable=SC2086
|
||||
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
||||
export HOMEBREW_NO_ENV_HINTS=1
|
||||
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||
|
||||
# Setup vulkan and gfx-rs/portability
|
||||
curl -sLO https://github.com/gfx-rs/portability/releases/download/latest/gfx-portability-macos-latest.zip
|
||||
unzip -: gfx-portability-macos-latest.zip
|
||||
curl -sLO https://github.com/KhronosGroup/Vulkan-Headers/archive/sdk-1.1.106.0.zip
|
||||
unzip -: sdk-*.zip
|
||||
mkdir vulkan-sdk
|
||||
ln -s "${PWD}"/Vulkan-Headers*/include vulkan-sdk/include
|
||||
mkdir vulkan-sdk/lib
|
||||
cp target/release/libportability.dylib vulkan-sdk/lib/libVulkan.dylib
|
||||
# Let macdeployqt locate and install Vulkan library
|
||||
install_name_tool -id "${PWD}"/vulkan-sdk/lib/libVulkan.dylib vulkan-sdk/lib/libVulkan.dylib
|
||||
export VULKAN_SDK="${PWD}/vulkan-sdk"
|
||||
brew install -f --overwrite --quiet ccache pipenv "llvm@$LLVM_COMPILER_VER"
|
||||
brew link -f --overwrite --quiet "llvm@$LLVM_COMPILER_VER"
|
||||
# shellcheck disable=SC3009
|
||||
rm /usr/local/bin/{idle3.14,pip3.14,pydoc3.14,python3.14,python3.14-config} && \
|
||||
rm /usr/local/bin/{idle3,pip3,pydoc3,python3,python3-config}
|
||||
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
arch -x86_64 /usr/local/bin/brew install -f --overwrite --quiet opencv@4 ffmpeg@5 "llvm@$LLVM_COMPILER_VER" glew sdl3 vulkan-headers
|
||||
arch -x86_64 /usr/local/bin/brew unlink --quiet ffmpeg qtbase qtsvg qtdeclarative
|
||||
arch -x86_64 /usr/local/bin/brew link -f --overwrite --quiet "llvm@$LLVM_COMPILER_VER" ffmpeg@5
|
||||
|
||||
# Pull all the submodules except llvm
|
||||
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
||||
# moltenvk based on commit for 1.4.0 release
|
||||
export HOMEBREW_DEVELOPER=1 # Prevents blocking of local formulae
|
||||
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/ea2bec5f1f4384e188d7fc0702ab21a20a2ced08/Formula/m/molten-vk.rb
|
||||
arch -x86_64 /usr/local/bin/brew install -f --overwrite --formula --quiet ./molten-vk.rb
|
||||
export HOMEBREW_DEVELOPER=0
|
||||
export CXX=clang++
|
||||
export CC=clang
|
||||
|
||||
export BREW_X64_PATH;
|
||||
BREW_X64_PATH="$("/usr/local/bin/brew" --prefix)"
|
||||
export BREW_BIN="/usr/local/bin"
|
||||
export BREW_SBIN="/usr/local/sbin"
|
||||
export CMAKE_EXTRA_OPTS='-DLLVM_TARGETS_TO_BUILD=X86'
|
||||
|
||||
export WORKDIR;
|
||||
WORKDIR="$(pwd)"
|
||||
|
||||
# Get Qt
|
||||
if [ ! -d "/tmp/Qt/$QT_VER" ]; then
|
||||
mkdir -p "/tmp/Qt"
|
||||
git clone https://github.com/engnr/qt-downloader.git
|
||||
cd qt-downloader
|
||||
git checkout f52efee0f18668c6d6de2dec0234b8c4bc54c597
|
||||
sed -i '' "s/'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/'qt{0}_{0}{1}{2}'.format(major, minor, patch), 'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/g" qt-downloader
|
||||
sed -i '' "s/'{}\/{}\/qt{}_{}\/'/'{0}\/{1}\/qt{2}_{3}\/qt{2}_{3}\/'/g" qt-downloader
|
||||
cd "/tmp/Qt"
|
||||
"/opt/homebrew/bin/pipenv" --python "/opt/homebrew/bin/python3" run pip3 install py7zr requests semantic_version lxml
|
||||
mkdir -p "$QT_VER/macos" ; ln -s "macos" "$QT_VER/clang_64"
|
||||
sed -i '' 's/args\.version \/ derive_toolchain_dir(args) \/ //g' "$WORKDIR/qt-downloader/qt-downloader"
|
||||
"/opt/homebrew/bin/pipenv" --python "/opt/homebrew/bin/python3" run "$WORKDIR/qt-downloader/qt-downloader" macos desktop "$QT_VER" clang_64 --opensource --addons qtmultimedia qtimageformats -o "$QT_VER/clang_64"
|
||||
fi
|
||||
|
||||
cd "$WORKDIR"
|
||||
ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER"
|
||||
|
||||
export Qt6_DIR="$WORKDIR/qt-downloader/$QT_VER/clang_64/lib/cmake/Qt$QT_VER_MAIN"
|
||||
export SDL3_DIR="$BREW_X64_PATH/opt/sdl3/lib/cmake/SDL3"
|
||||
|
||||
export PATH="/opt/homebrew/opt/llvm@$LLVM_COMPILER_VER/bin:$WORKDIR/qt-downloader/$QT_VER/clang_64/bin:$BREW_BIN:$BREW_SBIN:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:$PATH"
|
||||
# shellcheck disable=SC2155
|
||||
export LDFLAGS="-L$BREW_X64_PATH/lib -Wl,-rpath,$BREW_X64_PATH/lib,-L$(brew --prefix llvm)/lib/c++"
|
||||
export CPPFLAGS="-I$BREW_X64_PATH/include -msse -msse2 -mcx16 -no-pie -D__MAC_OS_X_VERSION_MIN_REQUIRED=140000"
|
||||
export CFLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=140000"
|
||||
export LIBRARY_PATH="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib:$BREW_X64_PATH/lib"
|
||||
export LD_LIBRARY_PATH="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib:$BREW_X64_PATH/lib"
|
||||
|
||||
export VULKAN_SDK
|
||||
VULKAN_SDK="$BREW_X64_PATH/opt/molten-vk"
|
||||
ln -s "$VULKAN_SDK/lib/libMoltenVK.dylib" "$VULKAN_SDK/lib/libvulkan.dylib"
|
||||
export VK_ICD_FILENAMES="$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json"
|
||||
|
||||
export LLVM_DIR
|
||||
LLVM_DIR="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER"
|
||||
# exclude ffmpeg, LLVM, opencv, and sdl from submodule update
|
||||
# shellcheck disable=SC2046
|
||||
git submodule -q update --init $(awk '/path/ && !/llvm/ { print $3 }' .gitmodules)
|
||||
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/ffmpeg/ && !/llvm/ && !/opencv/ && !/SDL/ && !/feralinteractive/ { print $3 }' .gitmodules)
|
||||
|
||||
# 3rdparty fixes
|
||||
sed -i '' "s/extern const double NSAppKitVersionNumber;/const double NSAppKitVersionNumber = 1343;/g" 3rdparty/hidapi/hidapi/mac/hid.c
|
||||
|
||||
mkdir build && cd build || exit 1
|
||||
cmake .. -DWITH_LLVM=OFF -DUSE_NATIVE_INSTRUCTIONS=OFF -G Ninja
|
||||
ninja
|
||||
|
||||
export MACOSX_DEPLOYMENT_TARGET=14.0
|
||||
|
||||
"/opt/homebrew/bin/cmake" .. \
|
||||
-DBUILD_RPCS3_TESTS=OFF \
|
||||
-DRUN_RPCS3_TESTS=OFF \
|
||||
-DUSE_SDL=ON \
|
||||
-DUSE_DISCORD_RPC=ON \
|
||||
-DUSE_VULKAN=ON \
|
||||
-DUSE_ALSA=OFF \
|
||||
-DUSE_PULSE=OFF \
|
||||
-DUSE_AUDIOUNIT=ON \
|
||||
-DUSE_SYSTEM_FFMPEG=ON \
|
||||
-DLLVM_CCACHE_BUILD=OFF \
|
||||
-DLLVM_BUILD_RUNTIME=OFF \
|
||||
-DLLVM_BUILD_TOOLS=OFF \
|
||||
-DLLVM_INCLUDE_DOCS=OFF \
|
||||
-DLLVM_INCLUDE_EXAMPLES=OFF \
|
||||
-DLLVM_INCLUDE_TESTS=OFF \
|
||||
-DLLVM_INCLUDE_TOOLS=OFF \
|
||||
-DLLVM_INCLUDE_UTILS=OFF \
|
||||
-DLLVM_USE_PERF=OFF \
|
||||
-DLLVM_ENABLE_Z3_SOLVER=OFF \
|
||||
-DUSE_NATIVE_INSTRUCTIONS=OFF \
|
||||
-DUSE_SYSTEM_MVK=ON \
|
||||
-DUSE_SYSTEM_FAUDIO=OFF \
|
||||
-DUSE_SYSTEM_SDL=ON \
|
||||
-DUSE_SYSTEM_OPENCV=ON \
|
||||
"$CMAKE_EXTRA_OPTS" \
|
||||
-DLLVM_TARGET_ARCH=X86_64 \
|
||||
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
|
||||
-DCMAKE_SYSTEM_PROCESSOR=x86_64 \
|
||||
-DCMAKE_TOOLCHAIN_FILE=buildfiles/cmake/TCDarwinX86_64.cmake \
|
||||
-DCMAKE_IGNORE_PATH="$BREW_X64_PATH/lib" \
|
||||
-DCMAKE_IGNORE_PREFIX_PATH=/usr/local/opt \
|
||||
-DCMAKE_CXX_FLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=140000" \
|
||||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
||||
-DCMAKE_OSX_SYSROOT="$(xcrun --sdk macosx --show-sdk-path)" \
|
||||
-G Ninja
|
||||
|
||||
"/opt/homebrew/bin/ninja"; build_status=$?;
|
||||
|
||||
cd ..
|
||||
|
||||
# If it compiled succesfully let's deploy.
|
||||
if [ "$build_status" -eq 0 ]; then
|
||||
.ci/deploy-mac.sh
|
||||
fi
|
||||
|
|
|
|||
61
.ci/build-windows-clang.sh
Normal file
61
.ci/build-windows-clang.sh
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
git config --global --add safe.directory '*'
|
||||
|
||||
# Pull all the submodules except some
|
||||
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
||||
# shellcheck disable=SC2046
|
||||
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ && !/ffmpeg/ && !/curl/ && !/FAudio/ && !/zlib/ { print $3 }' .gitmodules)
|
||||
|
||||
mkdir build && cd build || exit 1
|
||||
|
||||
export CC="clang"
|
||||
export CXX="clang++"
|
||||
export LINKER=lld
|
||||
export LINKER_FLAG="-fuse-ld=${LINKER}"
|
||||
|
||||
if [ -n "$LLVMVER" ]; then
|
||||
export AR="llvm-ar-$LLVMVER"
|
||||
export RANLIB="llvm-ranlib-$LLVMVER"
|
||||
else
|
||||
export AR="llvm-ar"
|
||||
export RANLIB="llvm-ranlib"
|
||||
fi
|
||||
|
||||
cmake .. \
|
||||
-DCMAKE_PREFIX_PATH=/clang64 \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DUSE_NATIVE_INSTRUCTIONS=OFF \
|
||||
-DUSE_PRECOMPILED_HEADERS=OFF \
|
||||
-DCMAKE_C_FLAGS="$CFLAGS" \
|
||||
-DCMAKE_CXX_FLAGS="$CFLAGS" \
|
||||
-DCMAKE_EXE_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||
-DCMAKE_MODULE_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||
-DCMAKE_SHARED_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||
-DCMAKE_AR="$AR" \
|
||||
-DCMAKE_RANLIB="$RANLIB" \
|
||||
-DUSE_SYSTEM_CURL=ON \
|
||||
-DUSE_FAUDIO=OFF \
|
||||
-DUSE_SDL=ON \
|
||||
-DUSE_SYSTEM_SDL=OFF \
|
||||
-DUSE_SYSTEM_FFMPEG=ON \
|
||||
-DUSE_SYSTEM_OPENCV=ON \
|
||||
-DUSE_SYSTEM_OPENAL=OFF \
|
||||
-DUSE_DISCORD_RPC=ON \
|
||||
-DOpenGL_GL_PREFERENCE=LEGACY \
|
||||
-DWITH_LLVM=ON \
|
||||
-DLLVM_DIR=/clang64/lib/cmake/llvm \
|
||||
-DVulkan_LIBRARY=/clang64/lib/libvulkan-1.dll.a \
|
||||
-DSTATIC_LINK_LLVM=ON \
|
||||
-DBUILD_RPCS3_TESTS=OFF \
|
||||
-DRUN_RPCS3_TESTS=OFF \
|
||||
-G Ninja
|
||||
|
||||
ninja; build_status=$?;
|
||||
|
||||
cd ..
|
||||
|
||||
# If it compiled succesfully let's deploy.
|
||||
if [ "$build_status" -eq 0 ]; then
|
||||
.ci/deploy-windows-clang.sh "x86_64"
|
||||
fi
|
||||
|
|
@ -2,58 +2,79 @@
|
|||
|
||||
cd build || exit 1
|
||||
|
||||
CPU_ARCH="${1:-x86_64}"
|
||||
|
||||
if [ "$DEPLOY_APPIMAGE" = "true" ]; then
|
||||
DESTDIR=appdir ninja install
|
||||
QT_APPIMAGE="linuxdeployqt.AppImage"
|
||||
DESTDIR=AppDir ninja install
|
||||
|
||||
curl -sL "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" > "$QT_APPIMAGE"
|
||||
chmod a+x "$QT_APPIMAGE"
|
||||
"./$QT_APPIMAGE" --appimage-extract
|
||||
./squashfs-root/AppRun ./appdir/usr/share/applications/*.desktop -bundle-non-qt-libs
|
||||
ls ./appdir/usr/lib/
|
||||
rm -r ./appdir/usr/share/doc
|
||||
rm ./appdir/usr/lib/libxcb*
|
||||
cp "$(readlink -f /lib/x86_64-linux-gnu/libnsl.so.1)" ./appdir/usr/lib/libnsl.so.1
|
||||
export PATH=/rpcs3/build/squashfs-root/usr/bin/:${PATH}
|
||||
curl -fsSLo /usr/bin/linuxdeploy "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-$CPU_ARCH.AppImage"
|
||||
chmod +x /usr/bin/linuxdeploy
|
||||
curl -fsSLo /usr/bin/linuxdeploy-plugin-qt "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-$CPU_ARCH.AppImage"
|
||||
chmod +x /usr/bin/linuxdeploy-plugin-qt
|
||||
curl -fsSLo linuxdeploy-plugin-checkrt.sh https://github.com/darealshinji/linuxdeploy-plugin-checkrt/releases/download/continuous/linuxdeploy-plugin-checkrt.sh
|
||||
chmod +x ./linuxdeploy-plugin-checkrt.sh
|
||||
|
||||
# Embed newer libstdc++ for distros that don't come with it (ubuntu 16.04)
|
||||
mkdir -p appdir/usr/optional/ ; mkdir -p appdir/usr/optional/libstdc++/
|
||||
cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./appdir/usr/optional/libstdc++/
|
||||
rm ./appdir/AppRun
|
||||
curl -sL https://github.com/RPCS3/AppImageKit-checkrt/releases/download/continuous2/AppRun-patched-x86_64 -o ./appdir/AppRun
|
||||
chmod a+x ./appdir/AppRun
|
||||
curl -sL https://github.com/RPCS3/AppImageKit-checkrt/releases/download/continuous2/exec-x86_64.so -o ./appdir/usr/optional/exec.so
|
||||
export EXTRA_PLATFORM_PLUGINS="libqwayland.so"
|
||||
export EXTRA_QT_PLUGINS="svg;wayland-decoration-client;wayland-graphics-integration-client;wayland-shell-integration;waylandcompositor"
|
||||
|
||||
# Compile checker binary for AppImageKit-checkrt
|
||||
APPIMAGE_EXTRACT_AND_RUN=1 linuxdeploy --appdir AppDir --plugin qt --plugin checkrt
|
||||
|
||||
# This may need updating if you update the compiler or rpcs3 uses newer c++ features
|
||||
# See https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/config/abi/pre/gnu.ver
|
||||
# for which definitions correlate to which CXXABI version.
|
||||
# Currently we target a minimum of GLIBCXX_3.4.26 and CXXABI_1.3.11
|
||||
printf "#include <bits/stdc++.h>\nint main(){std::make_exception_ptr(0);std::pmr::get_default_resource();}" | $CXX -x c++ -std=c++2a -o ./appdir/usr/optional/checker -
|
||||
# Remove libwayland-client because it has platform-dependent exports and breaks other OSes
|
||||
rm -f ./AppDir/usr/lib/libwayland-client.so*
|
||||
|
||||
# Package it up and send it off
|
||||
./squashfs-root/usr/bin/appimagetool /rpcs3/build/appdir
|
||||
ls
|
||||
# Remove libvulkan because it causes issues with gamescope
|
||||
rm -f ./AppDir/usr/lib/libvulkan.so*
|
||||
|
||||
COMM_TAG="$(grep 'version{.*}' ../rpcs3/rpcs3_version.cpp | awk -F[\{,] '{printf "%d.%d.%d", $2, $3, $4}')"
|
||||
# Remove unused Qt6 libraries
|
||||
rm -f ./AppDir/usr/lib/libQt6VirtualKeyboard.so*
|
||||
rm -f ./AppDir/usr/plugins/platforminputcontexts/libqtvirtualkeyboardplugin.so*
|
||||
|
||||
# Remove git directory containing local commit history file
|
||||
rm -rf ./AppDir/usr/share/rpcs3/git
|
||||
|
||||
# Download translations
|
||||
mkdir -p "./AppDir/usr/translations"
|
||||
ZIP_URL=$(curl -fsSL "https://api.github.com/repos/RPCS3/rpcs3_translations/releases/latest" \
|
||||
| grep "browser_download_url" \
|
||||
| grep "RPCS3-languages.zip" \
|
||||
| cut -d '"' -f 4)
|
||||
if [ -z "$ZIP_URL" ]; then
|
||||
echo "Failed to find RPCS3-languages.zip in the latest release. Continuing without translations."
|
||||
else
|
||||
echo "Downloading translations from: $ZIP_URL"
|
||||
curl -L -o translations.zip "$ZIP_URL" || {
|
||||
echo "Failed to download translations.zip. Continuing without translations."
|
||||
exit 0
|
||||
}
|
||||
unzip -o translations.zip -d "./AppDir/usr/translations" >/dev/null 2>&1 || \
|
||||
echo "Failed to extract translations.zip. Continuing without translations."
|
||||
rm -f translations.zip
|
||||
fi
|
||||
|
||||
curl -fsSLo /uruntime "https://github.com/VHSgunzo/uruntime/releases/download/v0.3.4/uruntime-appimage-dwarfs-$CPU_ARCH"
|
||||
chmod +x /uruntime
|
||||
/uruntime --appimage-mkdwarfs -f --set-owner 0 --set-group 0 --no-history --no-create-timestamp \
|
||||
--compression zstd:level=22 -S26 -B32 --header /uruntime -i AppDir -o RPCS3.AppImage
|
||||
|
||||
APPIMAGE_SUFFIX="linux_${CPU_ARCH}"
|
||||
if [ "$CPU_ARCH" = "x86_64" ]; then
|
||||
# Preserve back compat. Previous versions never included the full arch.
|
||||
APPIMAGE_SUFFIX="linux64"
|
||||
fi
|
||||
|
||||
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ../rpcs3/rpcs3_version.cpp)
|
||||
COMM_COUNT="$(git rev-list --count HEAD)"
|
||||
COMM_HASH="$(git rev-parse --short=8 HEAD)"
|
||||
RPCS3_APPIMAGE="rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_linux64.AppImage"
|
||||
RPCS3_APPIMAGE="rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_${APPIMAGE_SUFFIX}.AppImage"
|
||||
|
||||
mv ./RPCS3*.AppImage "$RPCS3_APPIMAGE"
|
||||
|
||||
# If we're building using Azure Pipelines, let's copy over the AppImage artifact
|
||||
# If we're building using a CI, let's copy over the AppImage artifact
|
||||
if [ -n "$BUILD_ARTIFACTSTAGINGDIRECTORY" ]; then
|
||||
cp "$RPCS3_APPIMAGE" ~/artifacts
|
||||
cp "$RPCS3_APPIMAGE" "$ARTDIR"
|
||||
fi
|
||||
|
||||
FILESIZE=$(stat -c %s ./rpcs3*.AppImage)
|
||||
SHA256SUM=$(sha256sum ./rpcs3*.AppImage | awk '{ print $1 }')
|
||||
echo "${SHA256SUM};${FILESIZE}B" > /rpcs3/GitHubReleaseMessage.txt
|
||||
|
||||
fi
|
||||
|
||||
if [ "$DEPLOY_PPA" = "true" ]; then
|
||||
export DEBFULLNAME="RPCS3 Build Bot"
|
||||
echo "${SHA256SUM};${FILESIZE}B" > "$RELEASE_MESSAGE"
|
||||
fi
|
||||
|
|
|
|||
20
.ci/deploy-llvm.sh
Normal file
20
.ci/deploy-llvm.sh
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
# First let's print some info about our caches
|
||||
"$(cygpath -u "$CCACHE_BIN_DIR")"/ccache.exe --show-stats -v
|
||||
|
||||
# BUILD_blablabla is Azure specific, so we wrap it for portability
|
||||
ARTIFACT_DIR="$BUILD_ARTIFACTSTAGINGDIRECTORY"
|
||||
BUILD="llvmlibs_mt.7z"
|
||||
|
||||
# Package artifacts
|
||||
7z a -m0=LZMA2 -mx9 "$BUILD" ./build/lib/Release-x64/llvm_build
|
||||
|
||||
# Generate sha256 hashes
|
||||
# Write to file for GitHub releases
|
||||
sha256sum "$BUILD" | awk '{ print $1 }' | tee "$BUILD.sha256"
|
||||
echo "$(cat "$BUILD.sha256");$(stat -c %s "$BUILD")B" > GitHubReleaseMessage.txt
|
||||
|
||||
# Move files to publishing directory
|
||||
cp -- "$BUILD" "$ARTIFACT_DIR"
|
||||
cp -- "$BUILD.sha256" "$ARTIFACT_DIR"
|
||||
76
.ci/deploy-mac-arm64.sh
Executable file
76
.ci/deploy-mac-arm64.sh
Executable file
|
|
@ -0,0 +1,76 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
cd build || exit 1
|
||||
|
||||
# Gather explicit version number and number of commits
|
||||
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ../rpcs3/rpcs3_version.cpp)
|
||||
COMM_COUNT=$(git rev-list --count HEAD)
|
||||
COMM_HASH=$(git rev-parse --short=8 HEAD)
|
||||
|
||||
AVVER="${COMM_TAG}-${COMM_COUNT}"
|
||||
|
||||
# AVVER is used for GitHub releases, it is the version number.
|
||||
echo "AVVER=$AVVER" >> ../.ci/ci-vars.env
|
||||
|
||||
cd bin
|
||||
mkdir "rpcs3.app/Contents/lib/" || true
|
||||
|
||||
cp "$(realpath /opt/homebrew/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++abi.1.0.dylib)" "rpcs3.app/Contents/Frameworks/libc++abi.1.dylib"
|
||||
cp "$(realpath /opt/homebrew/opt/gcc/lib/gcc/current/libgcc_s.1.1.dylib)" "rpcs3.app/Contents/Frameworks/libgcc_s.1.1.dylib"
|
||||
cp "$(realpath /opt/homebrew/lib/libsharpyuv.0.dylib)" "rpcs3.app/Contents/lib/libsharpyuv.0.dylib"
|
||||
cp "$(realpath /opt/homebrew/lib/libintl.8.dylib)" "rpcs3.app/Contents/lib/libintl.8.dylib"
|
||||
|
||||
rm -rf "rpcs3.app/Contents/Frameworks/QtPdf.framework" \
|
||||
"rpcs3.app/Contents/Frameworks/QtQml.framework" \
|
||||
"rpcs3.app/Contents/Frameworks/QtQmlModels.framework" \
|
||||
"rpcs3.app/Contents/Frameworks/QtQuick.framework" \
|
||||
"rpcs3.app/Contents/Frameworks/QtVirtualKeyboard.framework" \
|
||||
"rpcs3.app/Contents/Plugins/platforminputcontexts" \
|
||||
"rpcs3.app/Contents/Plugins/virtualkeyboard" \
|
||||
"rpcs3.app/Contents/Resources/git"
|
||||
|
||||
../../.ci/optimize-mac.sh rpcs3.app
|
||||
|
||||
# Download translations
|
||||
mkdir -p "rpcs3.app/Contents/translations"
|
||||
ZIP_URL=$(curl -fsSL "https://api.github.com/repos/RPCS3/rpcs3_translations/releases/latest" \
|
||||
| grep "browser_download_url" \
|
||||
| grep "RPCS3-languages.zip" \
|
||||
| cut -d '"' -f 4)
|
||||
if [ -z "$ZIP_URL" ]; then
|
||||
echo "Failed to find RPCS3-languages.zip in the latest release. Continuing without translations."
|
||||
else
|
||||
echo "Downloading translations from: $ZIP_URL"
|
||||
curl -L -o translations.zip "$ZIP_URL" || {
|
||||
echo "Failed to download translations.zip. Continuing without translations."
|
||||
exit 0
|
||||
}
|
||||
unzip -o translations.zip -d "rpcs3.app/Contents/translations" >/dev/null 2>&1 || \
|
||||
echo "Failed to extract translations.zip. Continuing without translations."
|
||||
rm -f translations.zip
|
||||
fi
|
||||
|
||||
# Hack
|
||||
install_name_tool -delete_rpath /opt/homebrew/lib RPCS3.app/Contents/MacOS/rpcs3 || echo "Hack for deleting rpath /opt/homebrew/lib not needed"
|
||||
install_name_tool -delete_rpath /opt/homebrew/opt/llvm@$LLVM_COMPILER_VER/lib RPCS3.app/Contents/MacOS/rpcs3 || echo "Hack for deleting rpath /opt/homebrew/opt/llvm@$LLVM_COMPILER_VER/lib not needed"
|
||||
|
||||
# Need to do this rename hack due to case insensitive filesystem
|
||||
mv rpcs3.app RPCS3_.app
|
||||
mv RPCS3_.app RPCS3.app
|
||||
|
||||
# NOTE: "--deep" is deprecated
|
||||
codesign --deep -fs - RPCS3.app
|
||||
|
||||
echo "[InternetShortcut]" > Quickstart.url
|
||||
echo "URL=https://rpcs3.net/quickstart" >> Quickstart.url
|
||||
echo "IconIndex=0" >> Quickstart.url
|
||||
|
||||
ARCHIVE_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_macos_arm64.7z"
|
||||
"/opt/homebrew/bin/7z" a -mx9 "$ARCHIVE_FILEPATH" RPCS3.app Quickstart.url
|
||||
FILESIZE=$(stat -f %z "$ARCHIVE_FILEPATH")
|
||||
SHA256SUM=$(shasum -a 256 "$ARCHIVE_FILEPATH" | awk '{ print $1 }')
|
||||
|
||||
cd ..
|
||||
echo "${SHA256SUM};${FILESIZE}B" > "$RELEASE_MESSAGE"
|
||||
cd bin
|
||||
77
.ci/deploy-mac.sh
Executable file
77
.ci/deploy-mac.sh
Executable file
|
|
@ -0,0 +1,77 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
cd build || exit 1
|
||||
|
||||
# Gather explicit version number and number of commits
|
||||
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ../rpcs3/rpcs3_version.cpp)
|
||||
COMM_COUNT=$(git rev-list --count HEAD)
|
||||
COMM_HASH=$(git rev-parse --short=8 HEAD)
|
||||
|
||||
AVVER="${COMM_TAG}-${COMM_COUNT}"
|
||||
|
||||
# AVVER is used for GitHub releases, it is the version number.
|
||||
echo "AVVER=$AVVER" >> ../.ci/ci-vars.env
|
||||
|
||||
cd bin
|
||||
mkdir "rpcs3.app/Contents/lib/"
|
||||
|
||||
cp "$(realpath /usr/local/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++abi.1.0.dylib)" "rpcs3.app/Contents/Frameworks/libc++abi.1.dylib"
|
||||
cp "$(realpath /usr/local/opt/llvm@$LLVM_COMPILER_VER/lib/unwind/libunwind.1.dylib)" "rpcs3.app/Contents/Frameworks/libunwind.1.dylib"
|
||||
cp "$(realpath /usr/local/opt/gcc/lib/gcc/current/libgcc_s.1.1.dylib)" "rpcs3.app/Contents/Frameworks/libgcc_s.1.1.dylib"
|
||||
cp "$(realpath /usr/local/lib/libsharpyuv.0.dylib)" "rpcs3.app/Contents/lib/libsharpyuv.0.dylib"
|
||||
cp "$(realpath /usr/local/lib/libintl.8.dylib)" "rpcs3.app/Contents/lib/libintl.8.dylib"
|
||||
|
||||
rm -rf "rpcs3.app/Contents/Frameworks/QtPdf.framework" \
|
||||
"rpcs3.app/Contents/Frameworks/QtQml.framework" \
|
||||
"rpcs3.app/Contents/Frameworks/QtQmlModels.framework" \
|
||||
"rpcs3.app/Contents/Frameworks/QtQuick.framework" \
|
||||
"rpcs3.app/Contents/Frameworks/QtVirtualKeyboard.framework" \
|
||||
"rpcs3.app/Contents/Plugins/platforminputcontexts" \
|
||||
"rpcs3.app/Contents/Plugins/virtualkeyboard" \
|
||||
"rpcs3.app/Contents/Resources/git"
|
||||
|
||||
../../.ci/optimize-mac.sh rpcs3.app
|
||||
|
||||
# Download translations
|
||||
mkdir -p "rpcs3.app/Contents/translations"
|
||||
ZIP_URL=$(curl -fsSL "https://api.github.com/repos/RPCS3/rpcs3_translations/releases/latest" \
|
||||
| grep "browser_download_url" \
|
||||
| grep "RPCS3-languages.zip" \
|
||||
| cut -d '"' -f 4)
|
||||
if [ -z "$ZIP_URL" ]; then
|
||||
echo "Failed to find RPCS3-languages.zip in the latest release. Continuing without translations."
|
||||
else
|
||||
echo "Downloading translations from: $ZIP_URL"
|
||||
curl -L -o translations.zip "$ZIP_URL" || {
|
||||
echo "Failed to download translations.zip. Continuing without translations."
|
||||
exit 0
|
||||
}
|
||||
unzip -o translations.zip -d "rpcs3.app/Contents/translations" >/dev/null 2>&1 || \
|
||||
echo "Failed to extract translations.zip. Continuing without translations."
|
||||
rm -f translations.zip
|
||||
fi
|
||||
|
||||
# Need to do this rename hack due to case insensitive filesystem
|
||||
mv rpcs3.app RPCS3_.app
|
||||
mv RPCS3_.app RPCS3.app
|
||||
|
||||
# Hack
|
||||
install_name_tool -delete_rpath /usr/local/lib RPCS3.app/Contents/MacOS/rpcs3
|
||||
#-delete_rpath /usr/local/Cellar/sdl3/3.2.8/lib
|
||||
|
||||
# NOTE: "--deep" is deprecated
|
||||
codesign --deep -fs - RPCS3.app
|
||||
|
||||
echo "[InternetShortcut]" > Quickstart.url
|
||||
echo "URL=https://rpcs3.net/quickstart" >> Quickstart.url
|
||||
echo "IconIndex=0" >> Quickstart.url
|
||||
|
||||
ARCHIVE_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_macos.7z"
|
||||
"/opt/homebrew/bin/7z" a -mx9 "$ARCHIVE_FILEPATH" RPCS3.app Quickstart.url
|
||||
FILESIZE=$(stat -f %z "$ARCHIVE_FILEPATH")
|
||||
SHA256SUM=$(shasum -a 256 "$ARCHIVE_FILEPATH" | awk '{ print $1 }')
|
||||
|
||||
cd ..
|
||||
echo "${SHA256SUM};${FILESIZE}B" > "$RELEASE_MESSAGE"
|
||||
cd bin
|
||||
57
.ci/deploy-windows-clang.sh
Normal file
57
.ci/deploy-windows-clang.sh
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
# source ci-vars.env
|
||||
# shellcheck disable=SC1091
|
||||
. .ci/ci-vars.env
|
||||
|
||||
cd build || exit 1
|
||||
|
||||
CPU_ARCH="${1:-x86_64}"
|
||||
|
||||
echo "Deploying rpcs3 windows clang $CPU_ARCH"
|
||||
|
||||
# BUILD_blablabla is CI specific, so we wrap it for portability
|
||||
ARTIFACT_DIR=$(cygpath -u "$BUILD_ARTIFACTSTAGINGDIRECTORY")
|
||||
MSYS2_CLANG_BIN=$(cygpath -w /clang64/bin)
|
||||
MSYS2_USR_BIN=$(cygpath -w /usr/bin)
|
||||
|
||||
echo "Installing dependencies of: ./bin/rpcs3.exe (MSYS2 dir is '$MSYS2_CLANG_BIN', usr dir is '$MSYS2_USR_BIN')"
|
||||
cmake -DMSYS2_CLANG_BIN="$MSYS2_CLANG_BIN" -DMSYS2_USR_BIN="$MSYS2_USR_BIN" -Dexe=./bin/rpcs3.exe -P ../buildfiles/cmake/CopyRuntimeDependencies.cmake
|
||||
|
||||
# Prepare compatibility and SDL database for packaging
|
||||
mkdir ./bin/config
|
||||
mkdir ./bin/config/input_configs
|
||||
curl -fsSL 'https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt' 1> ./bin/config/input_configs/gamecontrollerdb.txt
|
||||
curl -fsSL 'https://rpcs3.net/compatibility?api=v1&export' | iconv -t UTF-8 1> ./bin/GuiConfigs/compat_database.dat
|
||||
|
||||
# Download translations
|
||||
mkdir -p ./bin/share/qt6/translations
|
||||
ZIP_URL=$(curl -fsSL "https://api.github.com/repos/RPCS3/rpcs3_translations/releases/latest" \
|
||||
| grep "browser_download_url" \
|
||||
| grep "RPCS3-languages.zip" \
|
||||
| cut -d '"' -f 4)
|
||||
if [ -z "$ZIP_URL" ]; then
|
||||
echo "Failed to find RPCS3-languages.zip in the latest release. Continuing without translations."
|
||||
else
|
||||
echo "Downloading translations from: $ZIP_URL"
|
||||
curl -L -o translations.zip "$ZIP_URL" || {
|
||||
echo "Failed to download translations.zip. Continuing without translations."
|
||||
exit 0
|
||||
}
|
||||
unzip -o translations.zip -d "./bin/share/qt6/translations" >/dev/null 2>&1 || \
|
||||
echo "Failed to extract translations.zip. Continuing without translations."
|
||||
rm -f translations.zip
|
||||
fi
|
||||
|
||||
# Package artifacts
|
||||
7z a -m0=LZMA2 -mx9 "$BUILD" ./bin/*
|
||||
|
||||
# Generate sha256 hashes
|
||||
# Write to file for GitHub releases
|
||||
sha256sum "$BUILD" | awk '{ print $1 }' | tee "$BUILD.sha256"
|
||||
echo "$(cat "$BUILD.sha256");$(stat -c %s "$BUILD")B" > GitHubReleaseMessage.txt
|
||||
|
||||
# Move files to publishing directory
|
||||
mkdir -p "$ARTIFACT_DIR"
|
||||
cp -- "$BUILD" "$ARTIFACT_DIR"
|
||||
cp -- "$BUILD.sha256" "$ARTIFACT_DIR"
|
||||
|
|
@ -1,15 +1,41 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
# BUILD_blablabla is Azure specific, so we wrap it for portability
|
||||
# First let's print some info about our caches
|
||||
"$(cygpath -u "$CCACHE_BIN_DIR")"/ccache.exe --show-stats -v
|
||||
|
||||
# BUILD_blablabla is CI specific, so we wrap it for portability
|
||||
ARTIFACT_DIR="$BUILD_ARTIFACTSTAGINGDIRECTORY"
|
||||
|
||||
# Remove unecessary files
|
||||
rm -f ./bin/rpcs3.exp ./bin/rpcs3.lib ./bin/rpcs3.pdb
|
||||
rm -f ./bin/rpcs3.exp ./bin/rpcs3.lib ./bin/rpcs3.pdb ./bin/vc_redist.x64.exe
|
||||
|
||||
# Prepare compatibility database for packaging, as well as
|
||||
# certificate for ssl (auto-updater)
|
||||
curl -sL 'https://rpcs3.net/compatibility?api=v1&export' | iconv -t UTF-8 > ./bin/GuiConfigs/compat_database.dat
|
||||
curl -sL 'https://curl.haxx.se/ca/cacert.pem' > ./bin/cacert.pem
|
||||
# Prepare compatibility and SDL database for packaging
|
||||
mkdir ./bin/config
|
||||
mkdir ./bin/config/input_configs
|
||||
curl -fsSL 'https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt' 1> ./bin/config/input_configs/gamecontrollerdb.txt
|
||||
curl -fsSL 'https://rpcs3.net/compatibility?api=v1&export' | iconv -t UTF-8 1> ./bin/GuiConfigs/compat_database.dat
|
||||
|
||||
# Download translations
|
||||
mkdir -p ./bin/qt6/translations
|
||||
ZIP_URL=$(curl -fsSL "https://api.github.com/repos/RPCS3/rpcs3_translations/releases/latest" \
|
||||
| grep "browser_download_url" \
|
||||
| grep "RPCS3-languages.zip" \
|
||||
| cut -d '"' -f 4)
|
||||
if [ -z "$ZIP_URL" ]; then
|
||||
echo "Failed to find RPCS3-languages.zip in the latest release. Continuing without translations."
|
||||
else
|
||||
echo "Downloading translations from: $ZIP_URL"
|
||||
curl -L -o translations.zip "$ZIP_URL" || {
|
||||
echo "Failed to download translations.zip. Continuing without translations."
|
||||
exit 0
|
||||
}
|
||||
unzip -o translations.zip -d "./bin/qt6/translations" >/dev/null 2>&1 || \
|
||||
echo "Failed to extract translations.zip. Continuing without translations."
|
||||
rm -f translations.zip
|
||||
fi
|
||||
|
||||
# Download SSL certificate (not needed with CURLSSLOPT_NATIVE_CA)
|
||||
#curl -fsSL 'https://curl.haxx.se/ca/cacert.pem' 1> ./bin/cacert.pem
|
||||
|
||||
# Package artifacts
|
||||
7z a -m0=LZMA2 -mx9 "$BUILD" ./bin/*
|
||||
|
|
@ -20,5 +46,5 @@ sha256sum "$BUILD" | awk '{ print $1 }' | tee "$BUILD.sha256"
|
|||
echo "$(cat "$BUILD.sha256");$(stat -c %s "$BUILD")B" > GitHubReleaseMessage.txt
|
||||
|
||||
# Move files to publishing directory
|
||||
mv -- "$BUILD" "$ARTIFACT_DIR"
|
||||
mv -- "$BUILD.sha256" "$ARTIFACT_DIR"
|
||||
cp -- "$BUILD" "$ARTIFACT_DIR"
|
||||
cp -- "$BUILD.sha256" "$ARTIFACT_DIR"
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
# Variables set by Azure Pipelines
|
||||
IS_AZURE
|
||||
# Variables set by CI
|
||||
BUILD_REASON
|
||||
BUILD_SOURCEVERSION
|
||||
BUILD_ARTIFACTSTAGINGDIRECTORY
|
||||
BUILD_REPOSITORY_NAME
|
||||
BUILD_SOURCEBRANCHNAME
|
||||
APPDIR
|
||||
ARTDIR
|
||||
RELEASE_MESSAGE
|
||||
RUN_UNIT_TESTS
|
||||
# Variables for build matrix
|
||||
COMPILER
|
||||
DEPLOY_APPIMAGE
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
# Export variables for later stages of the Azure pipeline
|
||||
# Values done in this manner will appear as environment variables
|
||||
# in later stages.
|
||||
|
||||
# From pure-sh-bible
|
||||
# Setting 'IFS' tells 'read' where to split the string.
|
||||
while IFS='=' read -r key val; do
|
||||
# Skip over lines containing comments.
|
||||
[ "${key##\#*}" ] || continue
|
||||
echo "##vso[task.setvariable variable=$key]$val"
|
||||
done < ".ci/azure-vars.env"
|
||||
13
.ci/generate-qt-ts.sh
Executable file
13
.ci/generate-qt-ts.sh
Executable file
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
mkdir -p ../translations
|
||||
|
||||
LUPDATE_PATH=$(find /usr -name lupdate -type f 2>/dev/null | head -n 1)
|
||||
if [ -z "$LUPDATE_PATH" ]; then
|
||||
echo "Error: lupdate not found!"
|
||||
exit 1
|
||||
else
|
||||
echo "lupdate found at: $LUPDATE_PATH"
|
||||
$LUPDATE_PATH -recursive . -ts ../translations/rpcs3_template.ts
|
||||
sed -i 's|filename="\.\./|filename="./|g' ../translations/rpcs3_template.ts
|
||||
fi
|
||||
3
.ci/get_keys-windows.sh
Normal file → Executable file
3
.ci/get_keys-windows.sh
Normal file → Executable file
|
|
@ -1,4 +1,3 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
curl -L -o "./llvm.lock" "https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win/llvmlibs_mt.7z.sha256"
|
||||
curl -L -o "./glslang.lock" "https://github.com/RPCS3/glslang/releases/download/custom-build-win/glslanglibs_mt.7z.sha256"
|
||||
curl -fLo "./llvm.lock" "https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win-${LLVM_VER}/llvmlibs_mt.7z.sha256"
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ generate_post_data()
|
|||
EOF
|
||||
}
|
||||
|
||||
curl -s \
|
||||
curl -fsS \
|
||||
-H "Authorization: token ${RPCS3_TOKEN}" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
--data "$(generate_post_data)" "https://api.github.com/repos/$UPLOAD_REPO_FULL_NAME/releases" >> release.json
|
||||
|
|
@ -24,11 +24,11 @@ curl -s \
|
|||
cat release.json
|
||||
id=$(grep '"id"' release.json | cut -d ':' -f2 | head -n1 | awk '{$1=$1;print}')
|
||||
id=${id%?}
|
||||
echo ${id:?}
|
||||
echo "${id:?}"
|
||||
|
||||
upload_file()
|
||||
{
|
||||
curl -s \
|
||||
curl -fsS \
|
||||
-H "Authorization: token ${RPCS3_TOKEN}" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
-H "Content-Type: application/octet-stream" \
|
||||
|
|
|
|||
|
|
@ -2,17 +2,17 @@
|
|||
# NOTE: this script is run under root permissions
|
||||
# shellcheck shell=sh disable=SC2096
|
||||
|
||||
# RPCS3 often needs recent Qt5 and Vulkan-Headers
|
||||
# RPCS3 often needs recent Qt and Vulkan-Headers
|
||||
sed -i '' 's/quarterly/latest/' /etc/pkg/FreeBSD.conf
|
||||
|
||||
export ASSUME_ALWAYS_YES=true
|
||||
pkg info # debug
|
||||
|
||||
# Prefer newer Clang than in base system (see also .ci/build-freebsd.sh)
|
||||
pkg install llvm11
|
||||
# WITH_LLVM
|
||||
pkg install "llvm$LLVM_COMPILER_VER"
|
||||
|
||||
# Mandatory dependencies (qt5-dbus and qt5-gui are pulled via qt5-widgets)
|
||||
pkg install git ccache cmake ninja qt5-qmake qt5-buildtools qt5-widgets qt5-concurrent glew openal-soft ffmpeg
|
||||
# Mandatory dependencies (qtX-base is pulled via qtX-multimedia)
|
||||
pkg install git ccache cmake ninja "qt$QT_VER_MAIN-multimedia" "qt$QT_VER_MAIN-svg" glew openal-soft ffmpeg pcre2
|
||||
|
||||
# Optional dependencies (libevdev is pulled by qt5-gui)
|
||||
pkg install pkgconf alsa-lib pulseaudio sdl2 evdev-proto vulkan-headers vulkan-loader
|
||||
# Optional dependencies (libevdev is pulled by qtX-base)
|
||||
pkg install pkgconf alsa-lib pulseaudio sdl3 evdev-proto vulkan-headers vulkan-loader opencv
|
||||
|
|
|
|||
21
.ci/optimize-mac.sh
Executable file
21
.ci/optimize-mac.sh
Executable file
|
|
@ -0,0 +1,21 @@
|
|||
#!/bin/sh
|
||||
|
||||
file_path=$(find "$1/Contents/MacOS" -type f -print0 | head -n 1)
|
||||
|
||||
if [ -z "$file_path" ]; then
|
||||
echo "No executable file found in $1/Contents/MacOS" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
target_architecture="$(lipo "$file_path" -archs)"
|
||||
|
||||
if [ -z "$target_architecture" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC3045
|
||||
find "$1" -type f -print0 | while IFS= read -r -d '' file; do
|
||||
echo Thinning "$file" -> "$target_architecture"
|
||||
lipo "$file" -thin "$target_architecture" -output "$file" || true
|
||||
done
|
||||
63
.ci/setup-llvm.sh
Normal file
63
.ci/setup-llvm.sh
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
# Resource/dependency URLs
|
||||
CCACHE_URL="https://github.com/ccache/ccache/releases/download/v4.11.2/ccache-4.11.2-windows-x86_64.zip"
|
||||
|
||||
DEP_URLS=" \
|
||||
$CCACHE_URL"
|
||||
|
||||
# CI doesn't make a cache dir if it doesn't exist, so we do it manually
|
||||
[ -d "$DEPS_CACHE_DIR" ] || mkdir "$DEPS_CACHE_DIR"
|
||||
|
||||
# Pull the llvm submodule
|
||||
# shellcheck disable=SC2046
|
||||
git submodule -q update --init --depth=1 -- 3rdparty/llvm
|
||||
|
||||
# Git bash doesn't have rev, so here it is
|
||||
rev()
|
||||
{
|
||||
echo "$1" | awk '{ for(i = length($0); i != 0; --i) { a = a substr($0, i, 1); } } END { print a }'
|
||||
}
|
||||
|
||||
# Usage: download_and_verify url checksum algo file
|
||||
# Check to see if a file is already cached, and the checksum matches. If not, download it.
|
||||
# Tries up to 3 times
|
||||
download_and_verify()
|
||||
{
|
||||
url="$1"
|
||||
correctChecksum="$2"
|
||||
algo="$3"
|
||||
fileName="$4"
|
||||
|
||||
for _ in 1 2 3; do
|
||||
[ -e "$DEPS_CACHE_DIR/$fileName" ] || curl -fLo "$DEPS_CACHE_DIR/$fileName" "$url"
|
||||
fileChecksum=$("${algo}sum" "$DEPS_CACHE_DIR/$fileName" | awk '{ print $1 }')
|
||||
[ "$fileChecksum" = "$correctChecksum" ] && return 0
|
||||
done
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
# Some dependencies install here
|
||||
[ -d "./build/lib_ext/Release-x64" ] || mkdir -p "./build/lib_ext/Release-x64"
|
||||
|
||||
for url in $DEP_URLS; do
|
||||
# Get the filename from the URL and remove query strings (?arg=something).
|
||||
fileName="$(rev "$(rev "$url" | cut -d'/' -f1)" | cut -d'?' -f1)"
|
||||
[ -z "$fileName" ] && echo "Unable to parse url: $url" && exit 1
|
||||
|
||||
# shellcheck disable=SC1003
|
||||
case "$url" in
|
||||
*ccache*) checksum=$CCACHE_SHA; algo="sha256"; outDir="$CCACHE_BIN_DIR" ;;
|
||||
*) echo "Unknown url resource: $url"; exit 1 ;;
|
||||
esac
|
||||
|
||||
download_and_verify "$url" "$checksum" "$algo" "$fileName"
|
||||
7z x -y "$DEPS_CACHE_DIR/$fileName" -aos -o"$outDir"
|
||||
done
|
||||
|
||||
# Setup ccache tool
|
||||
[ -d "$CCACHE_DIR" ] || mkdir -p "$(cygpath -u "$CCACHE_DIR")"
|
||||
CCACHE_SH_DIR=$(cygpath -u "$CCACHE_BIN_DIR")
|
||||
mv "$CCACHE_SH_DIR"/ccache-*/* "$CCACHE_SH_DIR"
|
||||
cp "$CCACHE_SH_DIR"/ccache.exe "$CCACHE_SH_DIR"/cl.exe
|
||||
39
.ci/setup-windows-ci-vars.sh
Normal file
39
.ci/setup-windows-ci-vars.sh
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
CPU_ARCH="${1:-win64}"
|
||||
COMPILER="${2:-msvc}"
|
||||
|
||||
# These are CI specific, so we wrap them for portability
|
||||
REPO_NAME="$BUILD_REPOSITORY_NAME"
|
||||
REPO_BRANCH="$BUILD_SOURCEBRANCHNAME"
|
||||
PR_NUMBER="$BUILD_PR_NUMBER"
|
||||
|
||||
# Gather explicit version number and number of commits
|
||||
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ./rpcs3/rpcs3_version.cpp)
|
||||
COMM_COUNT=$(git rev-list --count HEAD)
|
||||
COMM_HASH=$(git rev-parse --short=8 HEAD)
|
||||
|
||||
# Format the above into filenames
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
AVVER="${COMM_TAG}-${COMM_HASH}"
|
||||
BUILD_RAW="rpcs3-v${AVVER}_${CPU_ARCH}_${COMPILER}"
|
||||
BUILD="${BUILD_RAW}.7z"
|
||||
else
|
||||
AVVER="${COMM_TAG}-${COMM_COUNT}"
|
||||
BUILD_RAW="rpcs3-v${AVVER}-${COMM_HASH}_${CPU_ARCH}_${COMPILER}"
|
||||
BUILD="${BUILD_RAW}.7z"
|
||||
fi
|
||||
|
||||
# BRANCH is used for experimental build warnings for pr builds, used in main_window.cpp.
|
||||
# BUILD is the name of the release artifact
|
||||
# BUILD_RAW is just filename
|
||||
# AVVER is used for GitHub releases, it is the version number.
|
||||
BRANCH="${REPO_NAME}/${REPO_BRANCH}"
|
||||
|
||||
# SC2129
|
||||
{
|
||||
echo "BRANCH=$BRANCH"
|
||||
echo "BUILD=$BUILD"
|
||||
echo "BUILD_RAW=$BUILD_RAW"
|
||||
echo "AVVER=$AVVER"
|
||||
} >> .ci/ci-vars.env
|
||||
|
|
@ -1,42 +1,40 @@
|
|||
#!/bin/sh -ex
|
||||
|
||||
# These are Azure specific, so we wrap them for portability
|
||||
REPO_NAME="$BUILD_REPOSITORY_NAME"
|
||||
REPO_BRANCH="$SYSTEM_PULLREQUEST_SOURCEBRANCH"
|
||||
PR_NUMBER="$SYSTEM_PULLREQUEST_PULLREQUESTID"
|
||||
|
||||
# Resource/dependency URLs
|
||||
# Qt mirrors can be volatile and slow, so we list 2
|
||||
QT_HOST="http://mirrors.ocf.berkeley.edu/qt/"
|
||||
#QT_HOST="http://qt.mirror.constant.com/"
|
||||
#QT_HOST="http://mirrors.ocf.berkeley.edu/qt/"
|
||||
QT_HOST="http://qt.mirror.constant.com/"
|
||||
QT_URL_VER=$(echo "$QT_VER" | sed "s/\.//g")
|
||||
QT_VER_MSVC_UP=$(echo ${QT_VER_MSVC} | tr '[:lower:]' '[:upper:]')
|
||||
QT_PREFIX="online/qtsdkrepository/windows_x86/desktop/qt${QT_VER_MAIN}_${QT_URL_VER}/qt.qt${QT_VER_MAIN}.${QT_URL_VER}.win64_${QT_VER_MSVC}_64/${QT_VER}-0-${QT_DATE}"
|
||||
QT_SUFFIX="-Windows-Windows_10-${QT_VER_MSVC_UP}-Windows-Windows_10-X86_64.7z"
|
||||
QT_BASE_URL="${QT_HOST}${QT_PREFIX}qtbase${QT_SUFFIX}"
|
||||
QT_WINE_URL="${QT_HOST}${QT_PREFIX}qtwinextras${QT_SUFFIX}"
|
||||
QT_DECL_URL="${QT_HOST}${QT_PREFIX}qtdeclarative${QT_SUFFIX}"
|
||||
QT_TOOL_URL="${QT_HOST}${QT_PREFIX}qttools${QT_SUFFIX}"
|
||||
LLVMLIBS_URL='https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win/llvmlibs_mt.7z'
|
||||
GLSLANG_URL='https://github.com/RPCS3/glslang/releases/download/custom-build-win/glslanglibs_mt.7z'
|
||||
VULKAN_SDK_URL="https://www.dropbox.com/s/kn005de7gsv5whe/VulkanSDK-1.2.154.1-Installer.exe"
|
||||
QT_VER_MSVC_UP=$(echo "${QT_VER_MSVC}" | tr '[:lower:]' '[:upper:]')
|
||||
QT_PREFIX="online/qtsdkrepository/windows_x86/desktop/qt${QT_VER_MAIN}_${QT_URL_VER}/qt${QT_VER_MAIN}_${QT_URL_VER}/qt.qt${QT_VER_MAIN}.${QT_URL_VER}."
|
||||
QT_PREFIX_2="win64_${QT_VER_MSVC}_64/${QT_VER}-0-${QT_DATE}"
|
||||
QT_SUFFIX="-Windows-Windows_11_24H2-${QT_VER_MSVC_UP}-Windows-Windows_11_24H2-X86_64.7z"
|
||||
QT_BASE_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qtbase${QT_SUFFIX}"
|
||||
QT_DECL_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qtdeclarative${QT_SUFFIX}"
|
||||
QT_TOOL_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qttools${QT_SUFFIX}"
|
||||
QT_MM_URL="${QT_HOST}${QT_PREFIX}addons.qtmultimedia.${QT_PREFIX_2}qtmultimedia${QT_SUFFIX}"
|
||||
QT_SVG_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qtsvg${QT_SUFFIX}"
|
||||
LLVMLIBS_URL="https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win-${LLVM_VER}/llvmlibs_mt.7z"
|
||||
VULKAN_SDK_URL="https://www.dropbox.com/scl/fi/sjjh0fc4ld281pjbl2xzu/VulkanSDK-${VULKAN_VER}-Installer.exe?rlkey=f6wzc0lvms5vwkt2z3qabfv9d&dl=1"
|
||||
CCACHE_URL="https://github.com/ccache/ccache/releases/download/v4.11.2/ccache-4.11.2-windows-x86_64.zip"
|
||||
|
||||
DEP_URLS=" \
|
||||
$QT_BASE_URL \
|
||||
$QT_WINE_URL \
|
||||
$QT_DECL_URL \
|
||||
$QT_TOOL_URL \
|
||||
$QT_MM_URL \
|
||||
$QT_SVG_URL \
|
||||
$LLVMLIBS_URL \
|
||||
$GLSLANG_URL \
|
||||
$VULKAN_SDK_URL"
|
||||
$VULKAN_SDK_URL\
|
||||
$CCACHE_URL"
|
||||
|
||||
# Azure pipelines doesn't make a cache dir if it doesn't exist, so we do it manually
|
||||
[ -d "$CACHE_DIR" ] || mkdir "$CACHE_DIR"
|
||||
# CI doesn't make a cache dir if it doesn't exist, so we do it manually
|
||||
[ -d "$DEPS_CACHE_DIR" ] || mkdir "$DEPS_CACHE_DIR"
|
||||
|
||||
# Pull all the submodules except llvm, since it is built separately and we just download that build
|
||||
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
||||
# shellcheck disable=SC2046
|
||||
git submodule -q update --init --depth 1 $(awk '/path/ && !/llvm/ { print $3 }' .gitmodules)
|
||||
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/FAudio/ && !/llvm/ && !/feralinteractive/ { print $3 }' .gitmodules)
|
||||
|
||||
# Git bash doesn't have rev, so here it is
|
||||
rev()
|
||||
|
|
@ -55,61 +53,44 @@ download_and_verify()
|
|||
fileName="$4"
|
||||
|
||||
for _ in 1 2 3; do
|
||||
[ -e "$CACHE_DIR/$fileName" ] || curl -L -o "$CACHE_DIR/$fileName" "$url"
|
||||
fileChecksum=$("${algo}sum" "$CACHE_DIR/$fileName" | awk '{ print $1 }')
|
||||
[ -e "$DEPS_CACHE_DIR/$fileName" ] || curl -fLo "$DEPS_CACHE_DIR/$fileName" "$url"
|
||||
fileChecksum=$("${algo}sum" "$DEPS_CACHE_DIR/$fileName" | awk '{ print $1 }')
|
||||
[ "$fileChecksum" = "$correctChecksum" ] && return 0
|
||||
rm "$CACHE_DIR/$fileName"
|
||||
done
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
# Some dependencies install here
|
||||
[ -d "./lib" ] || mkdir "./lib"
|
||||
[ -d "./build/lib_ext/Release-x64" ] || mkdir -p "./build/lib_ext/Release-x64"
|
||||
|
||||
for url in $DEP_URLS; do
|
||||
# Get the filename from the URL. Breaks if urls have js args, so don't do that pls
|
||||
fileName="$(rev "$(rev "$url" | cut -d'/' -f1)")"
|
||||
# Get the filename from the URL and remove query strings (?arg=something).
|
||||
fileName="$(rev "$(rev "$url" | cut -d'/' -f1)" | cut -d'?' -f1)"
|
||||
[ -z "$fileName" ] && echo "Unable to parse url: $url" && exit 1
|
||||
|
||||
# shellcheck disable=SC1003
|
||||
case "$url" in
|
||||
*qt*) checksum=$(curl -L "${url}.sha1"); algo="sha1"; outDir='C:\Qt\' ;;
|
||||
*llvm*) checksum=$(curl -L "${url}.sha256"); algo="sha256"; outDir="." ;;
|
||||
*glslang*) checksum=$(curl -L "${url}.sha256"); algo="sha256"; outDir="./lib/Release - LLVM-x64" ;;
|
||||
*qt*) checksum=$(curl -fL "${url}.sha1"); algo="sha1"; outDir="$QTDIR/" ;;
|
||||
*llvm*) checksum=$(curl -fL "${url}.sha256"); algo="sha256"; outDir="./build/lib_ext/Release-x64" ;;
|
||||
*ccache*) checksum=$CCACHE_SHA; algo="sha256"; outDir="$CCACHE_BIN_DIR" ;;
|
||||
*Vulkan*)
|
||||
# Vulkan setup needs to be run in batch environment
|
||||
# Need to subshell this or else it doesn't wait
|
||||
download_and_verify "$url" "$VULKAN_SDK_SHA" "sha256" "$fileName"
|
||||
cp "$CACHE_DIR/$fileName" .
|
||||
_=$(echo "$fileName /S" | cmd)
|
||||
cp "$DEPS_CACHE_DIR/$fileName" .
|
||||
_=$(echo "$fileName --accept-licenses --default-answer --confirm-command install" | cmd)
|
||||
continue
|
||||
;;
|
||||
*) echo "Unknown url resource: $url"; exit 1 ;;
|
||||
esac
|
||||
|
||||
download_and_verify "$url" "$checksum" "$algo" "$fileName"
|
||||
7z x -y "$CACHE_DIR/$fileName" -aos -o"$outDir"
|
||||
7z x -y "$DEPS_CACHE_DIR/$fileName" -aos -o"$outDir"
|
||||
done
|
||||
|
||||
# Gather explicit version number and number of commits
|
||||
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ./rpcs3/rpcs3_version.cpp)
|
||||
COMM_COUNT=$(git rev-list --count HEAD)
|
||||
COMM_HASH=$(git rev-parse --short=8 HEAD)
|
||||
|
||||
# Format the above into filenames
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
AVVER="${COMM_TAG}-${COMM_HASH}"
|
||||
BUILD="rpcs3-v${AVVER}_win64.7z"
|
||||
else
|
||||
AVVER="${COMM_TAG}-${COMM_COUNT}"
|
||||
BUILD="rpcs3-v${AVVER}-${COMM_HASH}_win64.7z"
|
||||
fi
|
||||
|
||||
# BRANCH is used for experimental build warnings for pr builds, used in main_window.cpp.
|
||||
# BUILD is the name of the release artifact
|
||||
# AVVER is used for GitHub releases, it is the version number.
|
||||
BRANCH="${REPO_NAME}/${REPO_BRANCH}"
|
||||
echo "BRANCH=$BRANCH" > .ci/azure-vars.env
|
||||
echo "BUILD=$BUILD" >> .ci/azure-vars.env
|
||||
echo "AVVER=$AVVER" >> .ci/azure-vars.env
|
||||
# Setup ccache tool
|
||||
[ -d "$CCACHE_DIR" ] || mkdir -p "$(cygpath -u "$CCACHE_DIR")"
|
||||
CCACHE_SH_DIR=$(cygpath -u "$CCACHE_BIN_DIR")
|
||||
mv "$CCACHE_SH_DIR"/ccache-*/* "$CCACHE_SH_DIR"
|
||||
cp "$CCACHE_SH_DIR"/ccache.exe "$CCACHE_SH_DIR"/cl.exe
|
||||
|
|
|
|||
19
.cirrus.yml
19
.cirrus.yml
|
|
@ -1,19 +0,0 @@
|
|||
env:
|
||||
CIRRUS_CLONE_DEPTH: 0 # Unshallow clone to obtain proper GIT_VERSION
|
||||
|
||||
freebsd_task:
|
||||
matrix:
|
||||
- name: FreeBSD 12.2
|
||||
freebsd_instance:
|
||||
image_family: freebsd-12-2
|
||||
cpu: 8
|
||||
memory: 8G
|
||||
env:
|
||||
CCACHE_MAXSIZE: 300M # 3x clean build, rounded
|
||||
CCACHE_DIR: /tmp/ccache_dir
|
||||
ccache_cache:
|
||||
folder: /tmp/ccache_dir
|
||||
packages_cache:
|
||||
folder: /var/cache/pkg
|
||||
install_script: "sh -ex ./.ci/install-freebsd.sh"
|
||||
script: "./.ci/build-freebsd.sh"
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
Standard: c++20
|
||||
UseTab: ForIndentation
|
||||
UseTab: AlignWithSpaces
|
||||
TabWidth: 4
|
||||
IndentWidth: 4
|
||||
AccessModifierOffset: -4
|
||||
|
|
@ -16,11 +16,12 @@ AllowShortBlocksOnASingleLine: Never
|
|||
AllowShortCaseLabelsOnASingleLine: true
|
||||
AllowShortFunctionsOnASingleLine: Empty
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AllowShortLambdasOnASingleLine: Empty
|
||||
Cpp11BracedListStyle: true
|
||||
IndentCaseLabels: false
|
||||
SortIncludes: false
|
||||
ReflowComments: true
|
||||
AlignConsecutiveAssignments: true
|
||||
AlignConsecutiveAssignments: false
|
||||
AlignTrailingComments: true
|
||||
AlignAfterOpenBracket: DontAlign
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||
|
|
|
|||
11
.github/CONTRIBUTING.md
vendored
11
.github/CONTRIBUTING.md
vendored
|
|
@ -1,6 +1,6 @@
|
|||
# Getting Started
|
||||
|
||||
Before getting started using the emulator, read the [Quickstart Guide](https://rpcs3.net/quickstart) and the [FAQ](https://rpcs3.net/faq). After reading those, if you need support, visit our [Forums](https://forums.rpcs3.net).
|
||||
Before getting started using the emulator, read the [Quickstart Guide](https://rpcs3.net/quickstart). After reading it, if you need support, check out [How to ask for Support](https://github.com/RPCS3/rpcs3/wiki/How-to-ask-for-Support).
|
||||
|
||||
# Issue Reporting
|
||||
|
||||
|
|
@ -8,13 +8,12 @@ Before getting started using the emulator, read the [Quickstart Guide](https://r
|
|||
|
||||
**Before reporting an issue:**
|
||||
- Check if your system matches all the minimum requirements listed in the [Quickstart Guide](https://rpcs3.net/quickstart);
|
||||
- Check if the issue is meaningful for the team (e.g. The Last of Us doesn't work is obvious and therefore useless);
|
||||
- Search older issues/forum threads to see if your issue was already submitted.
|
||||
- Use understandable English. It doesn't need to be perfect, but clear enough to understand your message.
|
||||
- While reporting issues, don't forget to include details about your system (OS, CPU, GPU, etc.), as well as the RPCS3.log file.
|
||||
- Search older issues/forum threads to see if your issue was already submitted;
|
||||
- Use understandable English. It doesn't need to be perfect, but clear enough to understand your message;
|
||||
- While reporting issues, please follow the template for the type of issue you've selected (Regression Report, Bug Report or Feature Request), which is prefilled on the issue's textbox.
|
||||
|
||||
Submitting your test results for Commercial Games must be done on our forums. Please read the [Game Compatibility](https://github.com/RPCS3/rpcs3/wiki/Game-Compatibility) wiki page before doing so.
|
||||
|
||||
# Contributing
|
||||
|
||||
Check the [Coding Style Guidelines](https://github.com/RPCS3/rpcs3/wiki/Coding-Style), [Roadmap](https://github.com/RPCS3/rpcs3/wiki/Roadmap) and [Developer Information](https://github.com/RPCS3/rpcs3/wiki/Developer-Information). If you have any questions, hit us up on our [Discord Server](https://discord.me/RPCS3) in the **#development** channel.
|
||||
Check the [Coding Style Guidelines](https://github.com/RPCS3/rpcs3/wiki/Coding-Style) and [Developer Information](https://github.com/RPCS3/rpcs3/wiki/Developer-Information). If you have any questions, hit us up on our [Discord Server](https://discord.gg/rpcs3) in the **#development** channel.
|
||||
|
|
|
|||
1
.github/FUNDING.yml
vendored
1
.github/FUNDING.yml
vendored
|
|
@ -1,2 +1 @@
|
|||
patreon: Nekotekina
|
||||
custom: https://rpcs3.net/alipay
|
||||
|
|
|
|||
62
.github/ISSUE_TEMPLATE/1-regression-report.md
vendored
62
.github/ISSUE_TEMPLATE/1-regression-report.md
vendored
|
|
@ -1,62 +0,0 @@
|
|||
---
|
||||
name: Regression report
|
||||
about: If something used to work before, but now it doesn't
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.me/RPCS3) or [forums](https://forums.rpcs3.net/) instead.
|
||||
|
||||
## Quick summary
|
||||
Please briefly describe what has stopped working correctly.
|
||||
|
||||
## Details
|
||||
Please describe the regression as accurately as possible.
|
||||
|
||||
#### 1. Please provide _exact_ build (or commit) information that introduced the regression you're reporting.
|
||||
* Please see [How to find the build that caused a regression](https://wiki.rpcs3.net/index.php?title=Help:Using_different_versions_of_RPCS3#How_to_find_the_build_that_caused_a_regression.3F) in our wiki.
|
||||
* You can find [History of RPCS3 builds](https://rpcs3.net/compatibility?b) here.
|
||||
|
||||
#### 2. Please attach TWO logs:
|
||||
* One for the build with regression.
|
||||
* One for the build that works as expected.
|
||||
|
||||
##### How to obtain RPCS3's log:
|
||||
* Run the game until you find the regression.
|
||||
* Completely close RPCS3, or move to the next step in case it has crashed.
|
||||
* Locate RPCS3's log file:
|
||||
+ ```RPCS3.log``` (It can show up as just RPCS3 and have a notepad icon)
|
||||
or
|
||||
+ ```RPCS3.log.gz``` (It can show up as RPCS3.log and have a zip or rar icon)
|
||||

|
||||
On Linux it will be in ```~/.cache/rpcs3/```.
|
||||
On Windows it will be near the executable.
|
||||
* Attach the log:
|
||||
+ Drag and drop your log file into the issue.
|
||||
+ Or upload it to the cloud, such as Dropbox, Mega etc.
|
||||
|
||||
#### 3. If you describe graphical regression, please provide an RSX capture and a RenderDoc capture that demonstrate it.
|
||||
* To create an RSX capture, use _Create_ _RSX_ _Capture_ under _Utilities_.
|
||||
Captures will be stored in RPCS3 folder → captures.
|
||||
+ Compress your capture with 7z, Rar etc.
|
||||
And drag and drop it into the issue.
|
||||
+ Or upload it to the cloud, such as Dropbox, Mega etc.
|
||||
* To create a RenderDoc capture, please refer to [RenderDoc's documentation](https://renderdoc.org/docs/how/how_capture_frame.html).
|
||||
|
||||
#### 4. Please attach screenshots of your problem.
|
||||
* Enable performance overlay with at least medium level of detail.
|
||||
You can find it in _Emulator_ tab in _Settings_.
|
||||
|
||||
#### 5. Please provide comparison with real PS3.
|
||||
|
||||
#### 6. Please provide your system configuration:
|
||||
* OS
|
||||
* CPU
|
||||
* GPU
|
||||
* Driver version
|
||||
* etc.
|
||||
|
||||
#### Please include.
|
||||
* Anything else you deem to be important
|
||||
93
.github/ISSUE_TEMPLATE/1-regression-report.yml
vendored
Normal file
93
.github/ISSUE_TEMPLATE/1-regression-report.yml
vendored
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
name: Regression report
|
||||
description: If something used to work before, but now it doesn't
|
||||
title: "[Regression] Enter a title here"
|
||||
labels: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
# Summary
|
||||
Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.gg/rpcs3) or [forums](https://forums.rpcs3.net/) instead.
|
||||
- type: textarea
|
||||
id: quick-summary
|
||||
attributes:
|
||||
label: Quick summary
|
||||
description: Please briefly describe what has stopped working correctly.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: details
|
||||
attributes:
|
||||
label: Details
|
||||
description: Please describe the regression as accurately as possible. Include screenshots if neccessary.
|
||||
validations:
|
||||
required: false
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
# Identify the regressed build
|
||||
Please provide the _exact_ build (or commit) information that introduced the regression you're reporting.
|
||||
* Please see [How to find the build that caused a regression](https://wiki.rpcs3.net/index.php?title=Help:Using_different_versions_of_RPCS3#How_to_find_the_build_that_caused_a_regression.3F) in our wiki.
|
||||
* You can find [History of RPCS3 builds](https://rpcs3.net/compatibility?b) here.
|
||||
|
||||
Make sure you're running with settings as close to default as possible
|
||||
* **Do NOT enable any emulator game patches when reporting issues**
|
||||
* Only change settings that are required for the game to work
|
||||
- type: input
|
||||
id: regressed-build
|
||||
attributes:
|
||||
label: Build with regression
|
||||
description: Provide _exact_ build (or commit) information that introduced the regression you're reporting.
|
||||
placeholder: v0.0.23-13948-31df99f7
|
||||
validations:
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
# Log files
|
||||
Obtaining the log file:
|
||||
* Run the game until you find the regression.
|
||||
* Completely close RPCS3 and locate the log file.
|
||||
|
||||
RPCS3's Log file will be ```RPCS3.log.gz``` (sometimes shows as RPCS3.log with zip icon) or ```RPCS3.log``` (sometimes shows as RPCS3 wtih notepad icon).
|
||||
* On Windows it will be in the ```log``` folder inside your RPCS3 folder.
|
||||
* On Linux it will be in ```~/.cache/rpcs3/```
|
||||
* On MacOS it will be in ```~/Library/Caches/rpcs3```. If you're unable to locate it copy paste the path in Spotlight and hit enter.
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Attach two log files
|
||||
description: |
|
||||
Attach one file for the build with regression and another for a build that works.
|
||||
Drag & drop the files into this input field, or upload them to another service (f.ex. Dropbox, Mega) and provide a link.
|
||||
validations:
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
# Other details
|
||||
If you describe a graphical regression, please provide an RSX capture and/or a RenderDoc capture that demonstrate it.
|
||||
* To create an RSX capture, use _Create_ _RSX_ _Capture_ under _Utilities_.
|
||||
* Captures will be stored in RPCS3 folder → captures.
|
||||
* To create a RenderDoc capture, please refer to [RenderDoc's documentation](https://renderdoc.org/docs/how/how_capture_frame.html).
|
||||
- type: textarea
|
||||
id: captures
|
||||
attributes:
|
||||
label: Attach capture files for visual issues
|
||||
description: Compress your capture with 7z, Rar etc. and attach it here, or upload it to the cloud (Dropbox, Mega etc) and add a link to it.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: system-info
|
||||
attributes:
|
||||
label: System configuration
|
||||
description: Provide information about your system, such as operating system, CPU and GPU model, GPU driver version and other information that describes your system configuration.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: other-details
|
||||
attributes:
|
||||
label: Other details
|
||||
description: Include anything else you deem to be important.
|
||||
validations:
|
||||
required: false
|
||||
55
.github/ISSUE_TEMPLATE/2-bug-report.md
vendored
55
.github/ISSUE_TEMPLATE/2-bug-report.md
vendored
|
|
@ -1,55 +0,0 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: If something doesn't work correctly in RPCS3
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.me/RPCS3) or [forums](https://forums.rpcs3.net/) instead.
|
||||
|
||||
## Quick summary
|
||||
Please briefly describe what is not working correctly.
|
||||
|
||||
## Details
|
||||
|
||||
Please describe the problem as accurately as possible.
|
||||
|
||||
#### 1. Please attach RPCS3's log.
|
||||
* Run the game until you find the issue.
|
||||
* Completely close RPCS3, or move to the next step in case it has crashed.
|
||||
* Locate RPCS3's log file:
|
||||
+ ```RPCS3.log``` (It can show up as just RPCS3 and have a notepad icon)
|
||||
or
|
||||
+ ```RPCS3.log.gz``` (It can show up as RPCS3.log and have a zip or rar icon)
|
||||

|
||||
On Linux it will be in ```~/.cache/rpcs3/```.
|
||||
On Windows it will be near the executable.
|
||||
* Attach the log:
|
||||
+ Drag and drop your log file into the issue.
|
||||
+ Or upload it to the cloud, such as Dropbox, Mega etc.
|
||||
|
||||
#### 2. If you describe graphical issue, please provide an RSX capture and a RenderDoc capture that demonstrate it.
|
||||
* To create an RSX capture, use _Create_ _RSX_ _Capture_ under _Utilities_.
|
||||
Captures will be stored in RPCS3 folder → captures.
|
||||
+ Compress your capture with 7z, Rar etc.
|
||||
And drag and drop it into the issue.
|
||||
+ Or upload it to the cloud, such as Dropbox, Mega etc.
|
||||
* To create a RenderDoc capture, please refer to [RenderDoc's documentation](https://renderdoc.org/docs/how/how_capture_frame.html).
|
||||
|
||||
#### 3. Please attach screenshots of your problem.
|
||||
* Enable performance overlay with at least medium level of detail.
|
||||
You can find it in _Emulator_ tab in _Settings_.
|
||||
|
||||
#### 4. Please provide comparison with real PS3.
|
||||
|
||||
#### 5. Please provide your system configuration:
|
||||
* OS
|
||||
* CPU
|
||||
* GPU
|
||||
* Driver version
|
||||
* etc.
|
||||
|
||||
#### Please include.
|
||||
* Anything else you deem to be important
|
||||
78
.github/ISSUE_TEMPLATE/2-bug-report.yml
vendored
Normal file
78
.github/ISSUE_TEMPLATE/2-bug-report.yml
vendored
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
name: Bug report
|
||||
description: If something doesn't work correctly in RPCS3
|
||||
title: "Enter a title here"
|
||||
labels: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
# Summary
|
||||
Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.gg/rpcs3) or [forums](https://forums.rpcs3.net/) instead.
|
||||
- type: textarea
|
||||
id: quick-summary
|
||||
attributes:
|
||||
label: Quick summary
|
||||
description: Please briefly describe what is not working correctly.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: details
|
||||
attributes:
|
||||
label: Details
|
||||
description: |
|
||||
Please describe the problem as accurately as possible.
|
||||
Provide a comparison with a real PS3, if possible.
|
||||
validations:
|
||||
required: false
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
# Log files
|
||||
|
||||
Provide a log file that includes the bug you're reporting.
|
||||
|
||||
Obtaining the log file:
|
||||
* Run the game until you find the regression.
|
||||
* Completely close RPCS3 and locate the log file.
|
||||
|
||||
RPCS3's Log file will be ```RPCS3.log.gz``` (sometimes shows as RPCS3.log with zip icon) or ```RPCS3.log``` (sometimes shows as RPCS3 wtih notepad icon).
|
||||
* On Windows it will be in the ```log``` folder inside your RPCS3 folder.
|
||||
* On Linux it will be in ```~/.cache/rpcs3/```
|
||||
* On MacOS it will be in ```~/Library/Caches/rpcs3```. If you're unable to locate it copy paste the path in Spotlight and hit enter.
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Attach a log file
|
||||
description: |
|
||||
Drag & drop the files into this input field, or upload them to another service (f.ex. Dropbox, Mega) and provide a link.
|
||||
validations:
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
# Other details
|
||||
If you describe a graphical issue, please provide an RSX capture and/or a RenderDoc capture that demonstrate it.
|
||||
* To create an RSX capture, use _Create_ _RSX_ _Capture_ under _Utilities_.
|
||||
* Captures will be stored in RPCS3 folder → captures.
|
||||
* To create a RenderDoc capture, please refer to [RenderDoc's documentation](https://renderdoc.org/docs/how/how_capture_frame.html).
|
||||
- type: textarea
|
||||
id: captures
|
||||
attributes:
|
||||
label: Attach capture files for visual issues
|
||||
description: Compress your capture with 7z, Rar etc. and attach it here, or upload it to the cloud (Dropbox, Mega etc) and add a link to it.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: system-info
|
||||
attributes:
|
||||
label: System configuration
|
||||
description: Provide information about your system, such as operating system, CPU and GPU model, GPU driver version and other information that describes your system configuration.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: other-details
|
||||
attributes:
|
||||
label: Other details
|
||||
description: Include anything else you deem to be important.
|
||||
validations:
|
||||
required: false
|
||||
41
.github/ISSUE_TEMPLATE/3-feature-request.md
vendored
41
.github/ISSUE_TEMPLATE/3-feature-request.md
vendored
|
|
@ -1,41 +0,0 @@
|
|||
---
|
||||
name: Feature Request
|
||||
about: If RPCS3 lacks a feature you would like to see
|
||||
title: '[Feature Request] Enter Feature Title Here'
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.me/RPCS3) or [forums](https://forums.rpcs3.net/) instead.
|
||||
|
||||
## Quick summary
|
||||
Please briefly describe what feature you would like RPCS3 to have.
|
||||
|
||||
## Details
|
||||
|
||||
Please describe the feature as accurately as possible.
|
||||
|
||||
#### 1. Please describe, what part of RPCS3 would be affected by your feature:
|
||||
* Gameplay
|
||||
* Debugging
|
||||
* UI
|
||||
* Patches
|
||||
* Installation
|
||||
* Github
|
||||
* CI
|
||||
* etc.
|
||||
|
||||
#### 2. Please tell us, why your feature is important to RPCS3.
|
||||
|
||||
#### 3. Please attach screenshots of the feature implemented in other projects.
|
||||
|
||||
#### 4. Please provide your system configuration:
|
||||
* OS
|
||||
* CPU
|
||||
* GPU
|
||||
* Driver version
|
||||
* etc.
|
||||
|
||||
#### Please include.
|
||||
* Anything else you deem to be important
|
||||
36
.github/ISSUE_TEMPLATE/3-feature-request.yml
vendored
Normal file
36
.github/ISSUE_TEMPLATE/3-feature-request.yml
vendored
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
name: Feature request
|
||||
description: If RPCS3 lacks a feature you would like to see
|
||||
title: "[Feature request] Enter a title here"
|
||||
labels: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.gg/rpcs3) or [forums](https://forums.rpcs3.net/) instead.
|
||||
- type: textarea
|
||||
id: quick-summary
|
||||
attributes:
|
||||
label: Quick summary
|
||||
description: Please briefly describe what feature you would like RPCS3 to have.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: details
|
||||
attributes:
|
||||
label: Details
|
||||
description: Please describe the feature as accurately as possible.
|
||||
validations:
|
||||
required: false
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please include the following information:
|
||||
* What part of RPCS3 would be affected by your feature? (Gameplay, Debugging, UI, Patches, Installation, CI etc.)
|
||||
* Why your feature is important to RPCS3.
|
||||
* If the feature is implemented in other projects, attach screenshots.
|
||||
* If this feature is something that a game is trying to use, upload a log file for it.
|
||||
|
||||
RPCS3's Log file will be ```RPCS3.log.gz``` (sometimes shows as RPCS3.log with zip icon) or ```RPCS3.log``` (sometimes shows as RPCS3 wtih notepad icon).
|
||||
* On Windows it will be in the ```log``` folder inside your RPCS3 folder.
|
||||
* On Linux it will be in ```~/.cache/rpcs3/```
|
||||
* On MacOS it will be in ```~/Library/Caches/rpcs3```. If you're unable to locate it copy paste the path in Spotlight and hit enter.
|
||||
14
.github/ISSUE_TEMPLATE/4-advanced.md
vendored
Normal file
14
.github/ISSUE_TEMPLATE/4-advanced.md
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
name: Advanced
|
||||
about: For developers and experienced users only
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.gg/rpcs3) or [forums](https://forums.rpcs3.net/) instead.
|
||||
|
||||
You're using the advanced template. You're expected to know what to write in order to fill in all the required information for proper report.
|
||||
|
||||
If you're unsure on what to do, please return back to the issue type selection and choose different category.
|
||||
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
|
|
@ -4,7 +4,7 @@ contact_links:
|
|||
url: https://rpcs3.net/quickstart
|
||||
about: Everything you need to know to install and configure emulator, and add games
|
||||
- name: Ask for help
|
||||
url: https://discord.me/RPCS3
|
||||
url: https://discord.gg/rpcs3
|
||||
about: If you have some questions or need help, please use our Discord server instead of GitHub
|
||||
- name: Report game compatibility
|
||||
url: https://forums.rpcs3.net/thread-196671.html
|
||||
|
|
|
|||
20
.github/PR-BUILD.md
vendored
20
.github/PR-BUILD.md
vendored
|
|
@ -1,20 +0,0 @@
|
|||
## How to test a PR build
|
||||
|
||||
Please take into account, that RPCS3 build usually takes some time (about 20 min), so you can't access a build, if a PR was just submitted.
|
||||
|
||||
- Open a PR you want to test
|
||||
- Scroll to the very bottom and locate "Checks" section
|
||||
- Expand all checks
|
||||
You are supposed to see something like this
|
||||

|
||||
- Click on **Linux_Build** or **Windows_Build** __Details__
|
||||
- Click **View more details on Azure Pipelines** at the very bottom
|
||||

|
||||
- Click on *1 artifact produced*
|
||||

|
||||
- Select a build for your OS and click three dots on the right, Click **Download artifacts**
|
||||

|
||||
|
||||
- Congratulations! You are now downloading RPCS3 build for specific PR.
|
||||
|
||||
Please note, that PR builds are not supposed to be stable, because they contain new changesets.
|
||||
3
.github/PULL_REQUEST_TEMPLATE/1-default.md
vendored
3
.github/PULL_REQUEST_TEMPLATE/1-default.md
vendored
|
|
@ -1,3 +0,0 @@
|
|||
<!-- Please include a summary of the change and which issue is fixed. -->
|
||||
|
||||
[How to test this PR](.github/PR-BUILD.md)
|
||||
72
.github/workflows/llvm.yml
vendored
Normal file
72
.github/workflows/llvm.yml
vendored
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
name: Build LLVM
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.event_name }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
BUILD_ARTIFACTSTAGINGDIRECTORY: ${{ github.workspace }}/artifacts/
|
||||
|
||||
jobs:
|
||||
Windows_Build:
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
name: LLVM Windows (MSVC)
|
||||
runs-on: windows-2025
|
||||
env:
|
||||
COMPILER: msvc
|
||||
CCACHE_SHA: '1f39f3ad5aae3fe915e99ad1302633bc8f6718e58fa7c0de2b0ba7e080f0f08c'
|
||||
CCACHE_BIN_DIR: 'C:\ccache_bin'
|
||||
CCACHE_DIR: 'C:\ccache'
|
||||
CCACHE_INODECACHE: 'true'
|
||||
CCACHE_SLOPPINESS: 'time_macros'
|
||||
DEPS_CACHE_DIR: ./dependency_cache
|
||||
steps:
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@main
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Restore Dependencies Cache
|
||||
uses: actions/cache/restore@main
|
||||
id: restore-dependencies-cache
|
||||
with:
|
||||
path: ${{ env.DEPS_CACHE_DIR }}
|
||||
key: "${{ runner.os }}-${{ env.COMPILER }}-llvm-${{ env.CCACHE_SHA }}"
|
||||
restore-keys: ${{ runner.os }}-${{ env.COMPILER }}-llvm
|
||||
|
||||
- name: Download and unpack dependencies
|
||||
run: .ci/setup-llvm.sh
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@main
|
||||
|
||||
- name: Compile LLVM
|
||||
shell: pwsh
|
||||
run: msbuild 3rdparty\llvm\llvm_build.vcxproj /p:SolutionDir="$(pwd)/" /p:Configuration=Release /v:minimal /p:Platform=x64 /p:PreferredToolArchitecture=x64 /p:CLToolPath=${{ env.CCACHE_BIN_DIR }} /p:UseMultiToolTask=true /p:CustomAfterMicrosoftCommonTargets="${{ github.workspace }}\buildfiles\msvc\ci_only.targets"
|
||||
|
||||
- name: Pack up build artifacts
|
||||
run: |
|
||||
mkdir -p "${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}"
|
||||
.ci/deploy-llvm.sh
|
||||
|
||||
- name: Upload artifacts (7z)
|
||||
uses: actions/upload-artifact@main
|
||||
with:
|
||||
name: LLVM for Windows (MSVC)
|
||||
path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
|
||||
compression-level: 0
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Save Dependencies Cache
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: actions/cache/save@main
|
||||
with:
|
||||
path: ${{ env.DEPS_CACHE_DIR }}
|
||||
key: ${{ steps.restore-dependencies-cache.outputs.cache-primary-key }}
|
||||
34
.github/workflows/qt-ts.yml
vendored
Normal file
34
.github/workflows/qt-ts.yml
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
name: Generate Translation Template
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- 'rpcs3/**'
|
||||
|
||||
jobs:
|
||||
Generate_Translation_Template:
|
||||
name: Generate Translation Template
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@main
|
||||
|
||||
- name: Install Qt Tools
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y qt6-l10n-tools
|
||||
|
||||
- name: Generate .ts file using lupdate (Qt)
|
||||
working-directory: rpcs3
|
||||
run: |
|
||||
../.ci/generate-qt-ts.sh
|
||||
|
||||
- name: Upload translation template
|
||||
uses: actions/upload-artifact@main
|
||||
with:
|
||||
name: RPCS3_Translation_Template
|
||||
path: translations/rpcs3_template.ts
|
||||
compression-level: 0
|
||||
444
.github/workflows/rpcs3.yml
vendored
Normal file
444
.github/workflows/rpcs3.yml
vendored
Normal file
|
|
@ -0,0 +1,444 @@
|
|||
name: Build RPCS3
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master # Only trigger push event on 'master' branch
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.event_name }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
BUILD_REPOSITORY_NAME: ${{ github.repository }}
|
||||
BUILD_SOURCEBRANCHNAME: ${{ github.ref_name }}
|
||||
BUILD_PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||
BUILD_SOURCEVERSION: ${{ github.sha }}
|
||||
BUILD_ARTIFACTSTAGINGDIRECTORY: ${{ github.workspace }}/artifacts/
|
||||
|
||||
jobs:
|
||||
Linux_Build:
|
||||
# Only run push event on master branch of main repo, but run all PRs
|
||||
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: ubuntu-24.04
|
||||
docker_img: "rpcs3/rpcs3-ci-jammy:1.7"
|
||||
build_sh: "/rpcs3/.ci/build-linux.sh"
|
||||
compiler: clang
|
||||
UPLOAD_COMMIT_HASH: d812f1254a1157c80fd402f94446310560f54e5f
|
||||
UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-linux"
|
||||
- os: ubuntu-24.04
|
||||
docker_img: "rpcs3/rpcs3-ci-jammy:1.7"
|
||||
build_sh: "/rpcs3/.ci/build-linux.sh"
|
||||
compiler: gcc
|
||||
- os: ubuntu-24.04-arm
|
||||
docker_img: "rpcs3/rpcs3-ci-jammy-aarch64:1.7"
|
||||
build_sh: "/rpcs3/.ci/build-linux-aarch64.sh"
|
||||
compiler: clang
|
||||
UPLOAD_COMMIT_HASH: a1d35836e8d45bfc6f63c26f0a3e5d46ef622fe1
|
||||
UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-linux-arm64"
|
||||
- os: ubuntu-24.04-arm
|
||||
docker_img: "rpcs3/rpcs3-ci-jammy-aarch64:1.7"
|
||||
build_sh: "/rpcs3/.ci/build-linux-aarch64.sh"
|
||||
compiler: gcc
|
||||
name: RPCS3 Linux ${{ matrix.os }} ${{ matrix.compiler }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
env:
|
||||
CCACHE_DIR: ${{ github.workspace }}/ccache
|
||||
DEPLOY_APPIMAGE: true
|
||||
APPDIR: "/rpcs3/build/appdir"
|
||||
ARTDIR: "/root/artifacts"
|
||||
RELEASE_MESSAGE: "/rpcs3/GitHubReleaseMessage.txt"
|
||||
COMPILER: ${{ matrix.compiler }}
|
||||
UPLOAD_COMMIT_HASH: ${{ matrix.UPLOAD_COMMIT_HASH }}
|
||||
UPLOAD_REPO_FULL_NAME: ${{ matrix.UPLOAD_REPO_FULL_NAME }}
|
||||
RUN_UNIT_TESTS: github.event_name == 'pull_request' && 'ON' || 'OFF'
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@main
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Restore build Ccache
|
||||
uses: actions/cache/restore@main
|
||||
id: restore-build-ccache
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-${{github.run_id}}
|
||||
restore-keys: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-
|
||||
|
||||
- name: Docker setup and build
|
||||
run: |
|
||||
docker pull --quiet ${{ matrix.docker_img }}
|
||||
docker run \
|
||||
-v $PWD:/rpcs3 \
|
||||
--env-file .ci/docker.env \
|
||||
-v ${{ env.CCACHE_DIR }}:/root/.ccache \
|
||||
-v ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}:${{ env.ARTDIR }} \
|
||||
${{ matrix.docker_img }} \
|
||||
${{ matrix.build_sh }}
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@main
|
||||
with:
|
||||
name: RPCS3 for Linux (${{ runner.arch }}, ${{ matrix.compiler }})
|
||||
path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}/*.AppImage
|
||||
compression-level: 0
|
||||
|
||||
- name: Deploy master build to GitHub Releases
|
||||
if: |
|
||||
github.event_name != 'pull_request' &&
|
||||
github.repository == 'RPCS3/rpcs3' &&
|
||||
github.ref == 'refs/heads/master' &&
|
||||
matrix.compiler == 'clang'
|
||||
env:
|
||||
RPCS3_TOKEN: ${{ secrets.RPCS3_TOKEN }}
|
||||
run: |
|
||||
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ./rpcs3/rpcs3_version.cpp)
|
||||
COMM_COUNT=$(git rev-list --count HEAD)
|
||||
COMM_HASH=$(git rev-parse --short=8 HEAD)
|
||||
export AVVER="${COMM_TAG}-${COMM_COUNT}"
|
||||
.ci/github-upload.sh
|
||||
|
||||
- name: Save build Ccache
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: actions/cache/save@main
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
|
||||
|
||||
Mac_Build:
|
||||
# Only run push event on master branch of main repo, but run all PRs
|
||||
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: Intel
|
||||
build_sh: .ci/build-mac.sh
|
||||
UPLOAD_COMMIT_HASH: 51ae32f468089a8169aaf1567de355ff4a3e0842
|
||||
UPLOAD_REPO_FULL_NAME: rpcs3/rpcs3-binaries-mac
|
||||
- name: Apple Silicon
|
||||
build_sh: .ci/build-mac-arm64.sh
|
||||
UPLOAD_COMMIT_HASH: 8e21bdbc40711a3fccd18fbf17b742348b0f4281
|
||||
UPLOAD_REPO_FULL_NAME: rpcs3/rpcs3-binaries-mac-arm64
|
||||
name: RPCS3 Mac ${{ matrix.name }}
|
||||
runs-on: macos-14
|
||||
env:
|
||||
CCACHE_DIR: /tmp/ccache_dir
|
||||
QT_VER: '6.10.1'
|
||||
QT_VER_MAIN: '6'
|
||||
LLVM_COMPILER_VER: '21'
|
||||
RELEASE_MESSAGE: ../GitHubReleaseMessage.txt
|
||||
UPLOAD_COMMIT_HASH: ${{ matrix.UPLOAD_COMMIT_HASH }}
|
||||
UPLOAD_REPO_FULL_NAME: ${{ matrix.UPLOAD_REPO_FULL_NAME }}
|
||||
RUN_UNIT_TESTS: github.event_name == 'pull_request' && 'ON' || 'OFF'
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@main
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Restore Build Ccache
|
||||
uses: actions/cache/restore@main
|
||||
id: restore-build-ccache
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ runner.os }}-ccache-${{ matrix.name }}-${{github.run_id}}
|
||||
restore-keys: ${{ runner.os }}-ccache-${{ matrix.name }}-
|
||||
|
||||
- name: Restore Qt Cache
|
||||
uses: actions/cache/restore@main
|
||||
id: restore-qt-cache
|
||||
with:
|
||||
path: /tmp/Qt
|
||||
key: ${{ runner.os }}-qt-${{ matrix.name }}-${{ env.QT_VER }}
|
||||
restore-keys: ${{ runner.os }}-qt-${{ matrix.name }}-${{ env.QT_VER }}
|
||||
|
||||
- name: Build
|
||||
run: ${{ matrix.build_sh }}
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@main
|
||||
with:
|
||||
name: RPCS3 for Mac (${{ matrix.name }})
|
||||
path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
|
||||
compression-level: 0
|
||||
|
||||
- name: Export Variables
|
||||
run: |
|
||||
while IFS='=' read -r key val; do
|
||||
# Skip lines that are empty or start with '#'
|
||||
[[ -z "$key" || "$key" =~ ^# ]] && continue
|
||||
echo "$key=$val" >> "${{ github.env }}"
|
||||
done < .ci/ci-vars.env
|
||||
|
||||
- name: Deploy master build to GitHub Releases
|
||||
if: |
|
||||
github.event_name != 'pull_request' &&
|
||||
github.repository == 'RPCS3/rpcs3' &&
|
||||
github.ref == 'refs/heads/master'
|
||||
env:
|
||||
RPCS3_TOKEN: ${{ secrets.RPCS3_TOKEN }}
|
||||
run: .ci/github-upload.sh
|
||||
|
||||
- name: Save Build Ccache
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: actions/cache/save@main
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
|
||||
|
||||
- name: Save Qt Cache
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: actions/cache/save@main
|
||||
with:
|
||||
path: /tmp/Qt
|
||||
key: ${{ steps.restore-qt-cache.outputs.cache-primary-key }}
|
||||
|
||||
Windows_Build:
|
||||
# Only run push event on master branch of main repo, but run all PRs
|
||||
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
|
||||
name: RPCS3 Windows
|
||||
runs-on: windows-2025
|
||||
env:
|
||||
COMPILER: msvc
|
||||
QT_VER_MAIN: '6'
|
||||
QT_VER: '6.10.1'
|
||||
QT_VER_MSVC: 'msvc2022'
|
||||
QT_DATE: '202511161843'
|
||||
LLVM_VER: '19.1.7'
|
||||
VULKAN_VER: '1.3.268.0'
|
||||
VULKAN_SDK_SHA: '8459ef49bd06b697115ddd3d97c9aec729e849cd775f5be70897718a9b3b9db5'
|
||||
CCACHE_SHA: '1f39f3ad5aae3fe915e99ad1302633bc8f6718e58fa7c0de2b0ba7e080f0f08c'
|
||||
CCACHE_BIN_DIR: 'C:\ccache_bin'
|
||||
CCACHE_DIR: 'C:\ccache'
|
||||
CCACHE_INODECACHE: 'true'
|
||||
CCACHE_SLOPPINESS: 'time_macros'
|
||||
DEPS_CACHE_DIR: ./dependency_cache
|
||||
UPLOAD_COMMIT_HASH: 7d09e3be30805911226241afbb14f8cdc2eb054e
|
||||
UPLOAD_REPO_FULL_NAME: "RPCS3/rpcs3-binaries-win"
|
||||
steps:
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@main
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup NuGet
|
||||
uses: nuget/setup-nuget@v2
|
||||
|
||||
- name: Restore NuGet packages
|
||||
run: nuget restore rpcs3.sln
|
||||
|
||||
- name: Setup env
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "QTDIR=C:\Qt\${{ env.QT_VER }}\${{ env.QT_VER_MSVC }}_64" >> ${{ github.env }}
|
||||
echo "VULKAN_SDK=C:\VulkanSDK\${{ env.VULKAN_VER }}" >> ${{ github.env }}
|
||||
|
||||
- name: Get Cache Keys
|
||||
run: .ci/get_keys-windows.sh
|
||||
|
||||
- name: Restore Build Ccache
|
||||
uses: actions/cache/restore@main
|
||||
id: restore-build-ccache
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: "${{ runner.os }}-ccache-${{ env.COMPILER }}-${{github.run_id}}"
|
||||
restore-keys: ${{ runner.os }}-ccache-${{ env.COMPILER }}-
|
||||
|
||||
- name: Restore Dependencies Cache
|
||||
uses: actions/cache/restore@main
|
||||
id: restore-dependencies-cache
|
||||
with:
|
||||
path: ${{ env.DEPS_CACHE_DIR }}
|
||||
key: "${{ runner.os }}-${{ env.COMPILER }}-${{ env.QT_VER }}-${{ env.VULKAN_SDK_SHA }}-${{ env.CCACHE_SHA }}-${{ hashFiles('llvm.lock') }}"
|
||||
restore-keys: ${{ runner.os }}-${{ env.COMPILER }}-
|
||||
|
||||
- name: Download and unpack dependencies
|
||||
run: |
|
||||
.ci/setup-windows.sh
|
||||
.ci/setup-windows-ci-vars.sh win64 msvc
|
||||
|
||||
- name: Export Variables
|
||||
run: |
|
||||
while IFS='=' read -r key val; do
|
||||
# Skip lines that are empty or start with '#'
|
||||
[[ -z "$key" || "$key" =~ ^# ]] && continue
|
||||
echo "$key=$val" >> "${{ github.env }}"
|
||||
done < .ci/ci-vars.env
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@main
|
||||
|
||||
- name: Compile RPCS3
|
||||
shell: pwsh
|
||||
run: msbuild rpcs3.sln /p:Configuration=Release /v:minimal /p:Platform=x64 /p:PreferredToolArchitecture=x64 /p:CLToolPath=${{ env.CCACHE_BIN_DIR }} /p:UseMultiToolTask=true /p:CustomAfterMicrosoftCommonTargets="${{ github.workspace }}\buildfiles\msvc\ci_only.targets"
|
||||
|
||||
- name: Run Unit Tests
|
||||
if: github.event_name == 'pull_request'
|
||||
shell: pwsh
|
||||
run: build\lib\Release-x64\rpcs3_test.exe
|
||||
|
||||
- name: Pack up build artifacts
|
||||
run: |
|
||||
mkdir -p "${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}"
|
||||
.ci/deploy-windows.sh
|
||||
|
||||
- name: Upload artifacts (7z)
|
||||
uses: actions/upload-artifact@main
|
||||
with:
|
||||
name: RPCS3 for Windows (MSVC)
|
||||
path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
|
||||
compression-level: 0
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Deploy master build to GitHub Releases
|
||||
if: |
|
||||
github.event_name != 'pull_request' &&
|
||||
github.repository == 'RPCS3/rpcs3' &&
|
||||
github.ref == 'refs/heads/master'
|
||||
env:
|
||||
RPCS3_TOKEN: ${{ secrets.RPCS3_TOKEN }}
|
||||
run: .ci/github-upload.sh
|
||||
|
||||
- name: Save Build Ccache
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: actions/cache/save@main
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
|
||||
|
||||
- name: Save Dependencies Cache
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: actions/cache/save@main
|
||||
with:
|
||||
path: ${{ env.DEPS_CACHE_DIR }}
|
||||
key: ${{ steps.restore-dependencies-cache.outputs.cache-primary-key }}
|
||||
|
||||
Windows_Build_Clang:
|
||||
# Only run push event on master branch of main repo, but run all PRs
|
||||
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
|
||||
name: RPCS3 Windows Clang
|
||||
runs-on: windows-2025
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- msys2: clang64
|
||||
compiler: clang
|
||||
arch: win64
|
||||
env:
|
||||
CCACHE_DIR: 'C:\ccache'
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@main
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup msys2
|
||||
uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
msystem: ${{ matrix.msys2 }}
|
||||
update: true
|
||||
cache: true
|
||||
install: |
|
||||
mingw-w64-clang-x86_64-clang
|
||||
mingw-w64-clang-x86_64-ccache
|
||||
mingw-w64-clang-x86_64-cmake
|
||||
mingw-w64-clang-x86_64-lld
|
||||
mingw-w64-clang-x86_64-ninja
|
||||
mingw-w64-clang-x86_64-llvm
|
||||
mingw-w64-clang-x86_64-ffmpeg
|
||||
mingw-w64-clang-x86_64-opencv
|
||||
mingw-w64-clang-x86_64-glew
|
||||
mingw-w64-clang-x86_64-vulkan
|
||||
mingw-w64-clang-x86_64-vulkan-headers
|
||||
mingw-w64-clang-x86_64-vulkan-loader
|
||||
mingw-w64-clang-x86_64-gtest
|
||||
mingw-w64-clang-x86_64-qt6-base
|
||||
mingw-w64-clang-x86_64-qt6-declarative
|
||||
mingw-w64-clang-x86_64-qt6-multimedia
|
||||
mingw-w64-clang-x86_64-qt6-svg
|
||||
base-devel
|
||||
curl
|
||||
git
|
||||
p7zip
|
||||
|
||||
- name: Restore build Ccache
|
||||
uses: actions/cache/restore@main
|
||||
id: restore-build-ccache
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-${{ github.run_id }}
|
||||
restore-keys: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-
|
||||
|
||||
- name: Build RPCS3
|
||||
shell: msys2 {0}
|
||||
run: |
|
||||
export CCACHE_DIR=$(cygpath -u "$CCACHE_DIR")
|
||||
echo "CCACHE_DIR=$CCACHE_DIR"
|
||||
.ci/setup-windows-ci-vars.sh ${{ matrix.arch }} ${{ matrix.compiler }}
|
||||
.ci/build-windows-clang.sh
|
||||
|
||||
- name: Save build Ccache
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: actions/cache/save@main
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@main
|
||||
with:
|
||||
name: RPCS3 for Windows (${{ runner.arch }}, ${{ matrix.compiler }})
|
||||
path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
|
||||
compression-level: 0
|
||||
if-no-files-found: error
|
||||
|
||||
FreeBSD_Build:
|
||||
# Only run push event on master branch of main repo, but run all PRs
|
||||
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
|
||||
name: RPCS3 FreeBSD
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 60
|
||||
env:
|
||||
CCACHE_DIR: ${{ github.workspace }}/ccache
|
||||
QT_VER_MAIN: '6'
|
||||
LLVM_COMPILER_VER: '19'
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@main
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Restore Build Ccache
|
||||
uses: actions/cache/restore@main
|
||||
id: restore-build-ccache
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: FreeBSD-ccache-${{github.run_id}}
|
||||
restore-keys: FreeBSD-ccache-
|
||||
|
||||
- name: FreeBSD build
|
||||
id: root
|
||||
uses: vmactions/freebsd-vm@v1
|
||||
with:
|
||||
envs: 'QT_VER_MAIN LLVM_COMPILER_VER CCACHE_DIR'
|
||||
usesh: true
|
||||
run: .ci/install-freebsd.sh && .ci/build-freebsd.sh
|
||||
|
||||
- name: Save Build Ccache
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: actions/cache/save@main
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
|
||||
35
.gitignore
vendored
35
.gitignore
vendored
|
|
@ -9,7 +9,7 @@
|
|||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
# *.a # Commented out since OpenAL Soft's binaries use this extension.
|
||||
*.a
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.suo
|
||||
|
|
@ -31,20 +31,24 @@
|
|||
*.wav
|
||||
|
||||
/build
|
||||
/build-*
|
||||
/lib
|
||||
/tmp
|
||||
/ipch
|
||||
/packages
|
||||
/rpcs3/Debug
|
||||
/rpcs3/Release
|
||||
/llvm_build
|
||||
/3rdparty/llvm_build
|
||||
/Vulkan/Vulkan-build
|
||||
/Vulkan/glslang-build
|
||||
/Vulkan/spirv-tools-build
|
||||
|
||||
!/bin
|
||||
/bin/*
|
||||
|
||||
# Audio DLLs
|
||||
!/bin/soft_oal.dll
|
||||
!/bin/xaudio2_9redist.dll
|
||||
|
||||
# Test Programs
|
||||
!/bin/test/
|
||||
|
||||
# Themes
|
||||
!/bin/GuiConfigs/
|
||||
/bin/GuiConfigs/*.ini
|
||||
|
|
@ -62,6 +66,8 @@
|
|||
*.vcxproj.user
|
||||
enc_temp_folder/*
|
||||
CMakeSettings.json
|
||||
*PVS-Studio*
|
||||
PVS/*
|
||||
|
||||
# Ignore other system generated files
|
||||
x64/*
|
||||
|
|
@ -96,6 +102,11 @@ rpcs3/rpcs3_autogen/*
|
|||
|
||||
# QtCreator
|
||||
CMakeLists.txt.user
|
||||
*.autosave
|
||||
|
||||
# Sublime Text
|
||||
*.sublime-project
|
||||
*.sublime-workspace
|
||||
|
||||
# CLion
|
||||
/.idea/*
|
||||
|
|
@ -104,15 +115,11 @@ CMakeLists.txt.user
|
|||
# macOS
|
||||
.DS_Store
|
||||
|
||||
# 7zlib
|
||||
/3rdparty/7z/**/*.lib
|
||||
|
||||
# yaml-cpp
|
||||
yaml-cpp.pc
|
||||
|
||||
# libusb
|
||||
/3rdparty/libusb_cmake/config.h
|
||||
/3rdparty/libusb_cmake/libusb-1.0.pc
|
||||
_ReSharper.*/
|
||||
CMakeUserPresets.json
|
||||
|
||||
# ssl certificate
|
||||
cacert.pem
|
||||
.cache/
|
||||
.lldbinit
|
||||
|
|
|
|||
129
.gitmodules
vendored
129
.gitmodules
vendored
|
|
@ -1,77 +1,114 @@
|
|||
[submodule "rpcs3-ffmpeg"]
|
||||
path = 3rdparty/ffmpeg
|
||||
url = https://github.com/RPCS3/ffmpeg-core
|
||||
url = ../../RPCS3/ffmpeg-core.git
|
||||
ignore = dirty
|
||||
[submodule "asmjit"]
|
||||
path = asmjit
|
||||
url = https://github.com/kobalicek/asmjit
|
||||
path = 3rdparty/asmjit/asmjit
|
||||
url = ../../asmjit/asmjit.git
|
||||
branch = master
|
||||
ignore = dirty
|
||||
[submodule "llvm"]
|
||||
path = llvm
|
||||
url = https://github.com/RPCS3/llvm-mirror
|
||||
[submodule "3rdparty/llvm/llvm"]
|
||||
path = 3rdparty/llvm/llvm
|
||||
url = ../../llvm/llvm-project.git
|
||||
ignore = dirty
|
||||
[submodule "Vulkan/glslang"]
|
||||
path = Vulkan/glslang
|
||||
url = https://github.com/KhronosGroup/glslang.git
|
||||
ignore = dirty
|
||||
[submodule "Vulkan/spirv-tools"]
|
||||
path = Vulkan/spirv-tools
|
||||
url = https://github.com/KhronosGroup/SPIRV-Tools.git
|
||||
ignore = dirty
|
||||
[submodule "Vulkan/spirv-headers"]
|
||||
path = Vulkan/spirv-headers
|
||||
url = https://github.com/KhronosGroup/SPIRV-Headers.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/cereal"]
|
||||
path = 3rdparty/cereal
|
||||
url = https://github.com/RPCS3/cereal.git
|
||||
[submodule "3rdparty/glslang"]
|
||||
path = 3rdparty/glslang/glslang
|
||||
url = ../../KhronosGroup/glslang.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/zlib"]
|
||||
path = 3rdparty/zlib
|
||||
url = https://github.com/madler/zlib
|
||||
path = 3rdparty/zlib/zlib
|
||||
url = ../../madler/zlib
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/hidapi"]
|
||||
path = 3rdparty/hidapi
|
||||
url = https://github.com/RPCS3/hidapi
|
||||
path = 3rdparty/hidapi/hidapi
|
||||
url = ../../libusb/hidapi.git
|
||||
branch = master
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/pugixml"]
|
||||
path = 3rdparty/pugixml
|
||||
url = https://github.com/zeux/pugixml
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/xxHash"]
|
||||
path = 3rdparty/xxHash
|
||||
url = https://github.com/Cyan4973/xxHash
|
||||
url = ../../zeux/pugixml.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/yaml-cpp"]
|
||||
path = 3rdparty/yaml-cpp
|
||||
url = https://github.com/RPCS3/yaml-cpp.git
|
||||
path = 3rdparty/yaml-cpp/yaml-cpp
|
||||
url = ../../RPCS3/yaml-cpp.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/libpng"]
|
||||
path = 3rdparty/libpng
|
||||
url = https://github.com/glennrp/libpng.git
|
||||
path = 3rdparty/libpng/libpng
|
||||
url = ../../glennrp/libpng.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/libusb"]
|
||||
path = 3rdparty/libusb
|
||||
url = https://github.com/libusb/libusb.git
|
||||
path = 3rdparty/libusb/libusb
|
||||
url = ../../libusb/libusb.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/FAudio"]
|
||||
path = 3rdparty/FAudio
|
||||
url = https://github.com/FNA-XNA/FAudio.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/span"]
|
||||
path = 3rdparty/span
|
||||
url = https://github.com/tcbrindle/span
|
||||
url = ../../FNA-XNA/FAudio.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/curl"]
|
||||
path = 3rdparty/curl
|
||||
url = https://github.com/curl/curl.git
|
||||
path = 3rdparty/curl/curl
|
||||
url = ../../curl/curl.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/wolfssl"]
|
||||
path = 3rdparty/wolfssl
|
||||
url = https://github.com/wolfSSL/wolfssl.git
|
||||
path = 3rdparty/wolfssl/wolfssl
|
||||
url = ../../wolfSSL/wolfssl.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/flatbuffers"]
|
||||
path = 3rdparty/flatbuffers
|
||||
url = https://github.com/google/flatbuffers.git
|
||||
url = ../../google/flatbuffers.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/cubeb/cubeb"]
|
||||
path = 3rdparty/cubeb/cubeb
|
||||
url = ../../mozilla/cubeb.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/SoundTouch/soundtouch"]
|
||||
path = 3rdparty/SoundTouch/soundtouch
|
||||
url = ../../RPCS3/soundtouch.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/libsdl-org/SDL"]
|
||||
path = 3rdparty/libsdl-org/SDL
|
||||
url = ../../libsdl-org/SDL.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/miniupnp/miniupnp"]
|
||||
path = 3rdparty/miniupnp/miniupnp
|
||||
url = ../../miniupnp/miniupnp.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/rtmidi/rtmidi"]
|
||||
path = 3rdparty/rtmidi/rtmidi
|
||||
url = ../../thestk/rtmidi
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/zstd/zstd"]
|
||||
path = 3rdparty/zstd/zstd
|
||||
url = ../../facebook/zstd
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/7zip/7zip"]
|
||||
path = 3rdparty/7zip/7zip
|
||||
url = ../../ip7z/7zip.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/OpenAL/openal-soft"]
|
||||
path = 3rdparty/OpenAL/openal-soft
|
||||
url = ../../kcat/openal-soft.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/stblib/stb"]
|
||||
path = 3rdparty/stblib/stb
|
||||
url = ../../nothings/stb.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/opencv/opencv"]
|
||||
path = 3rdparty/opencv/opencv
|
||||
url = ../../Megamouse/opencv_minimal.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/fusion/fusion"]
|
||||
path = 3rdparty/fusion/fusion
|
||||
url = ../../xioTechnologies/Fusion.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/discord-rpc/discord-rpc"]
|
||||
path = 3rdparty/discord-rpc/discord-rpc
|
||||
url = ../../Vestrel/discord-rpc
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/GPUOpen/VulkanMemoryAllocator"]
|
||||
path = 3rdparty/GPUOpen/VulkanMemoryAllocator
|
||||
url = ../../GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/feralinteractive/feralinteractive"]
|
||||
path = 3rdparty/feralinteractive/feralinteractive
|
||||
url = ../../FeralInteractive/gamemode.git
|
||||
ignore = dirty
|
||||
|
|
|
|||
202
3rdparty/7z/7z.h
vendored
202
3rdparty/7z/7z.h
vendored
|
|
@ -1,202 +0,0 @@
|
|||
/* 7z.h -- 7z interface
|
||||
2017-04-03 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __7Z_H
|
||||
#define __7Z_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
#define k7zStartHeaderSize 0x20
|
||||
#define k7zSignatureSize 6
|
||||
|
||||
extern const Byte k7zSignature[k7zSignatureSize];
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const Byte *Data;
|
||||
size_t Size;
|
||||
} CSzData;
|
||||
|
||||
/* CSzCoderInfo & CSzFolder support only default methods */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
size_t PropsOffset;
|
||||
UInt32 MethodID;
|
||||
Byte NumStreams;
|
||||
Byte PropsSize;
|
||||
} CSzCoderInfo;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UInt32 InIndex;
|
||||
UInt32 OutIndex;
|
||||
} CSzBond;
|
||||
|
||||
#define SZ_NUM_CODERS_IN_FOLDER_MAX 4
|
||||
#define SZ_NUM_BONDS_IN_FOLDER_MAX 3
|
||||
#define SZ_NUM_PACK_STREAMS_IN_FOLDER_MAX 4
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UInt32 NumCoders;
|
||||
UInt32 NumBonds;
|
||||
UInt32 NumPackStreams;
|
||||
UInt32 UnpackStream;
|
||||
UInt32 PackStreams[SZ_NUM_PACK_STREAMS_IN_FOLDER_MAX];
|
||||
CSzBond Bonds[SZ_NUM_BONDS_IN_FOLDER_MAX];
|
||||
CSzCoderInfo Coders[SZ_NUM_CODERS_IN_FOLDER_MAX];
|
||||
} CSzFolder;
|
||||
|
||||
|
||||
SRes SzGetNextFolderItem(CSzFolder *f, CSzData *sd);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UInt32 Low;
|
||||
UInt32 High;
|
||||
} CNtfsFileTime;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Byte *Defs; /* MSB 0 bit numbering */
|
||||
UInt32 *Vals;
|
||||
} CSzBitUi32s;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Byte *Defs; /* MSB 0 bit numbering */
|
||||
// UInt64 *Vals;
|
||||
CNtfsFileTime *Vals;
|
||||
} CSzBitUi64s;
|
||||
|
||||
#define SzBitArray_Check(p, i) (((p)[(i) >> 3] & (0x80 >> ((i) & 7))) != 0)
|
||||
|
||||
#define SzBitWithVals_Check(p, i) ((p)->Defs && ((p)->Defs[(i) >> 3] & (0x80 >> ((i) & 7))) != 0)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UInt32 NumPackStreams;
|
||||
UInt32 NumFolders;
|
||||
|
||||
UInt64 *PackPositions; // NumPackStreams + 1
|
||||
CSzBitUi32s FolderCRCs; // NumFolders
|
||||
|
||||
size_t *FoCodersOffsets; // NumFolders + 1
|
||||
UInt32 *FoStartPackStreamIndex; // NumFolders + 1
|
||||
UInt32 *FoToCoderUnpackSizes; // NumFolders + 1
|
||||
Byte *FoToMainUnpackSizeIndex; // NumFolders
|
||||
UInt64 *CoderUnpackSizes; // for all coders in all folders
|
||||
|
||||
Byte *CodersData;
|
||||
} CSzAr;
|
||||
|
||||
UInt64 SzAr_GetFolderUnpackSize(const CSzAr *p, UInt32 folderIndex);
|
||||
|
||||
SRes SzAr_DecodeFolder(const CSzAr *p, UInt32 folderIndex,
|
||||
ILookInStream *stream, UInt64 startPos,
|
||||
Byte *outBuffer, size_t outSize,
|
||||
ISzAllocPtr allocMain);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
CSzAr db;
|
||||
|
||||
UInt64 startPosAfterHeader;
|
||||
UInt64 dataPos;
|
||||
|
||||
UInt32 NumFiles;
|
||||
|
||||
UInt64 *UnpackPositions; // NumFiles + 1
|
||||
// Byte *IsEmptyFiles;
|
||||
Byte *IsDirs;
|
||||
CSzBitUi32s CRCs;
|
||||
|
||||
CSzBitUi32s Attribs;
|
||||
// CSzBitUi32s Parents;
|
||||
CSzBitUi64s MTime;
|
||||
CSzBitUi64s CTime;
|
||||
|
||||
UInt32 *FolderToFile; // NumFolders + 1
|
||||
UInt32 *FileToFolder; // NumFiles
|
||||
|
||||
size_t *FileNameOffsets; /* in 2-byte steps */
|
||||
Byte *FileNames; /* UTF-16-LE */
|
||||
} CSzArEx;
|
||||
|
||||
#define SzArEx_IsDir(p, i) (SzBitArray_Check((p)->IsDirs, i))
|
||||
|
||||
#define SzArEx_GetFileSize(p, i) ((p)->UnpackPositions[(i) + 1] - (p)->UnpackPositions[i])
|
||||
|
||||
void SzArEx_Init(CSzArEx *p);
|
||||
void SzArEx_Free(CSzArEx *p, ISzAllocPtr alloc);
|
||||
UInt64 SzArEx_GetFolderStreamPos(const CSzArEx *p, UInt32 folderIndex, UInt32 indexInFolder);
|
||||
int SzArEx_GetFolderFullPackSize(const CSzArEx *p, UInt32 folderIndex, UInt64 *resSize);
|
||||
|
||||
/*
|
||||
if dest == NULL, the return value specifies the required size of the buffer,
|
||||
in 16-bit characters, including the null-terminating character.
|
||||
if dest != NULL, the return value specifies the number of 16-bit characters that
|
||||
are written to the dest, including the null-terminating character. */
|
||||
|
||||
size_t SzArEx_GetFileNameUtf16(const CSzArEx *p, size_t fileIndex, UInt16 *dest);
|
||||
|
||||
/*
|
||||
size_t SzArEx_GetFullNameLen(const CSzArEx *p, size_t fileIndex);
|
||||
UInt16 *SzArEx_GetFullNameUtf16_Back(const CSzArEx *p, size_t fileIndex, UInt16 *dest);
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
SzArEx_Extract extracts file from archive
|
||||
|
||||
*outBuffer must be 0 before first call for each new archive.
|
||||
|
||||
Extracting cache:
|
||||
If you need to decompress more than one file, you can send
|
||||
these values from previous call:
|
||||
*blockIndex,
|
||||
*outBuffer,
|
||||
*outBufferSize
|
||||
You can consider "*outBuffer" as cache of solid block. If your archive is solid,
|
||||
it will increase decompression speed.
|
||||
|
||||
If you use external function, you can declare these 3 cache variables
|
||||
(blockIndex, outBuffer, outBufferSize) as static in that external function.
|
||||
|
||||
Free *outBuffer and set *outBuffer to 0, if you want to flush cache.
|
||||
*/
|
||||
|
||||
SRes SzArEx_Extract(
|
||||
const CSzArEx *db,
|
||||
ILookInStream *inStream,
|
||||
UInt32 fileIndex, /* index of file */
|
||||
UInt32 *blockIndex, /* index of solid block */
|
||||
Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */
|
||||
size_t *outBufferSize, /* buffer size for output buffer */
|
||||
size_t *offset, /* offset of stream for required file in *outBuffer */
|
||||
size_t *outSizeProcessed, /* size of file in *outBuffer */
|
||||
ISzAllocPtr allocMain,
|
||||
ISzAllocPtr allocTemp);
|
||||
|
||||
|
||||
/*
|
||||
SzArEx_Open Errors:
|
||||
SZ_ERROR_NO_ARCHIVE
|
||||
SZ_ERROR_ARCHIVE
|
||||
SZ_ERROR_UNSUPPORTED
|
||||
SZ_ERROR_MEM
|
||||
SZ_ERROR_CRC
|
||||
SZ_ERROR_INPUT_EOF
|
||||
SZ_ERROR_FAIL
|
||||
*/
|
||||
|
||||
SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream,
|
||||
ISzAllocPtr allocMain, ISzAllocPtr allocTemp);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
80
3rdparty/7z/7zAlloc.c
vendored
80
3rdparty/7z/7zAlloc.c
vendored
|
|
@ -1,80 +0,0 @@
|
|||
/* 7zAlloc.c -- Allocation functions
|
||||
2017-04-03 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "7zAlloc.h"
|
||||
|
||||
/* #define _SZ_ALLOC_DEBUG */
|
||||
/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */
|
||||
|
||||
#ifdef _SZ_ALLOC_DEBUG
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
int g_allocCount = 0;
|
||||
int g_allocCountTemp = 0;
|
||||
|
||||
#endif
|
||||
|
||||
void *SzAlloc(ISzAllocPtr p, size_t size)
|
||||
{
|
||||
UNUSED_VAR(p);
|
||||
if (size == 0)
|
||||
return 0;
|
||||
#ifdef _SZ_ALLOC_DEBUG
|
||||
fprintf(stderr, "\nAlloc %10u bytes; count = %10d", (unsigned)size, g_allocCount);
|
||||
g_allocCount++;
|
||||
#endif
|
||||
return malloc(size);
|
||||
}
|
||||
|
||||
void SzFree(ISzAllocPtr p, void *address)
|
||||
{
|
||||
UNUSED_VAR(p);
|
||||
#ifdef _SZ_ALLOC_DEBUG
|
||||
if (address != 0)
|
||||
{
|
||||
g_allocCount--;
|
||||
fprintf(stderr, "\nFree; count = %10d", g_allocCount);
|
||||
}
|
||||
#endif
|
||||
free(address);
|
||||
}
|
||||
|
||||
void *SzAllocTemp(ISzAllocPtr p, size_t size)
|
||||
{
|
||||
UNUSED_VAR(p);
|
||||
if (size == 0)
|
||||
return 0;
|
||||
#ifdef _SZ_ALLOC_DEBUG
|
||||
fprintf(stderr, "\nAlloc_temp %10u bytes; count = %10d", (unsigned)size, g_allocCountTemp);
|
||||
g_allocCountTemp++;
|
||||
#ifdef _WIN32
|
||||
return HeapAlloc(GetProcessHeap(), 0, size);
|
||||
#endif
|
||||
#endif
|
||||
return malloc(size);
|
||||
}
|
||||
|
||||
void SzFreeTemp(ISzAllocPtr p, void *address)
|
||||
{
|
||||
UNUSED_VAR(p);
|
||||
#ifdef _SZ_ALLOC_DEBUG
|
||||
if (address != 0)
|
||||
{
|
||||
g_allocCountTemp--;
|
||||
fprintf(stderr, "\nFree_temp; count = %10d", g_allocCountTemp);
|
||||
}
|
||||
#ifdef _WIN32
|
||||
HeapFree(GetProcessHeap(), 0, address);
|
||||
return;
|
||||
#endif
|
||||
#endif
|
||||
free(address);
|
||||
}
|
||||
19
3rdparty/7z/7zAlloc.h
vendored
19
3rdparty/7z/7zAlloc.h
vendored
|
|
@ -1,19 +0,0 @@
|
|||
/* 7zAlloc.h -- Allocation functions
|
||||
2017-04-03 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __7Z_ALLOC_H
|
||||
#define __7Z_ALLOC_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
void *SzAlloc(ISzAllocPtr p, size_t size);
|
||||
void SzFree(ISzAllocPtr p, void *address);
|
||||
|
||||
void *SzAllocTemp(ISzAllocPtr p, size_t size);
|
||||
void SzFreeTemp(ISzAllocPtr p, void *address);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
1771
3rdparty/7z/7zArcIn.c
vendored
1771
3rdparty/7z/7zArcIn.c
vendored
File diff suppressed because it is too large
Load diff
36
3rdparty/7z/7zBuf.c
vendored
36
3rdparty/7z/7zBuf.c
vendored
|
|
@ -1,36 +0,0 @@
|
|||
/* 7zBuf.c -- Byte Buffer
|
||||
2017-04-03 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "7zBuf.h"
|
||||
|
||||
void Buf_Init(CBuf *p)
|
||||
{
|
||||
p->data = 0;
|
||||
p->size = 0;
|
||||
}
|
||||
|
||||
int Buf_Create(CBuf *p, size_t size, ISzAllocPtr alloc)
|
||||
{
|
||||
p->size = 0;
|
||||
if (size == 0)
|
||||
{
|
||||
p->data = 0;
|
||||
return 1;
|
||||
}
|
||||
p->data = (Byte *)ISzAlloc_Alloc(alloc, size);
|
||||
if (p->data)
|
||||
{
|
||||
p->size = size;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Buf_Free(CBuf *p, ISzAllocPtr alloc)
|
||||
{
|
||||
ISzAlloc_Free(alloc, p->data);
|
||||
p->data = 0;
|
||||
p->size = 0;
|
||||
}
|
||||
35
3rdparty/7z/7zBuf.h
vendored
35
3rdparty/7z/7zBuf.h
vendored
|
|
@ -1,35 +0,0 @@
|
|||
/* 7zBuf.h -- Byte Buffer
|
||||
2017-04-03 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __7Z_BUF_H
|
||||
#define __7Z_BUF_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Byte *data;
|
||||
size_t size;
|
||||
} CBuf;
|
||||
|
||||
void Buf_Init(CBuf *p);
|
||||
int Buf_Create(CBuf *p, size_t size, ISzAllocPtr alloc);
|
||||
void Buf_Free(CBuf *p, ISzAllocPtr alloc);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Byte *data;
|
||||
size_t size;
|
||||
size_t pos;
|
||||
} CDynBuf;
|
||||
|
||||
void DynBuf_Construct(CDynBuf *p);
|
||||
void DynBuf_SeekToBeg(CDynBuf *p);
|
||||
int DynBuf_Write(CDynBuf *p, const Byte *buf, size_t size, ISzAllocPtr alloc);
|
||||
void DynBuf_Free(CDynBuf *p, ISzAllocPtr alloc);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
52
3rdparty/7z/7zBuf2.c
vendored
52
3rdparty/7z/7zBuf2.c
vendored
|
|
@ -1,52 +0,0 @@
|
|||
/* 7zBuf2.c -- Byte Buffer
|
||||
2017-04-03 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "7zBuf.h"
|
||||
|
||||
void DynBuf_Construct(CDynBuf *p)
|
||||
{
|
||||
p->data = 0;
|
||||
p->size = 0;
|
||||
p->pos = 0;
|
||||
}
|
||||
|
||||
void DynBuf_SeekToBeg(CDynBuf *p)
|
||||
{
|
||||
p->pos = 0;
|
||||
}
|
||||
|
||||
int DynBuf_Write(CDynBuf *p, const Byte *buf, size_t size, ISzAllocPtr alloc)
|
||||
{
|
||||
if (size > p->size - p->pos)
|
||||
{
|
||||
size_t newSize = p->pos + size;
|
||||
Byte *data;
|
||||
newSize += newSize / 4;
|
||||
data = (Byte *)ISzAlloc_Alloc(alloc, newSize);
|
||||
if (!data)
|
||||
return 0;
|
||||
p->size = newSize;
|
||||
if (p->pos != 0)
|
||||
memcpy(data, p->data, p->pos);
|
||||
ISzAlloc_Free(alloc, p->data);
|
||||
p->data = data;
|
||||
}
|
||||
if (size != 0)
|
||||
{
|
||||
memcpy(p->data + p->pos, buf, size);
|
||||
p->pos += size;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void DynBuf_Free(CDynBuf *p, ISzAllocPtr alloc)
|
||||
{
|
||||
ISzAlloc_Free(alloc, p->data);
|
||||
p->data = 0;
|
||||
p->size = 0;
|
||||
p->pos = 0;
|
||||
}
|
||||
128
3rdparty/7z/7zCrc.c
vendored
128
3rdparty/7z/7zCrc.c
vendored
|
|
@ -1,128 +0,0 @@
|
|||
/* 7zCrc.c -- CRC32 init
|
||||
2017-06-06 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "7zCrc.h"
|
||||
#include "CpuArch.h"
|
||||
|
||||
#define kCrcPoly 0xEDB88320
|
||||
|
||||
#ifdef MY_CPU_LE
|
||||
#define CRC_NUM_TABLES 8
|
||||
#else
|
||||
#define CRC_NUM_TABLES 9
|
||||
|
||||
#define CRC_UINT32_SWAP(v) ((v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | (v << 24))
|
||||
|
||||
UInt32 MY_FAST_CALL CrcUpdateT1_BeT4(UInt32 v, const void *data, size_t size, const UInt32 *table);
|
||||
UInt32 MY_FAST_CALL CrcUpdateT1_BeT8(UInt32 v, const void *data, size_t size, const UInt32 *table);
|
||||
#endif
|
||||
|
||||
#ifndef MY_CPU_BE
|
||||
UInt32 MY_FAST_CALL CrcUpdateT4(UInt32 v, const void *data, size_t size, const UInt32 *table);
|
||||
UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table);
|
||||
#endif
|
||||
|
||||
typedef UInt32 (MY_FAST_CALL *CRC_FUNC)(UInt32 v, const void *data, size_t size, const UInt32 *table);
|
||||
|
||||
CRC_FUNC g_CrcUpdateT4;
|
||||
CRC_FUNC g_CrcUpdateT8;
|
||||
CRC_FUNC g_CrcUpdate;
|
||||
|
||||
UInt32 g_CrcTable[256 * CRC_NUM_TABLES];
|
||||
|
||||
UInt32 MY_FAST_CALL CrcUpdate(UInt32 v, const void *data, size_t size)
|
||||
{
|
||||
return g_CrcUpdate(v, data, size, g_CrcTable);
|
||||
}
|
||||
|
||||
UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size)
|
||||
{
|
||||
return g_CrcUpdate(CRC_INIT_VAL, data, size, g_CrcTable) ^ CRC_INIT_VAL;
|
||||
}
|
||||
|
||||
#define CRC_UPDATE_BYTE_2(crc, b) (table[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8))
|
||||
|
||||
UInt32 MY_FAST_CALL CrcUpdateT1(UInt32 v, const void *data, size_t size, const UInt32 *table)
|
||||
{
|
||||
const Byte *p = (const Byte *)data;
|
||||
const Byte *pEnd = p + size;
|
||||
for (; p != pEnd; p++)
|
||||
v = CRC_UPDATE_BYTE_2(v, *p);
|
||||
return v;
|
||||
}
|
||||
|
||||
void MY_FAST_CALL CrcGenerateTable()
|
||||
{
|
||||
UInt32 i;
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
UInt32 r = i;
|
||||
unsigned j;
|
||||
for (j = 0; j < 8; j++)
|
||||
r = (r >> 1) ^ (kCrcPoly & ((UInt32)0 - (r & 1)));
|
||||
g_CrcTable[i] = r;
|
||||
}
|
||||
for (i = 256; i < 256 * CRC_NUM_TABLES; i++)
|
||||
{
|
||||
UInt32 r = g_CrcTable[(size_t)i - 256];
|
||||
g_CrcTable[i] = g_CrcTable[r & 0xFF] ^ (r >> 8);
|
||||
}
|
||||
|
||||
#if CRC_NUM_TABLES < 4
|
||||
|
||||
g_CrcUpdate = CrcUpdateT1;
|
||||
|
||||
#else
|
||||
|
||||
#ifdef MY_CPU_LE
|
||||
|
||||
g_CrcUpdateT4 = CrcUpdateT4;
|
||||
g_CrcUpdate = CrcUpdateT4;
|
||||
|
||||
#if CRC_NUM_TABLES >= 8
|
||||
g_CrcUpdateT8 = CrcUpdateT8;
|
||||
|
||||
#ifdef MY_CPU_X86_OR_AMD64
|
||||
if (!CPU_Is_InOrder())
|
||||
#endif
|
||||
g_CrcUpdate = CrcUpdateT8;
|
||||
#endif
|
||||
|
||||
#else
|
||||
{
|
||||
#ifndef MY_CPU_BE
|
||||
UInt32 k = 0x01020304;
|
||||
const Byte *p = (const Byte *)&k;
|
||||
if (p[0] == 4 && p[1] == 3)
|
||||
{
|
||||
g_CrcUpdateT4 = CrcUpdateT4;
|
||||
g_CrcUpdate = CrcUpdateT4;
|
||||
#if CRC_NUM_TABLES >= 8
|
||||
g_CrcUpdateT8 = CrcUpdateT8;
|
||||
g_CrcUpdate = CrcUpdateT8;
|
||||
#endif
|
||||
}
|
||||
else if (p[0] != 1 || p[1] != 2)
|
||||
g_CrcUpdate = CrcUpdateT1;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
for (i = 256 * CRC_NUM_TABLES - 1; i >= 256; i--)
|
||||
{
|
||||
UInt32 x = g_CrcTable[(size_t)i - 256];
|
||||
g_CrcTable[i] = CRC_UINT32_SWAP(x);
|
||||
}
|
||||
g_CrcUpdateT4 = CrcUpdateT1_BeT4;
|
||||
g_CrcUpdate = CrcUpdateT1_BeT4;
|
||||
#if CRC_NUM_TABLES >= 8
|
||||
g_CrcUpdateT8 = CrcUpdateT1_BeT8;
|
||||
g_CrcUpdate = CrcUpdateT1_BeT8;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
}
|
||||
25
3rdparty/7z/7zCrc.h
vendored
25
3rdparty/7z/7zCrc.h
vendored
|
|
@ -1,25 +0,0 @@
|
|||
/* 7zCrc.h -- CRC32 calculation
|
||||
2013-01-18 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __7Z_CRC_H
|
||||
#define __7Z_CRC_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
extern UInt32 g_CrcTable[];
|
||||
|
||||
/* Call CrcGenerateTable one time before other CRC functions */
|
||||
void MY_FAST_CALL CrcGenerateTable(void);
|
||||
|
||||
#define CRC_INIT_VAL 0xFFFFFFFF
|
||||
#define CRC_GET_DIGEST(crc) ((crc) ^ CRC_INIT_VAL)
|
||||
#define CRC_UPDATE_BYTE(crc, b) (g_CrcTable[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8))
|
||||
|
||||
UInt32 MY_FAST_CALL CrcUpdate(UInt32 crc, const void *data, size_t size);
|
||||
UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
115
3rdparty/7z/7zCrcOpt.c
vendored
115
3rdparty/7z/7zCrcOpt.c
vendored
|
|
@ -1,115 +0,0 @@
|
|||
/* 7zCrcOpt.c -- CRC32 calculation
|
||||
2017-04-03 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "CpuArch.h"
|
||||
|
||||
#ifndef MY_CPU_BE
|
||||
|
||||
#define CRC_UPDATE_BYTE_2(crc, b) (table[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8))
|
||||
|
||||
UInt32 MY_FAST_CALL CrcUpdateT4(UInt32 v, const void *data, size_t size, const UInt32 *table)
|
||||
{
|
||||
const Byte *p = (const Byte *)data;
|
||||
for (; size > 0 && ((unsigned)(ptrdiff_t)p & 3) != 0; size--, p++)
|
||||
v = CRC_UPDATE_BYTE_2(v, *p);
|
||||
for (; size >= 4; size -= 4, p += 4)
|
||||
{
|
||||
v ^= *(const UInt32 *)p;
|
||||
v =
|
||||
(table + 0x300)[((v ) & 0xFF)]
|
||||
^ (table + 0x200)[((v >> 8) & 0xFF)]
|
||||
^ (table + 0x100)[((v >> 16) & 0xFF)]
|
||||
^ (table + 0x000)[((v >> 24))];
|
||||
}
|
||||
for (; size > 0; size--, p++)
|
||||
v = CRC_UPDATE_BYTE_2(v, *p);
|
||||
return v;
|
||||
}
|
||||
|
||||
UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table)
|
||||
{
|
||||
const Byte *p = (const Byte *)data;
|
||||
for (; size > 0 && ((unsigned)(ptrdiff_t)p & 7) != 0; size--, p++)
|
||||
v = CRC_UPDATE_BYTE_2(v, *p);
|
||||
for (; size >= 8; size -= 8, p += 8)
|
||||
{
|
||||
UInt32 d;
|
||||
v ^= *(const UInt32 *)p;
|
||||
v =
|
||||
(table + 0x700)[((v ) & 0xFF)]
|
||||
^ (table + 0x600)[((v >> 8) & 0xFF)]
|
||||
^ (table + 0x500)[((v >> 16) & 0xFF)]
|
||||
^ (table + 0x400)[((v >> 24))];
|
||||
d = *((const UInt32 *)p + 1);
|
||||
v ^=
|
||||
(table + 0x300)[((d ) & 0xFF)]
|
||||
^ (table + 0x200)[((d >> 8) & 0xFF)]
|
||||
^ (table + 0x100)[((d >> 16) & 0xFF)]
|
||||
^ (table + 0x000)[((d >> 24))];
|
||||
}
|
||||
for (; size > 0; size--, p++)
|
||||
v = CRC_UPDATE_BYTE_2(v, *p);
|
||||
return v;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef MY_CPU_LE
|
||||
|
||||
#define CRC_UINT32_SWAP(v) ((v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | (v << 24))
|
||||
|
||||
#define CRC_UPDATE_BYTE_2_BE(crc, b) (table[(((crc) >> 24) ^ (b))] ^ ((crc) << 8))
|
||||
|
||||
UInt32 MY_FAST_CALL CrcUpdateT1_BeT4(UInt32 v, const void *data, size_t size, const UInt32 *table)
|
||||
{
|
||||
const Byte *p = (const Byte *)data;
|
||||
table += 0x100;
|
||||
v = CRC_UINT32_SWAP(v);
|
||||
for (; size > 0 && ((unsigned)(ptrdiff_t)p & 3) != 0; size--, p++)
|
||||
v = CRC_UPDATE_BYTE_2_BE(v, *p);
|
||||
for (; size >= 4; size -= 4, p += 4)
|
||||
{
|
||||
v ^= *(const UInt32 *)p;
|
||||
v =
|
||||
(table + 0x000)[((v ) & 0xFF)]
|
||||
^ (table + 0x100)[((v >> 8) & 0xFF)]
|
||||
^ (table + 0x200)[((v >> 16) & 0xFF)]
|
||||
^ (table + 0x300)[((v >> 24))];
|
||||
}
|
||||
for (; size > 0; size--, p++)
|
||||
v = CRC_UPDATE_BYTE_2_BE(v, *p);
|
||||
return CRC_UINT32_SWAP(v);
|
||||
}
|
||||
|
||||
UInt32 MY_FAST_CALL CrcUpdateT1_BeT8(UInt32 v, const void *data, size_t size, const UInt32 *table)
|
||||
{
|
||||
const Byte *p = (const Byte *)data;
|
||||
table += 0x100;
|
||||
v = CRC_UINT32_SWAP(v);
|
||||
for (; size > 0 && ((unsigned)(ptrdiff_t)p & 7) != 0; size--, p++)
|
||||
v = CRC_UPDATE_BYTE_2_BE(v, *p);
|
||||
for (; size >= 8; size -= 8, p += 8)
|
||||
{
|
||||
UInt32 d;
|
||||
v ^= *(const UInt32 *)p;
|
||||
v =
|
||||
(table + 0x400)[((v ) & 0xFF)]
|
||||
^ (table + 0x500)[((v >> 8) & 0xFF)]
|
||||
^ (table + 0x600)[((v >> 16) & 0xFF)]
|
||||
^ (table + 0x700)[((v >> 24))];
|
||||
d = *((const UInt32 *)p + 1);
|
||||
v ^=
|
||||
(table + 0x000)[((d ) & 0xFF)]
|
||||
^ (table + 0x100)[((d >> 8) & 0xFF)]
|
||||
^ (table + 0x200)[((d >> 16) & 0xFF)]
|
||||
^ (table + 0x300)[((d >> 24))];
|
||||
}
|
||||
for (; size > 0; size--, p++)
|
||||
v = CRC_UPDATE_BYTE_2_BE(v, *p);
|
||||
return CRC_UINT32_SWAP(v);
|
||||
}
|
||||
|
||||
#endif
|
||||
591
3rdparty/7z/7zDec.c
vendored
591
3rdparty/7z/7zDec.c
vendored
|
|
@ -1,591 +0,0 @@
|
|||
/* 7zDec.c -- Decoding from 7z folder
|
||||
2019-02-02 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/* #define _7ZIP_PPMD_SUPPPORT */
|
||||
|
||||
#include "7z.h"
|
||||
#include "7zCrc.h"
|
||||
|
||||
#include "Bcj2.h"
|
||||
#include "Bra.h"
|
||||
#include "CpuArch.h"
|
||||
#include "Delta.h"
|
||||
#include "LzmaDec.h"
|
||||
#include "Lzma2Dec.h"
|
||||
#ifdef _7ZIP_PPMD_SUPPPORT
|
||||
#include "Ppmd7.h"
|
||||
#endif
|
||||
|
||||
#define k_Copy 0
|
||||
#define k_Delta 3
|
||||
#define k_LZMA2 0x21
|
||||
#define k_LZMA 0x30101
|
||||
#define k_BCJ 0x3030103
|
||||
#define k_BCJ2 0x303011B
|
||||
#define k_PPC 0x3030205
|
||||
#define k_IA64 0x3030401
|
||||
#define k_ARM 0x3030501
|
||||
#define k_ARMT 0x3030701
|
||||
#define k_SPARC 0x3030805
|
||||
|
||||
|
||||
#ifdef _7ZIP_PPMD_SUPPPORT
|
||||
|
||||
#define k_PPMD 0x30401
|
||||
|
||||
typedef struct
|
||||
{
|
||||
IByteIn vt;
|
||||
const Byte *cur;
|
||||
const Byte *end;
|
||||
const Byte *begin;
|
||||
UInt64 processed;
|
||||
BoolInt extra;
|
||||
SRes res;
|
||||
const ILookInStream *inStream;
|
||||
} CByteInToLook;
|
||||
|
||||
static Byte ReadByte(const IByteIn *pp)
|
||||
{
|
||||
CByteInToLook *p = CONTAINER_FROM_VTBL(pp, CByteInToLook, vt);
|
||||
if (p->cur != p->end)
|
||||
return *p->cur++;
|
||||
if (p->res == SZ_OK)
|
||||
{
|
||||
size_t size = p->cur - p->begin;
|
||||
p->processed += size;
|
||||
p->res = ILookInStream_Skip(p->inStream, size);
|
||||
size = (1 << 25);
|
||||
p->res = ILookInStream_Look(p->inStream, (const void **)&p->begin, &size);
|
||||
p->cur = p->begin;
|
||||
p->end = p->begin + size;
|
||||
if (size != 0)
|
||||
return *p->cur++;;
|
||||
}
|
||||
p->extra = True;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static SRes SzDecodePpmd(const Byte *props, unsigned propsSize, UInt64 inSize, const ILookInStream *inStream,
|
||||
Byte *outBuffer, SizeT outSize, ISzAllocPtr allocMain)
|
||||
{
|
||||
CPpmd7 ppmd;
|
||||
CByteInToLook s;
|
||||
SRes res = SZ_OK;
|
||||
|
||||
s.vt.Read = ReadByte;
|
||||
s.inStream = inStream;
|
||||
s.begin = s.end = s.cur = NULL;
|
||||
s.extra = False;
|
||||
s.res = SZ_OK;
|
||||
s.processed = 0;
|
||||
|
||||
if (propsSize != 5)
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
|
||||
{
|
||||
unsigned order = props[0];
|
||||
UInt32 memSize = GetUi32(props + 1);
|
||||
if (order < PPMD7_MIN_ORDER ||
|
||||
order > PPMD7_MAX_ORDER ||
|
||||
memSize < PPMD7_MIN_MEM_SIZE ||
|
||||
memSize > PPMD7_MAX_MEM_SIZE)
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
Ppmd7_Construct(&ppmd);
|
||||
if (!Ppmd7_Alloc(&ppmd, memSize, allocMain))
|
||||
return SZ_ERROR_MEM;
|
||||
Ppmd7_Init(&ppmd, order);
|
||||
}
|
||||
{
|
||||
CPpmd7z_RangeDec rc;
|
||||
Ppmd7z_RangeDec_CreateVTable(&rc);
|
||||
rc.Stream = &s.vt;
|
||||
if (!Ppmd7z_RangeDec_Init(&rc))
|
||||
res = SZ_ERROR_DATA;
|
||||
else if (s.extra)
|
||||
res = (s.res != SZ_OK ? s.res : SZ_ERROR_DATA);
|
||||
else
|
||||
{
|
||||
SizeT i;
|
||||
for (i = 0; i < outSize; i++)
|
||||
{
|
||||
int sym = Ppmd7_DecodeSymbol(&ppmd, &rc.vt);
|
||||
if (s.extra || sym < 0)
|
||||
break;
|
||||
outBuffer[i] = (Byte)sym;
|
||||
}
|
||||
if (i != outSize)
|
||||
res = (s.res != SZ_OK ? s.res : SZ_ERROR_DATA);
|
||||
else if (s.processed + (s.cur - s.begin) != inSize || !Ppmd7z_RangeDec_IsFinishedOK(&rc))
|
||||
res = SZ_ERROR_DATA;
|
||||
}
|
||||
}
|
||||
Ppmd7_Free(&ppmd, allocMain);
|
||||
return res;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
static SRes SzDecodeLzma(const Byte *props, unsigned propsSize, UInt64 inSize, ILookInStream *inStream,
|
||||
Byte *outBuffer, SizeT outSize, ISzAllocPtr allocMain)
|
||||
{
|
||||
CLzmaDec state;
|
||||
SRes res = SZ_OK;
|
||||
|
||||
LzmaDec_Construct(&state);
|
||||
RINOK(LzmaDec_AllocateProbs(&state, props, propsSize, allocMain));
|
||||
state.dic = outBuffer;
|
||||
state.dicBufSize = outSize;
|
||||
LzmaDec_Init(&state);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
const void *inBuf = NULL;
|
||||
size_t lookahead = (1 << 18);
|
||||
if (lookahead > inSize)
|
||||
lookahead = (size_t)inSize;
|
||||
res = ILookInStream_Look(inStream, &inBuf, &lookahead);
|
||||
if (res != SZ_OK)
|
||||
break;
|
||||
|
||||
{
|
||||
SizeT inProcessed = (SizeT)lookahead, dicPos = state.dicPos;
|
||||
ELzmaStatus status;
|
||||
res = LzmaDec_DecodeToDic(&state, outSize, (const Byte *)inBuf, &inProcessed, LZMA_FINISH_END, &status);
|
||||
lookahead -= inProcessed;
|
||||
inSize -= inProcessed;
|
||||
if (res != SZ_OK)
|
||||
break;
|
||||
|
||||
if (status == LZMA_STATUS_FINISHED_WITH_MARK)
|
||||
{
|
||||
if (outSize != state.dicPos || inSize != 0)
|
||||
res = SZ_ERROR_DATA;
|
||||
break;
|
||||
}
|
||||
|
||||
if (outSize == state.dicPos && inSize == 0 && status == LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK)
|
||||
break;
|
||||
|
||||
if (inProcessed == 0 && dicPos == state.dicPos)
|
||||
{
|
||||
res = SZ_ERROR_DATA;
|
||||
break;
|
||||
}
|
||||
|
||||
res = ILookInStream_Skip(inStream, inProcessed);
|
||||
if (res != SZ_OK)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
LzmaDec_FreeProbs(&state, allocMain);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
#ifndef _7Z_NO_METHOD_LZMA2
|
||||
|
||||
static SRes SzDecodeLzma2(const Byte *props, unsigned propsSize, UInt64 inSize, ILookInStream *inStream,
|
||||
Byte *outBuffer, SizeT outSize, ISzAllocPtr allocMain)
|
||||
{
|
||||
CLzma2Dec state;
|
||||
SRes res = SZ_OK;
|
||||
|
||||
Lzma2Dec_Construct(&state);
|
||||
if (propsSize != 1)
|
||||
return SZ_ERROR_DATA;
|
||||
RINOK(Lzma2Dec_AllocateProbs(&state, props[0], allocMain));
|
||||
state.decoder.dic = outBuffer;
|
||||
state.decoder.dicBufSize = outSize;
|
||||
Lzma2Dec_Init(&state);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
const void *inBuf = NULL;
|
||||
size_t lookahead = (1 << 18);
|
||||
if (lookahead > inSize)
|
||||
lookahead = (size_t)inSize;
|
||||
res = ILookInStream_Look(inStream, &inBuf, &lookahead);
|
||||
if (res != SZ_OK)
|
||||
break;
|
||||
|
||||
{
|
||||
SizeT inProcessed = (SizeT)lookahead, dicPos = state.decoder.dicPos;
|
||||
ELzmaStatus status;
|
||||
res = Lzma2Dec_DecodeToDic(&state, outSize, (const Byte *)inBuf, &inProcessed, LZMA_FINISH_END, &status);
|
||||
lookahead -= inProcessed;
|
||||
inSize -= inProcessed;
|
||||
if (res != SZ_OK)
|
||||
break;
|
||||
|
||||
if (status == LZMA_STATUS_FINISHED_WITH_MARK)
|
||||
{
|
||||
if (outSize != state.decoder.dicPos || inSize != 0)
|
||||
res = SZ_ERROR_DATA;
|
||||
break;
|
||||
}
|
||||
|
||||
if (inProcessed == 0 && dicPos == state.decoder.dicPos)
|
||||
{
|
||||
res = SZ_ERROR_DATA;
|
||||
break;
|
||||
}
|
||||
|
||||
res = ILookInStream_Skip(inStream, inProcessed);
|
||||
if (res != SZ_OK)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Lzma2Dec_FreeProbs(&state, allocMain);
|
||||
return res;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
static SRes SzDecodeCopy(UInt64 inSize, ILookInStream *inStream, Byte *outBuffer)
|
||||
{
|
||||
while (inSize > 0)
|
||||
{
|
||||
const void *inBuf;
|
||||
size_t curSize = (1 << 18);
|
||||
if (curSize > inSize)
|
||||
curSize = (size_t)inSize;
|
||||
RINOK(ILookInStream_Look(inStream, &inBuf, &curSize));
|
||||
if (curSize == 0)
|
||||
return SZ_ERROR_INPUT_EOF;
|
||||
memcpy(outBuffer, inBuf, curSize);
|
||||
outBuffer += curSize;
|
||||
inSize -= curSize;
|
||||
RINOK(ILookInStream_Skip(inStream, curSize));
|
||||
}
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
static BoolInt IS_MAIN_METHOD(UInt32 m)
|
||||
{
|
||||
switch (m)
|
||||
{
|
||||
case k_Copy:
|
||||
case k_LZMA:
|
||||
#ifndef _7Z_NO_METHOD_LZMA2
|
||||
case k_LZMA2:
|
||||
#endif
|
||||
#ifdef _7ZIP_PPMD_SUPPPORT
|
||||
case k_PPMD:
|
||||
#endif
|
||||
return True;
|
||||
}
|
||||
return False;
|
||||
}
|
||||
|
||||
static BoolInt IS_SUPPORTED_CODER(const CSzCoderInfo *c)
|
||||
{
|
||||
return
|
||||
c->NumStreams == 1
|
||||
/* && c->MethodID <= (UInt32)0xFFFFFFFF */
|
||||
&& IS_MAIN_METHOD((UInt32)c->MethodID);
|
||||
}
|
||||
|
||||
#define IS_BCJ2(c) ((c)->MethodID == k_BCJ2 && (c)->NumStreams == 4)
|
||||
|
||||
static SRes CheckSupportedFolder(const CSzFolder *f)
|
||||
{
|
||||
if (f->NumCoders < 1 || f->NumCoders > 4)
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
if (!IS_SUPPORTED_CODER(&f->Coders[0]))
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
if (f->NumCoders == 1)
|
||||
{
|
||||
if (f->NumPackStreams != 1 || f->PackStreams[0] != 0 || f->NumBonds != 0)
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
|
||||
#ifndef _7Z_NO_METHODS_FILTERS
|
||||
|
||||
if (f->NumCoders == 2)
|
||||
{
|
||||
const CSzCoderInfo *c = &f->Coders[1];
|
||||
if (
|
||||
/* c->MethodID > (UInt32)0xFFFFFFFF || */
|
||||
c->NumStreams != 1
|
||||
|| f->NumPackStreams != 1
|
||||
|| f->PackStreams[0] != 0
|
||||
|| f->NumBonds != 1
|
||||
|| f->Bonds[0].InIndex != 1
|
||||
|| f->Bonds[0].OutIndex != 0)
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
switch ((UInt32)c->MethodID)
|
||||
{
|
||||
case k_Delta:
|
||||
case k_BCJ:
|
||||
case k_PPC:
|
||||
case k_IA64:
|
||||
case k_SPARC:
|
||||
case k_ARM:
|
||||
case k_ARMT:
|
||||
break;
|
||||
default:
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
}
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
if (f->NumCoders == 4)
|
||||
{
|
||||
if (!IS_SUPPORTED_CODER(&f->Coders[1])
|
||||
|| !IS_SUPPORTED_CODER(&f->Coders[2])
|
||||
|| !IS_BCJ2(&f->Coders[3]))
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
if (f->NumPackStreams != 4
|
||||
|| f->PackStreams[0] != 2
|
||||
|| f->PackStreams[1] != 6
|
||||
|| f->PackStreams[2] != 1
|
||||
|| f->PackStreams[3] != 0
|
||||
|| f->NumBonds != 3
|
||||
|| f->Bonds[0].InIndex != 5 || f->Bonds[0].OutIndex != 0
|
||||
|| f->Bonds[1].InIndex != 4 || f->Bonds[1].OutIndex != 1
|
||||
|| f->Bonds[2].InIndex != 3 || f->Bonds[2].OutIndex != 2)
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
}
|
||||
|
||||
#define CASE_BRA_CONV(isa) case k_ ## isa: isa ## _Convert(outBuffer, outSize, 0, 0); break;
|
||||
|
||||
static SRes SzFolder_Decode2(const CSzFolder *folder,
|
||||
const Byte *propsData,
|
||||
const UInt64 *unpackSizes,
|
||||
const UInt64 *packPositions,
|
||||
ILookInStream *inStream, UInt64 startPos,
|
||||
Byte *outBuffer, SizeT outSize, ISzAllocPtr allocMain,
|
||||
Byte *tempBuf[])
|
||||
{
|
||||
UInt32 ci;
|
||||
SizeT tempSizes[3] = { 0, 0, 0};
|
||||
SizeT tempSize3 = 0;
|
||||
Byte *tempBuf3 = 0;
|
||||
|
||||
RINOK(CheckSupportedFolder(folder));
|
||||
|
||||
for (ci = 0; ci < folder->NumCoders; ci++)
|
||||
{
|
||||
const CSzCoderInfo *coder = &folder->Coders[ci];
|
||||
|
||||
if (IS_MAIN_METHOD((UInt32)coder->MethodID))
|
||||
{
|
||||
UInt32 si = 0;
|
||||
UInt64 offset;
|
||||
UInt64 inSize;
|
||||
Byte *outBufCur = outBuffer;
|
||||
SizeT outSizeCur = outSize;
|
||||
if (folder->NumCoders == 4)
|
||||
{
|
||||
UInt32 indices[] = { 3, 2, 0 };
|
||||
UInt64 unpackSize = unpackSizes[ci];
|
||||
si = indices[ci];
|
||||
if (ci < 2)
|
||||
{
|
||||
Byte *temp;
|
||||
outSizeCur = (SizeT)unpackSize;
|
||||
if (outSizeCur != unpackSize)
|
||||
return SZ_ERROR_MEM;
|
||||
temp = (Byte *)ISzAlloc_Alloc(allocMain, outSizeCur);
|
||||
if (!temp && outSizeCur != 0)
|
||||
return SZ_ERROR_MEM;
|
||||
outBufCur = tempBuf[1 - ci] = temp;
|
||||
tempSizes[1 - ci] = outSizeCur;
|
||||
}
|
||||
else if (ci == 2)
|
||||
{
|
||||
if (unpackSize > outSize) /* check it */
|
||||
return SZ_ERROR_PARAM;
|
||||
tempBuf3 = outBufCur = outBuffer + (outSize - (size_t)unpackSize);
|
||||
tempSize3 = outSizeCur = (SizeT)unpackSize;
|
||||
}
|
||||
else
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
}
|
||||
offset = packPositions[si];
|
||||
inSize = packPositions[(size_t)si + 1] - offset;
|
||||
RINOK(LookInStream_SeekTo(inStream, startPos + offset));
|
||||
|
||||
if (coder->MethodID == k_Copy)
|
||||
{
|
||||
if (inSize != outSizeCur) /* check it */
|
||||
return SZ_ERROR_DATA;
|
||||
RINOK(SzDecodeCopy(inSize, inStream, outBufCur));
|
||||
}
|
||||
else if (coder->MethodID == k_LZMA)
|
||||
{
|
||||
RINOK(SzDecodeLzma(propsData + coder->PropsOffset, coder->PropsSize, inSize, inStream, outBufCur, outSizeCur, allocMain));
|
||||
}
|
||||
#ifndef _7Z_NO_METHOD_LZMA2
|
||||
else if (coder->MethodID == k_LZMA2)
|
||||
{
|
||||
RINOK(SzDecodeLzma2(propsData + coder->PropsOffset, coder->PropsSize, inSize, inStream, outBufCur, outSizeCur, allocMain));
|
||||
}
|
||||
#endif
|
||||
#ifdef _7ZIP_PPMD_SUPPPORT
|
||||
else if (coder->MethodID == k_PPMD)
|
||||
{
|
||||
RINOK(SzDecodePpmd(propsData + coder->PropsOffset, coder->PropsSize, inSize, inStream, outBufCur, outSizeCur, allocMain));
|
||||
}
|
||||
#endif
|
||||
else
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
}
|
||||
else if (coder->MethodID == k_BCJ2)
|
||||
{
|
||||
UInt64 offset = packPositions[1];
|
||||
UInt64 s3Size = packPositions[2] - offset;
|
||||
|
||||
if (ci != 3)
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
|
||||
tempSizes[2] = (SizeT)s3Size;
|
||||
if (tempSizes[2] != s3Size)
|
||||
return SZ_ERROR_MEM;
|
||||
tempBuf[2] = (Byte *)ISzAlloc_Alloc(allocMain, tempSizes[2]);
|
||||
if (!tempBuf[2] && tempSizes[2] != 0)
|
||||
return SZ_ERROR_MEM;
|
||||
|
||||
RINOK(LookInStream_SeekTo(inStream, startPos + offset));
|
||||
RINOK(SzDecodeCopy(s3Size, inStream, tempBuf[2]));
|
||||
|
||||
if ((tempSizes[0] & 3) != 0 ||
|
||||
(tempSizes[1] & 3) != 0 ||
|
||||
tempSize3 + tempSizes[0] + tempSizes[1] != outSize)
|
||||
return SZ_ERROR_DATA;
|
||||
|
||||
{
|
||||
CBcj2Dec p;
|
||||
|
||||
p.bufs[0] = tempBuf3; p.lims[0] = tempBuf3 + tempSize3;
|
||||
p.bufs[1] = tempBuf[0]; p.lims[1] = tempBuf[0] + tempSizes[0];
|
||||
p.bufs[2] = tempBuf[1]; p.lims[2] = tempBuf[1] + tempSizes[1];
|
||||
p.bufs[3] = tempBuf[2]; p.lims[3] = tempBuf[2] + tempSizes[2];
|
||||
|
||||
p.dest = outBuffer;
|
||||
p.destLim = outBuffer + outSize;
|
||||
|
||||
Bcj2Dec_Init(&p);
|
||||
RINOK(Bcj2Dec_Decode(&p));
|
||||
|
||||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < 4; i++)
|
||||
if (p.bufs[i] != p.lims[i])
|
||||
return SZ_ERROR_DATA;
|
||||
|
||||
if (!Bcj2Dec_IsFinished(&p))
|
||||
return SZ_ERROR_DATA;
|
||||
|
||||
if (p.dest != p.destLim
|
||||
|| p.state != BCJ2_STREAM_MAIN)
|
||||
return SZ_ERROR_DATA;
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifndef _7Z_NO_METHODS_FILTERS
|
||||
else if (ci == 1)
|
||||
{
|
||||
if (coder->MethodID == k_Delta)
|
||||
{
|
||||
if (coder->PropsSize != 1)
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
{
|
||||
Byte state[DELTA_STATE_SIZE];
|
||||
Delta_Init(state);
|
||||
Delta_Decode(state, (unsigned)(propsData[coder->PropsOffset]) + 1, outBuffer, outSize);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (coder->PropsSize != 0)
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
switch (coder->MethodID)
|
||||
{
|
||||
case k_BCJ:
|
||||
{
|
||||
UInt32 state;
|
||||
x86_Convert_Init(state);
|
||||
x86_Convert(outBuffer, outSize, 0, &state, 0);
|
||||
break;
|
||||
}
|
||||
CASE_BRA_CONV(PPC)
|
||||
CASE_BRA_CONV(IA64)
|
||||
CASE_BRA_CONV(SPARC)
|
||||
CASE_BRA_CONV(ARM)
|
||||
CASE_BRA_CONV(ARMT)
|
||||
default:
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
else
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
}
|
||||
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
|
||||
SRes SzAr_DecodeFolder(const CSzAr *p, UInt32 folderIndex,
|
||||
ILookInStream *inStream, UInt64 startPos,
|
||||
Byte *outBuffer, size_t outSize,
|
||||
ISzAllocPtr allocMain)
|
||||
{
|
||||
SRes res;
|
||||
CSzFolder folder;
|
||||
CSzData sd;
|
||||
|
||||
const Byte *data = p->CodersData + p->FoCodersOffsets[folderIndex];
|
||||
sd.Data = data;
|
||||
sd.Size = p->FoCodersOffsets[(size_t)folderIndex + 1] - p->FoCodersOffsets[folderIndex];
|
||||
|
||||
res = SzGetNextFolderItem(&folder, &sd);
|
||||
|
||||
if (res != SZ_OK)
|
||||
return res;
|
||||
|
||||
if (sd.Size != 0
|
||||
|| folder.UnpackStream != p->FoToMainUnpackSizeIndex[folderIndex]
|
||||
|| outSize != SzAr_GetFolderUnpackSize(p, folderIndex))
|
||||
return SZ_ERROR_FAIL;
|
||||
{
|
||||
unsigned i;
|
||||
Byte *tempBuf[3] = { 0, 0, 0};
|
||||
|
||||
res = SzFolder_Decode2(&folder, data,
|
||||
&p->CoderUnpackSizes[p->FoToCoderUnpackSizes[folderIndex]],
|
||||
p->PackPositions + p->FoStartPackStreamIndex[folderIndex],
|
||||
inStream, startPos,
|
||||
outBuffer, (SizeT)outSize, allocMain, tempBuf);
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
ISzAlloc_Free(allocMain, tempBuf[i]);
|
||||
|
||||
if (res == SZ_OK)
|
||||
if (SzBitWithVals_Check(&p->FolderCRCs, folderIndex))
|
||||
if (CrcCalc(outBuffer, outSize) != p->FolderCRCs.Vals[folderIndex])
|
||||
res = SZ_ERROR_CRC;
|
||||
|
||||
return res;
|
||||
}
|
||||
}
|
||||
286
3rdparty/7z/7zFile.c
vendored
286
3rdparty/7z/7zFile.c
vendored
|
|
@ -1,286 +0,0 @@
|
|||
/* 7zFile.c -- File IO
|
||||
2017-04-03 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "7zFile.h"
|
||||
|
||||
#ifndef USE_WINDOWS_FILE
|
||||
|
||||
#ifndef UNDER_CE
|
||||
#include <errno.h>
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
/*
|
||||
ReadFile and WriteFile functions in Windows have BUG:
|
||||
If you Read or Write 64MB or more (probably min_failure_size = 64MB - 32KB + 1)
|
||||
from/to Network file, it returns ERROR_NO_SYSTEM_RESOURCES
|
||||
(Insufficient system resources exist to complete the requested service).
|
||||
Probably in some version of Windows there are problems with other sizes:
|
||||
for 32 MB (maybe also for 16 MB).
|
||||
And message can be "Network connection was lost"
|
||||
*/
|
||||
|
||||
#define kChunkSizeMax (1 << 22)
|
||||
|
||||
#endif
|
||||
|
||||
void File_Construct(CSzFile *p)
|
||||
{
|
||||
#ifdef USE_WINDOWS_FILE
|
||||
p->handle = INVALID_HANDLE_VALUE;
|
||||
#else
|
||||
p->file = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !defined(UNDER_CE) || !defined(USE_WINDOWS_FILE)
|
||||
static WRes File_Open(CSzFile *p, const char *name, int writeMode)
|
||||
{
|
||||
#ifdef USE_WINDOWS_FILE
|
||||
p->handle = CreateFileA(name,
|
||||
writeMode ? GENERIC_WRITE : GENERIC_READ,
|
||||
FILE_SHARE_READ, NULL,
|
||||
writeMode ? CREATE_ALWAYS : OPEN_EXISTING,
|
||||
FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
return (p->handle != INVALID_HANDLE_VALUE) ? 0 : GetLastError();
|
||||
#else
|
||||
p->file = fopen(name, writeMode ? "wb+" : "rb");
|
||||
return (p->file != 0) ? 0 :
|
||||
#ifdef UNDER_CE
|
||||
2; /* ENOENT */
|
||||
#else
|
||||
errno;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
WRes InFile_Open(CSzFile *p, const char *name) { return File_Open(p, name, 0); }
|
||||
WRes OutFile_Open(CSzFile *p, const char *name) { return File_Open(p, name, 1); }
|
||||
#endif
|
||||
|
||||
#ifdef USE_WINDOWS_FILE
|
||||
static WRes File_OpenW(CSzFile *p, const WCHAR *name, int writeMode)
|
||||
{
|
||||
p->handle = CreateFileW(name,
|
||||
writeMode ? GENERIC_WRITE : GENERIC_READ,
|
||||
FILE_SHARE_READ, NULL,
|
||||
writeMode ? CREATE_ALWAYS : OPEN_EXISTING,
|
||||
FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
return (p->handle != INVALID_HANDLE_VALUE) ? 0 : GetLastError();
|
||||
}
|
||||
WRes InFile_OpenW(CSzFile *p, const WCHAR *name) { return File_OpenW(p, name, 0); }
|
||||
WRes OutFile_OpenW(CSzFile *p, const WCHAR *name) { return File_OpenW(p, name, 1); }
|
||||
#endif
|
||||
|
||||
WRes File_Close(CSzFile *p)
|
||||
{
|
||||
#ifdef USE_WINDOWS_FILE
|
||||
if (p->handle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
if (!CloseHandle(p->handle))
|
||||
return GetLastError();
|
||||
p->handle = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
#else
|
||||
if (p->file != NULL)
|
||||
{
|
||||
int res = fclose(p->file);
|
||||
if (res != 0)
|
||||
return res;
|
||||
p->file = NULL;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRes File_Read(CSzFile *p, void *data, size_t *size)
|
||||
{
|
||||
size_t originalSize = *size;
|
||||
if (originalSize == 0)
|
||||
return 0;
|
||||
|
||||
#ifdef USE_WINDOWS_FILE
|
||||
|
||||
*size = 0;
|
||||
do
|
||||
{
|
||||
DWORD curSize = (originalSize > kChunkSizeMax) ? kChunkSizeMax : (DWORD)originalSize;
|
||||
DWORD processed = 0;
|
||||
BOOL res = ReadFile(p->handle, data, curSize, &processed, NULL);
|
||||
data = (void *)((Byte *)data + processed);
|
||||
originalSize -= processed;
|
||||
*size += processed;
|
||||
if (!res)
|
||||
return GetLastError();
|
||||
if (processed == 0)
|
||||
break;
|
||||
}
|
||||
while (originalSize > 0);
|
||||
return 0;
|
||||
|
||||
#else
|
||||
|
||||
*size = fread(data, 1, originalSize, p->file);
|
||||
if (*size == originalSize)
|
||||
return 0;
|
||||
return ferror(p->file);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
WRes File_Write(CSzFile *p, const void *data, size_t *size)
|
||||
{
|
||||
size_t originalSize = *size;
|
||||
if (originalSize == 0)
|
||||
return 0;
|
||||
|
||||
#ifdef USE_WINDOWS_FILE
|
||||
|
||||
*size = 0;
|
||||
do
|
||||
{
|
||||
DWORD curSize = (originalSize > kChunkSizeMax) ? kChunkSizeMax : (DWORD)originalSize;
|
||||
DWORD processed = 0;
|
||||
BOOL res = WriteFile(p->handle, data, curSize, &processed, NULL);
|
||||
data = (void *)((Byte *)data + processed);
|
||||
originalSize -= processed;
|
||||
*size += processed;
|
||||
if (!res)
|
||||
return GetLastError();
|
||||
if (processed == 0)
|
||||
break;
|
||||
}
|
||||
while (originalSize > 0);
|
||||
return 0;
|
||||
|
||||
#else
|
||||
|
||||
*size = fwrite(data, 1, originalSize, p->file);
|
||||
if (*size == originalSize)
|
||||
return 0;
|
||||
return ferror(p->file);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
WRes File_Seek(CSzFile *p, Int64 *pos, ESzSeek origin)
|
||||
{
|
||||
#ifdef USE_WINDOWS_FILE
|
||||
|
||||
LARGE_INTEGER value;
|
||||
DWORD moveMethod;
|
||||
value.LowPart = (DWORD)*pos;
|
||||
value.HighPart = (LONG)((UInt64)*pos >> 16 >> 16); /* for case when UInt64 is 32-bit only */
|
||||
switch (origin)
|
||||
{
|
||||
case SZ_SEEK_SET: moveMethod = FILE_BEGIN; break;
|
||||
case SZ_SEEK_CUR: moveMethod = FILE_CURRENT; break;
|
||||
case SZ_SEEK_END: moveMethod = FILE_END; break;
|
||||
default: return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
value.LowPart = SetFilePointer(p->handle, value.LowPart, &value.HighPart, moveMethod);
|
||||
if (value.LowPart == 0xFFFFFFFF)
|
||||
{
|
||||
WRes res = GetLastError();
|
||||
if (res != NO_ERROR)
|
||||
return res;
|
||||
}
|
||||
*pos = ((Int64)value.HighPart << 32) | value.LowPart;
|
||||
return 0;
|
||||
|
||||
#else
|
||||
|
||||
int moveMethod;
|
||||
int res;
|
||||
switch (origin)
|
||||
{
|
||||
case SZ_SEEK_SET: moveMethod = SEEK_SET; break;
|
||||
case SZ_SEEK_CUR: moveMethod = SEEK_CUR; break;
|
||||
case SZ_SEEK_END: moveMethod = SEEK_END; break;
|
||||
default: return 1;
|
||||
}
|
||||
res = fseek(p->file, (long)*pos, moveMethod);
|
||||
*pos = ftell(p->file);
|
||||
return res;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
WRes File_GetLength(CSzFile *p, UInt64 *length)
|
||||
{
|
||||
#ifdef USE_WINDOWS_FILE
|
||||
|
||||
DWORD sizeHigh;
|
||||
DWORD sizeLow = GetFileSize(p->handle, &sizeHigh);
|
||||
if (sizeLow == 0xFFFFFFFF)
|
||||
{
|
||||
DWORD res = GetLastError();
|
||||
if (res != NO_ERROR)
|
||||
return res;
|
||||
}
|
||||
*length = (((UInt64)sizeHigh) << 32) + sizeLow;
|
||||
return 0;
|
||||
|
||||
#else
|
||||
|
||||
long pos = ftell(p->file);
|
||||
int res = fseek(p->file, 0, SEEK_END);
|
||||
*length = ftell(p->file);
|
||||
fseek(p->file, pos, SEEK_SET);
|
||||
return res;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* ---------- FileSeqInStream ---------- */
|
||||
|
||||
static SRes FileSeqInStream_Read(const ISeqInStream *pp, void *buf, size_t *size)
|
||||
{
|
||||
CFileSeqInStream *p = CONTAINER_FROM_VTBL(pp, CFileSeqInStream, vt);
|
||||
return File_Read(&p->file, buf, size) == 0 ? SZ_OK : SZ_ERROR_READ;
|
||||
}
|
||||
|
||||
void FileSeqInStream_CreateVTable(CFileSeqInStream *p)
|
||||
{
|
||||
p->vt.Read = FileSeqInStream_Read;
|
||||
}
|
||||
|
||||
|
||||
/* ---------- FileInStream ---------- */
|
||||
|
||||
static SRes FileInStream_Read(const ISeekInStream *pp, void *buf, size_t *size)
|
||||
{
|
||||
CFileInStream *p = CONTAINER_FROM_VTBL(pp, CFileInStream, vt);
|
||||
return (File_Read(&p->file, buf, size) == 0) ? SZ_OK : SZ_ERROR_READ;
|
||||
}
|
||||
|
||||
static SRes FileInStream_Seek(const ISeekInStream *pp, Int64 *pos, ESzSeek origin)
|
||||
{
|
||||
CFileInStream *p = CONTAINER_FROM_VTBL(pp, CFileInStream, vt);
|
||||
return File_Seek(&p->file, pos, origin);
|
||||
}
|
||||
|
||||
void FileInStream_CreateVTable(CFileInStream *p)
|
||||
{
|
||||
p->vt.Read = FileInStream_Read;
|
||||
p->vt.Seek = FileInStream_Seek;
|
||||
}
|
||||
|
||||
|
||||
/* ---------- FileOutStream ---------- */
|
||||
|
||||
static size_t FileOutStream_Write(const ISeqOutStream *pp, const void *data, size_t size)
|
||||
{
|
||||
CFileOutStream *p = CONTAINER_FROM_VTBL(pp, CFileOutStream, vt);
|
||||
File_Write(&p->file, data, &size);
|
||||
return size;
|
||||
}
|
||||
|
||||
void FileOutStream_CreateVTable(CFileOutStream *p)
|
||||
{
|
||||
p->vt.Write = FileOutStream_Write;
|
||||
}
|
||||
83
3rdparty/7z/7zFile.h
vendored
83
3rdparty/7z/7zFile.h
vendored
|
|
@ -1,83 +0,0 @@
|
|||
/* 7zFile.h -- File IO
|
||||
2017-04-03 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __7Z_FILE_H
|
||||
#define __7Z_FILE_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#define USE_WINDOWS_FILE
|
||||
#endif
|
||||
|
||||
#ifdef USE_WINDOWS_FILE
|
||||
#include <windows.h>
|
||||
#else
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
/* ---------- File ---------- */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
#ifdef USE_WINDOWS_FILE
|
||||
HANDLE handle;
|
||||
#else
|
||||
FILE *file;
|
||||
#endif
|
||||
} CSzFile;
|
||||
|
||||
void File_Construct(CSzFile *p);
|
||||
#if !defined(UNDER_CE) || !defined(USE_WINDOWS_FILE)
|
||||
WRes InFile_Open(CSzFile *p, const char *name);
|
||||
WRes OutFile_Open(CSzFile *p, const char *name);
|
||||
#endif
|
||||
#ifdef USE_WINDOWS_FILE
|
||||
WRes InFile_OpenW(CSzFile *p, const WCHAR *name);
|
||||
WRes OutFile_OpenW(CSzFile *p, const WCHAR *name);
|
||||
#endif
|
||||
WRes File_Close(CSzFile *p);
|
||||
|
||||
/* reads max(*size, remain file's size) bytes */
|
||||
WRes File_Read(CSzFile *p, void *data, size_t *size);
|
||||
|
||||
/* writes *size bytes */
|
||||
WRes File_Write(CSzFile *p, const void *data, size_t *size);
|
||||
|
||||
WRes File_Seek(CSzFile *p, Int64 *pos, ESzSeek origin);
|
||||
WRes File_GetLength(CSzFile *p, UInt64 *length);
|
||||
|
||||
|
||||
/* ---------- FileInStream ---------- */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ISeqInStream vt;
|
||||
CSzFile file;
|
||||
} CFileSeqInStream;
|
||||
|
||||
void FileSeqInStream_CreateVTable(CFileSeqInStream *p);
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ISeekInStream vt;
|
||||
CSzFile file;
|
||||
} CFileInStream;
|
||||
|
||||
void FileInStream_CreateVTable(CFileInStream *p);
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ISeqOutStream vt;
|
||||
CSzFile file;
|
||||
} CFileOutStream;
|
||||
|
||||
void FileOutStream_CreateVTable(CFileOutStream *p);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
176
3rdparty/7z/7zStream.c
vendored
176
3rdparty/7z/7zStream.c
vendored
|
|
@ -1,176 +0,0 @@
|
|||
/* 7zStream.c -- 7z Stream functions
|
||||
2017-04-03 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
SRes SeqInStream_Read2(const ISeqInStream *stream, void *buf, size_t size, SRes errorType)
|
||||
{
|
||||
while (size != 0)
|
||||
{
|
||||
size_t processed = size;
|
||||
RINOK(ISeqInStream_Read(stream, buf, &processed));
|
||||
if (processed == 0)
|
||||
return errorType;
|
||||
buf = (void *)((Byte *)buf + processed);
|
||||
size -= processed;
|
||||
}
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
SRes SeqInStream_Read(const ISeqInStream *stream, void *buf, size_t size)
|
||||
{
|
||||
return SeqInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF);
|
||||
}
|
||||
|
||||
SRes SeqInStream_ReadByte(const ISeqInStream *stream, Byte *buf)
|
||||
{
|
||||
size_t processed = 1;
|
||||
RINOK(ISeqInStream_Read(stream, buf, &processed));
|
||||
return (processed == 1) ? SZ_OK : SZ_ERROR_INPUT_EOF;
|
||||
}
|
||||
|
||||
|
||||
|
||||
SRes LookInStream_SeekTo(const ILookInStream *stream, UInt64 offset)
|
||||
{
|
||||
Int64 t = offset;
|
||||
return ILookInStream_Seek(stream, &t, SZ_SEEK_SET);
|
||||
}
|
||||
|
||||
SRes LookInStream_LookRead(const ILookInStream *stream, void *buf, size_t *size)
|
||||
{
|
||||
const void *lookBuf;
|
||||
if (*size == 0)
|
||||
return SZ_OK;
|
||||
RINOK(ILookInStream_Look(stream, &lookBuf, size));
|
||||
memcpy(buf, lookBuf, *size);
|
||||
return ILookInStream_Skip(stream, *size);
|
||||
}
|
||||
|
||||
SRes LookInStream_Read2(const ILookInStream *stream, void *buf, size_t size, SRes errorType)
|
||||
{
|
||||
while (size != 0)
|
||||
{
|
||||
size_t processed = size;
|
||||
RINOK(ILookInStream_Read(stream, buf, &processed));
|
||||
if (processed == 0)
|
||||
return errorType;
|
||||
buf = (void *)((Byte *)buf + processed);
|
||||
size -= processed;
|
||||
}
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
SRes LookInStream_Read(const ILookInStream *stream, void *buf, size_t size)
|
||||
{
|
||||
return LookInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define GET_LookToRead2 CLookToRead2 *p = CONTAINER_FROM_VTBL(pp, CLookToRead2, vt);
|
||||
|
||||
static SRes LookToRead2_Look_Lookahead(const ILookInStream *pp, const void **buf, size_t *size)
|
||||
{
|
||||
SRes res = SZ_OK;
|
||||
GET_LookToRead2
|
||||
size_t size2 = p->size - p->pos;
|
||||
if (size2 == 0 && *size != 0)
|
||||
{
|
||||
p->pos = 0;
|
||||
p->size = 0;
|
||||
size2 = p->bufSize;
|
||||
res = ISeekInStream_Read(p->realStream, p->buf, &size2);
|
||||
p->size = size2;
|
||||
}
|
||||
if (*size > size2)
|
||||
*size = size2;
|
||||
*buf = p->buf + p->pos;
|
||||
return res;
|
||||
}
|
||||
|
||||
static SRes LookToRead2_Look_Exact(const ILookInStream *pp, const void **buf, size_t *size)
|
||||
{
|
||||
SRes res = SZ_OK;
|
||||
GET_LookToRead2
|
||||
size_t size2 = p->size - p->pos;
|
||||
if (size2 == 0 && *size != 0)
|
||||
{
|
||||
p->pos = 0;
|
||||
p->size = 0;
|
||||
if (*size > p->bufSize)
|
||||
*size = p->bufSize;
|
||||
res = ISeekInStream_Read(p->realStream, p->buf, size);
|
||||
size2 = p->size = *size;
|
||||
}
|
||||
if (*size > size2)
|
||||
*size = size2;
|
||||
*buf = p->buf + p->pos;
|
||||
return res;
|
||||
}
|
||||
|
||||
static SRes LookToRead2_Skip(const ILookInStream *pp, size_t offset)
|
||||
{
|
||||
GET_LookToRead2
|
||||
p->pos += offset;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
static SRes LookToRead2_Read(const ILookInStream *pp, void *buf, size_t *size)
|
||||
{
|
||||
GET_LookToRead2
|
||||
size_t rem = p->size - p->pos;
|
||||
if (rem == 0)
|
||||
return ISeekInStream_Read(p->realStream, buf, size);
|
||||
if (rem > *size)
|
||||
rem = *size;
|
||||
memcpy(buf, p->buf + p->pos, rem);
|
||||
p->pos += rem;
|
||||
*size = rem;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
static SRes LookToRead2_Seek(const ILookInStream *pp, Int64 *pos, ESzSeek origin)
|
||||
{
|
||||
GET_LookToRead2
|
||||
p->pos = p->size = 0;
|
||||
return ISeekInStream_Seek(p->realStream, pos, origin);
|
||||
}
|
||||
|
||||
void LookToRead2_CreateVTable(CLookToRead2 *p, int lookahead)
|
||||
{
|
||||
p->vt.Look = lookahead ?
|
||||
LookToRead2_Look_Lookahead :
|
||||
LookToRead2_Look_Exact;
|
||||
p->vt.Skip = LookToRead2_Skip;
|
||||
p->vt.Read = LookToRead2_Read;
|
||||
p->vt.Seek = LookToRead2_Seek;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static SRes SecToLook_Read(const ISeqInStream *pp, void *buf, size_t *size)
|
||||
{
|
||||
CSecToLook *p = CONTAINER_FROM_VTBL(pp, CSecToLook, vt);
|
||||
return LookInStream_LookRead(p->realStream, buf, size);
|
||||
}
|
||||
|
||||
void SecToLook_CreateVTable(CSecToLook *p)
|
||||
{
|
||||
p->vt.Read = SecToLook_Read;
|
||||
}
|
||||
|
||||
static SRes SecToRead_Read(const ISeqInStream *pp, void *buf, size_t *size)
|
||||
{
|
||||
CSecToRead *p = CONTAINER_FROM_VTBL(pp, CSecToRead, vt);
|
||||
return ILookInStream_Read(p->realStream, buf, size);
|
||||
}
|
||||
|
||||
void SecToRead_CreateVTable(CSecToRead *p)
|
||||
{
|
||||
p->vt.Read = SecToRead_Read;
|
||||
}
|
||||
375
3rdparty/7z/7zTypes.h
vendored
375
3rdparty/7z/7zTypes.h
vendored
|
|
@ -1,375 +0,0 @@
|
|||
/* 7zTypes.h -- Basic types
|
||||
2018-08-04 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __7Z_TYPES_H
|
||||
#define __7Z_TYPES_H
|
||||
|
||||
#ifdef _WIN32
|
||||
/* #include <windows.h> */
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#ifndef EXTERN_C_BEGIN
|
||||
#ifdef __cplusplus
|
||||
#define EXTERN_C_BEGIN extern "C" {
|
||||
#define EXTERN_C_END }
|
||||
#else
|
||||
#define EXTERN_C_BEGIN
|
||||
#define EXTERN_C_END
|
||||
#endif
|
||||
#endif
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
#define SZ_OK 0
|
||||
|
||||
#define SZ_ERROR_DATA 1
|
||||
#define SZ_ERROR_MEM 2
|
||||
#define SZ_ERROR_CRC 3
|
||||
#define SZ_ERROR_UNSUPPORTED 4
|
||||
#define SZ_ERROR_PARAM 5
|
||||
#define SZ_ERROR_INPUT_EOF 6
|
||||
#define SZ_ERROR_OUTPUT_EOF 7
|
||||
#define SZ_ERROR_READ 8
|
||||
#define SZ_ERROR_WRITE 9
|
||||
#define SZ_ERROR_PROGRESS 10
|
||||
#define SZ_ERROR_FAIL 11
|
||||
#define SZ_ERROR_THREAD 12
|
||||
|
||||
#define SZ_ERROR_ARCHIVE 16
|
||||
#define SZ_ERROR_NO_ARCHIVE 17
|
||||
|
||||
typedef int SRes;
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
/* typedef DWORD WRes; */
|
||||
typedef unsigned WRes;
|
||||
#define MY_SRes_HRESULT_FROM_WRes(x) HRESULT_FROM_WIN32(x)
|
||||
|
||||
#else
|
||||
|
||||
typedef int WRes;
|
||||
#define MY__FACILITY_WIN32 7
|
||||
#define MY__FACILITY__WRes MY__FACILITY_WIN32
|
||||
#define MY_SRes_HRESULT_FROM_WRes(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & 0x0000FFFF) | (MY__FACILITY__WRes << 16) | 0x80000000)))
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef RINOK
|
||||
#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }
|
||||
#endif
|
||||
|
||||
typedef unsigned char Byte;
|
||||
typedef short Int16;
|
||||
typedef unsigned short UInt16;
|
||||
|
||||
#ifdef _LZMA_UINT32_IS_ULONG
|
||||
typedef long Int32;
|
||||
typedef unsigned long UInt32;
|
||||
#else
|
||||
typedef int Int32;
|
||||
typedef unsigned int UInt32;
|
||||
#endif
|
||||
|
||||
#ifdef _SZ_NO_INT_64
|
||||
|
||||
/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.
|
||||
NOTES: Some code will work incorrectly in that case! */
|
||||
|
||||
typedef long Int64;
|
||||
typedef unsigned long UInt64;
|
||||
|
||||
#else
|
||||
|
||||
#if defined(_MSC_VER) || defined(__BORLANDC__)
|
||||
typedef __int64 Int64;
|
||||
typedef unsigned __int64 UInt64;
|
||||
#define UINT64_CONST(n) n
|
||||
#else
|
||||
typedef long long int Int64;
|
||||
typedef unsigned long long int UInt64;
|
||||
#define UINT64_CONST(n) n ## ULL
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef _LZMA_NO_SYSTEM_SIZE_T
|
||||
typedef UInt32 SizeT;
|
||||
#else
|
||||
typedef size_t SizeT;
|
||||
#endif
|
||||
|
||||
typedef int BoolInt;
|
||||
/* typedef BoolInt Bool; */
|
||||
#define True 1
|
||||
#define False 0
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
#define MY_STD_CALL __stdcall
|
||||
#else
|
||||
#define MY_STD_CALL
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
|
||||
#if _MSC_VER >= 1300
|
||||
#define MY_NO_INLINE __declspec(noinline)
|
||||
#else
|
||||
#define MY_NO_INLINE
|
||||
#endif
|
||||
|
||||
#define MY_FORCE_INLINE __forceinline
|
||||
|
||||
#define MY_CDECL __cdecl
|
||||
#define MY_FAST_CALL __fastcall
|
||||
|
||||
#else
|
||||
|
||||
#define MY_NO_INLINE
|
||||
#define MY_FORCE_INLINE
|
||||
#define MY_CDECL
|
||||
#define MY_FAST_CALL
|
||||
|
||||
/* inline keyword : for C++ / C99 */
|
||||
|
||||
/* GCC, clang: */
|
||||
/*
|
||||
#if defined (__GNUC__) && (__GNUC__ >= 4)
|
||||
#define MY_FORCE_INLINE __attribute__((always_inline))
|
||||
#define MY_NO_INLINE __attribute__((noinline))
|
||||
#endif
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* The following interfaces use first parameter as pointer to structure */
|
||||
|
||||
typedef struct IByteIn IByteIn;
|
||||
struct IByteIn
|
||||
{
|
||||
Byte (*Read)(const IByteIn *p); /* reads one byte, returns 0 in case of EOF or error */
|
||||
};
|
||||
#define IByteIn_Read(p) (p)->Read(p)
|
||||
|
||||
|
||||
typedef struct IByteOut IByteOut;
|
||||
struct IByteOut
|
||||
{
|
||||
void (*Write)(const IByteOut *p, Byte b);
|
||||
};
|
||||
#define IByteOut_Write(p, b) (p)->Write(p, b)
|
||||
|
||||
|
||||
typedef struct ISeqInStream ISeqInStream;
|
||||
struct ISeqInStream
|
||||
{
|
||||
SRes (*Read)(const ISeqInStream *p, void *buf, size_t *size);
|
||||
/* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
|
||||
(output(*size) < input(*size)) is allowed */
|
||||
};
|
||||
#define ISeqInStream_Read(p, buf, size) (p)->Read(p, buf, size)
|
||||
|
||||
/* it can return SZ_ERROR_INPUT_EOF */
|
||||
SRes SeqInStream_Read(const ISeqInStream *stream, void *buf, size_t size);
|
||||
SRes SeqInStream_Read2(const ISeqInStream *stream, void *buf, size_t size, SRes errorType);
|
||||
SRes SeqInStream_ReadByte(const ISeqInStream *stream, Byte *buf);
|
||||
|
||||
|
||||
typedef struct ISeqOutStream ISeqOutStream;
|
||||
struct ISeqOutStream
|
||||
{
|
||||
size_t (*Write)(const ISeqOutStream *p, const void *buf, size_t size);
|
||||
/* Returns: result - the number of actually written bytes.
|
||||
(result < size) means error */
|
||||
};
|
||||
#define ISeqOutStream_Write(p, buf, size) (p)->Write(p, buf, size)
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SZ_SEEK_SET = 0,
|
||||
SZ_SEEK_CUR = 1,
|
||||
SZ_SEEK_END = 2
|
||||
} ESzSeek;
|
||||
|
||||
|
||||
typedef struct ISeekInStream ISeekInStream;
|
||||
struct ISeekInStream
|
||||
{
|
||||
SRes (*Read)(const ISeekInStream *p, void *buf, size_t *size); /* same as ISeqInStream::Read */
|
||||
SRes (*Seek)(const ISeekInStream *p, Int64 *pos, ESzSeek origin);
|
||||
};
|
||||
#define ISeekInStream_Read(p, buf, size) (p)->Read(p, buf, size)
|
||||
#define ISeekInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin)
|
||||
|
||||
|
||||
typedef struct ILookInStream ILookInStream;
|
||||
struct ILookInStream
|
||||
{
|
||||
SRes (*Look)(const ILookInStream *p, const void **buf, size_t *size);
|
||||
/* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
|
||||
(output(*size) > input(*size)) is not allowed
|
||||
(output(*size) < input(*size)) is allowed */
|
||||
SRes (*Skip)(const ILookInStream *p, size_t offset);
|
||||
/* offset must be <= output(*size) of Look */
|
||||
|
||||
SRes (*Read)(const ILookInStream *p, void *buf, size_t *size);
|
||||
/* reads directly (without buffer). It's same as ISeqInStream::Read */
|
||||
SRes (*Seek)(const ILookInStream *p, Int64 *pos, ESzSeek origin);
|
||||
};
|
||||
|
||||
#define ILookInStream_Look(p, buf, size) (p)->Look(p, buf, size)
|
||||
#define ILookInStream_Skip(p, offset) (p)->Skip(p, offset)
|
||||
#define ILookInStream_Read(p, buf, size) (p)->Read(p, buf, size)
|
||||
#define ILookInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin)
|
||||
|
||||
|
||||
SRes LookInStream_LookRead(const ILookInStream *stream, void *buf, size_t *size);
|
||||
SRes LookInStream_SeekTo(const ILookInStream *stream, UInt64 offset);
|
||||
|
||||
/* reads via ILookInStream::Read */
|
||||
SRes LookInStream_Read2(const ILookInStream *stream, void *buf, size_t size, SRes errorType);
|
||||
SRes LookInStream_Read(const ILookInStream *stream, void *buf, size_t size);
|
||||
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ILookInStream vt;
|
||||
const ISeekInStream *realStream;
|
||||
|
||||
size_t pos;
|
||||
size_t size; /* it's data size */
|
||||
|
||||
/* the following variables must be set outside */
|
||||
Byte *buf;
|
||||
size_t bufSize;
|
||||
} CLookToRead2;
|
||||
|
||||
void LookToRead2_CreateVTable(CLookToRead2 *p, int lookahead);
|
||||
|
||||
#define LookToRead2_Init(p) { (p)->pos = (p)->size = 0; }
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ISeqInStream vt;
|
||||
const ILookInStream *realStream;
|
||||
} CSecToLook;
|
||||
|
||||
void SecToLook_CreateVTable(CSecToLook *p);
|
||||
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ISeqInStream vt;
|
||||
const ILookInStream *realStream;
|
||||
} CSecToRead;
|
||||
|
||||
void SecToRead_CreateVTable(CSecToRead *p);
|
||||
|
||||
|
||||
typedef struct ICompressProgress ICompressProgress;
|
||||
|
||||
struct ICompressProgress
|
||||
{
|
||||
SRes (*Progress)(const ICompressProgress *p, UInt64 inSize, UInt64 outSize);
|
||||
/* Returns: result. (result != SZ_OK) means break.
|
||||
Value (UInt64)(Int64)-1 for size means unknown value. */
|
||||
};
|
||||
#define ICompressProgress_Progress(p, inSize, outSize) (p)->Progress(p, inSize, outSize)
|
||||
|
||||
|
||||
|
||||
typedef struct ISzAlloc ISzAlloc;
|
||||
typedef const ISzAlloc * ISzAllocPtr;
|
||||
|
||||
struct ISzAlloc
|
||||
{
|
||||
void *(*Alloc)(ISzAllocPtr p, size_t size);
|
||||
void (*Free)(ISzAllocPtr p, void *address); /* address can be 0 */
|
||||
};
|
||||
|
||||
#define ISzAlloc_Alloc(p, size) (p)->Alloc(p, size)
|
||||
#define ISzAlloc_Free(p, a) (p)->Free(p, a)
|
||||
|
||||
/* deprecated */
|
||||
#define IAlloc_Alloc(p, size) ISzAlloc_Alloc(p, size)
|
||||
#define IAlloc_Free(p, a) ISzAlloc_Free(p, a)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef MY_offsetof
|
||||
#ifdef offsetof
|
||||
#define MY_offsetof(type, m) offsetof(type, m)
|
||||
/*
|
||||
#define MY_offsetof(type, m) FIELD_OFFSET(type, m)
|
||||
*/
|
||||
#else
|
||||
#define MY_offsetof(type, m) ((size_t)&(((type *)0)->m))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef MY_container_of
|
||||
|
||||
/*
|
||||
#define MY_container_of(ptr, type, m) container_of(ptr, type, m)
|
||||
#define MY_container_of(ptr, type, m) CONTAINING_RECORD(ptr, type, m)
|
||||
#define MY_container_of(ptr, type, m) ((type *)((char *)(ptr) - offsetof(type, m)))
|
||||
#define MY_container_of(ptr, type, m) (&((type *)0)->m == (ptr), ((type *)(((char *)(ptr)) - MY_offsetof(type, m))))
|
||||
*/
|
||||
|
||||
/*
|
||||
GCC shows warning: "perhaps the 'offsetof' macro was used incorrectly"
|
||||
GCC 3.4.4 : classes with constructor
|
||||
GCC 4.8.1 : classes with non-public variable members"
|
||||
*/
|
||||
|
||||
#define MY_container_of(ptr, type, m) ((type *)((char *)(1 ? (ptr) : &((type *)0)->m) - MY_offsetof(type, m)))
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#define CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) ((type *)(ptr))
|
||||
|
||||
/*
|
||||
#define CONTAINER_FROM_VTBL(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m)
|
||||
*/
|
||||
#define CONTAINER_FROM_VTBL(ptr, type, m) MY_container_of(ptr, type, m)
|
||||
|
||||
#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m)
|
||||
/*
|
||||
#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL(ptr, type, m)
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#define CHAR_PATH_SEPARATOR '\\'
|
||||
#define WCHAR_PATH_SEPARATOR L'\\'
|
||||
#define STRING_PATH_SEPARATOR "\\"
|
||||
#define WSTRING_PATH_SEPARATOR L"\\"
|
||||
|
||||
#else
|
||||
|
||||
#define CHAR_PATH_SEPARATOR '/'
|
||||
#define WCHAR_PATH_SEPARATOR L'/'
|
||||
#define STRING_PATH_SEPARATOR "/"
|
||||
#define WSTRING_PATH_SEPARATOR L"/"
|
||||
|
||||
#endif
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
27
3rdparty/7z/7zVersion.h
vendored
27
3rdparty/7z/7zVersion.h
vendored
|
|
@ -1,27 +0,0 @@
|
|||
#define MY_VER_MAJOR 19
|
||||
#define MY_VER_MINOR 00
|
||||
#define MY_VER_BUILD 0
|
||||
#define MY_VERSION_NUMBERS "19.00"
|
||||
#define MY_VERSION MY_VERSION_NUMBERS
|
||||
|
||||
#ifdef MY_CPU_NAME
|
||||
#define MY_VERSION_CPU MY_VERSION " (" MY_CPU_NAME ")"
|
||||
#else
|
||||
#define MY_VERSION_CPU MY_VERSION
|
||||
#endif
|
||||
|
||||
#define MY_DATE "2019-02-21"
|
||||
#undef MY_COPYRIGHT
|
||||
#undef MY_VERSION_COPYRIGHT_DATE
|
||||
#define MY_AUTHOR_NAME "Igor Pavlov"
|
||||
#define MY_COPYRIGHT_PD "Igor Pavlov : Public domain"
|
||||
#define MY_COPYRIGHT_CR "Copyright (c) 1999-2018 Igor Pavlov"
|
||||
|
||||
#ifdef USE_COPYRIGHT_CR
|
||||
#define MY_COPYRIGHT MY_COPYRIGHT_CR
|
||||
#else
|
||||
#define MY_COPYRIGHT MY_COPYRIGHT_PD
|
||||
#endif
|
||||
|
||||
#define MY_COPYRIGHT_DATE MY_COPYRIGHT " : " MY_DATE
|
||||
#define MY_VERSION_COPYRIGHT_DATE MY_VERSION_CPU " : " MY_COPYRIGHT " : " MY_DATE
|
||||
55
3rdparty/7z/7zVersion.rc
vendored
55
3rdparty/7z/7zVersion.rc
vendored
|
|
@ -1,55 +0,0 @@
|
|||
#define MY_VS_FFI_FILEFLAGSMASK 0x0000003FL
|
||||
#define MY_VOS_NT_WINDOWS32 0x00040004L
|
||||
#define MY_VOS_CE_WINDOWS32 0x00050004L
|
||||
|
||||
#define MY_VFT_APP 0x00000001L
|
||||
#define MY_VFT_DLL 0x00000002L
|
||||
|
||||
// #include <WinVer.h>
|
||||
|
||||
#ifndef MY_VERSION
|
||||
#include "7zVersion.h"
|
||||
#endif
|
||||
|
||||
#define MY_VER MY_VER_MAJOR,MY_VER_MINOR,MY_VER_BUILD,0
|
||||
|
||||
#ifdef DEBUG
|
||||
#define DBG_FL VS_FF_DEBUG
|
||||
#else
|
||||
#define DBG_FL 0
|
||||
#endif
|
||||
|
||||
#define MY_VERSION_INFO(fileType, descr, intName, origName) \
|
||||
LANGUAGE 9, 1 \
|
||||
1 VERSIONINFO \
|
||||
FILEVERSION MY_VER \
|
||||
PRODUCTVERSION MY_VER \
|
||||
FILEFLAGSMASK MY_VS_FFI_FILEFLAGSMASK \
|
||||
FILEFLAGS DBG_FL \
|
||||
FILEOS MY_VOS_NT_WINDOWS32 \
|
||||
FILETYPE fileType \
|
||||
FILESUBTYPE 0x0L \
|
||||
BEGIN \
|
||||
BLOCK "StringFileInfo" \
|
||||
BEGIN \
|
||||
BLOCK "040904b0" \
|
||||
BEGIN \
|
||||
VALUE "CompanyName", "Igor Pavlov" \
|
||||
VALUE "FileDescription", descr \
|
||||
VALUE "FileVersion", MY_VERSION \
|
||||
VALUE "InternalName", intName \
|
||||
VALUE "LegalCopyright", MY_COPYRIGHT \
|
||||
VALUE "OriginalFilename", origName \
|
||||
VALUE "ProductName", "7-Zip" \
|
||||
VALUE "ProductVersion", MY_VERSION \
|
||||
END \
|
||||
END \
|
||||
BLOCK "VarFileInfo" \
|
||||
BEGIN \
|
||||
VALUE "Translation", 0x409, 1200 \
|
||||
END \
|
||||
END
|
||||
|
||||
#define MY_VERSION_INFO_APP(descr, intName) MY_VERSION_INFO(MY_VFT_APP, descr, intName, intName ".exe")
|
||||
|
||||
#define MY_VERSION_INFO_DLL(descr, intName) MY_VERSION_INFO(MY_VFT_DLL, descr, intName, intName ".dll")
|
||||
306
3rdparty/7z/Aes.c
vendored
306
3rdparty/7z/Aes.c
vendored
|
|
@ -1,306 +0,0 @@
|
|||
/* Aes.c -- AES encryption / decryption
|
||||
2017-01-24 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "Aes.h"
|
||||
#include "CpuArch.h"
|
||||
|
||||
static UInt32 T[256 * 4];
|
||||
static const Byte Sbox[256] = {
|
||||
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
|
||||
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
|
||||
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
|
||||
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
|
||||
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
|
||||
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
|
||||
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
|
||||
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
|
||||
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
|
||||
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
|
||||
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
|
||||
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
|
||||
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
|
||||
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
|
||||
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
|
||||
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16};
|
||||
|
||||
void MY_FAST_CALL AesCbc_Encode(UInt32 *ivAes, Byte *data, size_t numBlocks);
|
||||
void MY_FAST_CALL AesCbc_Decode(UInt32 *ivAes, Byte *data, size_t numBlocks);
|
||||
void MY_FAST_CALL AesCtr_Code(UInt32 *ivAes, Byte *data, size_t numBlocks);
|
||||
|
||||
void MY_FAST_CALL AesCbc_Encode_Intel(UInt32 *ivAes, Byte *data, size_t numBlocks);
|
||||
void MY_FAST_CALL AesCbc_Decode_Intel(UInt32 *ivAes, Byte *data, size_t numBlocks);
|
||||
void MY_FAST_CALL AesCtr_Code_Intel(UInt32 *ivAes, Byte *data, size_t numBlocks);
|
||||
|
||||
AES_CODE_FUNC g_AesCbc_Encode;
|
||||
AES_CODE_FUNC g_AesCbc_Decode;
|
||||
AES_CODE_FUNC g_AesCtr_Code;
|
||||
|
||||
static UInt32 D[256 * 4];
|
||||
static Byte InvS[256];
|
||||
|
||||
static const Byte Rcon[11] = { 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 };
|
||||
|
||||
#define xtime(x) ((((x) << 1) ^ (((x) & 0x80) != 0 ? 0x1B : 0)) & 0xFF)
|
||||
|
||||
#define Ui32(a0, a1, a2, a3) ((UInt32)(a0) | ((UInt32)(a1) << 8) | ((UInt32)(a2) << 16) | ((UInt32)(a3) << 24))
|
||||
|
||||
#define gb0(x) ( (x) & 0xFF)
|
||||
#define gb1(x) (((x) >> ( 8)) & 0xFF)
|
||||
#define gb2(x) (((x) >> (16)) & 0xFF)
|
||||
#define gb3(x) (((x) >> (24)))
|
||||
|
||||
#define gb(n, x) gb ## n(x)
|
||||
|
||||
#define TT(x) (T + (x << 8))
|
||||
#define DD(x) (D + (x << 8))
|
||||
|
||||
|
||||
void AesGenTables(void)
|
||||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < 256; i++)
|
||||
InvS[Sbox[i]] = (Byte)i;
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
{
|
||||
UInt32 a1 = Sbox[i];
|
||||
UInt32 a2 = xtime(a1);
|
||||
UInt32 a3 = a2 ^ a1;
|
||||
TT(0)[i] = Ui32(a2, a1, a1, a3);
|
||||
TT(1)[i] = Ui32(a3, a2, a1, a1);
|
||||
TT(2)[i] = Ui32(a1, a3, a2, a1);
|
||||
TT(3)[i] = Ui32(a1, a1, a3, a2);
|
||||
}
|
||||
{
|
||||
UInt32 a1 = InvS[i];
|
||||
UInt32 a2 = xtime(a1);
|
||||
UInt32 a4 = xtime(a2);
|
||||
UInt32 a8 = xtime(a4);
|
||||
UInt32 a9 = a8 ^ a1;
|
||||
UInt32 aB = a8 ^ a2 ^ a1;
|
||||
UInt32 aD = a8 ^ a4 ^ a1;
|
||||
UInt32 aE = a8 ^ a4 ^ a2;
|
||||
DD(0)[i] = Ui32(aE, a9, aD, aB);
|
||||
DD(1)[i] = Ui32(aB, aE, a9, aD);
|
||||
DD(2)[i] = Ui32(aD, aB, aE, a9);
|
||||
DD(3)[i] = Ui32(a9, aD, aB, aE);
|
||||
}
|
||||
}
|
||||
|
||||
g_AesCbc_Encode = AesCbc_Encode;
|
||||
g_AesCbc_Decode = AesCbc_Decode;
|
||||
g_AesCtr_Code = AesCtr_Code;
|
||||
|
||||
#ifdef MY_CPU_X86_OR_AMD64
|
||||
if (CPU_Is_Aes_Supported())
|
||||
{
|
||||
g_AesCbc_Encode = AesCbc_Encode_Intel;
|
||||
g_AesCbc_Decode = AesCbc_Decode_Intel;
|
||||
g_AesCtr_Code = AesCtr_Code_Intel;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#define HT(i, x, s) TT(x)[gb(x, s[(i + x) & 3])]
|
||||
|
||||
#define HT4(m, i, s, p) m[i] = \
|
||||
HT(i, 0, s) ^ \
|
||||
HT(i, 1, s) ^ \
|
||||
HT(i, 2, s) ^ \
|
||||
HT(i, 3, s) ^ w[p + i]
|
||||
|
||||
#define HT16(m, s, p) \
|
||||
HT4(m, 0, s, p); \
|
||||
HT4(m, 1, s, p); \
|
||||
HT4(m, 2, s, p); \
|
||||
HT4(m, 3, s, p); \
|
||||
|
||||
#define FT(i, x) Sbox[gb(x, m[(i + x) & 3])]
|
||||
#define FT4(i) dest[i] = Ui32(FT(i, 0), FT(i, 1), FT(i, 2), FT(i, 3)) ^ w[i];
|
||||
|
||||
|
||||
#define HD(i, x, s) DD(x)[gb(x, s[(i - x) & 3])]
|
||||
|
||||
#define HD4(m, i, s, p) m[i] = \
|
||||
HD(i, 0, s) ^ \
|
||||
HD(i, 1, s) ^ \
|
||||
HD(i, 2, s) ^ \
|
||||
HD(i, 3, s) ^ w[p + i];
|
||||
|
||||
#define HD16(m, s, p) \
|
||||
HD4(m, 0, s, p); \
|
||||
HD4(m, 1, s, p); \
|
||||
HD4(m, 2, s, p); \
|
||||
HD4(m, 3, s, p); \
|
||||
|
||||
#define FD(i, x) InvS[gb(x, m[(i - x) & 3])]
|
||||
#define FD4(i) dest[i] = Ui32(FD(i, 0), FD(i, 1), FD(i, 2), FD(i, 3)) ^ w[i];
|
||||
|
||||
void MY_FAST_CALL Aes_SetKey_Enc(UInt32 *w, const Byte *key, unsigned keySize)
|
||||
{
|
||||
unsigned i, wSize;
|
||||
wSize = keySize + 28;
|
||||
keySize /= 4;
|
||||
w[0] = ((UInt32)keySize / 2) + 3;
|
||||
w += 4;
|
||||
|
||||
for (i = 0; i < keySize; i++, key += 4)
|
||||
w[i] = GetUi32(key);
|
||||
|
||||
for (; i < wSize; i++)
|
||||
{
|
||||
UInt32 t = w[(size_t)i - 1];
|
||||
unsigned rem = i % keySize;
|
||||
if (rem == 0)
|
||||
t = Ui32(Sbox[gb1(t)] ^ Rcon[i / keySize], Sbox[gb2(t)], Sbox[gb3(t)], Sbox[gb0(t)]);
|
||||
else if (keySize > 6 && rem == 4)
|
||||
t = Ui32(Sbox[gb0(t)], Sbox[gb1(t)], Sbox[gb2(t)], Sbox[gb3(t)]);
|
||||
w[i] = w[i - keySize] ^ t;
|
||||
}
|
||||
}
|
||||
|
||||
void MY_FAST_CALL Aes_SetKey_Dec(UInt32 *w, const Byte *key, unsigned keySize)
|
||||
{
|
||||
unsigned i, num;
|
||||
Aes_SetKey_Enc(w, key, keySize);
|
||||
num = keySize + 20;
|
||||
w += 8;
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
UInt32 r = w[i];
|
||||
w[i] =
|
||||
DD(0)[Sbox[gb0(r)]] ^
|
||||
DD(1)[Sbox[gb1(r)]] ^
|
||||
DD(2)[Sbox[gb2(r)]] ^
|
||||
DD(3)[Sbox[gb3(r)]];
|
||||
}
|
||||
}
|
||||
|
||||
/* Aes_Encode and Aes_Decode functions work with little-endian words.
|
||||
src and dest are pointers to 4 UInt32 words.
|
||||
src and dest can point to same block */
|
||||
|
||||
static void Aes_Encode(const UInt32 *w, UInt32 *dest, const UInt32 *src)
|
||||
{
|
||||
UInt32 s[4];
|
||||
UInt32 m[4];
|
||||
UInt32 numRounds2 = w[0];
|
||||
w += 4;
|
||||
s[0] = src[0] ^ w[0];
|
||||
s[1] = src[1] ^ w[1];
|
||||
s[2] = src[2] ^ w[2];
|
||||
s[3] = src[3] ^ w[3];
|
||||
w += 4;
|
||||
for (;;)
|
||||
{
|
||||
HT16(m, s, 0);
|
||||
if (--numRounds2 == 0)
|
||||
break;
|
||||
HT16(s, m, 4);
|
||||
w += 8;
|
||||
}
|
||||
w += 4;
|
||||
FT4(0); FT4(1); FT4(2); FT4(3);
|
||||
}
|
||||
|
||||
static void Aes_Decode(const UInt32 *w, UInt32 *dest, const UInt32 *src)
|
||||
{
|
||||
UInt32 s[4];
|
||||
UInt32 m[4];
|
||||
UInt32 numRounds2 = w[0];
|
||||
w += 4 + numRounds2 * 8;
|
||||
s[0] = src[0] ^ w[0];
|
||||
s[1] = src[1] ^ w[1];
|
||||
s[2] = src[2] ^ w[2];
|
||||
s[3] = src[3] ^ w[3];
|
||||
for (;;)
|
||||
{
|
||||
w -= 8;
|
||||
HD16(m, s, 4);
|
||||
if (--numRounds2 == 0)
|
||||
break;
|
||||
HD16(s, m, 0);
|
||||
}
|
||||
FD4(0); FD4(1); FD4(2); FD4(3);
|
||||
}
|
||||
|
||||
void AesCbc_Init(UInt32 *p, const Byte *iv)
|
||||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < 4; i++)
|
||||
p[i] = GetUi32(iv + i * 4);
|
||||
}
|
||||
|
||||
void MY_FAST_CALL AesCbc_Encode(UInt32 *p, Byte *data, size_t numBlocks)
|
||||
{
|
||||
for (; numBlocks != 0; numBlocks--, data += AES_BLOCK_SIZE)
|
||||
{
|
||||
p[0] ^= GetUi32(data);
|
||||
p[1] ^= GetUi32(data + 4);
|
||||
p[2] ^= GetUi32(data + 8);
|
||||
p[3] ^= GetUi32(data + 12);
|
||||
|
||||
Aes_Encode(p + 4, p, p);
|
||||
|
||||
SetUi32(data, p[0]);
|
||||
SetUi32(data + 4, p[1]);
|
||||
SetUi32(data + 8, p[2]);
|
||||
SetUi32(data + 12, p[3]);
|
||||
}
|
||||
}
|
||||
|
||||
void MY_FAST_CALL AesCbc_Decode(UInt32 *p, Byte *data, size_t numBlocks)
|
||||
{
|
||||
UInt32 in[4], out[4];
|
||||
for (; numBlocks != 0; numBlocks--, data += AES_BLOCK_SIZE)
|
||||
{
|
||||
in[0] = GetUi32(data);
|
||||
in[1] = GetUi32(data + 4);
|
||||
in[2] = GetUi32(data + 8);
|
||||
in[3] = GetUi32(data + 12);
|
||||
|
||||
Aes_Decode(p + 4, out, in);
|
||||
|
||||
SetUi32(data, p[0] ^ out[0]);
|
||||
SetUi32(data + 4, p[1] ^ out[1]);
|
||||
SetUi32(data + 8, p[2] ^ out[2]);
|
||||
SetUi32(data + 12, p[3] ^ out[3]);
|
||||
|
||||
p[0] = in[0];
|
||||
p[1] = in[1];
|
||||
p[2] = in[2];
|
||||
p[3] = in[3];
|
||||
}
|
||||
}
|
||||
|
||||
void MY_FAST_CALL AesCtr_Code(UInt32 *p, Byte *data, size_t numBlocks)
|
||||
{
|
||||
for (; numBlocks != 0; numBlocks--)
|
||||
{
|
||||
UInt32 temp[4];
|
||||
unsigned i;
|
||||
|
||||
if (++p[0] == 0)
|
||||
p[1]++;
|
||||
|
||||
Aes_Encode(p + 4, temp, p);
|
||||
|
||||
for (i = 0; i < 4; i++, data += 4)
|
||||
{
|
||||
UInt32 t = temp[i];
|
||||
|
||||
#ifdef MY_CPU_LE_UNALIGN
|
||||
*((UInt32 *)data) ^= t;
|
||||
#else
|
||||
data[0] ^= (t & 0xFF);
|
||||
data[1] ^= ((t >> 8) & 0xFF);
|
||||
data[2] ^= ((t >> 16) & 0xFF);
|
||||
data[3] ^= ((t >> 24));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
38
3rdparty/7z/Aes.h
vendored
38
3rdparty/7z/Aes.h
vendored
|
|
@ -1,38 +0,0 @@
|
|||
/* Aes.h -- AES encryption / decryption
|
||||
2013-01-18 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __AES_H
|
||||
#define __AES_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
#define AES_BLOCK_SIZE 16
|
||||
|
||||
/* Call AesGenTables one time before other AES functions */
|
||||
void AesGenTables(void);
|
||||
|
||||
/* UInt32 pointers must be 16-byte aligned */
|
||||
|
||||
/* 16-byte (4 * 32-bit words) blocks: 1 (IV) + 1 (keyMode) + 15 (AES-256 roundKeys) */
|
||||
#define AES_NUM_IVMRK_WORDS ((1 + 1 + 15) * 4)
|
||||
|
||||
/* aes - 16-byte aligned pointer to keyMode+roundKeys sequence */
|
||||
/* keySize = 16 or 24 or 32 (bytes) */
|
||||
typedef void (MY_FAST_CALL *AES_SET_KEY_FUNC)(UInt32 *aes, const Byte *key, unsigned keySize);
|
||||
void MY_FAST_CALL Aes_SetKey_Enc(UInt32 *aes, const Byte *key, unsigned keySize);
|
||||
void MY_FAST_CALL Aes_SetKey_Dec(UInt32 *aes, const Byte *key, unsigned keySize);
|
||||
|
||||
/* ivAes - 16-byte aligned pointer to iv+keyMode+roundKeys sequence: UInt32[AES_NUM_IVMRK_WORDS] */
|
||||
void AesCbc_Init(UInt32 *ivAes, const Byte *iv); /* iv size is AES_BLOCK_SIZE */
|
||||
/* data - 16-byte aligned pointer to data */
|
||||
/* numBlocks - the number of 16-byte blocks in data array */
|
||||
typedef void (MY_FAST_CALL *AES_CODE_FUNC)(UInt32 *ivAes, Byte *data, size_t numBlocks);
|
||||
extern AES_CODE_FUNC g_AesCbc_Encode;
|
||||
extern AES_CODE_FUNC g_AesCbc_Decode;
|
||||
extern AES_CODE_FUNC g_AesCtr_Code;
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
184
3rdparty/7z/AesOpt.c
vendored
184
3rdparty/7z/AesOpt.c
vendored
|
|
@ -1,184 +0,0 @@
|
|||
/* AesOpt.c -- Intel's AES
|
||||
2017-06-08 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "CpuArch.h"
|
||||
|
||||
#ifdef MY_CPU_X86_OR_AMD64
|
||||
#if (_MSC_VER > 1500) || (_MSC_FULL_VER >= 150030729)
|
||||
#define USE_INTEL_AES
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef USE_INTEL_AES
|
||||
|
||||
#include <wmmintrin.h>
|
||||
|
||||
void MY_FAST_CALL AesCbc_Encode_Intel(__m128i *p, __m128i *data, size_t numBlocks)
|
||||
{
|
||||
__m128i m = *p;
|
||||
for (; numBlocks != 0; numBlocks--, data++)
|
||||
{
|
||||
UInt32 numRounds2 = *(const UInt32 *)(p + 1) - 1;
|
||||
const __m128i *w = p + 3;
|
||||
m = _mm_xor_si128(m, *data);
|
||||
m = _mm_xor_si128(m, p[2]);
|
||||
do
|
||||
{
|
||||
m = _mm_aesenc_si128(m, w[0]);
|
||||
m = _mm_aesenc_si128(m, w[1]);
|
||||
w += 2;
|
||||
}
|
||||
while (--numRounds2 != 0);
|
||||
m = _mm_aesenc_si128(m, w[0]);
|
||||
m = _mm_aesenclast_si128(m, w[1]);
|
||||
*data = m;
|
||||
}
|
||||
*p = m;
|
||||
}
|
||||
|
||||
#define NUM_WAYS 3
|
||||
|
||||
#define AES_OP_W(op, n) { \
|
||||
const __m128i t = w[n]; \
|
||||
m0 = op(m0, t); \
|
||||
m1 = op(m1, t); \
|
||||
m2 = op(m2, t); \
|
||||
}
|
||||
|
||||
#define AES_DEC(n) AES_OP_W(_mm_aesdec_si128, n)
|
||||
#define AES_DEC_LAST(n) AES_OP_W(_mm_aesdeclast_si128, n)
|
||||
#define AES_ENC(n) AES_OP_W(_mm_aesenc_si128, n)
|
||||
#define AES_ENC_LAST(n) AES_OP_W(_mm_aesenclast_si128, n)
|
||||
|
||||
void MY_FAST_CALL AesCbc_Decode_Intel(__m128i *p, __m128i *data, size_t numBlocks)
|
||||
{
|
||||
__m128i iv = *p;
|
||||
for (; numBlocks >= NUM_WAYS; numBlocks -= NUM_WAYS, data += NUM_WAYS)
|
||||
{
|
||||
UInt32 numRounds2 = *(const UInt32 *)(p + 1);
|
||||
const __m128i *w = p + numRounds2 * 2;
|
||||
__m128i m0, m1, m2;
|
||||
{
|
||||
const __m128i t = w[2];
|
||||
m0 = _mm_xor_si128(t, data[0]);
|
||||
m1 = _mm_xor_si128(t, data[1]);
|
||||
m2 = _mm_xor_si128(t, data[2]);
|
||||
}
|
||||
numRounds2--;
|
||||
do
|
||||
{
|
||||
AES_DEC(1)
|
||||
AES_DEC(0)
|
||||
w -= 2;
|
||||
}
|
||||
while (--numRounds2 != 0);
|
||||
AES_DEC(1)
|
||||
AES_DEC_LAST(0)
|
||||
|
||||
{
|
||||
__m128i t;
|
||||
t = _mm_xor_si128(m0, iv); iv = data[0]; data[0] = t;
|
||||
t = _mm_xor_si128(m1, iv); iv = data[1]; data[1] = t;
|
||||
t = _mm_xor_si128(m2, iv); iv = data[2]; data[2] = t;
|
||||
}
|
||||
}
|
||||
for (; numBlocks != 0; numBlocks--, data++)
|
||||
{
|
||||
UInt32 numRounds2 = *(const UInt32 *)(p + 1);
|
||||
const __m128i *w = p + numRounds2 * 2;
|
||||
__m128i m = _mm_xor_si128(w[2], *data);
|
||||
numRounds2--;
|
||||
do
|
||||
{
|
||||
m = _mm_aesdec_si128(m, w[1]);
|
||||
m = _mm_aesdec_si128(m, w[0]);
|
||||
w -= 2;
|
||||
}
|
||||
while (--numRounds2 != 0);
|
||||
m = _mm_aesdec_si128(m, w[1]);
|
||||
m = _mm_aesdeclast_si128(m, w[0]);
|
||||
|
||||
m = _mm_xor_si128(m, iv);
|
||||
iv = *data;
|
||||
*data = m;
|
||||
}
|
||||
*p = iv;
|
||||
}
|
||||
|
||||
void MY_FAST_CALL AesCtr_Code_Intel(__m128i *p, __m128i *data, size_t numBlocks)
|
||||
{
|
||||
__m128i ctr = *p;
|
||||
__m128i one;
|
||||
one.m128i_u64[0] = 1;
|
||||
one.m128i_u64[1] = 0;
|
||||
for (; numBlocks >= NUM_WAYS; numBlocks -= NUM_WAYS, data += NUM_WAYS)
|
||||
{
|
||||
UInt32 numRounds2 = *(const UInt32 *)(p + 1) - 1;
|
||||
const __m128i *w = p;
|
||||
__m128i m0, m1, m2;
|
||||
{
|
||||
const __m128i t = w[2];
|
||||
ctr = _mm_add_epi64(ctr, one); m0 = _mm_xor_si128(ctr, t);
|
||||
ctr = _mm_add_epi64(ctr, one); m1 = _mm_xor_si128(ctr, t);
|
||||
ctr = _mm_add_epi64(ctr, one); m2 = _mm_xor_si128(ctr, t);
|
||||
}
|
||||
w += 3;
|
||||
do
|
||||
{
|
||||
AES_ENC(0)
|
||||
AES_ENC(1)
|
||||
w += 2;
|
||||
}
|
||||
while (--numRounds2 != 0);
|
||||
AES_ENC(0)
|
||||
AES_ENC_LAST(1)
|
||||
data[0] = _mm_xor_si128(data[0], m0);
|
||||
data[1] = _mm_xor_si128(data[1], m1);
|
||||
data[2] = _mm_xor_si128(data[2], m2);
|
||||
}
|
||||
for (; numBlocks != 0; numBlocks--, data++)
|
||||
{
|
||||
UInt32 numRounds2 = *(const UInt32 *)(p + 1) - 1;
|
||||
const __m128i *w = p;
|
||||
__m128i m;
|
||||
ctr = _mm_add_epi64(ctr, one);
|
||||
m = _mm_xor_si128(ctr, p[2]);
|
||||
w += 3;
|
||||
do
|
||||
{
|
||||
m = _mm_aesenc_si128(m, w[0]);
|
||||
m = _mm_aesenc_si128(m, w[1]);
|
||||
w += 2;
|
||||
}
|
||||
while (--numRounds2 != 0);
|
||||
m = _mm_aesenc_si128(m, w[0]);
|
||||
m = _mm_aesenclast_si128(m, w[1]);
|
||||
*data = _mm_xor_si128(*data, m);
|
||||
}
|
||||
*p = ctr;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void MY_FAST_CALL AesCbc_Encode(UInt32 *ivAes, Byte *data, size_t numBlocks);
|
||||
void MY_FAST_CALL AesCbc_Decode(UInt32 *ivAes, Byte *data, size_t numBlocks);
|
||||
void MY_FAST_CALL AesCtr_Code(UInt32 *ivAes, Byte *data, size_t numBlocks);
|
||||
|
||||
void MY_FAST_CALL AesCbc_Encode_Intel(UInt32 *p, Byte *data, size_t numBlocks)
|
||||
{
|
||||
AesCbc_Encode(p, data, numBlocks);
|
||||
}
|
||||
|
||||
void MY_FAST_CALL AesCbc_Decode_Intel(UInt32 *p, Byte *data, size_t numBlocks)
|
||||
{
|
||||
AesCbc_Decode(p, data, numBlocks);
|
||||
}
|
||||
|
||||
void MY_FAST_CALL AesCtr_Code_Intel(UInt32 *p, Byte *data, size_t numBlocks)
|
||||
{
|
||||
AesCtr_Code(p, data, numBlocks);
|
||||
}
|
||||
|
||||
#endif
|
||||
455
3rdparty/7z/Alloc.c
vendored
455
3rdparty/7z/Alloc.c
vendored
|
|
@ -1,455 +0,0 @@
|
|||
/* Alloc.c -- Memory allocation functions
|
||||
2018-04-27 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "Alloc.h"
|
||||
|
||||
/* #define _SZ_ALLOC_DEBUG */
|
||||
|
||||
/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */
|
||||
#ifdef _SZ_ALLOC_DEBUG
|
||||
|
||||
#include <stdio.h>
|
||||
int g_allocCount = 0;
|
||||
int g_allocCountMid = 0;
|
||||
int g_allocCountBig = 0;
|
||||
|
||||
|
||||
#define CONVERT_INT_TO_STR(charType, tempSize) \
|
||||
unsigned char temp[tempSize]; unsigned i = 0; \
|
||||
while (val >= 10) { temp[i++] = (unsigned char)('0' + (unsigned)(val % 10)); val /= 10; } \
|
||||
*s++ = (charType)('0' + (unsigned)val); \
|
||||
while (i != 0) { i--; *s++ = temp[i]; } \
|
||||
*s = 0;
|
||||
|
||||
static void ConvertUInt64ToString(UInt64 val, char *s)
|
||||
{
|
||||
CONVERT_INT_TO_STR(char, 24);
|
||||
}
|
||||
|
||||
#define GET_HEX_CHAR(t) ((char)(((t < 10) ? ('0' + t) : ('A' + (t - 10)))))
|
||||
|
||||
static void ConvertUInt64ToHex(UInt64 val, char *s)
|
||||
{
|
||||
UInt64 v = val;
|
||||
unsigned i;
|
||||
for (i = 1;; i++)
|
||||
{
|
||||
v >>= 4;
|
||||
if (v == 0)
|
||||
break;
|
||||
}
|
||||
s[i] = 0;
|
||||
do
|
||||
{
|
||||
unsigned t = (unsigned)(val & 0xF);
|
||||
val >>= 4;
|
||||
s[--i] = GET_HEX_CHAR(t);
|
||||
}
|
||||
while (i);
|
||||
}
|
||||
|
||||
#define DEBUG_OUT_STREAM stderr
|
||||
|
||||
static void Print(const char *s)
|
||||
{
|
||||
fputs(s, DEBUG_OUT_STREAM);
|
||||
}
|
||||
|
||||
static void PrintAligned(const char *s, size_t align)
|
||||
{
|
||||
size_t len = strlen(s);
|
||||
for(;;)
|
||||
{
|
||||
fputc(' ', DEBUG_OUT_STREAM);
|
||||
if (len >= align)
|
||||
break;
|
||||
++len;
|
||||
}
|
||||
Print(s);
|
||||
}
|
||||
|
||||
static void PrintLn()
|
||||
{
|
||||
Print("\n");
|
||||
}
|
||||
|
||||
static void PrintHex(UInt64 v, size_t align)
|
||||
{
|
||||
char s[32];
|
||||
ConvertUInt64ToHex(v, s);
|
||||
PrintAligned(s, align);
|
||||
}
|
||||
|
||||
static void PrintDec(UInt64 v, size_t align)
|
||||
{
|
||||
char s[32];
|
||||
ConvertUInt64ToString(v, s);
|
||||
PrintAligned(s, align);
|
||||
}
|
||||
|
||||
static void PrintAddr(void *p)
|
||||
{
|
||||
PrintHex((UInt64)(size_t)(ptrdiff_t)p, 12);
|
||||
}
|
||||
|
||||
|
||||
#define PRINT_ALLOC(name, cnt, size, ptr) \
|
||||
Print(name " "); \
|
||||
PrintDec(cnt++, 10); \
|
||||
PrintHex(size, 10); \
|
||||
PrintAddr(ptr); \
|
||||
PrintLn();
|
||||
|
||||
#define PRINT_FREE(name, cnt, ptr) if (ptr) { \
|
||||
Print(name " "); \
|
||||
PrintDec(--cnt, 10); \
|
||||
PrintAddr(ptr); \
|
||||
PrintLn(); }
|
||||
|
||||
#else
|
||||
|
||||
#define PRINT_ALLOC(name, cnt, size, ptr)
|
||||
#define PRINT_FREE(name, cnt, ptr)
|
||||
#define Print(s)
|
||||
#define PrintLn()
|
||||
#define PrintHex(v, align)
|
||||
#define PrintDec(v, align)
|
||||
#define PrintAddr(p)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
void *MyAlloc(size_t size)
|
||||
{
|
||||
if (size == 0)
|
||||
return NULL;
|
||||
#ifdef _SZ_ALLOC_DEBUG
|
||||
{
|
||||
void *p = malloc(size);
|
||||
PRINT_ALLOC("Alloc ", g_allocCount, size, p);
|
||||
return p;
|
||||
}
|
||||
#else
|
||||
return malloc(size);
|
||||
#endif
|
||||
}
|
||||
|
||||
void MyFree(void *address)
|
||||
{
|
||||
PRINT_FREE("Free ", g_allocCount, address);
|
||||
|
||||
free(address);
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
void *MidAlloc(size_t size)
|
||||
{
|
||||
if (size == 0)
|
||||
return NULL;
|
||||
|
||||
PRINT_ALLOC("Alloc-Mid", g_allocCountMid, size, NULL);
|
||||
|
||||
return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
|
||||
}
|
||||
|
||||
void MidFree(void *address)
|
||||
{
|
||||
PRINT_FREE("Free-Mid", g_allocCountMid, address);
|
||||
|
||||
if (!address)
|
||||
return;
|
||||
VirtualFree(address, 0, MEM_RELEASE);
|
||||
}
|
||||
|
||||
#ifndef MEM_LARGE_PAGES
|
||||
#undef _7ZIP_LARGE_PAGES
|
||||
#endif
|
||||
|
||||
#ifdef _7ZIP_LARGE_PAGES
|
||||
SIZE_T g_LargePageSize = 0;
|
||||
typedef SIZE_T (WINAPI *GetLargePageMinimumP)();
|
||||
#endif
|
||||
|
||||
void SetLargePageSize()
|
||||
{
|
||||
#ifdef _7ZIP_LARGE_PAGES
|
||||
SIZE_T size;
|
||||
GetLargePageMinimumP largePageMinimum = (GetLargePageMinimumP)
|
||||
GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetLargePageMinimum");
|
||||
if (!largePageMinimum)
|
||||
return;
|
||||
size = largePageMinimum();
|
||||
if (size == 0 || (size & (size - 1)) != 0)
|
||||
return;
|
||||
g_LargePageSize = size;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void *BigAlloc(size_t size)
|
||||
{
|
||||
if (size == 0)
|
||||
return NULL;
|
||||
|
||||
PRINT_ALLOC("Alloc-Big", g_allocCountBig, size, NULL);
|
||||
|
||||
#ifdef _7ZIP_LARGE_PAGES
|
||||
{
|
||||
SIZE_T ps = g_LargePageSize;
|
||||
if (ps != 0 && ps <= (1 << 30) && size > (ps / 2))
|
||||
{
|
||||
size_t size2;
|
||||
ps--;
|
||||
size2 = (size + ps) & ~ps;
|
||||
if (size2 >= size)
|
||||
{
|
||||
void *res = VirtualAlloc(NULL, size2, MEM_COMMIT | MEM_LARGE_PAGES, PAGE_READWRITE);
|
||||
if (res)
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
|
||||
}
|
||||
|
||||
void BigFree(void *address)
|
||||
{
|
||||
PRINT_FREE("Free-Big", g_allocCountBig, address);
|
||||
|
||||
if (!address)
|
||||
return;
|
||||
VirtualFree(address, 0, MEM_RELEASE);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
static void *SzAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p); return MyAlloc(size); }
|
||||
static void SzFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p); MyFree(address); }
|
||||
const ISzAlloc g_Alloc = { SzAlloc, SzFree };
|
||||
|
||||
static void *SzMidAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p); return MidAlloc(size); }
|
||||
static void SzMidFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p); MidFree(address); }
|
||||
const ISzAlloc g_MidAlloc = { SzMidAlloc, SzMidFree };
|
||||
|
||||
static void *SzBigAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p); return BigAlloc(size); }
|
||||
static void SzBigFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p); BigFree(address); }
|
||||
const ISzAlloc g_BigAlloc = { SzBigAlloc, SzBigFree };
|
||||
|
||||
|
||||
/*
|
||||
uintptr_t : <stdint.h> C99 (optional)
|
||||
: unsupported in VS6
|
||||
*/
|
||||
|
||||
#ifdef _WIN32
|
||||
typedef UINT_PTR UIntPtr;
|
||||
#else
|
||||
/*
|
||||
typedef uintptr_t UIntPtr;
|
||||
*/
|
||||
typedef ptrdiff_t UIntPtr;
|
||||
#endif
|
||||
|
||||
|
||||
#define ADJUST_ALLOC_SIZE 0
|
||||
/*
|
||||
#define ADJUST_ALLOC_SIZE (sizeof(void *) - 1)
|
||||
*/
|
||||
/*
|
||||
Use (ADJUST_ALLOC_SIZE = (sizeof(void *) - 1)), if
|
||||
MyAlloc() can return address that is NOT multiple of sizeof(void *).
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
#define MY_ALIGN_PTR_DOWN(p, align) ((void *)((char *)(p) - ((size_t)(UIntPtr)(p) & ((align) - 1))))
|
||||
*/
|
||||
#define MY_ALIGN_PTR_DOWN(p, align) ((void *)((((UIntPtr)(p)) & ~((UIntPtr)(align) - 1))))
|
||||
|
||||
#define MY_ALIGN_PTR_UP_PLUS(p, align) MY_ALIGN_PTR_DOWN(((char *)(p) + (align) + ADJUST_ALLOC_SIZE), align)
|
||||
|
||||
|
||||
#if (_POSIX_C_SOURCE >= 200112L) && !defined(_WIN32)
|
||||
#define USE_posix_memalign
|
||||
#endif
|
||||
|
||||
/*
|
||||
This posix_memalign() is for test purposes only.
|
||||
We also need special Free() function instead of free(),
|
||||
if this posix_memalign() is used.
|
||||
*/
|
||||
|
||||
/*
|
||||
static int posix_memalign(void **ptr, size_t align, size_t size)
|
||||
{
|
||||
size_t newSize = size + align;
|
||||
void *p;
|
||||
void *pAligned;
|
||||
*ptr = NULL;
|
||||
if (newSize < size)
|
||||
return 12; // ENOMEM
|
||||
p = MyAlloc(newSize);
|
||||
if (!p)
|
||||
return 12; // ENOMEM
|
||||
pAligned = MY_ALIGN_PTR_UP_PLUS(p, align);
|
||||
((void **)pAligned)[-1] = p;
|
||||
*ptr = pAligned;
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
ALLOC_ALIGN_SIZE >= sizeof(void *)
|
||||
ALLOC_ALIGN_SIZE >= cache_line_size
|
||||
*/
|
||||
|
||||
#define ALLOC_ALIGN_SIZE ((size_t)1 << 7)
|
||||
|
||||
static void *SzAlignedAlloc(ISzAllocPtr pp, size_t size)
|
||||
{
|
||||
#ifndef USE_posix_memalign
|
||||
|
||||
void *p;
|
||||
void *pAligned;
|
||||
size_t newSize;
|
||||
UNUSED_VAR(pp);
|
||||
|
||||
/* also we can allocate additional dummy ALLOC_ALIGN_SIZE bytes after aligned
|
||||
block to prevent cache line sharing with another allocated blocks */
|
||||
|
||||
newSize = size + ALLOC_ALIGN_SIZE * 1 + ADJUST_ALLOC_SIZE;
|
||||
if (newSize < size)
|
||||
return NULL;
|
||||
|
||||
p = MyAlloc(newSize);
|
||||
|
||||
if (!p)
|
||||
return NULL;
|
||||
pAligned = MY_ALIGN_PTR_UP_PLUS(p, ALLOC_ALIGN_SIZE);
|
||||
|
||||
Print(" size="); PrintHex(size, 8);
|
||||
Print(" a_size="); PrintHex(newSize, 8);
|
||||
Print(" ptr="); PrintAddr(p);
|
||||
Print(" a_ptr="); PrintAddr(pAligned);
|
||||
PrintLn();
|
||||
|
||||
((void **)pAligned)[-1] = p;
|
||||
|
||||
return pAligned;
|
||||
|
||||
#else
|
||||
|
||||
void *p;
|
||||
UNUSED_VAR(pp);
|
||||
if (posix_memalign(&p, ALLOC_ALIGN_SIZE, size))
|
||||
return NULL;
|
||||
|
||||
Print(" posix_memalign="); PrintAddr(p);
|
||||
PrintLn();
|
||||
|
||||
return p;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static void SzAlignedFree(ISzAllocPtr pp, void *address)
|
||||
{
|
||||
UNUSED_VAR(pp);
|
||||
#ifndef USE_posix_memalign
|
||||
if (address)
|
||||
MyFree(((void **)address)[-1]);
|
||||
#else
|
||||
free(address);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const ISzAlloc g_AlignedAlloc = { SzAlignedAlloc, SzAlignedFree };
|
||||
|
||||
|
||||
|
||||
#define MY_ALIGN_PTR_DOWN_1(p) MY_ALIGN_PTR_DOWN(p, sizeof(void *))
|
||||
|
||||
/* we align ptr to support cases where CAlignOffsetAlloc::offset is not multiply of sizeof(void *) */
|
||||
#define REAL_BLOCK_PTR_VAR(p) ((void **)MY_ALIGN_PTR_DOWN_1(p))[-1]
|
||||
/*
|
||||
#define REAL_BLOCK_PTR_VAR(p) ((void **)(p))[-1]
|
||||
*/
|
||||
|
||||
static void *AlignOffsetAlloc_Alloc(ISzAllocPtr pp, size_t size)
|
||||
{
|
||||
CAlignOffsetAlloc *p = CONTAINER_FROM_VTBL(pp, CAlignOffsetAlloc, vt);
|
||||
void *adr;
|
||||
void *pAligned;
|
||||
size_t newSize;
|
||||
size_t extra;
|
||||
size_t alignSize = (size_t)1 << p->numAlignBits;
|
||||
|
||||
if (alignSize < sizeof(void *))
|
||||
alignSize = sizeof(void *);
|
||||
|
||||
if (p->offset >= alignSize)
|
||||
return NULL;
|
||||
|
||||
/* also we can allocate additional dummy ALLOC_ALIGN_SIZE bytes after aligned
|
||||
block to prevent cache line sharing with another allocated blocks */
|
||||
extra = p->offset & (sizeof(void *) - 1);
|
||||
newSize = size + alignSize + extra + ADJUST_ALLOC_SIZE;
|
||||
if (newSize < size)
|
||||
return NULL;
|
||||
|
||||
adr = ISzAlloc_Alloc(p->baseAlloc, newSize);
|
||||
|
||||
if (!adr)
|
||||
return NULL;
|
||||
|
||||
pAligned = (char *)MY_ALIGN_PTR_DOWN((char *)adr +
|
||||
alignSize - p->offset + extra + ADJUST_ALLOC_SIZE, alignSize) + p->offset;
|
||||
|
||||
PrintLn();
|
||||
Print("- Aligned: ");
|
||||
Print(" size="); PrintHex(size, 8);
|
||||
Print(" a_size="); PrintHex(newSize, 8);
|
||||
Print(" ptr="); PrintAddr(adr);
|
||||
Print(" a_ptr="); PrintAddr(pAligned);
|
||||
PrintLn();
|
||||
|
||||
REAL_BLOCK_PTR_VAR(pAligned) = adr;
|
||||
|
||||
return pAligned;
|
||||
}
|
||||
|
||||
|
||||
static void AlignOffsetAlloc_Free(ISzAllocPtr pp, void *address)
|
||||
{
|
||||
if (address)
|
||||
{
|
||||
CAlignOffsetAlloc *p = CONTAINER_FROM_VTBL(pp, CAlignOffsetAlloc, vt);
|
||||
PrintLn();
|
||||
Print("- Aligned Free: ");
|
||||
PrintLn();
|
||||
ISzAlloc_Free(p->baseAlloc, REAL_BLOCK_PTR_VAR(address));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void AlignOffsetAlloc_CreateVTable(CAlignOffsetAlloc *p)
|
||||
{
|
||||
p->vt.Alloc = AlignOffsetAlloc_Alloc;
|
||||
p->vt.Free = AlignOffsetAlloc_Free;
|
||||
}
|
||||
51
3rdparty/7z/Alloc.h
vendored
51
3rdparty/7z/Alloc.h
vendored
|
|
@ -1,51 +0,0 @@
|
|||
/* Alloc.h -- Memory allocation functions
|
||||
2018-02-19 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __COMMON_ALLOC_H
|
||||
#define __COMMON_ALLOC_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
void *MyAlloc(size_t size);
|
||||
void MyFree(void *address);
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
void SetLargePageSize();
|
||||
|
||||
void *MidAlloc(size_t size);
|
||||
void MidFree(void *address);
|
||||
void *BigAlloc(size_t size);
|
||||
void BigFree(void *address);
|
||||
|
||||
#else
|
||||
|
||||
#define MidAlloc(size) MyAlloc(size)
|
||||
#define MidFree(address) MyFree(address)
|
||||
#define BigAlloc(size) MyAlloc(size)
|
||||
#define BigFree(address) MyFree(address)
|
||||
|
||||
#endif
|
||||
|
||||
extern const ISzAlloc g_Alloc;
|
||||
extern const ISzAlloc g_BigAlloc;
|
||||
extern const ISzAlloc g_MidAlloc;
|
||||
extern const ISzAlloc g_AlignedAlloc;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ISzAlloc vt;
|
||||
ISzAllocPtr baseAlloc;
|
||||
unsigned numAlignBits; /* ((1 << numAlignBits) >= sizeof(void *)) */
|
||||
size_t offset; /* (offset == (k * sizeof(void *)) && offset < (1 << numAlignBits) */
|
||||
} CAlignOffsetAlloc;
|
||||
|
||||
void AlignOffsetAlloc_CreateVTable(CAlignOffsetAlloc *p);
|
||||
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
257
3rdparty/7z/Bcj2.c
vendored
257
3rdparty/7z/Bcj2.c
vendored
|
|
@ -1,257 +0,0 @@
|
|||
/* Bcj2.c -- BCJ2 Decoder (Converter for x86 code)
|
||||
2018-04-28 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "Bcj2.h"
|
||||
#include "CpuArch.h"
|
||||
|
||||
#define CProb UInt16
|
||||
|
||||
#define kTopValue ((UInt32)1 << 24)
|
||||
#define kNumModelBits 11
|
||||
#define kBitModelTotal (1 << kNumModelBits)
|
||||
#define kNumMoveBits 5
|
||||
|
||||
#define _IF_BIT_0 ttt = *prob; bound = (p->range >> kNumModelBits) * ttt; if (p->code < bound)
|
||||
#define _UPDATE_0 p->range = bound; *prob = (CProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits));
|
||||
#define _UPDATE_1 p->range -= bound; p->code -= bound; *prob = (CProb)(ttt - (ttt >> kNumMoveBits));
|
||||
|
||||
void Bcj2Dec_Init(CBcj2Dec *p)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
p->state = BCJ2_DEC_STATE_OK;
|
||||
p->ip = 0;
|
||||
p->temp[3] = 0;
|
||||
p->range = 0;
|
||||
p->code = 0;
|
||||
for (i = 0; i < sizeof(p->probs) / sizeof(p->probs[0]); i++)
|
||||
p->probs[i] = kBitModelTotal >> 1;
|
||||
}
|
||||
|
||||
SRes Bcj2Dec_Decode(CBcj2Dec *p)
|
||||
{
|
||||
if (p->range <= 5)
|
||||
{
|
||||
p->state = BCJ2_DEC_STATE_OK;
|
||||
for (; p->range != 5; p->range++)
|
||||
{
|
||||
if (p->range == 1 && p->code != 0)
|
||||
return SZ_ERROR_DATA;
|
||||
|
||||
if (p->bufs[BCJ2_STREAM_RC] == p->lims[BCJ2_STREAM_RC])
|
||||
{
|
||||
p->state = BCJ2_STREAM_RC;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
p->code = (p->code << 8) | *(p->bufs[BCJ2_STREAM_RC])++;
|
||||
}
|
||||
|
||||
if (p->code == 0xFFFFFFFF)
|
||||
return SZ_ERROR_DATA;
|
||||
|
||||
p->range = 0xFFFFFFFF;
|
||||
}
|
||||
else if (p->state >= BCJ2_DEC_STATE_ORIG_0)
|
||||
{
|
||||
while (p->state <= BCJ2_DEC_STATE_ORIG_3)
|
||||
{
|
||||
Byte *dest = p->dest;
|
||||
if (dest == p->destLim)
|
||||
return SZ_OK;
|
||||
*dest = p->temp[(size_t)p->state - BCJ2_DEC_STATE_ORIG_0];
|
||||
p->state++;
|
||||
p->dest = dest + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if (BCJ2_IS_32BIT_STREAM(p->state))
|
||||
{
|
||||
const Byte *cur = p->bufs[p->state];
|
||||
if (cur == p->lims[p->state])
|
||||
return SZ_OK;
|
||||
p->bufs[p->state] = cur + 4;
|
||||
|
||||
{
|
||||
UInt32 val;
|
||||
Byte *dest;
|
||||
SizeT rem;
|
||||
|
||||
p->ip += 4;
|
||||
val = GetBe32(cur) - p->ip;
|
||||
dest = p->dest;
|
||||
rem = p->destLim - dest;
|
||||
if (rem < 4)
|
||||
{
|
||||
SizeT i;
|
||||
SetUi32(p->temp, val);
|
||||
for (i = 0; i < rem; i++)
|
||||
dest[i] = p->temp[i];
|
||||
p->dest = dest + rem;
|
||||
p->state = BCJ2_DEC_STATE_ORIG_0 + (unsigned)rem;
|
||||
return SZ_OK;
|
||||
}
|
||||
SetUi32(dest, val);
|
||||
p->temp[3] = (Byte)(val >> 24);
|
||||
p->dest = dest + 4;
|
||||
p->state = BCJ2_DEC_STATE_OK;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (BCJ2_IS_32BIT_STREAM(p->state))
|
||||
p->state = BCJ2_DEC_STATE_OK;
|
||||
else
|
||||
{
|
||||
if (p->range < kTopValue)
|
||||
{
|
||||
if (p->bufs[BCJ2_STREAM_RC] == p->lims[BCJ2_STREAM_RC])
|
||||
{
|
||||
p->state = BCJ2_STREAM_RC;
|
||||
return SZ_OK;
|
||||
}
|
||||
p->range <<= 8;
|
||||
p->code = (p->code << 8) | *(p->bufs[BCJ2_STREAM_RC])++;
|
||||
}
|
||||
|
||||
{
|
||||
const Byte *src = p->bufs[BCJ2_STREAM_MAIN];
|
||||
const Byte *srcLim;
|
||||
Byte *dest;
|
||||
SizeT num = p->lims[BCJ2_STREAM_MAIN] - src;
|
||||
|
||||
if (num == 0)
|
||||
{
|
||||
p->state = BCJ2_STREAM_MAIN;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
dest = p->dest;
|
||||
if (num > (SizeT)(p->destLim - dest))
|
||||
{
|
||||
num = p->destLim - dest;
|
||||
if (num == 0)
|
||||
{
|
||||
p->state = BCJ2_DEC_STATE_ORIG;
|
||||
return SZ_OK;
|
||||
}
|
||||
}
|
||||
|
||||
srcLim = src + num;
|
||||
|
||||
if (p->temp[3] == 0x0F && (src[0] & 0xF0) == 0x80)
|
||||
*dest = src[0];
|
||||
else for (;;)
|
||||
{
|
||||
Byte b = *src;
|
||||
*dest = b;
|
||||
if (b != 0x0F)
|
||||
{
|
||||
if ((b & 0xFE) == 0xE8)
|
||||
break;
|
||||
dest++;
|
||||
if (++src != srcLim)
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
dest++;
|
||||
if (++src == srcLim)
|
||||
break;
|
||||
if ((*src & 0xF0) != 0x80)
|
||||
continue;
|
||||
*dest = *src;
|
||||
break;
|
||||
}
|
||||
|
||||
num = src - p->bufs[BCJ2_STREAM_MAIN];
|
||||
|
||||
if (src == srcLim)
|
||||
{
|
||||
p->temp[3] = src[-1];
|
||||
p->bufs[BCJ2_STREAM_MAIN] = src;
|
||||
p->ip += (UInt32)num;
|
||||
p->dest += num;
|
||||
p->state =
|
||||
p->bufs[BCJ2_STREAM_MAIN] ==
|
||||
p->lims[BCJ2_STREAM_MAIN] ?
|
||||
(unsigned)BCJ2_STREAM_MAIN :
|
||||
(unsigned)BCJ2_DEC_STATE_ORIG;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
{
|
||||
UInt32 bound, ttt;
|
||||
CProb *prob;
|
||||
Byte b = src[0];
|
||||
Byte prev = (Byte)(num == 0 ? p->temp[3] : src[-1]);
|
||||
|
||||
p->temp[3] = b;
|
||||
p->bufs[BCJ2_STREAM_MAIN] = src + 1;
|
||||
num++;
|
||||
p->ip += (UInt32)num;
|
||||
p->dest += num;
|
||||
|
||||
prob = p->probs + (unsigned)(b == 0xE8 ? 2 + (unsigned)prev : (b == 0xE9 ? 1 : 0));
|
||||
|
||||
_IF_BIT_0
|
||||
{
|
||||
_UPDATE_0
|
||||
continue;
|
||||
}
|
||||
_UPDATE_1
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
UInt32 val;
|
||||
unsigned cj = (p->temp[3] == 0xE8) ? BCJ2_STREAM_CALL : BCJ2_STREAM_JUMP;
|
||||
const Byte *cur = p->bufs[cj];
|
||||
Byte *dest;
|
||||
SizeT rem;
|
||||
|
||||
if (cur == p->lims[cj])
|
||||
{
|
||||
p->state = cj;
|
||||
break;
|
||||
}
|
||||
|
||||
val = GetBe32(cur);
|
||||
p->bufs[cj] = cur + 4;
|
||||
|
||||
p->ip += 4;
|
||||
val -= p->ip;
|
||||
dest = p->dest;
|
||||
rem = p->destLim - dest;
|
||||
|
||||
if (rem < 4)
|
||||
{
|
||||
p->temp[0] = (Byte)val; if (rem > 0) dest[0] = (Byte)val; val >>= 8;
|
||||
p->temp[1] = (Byte)val; if (rem > 1) dest[1] = (Byte)val; val >>= 8;
|
||||
p->temp[2] = (Byte)val; if (rem > 2) dest[2] = (Byte)val; val >>= 8;
|
||||
p->temp[3] = (Byte)val;
|
||||
p->dest = dest + rem;
|
||||
p->state = BCJ2_DEC_STATE_ORIG_0 + (unsigned)rem;
|
||||
break;
|
||||
}
|
||||
|
||||
SetUi32(dest, val);
|
||||
p->temp[3] = (Byte)(val >> 24);
|
||||
p->dest = dest + 4;
|
||||
}
|
||||
}
|
||||
|
||||
if (p->range < kTopValue && p->bufs[BCJ2_STREAM_RC] != p->lims[BCJ2_STREAM_RC])
|
||||
{
|
||||
p->range <<= 8;
|
||||
p->code = (p->code << 8) | *(p->bufs[BCJ2_STREAM_RC])++;
|
||||
}
|
||||
|
||||
return SZ_OK;
|
||||
}
|
||||
146
3rdparty/7z/Bcj2.h
vendored
146
3rdparty/7z/Bcj2.h
vendored
|
|
@ -1,146 +0,0 @@
|
|||
/* Bcj2.h -- BCJ2 Converter for x86 code
|
||||
2014-11-10 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __BCJ2_H
|
||||
#define __BCJ2_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
#define BCJ2_NUM_STREAMS 4
|
||||
|
||||
enum
|
||||
{
|
||||
BCJ2_STREAM_MAIN,
|
||||
BCJ2_STREAM_CALL,
|
||||
BCJ2_STREAM_JUMP,
|
||||
BCJ2_STREAM_RC
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
BCJ2_DEC_STATE_ORIG_0 = BCJ2_NUM_STREAMS,
|
||||
BCJ2_DEC_STATE_ORIG_1,
|
||||
BCJ2_DEC_STATE_ORIG_2,
|
||||
BCJ2_DEC_STATE_ORIG_3,
|
||||
|
||||
BCJ2_DEC_STATE_ORIG,
|
||||
BCJ2_DEC_STATE_OK
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
BCJ2_ENC_STATE_ORIG = BCJ2_NUM_STREAMS,
|
||||
BCJ2_ENC_STATE_OK
|
||||
};
|
||||
|
||||
|
||||
#define BCJ2_IS_32BIT_STREAM(s) ((s) == BCJ2_STREAM_CALL || (s) == BCJ2_STREAM_JUMP)
|
||||
|
||||
/*
|
||||
CBcj2Dec / CBcj2Enc
|
||||
bufs sizes:
|
||||
BUF_SIZE(n) = lims[n] - bufs[n]
|
||||
bufs sizes for BCJ2_STREAM_CALL and BCJ2_STREAM_JUMP must be mutliply of 4:
|
||||
(BUF_SIZE(BCJ2_STREAM_CALL) & 3) == 0
|
||||
(BUF_SIZE(BCJ2_STREAM_JUMP) & 3) == 0
|
||||
*/
|
||||
|
||||
/*
|
||||
CBcj2Dec:
|
||||
dest is allowed to overlap with bufs[BCJ2_STREAM_MAIN], with the following conditions:
|
||||
bufs[BCJ2_STREAM_MAIN] >= dest &&
|
||||
bufs[BCJ2_STREAM_MAIN] - dest >= tempReserv +
|
||||
BUF_SIZE(BCJ2_STREAM_CALL) +
|
||||
BUF_SIZE(BCJ2_STREAM_JUMP)
|
||||
tempReserv = 0 : for first call of Bcj2Dec_Decode
|
||||
tempReserv = 4 : for any other calls of Bcj2Dec_Decode
|
||||
overlap with offset = 1 is not allowed
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const Byte *bufs[BCJ2_NUM_STREAMS];
|
||||
const Byte *lims[BCJ2_NUM_STREAMS];
|
||||
Byte *dest;
|
||||
const Byte *destLim;
|
||||
|
||||
unsigned state; /* BCJ2_STREAM_MAIN has more priority than BCJ2_STATE_ORIG */
|
||||
|
||||
UInt32 ip;
|
||||
Byte temp[4];
|
||||
UInt32 range;
|
||||
UInt32 code;
|
||||
UInt16 probs[2 + 256];
|
||||
} CBcj2Dec;
|
||||
|
||||
void Bcj2Dec_Init(CBcj2Dec *p);
|
||||
|
||||
/* Returns: SZ_OK or SZ_ERROR_DATA */
|
||||
SRes Bcj2Dec_Decode(CBcj2Dec *p);
|
||||
|
||||
#define Bcj2Dec_IsFinished(_p_) ((_p_)->code == 0)
|
||||
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
BCJ2_ENC_FINISH_MODE_CONTINUE,
|
||||
BCJ2_ENC_FINISH_MODE_END_BLOCK,
|
||||
BCJ2_ENC_FINISH_MODE_END_STREAM
|
||||
} EBcj2Enc_FinishMode;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Byte *bufs[BCJ2_NUM_STREAMS];
|
||||
const Byte *lims[BCJ2_NUM_STREAMS];
|
||||
const Byte *src;
|
||||
const Byte *srcLim;
|
||||
|
||||
unsigned state;
|
||||
EBcj2Enc_FinishMode finishMode;
|
||||
|
||||
Byte prevByte;
|
||||
|
||||
Byte cache;
|
||||
UInt32 range;
|
||||
UInt64 low;
|
||||
UInt64 cacheSize;
|
||||
|
||||
UInt32 ip;
|
||||
|
||||
/* 32-bit ralative offset in JUMP/CALL commands is
|
||||
- (mod 4 GB) in 32-bit mode
|
||||
- signed Int32 in 64-bit mode
|
||||
We use (mod 4 GB) check for fileSize.
|
||||
Use fileSize up to 2 GB, if you want to support 32-bit and 64-bit code conversion. */
|
||||
UInt32 fileIp;
|
||||
UInt32 fileSize; /* (fileSize <= ((UInt32)1 << 31)), 0 means no_limit */
|
||||
UInt32 relatLimit; /* (relatLimit <= ((UInt32)1 << 31)), 0 means desable_conversion */
|
||||
|
||||
UInt32 tempTarget;
|
||||
unsigned tempPos;
|
||||
Byte temp[4 * 2];
|
||||
|
||||
unsigned flushPos;
|
||||
|
||||
UInt16 probs[2 + 256];
|
||||
} CBcj2Enc;
|
||||
|
||||
void Bcj2Enc_Init(CBcj2Enc *p);
|
||||
void Bcj2Enc_Encode(CBcj2Enc *p);
|
||||
|
||||
#define Bcj2Enc_Get_InputData_Size(p) ((SizeT)((p)->srcLim - (p)->src) + (p)->tempPos)
|
||||
#define Bcj2Enc_IsFinished(p) ((p)->flushPos == 5)
|
||||
|
||||
|
||||
#define BCJ2_RELAT_LIMIT_NUM_BITS 26
|
||||
#define BCJ2_RELAT_LIMIT ((UInt32)1 << BCJ2_RELAT_LIMIT_NUM_BITS)
|
||||
|
||||
/* limit for CBcj2Enc::fileSize variable */
|
||||
#define BCJ2_FileSize_MAX ((UInt32)1 << 31)
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
311
3rdparty/7z/Bcj2Enc.c
vendored
311
3rdparty/7z/Bcj2Enc.c
vendored
|
|
@ -1,311 +0,0 @@
|
|||
/* Bcj2Enc.c -- BCJ2 Encoder (Converter for x86 code)
|
||||
2019-02-02 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
/* #define SHOW_STAT */
|
||||
|
||||
#ifdef SHOW_STAT
|
||||
#include <stdio.h>
|
||||
#define PRF(x) x
|
||||
#else
|
||||
#define PRF(x)
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "Bcj2.h"
|
||||
#include "CpuArch.h"
|
||||
|
||||
#define CProb UInt16
|
||||
|
||||
#define kTopValue ((UInt32)1 << 24)
|
||||
#define kNumModelBits 11
|
||||
#define kBitModelTotal (1 << kNumModelBits)
|
||||
#define kNumMoveBits 5
|
||||
|
||||
void Bcj2Enc_Init(CBcj2Enc *p)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
p->state = BCJ2_ENC_STATE_OK;
|
||||
p->finishMode = BCJ2_ENC_FINISH_MODE_CONTINUE;
|
||||
|
||||
p->prevByte = 0;
|
||||
|
||||
p->cache = 0;
|
||||
p->range = 0xFFFFFFFF;
|
||||
p->low = 0;
|
||||
p->cacheSize = 1;
|
||||
|
||||
p->ip = 0;
|
||||
|
||||
p->fileIp = 0;
|
||||
p->fileSize = 0;
|
||||
p->relatLimit = BCJ2_RELAT_LIMIT;
|
||||
|
||||
p->tempPos = 0;
|
||||
|
||||
p->flushPos = 0;
|
||||
|
||||
for (i = 0; i < sizeof(p->probs) / sizeof(p->probs[0]); i++)
|
||||
p->probs[i] = kBitModelTotal >> 1;
|
||||
}
|
||||
|
||||
static BoolInt MY_FAST_CALL RangeEnc_ShiftLow(CBcj2Enc *p)
|
||||
{
|
||||
if ((UInt32)p->low < (UInt32)0xFF000000 || (UInt32)(p->low >> 32) != 0)
|
||||
{
|
||||
Byte *buf = p->bufs[BCJ2_STREAM_RC];
|
||||
do
|
||||
{
|
||||
if (buf == p->lims[BCJ2_STREAM_RC])
|
||||
{
|
||||
p->state = BCJ2_STREAM_RC;
|
||||
p->bufs[BCJ2_STREAM_RC] = buf;
|
||||
return True;
|
||||
}
|
||||
*buf++ = (Byte)(p->cache + (Byte)(p->low >> 32));
|
||||
p->cache = 0xFF;
|
||||
}
|
||||
while (--p->cacheSize);
|
||||
p->bufs[BCJ2_STREAM_RC] = buf;
|
||||
p->cache = (Byte)((UInt32)p->low >> 24);
|
||||
}
|
||||
p->cacheSize++;
|
||||
p->low = (UInt32)p->low << 8;
|
||||
return False;
|
||||
}
|
||||
|
||||
static void Bcj2Enc_Encode_2(CBcj2Enc *p)
|
||||
{
|
||||
if (BCJ2_IS_32BIT_STREAM(p->state))
|
||||
{
|
||||
Byte *cur = p->bufs[p->state];
|
||||
if (cur == p->lims[p->state])
|
||||
return;
|
||||
SetBe32(cur, p->tempTarget);
|
||||
p->bufs[p->state] = cur + 4;
|
||||
}
|
||||
|
||||
p->state = BCJ2_ENC_STATE_ORIG;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (p->range < kTopValue)
|
||||
{
|
||||
if (RangeEnc_ShiftLow(p))
|
||||
return;
|
||||
p->range <<= 8;
|
||||
}
|
||||
|
||||
{
|
||||
{
|
||||
const Byte *src = p->src;
|
||||
const Byte *srcLim;
|
||||
Byte *dest;
|
||||
SizeT num = p->srcLim - src;
|
||||
|
||||
if (p->finishMode == BCJ2_ENC_FINISH_MODE_CONTINUE)
|
||||
{
|
||||
if (num <= 4)
|
||||
return;
|
||||
num -= 4;
|
||||
}
|
||||
else if (num == 0)
|
||||
break;
|
||||
|
||||
dest = p->bufs[BCJ2_STREAM_MAIN];
|
||||
if (num > (SizeT)(p->lims[BCJ2_STREAM_MAIN] - dest))
|
||||
{
|
||||
num = p->lims[BCJ2_STREAM_MAIN] - dest;
|
||||
if (num == 0)
|
||||
{
|
||||
p->state = BCJ2_STREAM_MAIN;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
srcLim = src + num;
|
||||
|
||||
if (p->prevByte == 0x0F && (src[0] & 0xF0) == 0x80)
|
||||
*dest = src[0];
|
||||
else for (;;)
|
||||
{
|
||||
Byte b = *src;
|
||||
*dest = b;
|
||||
if (b != 0x0F)
|
||||
{
|
||||
if ((b & 0xFE) == 0xE8)
|
||||
break;
|
||||
dest++;
|
||||
if (++src != srcLim)
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
dest++;
|
||||
if (++src == srcLim)
|
||||
break;
|
||||
if ((*src & 0xF0) != 0x80)
|
||||
continue;
|
||||
*dest = *src;
|
||||
break;
|
||||
}
|
||||
|
||||
num = src - p->src;
|
||||
|
||||
if (src == srcLim)
|
||||
{
|
||||
p->prevByte = src[-1];
|
||||
p->bufs[BCJ2_STREAM_MAIN] = dest;
|
||||
p->src = src;
|
||||
p->ip += (UInt32)num;
|
||||
continue;
|
||||
}
|
||||
|
||||
{
|
||||
Byte context = (Byte)(num == 0 ? p->prevByte : src[-1]);
|
||||
BoolInt needConvert;
|
||||
|
||||
p->bufs[BCJ2_STREAM_MAIN] = dest + 1;
|
||||
p->ip += (UInt32)num + 1;
|
||||
src++;
|
||||
|
||||
needConvert = False;
|
||||
|
||||
if ((SizeT)(p->srcLim - src) >= 4)
|
||||
{
|
||||
UInt32 relatVal = GetUi32(src);
|
||||
if ((p->fileSize == 0 || (UInt32)(p->ip + 4 + relatVal - p->fileIp) < p->fileSize)
|
||||
&& ((relatVal + p->relatLimit) >> 1) < p->relatLimit)
|
||||
needConvert = True;
|
||||
}
|
||||
|
||||
{
|
||||
UInt32 bound;
|
||||
unsigned ttt;
|
||||
Byte b = src[-1];
|
||||
CProb *prob = p->probs + (unsigned)(b == 0xE8 ? 2 + (unsigned)context : (b == 0xE9 ? 1 : 0));
|
||||
|
||||
ttt = *prob;
|
||||
bound = (p->range >> kNumModelBits) * ttt;
|
||||
|
||||
if (!needConvert)
|
||||
{
|
||||
p->range = bound;
|
||||
*prob = (CProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits));
|
||||
p->src = src;
|
||||
p->prevByte = b;
|
||||
continue;
|
||||
}
|
||||
|
||||
p->low += bound;
|
||||
p->range -= bound;
|
||||
*prob = (CProb)(ttt - (ttt >> kNumMoveBits));
|
||||
|
||||
{
|
||||
UInt32 relatVal = GetUi32(src);
|
||||
UInt32 absVal;
|
||||
p->ip += 4;
|
||||
absVal = p->ip + relatVal;
|
||||
p->prevByte = src[3];
|
||||
src += 4;
|
||||
p->src = src;
|
||||
{
|
||||
unsigned cj = (b == 0xE8) ? BCJ2_STREAM_CALL : BCJ2_STREAM_JUMP;
|
||||
Byte *cur = p->bufs[cj];
|
||||
if (cur == p->lims[cj])
|
||||
{
|
||||
p->state = cj;
|
||||
p->tempTarget = absVal;
|
||||
return;
|
||||
}
|
||||
SetBe32(cur, absVal);
|
||||
p->bufs[cj] = cur + 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (p->finishMode != BCJ2_ENC_FINISH_MODE_END_STREAM)
|
||||
return;
|
||||
|
||||
for (; p->flushPos < 5; p->flushPos++)
|
||||
if (RangeEnc_ShiftLow(p))
|
||||
return;
|
||||
p->state = BCJ2_ENC_STATE_OK;
|
||||
}
|
||||
|
||||
|
||||
void Bcj2Enc_Encode(CBcj2Enc *p)
|
||||
{
|
||||
PRF(printf("\n"));
|
||||
PRF(printf("---- ip = %8d tempPos = %8d src = %8d\n", p->ip, p->tempPos, p->srcLim - p->src));
|
||||
|
||||
if (p->tempPos != 0)
|
||||
{
|
||||
unsigned extra = 0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
const Byte *src = p->src;
|
||||
const Byte *srcLim = p->srcLim;
|
||||
EBcj2Enc_FinishMode finishMode = p->finishMode;
|
||||
|
||||
p->src = p->temp;
|
||||
p->srcLim = p->temp + p->tempPos;
|
||||
if (src != srcLim)
|
||||
p->finishMode = BCJ2_ENC_FINISH_MODE_CONTINUE;
|
||||
|
||||
PRF(printf(" ip = %8d tempPos = %8d src = %8d\n", p->ip, p->tempPos, p->srcLim - p->src));
|
||||
|
||||
Bcj2Enc_Encode_2(p);
|
||||
|
||||
{
|
||||
unsigned num = (unsigned)(p->src - p->temp);
|
||||
unsigned tempPos = p->tempPos - num;
|
||||
unsigned i;
|
||||
p->tempPos = tempPos;
|
||||
for (i = 0; i < tempPos; i++)
|
||||
p->temp[i] = p->temp[(size_t)i + num];
|
||||
|
||||
p->src = src;
|
||||
p->srcLim = srcLim;
|
||||
p->finishMode = finishMode;
|
||||
|
||||
if (p->state != BCJ2_ENC_STATE_ORIG || src == srcLim)
|
||||
return;
|
||||
|
||||
if (extra >= tempPos)
|
||||
{
|
||||
p->src = src - tempPos;
|
||||
p->tempPos = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
p->temp[tempPos] = src[0];
|
||||
p->tempPos = tempPos + 1;
|
||||
p->src = src + 1;
|
||||
extra++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PRF(printf("++++ ip = %8d tempPos = %8d src = %8d\n", p->ip, p->tempPos, p->srcLim - p->src));
|
||||
|
||||
Bcj2Enc_Encode_2(p);
|
||||
|
||||
if (p->state == BCJ2_ENC_STATE_ORIG)
|
||||
{
|
||||
const Byte *src = p->src;
|
||||
unsigned rem = (unsigned)(p->srcLim - src);
|
||||
unsigned i;
|
||||
for (i = 0; i < rem; i++)
|
||||
p->temp[i] = src[i];
|
||||
p->tempPos = rem;
|
||||
p->src = src + rem;
|
||||
}
|
||||
}
|
||||
230
3rdparty/7z/Bra.c
vendored
230
3rdparty/7z/Bra.c
vendored
|
|
@ -1,230 +0,0 @@
|
|||
/* Bra.c -- Converters for RISC code
|
||||
2017-04-04 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "CpuArch.h"
|
||||
#include "Bra.h"
|
||||
|
||||
SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
|
||||
{
|
||||
Byte *p;
|
||||
const Byte *lim;
|
||||
size &= ~(size_t)3;
|
||||
ip += 4;
|
||||
p = data;
|
||||
lim = data + size;
|
||||
|
||||
if (encoding)
|
||||
|
||||
for (;;)
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
if (p >= lim)
|
||||
return p - data;
|
||||
p += 4;
|
||||
if (p[-1] == 0xEB)
|
||||
break;
|
||||
}
|
||||
{
|
||||
UInt32 v = GetUi32(p - 4);
|
||||
v <<= 2;
|
||||
v += ip + (UInt32)(p - data);
|
||||
v >>= 2;
|
||||
v &= 0x00FFFFFF;
|
||||
v |= 0xEB000000;
|
||||
SetUi32(p - 4, v);
|
||||
}
|
||||
}
|
||||
|
||||
for (;;)
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
if (p >= lim)
|
||||
return p - data;
|
||||
p += 4;
|
||||
if (p[-1] == 0xEB)
|
||||
break;
|
||||
}
|
||||
{
|
||||
UInt32 v = GetUi32(p - 4);
|
||||
v <<= 2;
|
||||
v -= ip + (UInt32)(p - data);
|
||||
v >>= 2;
|
||||
v &= 0x00FFFFFF;
|
||||
v |= 0xEB000000;
|
||||
SetUi32(p - 4, v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
|
||||
{
|
||||
Byte *p;
|
||||
const Byte *lim;
|
||||
size &= ~(size_t)1;
|
||||
p = data;
|
||||
lim = data + size - 4;
|
||||
|
||||
if (encoding)
|
||||
|
||||
for (;;)
|
||||
{
|
||||
UInt32 b1;
|
||||
for (;;)
|
||||
{
|
||||
UInt32 b3;
|
||||
if (p > lim)
|
||||
return p - data;
|
||||
b1 = p[1];
|
||||
b3 = p[3];
|
||||
p += 2;
|
||||
b1 ^= 8;
|
||||
if ((b3 & b1) >= 0xF8)
|
||||
break;
|
||||
}
|
||||
{
|
||||
UInt32 v =
|
||||
((UInt32)b1 << 19)
|
||||
+ (((UInt32)p[1] & 0x7) << 8)
|
||||
+ (((UInt32)p[-2] << 11))
|
||||
+ (p[0]);
|
||||
|
||||
p += 2;
|
||||
{
|
||||
UInt32 cur = (ip + (UInt32)(p - data)) >> 1;
|
||||
v += cur;
|
||||
}
|
||||
|
||||
p[-4] = (Byte)(v >> 11);
|
||||
p[-3] = (Byte)(0xF0 | ((v >> 19) & 0x7));
|
||||
p[-2] = (Byte)v;
|
||||
p[-1] = (Byte)(0xF8 | (v >> 8));
|
||||
}
|
||||
}
|
||||
|
||||
for (;;)
|
||||
{
|
||||
UInt32 b1;
|
||||
for (;;)
|
||||
{
|
||||
UInt32 b3;
|
||||
if (p > lim)
|
||||
return p - data;
|
||||
b1 = p[1];
|
||||
b3 = p[3];
|
||||
p += 2;
|
||||
b1 ^= 8;
|
||||
if ((b3 & b1) >= 0xF8)
|
||||
break;
|
||||
}
|
||||
{
|
||||
UInt32 v =
|
||||
((UInt32)b1 << 19)
|
||||
+ (((UInt32)p[1] & 0x7) << 8)
|
||||
+ (((UInt32)p[-2] << 11))
|
||||
+ (p[0]);
|
||||
|
||||
p += 2;
|
||||
{
|
||||
UInt32 cur = (ip + (UInt32)(p - data)) >> 1;
|
||||
v -= cur;
|
||||
}
|
||||
|
||||
/*
|
||||
SetUi16(p - 4, (UInt16)(((v >> 11) & 0x7FF) | 0xF000));
|
||||
SetUi16(p - 2, (UInt16)(v | 0xF800));
|
||||
*/
|
||||
|
||||
p[-4] = (Byte)(v >> 11);
|
||||
p[-3] = (Byte)(0xF0 | ((v >> 19) & 0x7));
|
||||
p[-2] = (Byte)v;
|
||||
p[-1] = (Byte)(0xF8 | (v >> 8));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
|
||||
{
|
||||
Byte *p;
|
||||
const Byte *lim;
|
||||
size &= ~(size_t)3;
|
||||
ip -= 4;
|
||||
p = data;
|
||||
lim = data + size;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
if (p >= lim)
|
||||
return p - data;
|
||||
p += 4;
|
||||
/* if ((v & 0xFC000003) == 0x48000001) */
|
||||
if ((p[-4] & 0xFC) == 0x48 && (p[-1] & 3) == 1)
|
||||
break;
|
||||
}
|
||||
{
|
||||
UInt32 v = GetBe32(p - 4);
|
||||
if (encoding)
|
||||
v += ip + (UInt32)(p - data);
|
||||
else
|
||||
v -= ip + (UInt32)(p - data);
|
||||
v &= 0x03FFFFFF;
|
||||
v |= 0x48000000;
|
||||
SetBe32(p - 4, v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
|
||||
{
|
||||
Byte *p;
|
||||
const Byte *lim;
|
||||
size &= ~(size_t)3;
|
||||
ip -= 4;
|
||||
p = data;
|
||||
lim = data + size;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
if (p >= lim)
|
||||
return p - data;
|
||||
/*
|
||||
v = GetBe32(p);
|
||||
p += 4;
|
||||
m = v + ((UInt32)5 << 29);
|
||||
m ^= (UInt32)7 << 29;
|
||||
m += (UInt32)1 << 22;
|
||||
if ((m & ((UInt32)0x1FF << 23)) == 0)
|
||||
break;
|
||||
*/
|
||||
p += 4;
|
||||
if ((p[-4] == 0x40 && (p[-3] & 0xC0) == 0) ||
|
||||
(p[-4] == 0x7F && (p[-3] >= 0xC0)))
|
||||
break;
|
||||
}
|
||||
{
|
||||
UInt32 v = GetBe32(p - 4);
|
||||
v <<= 2;
|
||||
if (encoding)
|
||||
v += ip + (UInt32)(p - data);
|
||||
else
|
||||
v -= ip + (UInt32)(p - data);
|
||||
|
||||
v &= 0x01FFFFFF;
|
||||
v -= (UInt32)1 << 24;
|
||||
v ^= 0xFF000000;
|
||||
v >>= 2;
|
||||
v |= 0x40000000;
|
||||
SetBe32(p - 4, v);
|
||||
}
|
||||
}
|
||||
}
|
||||
64
3rdparty/7z/Bra.h
vendored
64
3rdparty/7z/Bra.h
vendored
|
|
@ -1,64 +0,0 @@
|
|||
/* Bra.h -- Branch converters for executables
|
||||
2013-01-18 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __BRA_H
|
||||
#define __BRA_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
/*
|
||||
These functions convert relative addresses to absolute addresses
|
||||
in CALL instructions to increase the compression ratio.
|
||||
|
||||
In:
|
||||
data - data buffer
|
||||
size - size of data
|
||||
ip - current virtual Instruction Pinter (IP) value
|
||||
state - state variable for x86 converter
|
||||
encoding - 0 (for decoding), 1 (for encoding)
|
||||
|
||||
Out:
|
||||
state - state variable for x86 converter
|
||||
|
||||
Returns:
|
||||
The number of processed bytes. If you call these functions with multiple calls,
|
||||
you must start next call with first byte after block of processed bytes.
|
||||
|
||||
Type Endian Alignment LookAhead
|
||||
|
||||
x86 little 1 4
|
||||
ARMT little 2 2
|
||||
ARM little 4 0
|
||||
PPC big 4 0
|
||||
SPARC big 4 0
|
||||
IA64 little 16 0
|
||||
|
||||
size must be >= Alignment + LookAhead, if it's not last block.
|
||||
If (size < Alignment + LookAhead), converter returns 0.
|
||||
|
||||
Example:
|
||||
|
||||
UInt32 ip = 0;
|
||||
for ()
|
||||
{
|
||||
; size must be >= Alignment + LookAhead, if it's not last block
|
||||
SizeT processed = Convert(data, size, ip, 1);
|
||||
data += processed;
|
||||
size -= processed;
|
||||
ip += processed;
|
||||
}
|
||||
*/
|
||||
|
||||
#define x86_Convert_Init(state) { state = 0; }
|
||||
SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding);
|
||||
SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
|
||||
SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
|
||||
SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
|
||||
SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
|
||||
SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
82
3rdparty/7z/Bra86.c
vendored
82
3rdparty/7z/Bra86.c
vendored
|
|
@ -1,82 +0,0 @@
|
|||
/* Bra86.c -- Converter for x86 code (BCJ)
|
||||
2017-04-03 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "Bra.h"
|
||||
|
||||
#define Test86MSByte(b) ((((b) + 1) & 0xFE) == 0)
|
||||
|
||||
SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding)
|
||||
{
|
||||
SizeT pos = 0;
|
||||
UInt32 mask = *state & 7;
|
||||
if (size < 5)
|
||||
return 0;
|
||||
size -= 4;
|
||||
ip += 5;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
Byte *p = data + pos;
|
||||
const Byte *limit = data + size;
|
||||
for (; p < limit; p++)
|
||||
if ((*p & 0xFE) == 0xE8)
|
||||
break;
|
||||
|
||||
{
|
||||
SizeT d = (SizeT)(p - data - pos);
|
||||
pos = (SizeT)(p - data);
|
||||
if (p >= limit)
|
||||
{
|
||||
*state = (d > 2 ? 0 : mask >> (unsigned)d);
|
||||
return pos;
|
||||
}
|
||||
if (d > 2)
|
||||
mask = 0;
|
||||
else
|
||||
{
|
||||
mask >>= (unsigned)d;
|
||||
if (mask != 0 && (mask > 4 || mask == 3 || Test86MSByte(p[(size_t)(mask >> 1) + 1])))
|
||||
{
|
||||
mask = (mask >> 1) | 4;
|
||||
pos++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Test86MSByte(p[4]))
|
||||
{
|
||||
UInt32 v = ((UInt32)p[4] << 24) | ((UInt32)p[3] << 16) | ((UInt32)p[2] << 8) | ((UInt32)p[1]);
|
||||
UInt32 cur = ip + (UInt32)pos;
|
||||
pos += 5;
|
||||
if (encoding)
|
||||
v += cur;
|
||||
else
|
||||
v -= cur;
|
||||
if (mask != 0)
|
||||
{
|
||||
unsigned sh = (mask & 6) << 2;
|
||||
if (Test86MSByte((Byte)(v >> sh)))
|
||||
{
|
||||
v ^= (((UInt32)0x100 << sh) - 1);
|
||||
if (encoding)
|
||||
v += cur;
|
||||
else
|
||||
v -= cur;
|
||||
}
|
||||
mask = 0;
|
||||
}
|
||||
p[1] = (Byte)v;
|
||||
p[2] = (Byte)(v >> 8);
|
||||
p[3] = (Byte)(v >> 16);
|
||||
p[4] = (Byte)(0 - ((v >> 24) & 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
mask = (mask >> 1) | 4;
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
}
|
||||
53
3rdparty/7z/BraIA64.c
vendored
53
3rdparty/7z/BraIA64.c
vendored
|
|
@ -1,53 +0,0 @@
|
|||
/* BraIA64.c -- Converter for IA-64 code
|
||||
2017-01-26 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "CpuArch.h"
|
||||
#include "Bra.h"
|
||||
|
||||
SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
|
||||
{
|
||||
SizeT i;
|
||||
if (size < 16)
|
||||
return 0;
|
||||
size -= 16;
|
||||
i = 0;
|
||||
do
|
||||
{
|
||||
unsigned m = ((UInt32)0x334B0000 >> (data[i] & 0x1E)) & 3;
|
||||
if (m)
|
||||
{
|
||||
m++;
|
||||
do
|
||||
{
|
||||
Byte *p = data + (i + (size_t)m * 5 - 8);
|
||||
if (((p[3] >> m) & 15) == 5
|
||||
&& (((p[-1] | ((UInt32)p[0] << 8)) >> m) & 0x70) == 0)
|
||||
{
|
||||
unsigned raw = GetUi32(p);
|
||||
unsigned v = raw >> m;
|
||||
v = (v & 0xFFFFF) | ((v & (1 << 23)) >> 3);
|
||||
|
||||
v <<= 4;
|
||||
if (encoding)
|
||||
v += ip + (UInt32)i;
|
||||
else
|
||||
v -= ip + (UInt32)i;
|
||||
v >>= 4;
|
||||
|
||||
v &= 0x1FFFFF;
|
||||
v += 0x700000;
|
||||
v &= 0x8FFFFF;
|
||||
raw &= ~((UInt32)0x8FFFFF << m);
|
||||
raw |= (v << m);
|
||||
SetUi32(p, raw);
|
||||
}
|
||||
}
|
||||
while (++m <= 4);
|
||||
}
|
||||
i += 16;
|
||||
}
|
||||
while (i <= size);
|
||||
return i;
|
||||
}
|
||||
33
3rdparty/7z/Compiler.h
vendored
33
3rdparty/7z/Compiler.h
vendored
|
|
@ -1,33 +0,0 @@
|
|||
/* Compiler.h
|
||||
2017-04-03 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __7Z_COMPILER_H
|
||||
#define __7Z_COMPILER_H
|
||||
|
||||
#ifdef _MSC_VER
|
||||
|
||||
#ifdef UNDER_CE
|
||||
#define RPC_NO_WINDOWS_H
|
||||
/* #pragma warning(disable : 4115) // '_RPC_ASYNC_STATE' : named type definition in parentheses */
|
||||
#pragma warning(disable : 4201) // nonstandard extension used : nameless struct/union
|
||||
#pragma warning(disable : 4214) // nonstandard extension used : bit field types other than int
|
||||
#endif
|
||||
|
||||
#if _MSC_VER >= 1300
|
||||
#pragma warning(disable : 4996) // This function or variable may be unsafe
|
||||
#else
|
||||
#pragma warning(disable : 4511) // copy constructor could not be generated
|
||||
#pragma warning(disable : 4512) // assignment operator could not be generated
|
||||
#pragma warning(disable : 4514) // unreferenced inline function has been removed
|
||||
#pragma warning(disable : 4702) // unreachable code
|
||||
#pragma warning(disable : 4710) // not inlined
|
||||
#pragma warning(disable : 4714) // function marked as __forceinline not inlined
|
||||
#pragma warning(disable : 4786) // identifier was truncated to '255' characters in the debug information
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#define UNUSED_VAR(x) (void)x;
|
||||
/* #define UNUSED_VAR(x) x=x; */
|
||||
|
||||
#endif
|
||||
218
3rdparty/7z/CpuArch.c
vendored
218
3rdparty/7z/CpuArch.c
vendored
|
|
@ -1,218 +0,0 @@
|
|||
/* CpuArch.c -- CPU specific code
|
||||
2018-02-18: Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "CpuArch.h"
|
||||
|
||||
#ifdef MY_CPU_X86_OR_AMD64
|
||||
|
||||
#if (defined(_MSC_VER) && !defined(MY_CPU_AMD64)) || defined(__GNUC__)
|
||||
#define USE_ASM
|
||||
#endif
|
||||
|
||||
#if !defined(USE_ASM) && _MSC_VER >= 1500
|
||||
#include <intrin.h>
|
||||
#endif
|
||||
|
||||
#if defined(USE_ASM) && !defined(MY_CPU_AMD64)
|
||||
static UInt32 CheckFlag(UInt32 flag)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
__asm pushfd;
|
||||
__asm pop EAX;
|
||||
__asm mov EDX, EAX;
|
||||
__asm xor EAX, flag;
|
||||
__asm push EAX;
|
||||
__asm popfd;
|
||||
__asm pushfd;
|
||||
__asm pop EAX;
|
||||
__asm xor EAX, EDX;
|
||||
__asm push EDX;
|
||||
__asm popfd;
|
||||
__asm and flag, EAX;
|
||||
#else
|
||||
__asm__ __volatile__ (
|
||||
"pushf\n\t"
|
||||
"pop %%EAX\n\t"
|
||||
"movl %%EAX,%%EDX\n\t"
|
||||
"xorl %0,%%EAX\n\t"
|
||||
"push %%EAX\n\t"
|
||||
"popf\n\t"
|
||||
"pushf\n\t"
|
||||
"pop %%EAX\n\t"
|
||||
"xorl %%EDX,%%EAX\n\t"
|
||||
"push %%EDX\n\t"
|
||||
"popf\n\t"
|
||||
"andl %%EAX, %0\n\t":
|
||||
"=c" (flag) : "c" (flag) :
|
||||
"%eax", "%edx");
|
||||
#endif
|
||||
return flag;
|
||||
}
|
||||
#define CHECK_CPUID_IS_SUPPORTED if (CheckFlag(1 << 18) == 0 || CheckFlag(1 << 21) == 0) return False;
|
||||
#else
|
||||
#define CHECK_CPUID_IS_SUPPORTED
|
||||
#endif
|
||||
|
||||
void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d)
|
||||
{
|
||||
#ifdef USE_ASM
|
||||
|
||||
#ifdef _MSC_VER
|
||||
|
||||
UInt32 a2, b2, c2, d2;
|
||||
__asm xor EBX, EBX;
|
||||
__asm xor ECX, ECX;
|
||||
__asm xor EDX, EDX;
|
||||
__asm mov EAX, function;
|
||||
__asm cpuid;
|
||||
__asm mov a2, EAX;
|
||||
__asm mov b2, EBX;
|
||||
__asm mov c2, ECX;
|
||||
__asm mov d2, EDX;
|
||||
|
||||
*a = a2;
|
||||
*b = b2;
|
||||
*c = c2;
|
||||
*d = d2;
|
||||
|
||||
#else
|
||||
|
||||
__asm__ __volatile__ (
|
||||
#if defined(MY_CPU_AMD64) && defined(__PIC__)
|
||||
"mov %%rbx, %%rdi;"
|
||||
"cpuid;"
|
||||
"xchg %%rbx, %%rdi;"
|
||||
: "=a" (*a) ,
|
||||
"=D" (*b) ,
|
||||
#elif defined(MY_CPU_X86) && defined(__PIC__)
|
||||
"mov %%ebx, %%edi;"
|
||||
"cpuid;"
|
||||
"xchgl %%ebx, %%edi;"
|
||||
: "=a" (*a) ,
|
||||
"=D" (*b) ,
|
||||
#else
|
||||
"cpuid"
|
||||
: "=a" (*a) ,
|
||||
"=b" (*b) ,
|
||||
#endif
|
||||
"=c" (*c) ,
|
||||
"=d" (*d)
|
||||
: "0" (function)) ;
|
||||
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
int CPUInfo[4];
|
||||
__cpuid(CPUInfo, function);
|
||||
*a = CPUInfo[0];
|
||||
*b = CPUInfo[1];
|
||||
*c = CPUInfo[2];
|
||||
*d = CPUInfo[3];
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
BoolInt x86cpuid_CheckAndRead(Cx86cpuid *p)
|
||||
{
|
||||
CHECK_CPUID_IS_SUPPORTED
|
||||
MyCPUID(0, &p->maxFunc, &p->vendor[0], &p->vendor[2], &p->vendor[1]);
|
||||
MyCPUID(1, &p->ver, &p->b, &p->c, &p->d);
|
||||
return True;
|
||||
}
|
||||
|
||||
static const UInt32 kVendors[][3] =
|
||||
{
|
||||
{ 0x756E6547, 0x49656E69, 0x6C65746E},
|
||||
{ 0x68747541, 0x69746E65, 0x444D4163},
|
||||
{ 0x746E6543, 0x48727561, 0x736C7561}
|
||||
};
|
||||
|
||||
int x86cpuid_GetFirm(const Cx86cpuid *p)
|
||||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < sizeof(kVendors) / sizeof(kVendors[i]); i++)
|
||||
{
|
||||
const UInt32 *v = kVendors[i];
|
||||
if (v[0] == p->vendor[0] &&
|
||||
v[1] == p->vendor[1] &&
|
||||
v[2] == p->vendor[2])
|
||||
return (int)i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
BoolInt CPU_Is_InOrder()
|
||||
{
|
||||
Cx86cpuid p;
|
||||
int firm;
|
||||
UInt32 family, model;
|
||||
if (!x86cpuid_CheckAndRead(&p))
|
||||
return True;
|
||||
|
||||
family = x86cpuid_GetFamily(p.ver);
|
||||
model = x86cpuid_GetModel(p.ver);
|
||||
|
||||
firm = x86cpuid_GetFirm(&p);
|
||||
|
||||
switch (firm)
|
||||
{
|
||||
case CPU_FIRM_INTEL: return (family < 6 || (family == 6 && (
|
||||
/* In-Order Atom CPU */
|
||||
model == 0x1C /* 45 nm, N4xx, D4xx, N5xx, D5xx, 230, 330 */
|
||||
|| model == 0x26 /* 45 nm, Z6xx */
|
||||
|| model == 0x27 /* 32 nm, Z2460 */
|
||||
|| model == 0x35 /* 32 nm, Z2760 */
|
||||
|| model == 0x36 /* 32 nm, N2xxx, D2xxx */
|
||||
)));
|
||||
case CPU_FIRM_AMD: return (family < 5 || (family == 5 && (model < 6 || model == 0xA)));
|
||||
case CPU_FIRM_VIA: return (family < 6 || (family == 6 && model < 0xF));
|
||||
}
|
||||
return True;
|
||||
}
|
||||
|
||||
#if !defined(MY_CPU_AMD64) && defined(_WIN32)
|
||||
#include <windows.h>
|
||||
static BoolInt CPU_Sys_Is_SSE_Supported()
|
||||
{
|
||||
OSVERSIONINFO vi;
|
||||
vi.dwOSVersionInfoSize = sizeof(vi);
|
||||
if (!GetVersionEx(&vi))
|
||||
return False;
|
||||
return (vi.dwMajorVersion >= 5);
|
||||
}
|
||||
#define CHECK_SYS_SSE_SUPPORT if (!CPU_Sys_Is_SSE_Supported()) return False;
|
||||
#else
|
||||
#define CHECK_SYS_SSE_SUPPORT
|
||||
#endif
|
||||
|
||||
BoolInt CPU_Is_Aes_Supported()
|
||||
{
|
||||
Cx86cpuid p;
|
||||
CHECK_SYS_SSE_SUPPORT
|
||||
if (!x86cpuid_CheckAndRead(&p))
|
||||
return False;
|
||||
return (p.c >> 25) & 1;
|
||||
}
|
||||
|
||||
BoolInt CPU_IsSupported_PageGB()
|
||||
{
|
||||
Cx86cpuid cpuid;
|
||||
if (!x86cpuid_CheckAndRead(&cpuid))
|
||||
return False;
|
||||
{
|
||||
UInt32 d[4] = { 0 };
|
||||
MyCPUID(0x80000000, &d[0], &d[1], &d[2], &d[3]);
|
||||
if (d[0] < 0x80000001)
|
||||
return False;
|
||||
}
|
||||
{
|
||||
UInt32 d[4] = { 0 };
|
||||
MyCPUID(0x80000001, &d[0], &d[1], &d[2], &d[3]);
|
||||
return (d[3] >> 26) & 1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
336
3rdparty/7z/CpuArch.h
vendored
336
3rdparty/7z/CpuArch.h
vendored
|
|
@ -1,336 +0,0 @@
|
|||
/* CpuArch.h -- CPU specific code
|
||||
2018-02-18 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __CPU_ARCH_H
|
||||
#define __CPU_ARCH_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
/*
|
||||
MY_CPU_LE means that CPU is LITTLE ENDIAN.
|
||||
MY_CPU_BE means that CPU is BIG ENDIAN.
|
||||
If MY_CPU_LE and MY_CPU_BE are not defined, we don't know about ENDIANNESS of platform.
|
||||
|
||||
MY_CPU_LE_UNALIGN means that CPU is LITTLE ENDIAN and CPU supports unaligned memory accesses.
|
||||
*/
|
||||
|
||||
#if defined(_M_X64) \
|
||||
|| defined(_M_AMD64) \
|
||||
|| defined(__x86_64__) \
|
||||
|| defined(__AMD64__) \
|
||||
|| defined(__amd64__)
|
||||
#define MY_CPU_AMD64
|
||||
#ifdef __ILP32__
|
||||
#define MY_CPU_NAME "x32"
|
||||
#else
|
||||
#define MY_CPU_NAME "x64"
|
||||
#endif
|
||||
#define MY_CPU_64BIT
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(_M_IX86) \
|
||||
|| defined(__i386__)
|
||||
#define MY_CPU_X86
|
||||
#define MY_CPU_NAME "x86"
|
||||
#define MY_CPU_32BIT
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(_M_ARM64) \
|
||||
|| defined(__AARCH64EL__) \
|
||||
|| defined(__AARCH64EB__) \
|
||||
|| defined(__aarch64__)
|
||||
#define MY_CPU_ARM64
|
||||
#define MY_CPU_NAME "arm64"
|
||||
#define MY_CPU_64BIT
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(_M_ARM) \
|
||||
|| defined(_M_ARM_NT) \
|
||||
|| defined(_M_ARMT) \
|
||||
|| defined(__arm__) \
|
||||
|| defined(__thumb__) \
|
||||
|| defined(__ARMEL__) \
|
||||
|| defined(__ARMEB__) \
|
||||
|| defined(__THUMBEL__) \
|
||||
|| defined(__THUMBEB__)
|
||||
#define MY_CPU_ARM
|
||||
#define MY_CPU_NAME "arm"
|
||||
#define MY_CPU_32BIT
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(_M_IA64) \
|
||||
|| defined(__ia64__)
|
||||
#define MY_CPU_IA64
|
||||
#define MY_CPU_NAME "ia64"
|
||||
#define MY_CPU_64BIT
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__mips64) \
|
||||
|| defined(__mips64__) \
|
||||
|| (defined(__mips) && (__mips == 64 || __mips == 4 || __mips == 3))
|
||||
#define MY_CPU_NAME "mips64"
|
||||
#define MY_CPU_64BIT
|
||||
#elif defined(__mips__)
|
||||
#define MY_CPU_NAME "mips"
|
||||
/* #define MY_CPU_32BIT */
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__ppc64__) \
|
||||
|| defined(__powerpc64__)
|
||||
#ifdef __ILP32__
|
||||
#define MY_CPU_NAME "ppc64-32"
|
||||
#else
|
||||
#define MY_CPU_NAME "ppc64"
|
||||
#endif
|
||||
#define MY_CPU_64BIT
|
||||
#elif defined(__ppc__) \
|
||||
|| defined(__powerpc__)
|
||||
#define MY_CPU_NAME "ppc"
|
||||
#define MY_CPU_32BIT
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__sparc64__)
|
||||
#define MY_CPU_NAME "sparc64"
|
||||
#define MY_CPU_64BIT
|
||||
#elif defined(__sparc__)
|
||||
#define MY_CPU_NAME "sparc"
|
||||
/* #define MY_CPU_32BIT */
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(MY_CPU_X86) || defined(MY_CPU_AMD64)
|
||||
#define MY_CPU_X86_OR_AMD64
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#ifdef MY_CPU_ARM
|
||||
#define MY_CPU_ARM_LE
|
||||
#endif
|
||||
|
||||
#ifdef MY_CPU_ARM64
|
||||
#define MY_CPU_ARM64_LE
|
||||
#endif
|
||||
|
||||
#ifdef _M_IA64
|
||||
#define MY_CPU_IA64_LE
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(MY_CPU_X86_OR_AMD64) \
|
||||
|| defined(MY_CPU_ARM_LE) \
|
||||
|| defined(MY_CPU_ARM64_LE) \
|
||||
|| defined(MY_CPU_IA64_LE) \
|
||||
|| defined(__LITTLE_ENDIAN__) \
|
||||
|| defined(__ARMEL__) \
|
||||
|| defined(__THUMBEL__) \
|
||||
|| defined(__AARCH64EL__) \
|
||||
|| defined(__MIPSEL__) \
|
||||
|| defined(__MIPSEL) \
|
||||
|| defined(_MIPSEL) \
|
||||
|| defined(__BFIN__) \
|
||||
|| (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
|
||||
#define MY_CPU_LE
|
||||
#endif
|
||||
|
||||
#if defined(__BIG_ENDIAN__) \
|
||||
|| defined(__ARMEB__) \
|
||||
|| defined(__THUMBEB__) \
|
||||
|| defined(__AARCH64EB__) \
|
||||
|| defined(__MIPSEB__) \
|
||||
|| defined(__MIPSEB) \
|
||||
|| defined(_MIPSEB) \
|
||||
|| defined(__m68k__) \
|
||||
|| defined(__s390__) \
|
||||
|| defined(__s390x__) \
|
||||
|| defined(__zarch__) \
|
||||
|| (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__))
|
||||
#define MY_CPU_BE
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(MY_CPU_LE) && defined(MY_CPU_BE)
|
||||
#error Stop_Compiling_Bad_Endian
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(MY_CPU_32BIT) && defined(MY_CPU_64BIT)
|
||||
#error Stop_Compiling_Bad_32_64_BIT
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef MY_CPU_NAME
|
||||
#ifdef MY_CPU_LE
|
||||
#define MY_CPU_NAME "LE"
|
||||
#elif defined(MY_CPU_BE)
|
||||
#define MY_CPU_NAME "BE"
|
||||
#else
|
||||
/*
|
||||
#define MY_CPU_NAME ""
|
||||
*/
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef MY_CPU_LE
|
||||
#if defined(MY_CPU_X86_OR_AMD64) \
|
||||
|| defined(MY_CPU_ARM64) \
|
||||
|| defined(__ARM_FEATURE_UNALIGNED)
|
||||
#define MY_CPU_LE_UNALIGN
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef MY_CPU_LE_UNALIGN
|
||||
|
||||
#define GetUi16(p) (*(const UInt16 *)(const void *)(p))
|
||||
#define GetUi32(p) (*(const UInt32 *)(const void *)(p))
|
||||
#define GetUi64(p) (*(const UInt64 *)(const void *)(p))
|
||||
|
||||
#define SetUi16(p, v) { *(UInt16 *)(p) = (v); }
|
||||
#define SetUi32(p, v) { *(UInt32 *)(p) = (v); }
|
||||
#define SetUi64(p, v) { *(UInt64 *)(p) = (v); }
|
||||
|
||||
#else
|
||||
|
||||
#define GetUi16(p) ( (UInt16) ( \
|
||||
((const Byte *)(p))[0] | \
|
||||
((UInt16)((const Byte *)(p))[1] << 8) ))
|
||||
|
||||
#define GetUi32(p) ( \
|
||||
((const Byte *)(p))[0] | \
|
||||
((UInt32)((const Byte *)(p))[1] << 8) | \
|
||||
((UInt32)((const Byte *)(p))[2] << 16) | \
|
||||
((UInt32)((const Byte *)(p))[3] << 24))
|
||||
|
||||
#define GetUi64(p) (GetUi32(p) | ((UInt64)GetUi32(((const Byte *)(p)) + 4) << 32))
|
||||
|
||||
#define SetUi16(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
|
||||
_ppp_[0] = (Byte)_vvv_; \
|
||||
_ppp_[1] = (Byte)(_vvv_ >> 8); }
|
||||
|
||||
#define SetUi32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
|
||||
_ppp_[0] = (Byte)_vvv_; \
|
||||
_ppp_[1] = (Byte)(_vvv_ >> 8); \
|
||||
_ppp_[2] = (Byte)(_vvv_ >> 16); \
|
||||
_ppp_[3] = (Byte)(_vvv_ >> 24); }
|
||||
|
||||
#define SetUi64(p, v) { Byte *_ppp2_ = (Byte *)(p); UInt64 _vvv2_ = (v); \
|
||||
SetUi32(_ppp2_ , (UInt32)_vvv2_); \
|
||||
SetUi32(_ppp2_ + 4, (UInt32)(_vvv2_ >> 32)); }
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __has_builtin
|
||||
#define MY__has_builtin(x) __has_builtin(x)
|
||||
#else
|
||||
#define MY__has_builtin(x) 0
|
||||
#endif
|
||||
|
||||
#if defined(MY_CPU_LE_UNALIGN) && /* defined(_WIN64) && */ (_MSC_VER >= 1300)
|
||||
|
||||
/* Note: we use bswap instruction, that is unsupported in 386 cpu */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#pragma intrinsic(_byteswap_ushort)
|
||||
#pragma intrinsic(_byteswap_ulong)
|
||||
#pragma intrinsic(_byteswap_uint64)
|
||||
|
||||
/* #define GetBe16(p) _byteswap_ushort(*(const UInt16 *)(const Byte *)(p)) */
|
||||
#define GetBe32(p) _byteswap_ulong(*(const UInt32 *)(const Byte *)(p))
|
||||
#define GetBe64(p) _byteswap_uint64(*(const UInt64 *)(const Byte *)(p))
|
||||
|
||||
#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = _byteswap_ulong(v)
|
||||
|
||||
#elif defined(MY_CPU_LE_UNALIGN) && ( \
|
||||
(defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) \
|
||||
|| (defined(__clang__) && MY__has_builtin(__builtin_bswap16)) )
|
||||
|
||||
/* #define GetBe16(p) __builtin_bswap16(*(const UInt16 *)(const Byte *)(p)) */
|
||||
#define GetBe32(p) __builtin_bswap32(*(const UInt32 *)(const Byte *)(p))
|
||||
#define GetBe64(p) __builtin_bswap64(*(const UInt64 *)(const Byte *)(p))
|
||||
|
||||
#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = __builtin_bswap32(v)
|
||||
|
||||
#else
|
||||
|
||||
#define GetBe32(p) ( \
|
||||
((UInt32)((const Byte *)(p))[0] << 24) | \
|
||||
((UInt32)((const Byte *)(p))[1] << 16) | \
|
||||
((UInt32)((const Byte *)(p))[2] << 8) | \
|
||||
((const Byte *)(p))[3] )
|
||||
|
||||
#define GetBe64(p) (((UInt64)GetBe32(p) << 32) | GetBe32(((const Byte *)(p)) + 4))
|
||||
|
||||
#define SetBe32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
|
||||
_ppp_[0] = (Byte)(_vvv_ >> 24); \
|
||||
_ppp_[1] = (Byte)(_vvv_ >> 16); \
|
||||
_ppp_[2] = (Byte)(_vvv_ >> 8); \
|
||||
_ppp_[3] = (Byte)_vvv_; }
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef GetBe16
|
||||
|
||||
#define GetBe16(p) ( (UInt16) ( \
|
||||
((UInt16)((const Byte *)(p))[0] << 8) | \
|
||||
((const Byte *)(p))[1] ))
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifdef MY_CPU_X86_OR_AMD64
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UInt32 maxFunc;
|
||||
UInt32 vendor[3];
|
||||
UInt32 ver;
|
||||
UInt32 b;
|
||||
UInt32 c;
|
||||
UInt32 d;
|
||||
} Cx86cpuid;
|
||||
|
||||
enum
|
||||
{
|
||||
CPU_FIRM_INTEL,
|
||||
CPU_FIRM_AMD,
|
||||
CPU_FIRM_VIA
|
||||
};
|
||||
|
||||
void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d);
|
||||
|
||||
BoolInt x86cpuid_CheckAndRead(Cx86cpuid *p);
|
||||
int x86cpuid_GetFirm(const Cx86cpuid *p);
|
||||
|
||||
#define x86cpuid_GetFamily(ver) (((ver >> 16) & 0xFF0) | ((ver >> 8) & 0xF))
|
||||
#define x86cpuid_GetModel(ver) (((ver >> 12) & 0xF0) | ((ver >> 4) & 0xF))
|
||||
#define x86cpuid_GetStepping(ver) (ver & 0xF)
|
||||
|
||||
BoolInt CPU_Is_InOrder();
|
||||
BoolInt CPU_Is_Aes_Supported();
|
||||
BoolInt CPU_IsSupported_PageGB();
|
||||
|
||||
#endif
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
64
3rdparty/7z/Delta.c
vendored
64
3rdparty/7z/Delta.c
vendored
|
|
@ -1,64 +0,0 @@
|
|||
/* Delta.c -- Delta converter
|
||||
2009-05-26 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "Delta.h"
|
||||
|
||||
void Delta_Init(Byte *state)
|
||||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < DELTA_STATE_SIZE; i++)
|
||||
state[i] = 0;
|
||||
}
|
||||
|
||||
static void MyMemCpy(Byte *dest, const Byte *src, unsigned size)
|
||||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < size; i++)
|
||||
dest[i] = src[i];
|
||||
}
|
||||
|
||||
void Delta_Encode(Byte *state, unsigned delta, Byte *data, SizeT size)
|
||||
{
|
||||
Byte buf[DELTA_STATE_SIZE];
|
||||
unsigned j = 0;
|
||||
MyMemCpy(buf, state, delta);
|
||||
{
|
||||
SizeT i;
|
||||
for (i = 0; i < size;)
|
||||
{
|
||||
for (j = 0; j < delta && i < size; i++, j++)
|
||||
{
|
||||
Byte b = data[i];
|
||||
data[i] = (Byte)(b - buf[j]);
|
||||
buf[j] = b;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (j == delta)
|
||||
j = 0;
|
||||
MyMemCpy(state, buf + j, delta - j);
|
||||
MyMemCpy(state + delta - j, buf, j);
|
||||
}
|
||||
|
||||
void Delta_Decode(Byte *state, unsigned delta, Byte *data, SizeT size)
|
||||
{
|
||||
Byte buf[DELTA_STATE_SIZE];
|
||||
unsigned j = 0;
|
||||
MyMemCpy(buf, state, delta);
|
||||
{
|
||||
SizeT i;
|
||||
for (i = 0; i < size;)
|
||||
{
|
||||
for (j = 0; j < delta && i < size; i++, j++)
|
||||
{
|
||||
buf[j] = data[i] = (Byte)(buf[j] + data[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (j == delta)
|
||||
j = 0;
|
||||
MyMemCpy(state, buf + j, delta - j);
|
||||
MyMemCpy(state + delta - j, buf, j);
|
||||
}
|
||||
19
3rdparty/7z/Delta.h
vendored
19
3rdparty/7z/Delta.h
vendored
|
|
@ -1,19 +0,0 @@
|
|||
/* Delta.h -- Delta converter
|
||||
2013-01-18 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __DELTA_H
|
||||
#define __DELTA_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
#define DELTA_STATE_SIZE 256
|
||||
|
||||
void Delta_Init(Byte *state);
|
||||
void Delta_Encode(Byte *state, unsigned delta, Byte *data, SizeT size);
|
||||
void Delta_Decode(Byte *state, unsigned delta, Byte *data, SizeT size);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
108
3rdparty/7z/DllSecur.c
vendored
108
3rdparty/7z/DllSecur.c
vendored
|
|
@ -1,108 +0,0 @@
|
|||
/* DllSecur.c -- DLL loading security
|
||||
2018-02-21 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include "DllSecur.h"
|
||||
|
||||
#ifndef UNDER_CE
|
||||
|
||||
typedef BOOL (WINAPI *Func_SetDefaultDllDirectories)(DWORD DirectoryFlags);
|
||||
|
||||
#define MY_LOAD_LIBRARY_SEARCH_USER_DIRS 0x400
|
||||
#define MY_LOAD_LIBRARY_SEARCH_SYSTEM32 0x800
|
||||
|
||||
static const char * const g_Dlls =
|
||||
#ifndef _CONSOLE
|
||||
"UXTHEME\0"
|
||||
#endif
|
||||
"USERENV\0"
|
||||
"SETUPAPI\0"
|
||||
"APPHELP\0"
|
||||
"PROPSYS\0"
|
||||
"DWMAPI\0"
|
||||
"CRYPTBASE\0"
|
||||
"OLEACC\0"
|
||||
"CLBCATQ\0"
|
||||
"VERSION\0"
|
||||
;
|
||||
|
||||
#endif
|
||||
|
||||
void My_SetDefaultDllDirectories()
|
||||
{
|
||||
#ifndef UNDER_CE
|
||||
|
||||
OSVERSIONINFO vi;
|
||||
vi.dwOSVersionInfoSize = sizeof(vi);
|
||||
GetVersionEx(&vi);
|
||||
if (!GetVersionEx(&vi) || vi.dwMajorVersion != 6 || vi.dwMinorVersion != 0)
|
||||
{
|
||||
Func_SetDefaultDllDirectories setDllDirs = (Func_SetDefaultDllDirectories)
|
||||
GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "SetDefaultDllDirectories");
|
||||
if (setDllDirs)
|
||||
if (setDllDirs(MY_LOAD_LIBRARY_SEARCH_SYSTEM32 | MY_LOAD_LIBRARY_SEARCH_USER_DIRS))
|
||||
return;
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void LoadSecurityDlls()
|
||||
{
|
||||
#ifndef UNDER_CE
|
||||
|
||||
wchar_t buf[MAX_PATH + 100];
|
||||
|
||||
{
|
||||
// at Vista (ver 6.0) : CoCreateInstance(CLSID_ShellLink, ...) doesn't work after SetDefaultDllDirectories() : Check it ???
|
||||
OSVERSIONINFO vi;
|
||||
vi.dwOSVersionInfoSize = sizeof(vi);
|
||||
if (!GetVersionEx(&vi) || vi.dwMajorVersion != 6 || vi.dwMinorVersion != 0)
|
||||
{
|
||||
Func_SetDefaultDllDirectories setDllDirs = (Func_SetDefaultDllDirectories)
|
||||
GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "SetDefaultDllDirectories");
|
||||
if (setDllDirs)
|
||||
if (setDllDirs(MY_LOAD_LIBRARY_SEARCH_SYSTEM32 | MY_LOAD_LIBRARY_SEARCH_USER_DIRS))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
unsigned len = GetSystemDirectoryW(buf, MAX_PATH + 2);
|
||||
if (len == 0 || len > MAX_PATH)
|
||||
return;
|
||||
}
|
||||
{
|
||||
const char *dll;
|
||||
unsigned pos = (unsigned)lstrlenW(buf);
|
||||
|
||||
if (buf[pos - 1] != '\\')
|
||||
buf[pos++] = '\\';
|
||||
|
||||
for (dll = g_Dlls; dll[0] != 0;)
|
||||
{
|
||||
unsigned k = 0;
|
||||
for (;;)
|
||||
{
|
||||
char c = *dll++;
|
||||
buf[pos + k] = (Byte)c;
|
||||
k++;
|
||||
if (c == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
lstrcatW(buf, L".dll");
|
||||
LoadLibraryExW(buf, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
20
3rdparty/7z/DllSecur.h
vendored
20
3rdparty/7z/DllSecur.h
vendored
|
|
@ -1,20 +0,0 @@
|
|||
/* DllSecur.h -- DLL loading for security
|
||||
2018-02-19 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __DLL_SECUR_H
|
||||
#define __DLL_SECUR_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
void My_SetDefaultDllDirectories();
|
||||
void LoadSecurityDlls();
|
||||
|
||||
#endif
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
1127
3rdparty/7z/LzFind.c
vendored
1127
3rdparty/7z/LzFind.c
vendored
File diff suppressed because it is too large
Load diff
121
3rdparty/7z/LzFind.h
vendored
121
3rdparty/7z/LzFind.h
vendored
|
|
@ -1,121 +0,0 @@
|
|||
/* LzFind.h -- Match finder for LZ algorithms
|
||||
2017-06-10 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __LZ_FIND_H
|
||||
#define __LZ_FIND_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
typedef UInt32 CLzRef;
|
||||
|
||||
typedef struct _CMatchFinder
|
||||
{
|
||||
Byte *buffer;
|
||||
UInt32 pos;
|
||||
UInt32 posLimit;
|
||||
UInt32 streamPos;
|
||||
UInt32 lenLimit;
|
||||
|
||||
UInt32 cyclicBufferPos;
|
||||
UInt32 cyclicBufferSize; /* it must be = (historySize + 1) */
|
||||
|
||||
Byte streamEndWasReached;
|
||||
Byte btMode;
|
||||
Byte bigHash;
|
||||
Byte directInput;
|
||||
|
||||
UInt32 matchMaxLen;
|
||||
CLzRef *hash;
|
||||
CLzRef *son;
|
||||
UInt32 hashMask;
|
||||
UInt32 cutValue;
|
||||
|
||||
Byte *bufferBase;
|
||||
ISeqInStream *stream;
|
||||
|
||||
UInt32 blockSize;
|
||||
UInt32 keepSizeBefore;
|
||||
UInt32 keepSizeAfter;
|
||||
|
||||
UInt32 numHashBytes;
|
||||
size_t directInputRem;
|
||||
UInt32 historySize;
|
||||
UInt32 fixedHashSize;
|
||||
UInt32 hashSizeSum;
|
||||
SRes result;
|
||||
UInt32 crc[256];
|
||||
size_t numRefs;
|
||||
|
||||
UInt64 expectedDataSize;
|
||||
} CMatchFinder;
|
||||
|
||||
#define Inline_MatchFinder_GetPointerToCurrentPos(p) ((p)->buffer)
|
||||
|
||||
#define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos)
|
||||
|
||||
#define Inline_MatchFinder_IsFinishedOK(p) \
|
||||
((p)->streamEndWasReached \
|
||||
&& (p)->streamPos == (p)->pos \
|
||||
&& (!(p)->directInput || (p)->directInputRem == 0))
|
||||
|
||||
int MatchFinder_NeedMove(CMatchFinder *p);
|
||||
Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p);
|
||||
void MatchFinder_MoveBlock(CMatchFinder *p);
|
||||
void MatchFinder_ReadIfRequired(CMatchFinder *p);
|
||||
|
||||
void MatchFinder_Construct(CMatchFinder *p);
|
||||
|
||||
/* Conditions:
|
||||
historySize <= 3 GB
|
||||
keepAddBufferBefore + matchMaxLen + keepAddBufferAfter < 511MB
|
||||
*/
|
||||
int MatchFinder_Create(CMatchFinder *p, UInt32 historySize,
|
||||
UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter,
|
||||
ISzAllocPtr alloc);
|
||||
void MatchFinder_Free(CMatchFinder *p, ISzAllocPtr alloc);
|
||||
void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, size_t numItems);
|
||||
void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue);
|
||||
|
||||
UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *buffer, CLzRef *son,
|
||||
UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue,
|
||||
UInt32 *distances, UInt32 maxLen);
|
||||
|
||||
/*
|
||||
Conditions:
|
||||
Mf_GetNumAvailableBytes_Func must be called before each Mf_GetMatchLen_Func.
|
||||
Mf_GetPointerToCurrentPos_Func's result must be used only before any other function
|
||||
*/
|
||||
|
||||
typedef void (*Mf_Init_Func)(void *object);
|
||||
typedef UInt32 (*Mf_GetNumAvailableBytes_Func)(void *object);
|
||||
typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(void *object);
|
||||
typedef UInt32 (*Mf_GetMatches_Func)(void *object, UInt32 *distances);
|
||||
typedef void (*Mf_Skip_Func)(void *object, UInt32);
|
||||
|
||||
typedef struct _IMatchFinder
|
||||
{
|
||||
Mf_Init_Func Init;
|
||||
Mf_GetNumAvailableBytes_Func GetNumAvailableBytes;
|
||||
Mf_GetPointerToCurrentPos_Func GetPointerToCurrentPos;
|
||||
Mf_GetMatches_Func GetMatches;
|
||||
Mf_Skip_Func Skip;
|
||||
} IMatchFinder;
|
||||
|
||||
void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable);
|
||||
|
||||
void MatchFinder_Init_LowHash(CMatchFinder *p);
|
||||
void MatchFinder_Init_HighHash(CMatchFinder *p);
|
||||
void MatchFinder_Init_3(CMatchFinder *p, int readData);
|
||||
void MatchFinder_Init(CMatchFinder *p);
|
||||
|
||||
UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
|
||||
UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
|
||||
|
||||
void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
|
||||
void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
853
3rdparty/7z/LzFindMt.c
vendored
853
3rdparty/7z/LzFindMt.c
vendored
|
|
@ -1,853 +0,0 @@
|
|||
/* LzFindMt.c -- multithreaded Match finder for LZ algorithms
|
||||
2018-12-29 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "LzHash.h"
|
||||
|
||||
#include "LzFindMt.h"
|
||||
|
||||
static void MtSync_Construct(CMtSync *p)
|
||||
{
|
||||
p->wasCreated = False;
|
||||
p->csWasInitialized = False;
|
||||
p->csWasEntered = False;
|
||||
Thread_Construct(&p->thread);
|
||||
Event_Construct(&p->canStart);
|
||||
Event_Construct(&p->wasStarted);
|
||||
Event_Construct(&p->wasStopped);
|
||||
Semaphore_Construct(&p->freeSemaphore);
|
||||
Semaphore_Construct(&p->filledSemaphore);
|
||||
}
|
||||
|
||||
static void MtSync_GetNextBlock(CMtSync *p)
|
||||
{
|
||||
if (p->needStart)
|
||||
{
|
||||
p->numProcessedBlocks = 1;
|
||||
p->needStart = False;
|
||||
p->stopWriting = False;
|
||||
p->exit = False;
|
||||
Event_Reset(&p->wasStarted);
|
||||
Event_Reset(&p->wasStopped);
|
||||
|
||||
Event_Set(&p->canStart);
|
||||
Event_Wait(&p->wasStarted);
|
||||
|
||||
// if (mt) MatchFinder_Init_LowHash(mt->MatchFinder);
|
||||
}
|
||||
else
|
||||
{
|
||||
CriticalSection_Leave(&p->cs);
|
||||
p->csWasEntered = False;
|
||||
p->numProcessedBlocks++;
|
||||
Semaphore_Release1(&p->freeSemaphore);
|
||||
}
|
||||
Semaphore_Wait(&p->filledSemaphore);
|
||||
CriticalSection_Enter(&p->cs);
|
||||
p->csWasEntered = True;
|
||||
}
|
||||
|
||||
/* MtSync_StopWriting must be called if Writing was started */
|
||||
|
||||
static void MtSync_StopWriting(CMtSync *p)
|
||||
{
|
||||
UInt32 myNumBlocks = p->numProcessedBlocks;
|
||||
if (!Thread_WasCreated(&p->thread) || p->needStart)
|
||||
return;
|
||||
p->stopWriting = True;
|
||||
if (p->csWasEntered)
|
||||
{
|
||||
CriticalSection_Leave(&p->cs);
|
||||
p->csWasEntered = False;
|
||||
}
|
||||
Semaphore_Release1(&p->freeSemaphore);
|
||||
|
||||
Event_Wait(&p->wasStopped);
|
||||
|
||||
while (myNumBlocks++ != p->numProcessedBlocks)
|
||||
{
|
||||
Semaphore_Wait(&p->filledSemaphore);
|
||||
Semaphore_Release1(&p->freeSemaphore);
|
||||
}
|
||||
p->needStart = True;
|
||||
}
|
||||
|
||||
static void MtSync_Destruct(CMtSync *p)
|
||||
{
|
||||
if (Thread_WasCreated(&p->thread))
|
||||
{
|
||||
MtSync_StopWriting(p);
|
||||
p->exit = True;
|
||||
if (p->needStart)
|
||||
Event_Set(&p->canStart);
|
||||
Thread_Wait(&p->thread);
|
||||
Thread_Close(&p->thread);
|
||||
}
|
||||
if (p->csWasInitialized)
|
||||
{
|
||||
CriticalSection_Delete(&p->cs);
|
||||
p->csWasInitialized = False;
|
||||
}
|
||||
|
||||
Event_Close(&p->canStart);
|
||||
Event_Close(&p->wasStarted);
|
||||
Event_Close(&p->wasStopped);
|
||||
Semaphore_Close(&p->freeSemaphore);
|
||||
Semaphore_Close(&p->filledSemaphore);
|
||||
|
||||
p->wasCreated = False;
|
||||
}
|
||||
|
||||
#define RINOK_THREAD(x) { if ((x) != 0) return SZ_ERROR_THREAD; }
|
||||
|
||||
static SRes MtSync_Create2(CMtSync *p, THREAD_FUNC_TYPE startAddress, void *obj, UInt32 numBlocks)
|
||||
{
|
||||
if (p->wasCreated)
|
||||
return SZ_OK;
|
||||
|
||||
RINOK_THREAD(CriticalSection_Init(&p->cs));
|
||||
p->csWasInitialized = True;
|
||||
|
||||
RINOK_THREAD(AutoResetEvent_CreateNotSignaled(&p->canStart));
|
||||
RINOK_THREAD(AutoResetEvent_CreateNotSignaled(&p->wasStarted));
|
||||
RINOK_THREAD(AutoResetEvent_CreateNotSignaled(&p->wasStopped));
|
||||
|
||||
RINOK_THREAD(Semaphore_Create(&p->freeSemaphore, numBlocks, numBlocks));
|
||||
RINOK_THREAD(Semaphore_Create(&p->filledSemaphore, 0, numBlocks));
|
||||
|
||||
p->needStart = True;
|
||||
|
||||
RINOK_THREAD(Thread_Create(&p->thread, startAddress, obj));
|
||||
p->wasCreated = True;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
static SRes MtSync_Create(CMtSync *p, THREAD_FUNC_TYPE startAddress, void *obj, UInt32 numBlocks)
|
||||
{
|
||||
SRes res = MtSync_Create2(p, startAddress, obj, numBlocks);
|
||||
if (res != SZ_OK)
|
||||
MtSync_Destruct(p);
|
||||
return res;
|
||||
}
|
||||
|
||||
void MtSync_Init(CMtSync *p) { p->needStart = True; }
|
||||
|
||||
#define kMtMaxValForNormalize 0xFFFFFFFF
|
||||
|
||||
#define DEF_GetHeads2(name, v, action) \
|
||||
static void GetHeads ## name(const Byte *p, UInt32 pos, \
|
||||
UInt32 *hash, UInt32 hashMask, UInt32 *heads, UInt32 numHeads, const UInt32 *crc) \
|
||||
{ action; for (; numHeads != 0; numHeads--) { \
|
||||
const UInt32 value = (v); p++; *heads++ = pos - hash[value]; hash[value] = pos++; } }
|
||||
|
||||
#define DEF_GetHeads(name, v) DEF_GetHeads2(name, v, ;)
|
||||
|
||||
DEF_GetHeads2(2, (p[0] | ((UInt32)p[1] << 8)), UNUSED_VAR(hashMask); UNUSED_VAR(crc); )
|
||||
DEF_GetHeads(3, (crc[p[0]] ^ p[1] ^ ((UInt32)p[2] << 8)) & hashMask)
|
||||
DEF_GetHeads(4, (crc[p[0]] ^ p[1] ^ ((UInt32)p[2] << 8) ^ (crc[p[3]] << 5)) & hashMask)
|
||||
DEF_GetHeads(4b, (crc[p[0]] ^ p[1] ^ ((UInt32)p[2] << 8) ^ ((UInt32)p[3] << 16)) & hashMask)
|
||||
/* DEF_GetHeads(5, (crc[p[0]] ^ p[1] ^ ((UInt32)p[2] << 8) ^ (crc[p[3]] << 5) ^ (crc[p[4]] << 3)) & hashMask) */
|
||||
|
||||
static void HashThreadFunc(CMatchFinderMt *mt)
|
||||
{
|
||||
CMtSync *p = &mt->hashSync;
|
||||
for (;;)
|
||||
{
|
||||
UInt32 numProcessedBlocks = 0;
|
||||
Event_Wait(&p->canStart);
|
||||
Event_Set(&p->wasStarted);
|
||||
|
||||
MatchFinder_Init_HighHash(mt->MatchFinder);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (p->exit)
|
||||
return;
|
||||
if (p->stopWriting)
|
||||
{
|
||||
p->numProcessedBlocks = numProcessedBlocks;
|
||||
Event_Set(&p->wasStopped);
|
||||
break;
|
||||
}
|
||||
|
||||
{
|
||||
CMatchFinder *mf = mt->MatchFinder;
|
||||
if (MatchFinder_NeedMove(mf))
|
||||
{
|
||||
CriticalSection_Enter(&mt->btSync.cs);
|
||||
CriticalSection_Enter(&mt->hashSync.cs);
|
||||
{
|
||||
const Byte *beforePtr = Inline_MatchFinder_GetPointerToCurrentPos(mf);
|
||||
ptrdiff_t offset;
|
||||
MatchFinder_MoveBlock(mf);
|
||||
offset = beforePtr - Inline_MatchFinder_GetPointerToCurrentPos(mf);
|
||||
mt->pointerToCurPos -= offset;
|
||||
mt->buffer -= offset;
|
||||
}
|
||||
CriticalSection_Leave(&mt->btSync.cs);
|
||||
CriticalSection_Leave(&mt->hashSync.cs);
|
||||
continue;
|
||||
}
|
||||
|
||||
Semaphore_Wait(&p->freeSemaphore);
|
||||
|
||||
MatchFinder_ReadIfRequired(mf);
|
||||
if (mf->pos > (kMtMaxValForNormalize - kMtHashBlockSize))
|
||||
{
|
||||
UInt32 subValue = (mf->pos - mf->historySize - 1);
|
||||
MatchFinder_ReduceOffsets(mf, subValue);
|
||||
MatchFinder_Normalize3(subValue, mf->hash + mf->fixedHashSize, (size_t)mf->hashMask + 1);
|
||||
}
|
||||
{
|
||||
UInt32 *heads = mt->hashBuf + ((numProcessedBlocks++) & kMtHashNumBlocksMask) * kMtHashBlockSize;
|
||||
UInt32 num = mf->streamPos - mf->pos;
|
||||
heads[0] = 2;
|
||||
heads[1] = num;
|
||||
if (num >= mf->numHashBytes)
|
||||
{
|
||||
num = num - mf->numHashBytes + 1;
|
||||
if (num > kMtHashBlockSize - 2)
|
||||
num = kMtHashBlockSize - 2;
|
||||
mt->GetHeadsFunc(mf->buffer, mf->pos, mf->hash + mf->fixedHashSize, mf->hashMask, heads + 2, num, mf->crc);
|
||||
heads[0] = 2 + num;
|
||||
}
|
||||
mf->pos += num;
|
||||
mf->buffer += num;
|
||||
}
|
||||
}
|
||||
|
||||
Semaphore_Release1(&p->filledSemaphore);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void MatchFinderMt_GetNextBlock_Hash(CMatchFinderMt *p)
|
||||
{
|
||||
MtSync_GetNextBlock(&p->hashSync);
|
||||
p->hashBufPosLimit = p->hashBufPos = ((p->hashSync.numProcessedBlocks - 1) & kMtHashNumBlocksMask) * kMtHashBlockSize;
|
||||
p->hashBufPosLimit += p->hashBuf[p->hashBufPos++];
|
||||
p->hashNumAvail = p->hashBuf[p->hashBufPos++];
|
||||
}
|
||||
|
||||
#define kEmptyHashValue 0
|
||||
|
||||
#define MFMT_GM_INLINE
|
||||
|
||||
#ifdef MFMT_GM_INLINE
|
||||
|
||||
/*
|
||||
we use size_t for _cyclicBufferPos instead of UInt32
|
||||
to eliminate "movsx" BUG in old MSVC x64 compiler.
|
||||
*/
|
||||
|
||||
MY_NO_INLINE
|
||||
static UInt32 *GetMatchesSpecN(UInt32 lenLimit, UInt32 pos, const Byte *cur, CLzRef *son,
|
||||
size_t _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue,
|
||||
UInt32 *distances, UInt32 _maxLen, const UInt32 *hash, const UInt32 *limit, UInt32 size, UInt32 *posRes)
|
||||
{
|
||||
do
|
||||
{
|
||||
UInt32 *_distances = ++distances;
|
||||
UInt32 delta = *hash++;
|
||||
|
||||
CLzRef *ptr0 = son + ((size_t)_cyclicBufferPos << 1) + 1;
|
||||
CLzRef *ptr1 = son + ((size_t)_cyclicBufferPos << 1);
|
||||
unsigned len0 = 0, len1 = 0;
|
||||
UInt32 cutValue = _cutValue;
|
||||
unsigned maxLen = (unsigned)_maxLen;
|
||||
|
||||
/*
|
||||
if (size > 1)
|
||||
{
|
||||
UInt32 delta = *hash;
|
||||
if (delta < _cyclicBufferSize)
|
||||
{
|
||||
UInt32 cyc1 = _cyclicBufferPos + 1;
|
||||
CLzRef *pair = son + ((size_t)(cyc1 - delta + ((delta > cyc1) ? _cyclicBufferSize : 0)) << 1);
|
||||
Byte b = *(cur + 1 - delta);
|
||||
_distances[0] = pair[0];
|
||||
_distances[1] = b;
|
||||
}
|
||||
}
|
||||
*/
|
||||
if (cutValue == 0 || delta >= _cyclicBufferSize)
|
||||
{
|
||||
*ptr0 = *ptr1 = kEmptyHashValue;
|
||||
}
|
||||
else
|
||||
for(;;)
|
||||
{
|
||||
{
|
||||
CLzRef *pair = son + ((size_t)(_cyclicBufferPos - delta + ((_cyclicBufferPos < delta) ? _cyclicBufferSize : 0)) << 1);
|
||||
const Byte *pb = cur - delta;
|
||||
unsigned len = (len0 < len1 ? len0 : len1);
|
||||
UInt32 pair0 = *pair;
|
||||
if (pb[len] == cur[len])
|
||||
{
|
||||
if (++len != lenLimit && pb[len] == cur[len])
|
||||
while (++len != lenLimit)
|
||||
if (pb[len] != cur[len])
|
||||
break;
|
||||
if (maxLen < len)
|
||||
{
|
||||
maxLen = len;
|
||||
*distances++ = (UInt32)len;
|
||||
*distances++ = delta - 1;
|
||||
if (len == lenLimit)
|
||||
{
|
||||
UInt32 pair1 = pair[1];
|
||||
*ptr1 = pair0;
|
||||
*ptr0 = pair1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
UInt32 curMatch = pos - delta;
|
||||
// delta = pos - *pair;
|
||||
// delta = pos - pair[((UInt32)pb[len] - (UInt32)cur[len]) >> 31];
|
||||
if (pb[len] < cur[len])
|
||||
{
|
||||
delta = pos - pair[1];
|
||||
*ptr1 = curMatch;
|
||||
ptr1 = pair + 1;
|
||||
len1 = len;
|
||||
}
|
||||
else
|
||||
{
|
||||
delta = pos - *pair;
|
||||
*ptr0 = curMatch;
|
||||
ptr0 = pair;
|
||||
len0 = len;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (--cutValue == 0 || delta >= _cyclicBufferSize)
|
||||
{
|
||||
*ptr0 = *ptr1 = kEmptyHashValue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
pos++;
|
||||
_cyclicBufferPos++;
|
||||
cur++;
|
||||
{
|
||||
UInt32 num = (UInt32)(distances - _distances);
|
||||
_distances[-1] = num;
|
||||
}
|
||||
}
|
||||
while (distances < limit && --size != 0);
|
||||
*posRes = pos;
|
||||
return distances;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
static void BtGetMatches(CMatchFinderMt *p, UInt32 *distances)
|
||||
{
|
||||
UInt32 numProcessed = 0;
|
||||
UInt32 curPos = 2;
|
||||
UInt32 limit = kMtBtBlockSize - (p->matchMaxLen * 2); // * 2
|
||||
|
||||
distances[1] = p->hashNumAvail;
|
||||
|
||||
while (curPos < limit)
|
||||
{
|
||||
if (p->hashBufPos == p->hashBufPosLimit)
|
||||
{
|
||||
MatchFinderMt_GetNextBlock_Hash(p);
|
||||
distances[1] = numProcessed + p->hashNumAvail;
|
||||
if (p->hashNumAvail >= p->numHashBytes)
|
||||
continue;
|
||||
distances[0] = curPos + p->hashNumAvail;
|
||||
distances += curPos;
|
||||
for (; p->hashNumAvail != 0; p->hashNumAvail--)
|
||||
*distances++ = 0;
|
||||
return;
|
||||
}
|
||||
{
|
||||
UInt32 size = p->hashBufPosLimit - p->hashBufPos;
|
||||
UInt32 lenLimit = p->matchMaxLen;
|
||||
UInt32 pos = p->pos;
|
||||
UInt32 cyclicBufferPos = p->cyclicBufferPos;
|
||||
if (lenLimit >= p->hashNumAvail)
|
||||
lenLimit = p->hashNumAvail;
|
||||
{
|
||||
UInt32 size2 = p->hashNumAvail - lenLimit + 1;
|
||||
if (size2 < size)
|
||||
size = size2;
|
||||
size2 = p->cyclicBufferSize - cyclicBufferPos;
|
||||
if (size2 < size)
|
||||
size = size2;
|
||||
}
|
||||
|
||||
#ifndef MFMT_GM_INLINE
|
||||
while (curPos < limit && size-- != 0)
|
||||
{
|
||||
UInt32 *startDistances = distances + curPos;
|
||||
UInt32 num = (UInt32)(GetMatchesSpec1(lenLimit, pos - p->hashBuf[p->hashBufPos++],
|
||||
pos, p->buffer, p->son, cyclicBufferPos, p->cyclicBufferSize, p->cutValue,
|
||||
startDistances + 1, p->numHashBytes - 1) - startDistances);
|
||||
*startDistances = num - 1;
|
||||
curPos += num;
|
||||
cyclicBufferPos++;
|
||||
pos++;
|
||||
p->buffer++;
|
||||
}
|
||||
#else
|
||||
{
|
||||
UInt32 posRes;
|
||||
curPos = (UInt32)(GetMatchesSpecN(lenLimit, pos, p->buffer, p->son, cyclicBufferPos, p->cyclicBufferSize, p->cutValue,
|
||||
distances + curPos, p->numHashBytes - 1, p->hashBuf + p->hashBufPos,
|
||||
distances + limit,
|
||||
size, &posRes) - distances);
|
||||
p->hashBufPos += posRes - pos;
|
||||
cyclicBufferPos += posRes - pos;
|
||||
p->buffer += posRes - pos;
|
||||
pos = posRes;
|
||||
}
|
||||
#endif
|
||||
|
||||
numProcessed += pos - p->pos;
|
||||
p->hashNumAvail -= pos - p->pos;
|
||||
p->pos = pos;
|
||||
if (cyclicBufferPos == p->cyclicBufferSize)
|
||||
cyclicBufferPos = 0;
|
||||
p->cyclicBufferPos = cyclicBufferPos;
|
||||
}
|
||||
}
|
||||
|
||||
distances[0] = curPos;
|
||||
}
|
||||
|
||||
static void BtFillBlock(CMatchFinderMt *p, UInt32 globalBlockIndex)
|
||||
{
|
||||
CMtSync *sync = &p->hashSync;
|
||||
if (!sync->needStart)
|
||||
{
|
||||
CriticalSection_Enter(&sync->cs);
|
||||
sync->csWasEntered = True;
|
||||
}
|
||||
|
||||
BtGetMatches(p, p->btBuf + (globalBlockIndex & kMtBtNumBlocksMask) * kMtBtBlockSize);
|
||||
|
||||
if (p->pos > kMtMaxValForNormalize - kMtBtBlockSize)
|
||||
{
|
||||
UInt32 subValue = p->pos - p->cyclicBufferSize;
|
||||
MatchFinder_Normalize3(subValue, p->son, (size_t)p->cyclicBufferSize * 2);
|
||||
p->pos -= subValue;
|
||||
}
|
||||
|
||||
if (!sync->needStart)
|
||||
{
|
||||
CriticalSection_Leave(&sync->cs);
|
||||
sync->csWasEntered = False;
|
||||
}
|
||||
}
|
||||
|
||||
void BtThreadFunc(CMatchFinderMt *mt)
|
||||
{
|
||||
CMtSync *p = &mt->btSync;
|
||||
for (;;)
|
||||
{
|
||||
UInt32 blockIndex = 0;
|
||||
Event_Wait(&p->canStart);
|
||||
Event_Set(&p->wasStarted);
|
||||
for (;;)
|
||||
{
|
||||
if (p->exit)
|
||||
return;
|
||||
if (p->stopWriting)
|
||||
{
|
||||
p->numProcessedBlocks = blockIndex;
|
||||
MtSync_StopWriting(&mt->hashSync);
|
||||
Event_Set(&p->wasStopped);
|
||||
break;
|
||||
}
|
||||
Semaphore_Wait(&p->freeSemaphore);
|
||||
BtFillBlock(mt, blockIndex++);
|
||||
Semaphore_Release1(&p->filledSemaphore);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MatchFinderMt_Construct(CMatchFinderMt *p)
|
||||
{
|
||||
p->hashBuf = NULL;
|
||||
MtSync_Construct(&p->hashSync);
|
||||
MtSync_Construct(&p->btSync);
|
||||
}
|
||||
|
||||
static void MatchFinderMt_FreeMem(CMatchFinderMt *p, ISzAllocPtr alloc)
|
||||
{
|
||||
ISzAlloc_Free(alloc, p->hashBuf);
|
||||
p->hashBuf = NULL;
|
||||
}
|
||||
|
||||
void MatchFinderMt_Destruct(CMatchFinderMt *p, ISzAllocPtr alloc)
|
||||
{
|
||||
MtSync_Destruct(&p->hashSync);
|
||||
MtSync_Destruct(&p->btSync);
|
||||
MatchFinderMt_FreeMem(p, alloc);
|
||||
}
|
||||
|
||||
#define kHashBufferSize (kMtHashBlockSize * kMtHashNumBlocks)
|
||||
#define kBtBufferSize (kMtBtBlockSize * kMtBtNumBlocks)
|
||||
|
||||
static THREAD_FUNC_RET_TYPE THREAD_FUNC_CALL_TYPE HashThreadFunc2(void *p) { HashThreadFunc((CMatchFinderMt *)p); return 0; }
|
||||
static THREAD_FUNC_RET_TYPE THREAD_FUNC_CALL_TYPE BtThreadFunc2(void *p)
|
||||
{
|
||||
Byte allocaDummy[0x180];
|
||||
unsigned i = 0;
|
||||
for (i = 0; i < 16; i++)
|
||||
allocaDummy[i] = (Byte)0;
|
||||
if (allocaDummy[0] == 0)
|
||||
BtThreadFunc((CMatchFinderMt *)p);
|
||||
return 0;
|
||||
}
|
||||
|
||||
SRes MatchFinderMt_Create(CMatchFinderMt *p, UInt32 historySize, UInt32 keepAddBufferBefore,
|
||||
UInt32 matchMaxLen, UInt32 keepAddBufferAfter, ISzAllocPtr alloc)
|
||||
{
|
||||
CMatchFinder *mf = p->MatchFinder;
|
||||
p->historySize = historySize;
|
||||
if (kMtBtBlockSize <= matchMaxLen * 4)
|
||||
return SZ_ERROR_PARAM;
|
||||
if (!p->hashBuf)
|
||||
{
|
||||
p->hashBuf = (UInt32 *)ISzAlloc_Alloc(alloc, (kHashBufferSize + kBtBufferSize) * sizeof(UInt32));
|
||||
if (!p->hashBuf)
|
||||
return SZ_ERROR_MEM;
|
||||
p->btBuf = p->hashBuf + kHashBufferSize;
|
||||
}
|
||||
keepAddBufferBefore += (kHashBufferSize + kBtBufferSize);
|
||||
keepAddBufferAfter += kMtHashBlockSize;
|
||||
if (!MatchFinder_Create(mf, historySize, keepAddBufferBefore, matchMaxLen, keepAddBufferAfter, alloc))
|
||||
return SZ_ERROR_MEM;
|
||||
|
||||
RINOK(MtSync_Create(&p->hashSync, HashThreadFunc2, p, kMtHashNumBlocks));
|
||||
RINOK(MtSync_Create(&p->btSync, BtThreadFunc2, p, kMtBtNumBlocks));
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
/* Call it after ReleaseStream / SetStream */
|
||||
static void MatchFinderMt_Init(CMatchFinderMt *p)
|
||||
{
|
||||
CMatchFinder *mf = p->MatchFinder;
|
||||
|
||||
p->btBufPos =
|
||||
p->btBufPosLimit = 0;
|
||||
p->hashBufPos =
|
||||
p->hashBufPosLimit = 0;
|
||||
|
||||
/* Init without data reading. We don't want to read data in this thread */
|
||||
MatchFinder_Init_3(mf, False);
|
||||
MatchFinder_Init_LowHash(mf);
|
||||
|
||||
p->pointerToCurPos = Inline_MatchFinder_GetPointerToCurrentPos(mf);
|
||||
p->btNumAvailBytes = 0;
|
||||
p->lzPos = p->historySize + 1;
|
||||
|
||||
p->hash = mf->hash;
|
||||
p->fixedHashSize = mf->fixedHashSize;
|
||||
p->crc = mf->crc;
|
||||
|
||||
p->son = mf->son;
|
||||
p->matchMaxLen = mf->matchMaxLen;
|
||||
p->numHashBytes = mf->numHashBytes;
|
||||
p->pos = mf->pos;
|
||||
p->buffer = mf->buffer;
|
||||
p->cyclicBufferPos = mf->cyclicBufferPos;
|
||||
p->cyclicBufferSize = mf->cyclicBufferSize;
|
||||
p->cutValue = mf->cutValue;
|
||||
}
|
||||
|
||||
/* ReleaseStream is required to finish multithreading */
|
||||
void MatchFinderMt_ReleaseStream(CMatchFinderMt *p)
|
||||
{
|
||||
MtSync_StopWriting(&p->btSync);
|
||||
/* p->MatchFinder->ReleaseStream(); */
|
||||
}
|
||||
|
||||
static void MatchFinderMt_Normalize(CMatchFinderMt *p)
|
||||
{
|
||||
MatchFinder_Normalize3(p->lzPos - p->historySize - 1, p->hash, p->fixedHashSize);
|
||||
p->lzPos = p->historySize + 1;
|
||||
}
|
||||
|
||||
static void MatchFinderMt_GetNextBlock_Bt(CMatchFinderMt *p)
|
||||
{
|
||||
UInt32 blockIndex;
|
||||
MtSync_GetNextBlock(&p->btSync);
|
||||
blockIndex = ((p->btSync.numProcessedBlocks - 1) & kMtBtNumBlocksMask);
|
||||
p->btBufPosLimit = p->btBufPos = blockIndex * kMtBtBlockSize;
|
||||
p->btBufPosLimit += p->btBuf[p->btBufPos++];
|
||||
p->btNumAvailBytes = p->btBuf[p->btBufPos++];
|
||||
if (p->lzPos >= kMtMaxValForNormalize - kMtBtBlockSize)
|
||||
MatchFinderMt_Normalize(p);
|
||||
}
|
||||
|
||||
static const Byte * MatchFinderMt_GetPointerToCurrentPos(CMatchFinderMt *p)
|
||||
{
|
||||
return p->pointerToCurPos;
|
||||
}
|
||||
|
||||
#define GET_NEXT_BLOCK_IF_REQUIRED if (p->btBufPos == p->btBufPosLimit) MatchFinderMt_GetNextBlock_Bt(p);
|
||||
|
||||
static UInt32 MatchFinderMt_GetNumAvailableBytes(CMatchFinderMt *p)
|
||||
{
|
||||
GET_NEXT_BLOCK_IF_REQUIRED;
|
||||
return p->btNumAvailBytes;
|
||||
}
|
||||
|
||||
static UInt32 * MixMatches2(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *distances)
|
||||
{
|
||||
UInt32 h2, curMatch2;
|
||||
UInt32 *hash = p->hash;
|
||||
const Byte *cur = p->pointerToCurPos;
|
||||
UInt32 lzPos = p->lzPos;
|
||||
MT_HASH2_CALC
|
||||
|
||||
curMatch2 = hash[h2];
|
||||
hash[h2] = lzPos;
|
||||
|
||||
if (curMatch2 >= matchMinPos)
|
||||
if (cur[(ptrdiff_t)curMatch2 - lzPos] == cur[0])
|
||||
{
|
||||
*distances++ = 2;
|
||||
*distances++ = lzPos - curMatch2 - 1;
|
||||
}
|
||||
|
||||
return distances;
|
||||
}
|
||||
|
||||
static UInt32 * MixMatches3(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *distances)
|
||||
{
|
||||
UInt32 h2, h3, curMatch2, curMatch3;
|
||||
UInt32 *hash = p->hash;
|
||||
const Byte *cur = p->pointerToCurPos;
|
||||
UInt32 lzPos = p->lzPos;
|
||||
MT_HASH3_CALC
|
||||
|
||||
curMatch2 = hash[ h2];
|
||||
curMatch3 = (hash + kFix3HashSize)[h3];
|
||||
|
||||
hash[ h2] = lzPos;
|
||||
(hash + kFix3HashSize)[h3] = lzPos;
|
||||
|
||||
if (curMatch2 >= matchMinPos && cur[(ptrdiff_t)curMatch2 - lzPos] == cur[0])
|
||||
{
|
||||
distances[1] = lzPos - curMatch2 - 1;
|
||||
if (cur[(ptrdiff_t)curMatch2 - lzPos + 2] == cur[2])
|
||||
{
|
||||
distances[0] = 3;
|
||||
return distances + 2;
|
||||
}
|
||||
distances[0] = 2;
|
||||
distances += 2;
|
||||
}
|
||||
|
||||
if (curMatch3 >= matchMinPos && cur[(ptrdiff_t)curMatch3 - lzPos] == cur[0])
|
||||
{
|
||||
*distances++ = 3;
|
||||
*distances++ = lzPos - curMatch3 - 1;
|
||||
}
|
||||
|
||||
return distances;
|
||||
}
|
||||
|
||||
/*
|
||||
static UInt32 *MixMatches4(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *distances)
|
||||
{
|
||||
UInt32 h2, h3, h4, curMatch2, curMatch3, curMatch4;
|
||||
UInt32 *hash = p->hash;
|
||||
const Byte *cur = p->pointerToCurPos;
|
||||
UInt32 lzPos = p->lzPos;
|
||||
MT_HASH4_CALC
|
||||
|
||||
curMatch2 = hash[ h2];
|
||||
curMatch3 = (hash + kFix3HashSize)[h3];
|
||||
curMatch4 = (hash + kFix4HashSize)[h4];
|
||||
|
||||
hash[ h2] = lzPos;
|
||||
(hash + kFix3HashSize)[h3] = lzPos;
|
||||
(hash + kFix4HashSize)[h4] = lzPos;
|
||||
|
||||
if (curMatch2 >= matchMinPos && cur[(ptrdiff_t)curMatch2 - lzPos] == cur[0])
|
||||
{
|
||||
distances[1] = lzPos - curMatch2 - 1;
|
||||
if (cur[(ptrdiff_t)curMatch2 - lzPos + 2] == cur[2])
|
||||
{
|
||||
distances[0] = (cur[(ptrdiff_t)curMatch2 - lzPos + 3] == cur[3]) ? 4 : 3;
|
||||
return distances + 2;
|
||||
}
|
||||
distances[0] = 2;
|
||||
distances += 2;
|
||||
}
|
||||
|
||||
if (curMatch3 >= matchMinPos && cur[(ptrdiff_t)curMatch3 - lzPos] == cur[0])
|
||||
{
|
||||
distances[1] = lzPos - curMatch3 - 1;
|
||||
if (cur[(ptrdiff_t)curMatch3 - lzPos + 3] == cur[3])
|
||||
{
|
||||
distances[0] = 4;
|
||||
return distances + 2;
|
||||
}
|
||||
distances[0] = 3;
|
||||
distances += 2;
|
||||
}
|
||||
|
||||
if (curMatch4 >= matchMinPos)
|
||||
if (
|
||||
cur[(ptrdiff_t)curMatch4 - lzPos] == cur[0] &&
|
||||
cur[(ptrdiff_t)curMatch4 - lzPos + 3] == cur[3]
|
||||
)
|
||||
{
|
||||
*distances++ = 4;
|
||||
*distances++ = lzPos - curMatch4 - 1;
|
||||
}
|
||||
|
||||
return distances;
|
||||
}
|
||||
*/
|
||||
|
||||
#define INCREASE_LZ_POS p->lzPos++; p->pointerToCurPos++;
|
||||
|
||||
static UInt32 MatchFinderMt2_GetMatches(CMatchFinderMt *p, UInt32 *distances)
|
||||
{
|
||||
const UInt32 *btBuf = p->btBuf + p->btBufPos;
|
||||
UInt32 len = *btBuf++;
|
||||
p->btBufPos += 1 + len;
|
||||
p->btNumAvailBytes--;
|
||||
{
|
||||
UInt32 i;
|
||||
for (i = 0; i < len; i += 2)
|
||||
{
|
||||
UInt32 v0 = btBuf[0];
|
||||
UInt32 v1 = btBuf[1];
|
||||
btBuf += 2;
|
||||
distances[0] = v0;
|
||||
distances[1] = v1;
|
||||
distances += 2;
|
||||
}
|
||||
}
|
||||
INCREASE_LZ_POS
|
||||
return len;
|
||||
}
|
||||
|
||||
static UInt32 MatchFinderMt_GetMatches(CMatchFinderMt *p, UInt32 *distances)
|
||||
{
|
||||
const UInt32 *btBuf = p->btBuf + p->btBufPos;
|
||||
UInt32 len = *btBuf++;
|
||||
p->btBufPos += 1 + len;
|
||||
|
||||
if (len == 0)
|
||||
{
|
||||
/* change for bt5 ! */
|
||||
if (p->btNumAvailBytes-- >= 4)
|
||||
len = (UInt32)(p->MixMatchesFunc(p, p->lzPos - p->historySize, distances) - (distances));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Condition: there are matches in btBuf with length < p->numHashBytes */
|
||||
UInt32 *distances2;
|
||||
p->btNumAvailBytes--;
|
||||
distances2 = p->MixMatchesFunc(p, p->lzPos - btBuf[1], distances);
|
||||
do
|
||||
{
|
||||
UInt32 v0 = btBuf[0];
|
||||
UInt32 v1 = btBuf[1];
|
||||
btBuf += 2;
|
||||
distances2[0] = v0;
|
||||
distances2[1] = v1;
|
||||
distances2 += 2;
|
||||
}
|
||||
while ((len -= 2) != 0);
|
||||
len = (UInt32)(distances2 - (distances));
|
||||
}
|
||||
INCREASE_LZ_POS
|
||||
return len;
|
||||
}
|
||||
|
||||
#define SKIP_HEADER2_MT do { GET_NEXT_BLOCK_IF_REQUIRED
|
||||
#define SKIP_HEADER_MT(n) SKIP_HEADER2_MT if (p->btNumAvailBytes-- >= (n)) { const Byte *cur = p->pointerToCurPos; UInt32 *hash = p->hash;
|
||||
#define SKIP_FOOTER_MT } INCREASE_LZ_POS p->btBufPos += p->btBuf[p->btBufPos] + 1; } while (--num != 0);
|
||||
|
||||
static void MatchFinderMt0_Skip(CMatchFinderMt *p, UInt32 num)
|
||||
{
|
||||
SKIP_HEADER2_MT { p->btNumAvailBytes--;
|
||||
SKIP_FOOTER_MT
|
||||
}
|
||||
|
||||
static void MatchFinderMt2_Skip(CMatchFinderMt *p, UInt32 num)
|
||||
{
|
||||
SKIP_HEADER_MT(2)
|
||||
UInt32 h2;
|
||||
MT_HASH2_CALC
|
||||
hash[h2] = p->lzPos;
|
||||
SKIP_FOOTER_MT
|
||||
}
|
||||
|
||||
static void MatchFinderMt3_Skip(CMatchFinderMt *p, UInt32 num)
|
||||
{
|
||||
SKIP_HEADER_MT(3)
|
||||
UInt32 h2, h3;
|
||||
MT_HASH3_CALC
|
||||
(hash + kFix3HashSize)[h3] =
|
||||
hash[ h2] =
|
||||
p->lzPos;
|
||||
SKIP_FOOTER_MT
|
||||
}
|
||||
|
||||
/*
|
||||
static void MatchFinderMt4_Skip(CMatchFinderMt *p, UInt32 num)
|
||||
{
|
||||
SKIP_HEADER_MT(4)
|
||||
UInt32 h2, h3, h4;
|
||||
MT_HASH4_CALC
|
||||
(hash + kFix4HashSize)[h4] =
|
||||
(hash + kFix3HashSize)[h3] =
|
||||
hash[ h2] =
|
||||
p->lzPos;
|
||||
SKIP_FOOTER_MT
|
||||
}
|
||||
*/
|
||||
|
||||
void MatchFinderMt_CreateVTable(CMatchFinderMt *p, IMatchFinder *vTable)
|
||||
{
|
||||
vTable->Init = (Mf_Init_Func)MatchFinderMt_Init;
|
||||
vTable->GetNumAvailableBytes = (Mf_GetNumAvailableBytes_Func)MatchFinderMt_GetNumAvailableBytes;
|
||||
vTable->GetPointerToCurrentPos = (Mf_GetPointerToCurrentPos_Func)MatchFinderMt_GetPointerToCurrentPos;
|
||||
vTable->GetMatches = (Mf_GetMatches_Func)MatchFinderMt_GetMatches;
|
||||
|
||||
switch (p->MatchFinder->numHashBytes)
|
||||
{
|
||||
case 2:
|
||||
p->GetHeadsFunc = GetHeads2;
|
||||
p->MixMatchesFunc = (Mf_Mix_Matches)NULL;
|
||||
vTable->Skip = (Mf_Skip_Func)MatchFinderMt0_Skip;
|
||||
vTable->GetMatches = (Mf_GetMatches_Func)MatchFinderMt2_GetMatches;
|
||||
break;
|
||||
case 3:
|
||||
p->GetHeadsFunc = GetHeads3;
|
||||
p->MixMatchesFunc = (Mf_Mix_Matches)MixMatches2;
|
||||
vTable->Skip = (Mf_Skip_Func)MatchFinderMt2_Skip;
|
||||
break;
|
||||
default:
|
||||
/* case 4: */
|
||||
p->GetHeadsFunc = p->MatchFinder->bigHash ? GetHeads4b : GetHeads4;
|
||||
p->MixMatchesFunc = (Mf_Mix_Matches)MixMatches3;
|
||||
vTable->Skip = (Mf_Skip_Func)MatchFinderMt3_Skip;
|
||||
break;
|
||||
/*
|
||||
default:
|
||||
p->GetHeadsFunc = GetHeads5;
|
||||
p->MixMatchesFunc = (Mf_Mix_Matches)MixMatches4;
|
||||
vTable->Skip = (Mf_Skip_Func)MatchFinderMt4_Skip;
|
||||
break;
|
||||
*/
|
||||
}
|
||||
}
|
||||
101
3rdparty/7z/LzFindMt.h
vendored
101
3rdparty/7z/LzFindMt.h
vendored
|
|
@ -1,101 +0,0 @@
|
|||
/* LzFindMt.h -- multithreaded Match finder for LZ algorithms
|
||||
2018-07-04 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __LZ_FIND_MT_H
|
||||
#define __LZ_FIND_MT_H
|
||||
|
||||
#include "LzFind.h"
|
||||
#include "Threads.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
#define kMtHashBlockSize (1 << 13)
|
||||
#define kMtHashNumBlocks (1 << 3)
|
||||
#define kMtHashNumBlocksMask (kMtHashNumBlocks - 1)
|
||||
|
||||
#define kMtBtBlockSize (1 << 14)
|
||||
#define kMtBtNumBlocks (1 << 6)
|
||||
#define kMtBtNumBlocksMask (kMtBtNumBlocks - 1)
|
||||
|
||||
typedef struct _CMtSync
|
||||
{
|
||||
BoolInt wasCreated;
|
||||
BoolInt needStart;
|
||||
BoolInt exit;
|
||||
BoolInt stopWriting;
|
||||
|
||||
CThread thread;
|
||||
CAutoResetEvent canStart;
|
||||
CAutoResetEvent wasStarted;
|
||||
CAutoResetEvent wasStopped;
|
||||
CSemaphore freeSemaphore;
|
||||
CSemaphore filledSemaphore;
|
||||
BoolInt csWasInitialized;
|
||||
BoolInt csWasEntered;
|
||||
CCriticalSection cs;
|
||||
UInt32 numProcessedBlocks;
|
||||
} CMtSync;
|
||||
|
||||
typedef UInt32 * (*Mf_Mix_Matches)(void *p, UInt32 matchMinPos, UInt32 *distances);
|
||||
|
||||
/* kMtCacheLineDummy must be >= size_of_CPU_cache_line */
|
||||
#define kMtCacheLineDummy 128
|
||||
|
||||
typedef void (*Mf_GetHeads)(const Byte *buffer, UInt32 pos,
|
||||
UInt32 *hash, UInt32 hashMask, UInt32 *heads, UInt32 numHeads, const UInt32 *crc);
|
||||
|
||||
typedef struct _CMatchFinderMt
|
||||
{
|
||||
/* LZ */
|
||||
const Byte *pointerToCurPos;
|
||||
UInt32 *btBuf;
|
||||
UInt32 btBufPos;
|
||||
UInt32 btBufPosLimit;
|
||||
UInt32 lzPos;
|
||||
UInt32 btNumAvailBytes;
|
||||
|
||||
UInt32 *hash;
|
||||
UInt32 fixedHashSize;
|
||||
UInt32 historySize;
|
||||
const UInt32 *crc;
|
||||
|
||||
Mf_Mix_Matches MixMatchesFunc;
|
||||
|
||||
/* LZ + BT */
|
||||
CMtSync btSync;
|
||||
Byte btDummy[kMtCacheLineDummy];
|
||||
|
||||
/* BT */
|
||||
UInt32 *hashBuf;
|
||||
UInt32 hashBufPos;
|
||||
UInt32 hashBufPosLimit;
|
||||
UInt32 hashNumAvail;
|
||||
|
||||
CLzRef *son;
|
||||
UInt32 matchMaxLen;
|
||||
UInt32 numHashBytes;
|
||||
UInt32 pos;
|
||||
const Byte *buffer;
|
||||
UInt32 cyclicBufferPos;
|
||||
UInt32 cyclicBufferSize; /* it must be historySize + 1 */
|
||||
UInt32 cutValue;
|
||||
|
||||
/* BT + Hash */
|
||||
CMtSync hashSync;
|
||||
/* Byte hashDummy[kMtCacheLineDummy]; */
|
||||
|
||||
/* Hash */
|
||||
Mf_GetHeads GetHeadsFunc;
|
||||
CMatchFinder *MatchFinder;
|
||||
} CMatchFinderMt;
|
||||
|
||||
void MatchFinderMt_Construct(CMatchFinderMt *p);
|
||||
void MatchFinderMt_Destruct(CMatchFinderMt *p, ISzAllocPtr alloc);
|
||||
SRes MatchFinderMt_Create(CMatchFinderMt *p, UInt32 historySize, UInt32 keepAddBufferBefore,
|
||||
UInt32 matchMaxLen, UInt32 keepAddBufferAfter, ISzAllocPtr alloc);
|
||||
void MatchFinderMt_CreateVTable(CMatchFinderMt *p, IMatchFinder *vTable);
|
||||
void MatchFinderMt_ReleaseStream(CMatchFinderMt *p);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
57
3rdparty/7z/LzHash.h
vendored
57
3rdparty/7z/LzHash.h
vendored
|
|
@ -1,57 +0,0 @@
|
|||
/* LzHash.h -- HASH functions for LZ algorithms
|
||||
2015-04-12 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __LZ_HASH_H
|
||||
#define __LZ_HASH_H
|
||||
|
||||
#define kHash2Size (1 << 10)
|
||||
#define kHash3Size (1 << 16)
|
||||
#define kHash4Size (1 << 20)
|
||||
|
||||
#define kFix3HashSize (kHash2Size)
|
||||
#define kFix4HashSize (kHash2Size + kHash3Size)
|
||||
#define kFix5HashSize (kHash2Size + kHash3Size + kHash4Size)
|
||||
|
||||
#define HASH2_CALC hv = cur[0] | ((UInt32)cur[1] << 8);
|
||||
|
||||
#define HASH3_CALC { \
|
||||
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
|
||||
h2 = temp & (kHash2Size - 1); \
|
||||
hv = (temp ^ ((UInt32)cur[2] << 8)) & p->hashMask; }
|
||||
|
||||
#define HASH4_CALC { \
|
||||
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
|
||||
h2 = temp & (kHash2Size - 1); \
|
||||
temp ^= ((UInt32)cur[2] << 8); \
|
||||
h3 = temp & (kHash3Size - 1); \
|
||||
hv = (temp ^ (p->crc[cur[3]] << 5)) & p->hashMask; }
|
||||
|
||||
#define HASH5_CALC { \
|
||||
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
|
||||
h2 = temp & (kHash2Size - 1); \
|
||||
temp ^= ((UInt32)cur[2] << 8); \
|
||||
h3 = temp & (kHash3Size - 1); \
|
||||
temp ^= (p->crc[cur[3]] << 5); \
|
||||
h4 = temp & (kHash4Size - 1); \
|
||||
hv = (temp ^ (p->crc[cur[4]] << 3)) & p->hashMask; }
|
||||
|
||||
/* #define HASH_ZIP_CALC hv = ((cur[0] | ((UInt32)cur[1] << 8)) ^ p->crc[cur[2]]) & 0xFFFF; */
|
||||
#define HASH_ZIP_CALC hv = ((cur[2] | ((UInt32)cur[0] << 8)) ^ p->crc[cur[1]]) & 0xFFFF;
|
||||
|
||||
|
||||
#define MT_HASH2_CALC \
|
||||
h2 = (p->crc[cur[0]] ^ cur[1]) & (kHash2Size - 1);
|
||||
|
||||
#define MT_HASH3_CALC { \
|
||||
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
|
||||
h2 = temp & (kHash2Size - 1); \
|
||||
h3 = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); }
|
||||
|
||||
#define MT_HASH4_CALC { \
|
||||
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
|
||||
h2 = temp & (kHash2Size - 1); \
|
||||
temp ^= ((UInt32)cur[2] << 8); \
|
||||
h3 = temp & (kHash3Size - 1); \
|
||||
h4 = (temp ^ (p->crc[cur[3]] << 5)) & (kHash4Size - 1); }
|
||||
|
||||
#endif
|
||||
488
3rdparty/7z/Lzma2Dec.c
vendored
488
3rdparty/7z/Lzma2Dec.c
vendored
|
|
@ -1,488 +0,0 @@
|
|||
/* Lzma2Dec.c -- LZMA2 Decoder
|
||||
2019-02-02 : Igor Pavlov : Public domain */
|
||||
|
||||
/* #define SHOW_DEBUG_INFO */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#ifdef SHOW_DEBUG_INFO
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "Lzma2Dec.h"
|
||||
|
||||
/*
|
||||
00000000 - End of data
|
||||
00000001 U U - Uncompressed, reset dic, need reset state and set new prop
|
||||
00000010 U U - Uncompressed, no reset
|
||||
100uuuuu U U P P - LZMA, no reset
|
||||
101uuuuu U U P P - LZMA, reset state
|
||||
110uuuuu U U P P S - LZMA, reset state + set new prop
|
||||
111uuuuu U U P P S - LZMA, reset state + set new prop, reset dic
|
||||
|
||||
u, U - Unpack Size
|
||||
P - Pack Size
|
||||
S - Props
|
||||
*/
|
||||
|
||||
#define LZMA2_CONTROL_COPY_RESET_DIC 1
|
||||
|
||||
#define LZMA2_IS_UNCOMPRESSED_STATE(p) (((p)->control & (1 << 7)) == 0)
|
||||
|
||||
#define LZMA2_LCLP_MAX 4
|
||||
#define LZMA2_DIC_SIZE_FROM_PROP(p) (((UInt32)2 | ((p) & 1)) << ((p) / 2 + 11))
|
||||
|
||||
#ifdef SHOW_DEBUG_INFO
|
||||
#define PRF(x) x
|
||||
#else
|
||||
#define PRF(x)
|
||||
#endif
|
||||
|
||||
typedef enum
|
||||
{
|
||||
LZMA2_STATE_CONTROL,
|
||||
LZMA2_STATE_UNPACK0,
|
||||
LZMA2_STATE_UNPACK1,
|
||||
LZMA2_STATE_PACK0,
|
||||
LZMA2_STATE_PACK1,
|
||||
LZMA2_STATE_PROP,
|
||||
LZMA2_STATE_DATA,
|
||||
LZMA2_STATE_DATA_CONT,
|
||||
LZMA2_STATE_FINISHED,
|
||||
LZMA2_STATE_ERROR
|
||||
} ELzma2State;
|
||||
|
||||
static SRes Lzma2Dec_GetOldProps(Byte prop, Byte *props)
|
||||
{
|
||||
UInt32 dicSize;
|
||||
if (prop > 40)
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
dicSize = (prop == 40) ? 0xFFFFFFFF : LZMA2_DIC_SIZE_FROM_PROP(prop);
|
||||
props[0] = (Byte)LZMA2_LCLP_MAX;
|
||||
props[1] = (Byte)(dicSize);
|
||||
props[2] = (Byte)(dicSize >> 8);
|
||||
props[3] = (Byte)(dicSize >> 16);
|
||||
props[4] = (Byte)(dicSize >> 24);
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc)
|
||||
{
|
||||
Byte props[LZMA_PROPS_SIZE];
|
||||
RINOK(Lzma2Dec_GetOldProps(prop, props));
|
||||
return LzmaDec_AllocateProbs(&p->decoder, props, LZMA_PROPS_SIZE, alloc);
|
||||
}
|
||||
|
||||
SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc)
|
||||
{
|
||||
Byte props[LZMA_PROPS_SIZE];
|
||||
RINOK(Lzma2Dec_GetOldProps(prop, props));
|
||||
return LzmaDec_Allocate(&p->decoder, props, LZMA_PROPS_SIZE, alloc);
|
||||
}
|
||||
|
||||
void Lzma2Dec_Init(CLzma2Dec *p)
|
||||
{
|
||||
p->state = LZMA2_STATE_CONTROL;
|
||||
p->needInitLevel = 0xE0;
|
||||
p->isExtraMode = False;
|
||||
p->unpackSize = 0;
|
||||
|
||||
// p->decoder.dicPos = 0; // we can use it instead of full init
|
||||
LzmaDec_Init(&p->decoder);
|
||||
}
|
||||
|
||||
static ELzma2State Lzma2Dec_UpdateState(CLzma2Dec *p, Byte b)
|
||||
{
|
||||
switch (p->state)
|
||||
{
|
||||
case LZMA2_STATE_CONTROL:
|
||||
p->isExtraMode = False;
|
||||
p->control = b;
|
||||
PRF(printf("\n %8X", (unsigned)p->decoder.dicPos));
|
||||
PRF(printf(" %02X", (unsigned)b));
|
||||
if (b == 0)
|
||||
return LZMA2_STATE_FINISHED;
|
||||
if (LZMA2_IS_UNCOMPRESSED_STATE(p))
|
||||
{
|
||||
if (b == LZMA2_CONTROL_COPY_RESET_DIC)
|
||||
p->needInitLevel = 0xC0;
|
||||
else if (b > 2 || p->needInitLevel == 0xE0)
|
||||
return LZMA2_STATE_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (b < p->needInitLevel)
|
||||
return LZMA2_STATE_ERROR;
|
||||
p->needInitLevel = 0;
|
||||
p->unpackSize = (UInt32)(b & 0x1F) << 16;
|
||||
}
|
||||
return LZMA2_STATE_UNPACK0;
|
||||
|
||||
case LZMA2_STATE_UNPACK0:
|
||||
p->unpackSize |= (UInt32)b << 8;
|
||||
return LZMA2_STATE_UNPACK1;
|
||||
|
||||
case LZMA2_STATE_UNPACK1:
|
||||
p->unpackSize |= (UInt32)b;
|
||||
p->unpackSize++;
|
||||
PRF(printf(" %7u", (unsigned)p->unpackSize));
|
||||
return LZMA2_IS_UNCOMPRESSED_STATE(p) ? LZMA2_STATE_DATA : LZMA2_STATE_PACK0;
|
||||
|
||||
case LZMA2_STATE_PACK0:
|
||||
p->packSize = (UInt32)b << 8;
|
||||
return LZMA2_STATE_PACK1;
|
||||
|
||||
case LZMA2_STATE_PACK1:
|
||||
p->packSize |= (UInt32)b;
|
||||
p->packSize++;
|
||||
// if (p->packSize < 5) return LZMA2_STATE_ERROR;
|
||||
PRF(printf(" %5u", (unsigned)p->packSize));
|
||||
return (p->control & 0x40) ? LZMA2_STATE_PROP : LZMA2_STATE_DATA;
|
||||
|
||||
case LZMA2_STATE_PROP:
|
||||
{
|
||||
unsigned lc, lp;
|
||||
if (b >= (9 * 5 * 5))
|
||||
return LZMA2_STATE_ERROR;
|
||||
lc = b % 9;
|
||||
b /= 9;
|
||||
p->decoder.prop.pb = (Byte)(b / 5);
|
||||
lp = b % 5;
|
||||
if (lc + lp > LZMA2_LCLP_MAX)
|
||||
return LZMA2_STATE_ERROR;
|
||||
p->decoder.prop.lc = (Byte)lc;
|
||||
p->decoder.prop.lp = (Byte)lp;
|
||||
return LZMA2_STATE_DATA;
|
||||
}
|
||||
}
|
||||
return LZMA2_STATE_ERROR;
|
||||
}
|
||||
|
||||
static void LzmaDec_UpdateWithUncompressed(CLzmaDec *p, const Byte *src, SizeT size)
|
||||
{
|
||||
memcpy(p->dic + p->dicPos, src, size);
|
||||
p->dicPos += size;
|
||||
if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= size)
|
||||
p->checkDicSize = p->prop.dicSize;
|
||||
p->processedPos += (UInt32)size;
|
||||
}
|
||||
|
||||
void LzmaDec_InitDicAndState(CLzmaDec *p, BoolInt initDic, BoolInt initState);
|
||||
|
||||
|
||||
SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit,
|
||||
const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status)
|
||||
{
|
||||
SizeT inSize = *srcLen;
|
||||
*srcLen = 0;
|
||||
*status = LZMA_STATUS_NOT_SPECIFIED;
|
||||
|
||||
while (p->state != LZMA2_STATE_ERROR)
|
||||
{
|
||||
SizeT dicPos;
|
||||
|
||||
if (p->state == LZMA2_STATE_FINISHED)
|
||||
{
|
||||
*status = LZMA_STATUS_FINISHED_WITH_MARK;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
dicPos = p->decoder.dicPos;
|
||||
|
||||
if (dicPos == dicLimit && finishMode == LZMA_FINISH_ANY)
|
||||
{
|
||||
*status = LZMA_STATUS_NOT_FINISHED;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
if (p->state != LZMA2_STATE_DATA && p->state != LZMA2_STATE_DATA_CONT)
|
||||
{
|
||||
if (*srcLen == inSize)
|
||||
{
|
||||
*status = LZMA_STATUS_NEEDS_MORE_INPUT;
|
||||
return SZ_OK;
|
||||
}
|
||||
(*srcLen)++;
|
||||
p->state = Lzma2Dec_UpdateState(p, *src++);
|
||||
if (dicPos == dicLimit && p->state != LZMA2_STATE_FINISHED)
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
|
||||
{
|
||||
SizeT inCur = inSize - *srcLen;
|
||||
SizeT outCur = dicLimit - dicPos;
|
||||
ELzmaFinishMode curFinishMode = LZMA_FINISH_ANY;
|
||||
|
||||
if (outCur >= p->unpackSize)
|
||||
{
|
||||
outCur = (SizeT)p->unpackSize;
|
||||
curFinishMode = LZMA_FINISH_END;
|
||||
}
|
||||
|
||||
if (LZMA2_IS_UNCOMPRESSED_STATE(p))
|
||||
{
|
||||
if (inCur == 0)
|
||||
{
|
||||
*status = LZMA_STATUS_NEEDS_MORE_INPUT;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
if (p->state == LZMA2_STATE_DATA)
|
||||
{
|
||||
BoolInt initDic = (p->control == LZMA2_CONTROL_COPY_RESET_DIC);
|
||||
LzmaDec_InitDicAndState(&p->decoder, initDic, False);
|
||||
}
|
||||
|
||||
if (inCur > outCur)
|
||||
inCur = outCur;
|
||||
if (inCur == 0)
|
||||
break;
|
||||
|
||||
LzmaDec_UpdateWithUncompressed(&p->decoder, src, inCur);
|
||||
|
||||
src += inCur;
|
||||
*srcLen += inCur;
|
||||
p->unpackSize -= (UInt32)inCur;
|
||||
p->state = (p->unpackSize == 0) ? LZMA2_STATE_CONTROL : LZMA2_STATE_DATA_CONT;
|
||||
}
|
||||
else
|
||||
{
|
||||
SRes res;
|
||||
|
||||
if (p->state == LZMA2_STATE_DATA)
|
||||
{
|
||||
BoolInt initDic = (p->control >= 0xE0);
|
||||
BoolInt initState = (p->control >= 0xA0);
|
||||
LzmaDec_InitDicAndState(&p->decoder, initDic, initState);
|
||||
p->state = LZMA2_STATE_DATA_CONT;
|
||||
}
|
||||
|
||||
if (inCur > p->packSize)
|
||||
inCur = (SizeT)p->packSize;
|
||||
|
||||
res = LzmaDec_DecodeToDic(&p->decoder, dicPos + outCur, src, &inCur, curFinishMode, status);
|
||||
|
||||
src += inCur;
|
||||
*srcLen += inCur;
|
||||
p->packSize -= (UInt32)inCur;
|
||||
outCur = p->decoder.dicPos - dicPos;
|
||||
p->unpackSize -= (UInt32)outCur;
|
||||
|
||||
if (res != 0)
|
||||
break;
|
||||
|
||||
if (*status == LZMA_STATUS_NEEDS_MORE_INPUT)
|
||||
{
|
||||
if (p->packSize == 0)
|
||||
break;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
if (inCur == 0 && outCur == 0)
|
||||
{
|
||||
if (*status != LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK
|
||||
|| p->unpackSize != 0
|
||||
|| p->packSize != 0)
|
||||
break;
|
||||
p->state = LZMA2_STATE_CONTROL;
|
||||
}
|
||||
|
||||
*status = LZMA_STATUS_NOT_SPECIFIED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*status = LZMA_STATUS_NOT_SPECIFIED;
|
||||
p->state = LZMA2_STATE_ERROR;
|
||||
return SZ_ERROR_DATA;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
ELzma2ParseStatus Lzma2Dec_Parse(CLzma2Dec *p,
|
||||
SizeT outSize,
|
||||
const Byte *src, SizeT *srcLen,
|
||||
int checkFinishBlock)
|
||||
{
|
||||
SizeT inSize = *srcLen;
|
||||
*srcLen = 0;
|
||||
|
||||
while (p->state != LZMA2_STATE_ERROR)
|
||||
{
|
||||
if (p->state == LZMA2_STATE_FINISHED)
|
||||
return (ELzma2ParseStatus)LZMA_STATUS_FINISHED_WITH_MARK;
|
||||
|
||||
if (outSize == 0 && !checkFinishBlock)
|
||||
return (ELzma2ParseStatus)LZMA_STATUS_NOT_FINISHED;
|
||||
|
||||
if (p->state != LZMA2_STATE_DATA && p->state != LZMA2_STATE_DATA_CONT)
|
||||
{
|
||||
if (*srcLen == inSize)
|
||||
return (ELzma2ParseStatus)LZMA_STATUS_NEEDS_MORE_INPUT;
|
||||
(*srcLen)++;
|
||||
|
||||
p->state = Lzma2Dec_UpdateState(p, *src++);
|
||||
|
||||
if (p->state == LZMA2_STATE_UNPACK0)
|
||||
{
|
||||
// if (p->decoder.dicPos != 0)
|
||||
if (p->control == LZMA2_CONTROL_COPY_RESET_DIC || p->control >= 0xE0)
|
||||
return LZMA2_PARSE_STATUS_NEW_BLOCK;
|
||||
// if (outSize == 0) return LZMA_STATUS_NOT_FINISHED;
|
||||
}
|
||||
|
||||
// The following code can be commented.
|
||||
// It's not big problem, if we read additional input bytes.
|
||||
// It will be stopped later in LZMA2_STATE_DATA / LZMA2_STATE_DATA_CONT state.
|
||||
|
||||
if (outSize == 0 && p->state != LZMA2_STATE_FINISHED)
|
||||
{
|
||||
// checkFinishBlock is true. So we expect that block must be finished,
|
||||
// We can return LZMA_STATUS_NOT_SPECIFIED or LZMA_STATUS_NOT_FINISHED here
|
||||
// break;
|
||||
return (ELzma2ParseStatus)LZMA_STATUS_NOT_FINISHED;
|
||||
}
|
||||
|
||||
if (p->state == LZMA2_STATE_DATA)
|
||||
return LZMA2_PARSE_STATUS_NEW_CHUNK;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (outSize == 0)
|
||||
return (ELzma2ParseStatus)LZMA_STATUS_NOT_FINISHED;
|
||||
|
||||
{
|
||||
SizeT inCur = inSize - *srcLen;
|
||||
|
||||
if (LZMA2_IS_UNCOMPRESSED_STATE(p))
|
||||
{
|
||||
if (inCur == 0)
|
||||
return (ELzma2ParseStatus)LZMA_STATUS_NEEDS_MORE_INPUT;
|
||||
if (inCur > p->unpackSize)
|
||||
inCur = p->unpackSize;
|
||||
if (inCur > outSize)
|
||||
inCur = outSize;
|
||||
p->decoder.dicPos += inCur;
|
||||
src += inCur;
|
||||
*srcLen += inCur;
|
||||
outSize -= inCur;
|
||||
p->unpackSize -= (UInt32)inCur;
|
||||
p->state = (p->unpackSize == 0) ? LZMA2_STATE_CONTROL : LZMA2_STATE_DATA_CONT;
|
||||
}
|
||||
else
|
||||
{
|
||||
p->isExtraMode = True;
|
||||
|
||||
if (inCur == 0)
|
||||
{
|
||||
if (p->packSize != 0)
|
||||
return (ELzma2ParseStatus)LZMA_STATUS_NEEDS_MORE_INPUT;
|
||||
}
|
||||
else if (p->state == LZMA2_STATE_DATA)
|
||||
{
|
||||
p->state = LZMA2_STATE_DATA_CONT;
|
||||
if (*src != 0)
|
||||
{
|
||||
// first byte of lzma chunk must be Zero
|
||||
*srcLen += 1;
|
||||
p->packSize--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (inCur > p->packSize)
|
||||
inCur = (SizeT)p->packSize;
|
||||
|
||||
src += inCur;
|
||||
*srcLen += inCur;
|
||||
p->packSize -= (UInt32)inCur;
|
||||
|
||||
if (p->packSize == 0)
|
||||
{
|
||||
SizeT rem = outSize;
|
||||
if (rem > p->unpackSize)
|
||||
rem = p->unpackSize;
|
||||
p->decoder.dicPos += rem;
|
||||
p->unpackSize -= (UInt32)rem;
|
||||
outSize -= rem;
|
||||
if (p->unpackSize == 0)
|
||||
p->state = LZMA2_STATE_CONTROL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p->state = LZMA2_STATE_ERROR;
|
||||
return (ELzma2ParseStatus)LZMA_STATUS_NOT_SPECIFIED;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
SRes Lzma2Dec_DecodeToBuf(CLzma2Dec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status)
|
||||
{
|
||||
SizeT outSize = *destLen, inSize = *srcLen;
|
||||
*srcLen = *destLen = 0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
SizeT inCur = inSize, outCur, dicPos;
|
||||
ELzmaFinishMode curFinishMode;
|
||||
SRes res;
|
||||
|
||||
if (p->decoder.dicPos == p->decoder.dicBufSize)
|
||||
p->decoder.dicPos = 0;
|
||||
dicPos = p->decoder.dicPos;
|
||||
curFinishMode = LZMA_FINISH_ANY;
|
||||
outCur = p->decoder.dicBufSize - dicPos;
|
||||
|
||||
if (outCur >= outSize)
|
||||
{
|
||||
outCur = outSize;
|
||||
curFinishMode = finishMode;
|
||||
}
|
||||
|
||||
res = Lzma2Dec_DecodeToDic(p, dicPos + outCur, src, &inCur, curFinishMode, status);
|
||||
|
||||
src += inCur;
|
||||
inSize -= inCur;
|
||||
*srcLen += inCur;
|
||||
outCur = p->decoder.dicPos - dicPos;
|
||||
memcpy(dest, p->decoder.dic + dicPos, outCur);
|
||||
dest += outCur;
|
||||
outSize -= outCur;
|
||||
*destLen += outCur;
|
||||
if (res != 0)
|
||||
return res;
|
||||
if (outCur == 0 || outSize == 0)
|
||||
return SZ_OK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
|
||||
Byte prop, ELzmaFinishMode finishMode, ELzmaStatus *status, ISzAllocPtr alloc)
|
||||
{
|
||||
CLzma2Dec p;
|
||||
SRes res;
|
||||
SizeT outSize = *destLen, inSize = *srcLen;
|
||||
*destLen = *srcLen = 0;
|
||||
*status = LZMA_STATUS_NOT_SPECIFIED;
|
||||
Lzma2Dec_Construct(&p);
|
||||
RINOK(Lzma2Dec_AllocateProbs(&p, prop, alloc));
|
||||
p.decoder.dic = dest;
|
||||
p.decoder.dicBufSize = outSize;
|
||||
Lzma2Dec_Init(&p);
|
||||
*srcLen = inSize;
|
||||
res = Lzma2Dec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status);
|
||||
*destLen = p.decoder.dicPos;
|
||||
if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT)
|
||||
res = SZ_ERROR_INPUT_EOF;
|
||||
Lzma2Dec_FreeProbs(&p, alloc);
|
||||
return res;
|
||||
}
|
||||
120
3rdparty/7z/Lzma2Dec.h
vendored
120
3rdparty/7z/Lzma2Dec.h
vendored
|
|
@ -1,120 +0,0 @@
|
|||
/* Lzma2Dec.h -- LZMA2 Decoder
|
||||
2018-02-19 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __LZMA2_DEC_H
|
||||
#define __LZMA2_DEC_H
|
||||
|
||||
#include "LzmaDec.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
/* ---------- State Interface ---------- */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned state;
|
||||
Byte control;
|
||||
Byte needInitLevel;
|
||||
Byte isExtraMode;
|
||||
Byte _pad_;
|
||||
UInt32 packSize;
|
||||
UInt32 unpackSize;
|
||||
CLzmaDec decoder;
|
||||
} CLzma2Dec;
|
||||
|
||||
#define Lzma2Dec_Construct(p) LzmaDec_Construct(&(p)->decoder)
|
||||
#define Lzma2Dec_FreeProbs(p, alloc) LzmaDec_FreeProbs(&(p)->decoder, alloc)
|
||||
#define Lzma2Dec_Free(p, alloc) LzmaDec_Free(&(p)->decoder, alloc)
|
||||
|
||||
SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc);
|
||||
SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc);
|
||||
void Lzma2Dec_Init(CLzma2Dec *p);
|
||||
|
||||
/*
|
||||
finishMode:
|
||||
It has meaning only if the decoding reaches output limit (*destLen or dicLimit).
|
||||
LZMA_FINISH_ANY - use smallest number of input bytes
|
||||
LZMA_FINISH_END - read EndOfStream marker after decoding
|
||||
|
||||
Returns:
|
||||
SZ_OK
|
||||
status:
|
||||
LZMA_STATUS_FINISHED_WITH_MARK
|
||||
LZMA_STATUS_NOT_FINISHED
|
||||
LZMA_STATUS_NEEDS_MORE_INPUT
|
||||
SZ_ERROR_DATA - Data error
|
||||
*/
|
||||
|
||||
SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit,
|
||||
const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
|
||||
|
||||
SRes Lzma2Dec_DecodeToBuf(CLzma2Dec *p, Byte *dest, SizeT *destLen,
|
||||
const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
|
||||
|
||||
|
||||
/* ---------- LZMA2 block and chunk parsing ---------- */
|
||||
|
||||
/*
|
||||
Lzma2Dec_Parse() parses compressed data stream up to next independent block or next chunk data.
|
||||
It can return LZMA_STATUS_* code or LZMA2_PARSE_STATUS_* code:
|
||||
- LZMA2_PARSE_STATUS_NEW_BLOCK - there is new block, and 1 additional byte (control byte of next block header) was read from input.
|
||||
- LZMA2_PARSE_STATUS_NEW_CHUNK - there is new chunk, and only lzma2 header of new chunk was read.
|
||||
CLzma2Dec::unpackSize contains unpack size of that chunk
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
/*
|
||||
LZMA_STATUS_NOT_SPECIFIED // data error
|
||||
LZMA_STATUS_FINISHED_WITH_MARK
|
||||
LZMA_STATUS_NOT_FINISHED //
|
||||
LZMA_STATUS_NEEDS_MORE_INPUT
|
||||
LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK // unused
|
||||
*/
|
||||
LZMA2_PARSE_STATUS_NEW_BLOCK = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + 1,
|
||||
LZMA2_PARSE_STATUS_NEW_CHUNK
|
||||
} ELzma2ParseStatus;
|
||||
|
||||
ELzma2ParseStatus Lzma2Dec_Parse(CLzma2Dec *p,
|
||||
SizeT outSize, // output size
|
||||
const Byte *src, SizeT *srcLen,
|
||||
int checkFinishBlock // set (checkFinishBlock = 1), if it must read full input data, if decoder.dicPos reaches blockMax position.
|
||||
);
|
||||
|
||||
/*
|
||||
LZMA2 parser doesn't decode LZMA chunks, so we must read
|
||||
full input LZMA chunk to decode some part of LZMA chunk.
|
||||
|
||||
Lzma2Dec_GetUnpackExtra() returns the value that shows
|
||||
max possible number of output bytes that can be output by decoder
|
||||
at current input positon.
|
||||
*/
|
||||
|
||||
#define Lzma2Dec_GetUnpackExtra(p) ((p)->isExtraMode ? (p)->unpackSize : 0);
|
||||
|
||||
|
||||
/* ---------- One Call Interface ---------- */
|
||||
|
||||
/*
|
||||
finishMode:
|
||||
It has meaning only if the decoding reaches output limit (*destLen).
|
||||
LZMA_FINISH_ANY - use smallest number of input bytes
|
||||
LZMA_FINISH_END - read EndOfStream marker after decoding
|
||||
|
||||
Returns:
|
||||
SZ_OK
|
||||
status:
|
||||
LZMA_STATUS_FINISHED_WITH_MARK
|
||||
LZMA_STATUS_NOT_FINISHED
|
||||
SZ_ERROR_DATA - Data error
|
||||
SZ_ERROR_MEM - Memory allocation error
|
||||
SZ_ERROR_UNSUPPORTED - Unsupported properties
|
||||
SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
|
||||
*/
|
||||
|
||||
SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
|
||||
Byte prop, ELzmaFinishMode finishMode, ELzmaStatus *status, ISzAllocPtr alloc);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
1082
3rdparty/7z/Lzma2DecMt.c
vendored
1082
3rdparty/7z/Lzma2DecMt.c
vendored
File diff suppressed because it is too large
Load diff
79
3rdparty/7z/Lzma2DecMt.h
vendored
79
3rdparty/7z/Lzma2DecMt.h
vendored
|
|
@ -1,79 +0,0 @@
|
|||
/* Lzma2DecMt.h -- LZMA2 Decoder Multi-thread
|
||||
2018-02-17 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __LZMA2_DEC_MT_H
|
||||
#define __LZMA2_DEC_MT_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
typedef struct
|
||||
{
|
||||
size_t inBufSize_ST;
|
||||
size_t outStep_ST;
|
||||
|
||||
#ifndef _7ZIP_ST
|
||||
unsigned numThreads;
|
||||
size_t inBufSize_MT;
|
||||
size_t outBlockMax;
|
||||
size_t inBlockMax;
|
||||
#endif
|
||||
} CLzma2DecMtProps;
|
||||
|
||||
/* init to single-thread mode */
|
||||
void Lzma2DecMtProps_Init(CLzma2DecMtProps *p);
|
||||
|
||||
|
||||
/* ---------- CLzma2DecMtHandle Interface ---------- */
|
||||
|
||||
/* Lzma2DecMt_ * functions can return the following exit codes:
|
||||
SRes:
|
||||
SZ_OK - OK
|
||||
SZ_ERROR_MEM - Memory allocation error
|
||||
SZ_ERROR_PARAM - Incorrect paramater in props
|
||||
SZ_ERROR_WRITE - ISeqOutStream write callback error
|
||||
// SZ_ERROR_OUTPUT_EOF - output buffer overflow - version with (Byte *) output
|
||||
SZ_ERROR_PROGRESS - some break from progress callback
|
||||
SZ_ERROR_THREAD - error in multithreading functions (only for Mt version)
|
||||
*/
|
||||
|
||||
typedef void * CLzma2DecMtHandle;
|
||||
|
||||
CLzma2DecMtHandle Lzma2DecMt_Create(ISzAllocPtr alloc, ISzAllocPtr allocMid);
|
||||
void Lzma2DecMt_Destroy(CLzma2DecMtHandle p);
|
||||
|
||||
SRes Lzma2DecMt_Decode(CLzma2DecMtHandle p,
|
||||
Byte prop,
|
||||
const CLzma2DecMtProps *props,
|
||||
ISeqOutStream *outStream,
|
||||
const UInt64 *outDataSize, // NULL means undefined
|
||||
int finishMode, // 0 - partial unpacking is allowed, 1 - if lzma2 stream must be finished
|
||||
// Byte *outBuf, size_t *outBufSize,
|
||||
ISeqInStream *inStream,
|
||||
// const Byte *inData, size_t inDataSize,
|
||||
|
||||
// out variables:
|
||||
UInt64 *inProcessed,
|
||||
int *isMT, /* out: (*isMT == 0), if single thread decoding was used */
|
||||
|
||||
// UInt64 *outProcessed,
|
||||
ICompressProgress *progress);
|
||||
|
||||
|
||||
/* ---------- Read from CLzma2DecMtHandle Interface ---------- */
|
||||
|
||||
SRes Lzma2DecMt_Init(CLzma2DecMtHandle pp,
|
||||
Byte prop,
|
||||
const CLzma2DecMtProps *props,
|
||||
const UInt64 *outDataSize, int finishMode,
|
||||
ISeqInStream *inStream);
|
||||
|
||||
SRes Lzma2DecMt_Read(CLzma2DecMtHandle pp,
|
||||
Byte *data, size_t *outSize,
|
||||
UInt64 *inStreamProcessed);
|
||||
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
803
3rdparty/7z/Lzma2Enc.c
vendored
803
3rdparty/7z/Lzma2Enc.c
vendored
|
|
@ -1,803 +0,0 @@
|
|||
/* Lzma2Enc.c -- LZMA2 Encoder
|
||||
2018-07-04 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/* #define _7ZIP_ST */
|
||||
|
||||
#include "Lzma2Enc.h"
|
||||
|
||||
#ifndef _7ZIP_ST
|
||||
#include "MtCoder.h"
|
||||
#else
|
||||
#define MTCODER__THREADS_MAX 1
|
||||
#endif
|
||||
|
||||
#define LZMA2_CONTROL_LZMA (1 << 7)
|
||||
#define LZMA2_CONTROL_COPY_NO_RESET 2
|
||||
#define LZMA2_CONTROL_COPY_RESET_DIC 1
|
||||
#define LZMA2_CONTROL_EOF 0
|
||||
|
||||
#define LZMA2_LCLP_MAX 4
|
||||
|
||||
#define LZMA2_DIC_SIZE_FROM_PROP(p) (((UInt32)2 | ((p) & 1)) << ((p) / 2 + 11))
|
||||
|
||||
#define LZMA2_PACK_SIZE_MAX (1 << 16)
|
||||
#define LZMA2_COPY_CHUNK_SIZE LZMA2_PACK_SIZE_MAX
|
||||
#define LZMA2_UNPACK_SIZE_MAX (1 << 21)
|
||||
#define LZMA2_KEEP_WINDOW_SIZE LZMA2_UNPACK_SIZE_MAX
|
||||
|
||||
#define LZMA2_CHUNK_SIZE_COMPRESSED_MAX ((1 << 16) + 16)
|
||||
|
||||
|
||||
#define PRF(x) /* x */
|
||||
|
||||
|
||||
/* ---------- CLimitedSeqInStream ---------- */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ISeqInStream vt;
|
||||
ISeqInStream *realStream;
|
||||
UInt64 limit;
|
||||
UInt64 processed;
|
||||
int finished;
|
||||
} CLimitedSeqInStream;
|
||||
|
||||
static void LimitedSeqInStream_Init(CLimitedSeqInStream *p)
|
||||
{
|
||||
p->limit = (UInt64)(Int64)-1;
|
||||
p->processed = 0;
|
||||
p->finished = 0;
|
||||
}
|
||||
|
||||
static SRes LimitedSeqInStream_Read(const ISeqInStream *pp, void *data, size_t *size)
|
||||
{
|
||||
CLimitedSeqInStream *p = CONTAINER_FROM_VTBL(pp, CLimitedSeqInStream, vt);
|
||||
size_t size2 = *size;
|
||||
SRes res = SZ_OK;
|
||||
|
||||
if (p->limit != (UInt64)(Int64)-1)
|
||||
{
|
||||
UInt64 rem = p->limit - p->processed;
|
||||
if (size2 > rem)
|
||||
size2 = (size_t)rem;
|
||||
}
|
||||
if (size2 != 0)
|
||||
{
|
||||
res = ISeqInStream_Read(p->realStream, data, &size2);
|
||||
p->finished = (size2 == 0 ? 1 : 0);
|
||||
p->processed += size2;
|
||||
}
|
||||
*size = size2;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
/* ---------- CLzma2EncInt ---------- */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
CLzmaEncHandle enc;
|
||||
Byte propsAreSet;
|
||||
Byte propsByte;
|
||||
Byte needInitState;
|
||||
Byte needInitProp;
|
||||
UInt64 srcPos;
|
||||
} CLzma2EncInt;
|
||||
|
||||
|
||||
static SRes Lzma2EncInt_InitStream(CLzma2EncInt *p, const CLzma2EncProps *props)
|
||||
{
|
||||
if (!p->propsAreSet)
|
||||
{
|
||||
SizeT propsSize = LZMA_PROPS_SIZE;
|
||||
Byte propsEncoded[LZMA_PROPS_SIZE];
|
||||
RINOK(LzmaEnc_SetProps(p->enc, &props->lzmaProps));
|
||||
RINOK(LzmaEnc_WriteProperties(p->enc, propsEncoded, &propsSize));
|
||||
p->propsByte = propsEncoded[0];
|
||||
p->propsAreSet = True;
|
||||
}
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
static void Lzma2EncInt_InitBlock(CLzma2EncInt *p)
|
||||
{
|
||||
p->srcPos = 0;
|
||||
p->needInitState = True;
|
||||
p->needInitProp = True;
|
||||
}
|
||||
|
||||
|
||||
SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp, ISeqInStream *inStream, UInt32 keepWindowSize,
|
||||
ISzAllocPtr alloc, ISzAllocPtr allocBig);
|
||||
SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen,
|
||||
UInt32 keepWindowSize, ISzAllocPtr alloc, ISzAllocPtr allocBig);
|
||||
SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, BoolInt reInit,
|
||||
Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize);
|
||||
const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp);
|
||||
void LzmaEnc_Finish(CLzmaEncHandle pp);
|
||||
void LzmaEnc_SaveState(CLzmaEncHandle pp);
|
||||
void LzmaEnc_RestoreState(CLzmaEncHandle pp);
|
||||
|
||||
/*
|
||||
UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle pp);
|
||||
*/
|
||||
|
||||
static SRes Lzma2EncInt_EncodeSubblock(CLzma2EncInt *p, Byte *outBuf,
|
||||
size_t *packSizeRes, ISeqOutStream *outStream)
|
||||
{
|
||||
size_t packSizeLimit = *packSizeRes;
|
||||
size_t packSize = packSizeLimit;
|
||||
UInt32 unpackSize = LZMA2_UNPACK_SIZE_MAX;
|
||||
unsigned lzHeaderSize = 5 + (p->needInitProp ? 1 : 0);
|
||||
BoolInt useCopyBlock;
|
||||
SRes res;
|
||||
|
||||
*packSizeRes = 0;
|
||||
if (packSize < lzHeaderSize)
|
||||
return SZ_ERROR_OUTPUT_EOF;
|
||||
packSize -= lzHeaderSize;
|
||||
|
||||
LzmaEnc_SaveState(p->enc);
|
||||
res = LzmaEnc_CodeOneMemBlock(p->enc, p->needInitState,
|
||||
outBuf + lzHeaderSize, &packSize, LZMA2_PACK_SIZE_MAX, &unpackSize);
|
||||
|
||||
PRF(printf("\npackSize = %7d unpackSize = %7d ", packSize, unpackSize));
|
||||
|
||||
if (unpackSize == 0)
|
||||
return res;
|
||||
|
||||
if (res == SZ_OK)
|
||||
useCopyBlock = (packSize + 2 >= unpackSize || packSize > (1 << 16));
|
||||
else
|
||||
{
|
||||
if (res != SZ_ERROR_OUTPUT_EOF)
|
||||
return res;
|
||||
res = SZ_OK;
|
||||
useCopyBlock = True;
|
||||
}
|
||||
|
||||
if (useCopyBlock)
|
||||
{
|
||||
size_t destPos = 0;
|
||||
PRF(printf("################# COPY "));
|
||||
|
||||
while (unpackSize > 0)
|
||||
{
|
||||
UInt32 u = (unpackSize < LZMA2_COPY_CHUNK_SIZE) ? unpackSize : LZMA2_COPY_CHUNK_SIZE;
|
||||
if (packSizeLimit - destPos < u + 3)
|
||||
return SZ_ERROR_OUTPUT_EOF;
|
||||
outBuf[destPos++] = (Byte)(p->srcPos == 0 ? LZMA2_CONTROL_COPY_RESET_DIC : LZMA2_CONTROL_COPY_NO_RESET);
|
||||
outBuf[destPos++] = (Byte)((u - 1) >> 8);
|
||||
outBuf[destPos++] = (Byte)(u - 1);
|
||||
memcpy(outBuf + destPos, LzmaEnc_GetCurBuf(p->enc) - unpackSize, u);
|
||||
unpackSize -= u;
|
||||
destPos += u;
|
||||
p->srcPos += u;
|
||||
|
||||
if (outStream)
|
||||
{
|
||||
*packSizeRes += destPos;
|
||||
if (ISeqOutStream_Write(outStream, outBuf, destPos) != destPos)
|
||||
return SZ_ERROR_WRITE;
|
||||
destPos = 0;
|
||||
}
|
||||
else
|
||||
*packSizeRes = destPos;
|
||||
/* needInitState = True; */
|
||||
}
|
||||
|
||||
LzmaEnc_RestoreState(p->enc);
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
{
|
||||
size_t destPos = 0;
|
||||
UInt32 u = unpackSize - 1;
|
||||
UInt32 pm = (UInt32)(packSize - 1);
|
||||
unsigned mode = (p->srcPos == 0) ? 3 : (p->needInitState ? (p->needInitProp ? 2 : 1) : 0);
|
||||
|
||||
PRF(printf(" "));
|
||||
|
||||
outBuf[destPos++] = (Byte)(LZMA2_CONTROL_LZMA | (mode << 5) | ((u >> 16) & 0x1F));
|
||||
outBuf[destPos++] = (Byte)(u >> 8);
|
||||
outBuf[destPos++] = (Byte)u;
|
||||
outBuf[destPos++] = (Byte)(pm >> 8);
|
||||
outBuf[destPos++] = (Byte)pm;
|
||||
|
||||
if (p->needInitProp)
|
||||
outBuf[destPos++] = p->propsByte;
|
||||
|
||||
p->needInitProp = False;
|
||||
p->needInitState = False;
|
||||
destPos += packSize;
|
||||
p->srcPos += unpackSize;
|
||||
|
||||
if (outStream)
|
||||
if (ISeqOutStream_Write(outStream, outBuf, destPos) != destPos)
|
||||
return SZ_ERROR_WRITE;
|
||||
|
||||
*packSizeRes = destPos;
|
||||
return SZ_OK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* ---------- Lzma2 Props ---------- */
|
||||
|
||||
void Lzma2EncProps_Init(CLzma2EncProps *p)
|
||||
{
|
||||
LzmaEncProps_Init(&p->lzmaProps);
|
||||
p->blockSize = LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO;
|
||||
p->numBlockThreads_Reduced = -1;
|
||||
p->numBlockThreads_Max = -1;
|
||||
p->numTotalThreads = -1;
|
||||
}
|
||||
|
||||
void Lzma2EncProps_Normalize(CLzma2EncProps *p)
|
||||
{
|
||||
UInt64 fileSize;
|
||||
int t1, t1n, t2, t2r, t3;
|
||||
{
|
||||
CLzmaEncProps lzmaProps = p->lzmaProps;
|
||||
LzmaEncProps_Normalize(&lzmaProps);
|
||||
t1n = lzmaProps.numThreads;
|
||||
}
|
||||
|
||||
t1 = p->lzmaProps.numThreads;
|
||||
t2 = p->numBlockThreads_Max;
|
||||
t3 = p->numTotalThreads;
|
||||
|
||||
if (t2 > MTCODER__THREADS_MAX)
|
||||
t2 = MTCODER__THREADS_MAX;
|
||||
|
||||
if (t3 <= 0)
|
||||
{
|
||||
if (t2 <= 0)
|
||||
t2 = 1;
|
||||
t3 = t1n * t2;
|
||||
}
|
||||
else if (t2 <= 0)
|
||||
{
|
||||
t2 = t3 / t1n;
|
||||
if (t2 == 0)
|
||||
{
|
||||
t1 = 1;
|
||||
t2 = t3;
|
||||
}
|
||||
if (t2 > MTCODER__THREADS_MAX)
|
||||
t2 = MTCODER__THREADS_MAX;
|
||||
}
|
||||
else if (t1 <= 0)
|
||||
{
|
||||
t1 = t3 / t2;
|
||||
if (t1 == 0)
|
||||
t1 = 1;
|
||||
}
|
||||
else
|
||||
t3 = t1n * t2;
|
||||
|
||||
p->lzmaProps.numThreads = t1;
|
||||
|
||||
t2r = t2;
|
||||
|
||||
fileSize = p->lzmaProps.reduceSize;
|
||||
|
||||
if ( p->blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID
|
||||
&& p->blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO
|
||||
&& (p->blockSize < fileSize || fileSize == (UInt64)(Int64)-1))
|
||||
p->lzmaProps.reduceSize = p->blockSize;
|
||||
|
||||
LzmaEncProps_Normalize(&p->lzmaProps);
|
||||
|
||||
p->lzmaProps.reduceSize = fileSize;
|
||||
|
||||
t1 = p->lzmaProps.numThreads;
|
||||
|
||||
if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID)
|
||||
{
|
||||
t2r = t2 = 1;
|
||||
t3 = t1;
|
||||
}
|
||||
else if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO && t2 <= 1)
|
||||
{
|
||||
/* if there is no block multi-threading, we use SOLID block */
|
||||
p->blockSize = LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO)
|
||||
{
|
||||
const UInt32 kMinSize = (UInt32)1 << 20;
|
||||
const UInt32 kMaxSize = (UInt32)1 << 28;
|
||||
const UInt32 dictSize = p->lzmaProps.dictSize;
|
||||
UInt64 blockSize = (UInt64)dictSize << 2;
|
||||
if (blockSize < kMinSize) blockSize = kMinSize;
|
||||
if (blockSize > kMaxSize) blockSize = kMaxSize;
|
||||
if (blockSize < dictSize) blockSize = dictSize;
|
||||
blockSize += (kMinSize - 1);
|
||||
blockSize &= ~(UInt64)(kMinSize - 1);
|
||||
p->blockSize = blockSize;
|
||||
}
|
||||
|
||||
if (t2 > 1 && fileSize != (UInt64)(Int64)-1)
|
||||
{
|
||||
UInt64 numBlocks = fileSize / p->blockSize;
|
||||
if (numBlocks * p->blockSize != fileSize)
|
||||
numBlocks++;
|
||||
if (numBlocks < (unsigned)t2)
|
||||
{
|
||||
t2r = (unsigned)numBlocks;
|
||||
if (t2r == 0)
|
||||
t2r = 1;
|
||||
t3 = t1 * t2r;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p->numBlockThreads_Max = t2;
|
||||
p->numBlockThreads_Reduced = t2r;
|
||||
p->numTotalThreads = t3;
|
||||
}
|
||||
|
||||
|
||||
static SRes Progress(ICompressProgress *p, UInt64 inSize, UInt64 outSize)
|
||||
{
|
||||
return (p && ICompressProgress_Progress(p, inSize, outSize) != SZ_OK) ? SZ_ERROR_PROGRESS : SZ_OK;
|
||||
}
|
||||
|
||||
|
||||
/* ---------- Lzma2 ---------- */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Byte propEncoded;
|
||||
CLzma2EncProps props;
|
||||
UInt64 expectedDataSize;
|
||||
|
||||
Byte *tempBufLzma;
|
||||
|
||||
ISzAllocPtr alloc;
|
||||
ISzAllocPtr allocBig;
|
||||
|
||||
CLzma2EncInt coders[MTCODER__THREADS_MAX];
|
||||
|
||||
#ifndef _7ZIP_ST
|
||||
|
||||
ISeqOutStream *outStream;
|
||||
Byte *outBuf;
|
||||
size_t outBuf_Rem; /* remainder in outBuf */
|
||||
|
||||
size_t outBufSize; /* size of allocated outBufs[i] */
|
||||
size_t outBufsDataSizes[MTCODER__BLOCKS_MAX];
|
||||
BoolInt mtCoder_WasConstructed;
|
||||
CMtCoder mtCoder;
|
||||
Byte *outBufs[MTCODER__BLOCKS_MAX];
|
||||
|
||||
#endif
|
||||
|
||||
} CLzma2Enc;
|
||||
|
||||
|
||||
|
||||
CLzma2EncHandle Lzma2Enc_Create(ISzAllocPtr alloc, ISzAllocPtr allocBig)
|
||||
{
|
||||
CLzma2Enc *p = (CLzma2Enc *)ISzAlloc_Alloc(alloc, sizeof(CLzma2Enc));
|
||||
if (!p)
|
||||
return NULL;
|
||||
Lzma2EncProps_Init(&p->props);
|
||||
Lzma2EncProps_Normalize(&p->props);
|
||||
p->expectedDataSize = (UInt64)(Int64)-1;
|
||||
p->tempBufLzma = NULL;
|
||||
p->alloc = alloc;
|
||||
p->allocBig = allocBig;
|
||||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < MTCODER__THREADS_MAX; i++)
|
||||
p->coders[i].enc = NULL;
|
||||
}
|
||||
|
||||
#ifndef _7ZIP_ST
|
||||
p->mtCoder_WasConstructed = False;
|
||||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < MTCODER__BLOCKS_MAX; i++)
|
||||
p->outBufs[i] = NULL;
|
||||
p->outBufSize = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
#ifndef _7ZIP_ST
|
||||
|
||||
static void Lzma2Enc_FreeOutBufs(CLzma2Enc *p)
|
||||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < MTCODER__BLOCKS_MAX; i++)
|
||||
if (p->outBufs[i])
|
||||
{
|
||||
ISzAlloc_Free(p->alloc, p->outBufs[i]);
|
||||
p->outBufs[i] = NULL;
|
||||
}
|
||||
p->outBufSize = 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
void Lzma2Enc_Destroy(CLzma2EncHandle pp)
|
||||
{
|
||||
CLzma2Enc *p = (CLzma2Enc *)pp;
|
||||
unsigned i;
|
||||
for (i = 0; i < MTCODER__THREADS_MAX; i++)
|
||||
{
|
||||
CLzma2EncInt *t = &p->coders[i];
|
||||
if (t->enc)
|
||||
{
|
||||
LzmaEnc_Destroy(t->enc, p->alloc, p->allocBig);
|
||||
t->enc = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifndef _7ZIP_ST
|
||||
if (p->mtCoder_WasConstructed)
|
||||
{
|
||||
MtCoder_Destruct(&p->mtCoder);
|
||||
p->mtCoder_WasConstructed = False;
|
||||
}
|
||||
Lzma2Enc_FreeOutBufs(p);
|
||||
#endif
|
||||
|
||||
ISzAlloc_Free(p->alloc, p->tempBufLzma);
|
||||
p->tempBufLzma = NULL;
|
||||
|
||||
ISzAlloc_Free(p->alloc, pp);
|
||||
}
|
||||
|
||||
|
||||
SRes Lzma2Enc_SetProps(CLzma2EncHandle pp, const CLzma2EncProps *props)
|
||||
{
|
||||
CLzma2Enc *p = (CLzma2Enc *)pp;
|
||||
CLzmaEncProps lzmaProps = props->lzmaProps;
|
||||
LzmaEncProps_Normalize(&lzmaProps);
|
||||
if (lzmaProps.lc + lzmaProps.lp > LZMA2_LCLP_MAX)
|
||||
return SZ_ERROR_PARAM;
|
||||
p->props = *props;
|
||||
Lzma2EncProps_Normalize(&p->props);
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
|
||||
void Lzma2Enc_SetDataSize(CLzmaEncHandle pp, UInt64 expectedDataSiize)
|
||||
{
|
||||
CLzma2Enc *p = (CLzma2Enc *)pp;
|
||||
p->expectedDataSize = expectedDataSiize;
|
||||
}
|
||||
|
||||
|
||||
Byte Lzma2Enc_WriteProperties(CLzma2EncHandle pp)
|
||||
{
|
||||
CLzma2Enc *p = (CLzma2Enc *)pp;
|
||||
unsigned i;
|
||||
UInt32 dicSize = LzmaEncProps_GetDictSize(&p->props.lzmaProps);
|
||||
for (i = 0; i < 40; i++)
|
||||
if (dicSize <= LZMA2_DIC_SIZE_FROM_PROP(i))
|
||||
break;
|
||||
return (Byte)i;
|
||||
}
|
||||
|
||||
|
||||
static SRes Lzma2Enc_EncodeMt1(
|
||||
CLzma2Enc *me,
|
||||
CLzma2EncInt *p,
|
||||
ISeqOutStream *outStream,
|
||||
Byte *outBuf, size_t *outBufSize,
|
||||
ISeqInStream *inStream,
|
||||
const Byte *inData, size_t inDataSize,
|
||||
int finished,
|
||||
ICompressProgress *progress)
|
||||
{
|
||||
UInt64 unpackTotal = 0;
|
||||
UInt64 packTotal = 0;
|
||||
size_t outLim = 0;
|
||||
CLimitedSeqInStream limitedInStream;
|
||||
|
||||
if (outBuf)
|
||||
{
|
||||
outLim = *outBufSize;
|
||||
*outBufSize = 0;
|
||||
}
|
||||
|
||||
if (!p->enc)
|
||||
{
|
||||
p->propsAreSet = False;
|
||||
p->enc = LzmaEnc_Create(me->alloc);
|
||||
if (!p->enc)
|
||||
return SZ_ERROR_MEM;
|
||||
}
|
||||
|
||||
limitedInStream.realStream = inStream;
|
||||
if (inStream)
|
||||
{
|
||||
limitedInStream.vt.Read = LimitedSeqInStream_Read;
|
||||
}
|
||||
|
||||
if (!outBuf)
|
||||
{
|
||||
// outStream version works only in one thread. So we use CLzma2Enc::tempBufLzma
|
||||
if (!me->tempBufLzma)
|
||||
{
|
||||
me->tempBufLzma = (Byte *)ISzAlloc_Alloc(me->alloc, LZMA2_CHUNK_SIZE_COMPRESSED_MAX);
|
||||
if (!me->tempBufLzma)
|
||||
return SZ_ERROR_MEM;
|
||||
}
|
||||
}
|
||||
|
||||
RINOK(Lzma2EncInt_InitStream(p, &me->props));
|
||||
|
||||
for (;;)
|
||||
{
|
||||
SRes res = SZ_OK;
|
||||
size_t inSizeCur = 0;
|
||||
|
||||
Lzma2EncInt_InitBlock(p);
|
||||
|
||||
LimitedSeqInStream_Init(&limitedInStream);
|
||||
limitedInStream.limit = me->props.blockSize;
|
||||
|
||||
if (inStream)
|
||||
{
|
||||
UInt64 expected = (UInt64)(Int64)-1;
|
||||
// inStream version works only in one thread. So we use CLzma2Enc::expectedDataSize
|
||||
if (me->expectedDataSize != (UInt64)(Int64)-1
|
||||
&& me->expectedDataSize >= unpackTotal)
|
||||
expected = me->expectedDataSize - unpackTotal;
|
||||
if (me->props.blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID
|
||||
&& expected > me->props.blockSize)
|
||||
expected = (size_t)me->props.blockSize;
|
||||
|
||||
LzmaEnc_SetDataSize(p->enc, expected);
|
||||
|
||||
RINOK(LzmaEnc_PrepareForLzma2(p->enc,
|
||||
&limitedInStream.vt,
|
||||
LZMA2_KEEP_WINDOW_SIZE,
|
||||
me->alloc,
|
||||
me->allocBig));
|
||||
}
|
||||
else
|
||||
{
|
||||
inSizeCur = inDataSize - (size_t)unpackTotal;
|
||||
if (me->props.blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID
|
||||
&& inSizeCur > me->props.blockSize)
|
||||
inSizeCur = (size_t)me->props.blockSize;
|
||||
|
||||
// LzmaEnc_SetDataSize(p->enc, inSizeCur);
|
||||
|
||||
RINOK(LzmaEnc_MemPrepare(p->enc,
|
||||
inData + (size_t)unpackTotal, inSizeCur,
|
||||
LZMA2_KEEP_WINDOW_SIZE,
|
||||
me->alloc,
|
||||
me->allocBig));
|
||||
}
|
||||
|
||||
for (;;)
|
||||
{
|
||||
size_t packSize = LZMA2_CHUNK_SIZE_COMPRESSED_MAX;
|
||||
if (outBuf)
|
||||
packSize = outLim - (size_t)packTotal;
|
||||
|
||||
res = Lzma2EncInt_EncodeSubblock(p,
|
||||
outBuf ? outBuf + (size_t)packTotal : me->tempBufLzma, &packSize,
|
||||
outBuf ? NULL : outStream);
|
||||
|
||||
if (res != SZ_OK)
|
||||
break;
|
||||
|
||||
packTotal += packSize;
|
||||
if (outBuf)
|
||||
*outBufSize = (size_t)packTotal;
|
||||
|
||||
res = Progress(progress, unpackTotal + p->srcPos, packTotal);
|
||||
if (res != SZ_OK)
|
||||
break;
|
||||
|
||||
/*
|
||||
if (LzmaEnc_GetNumAvailableBytes(p->enc) == 0)
|
||||
break;
|
||||
*/
|
||||
|
||||
if (packSize == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
LzmaEnc_Finish(p->enc);
|
||||
|
||||
unpackTotal += p->srcPos;
|
||||
|
||||
RINOK(res);
|
||||
|
||||
if (p->srcPos != (inStream ? limitedInStream.processed : inSizeCur))
|
||||
return SZ_ERROR_FAIL;
|
||||
|
||||
if (inStream ? limitedInStream.finished : (unpackTotal == inDataSize))
|
||||
{
|
||||
if (finished)
|
||||
{
|
||||
if (outBuf)
|
||||
{
|
||||
size_t destPos = *outBufSize;
|
||||
if (destPos >= outLim)
|
||||
return SZ_ERROR_OUTPUT_EOF;
|
||||
outBuf[destPos] = 0;
|
||||
*outBufSize = destPos + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
Byte b = 0;
|
||||
if (ISeqOutStream_Write(outStream, &b, 1) != 1)
|
||||
return SZ_ERROR_WRITE;
|
||||
}
|
||||
}
|
||||
return SZ_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifndef _7ZIP_ST
|
||||
|
||||
static SRes Lzma2Enc_MtCallback_Code(void *pp, unsigned coderIndex, unsigned outBufIndex,
|
||||
const Byte *src, size_t srcSize, int finished)
|
||||
{
|
||||
CLzma2Enc *me = (CLzma2Enc *)pp;
|
||||
size_t destSize = me->outBufSize;
|
||||
SRes res;
|
||||
CMtProgressThunk progressThunk;
|
||||
|
||||
Byte *dest = me->outBufs[outBufIndex];
|
||||
|
||||
me->outBufsDataSizes[outBufIndex] = 0;
|
||||
|
||||
if (!dest)
|
||||
{
|
||||
dest = (Byte *)ISzAlloc_Alloc(me->alloc, me->outBufSize);
|
||||
if (!dest)
|
||||
return SZ_ERROR_MEM;
|
||||
me->outBufs[outBufIndex] = dest;
|
||||
}
|
||||
|
||||
MtProgressThunk_CreateVTable(&progressThunk);
|
||||
progressThunk.mtProgress = &me->mtCoder.mtProgress;
|
||||
progressThunk.inSize = 0;
|
||||
progressThunk.outSize = 0;
|
||||
|
||||
res = Lzma2Enc_EncodeMt1(me,
|
||||
&me->coders[coderIndex],
|
||||
NULL, dest, &destSize,
|
||||
NULL, src, srcSize,
|
||||
finished,
|
||||
&progressThunk.vt);
|
||||
|
||||
me->outBufsDataSizes[outBufIndex] = destSize;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
static SRes Lzma2Enc_MtCallback_Write(void *pp, unsigned outBufIndex)
|
||||
{
|
||||
CLzma2Enc *me = (CLzma2Enc *)pp;
|
||||
size_t size = me->outBufsDataSizes[outBufIndex];
|
||||
const Byte *data = me->outBufs[outBufIndex];
|
||||
|
||||
if (me->outStream)
|
||||
return ISeqOutStream_Write(me->outStream, data, size) == size ? SZ_OK : SZ_ERROR_WRITE;
|
||||
|
||||
if (size > me->outBuf_Rem)
|
||||
return SZ_ERROR_OUTPUT_EOF;
|
||||
memcpy(me->outBuf, data, size);
|
||||
me->outBuf_Rem -= size;
|
||||
me->outBuf += size;
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
SRes Lzma2Enc_Encode2(CLzma2EncHandle pp,
|
||||
ISeqOutStream *outStream,
|
||||
Byte *outBuf, size_t *outBufSize,
|
||||
ISeqInStream *inStream,
|
||||
const Byte *inData, size_t inDataSize,
|
||||
ICompressProgress *progress)
|
||||
{
|
||||
CLzma2Enc *p = (CLzma2Enc *)pp;
|
||||
|
||||
if (inStream && inData)
|
||||
return SZ_ERROR_PARAM;
|
||||
|
||||
if (outStream && outBuf)
|
||||
return SZ_ERROR_PARAM;
|
||||
|
||||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < MTCODER__THREADS_MAX; i++)
|
||||
p->coders[i].propsAreSet = False;
|
||||
}
|
||||
|
||||
#ifndef _7ZIP_ST
|
||||
|
||||
if (p->props.numBlockThreads_Reduced > 1)
|
||||
{
|
||||
IMtCoderCallback2 vt;
|
||||
|
||||
if (!p->mtCoder_WasConstructed)
|
||||
{
|
||||
p->mtCoder_WasConstructed = True;
|
||||
MtCoder_Construct(&p->mtCoder);
|
||||
}
|
||||
|
||||
vt.Code = Lzma2Enc_MtCallback_Code;
|
||||
vt.Write = Lzma2Enc_MtCallback_Write;
|
||||
|
||||
p->outStream = outStream;
|
||||
p->outBuf = NULL;
|
||||
p->outBuf_Rem = 0;
|
||||
if (!outStream)
|
||||
{
|
||||
p->outBuf = outBuf;
|
||||
p->outBuf_Rem = *outBufSize;
|
||||
*outBufSize = 0;
|
||||
}
|
||||
|
||||
p->mtCoder.allocBig = p->allocBig;
|
||||
p->mtCoder.progress = progress;
|
||||
p->mtCoder.inStream = inStream;
|
||||
p->mtCoder.inData = inData;
|
||||
p->mtCoder.inDataSize = inDataSize;
|
||||
p->mtCoder.mtCallback = &vt;
|
||||
p->mtCoder.mtCallbackObject = p;
|
||||
|
||||
p->mtCoder.blockSize = (size_t)p->props.blockSize;
|
||||
if (p->mtCoder.blockSize != p->props.blockSize)
|
||||
return SZ_ERROR_PARAM; /* SZ_ERROR_MEM */
|
||||
|
||||
{
|
||||
size_t destBlockSize = p->mtCoder.blockSize + (p->mtCoder.blockSize >> 10) + 16;
|
||||
if (destBlockSize < p->mtCoder.blockSize)
|
||||
return SZ_ERROR_PARAM;
|
||||
if (p->outBufSize != destBlockSize)
|
||||
Lzma2Enc_FreeOutBufs(p);
|
||||
p->outBufSize = destBlockSize;
|
||||
}
|
||||
|
||||
p->mtCoder.numThreadsMax = p->props.numBlockThreads_Max;
|
||||
p->mtCoder.expectedDataSize = p->expectedDataSize;
|
||||
|
||||
{
|
||||
SRes res = MtCoder_Code(&p->mtCoder);
|
||||
if (!outStream)
|
||||
*outBufSize = p->outBuf - outBuf;
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
return Lzma2Enc_EncodeMt1(p,
|
||||
&p->coders[0],
|
||||
outStream, outBuf, outBufSize,
|
||||
inStream, inData, inDataSize,
|
||||
True, /* finished */
|
||||
progress);
|
||||
}
|
||||
55
3rdparty/7z/Lzma2Enc.h
vendored
55
3rdparty/7z/Lzma2Enc.h
vendored
|
|
@ -1,55 +0,0 @@
|
|||
/* Lzma2Enc.h -- LZMA2 Encoder
|
||||
2017-07-27 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __LZMA2_ENC_H
|
||||
#define __LZMA2_ENC_H
|
||||
|
||||
#include "LzmaEnc.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
#define LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO 0
|
||||
#define LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID ((UInt64)(Int64)-1)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
CLzmaEncProps lzmaProps;
|
||||
UInt64 blockSize;
|
||||
int numBlockThreads_Reduced;
|
||||
int numBlockThreads_Max;
|
||||
int numTotalThreads;
|
||||
} CLzma2EncProps;
|
||||
|
||||
void Lzma2EncProps_Init(CLzma2EncProps *p);
|
||||
void Lzma2EncProps_Normalize(CLzma2EncProps *p);
|
||||
|
||||
/* ---------- CLzmaEnc2Handle Interface ---------- */
|
||||
|
||||
/* Lzma2Enc_* functions can return the following exit codes:
|
||||
SRes:
|
||||
SZ_OK - OK
|
||||
SZ_ERROR_MEM - Memory allocation error
|
||||
SZ_ERROR_PARAM - Incorrect paramater in props
|
||||
SZ_ERROR_WRITE - ISeqOutStream write callback error
|
||||
SZ_ERROR_OUTPUT_EOF - output buffer overflow - version with (Byte *) output
|
||||
SZ_ERROR_PROGRESS - some break from progress callback
|
||||
SZ_ERROR_THREAD - error in multithreading functions (only for Mt version)
|
||||
*/
|
||||
|
||||
typedef void * CLzma2EncHandle;
|
||||
|
||||
CLzma2EncHandle Lzma2Enc_Create(ISzAllocPtr alloc, ISzAllocPtr allocBig);
|
||||
void Lzma2Enc_Destroy(CLzma2EncHandle p);
|
||||
SRes Lzma2Enc_SetProps(CLzma2EncHandle p, const CLzma2EncProps *props);
|
||||
void Lzma2Enc_SetDataSize(CLzma2EncHandle p, UInt64 expectedDataSiize);
|
||||
Byte Lzma2Enc_WriteProperties(CLzma2EncHandle p);
|
||||
SRes Lzma2Enc_Encode2(CLzma2EncHandle p,
|
||||
ISeqOutStream *outStream,
|
||||
Byte *outBuf, size_t *outBufSize,
|
||||
ISeqInStream *inStream,
|
||||
const Byte *inData, size_t inDataSize,
|
||||
ICompressProgress *progress);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
111
3rdparty/7z/Lzma86.h
vendored
111
3rdparty/7z/Lzma86.h
vendored
|
|
@ -1,111 +0,0 @@
|
|||
/* Lzma86.h -- LZMA + x86 (BCJ) Filter
|
||||
2013-01-18 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __LZMA86_H
|
||||
#define __LZMA86_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
#define LZMA86_SIZE_OFFSET (1 + 5)
|
||||
#define LZMA86_HEADER_SIZE (LZMA86_SIZE_OFFSET + 8)
|
||||
|
||||
/*
|
||||
It's an example for LZMA + x86 Filter use.
|
||||
You can use .lzma86 extension, if you write that stream to file.
|
||||
.lzma86 header adds one additional byte to standard .lzma header.
|
||||
.lzma86 header (14 bytes):
|
||||
Offset Size Description
|
||||
0 1 = 0 - no filter, pure LZMA
|
||||
= 1 - x86 filter + LZMA
|
||||
1 1 lc, lp and pb in encoded form
|
||||
2 4 dictSize (little endian)
|
||||
6 8 uncompressed size (little endian)
|
||||
|
||||
|
||||
Lzma86_Encode
|
||||
-------------
|
||||
level - compression level: 0 <= level <= 9, the default value for "level" is 5.
|
||||
|
||||
dictSize - The dictionary size in bytes. The maximum value is
|
||||
128 MB = (1 << 27) bytes for 32-bit version
|
||||
1 GB = (1 << 30) bytes for 64-bit version
|
||||
The default value is 16 MB = (1 << 24) bytes, for level = 5.
|
||||
It's recommended to use the dictionary that is larger than 4 KB and
|
||||
that can be calculated as (1 << N) or (3 << N) sizes.
|
||||
For better compression ratio dictSize must be >= inSize.
|
||||
|
||||
filterMode:
|
||||
SZ_FILTER_NO - no Filter
|
||||
SZ_FILTER_YES - x86 Filter
|
||||
SZ_FILTER_AUTO - it tries both alternatives to select best.
|
||||
Encoder will use 2 or 3 passes:
|
||||
2 passes when FILTER_NO provides better compression.
|
||||
3 passes when FILTER_YES provides better compression.
|
||||
|
||||
Lzma86Encode allocates Data with MyAlloc functions.
|
||||
RAM Requirements for compressing:
|
||||
RamSize = dictionarySize * 11.5 + 6MB + FilterBlockSize
|
||||
filterMode FilterBlockSize
|
||||
SZ_FILTER_NO 0
|
||||
SZ_FILTER_YES inSize
|
||||
SZ_FILTER_AUTO inSize
|
||||
|
||||
|
||||
Return code:
|
||||
SZ_OK - OK
|
||||
SZ_ERROR_MEM - Memory allocation error
|
||||
SZ_ERROR_PARAM - Incorrect paramater
|
||||
SZ_ERROR_OUTPUT_EOF - output buffer overflow
|
||||
SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version)
|
||||
*/
|
||||
|
||||
enum ESzFilterMode
|
||||
{
|
||||
SZ_FILTER_NO,
|
||||
SZ_FILTER_YES,
|
||||
SZ_FILTER_AUTO
|
||||
};
|
||||
|
||||
SRes Lzma86_Encode(Byte *dest, size_t *destLen, const Byte *src, size_t srcLen,
|
||||
int level, UInt32 dictSize, int filterMode);
|
||||
|
||||
|
||||
/*
|
||||
Lzma86_GetUnpackSize:
|
||||
In:
|
||||
src - input data
|
||||
srcLen - input data size
|
||||
Out:
|
||||
unpackSize - size of uncompressed stream
|
||||
Return code:
|
||||
SZ_OK - OK
|
||||
SZ_ERROR_INPUT_EOF - Error in headers
|
||||
*/
|
||||
|
||||
SRes Lzma86_GetUnpackSize(const Byte *src, SizeT srcLen, UInt64 *unpackSize);
|
||||
|
||||
/*
|
||||
Lzma86_Decode:
|
||||
In:
|
||||
dest - output data
|
||||
destLen - output data size
|
||||
src - input data
|
||||
srcLen - input data size
|
||||
Out:
|
||||
destLen - processed output size
|
||||
srcLen - processed input size
|
||||
Return code:
|
||||
SZ_OK - OK
|
||||
SZ_ERROR_DATA - Data error
|
||||
SZ_ERROR_MEM - Memory allocation error
|
||||
SZ_ERROR_UNSUPPORTED - unsupported file
|
||||
SZ_ERROR_INPUT_EOF - it needs more bytes in input buffer
|
||||
*/
|
||||
|
||||
SRes Lzma86_Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
54
3rdparty/7z/Lzma86Dec.c
vendored
54
3rdparty/7z/Lzma86Dec.c
vendored
|
|
@ -1,54 +0,0 @@
|
|||
/* Lzma86Dec.c -- LZMA + x86 (BCJ) Filter Decoder
|
||||
2016-05-16 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "Lzma86.h"
|
||||
|
||||
#include "Alloc.h"
|
||||
#include "Bra.h"
|
||||
#include "LzmaDec.h"
|
||||
|
||||
SRes Lzma86_GetUnpackSize(const Byte *src, SizeT srcLen, UInt64 *unpackSize)
|
||||
{
|
||||
unsigned i;
|
||||
if (srcLen < LZMA86_HEADER_SIZE)
|
||||
return SZ_ERROR_INPUT_EOF;
|
||||
*unpackSize = 0;
|
||||
for (i = 0; i < sizeof(UInt64); i++)
|
||||
*unpackSize += ((UInt64)src[LZMA86_SIZE_OFFSET + i]) << (8 * i);
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
SRes Lzma86_Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen)
|
||||
{
|
||||
SRes res;
|
||||
int useFilter;
|
||||
SizeT inSizePure;
|
||||
ELzmaStatus status;
|
||||
|
||||
if (*srcLen < LZMA86_HEADER_SIZE)
|
||||
return SZ_ERROR_INPUT_EOF;
|
||||
|
||||
useFilter = src[0];
|
||||
|
||||
if (useFilter > 1)
|
||||
{
|
||||
*destLen = 0;
|
||||
return SZ_ERROR_UNSUPPORTED;
|
||||
}
|
||||
|
||||
inSizePure = *srcLen - LZMA86_HEADER_SIZE;
|
||||
res = LzmaDecode(dest, destLen, src + LZMA86_HEADER_SIZE, &inSizePure,
|
||||
src + 1, LZMA_PROPS_SIZE, LZMA_FINISH_ANY, &status, &g_Alloc);
|
||||
*srcLen = inSizePure + LZMA86_HEADER_SIZE;
|
||||
if (res != SZ_OK)
|
||||
return res;
|
||||
if (useFilter == 1)
|
||||
{
|
||||
UInt32 x86State;
|
||||
x86_Convert_Init(x86State);
|
||||
x86_Convert(dest, *destLen, 0, &x86State, 0);
|
||||
}
|
||||
return SZ_OK;
|
||||
}
|
||||
106
3rdparty/7z/Lzma86Enc.c
vendored
106
3rdparty/7z/Lzma86Enc.c
vendored
|
|
@ -1,106 +0,0 @@
|
|||
/* Lzma86Enc.c -- LZMA + x86 (BCJ) Filter Encoder
|
||||
2018-07-04 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "Lzma86.h"
|
||||
|
||||
#include "Alloc.h"
|
||||
#include "Bra.h"
|
||||
#include "LzmaEnc.h"
|
||||
|
||||
#define SZE_OUT_OVERFLOW SZE_DATA_ERROR
|
||||
|
||||
int Lzma86_Encode(Byte *dest, size_t *destLen, const Byte *src, size_t srcLen,
|
||||
int level, UInt32 dictSize, int filterMode)
|
||||
{
|
||||
size_t outSize2 = *destLen;
|
||||
Byte *filteredStream;
|
||||
BoolInt useFilter;
|
||||
int mainResult = SZ_ERROR_OUTPUT_EOF;
|
||||
CLzmaEncProps props;
|
||||
LzmaEncProps_Init(&props);
|
||||
props.level = level;
|
||||
props.dictSize = dictSize;
|
||||
|
||||
*destLen = 0;
|
||||
if (outSize2 < LZMA86_HEADER_SIZE)
|
||||
return SZ_ERROR_OUTPUT_EOF;
|
||||
|
||||
{
|
||||
int i;
|
||||
UInt64 t = srcLen;
|
||||
for (i = 0; i < 8; i++, t >>= 8)
|
||||
dest[LZMA86_SIZE_OFFSET + i] = (Byte)t;
|
||||
}
|
||||
|
||||
filteredStream = 0;
|
||||
useFilter = (filterMode != SZ_FILTER_NO);
|
||||
if (useFilter)
|
||||
{
|
||||
if (srcLen != 0)
|
||||
{
|
||||
filteredStream = (Byte *)MyAlloc(srcLen);
|
||||
if (filteredStream == 0)
|
||||
return SZ_ERROR_MEM;
|
||||
memcpy(filteredStream, src, srcLen);
|
||||
}
|
||||
{
|
||||
UInt32 x86State;
|
||||
x86_Convert_Init(x86State);
|
||||
x86_Convert(filteredStream, srcLen, 0, &x86State, 1);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
size_t minSize = 0;
|
||||
BoolInt bestIsFiltered = False;
|
||||
|
||||
/* passes for SZ_FILTER_AUTO:
|
||||
0 - BCJ + LZMA
|
||||
1 - LZMA
|
||||
2 - BCJ + LZMA agaian, if pass 0 (BCJ + LZMA) is better.
|
||||
*/
|
||||
int numPasses = (filterMode == SZ_FILTER_AUTO) ? 3 : 1;
|
||||
|
||||
int i;
|
||||
for (i = 0; i < numPasses; i++)
|
||||
{
|
||||
size_t outSizeProcessed = outSize2 - LZMA86_HEADER_SIZE;
|
||||
size_t outPropsSize = 5;
|
||||
SRes curRes;
|
||||
BoolInt curModeIsFiltered = (numPasses > 1 && i == numPasses - 1);
|
||||
if (curModeIsFiltered && !bestIsFiltered)
|
||||
break;
|
||||
if (useFilter && i == 0)
|
||||
curModeIsFiltered = True;
|
||||
|
||||
curRes = LzmaEncode(dest + LZMA86_HEADER_SIZE, &outSizeProcessed,
|
||||
curModeIsFiltered ? filteredStream : src, srcLen,
|
||||
&props, dest + 1, &outPropsSize, 0,
|
||||
NULL, &g_Alloc, &g_Alloc);
|
||||
|
||||
if (curRes != SZ_ERROR_OUTPUT_EOF)
|
||||
{
|
||||
if (curRes != SZ_OK)
|
||||
{
|
||||
mainResult = curRes;
|
||||
break;
|
||||
}
|
||||
if (outSizeProcessed <= minSize || mainResult != SZ_OK)
|
||||
{
|
||||
minSize = outSizeProcessed;
|
||||
bestIsFiltered = curModeIsFiltered;
|
||||
mainResult = SZ_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
dest[0] = (Byte)(bestIsFiltered ? 1 : 0);
|
||||
*destLen = LZMA86_HEADER_SIZE + minSize;
|
||||
}
|
||||
if (useFilter)
|
||||
MyFree(filteredStream);
|
||||
return mainResult;
|
||||
}
|
||||
1185
3rdparty/7z/LzmaDec.c
vendored
1185
3rdparty/7z/LzmaDec.c
vendored
File diff suppressed because it is too large
Load diff
234
3rdparty/7z/LzmaDec.h
vendored
234
3rdparty/7z/LzmaDec.h
vendored
|
|
@ -1,234 +0,0 @@
|
|||
/* LzmaDec.h -- LZMA Decoder
|
||||
2018-04-21 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __LZMA_DEC_H
|
||||
#define __LZMA_DEC_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
/* #define _LZMA_PROB32 */
|
||||
/* _LZMA_PROB32 can increase the speed on some CPUs,
|
||||
but memory usage for CLzmaDec::probs will be doubled in that case */
|
||||
|
||||
typedef
|
||||
#ifdef _LZMA_PROB32
|
||||
UInt32
|
||||
#else
|
||||
UInt16
|
||||
#endif
|
||||
CLzmaProb;
|
||||
|
||||
|
||||
/* ---------- LZMA Properties ---------- */
|
||||
|
||||
#define LZMA_PROPS_SIZE 5
|
||||
|
||||
typedef struct _CLzmaProps
|
||||
{
|
||||
Byte lc;
|
||||
Byte lp;
|
||||
Byte pb;
|
||||
Byte _pad_;
|
||||
UInt32 dicSize;
|
||||
} CLzmaProps;
|
||||
|
||||
/* LzmaProps_Decode - decodes properties
|
||||
Returns:
|
||||
SZ_OK
|
||||
SZ_ERROR_UNSUPPORTED - Unsupported properties
|
||||
*/
|
||||
|
||||
SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size);
|
||||
|
||||
|
||||
/* ---------- LZMA Decoder state ---------- */
|
||||
|
||||
/* LZMA_REQUIRED_INPUT_MAX = number of required input bytes for worst case.
|
||||
Num bits = log2((2^11 / 31) ^ 22) + 26 < 134 + 26 = 160; */
|
||||
|
||||
#define LZMA_REQUIRED_INPUT_MAX 20
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* Don't change this structure. ASM code can use it. */
|
||||
CLzmaProps prop;
|
||||
CLzmaProb *probs;
|
||||
CLzmaProb *probs_1664;
|
||||
Byte *dic;
|
||||
SizeT dicBufSize;
|
||||
SizeT dicPos;
|
||||
const Byte *buf;
|
||||
UInt32 range;
|
||||
UInt32 code;
|
||||
UInt32 processedPos;
|
||||
UInt32 checkDicSize;
|
||||
UInt32 reps[4];
|
||||
UInt32 state;
|
||||
UInt32 remainLen;
|
||||
|
||||
UInt32 numProbs;
|
||||
unsigned tempBufSize;
|
||||
Byte tempBuf[LZMA_REQUIRED_INPUT_MAX];
|
||||
} CLzmaDec;
|
||||
|
||||
#define LzmaDec_Construct(p) { (p)->dic = NULL; (p)->probs = NULL; }
|
||||
|
||||
void LzmaDec_Init(CLzmaDec *p);
|
||||
|
||||
/* There are two types of LZMA streams:
|
||||
- Stream with end mark. That end mark adds about 6 bytes to compressed size.
|
||||
- Stream without end mark. You must know exact uncompressed size to decompress such stream. */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
LZMA_FINISH_ANY, /* finish at any point */
|
||||
LZMA_FINISH_END /* block must be finished at the end */
|
||||
} ELzmaFinishMode;
|
||||
|
||||
/* ELzmaFinishMode has meaning only if the decoding reaches output limit !!!
|
||||
|
||||
You must use LZMA_FINISH_END, when you know that current output buffer
|
||||
covers last bytes of block. In other cases you must use LZMA_FINISH_ANY.
|
||||
|
||||
If LZMA decoder sees end marker before reaching output limit, it returns SZ_OK,
|
||||
and output value of destLen will be less than output buffer size limit.
|
||||
You can check status result also.
|
||||
|
||||
You can use multiple checks to test data integrity after full decompression:
|
||||
1) Check Result and "status" variable.
|
||||
2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize.
|
||||
3) Check that output(srcLen) = compressedSize, if you know real compressedSize.
|
||||
You must use correct finish mode in that case. */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
LZMA_STATUS_NOT_SPECIFIED, /* use main error code instead */
|
||||
LZMA_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */
|
||||
LZMA_STATUS_NOT_FINISHED, /* stream was not finished */
|
||||
LZMA_STATUS_NEEDS_MORE_INPUT, /* you must provide more input bytes */
|
||||
LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK /* there is probability that stream was finished without end mark */
|
||||
} ELzmaStatus;
|
||||
|
||||
/* ELzmaStatus is used only as output value for function call */
|
||||
|
||||
|
||||
/* ---------- Interfaces ---------- */
|
||||
|
||||
/* There are 3 levels of interfaces:
|
||||
1) Dictionary Interface
|
||||
2) Buffer Interface
|
||||
3) One Call Interface
|
||||
You can select any of these interfaces, but don't mix functions from different
|
||||
groups for same object. */
|
||||
|
||||
|
||||
/* There are two variants to allocate state for Dictionary Interface:
|
||||
1) LzmaDec_Allocate / LzmaDec_Free
|
||||
2) LzmaDec_AllocateProbs / LzmaDec_FreeProbs
|
||||
You can use variant 2, if you set dictionary buffer manually.
|
||||
For Buffer Interface you must always use variant 1.
|
||||
|
||||
LzmaDec_Allocate* can return:
|
||||
SZ_OK
|
||||
SZ_ERROR_MEM - Memory allocation error
|
||||
SZ_ERROR_UNSUPPORTED - Unsupported properties
|
||||
*/
|
||||
|
||||
SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc);
|
||||
void LzmaDec_FreeProbs(CLzmaDec *p, ISzAllocPtr alloc);
|
||||
|
||||
SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc);
|
||||
void LzmaDec_Free(CLzmaDec *p, ISzAllocPtr alloc);
|
||||
|
||||
/* ---------- Dictionary Interface ---------- */
|
||||
|
||||
/* You can use it, if you want to eliminate the overhead for data copying from
|
||||
dictionary to some other external buffer.
|
||||
You must work with CLzmaDec variables directly in this interface.
|
||||
|
||||
STEPS:
|
||||
LzmaDec_Construct()
|
||||
LzmaDec_Allocate()
|
||||
for (each new stream)
|
||||
{
|
||||
LzmaDec_Init()
|
||||
while (it needs more decompression)
|
||||
{
|
||||
LzmaDec_DecodeToDic()
|
||||
use data from CLzmaDec::dic and update CLzmaDec::dicPos
|
||||
}
|
||||
}
|
||||
LzmaDec_Free()
|
||||
*/
|
||||
|
||||
/* LzmaDec_DecodeToDic
|
||||
|
||||
The decoding to internal dictionary buffer (CLzmaDec::dic).
|
||||
You must manually update CLzmaDec::dicPos, if it reaches CLzmaDec::dicBufSize !!!
|
||||
|
||||
finishMode:
|
||||
It has meaning only if the decoding reaches output limit (dicLimit).
|
||||
LZMA_FINISH_ANY - Decode just dicLimit bytes.
|
||||
LZMA_FINISH_END - Stream must be finished after dicLimit.
|
||||
|
||||
Returns:
|
||||
SZ_OK
|
||||
status:
|
||||
LZMA_STATUS_FINISHED_WITH_MARK
|
||||
LZMA_STATUS_NOT_FINISHED
|
||||
LZMA_STATUS_NEEDS_MORE_INPUT
|
||||
LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK
|
||||
SZ_ERROR_DATA - Data error
|
||||
*/
|
||||
|
||||
SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit,
|
||||
const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
|
||||
|
||||
|
||||
/* ---------- Buffer Interface ---------- */
|
||||
|
||||
/* It's zlib-like interface.
|
||||
See LzmaDec_DecodeToDic description for information about STEPS and return results,
|
||||
but you must use LzmaDec_DecodeToBuf instead of LzmaDec_DecodeToDic and you don't need
|
||||
to work with CLzmaDec variables manually.
|
||||
|
||||
finishMode:
|
||||
It has meaning only if the decoding reaches output limit (*destLen).
|
||||
LZMA_FINISH_ANY - Decode just destLen bytes.
|
||||
LZMA_FINISH_END - Stream must be finished after (*destLen).
|
||||
*/
|
||||
|
||||
SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen,
|
||||
const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
|
||||
|
||||
|
||||
/* ---------- One Call Interface ---------- */
|
||||
|
||||
/* LzmaDecode
|
||||
|
||||
finishMode:
|
||||
It has meaning only if the decoding reaches output limit (*destLen).
|
||||
LZMA_FINISH_ANY - Decode just destLen bytes.
|
||||
LZMA_FINISH_END - Stream must be finished after (*destLen).
|
||||
|
||||
Returns:
|
||||
SZ_OK
|
||||
status:
|
||||
LZMA_STATUS_FINISHED_WITH_MARK
|
||||
LZMA_STATUS_NOT_FINISHED
|
||||
LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK
|
||||
SZ_ERROR_DATA - Data error
|
||||
SZ_ERROR_MEM - Memory allocation error
|
||||
SZ_ERROR_UNSUPPORTED - Unsupported properties
|
||||
SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
|
||||
*/
|
||||
|
||||
SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
|
||||
const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode,
|
||||
ELzmaStatus *status, ISzAllocPtr alloc);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
2976
3rdparty/7z/LzmaEnc.c
vendored
2976
3rdparty/7z/LzmaEnc.c
vendored
File diff suppressed because it is too large
Load diff
76
3rdparty/7z/LzmaEnc.h
vendored
76
3rdparty/7z/LzmaEnc.h
vendored
|
|
@ -1,76 +0,0 @@
|
|||
/* LzmaEnc.h -- LZMA Encoder
|
||||
2017-07-27 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __LZMA_ENC_H
|
||||
#define __LZMA_ENC_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
#define LZMA_PROPS_SIZE 5
|
||||
|
||||
typedef struct _CLzmaEncProps
|
||||
{
|
||||
int level; /* 0 <= level <= 9 */
|
||||
UInt32 dictSize; /* (1 << 12) <= dictSize <= (1 << 27) for 32-bit version
|
||||
(1 << 12) <= dictSize <= (3 << 29) for 64-bit version
|
||||
default = (1 << 24) */
|
||||
int lc; /* 0 <= lc <= 8, default = 3 */
|
||||
int lp; /* 0 <= lp <= 4, default = 0 */
|
||||
int pb; /* 0 <= pb <= 4, default = 2 */
|
||||
int algo; /* 0 - fast, 1 - normal, default = 1 */
|
||||
int fb; /* 5 <= fb <= 273, default = 32 */
|
||||
int btMode; /* 0 - hashChain Mode, 1 - binTree mode - normal, default = 1 */
|
||||
int numHashBytes; /* 2, 3 or 4, default = 4 */
|
||||
UInt32 mc; /* 1 <= mc <= (1 << 30), default = 32 */
|
||||
unsigned writeEndMark; /* 0 - do not write EOPM, 1 - write EOPM, default = 0 */
|
||||
int numThreads; /* 1 or 2, default = 2 */
|
||||
|
||||
UInt64 reduceSize; /* estimated size of data that will be compressed. default = (UInt64)(Int64)-1.
|
||||
Encoder uses this value to reduce dictionary size */
|
||||
} CLzmaEncProps;
|
||||
|
||||
void LzmaEncProps_Init(CLzmaEncProps *p);
|
||||
void LzmaEncProps_Normalize(CLzmaEncProps *p);
|
||||
UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2);
|
||||
|
||||
|
||||
/* ---------- CLzmaEncHandle Interface ---------- */
|
||||
|
||||
/* LzmaEnc* functions can return the following exit codes:
|
||||
SRes:
|
||||
SZ_OK - OK
|
||||
SZ_ERROR_MEM - Memory allocation error
|
||||
SZ_ERROR_PARAM - Incorrect paramater in props
|
||||
SZ_ERROR_WRITE - ISeqOutStream write callback error
|
||||
SZ_ERROR_OUTPUT_EOF - output buffer overflow - version with (Byte *) output
|
||||
SZ_ERROR_PROGRESS - some break from progress callback
|
||||
SZ_ERROR_THREAD - error in multithreading functions (only for Mt version)
|
||||
*/
|
||||
|
||||
typedef void * CLzmaEncHandle;
|
||||
|
||||
CLzmaEncHandle LzmaEnc_Create(ISzAllocPtr alloc);
|
||||
void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAllocPtr alloc, ISzAllocPtr allocBig);
|
||||
|
||||
SRes LzmaEnc_SetProps(CLzmaEncHandle p, const CLzmaEncProps *props);
|
||||
void LzmaEnc_SetDataSize(CLzmaEncHandle p, UInt64 expectedDataSiize);
|
||||
SRes LzmaEnc_WriteProperties(CLzmaEncHandle p, Byte *properties, SizeT *size);
|
||||
unsigned LzmaEnc_IsWriteEndMark(CLzmaEncHandle p);
|
||||
|
||||
SRes LzmaEnc_Encode(CLzmaEncHandle p, ISeqOutStream *outStream, ISeqInStream *inStream,
|
||||
ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig);
|
||||
SRes LzmaEnc_MemEncode(CLzmaEncHandle p, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
|
||||
int writeEndMark, ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig);
|
||||
|
||||
|
||||
/* ---------- One Call Interface ---------- */
|
||||
|
||||
SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
|
||||
const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark,
|
||||
ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
40
3rdparty/7z/LzmaLib.c
vendored
40
3rdparty/7z/LzmaLib.c
vendored
|
|
@ -1,40 +0,0 @@
|
|||
/* LzmaLib.c -- LZMA library wrapper
|
||||
2015-06-13 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Alloc.h"
|
||||
#include "LzmaDec.h"
|
||||
#include "LzmaEnc.h"
|
||||
#include "LzmaLib.h"
|
||||
|
||||
MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen,
|
||||
unsigned char *outProps, size_t *outPropsSize,
|
||||
int level, /* 0 <= level <= 9, default = 5 */
|
||||
unsigned dictSize, /* use (1 << N) or (3 << N). 4 KB < dictSize <= 128 MB */
|
||||
int lc, /* 0 <= lc <= 8, default = 3 */
|
||||
int lp, /* 0 <= lp <= 4, default = 0 */
|
||||
int pb, /* 0 <= pb <= 4, default = 2 */
|
||||
int fb, /* 5 <= fb <= 273, default = 32 */
|
||||
int numThreads /* 1 or 2, default = 2 */
|
||||
)
|
||||
{
|
||||
CLzmaEncProps props;
|
||||
LzmaEncProps_Init(&props);
|
||||
props.level = level;
|
||||
props.dictSize = dictSize;
|
||||
props.lc = lc;
|
||||
props.lp = lp;
|
||||
props.pb = pb;
|
||||
props.fb = fb;
|
||||
props.numThreads = numThreads;
|
||||
|
||||
return LzmaEncode(dest, destLen, src, srcLen, &props, outProps, outPropsSize, 0,
|
||||
NULL, &g_Alloc, &g_Alloc);
|
||||
}
|
||||
|
||||
|
||||
MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t *srcLen,
|
||||
const unsigned char *props, size_t propsSize)
|
||||
{
|
||||
ELzmaStatus status;
|
||||
return LzmaDecode(dest, destLen, src, srcLen, props, (unsigned)propsSize, LZMA_FINISH_ANY, &status, &g_Alloc);
|
||||
}
|
||||
131
3rdparty/7z/LzmaLib.h
vendored
131
3rdparty/7z/LzmaLib.h
vendored
|
|
@ -1,131 +0,0 @@
|
|||
/* LzmaLib.h -- LZMA library interface
|
||||
2013-01-18 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __LZMA_LIB_H
|
||||
#define __LZMA_LIB_H
|
||||
|
||||
#include "7zTypes.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
#define MY_STDAPI int MY_STD_CALL
|
||||
|
||||
#define LZMA_PROPS_SIZE 5
|
||||
|
||||
/*
|
||||
RAM requirements for LZMA:
|
||||
for compression: (dictSize * 11.5 + 6 MB) + state_size
|
||||
for decompression: dictSize + state_size
|
||||
state_size = (4 + (1.5 << (lc + lp))) KB
|
||||
by default (lc=3, lp=0), state_size = 16 KB.
|
||||
|
||||
LZMA properties (5 bytes) format
|
||||
Offset Size Description
|
||||
0 1 lc, lp and pb in encoded form.
|
||||
1 4 dictSize (little endian).
|
||||
*/
|
||||
|
||||
/*
|
||||
LzmaCompress
|
||||
------------
|
||||
|
||||
outPropsSize -
|
||||
In: the pointer to the size of outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5.
|
||||
Out: the pointer to the size of written properties in outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5.
|
||||
|
||||
LZMA Encoder will use defult values for any parameter, if it is
|
||||
-1 for any from: level, loc, lp, pb, fb, numThreads
|
||||
0 for dictSize
|
||||
|
||||
level - compression level: 0 <= level <= 9;
|
||||
|
||||
level dictSize algo fb
|
||||
0: 16 KB 0 32
|
||||
1: 64 KB 0 32
|
||||
2: 256 KB 0 32
|
||||
3: 1 MB 0 32
|
||||
4: 4 MB 0 32
|
||||
5: 16 MB 1 32
|
||||
6: 32 MB 1 32
|
||||
7+: 64 MB 1 64
|
||||
|
||||
The default value for "level" is 5.
|
||||
|
||||
algo = 0 means fast method
|
||||
algo = 1 means normal method
|
||||
|
||||
dictSize - The dictionary size in bytes. The maximum value is
|
||||
128 MB = (1 << 27) bytes for 32-bit version
|
||||
1 GB = (1 << 30) bytes for 64-bit version
|
||||
The default value is 16 MB = (1 << 24) bytes.
|
||||
It's recommended to use the dictionary that is larger than 4 KB and
|
||||
that can be calculated as (1 << N) or (3 << N) sizes.
|
||||
|
||||
lc - The number of literal context bits (high bits of previous literal).
|
||||
It can be in the range from 0 to 8. The default value is 3.
|
||||
Sometimes lc=4 gives the gain for big files.
|
||||
|
||||
lp - The number of literal pos bits (low bits of current position for literals).
|
||||
It can be in the range from 0 to 4. The default value is 0.
|
||||
The lp switch is intended for periodical data when the period is equal to 2^lp.
|
||||
For example, for 32-bit (4 bytes) periodical data you can use lp=2. Often it's
|
||||
better to set lc=0, if you change lp switch.
|
||||
|
||||
pb - The number of pos bits (low bits of current position).
|
||||
It can be in the range from 0 to 4. The default value is 2.
|
||||
The pb switch is intended for periodical data when the period is equal 2^pb.
|
||||
|
||||
fb - Word size (the number of fast bytes).
|
||||
It can be in the range from 5 to 273. The default value is 32.
|
||||
Usually, a big number gives a little bit better compression ratio and
|
||||
slower compression process.
|
||||
|
||||
numThreads - The number of thereads. 1 or 2. The default value is 2.
|
||||
Fast mode (algo = 0) can use only 1 thread.
|
||||
|
||||
Out:
|
||||
destLen - processed output size
|
||||
Returns:
|
||||
SZ_OK - OK
|
||||
SZ_ERROR_MEM - Memory allocation error
|
||||
SZ_ERROR_PARAM - Incorrect paramater
|
||||
SZ_ERROR_OUTPUT_EOF - output buffer overflow
|
||||
SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version)
|
||||
*/
|
||||
|
||||
MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen,
|
||||
unsigned char *outProps, size_t *outPropsSize, /* *outPropsSize must be = 5 */
|
||||
int level, /* 0 <= level <= 9, default = 5 */
|
||||
unsigned dictSize, /* default = (1 << 24) */
|
||||
int lc, /* 0 <= lc <= 8, default = 3 */
|
||||
int lp, /* 0 <= lp <= 4, default = 0 */
|
||||
int pb, /* 0 <= pb <= 4, default = 2 */
|
||||
int fb, /* 5 <= fb <= 273, default = 32 */
|
||||
int numThreads /* 1 or 2, default = 2 */
|
||||
);
|
||||
|
||||
/*
|
||||
LzmaUncompress
|
||||
--------------
|
||||
In:
|
||||
dest - output data
|
||||
destLen - output data size
|
||||
src - input data
|
||||
srcLen - input data size
|
||||
Out:
|
||||
destLen - processed output size
|
||||
srcLen - processed input size
|
||||
Returns:
|
||||
SZ_OK - OK
|
||||
SZ_ERROR_DATA - Data error
|
||||
SZ_ERROR_MEM - Memory allocation arror
|
||||
SZ_ERROR_UNSUPPORTED - Unsupported properties
|
||||
SZ_ERROR_INPUT_EOF - it needs more bytes in input buffer (src)
|
||||
*/
|
||||
|
||||
MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, SizeT *srcLen,
|
||||
const unsigned char *props, size_t propsSize);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
601
3rdparty/7z/MtCoder.c
vendored
601
3rdparty/7z/MtCoder.c
vendored
|
|
@ -1,601 +0,0 @@
|
|||
/* MtCoder.c -- Multi-thread Coder
|
||||
2018-07-04 : Igor Pavlov : Public domain */
|
||||
|
||||
#include "Precomp.h"
|
||||
|
||||
#include "MtCoder.h"
|
||||
|
||||
#ifndef _7ZIP_ST
|
||||
|
||||
SRes MtProgressThunk_Progress(const ICompressProgress *pp, UInt64 inSize, UInt64 outSize)
|
||||
{
|
||||
CMtProgressThunk *thunk = CONTAINER_FROM_VTBL(pp, CMtProgressThunk, vt);
|
||||
UInt64 inSize2 = 0;
|
||||
UInt64 outSize2 = 0;
|
||||
if (inSize != (UInt64)(Int64)-1)
|
||||
{
|
||||
inSize2 = inSize - thunk->inSize;
|
||||
thunk->inSize = inSize;
|
||||
}
|
||||
if (outSize != (UInt64)(Int64)-1)
|
||||
{
|
||||
outSize2 = outSize - thunk->outSize;
|
||||
thunk->outSize = outSize;
|
||||
}
|
||||
return MtProgress_ProgressAdd(thunk->mtProgress, inSize2, outSize2);
|
||||
}
|
||||
|
||||
|
||||
void MtProgressThunk_CreateVTable(CMtProgressThunk *p)
|
||||
{
|
||||
p->vt.Progress = MtProgressThunk_Progress;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define RINOK_THREAD(x) { if ((x) != 0) return SZ_ERROR_THREAD; }
|
||||
|
||||
|
||||
static WRes ArEvent_OptCreate_And_Reset(CEvent *p)
|
||||
{
|
||||
if (Event_IsCreated(p))
|
||||
return Event_Reset(p);
|
||||
return AutoResetEvent_CreateNotSignaled(p);
|
||||
}
|
||||
|
||||
|
||||
static THREAD_FUNC_RET_TYPE THREAD_FUNC_CALL_TYPE ThreadFunc(void *pp);
|
||||
|
||||
|
||||
static SRes MtCoderThread_CreateAndStart(CMtCoderThread *t)
|
||||
{
|
||||
WRes wres = ArEvent_OptCreate_And_Reset(&t->startEvent);
|
||||
if (wres == 0)
|
||||
{
|
||||
t->stop = False;
|
||||
if (!Thread_WasCreated(&t->thread))
|
||||
wres = Thread_Create(&t->thread, ThreadFunc, t);
|
||||
if (wres == 0)
|
||||
wres = Event_Set(&t->startEvent);
|
||||
}
|
||||
if (wres == 0)
|
||||
return SZ_OK;
|
||||
return MY_SRes_HRESULT_FROM_WRes(wres);
|
||||
}
|
||||
|
||||
|
||||
static void MtCoderThread_Destruct(CMtCoderThread *t)
|
||||
{
|
||||
if (Thread_WasCreated(&t->thread))
|
||||
{
|
||||
t->stop = 1;
|
||||
Event_Set(&t->startEvent);
|
||||
Thread_Wait(&t->thread);
|
||||
Thread_Close(&t->thread);
|
||||
}
|
||||
|
||||
Event_Close(&t->startEvent);
|
||||
|
||||
if (t->inBuf)
|
||||
{
|
||||
ISzAlloc_Free(t->mtCoder->allocBig, t->inBuf);
|
||||
t->inBuf = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static SRes FullRead(ISeqInStream *stream, Byte *data, size_t *processedSize)
|
||||
{
|
||||
size_t size = *processedSize;
|
||||
*processedSize = 0;
|
||||
while (size != 0)
|
||||
{
|
||||
size_t cur = size;
|
||||
SRes res = ISeqInStream_Read(stream, data, &cur);
|
||||
*processedSize += cur;
|
||||
data += cur;
|
||||
size -= cur;
|
||||
RINOK(res);
|
||||
if (cur == 0)
|
||||
return SZ_OK;
|
||||
}
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
ThreadFunc2() returns:
|
||||
SZ_OK - in all normal cases (even for stream error or memory allocation error)
|
||||
SZ_ERROR_THREAD - in case of failure in system synch function
|
||||
*/
|
||||
|
||||
static SRes ThreadFunc2(CMtCoderThread *t)
|
||||
{
|
||||
CMtCoder *mtc = t->mtCoder;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
unsigned bi;
|
||||
SRes res;
|
||||
SRes res2;
|
||||
BoolInt finished;
|
||||
unsigned bufIndex;
|
||||
size_t size;
|
||||
const Byte *inData;
|
||||
UInt64 readProcessed = 0;
|
||||
|
||||
RINOK_THREAD(Event_Wait(&mtc->readEvent))
|
||||
|
||||
/* after Event_Wait(&mtc->readEvent) we must call Event_Set(&mtc->readEvent) in any case to unlock another threads */
|
||||
|
||||
if (mtc->stopReading)
|
||||
{
|
||||
return Event_Set(&mtc->readEvent) == 0 ? SZ_OK : SZ_ERROR_THREAD;
|
||||
}
|
||||
|
||||
res = MtProgress_GetError(&mtc->mtProgress);
|
||||
|
||||
size = 0;
|
||||
inData = NULL;
|
||||
finished = True;
|
||||
|
||||
if (res == SZ_OK)
|
||||
{
|
||||
size = mtc->blockSize;
|
||||
if (mtc->inStream)
|
||||
{
|
||||
if (!t->inBuf)
|
||||
{
|
||||
t->inBuf = (Byte *)ISzAlloc_Alloc(mtc->allocBig, mtc->blockSize);
|
||||
if (!t->inBuf)
|
||||
res = SZ_ERROR_MEM;
|
||||
}
|
||||
if (res == SZ_OK)
|
||||
{
|
||||
res = FullRead(mtc->inStream, t->inBuf, &size);
|
||||
readProcessed = mtc->readProcessed + size;
|
||||
mtc->readProcessed = readProcessed;
|
||||
}
|
||||
if (res != SZ_OK)
|
||||
{
|
||||
mtc->readRes = res;
|
||||
/* after reading error - we can stop encoding of previous blocks */
|
||||
MtProgress_SetError(&mtc->mtProgress, res);
|
||||
}
|
||||
else
|
||||
finished = (size != mtc->blockSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t rem;
|
||||
readProcessed = mtc->readProcessed;
|
||||
rem = mtc->inDataSize - (size_t)readProcessed;
|
||||
if (size > rem)
|
||||
size = rem;
|
||||
inData = mtc->inData + (size_t)readProcessed;
|
||||
readProcessed += size;
|
||||
mtc->readProcessed = readProcessed;
|
||||
finished = (mtc->inDataSize == (size_t)readProcessed);
|
||||
}
|
||||
}
|
||||
|
||||
/* we must get some block from blocksSemaphore before Event_Set(&mtc->readEvent) */
|
||||
|
||||
res2 = SZ_OK;
|
||||
|
||||
if (Semaphore_Wait(&mtc->blocksSemaphore) != 0)
|
||||
{
|
||||
res2 = SZ_ERROR_THREAD;
|
||||
if (res == SZ_OK)
|
||||
{
|
||||
res = res2;
|
||||
// MtProgress_SetError(&mtc->mtProgress, res);
|
||||
}
|
||||
}
|
||||
|
||||
bi = mtc->blockIndex;
|
||||
|
||||
if (++mtc->blockIndex >= mtc->numBlocksMax)
|
||||
mtc->blockIndex = 0;
|
||||
|
||||
bufIndex = (unsigned)(int)-1;
|
||||
|
||||
if (res == SZ_OK)
|
||||
res = MtProgress_GetError(&mtc->mtProgress);
|
||||
|
||||
if (res != SZ_OK)
|
||||
finished = True;
|
||||
|
||||
if (!finished)
|
||||
{
|
||||
if (mtc->numStartedThreads < mtc->numStartedThreadsLimit
|
||||
&& mtc->expectedDataSize != readProcessed)
|
||||
{
|
||||
res = MtCoderThread_CreateAndStart(&mtc->threads[mtc->numStartedThreads]);
|
||||
if (res == SZ_OK)
|
||||
mtc->numStartedThreads++;
|
||||
else
|
||||
{
|
||||
MtProgress_SetError(&mtc->mtProgress, res);
|
||||
finished = True;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (finished)
|
||||
mtc->stopReading = True;
|
||||
|
||||
RINOK_THREAD(Event_Set(&mtc->readEvent))
|
||||
|
||||
if (res2 != SZ_OK)
|
||||
return res2;
|
||||
|
||||
if (res == SZ_OK)
|
||||
{
|
||||
CriticalSection_Enter(&mtc->cs);
|
||||
bufIndex = mtc->freeBlockHead;
|
||||
mtc->freeBlockHead = mtc->freeBlockList[bufIndex];
|
||||
CriticalSection_Leave(&mtc->cs);
|
||||
|
||||
res = mtc->mtCallback->Code(mtc->mtCallbackObject, t->index, bufIndex,
|
||||
mtc->inStream ? t->inBuf : inData, size, finished);
|
||||
|
||||
// MtProgress_Reinit(&mtc->mtProgress, t->index);
|
||||
|
||||
if (res != SZ_OK)
|
||||
MtProgress_SetError(&mtc->mtProgress, res);
|
||||
}
|
||||
|
||||
{
|
||||
CMtCoderBlock *block = &mtc->blocks[bi];
|
||||
block->res = res;
|
||||
block->bufIndex = bufIndex;
|
||||
block->finished = finished;
|
||||
}
|
||||
|
||||
#ifdef MTCODER__USE_WRITE_THREAD
|
||||
RINOK_THREAD(Event_Set(&mtc->writeEvents[bi]))
|
||||
#else
|
||||
{
|
||||
unsigned wi;
|
||||
{
|
||||
CriticalSection_Enter(&mtc->cs);
|
||||
wi = mtc->writeIndex;
|
||||
if (wi == bi)
|
||||
mtc->writeIndex = (unsigned)(int)-1;
|
||||
else
|
||||
mtc->ReadyBlocks[bi] = True;
|
||||
CriticalSection_Leave(&mtc->cs);
|
||||
}
|
||||
|
||||
if (wi != bi)
|
||||
{
|
||||
if (res != SZ_OK || finished)
|
||||
return 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (mtc->writeRes != SZ_OK)
|
||||
res = mtc->writeRes;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (res == SZ_OK && bufIndex != (unsigned)(int)-1)
|
||||
{
|
||||
res = mtc->mtCallback->Write(mtc->mtCallbackObject, bufIndex);
|
||||
if (res != SZ_OK)
|
||||
{
|
||||
mtc->writeRes = res;
|
||||
MtProgress_SetError(&mtc->mtProgress, res);
|
||||
}
|
||||
}
|
||||
|
||||
if (++wi >= mtc->numBlocksMax)
|
||||
wi = 0;
|
||||
{
|
||||
BoolInt isReady;
|
||||
|
||||
CriticalSection_Enter(&mtc->cs);
|
||||
|
||||
if (bufIndex != (unsigned)(int)-1)
|
||||
{
|
||||
mtc->freeBlockList[bufIndex] = mtc->freeBlockHead;
|
||||
mtc->freeBlockHead = bufIndex;
|
||||
}
|
||||
|
||||
isReady = mtc->ReadyBlocks[wi];
|
||||
|
||||
if (isReady)
|
||||
mtc->ReadyBlocks[wi] = False;
|
||||
else
|
||||
mtc->writeIndex = wi;
|
||||
|
||||
CriticalSection_Leave(&mtc->cs);
|
||||
|
||||
RINOK_THREAD(Semaphore_Release1(&mtc->blocksSemaphore))
|
||||
|
||||
if (!isReady)
|
||||
break;
|
||||
}
|
||||
|
||||
{
|
||||
CMtCoderBlock *block = &mtc->blocks[wi];
|
||||
if (res == SZ_OK && block->res != SZ_OK)
|
||||
res = block->res;
|
||||
bufIndex = block->bufIndex;
|
||||
finished = block->finished;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (finished || res != SZ_OK)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static THREAD_FUNC_RET_TYPE THREAD_FUNC_CALL_TYPE ThreadFunc(void *pp)
|
||||
{
|
||||
CMtCoderThread *t = (CMtCoderThread *)pp;
|
||||
for (;;)
|
||||
{
|
||||
if (Event_Wait(&t->startEvent) != 0)
|
||||
return SZ_ERROR_THREAD;
|
||||
if (t->stop)
|
||||
return 0;
|
||||
{
|
||||
SRes res = ThreadFunc2(t);
|
||||
CMtCoder *mtc = t->mtCoder;
|
||||
if (res != SZ_OK)
|
||||
{
|
||||
MtProgress_SetError(&mtc->mtProgress, res);
|
||||
}
|
||||
|
||||
#ifndef MTCODER__USE_WRITE_THREAD
|
||||
{
|
||||
unsigned numFinished = (unsigned)InterlockedIncrement(&mtc->numFinishedThreads);
|
||||
if (numFinished == mtc->numStartedThreads)
|
||||
if (Event_Set(&mtc->finishedEvent) != 0)
|
||||
return SZ_ERROR_THREAD;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void MtCoder_Construct(CMtCoder *p)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
p->blockSize = 0;
|
||||
p->numThreadsMax = 0;
|
||||
p->expectedDataSize = (UInt64)(Int64)-1;
|
||||
|
||||
p->inStream = NULL;
|
||||
p->inData = NULL;
|
||||
p->inDataSize = 0;
|
||||
|
||||
p->progress = NULL;
|
||||
p->allocBig = NULL;
|
||||
|
||||
p->mtCallback = NULL;
|
||||
p->mtCallbackObject = NULL;
|
||||
|
||||
p->allocatedBufsSize = 0;
|
||||
|
||||
Event_Construct(&p->readEvent);
|
||||
Semaphore_Construct(&p->blocksSemaphore);
|
||||
|
||||
for (i = 0; i < MTCODER__THREADS_MAX; i++)
|
||||
{
|
||||
CMtCoderThread *t = &p->threads[i];
|
||||
t->mtCoder = p;
|
||||
t->index = i;
|
||||
t->inBuf = NULL;
|
||||
t->stop = False;
|
||||
Event_Construct(&t->startEvent);
|
||||
Thread_Construct(&t->thread);
|
||||
}
|
||||
|
||||
#ifdef MTCODER__USE_WRITE_THREAD
|
||||
for (i = 0; i < MTCODER__BLOCKS_MAX; i++)
|
||||
Event_Construct(&p->writeEvents[i]);
|
||||
#else
|
||||
Event_Construct(&p->finishedEvent);
|
||||
#endif
|
||||
|
||||
CriticalSection_Init(&p->cs);
|
||||
CriticalSection_Init(&p->mtProgress.cs);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void MtCoder_Free(CMtCoder *p)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
/*
|
||||
p->stopReading = True;
|
||||
if (Event_IsCreated(&p->readEvent))
|
||||
Event_Set(&p->readEvent);
|
||||
*/
|
||||
|
||||
for (i = 0; i < MTCODER__THREADS_MAX; i++)
|
||||
MtCoderThread_Destruct(&p->threads[i]);
|
||||
|
||||
Event_Close(&p->readEvent);
|
||||
Semaphore_Close(&p->blocksSemaphore);
|
||||
|
||||
#ifdef MTCODER__USE_WRITE_THREAD
|
||||
for (i = 0; i < MTCODER__BLOCKS_MAX; i++)
|
||||
Event_Close(&p->writeEvents[i]);
|
||||
#else
|
||||
Event_Close(&p->finishedEvent);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void MtCoder_Destruct(CMtCoder *p)
|
||||
{
|
||||
MtCoder_Free(p);
|
||||
|
||||
CriticalSection_Delete(&p->cs);
|
||||
CriticalSection_Delete(&p->mtProgress.cs);
|
||||
}
|
||||
|
||||
|
||||
SRes MtCoder_Code(CMtCoder *p)
|
||||
{
|
||||
unsigned numThreads = p->numThreadsMax;
|
||||
unsigned numBlocksMax;
|
||||
unsigned i;
|
||||
SRes res = SZ_OK;
|
||||
|
||||
if (numThreads > MTCODER__THREADS_MAX)
|
||||
numThreads = MTCODER__THREADS_MAX;
|
||||
numBlocksMax = MTCODER__GET_NUM_BLOCKS_FROM_THREADS(numThreads);
|
||||
|
||||
if (p->blockSize < ((UInt32)1 << 26)) numBlocksMax++;
|
||||
if (p->blockSize < ((UInt32)1 << 24)) numBlocksMax++;
|
||||
if (p->blockSize < ((UInt32)1 << 22)) numBlocksMax++;
|
||||
|
||||
if (numBlocksMax > MTCODER__BLOCKS_MAX)
|
||||
numBlocksMax = MTCODER__BLOCKS_MAX;
|
||||
|
||||
if (p->blockSize != p->allocatedBufsSize)
|
||||
{
|
||||
for (i = 0; i < MTCODER__THREADS_MAX; i++)
|
||||
{
|
||||
CMtCoderThread *t = &p->threads[i];
|
||||
if (t->inBuf)
|
||||
{
|
||||
ISzAlloc_Free(p->allocBig, t->inBuf);
|
||||
t->inBuf = NULL;
|
||||
}
|
||||
}
|
||||
p->allocatedBufsSize = p->blockSize;
|
||||
}
|
||||
|
||||
p->readRes = SZ_OK;
|
||||
|
||||
MtProgress_Init(&p->mtProgress, p->progress);
|
||||
|
||||
#ifdef MTCODER__USE_WRITE_THREAD
|
||||
for (i = 0; i < numBlocksMax; i++)
|
||||
{
|
||||
RINOK_THREAD(ArEvent_OptCreate_And_Reset(&p->writeEvents[i]));
|
||||
}
|
||||
#else
|
||||
RINOK_THREAD(ArEvent_OptCreate_And_Reset(&p->finishedEvent));
|
||||
#endif
|
||||
|
||||
{
|
||||
RINOK_THREAD(ArEvent_OptCreate_And_Reset(&p->readEvent));
|
||||
|
||||
if (Semaphore_IsCreated(&p->blocksSemaphore))
|
||||
{
|
||||
RINOK_THREAD(Semaphore_Close(&p->blocksSemaphore));
|
||||
}
|
||||
RINOK_THREAD(Semaphore_Create(&p->blocksSemaphore, numBlocksMax, numBlocksMax));
|
||||
}
|
||||
|
||||
for (i = 0; i < MTCODER__BLOCKS_MAX - 1; i++)
|
||||
p->freeBlockList[i] = i + 1;
|
||||
p->freeBlockList[MTCODER__BLOCKS_MAX - 1] = (unsigned)(int)-1;
|
||||
p->freeBlockHead = 0;
|
||||
|
||||
p->readProcessed = 0;
|
||||
p->blockIndex = 0;
|
||||
p->numBlocksMax = numBlocksMax;
|
||||
p->stopReading = False;
|
||||
|
||||
#ifndef MTCODER__USE_WRITE_THREAD
|
||||
p->writeIndex = 0;
|
||||
p->writeRes = SZ_OK;
|
||||
for (i = 0; i < MTCODER__BLOCKS_MAX; i++)
|
||||
p->ReadyBlocks[i] = False;
|
||||
p->numFinishedThreads = 0;
|
||||
#endif
|
||||
|
||||
p->numStartedThreadsLimit = numThreads;
|
||||
p->numStartedThreads = 0;
|
||||
|
||||
// for (i = 0; i < numThreads; i++)
|
||||
{
|
||||
CMtCoderThread *nextThread = &p->threads[p->numStartedThreads++];
|
||||
RINOK(MtCoderThread_CreateAndStart(nextThread));
|
||||
}
|
||||
|
||||
RINOK_THREAD(Event_Set(&p->readEvent))
|
||||
|
||||
#ifdef MTCODER__USE_WRITE_THREAD
|
||||
{
|
||||
unsigned bi = 0;
|
||||
|
||||
for (;; bi++)
|
||||
{
|
||||
if (bi >= numBlocksMax)
|
||||
bi = 0;
|
||||
|
||||
RINOK_THREAD(Event_Wait(&p->writeEvents[bi]))
|
||||
|
||||
{
|
||||
const CMtCoderBlock *block = &p->blocks[bi];
|
||||
unsigned bufIndex = block->bufIndex;
|
||||
BoolInt finished = block->finished;
|
||||
if (res == SZ_OK && block->res != SZ_OK)
|
||||
res = block->res;
|
||||
|
||||
if (bufIndex != (unsigned)(int)-1)
|
||||
{
|
||||
if (res == SZ_OK)
|
||||
{
|
||||
res = p->mtCallback->Write(p->mtCallbackObject, bufIndex);
|
||||
if (res != SZ_OK)
|
||||
MtProgress_SetError(&p->mtProgress, res);
|
||||
}
|
||||
|
||||
CriticalSection_Enter(&p->cs);
|
||||
{
|
||||
p->freeBlockList[bufIndex] = p->freeBlockHead;
|
||||
p->freeBlockHead = bufIndex;
|
||||
}
|
||||
CriticalSection_Leave(&p->cs);
|
||||
}
|
||||
|
||||
RINOK_THREAD(Semaphore_Release1(&p->blocksSemaphore))
|
||||
|
||||
if (finished)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
{
|
||||
WRes wres = Event_Wait(&p->finishedEvent);
|
||||
res = MY_SRes_HRESULT_FROM_WRes(wres);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (res == SZ_OK)
|
||||
res = p->readRes;
|
||||
|
||||
if (res == SZ_OK)
|
||||
res = p->mtProgress.res;
|
||||
|
||||
#ifndef MTCODER__USE_WRITE_THREAD
|
||||
if (res == SZ_OK)
|
||||
res = p->writeRes;
|
||||
#endif
|
||||
|
||||
if (res != SZ_OK)
|
||||
MtCoder_Free(p);
|
||||
return res;
|
||||
}
|
||||
|
||||
#endif
|
||||
141
3rdparty/7z/MtCoder.h
vendored
141
3rdparty/7z/MtCoder.h
vendored
|
|
@ -1,141 +0,0 @@
|
|||
/* MtCoder.h -- Multi-thread Coder
|
||||
2018-07-04 : Igor Pavlov : Public domain */
|
||||
|
||||
#ifndef __MT_CODER_H
|
||||
#define __MT_CODER_H
|
||||
|
||||
#include "MtDec.h"
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
/*
|
||||
if ( defined MTCODER__USE_WRITE_THREAD) : main thread writes all data blocks to output stream
|
||||
if (not defined MTCODER__USE_WRITE_THREAD) : any coder thread can write data blocks to output stream
|
||||
*/
|
||||
/* #define MTCODER__USE_WRITE_THREAD */
|
||||
|
||||
#ifndef _7ZIP_ST
|
||||
#define MTCODER__GET_NUM_BLOCKS_FROM_THREADS(numThreads) ((numThreads) + (numThreads) / 8 + 1)
|
||||
#define MTCODER__THREADS_MAX 64
|
||||
#define MTCODER__BLOCKS_MAX (MTCODER__GET_NUM_BLOCKS_FROM_THREADS(MTCODER__THREADS_MAX) + 3)
|
||||
#else
|
||||
#define MTCODER__THREADS_MAX 1
|
||||
#define MTCODER__BLOCKS_MAX 1
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef _7ZIP_ST
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ICompressProgress vt;
|
||||
CMtProgress *mtProgress;
|
||||
UInt64 inSize;
|
||||
UInt64 outSize;
|
||||
} CMtProgressThunk;
|
||||
|
||||
void MtProgressThunk_CreateVTable(CMtProgressThunk *p);
|
||||
|
||||
#define MtProgressThunk_Init(p) { (p)->inSize = 0; (p)->outSize = 0; }
|
||||
|
||||
|
||||
struct _CMtCoder;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
struct _CMtCoder *mtCoder;
|
||||
unsigned index;
|
||||
int stop;
|
||||
Byte *inBuf;
|
||||
|
||||
CAutoResetEvent startEvent;
|
||||
CThread thread;
|
||||
} CMtCoderThread;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
SRes (*Code)(void *p, unsigned coderIndex, unsigned outBufIndex,
|
||||
const Byte *src, size_t srcSize, int finished);
|
||||
SRes (*Write)(void *p, unsigned outBufIndex);
|
||||
} IMtCoderCallback2;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
SRes res;
|
||||
unsigned bufIndex;
|
||||
BoolInt finished;
|
||||
} CMtCoderBlock;
|
||||
|
||||
|
||||
typedef struct _CMtCoder
|
||||
{
|
||||
/* input variables */
|
||||
|
||||
size_t blockSize; /* size of input block */
|
||||
unsigned numThreadsMax;
|
||||
UInt64 expectedDataSize;
|
||||
|
||||
ISeqInStream *inStream;
|
||||
const Byte *inData;
|
||||
size_t inDataSize;
|
||||
|
||||
ICompressProgress *progress;
|
||||
ISzAllocPtr allocBig;
|
||||
|
||||
IMtCoderCallback2 *mtCallback;
|
||||
void *mtCallbackObject;
|
||||
|
||||
|
||||
/* internal variables */
|
||||
|
||||
size_t allocatedBufsSize;
|
||||
|
||||
CAutoResetEvent readEvent;
|
||||
CSemaphore blocksSemaphore;
|
||||
|
||||
BoolInt stopReading;
|
||||
SRes readRes;
|
||||
|
||||
#ifdef MTCODER__USE_WRITE_THREAD
|
||||
CAutoResetEvent writeEvents[MTCODER__BLOCKS_MAX];
|
||||
#else
|
||||
CAutoResetEvent finishedEvent;
|
||||
SRes writeRes;
|
||||
unsigned writeIndex;
|
||||
Byte ReadyBlocks[MTCODER__BLOCKS_MAX];
|
||||
LONG numFinishedThreads;
|
||||
#endif
|
||||
|
||||
unsigned numStartedThreadsLimit;
|
||||
unsigned numStartedThreads;
|
||||
|
||||
unsigned numBlocksMax;
|
||||
unsigned blockIndex;
|
||||
UInt64 readProcessed;
|
||||
|
||||
CCriticalSection cs;
|
||||
|
||||
unsigned freeBlockHead;
|
||||
unsigned freeBlockList[MTCODER__BLOCKS_MAX];
|
||||
|
||||
CMtProgress mtProgress;
|
||||
CMtCoderBlock blocks[MTCODER__BLOCKS_MAX];
|
||||
CMtCoderThread threads[MTCODER__THREADS_MAX];
|
||||
} CMtCoder;
|
||||
|
||||
|
||||
void MtCoder_Construct(CMtCoder *p);
|
||||
void MtCoder_Destruct(CMtCoder *p);
|
||||
SRes MtCoder_Code(CMtCoder *p);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
#endif
|
||||
1138
3rdparty/7z/MtDec.c
vendored
1138
3rdparty/7z/MtDec.c
vendored
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue