mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Compare commits
3192 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
4d3ccc21d0 | ||
![]() |
1c67b060c4 | ||
![]() |
0992265611 | ||
![]() |
e5f81bd74c | ||
![]() |
b73d8b373a | ||
![]() |
fd4db3e178 | ||
![]() |
987a3a5c8e | ||
![]() |
dcd3ef33b3 | ||
![]() |
1bba07ecc0 | ||
![]() |
f9d95c649e | ||
![]() |
cab46b27b9 | ||
![]() |
6009b8a100 | ||
![]() |
fb87b14b6c | ||
![]() |
9c754baa99 | ||
![]() |
708d8e9cfd | ||
![]() |
a3de2ce9ba | ||
![]() |
359f4420a4 | ||
![]() |
391d8132b6 | ||
![]() |
fdd27472de | ||
![]() |
aa992f36d3 | ||
![]() |
2650248a92 | ||
![]() |
222f7517a1 | ||
![]() |
cbb9ee8f5b | ||
![]() |
fd8dfe1bfd | ||
![]() |
7e01cf59bb | ||
![]() |
c8774f9e61 | ||
![]() |
bf64dfcd99 | ||
![]() |
290c9aef56 | ||
![]() |
60047025db | ||
![]() |
77dace78c3 | ||
![]() |
841f0b1515 | ||
![]() |
ba97d8636a | ||
![]() |
c8a4207400 | ||
![]() |
2b415e416e | ||
![]() |
b9ae9845ad | ||
![]() |
4aa43e2cd3 | ||
![]() |
a0bd2c9fcf | ||
![]() |
2f9e1adbdd | ||
![]() |
b7c26eb16c | ||
![]() |
fb7db498fb | ||
![]() |
20c8c12d9e | ||
![]() |
38beb44176 | ||
![]() |
c3bee21256 | ||
![]() |
57a88b216c | ||
![]() |
ffdc1044c9 | ||
![]() |
a68f3d6374 | ||
![]() |
699e5632b1 | ||
![]() |
9b13bb1ae4 | ||
![]() |
4de2ec3895 | ||
![]() |
65c961436d | ||
![]() |
571bded46e | ||
![]() |
347723af05 | ||
![]() |
0c044b35b7 | ||
![]() |
abb7f2879e | ||
![]() |
2b5d978a85 | ||
![]() |
25cbc15719 | ||
![]() |
dfa1307a64 | ||
![]() |
3dc962b9f7 | ||
![]() |
3d9d68e1ca | ||
![]() |
4d6dde595c | ||
![]() |
07a9c25c71 | ||
![]() |
47f9f3a3f6 | ||
![]() |
4d74dd0395 | ||
![]() |
8b5231388c | ||
![]() |
9b86533ce4 | ||
![]() |
10834d1572 | ||
![]() |
c5f79b8cf9 | ||
![]() |
6280dfc025 | ||
![]() |
c416191a00 | ||
![]() |
5f8d648af6 | ||
![]() |
d01aa02ef5 | ||
![]() |
702d18de99 | ||
![]() |
8f1a627e79 | ||
![]() |
91665eaa63 | ||
![]() |
33d38d059e | ||
![]() |
19ffe572bb | ||
![]() |
b57578f3b1 | ||
![]() |
fc86c249dc | ||
![]() |
aecf2a6e62 | ||
![]() |
e990b691c5 | ||
![]() |
284e622506 | ||
![]() |
731d36ac61 | ||
![]() |
066a977840 | ||
![]() |
c8d7318daf | ||
![]() |
bc475ada13 | ||
![]() |
dc0962c243 | ||
![]() |
ba21ab4ea0 | ||
![]() |
c064fc4fe8 | ||
![]() |
75931a2ce3 | ||
![]() |
f52a59ff4f | ||
![]() |
9e2aa658a8 | ||
![]() |
69f67f990d | ||
![]() |
2bb98cd8c8 | ||
![]() |
74c006fbab | ||
![]() |
d65025b53d | ||
![]() |
16872310d5 | ||
![]() |
1e108e9ab2 | ||
![]() |
8c5c03e33a | ||
![]() |
94a15cc92f | ||
![]() |
f64c6248b5 | ||
![]() |
7bf79ab666 | ||
![]() |
7b44bfd812 | ||
![]() |
ccb716dcad | ||
![]() |
922c225fbf | ||
![]() |
732069d98b | ||
![]() |
21625006e5 | ||
![]() |
5d86515772 | ||
![]() |
3bf21a0d43 | ||
![]() |
43a91089ca | ||
![]() |
be2889411a | ||
![]() |
db3f6d0bf0 | ||
![]() |
cc93bbb765 | ||
![]() |
99e6b0ecc8 | ||
![]() |
9673079903 | ||
![]() |
e4078a6a70 | ||
![]() |
fe88711b14 | ||
![]() |
140fc69b4a | ||
![]() |
c5143c0b22 | ||
![]() |
1f131e3ae6 | ||
![]() |
a3f34043de | ||
![]() |
11e6655624 | ||
![]() |
5cf45ba5ab | ||
![]() |
43420599f7 | ||
![]() |
ca5667bc14 | ||
![]() |
abe75ca850 | ||
![]() |
db5a3956f5 | ||
![]() |
aae35f3617 | ||
![]() |
080ba20d49 | ||
![]() |
2cd9233e42 | ||
![]() |
17826d31c6 | ||
![]() |
58501bd136 | ||
![]() |
bd2766ce79 | ||
![]() |
d1fceeec30 | ||
![]() |
c42e6d62d8 | ||
![]() |
3fc0149325 | ||
![]() |
77eac5ec82 | ||
![]() |
0c303b2043 | ||
![]() |
44618752f9 | ||
![]() |
c69f04dbab | ||
![]() |
aa9694bdd0 | ||
![]() |
7af4709d38 | ||
![]() |
c105571052 | ||
![]() |
b7ac56822d | ||
![]() |
32290b3529 | ||
![]() |
3088d64068 | ||
![]() |
3ddbad9589 | ||
![]() |
5583273906 | ||
![]() |
61790eb8a0 | ||
![]() |
9af00b174a | ||
![]() |
53fde8b5a8 | ||
![]() |
b5fb9555e1 | ||
![]() |
1c820750da | ||
![]() |
2e53aef1e8 | ||
![]() |
e30a8a883f | ||
![]() |
c3467bd173 | ||
![]() |
3aa4209ef6 | ||
![]() |
a8cea0c09b | ||
![]() |
0ac37fb74d | ||
![]() |
81c0aeaf5d | ||
![]() |
0b1aa86c71 | ||
![]() |
5be04e25fd | ||
![]() |
63cb81ff2c | ||
![]() |
d628ed5963 | ||
![]() |
1e0c8baf05 | ||
![]() |
bf6a74d2f9 | ||
![]() |
9cbc09d189 | ||
![]() |
a63e97667e | ||
![]() |
14034ad734 | ||
![]() |
e7c8361089 | ||
![]() |
c286cb8a1e | ||
![]() |
4a934005b4 | ||
![]() |
a9ab62d54d | ||
![]() |
0c82801384 | ||
![]() |
1820dd9b61 | ||
![]() |
6147be32fc | ||
![]() |
f08ac4f1c9 | ||
![]() |
871de14ceb | ||
![]() |
8199cad99f | ||
![]() |
d801a4634f | ||
![]() |
9ccd2ba9ff | ||
![]() |
5b3d0e4c09 | ||
![]() |
17328ef86b | ||
![]() |
d9000b3094 | ||
![]() |
0596135d20 | ||
![]() |
fbc705c3bd | ||
![]() |
cdfd663266 | ||
![]() |
dde094a442 | ||
![]() |
1c65cc3998 | ||
![]() |
d0274e74f8 | ||
![]() |
8512514a0f | ||
![]() |
36ec3370fb | ||
![]() |
d8e014dfbe | ||
![]() |
9f800aedfe | ||
![]() |
bfd42b060d | ||
![]() |
f077c9d233 | ||
![]() |
541a1e69d5 | ||
![]() |
44d63a8ac0 | ||
![]() |
234159d911 | ||
![]() |
7ba4453f8f | ||
![]() |
e9e432a35d | ||
![]() |
0d15bca041 | ||
![]() |
bd7ffc911d | ||
![]() |
9d29283392 | ||
![]() |
4d5bdef21a | ||
![]() |
9e334af6e4 | ||
![]() |
a02b2b8eb6 | ||
![]() |
051414bec6 | ||
![]() |
93ec0ac0f3 | ||
![]() |
fa85b38560 | ||
![]() |
cd13ba73e2 | ||
![]() |
b46c5e6186 | ||
![]() |
c50a715a5c | ||
![]() |
0d0f774a6a | ||
![]() |
fb2585f4e2 | ||
![]() |
4b6ebcc6e9 | ||
![]() |
02af9acfca | ||
![]() |
67d6160462 | ||
![]() |
c9836b03ce | ||
![]() |
841afdc486 | ||
![]() |
b3551cc31f | ||
![]() |
b35dbe474e | ||
![]() |
17b8706bf6 | ||
![]() |
ef98a6e723 | ||
![]() |
ac1cd9c26e | ||
![]() |
433c00b348 | ||
![]() |
cd80ed6f7b | ||
![]() |
4e21924271 | ||
![]() |
9aa8e8825f | ||
![]() |
98e0dbcefe | ||
![]() |
a66b631bce | ||
![]() |
961412d6f2 | ||
![]() |
345e04b619 | ||
![]() |
55a3e33bb1 | ||
![]() |
776d6f8660 | ||
![]() |
e8f88e746b | ||
![]() |
6f630a882d | ||
![]() |
63f9e4945d | ||
![]() |
105c1e9896 | ||
![]() |
2c4d4a6f18 | ||
![]() |
18dee43e02 | ||
![]() |
a262419398 | ||
![]() |
b3f4863373 | ||
![]() |
d0fad34230 | ||
![]() |
65b9cf1db3 | ||
![]() |
ada10741b4 | ||
![]() |
15990de89e | ||
![]() |
0afa04a474 | ||
![]() |
5d40592fe2 | ||
![]() |
e43074a1d8 | ||
![]() |
dad28a30f3 | ||
![]() |
0591defd6f | ||
![]() |
771bfaf34d | ||
![]() |
9ce51dad8b | ||
![]() |
cee8ed235a | ||
![]() |
b82c8ba7fe | ||
![]() |
a96b05e63f | ||
![]() |
659f55a617 | ||
![]() |
781d77ac54 | ||
![]() |
6fa8a25a40 | ||
![]() |
9db21e18ad | ||
![]() |
049651dccc | ||
![]() |
bdffded054 | ||
![]() |
37a59e55e8 | ||
![]() |
a430ee2dd2 | ||
![]() |
0406a55c92 | ||
![]() |
e1cf66b6cb | ||
![]() |
0fc62310b1 | ||
![]() |
246e8e53ba | ||
![]() |
a5219c1ecc | ||
![]() |
a08df32f18 | ||
![]() |
5bd5f352e5 | ||
![]() |
9999d66bce | ||
![]() |
4754d302bf | ||
![]() |
8538e2fe6b | ||
![]() |
28ed4e6ec0 | ||
![]() |
bc4b6ce7a8 | ||
![]() |
6600d0e00f | ||
![]() |
03e2613ddd | ||
![]() |
138ebf481b | ||
![]() |
80022c035b | ||
![]() |
7bac9de94a | ||
![]() |
fc6c49cbf4 | ||
![]() |
a9f3e3c44e | ||
![]() |
16b2fc41a3 | ||
![]() |
6fda0a5617 | ||
![]() |
be9f1d3d56 | ||
![]() |
7016ad558b | ||
![]() |
3aaa8d3526 | ||
![]() |
bc2d02e3a9 | ||
![]() |
c1b129bd18 | ||
![]() |
a95a81000d | ||
![]() |
c9e91bfbab | ||
![]() |
abee5c138f | ||
![]() |
e8b5bcfe19 | ||
![]() |
4c576a2b02 | ||
![]() |
ec0ec47bbf | ||
![]() |
61415942c2 | ||
![]() |
d23e4ba538 | ||
![]() |
54863f4930 | ||
![]() |
712508fdb2 | ||
![]() |
ce6e7a2786 | ||
![]() |
f72105be81 | ||
![]() |
c561f7da85 | ||
![]() |
8e38f6d1c6 | ||
![]() |
cecf9b02e5 | ||
![]() |
cfb3e98c84 | ||
![]() |
35a4656a59 | ||
![]() |
e48099a03c | ||
![]() |
b30ccf9158 | ||
![]() |
5295fc07d5 | ||
![]() |
6b0a80903b | ||
![]() |
f63a35d944 | ||
![]() |
87d83d162d | ||
![]() |
bac158c80d | ||
![]() |
6154fac64d | ||
![]() |
4844c7a92f | ||
![]() |
e897621be9 | ||
![]() |
3b4f2b0798 | ||
![]() |
eaf24ba4e2 | ||
![]() |
19c84e2687 | ||
![]() |
83b8d2c290 | ||
![]() |
b75c2dcb02 | ||
![]() |
5947fedbbd | ||
![]() |
ff810d5e36 | ||
![]() |
068aaed196 | ||
![]() |
191290e194 | ||
![]() |
4a0ad9bd91 | ||
![]() |
63e40b1b29 | ||
![]() |
3da9478d78 | ||
![]() |
17df11e3f7 | ||
![]() |
f4ad6ea287 | ||
![]() |
87b4030503 | ||
![]() |
e1c4a0ae51 | ||
![]() |
f7ca8138e7 | ||
![]() |
279589c3af | ||
![]() |
e16df981bf | ||
![]() |
7b3e68ff69 | ||
![]() |
9b777b3c35 | ||
![]() |
1c74a1a889 | ||
![]() |
5dd965117a | ||
![]() |
d3ebf97d77 | ||
![]() |
7b4c14dc10 | ||
![]() |
6f3bc59950 | ||
![]() |
73b1ebfa20 | ||
![]() |
04feb452ba | ||
![]() |
120a5ebb66 | ||
![]() |
a7cdf0b172 | ||
![]() |
5fa27e25b3 | ||
![]() |
b633720585 | ||
![]() |
7f7b3cdb90 | ||
![]() |
747ecce51f | ||
![]() |
74f7ecbe04 | ||
![]() |
5ae87ffef4 | ||
![]() |
ecc403a8fa | ||
![]() |
2ed5472f06 | ||
![]() |
0b01640b58 | ||
![]() |
49f1685cde | ||
![]() |
988da4c951 | ||
![]() |
9dfee95dae | ||
![]() |
e5d4d656ab | ||
![]() |
8bd8223bad | ||
![]() |
15547a2eb1 | ||
![]() |
30c8480a39 | ||
![]() |
24d94197fd | ||
![]() |
0d221c5b70 | ||
![]() |
1218e39b07 | ||
![]() |
a2d8ee27f2 | ||
![]() |
b428bc934a | ||
![]() |
7c1e461032 | ||
![]() |
b1fce8a98c | ||
![]() |
93b9808004 | ||
![]() |
802e348b49 | ||
![]() |
f94c11fff8 | ||
![]() |
beeeee2978 | ||
![]() |
ad2143f3b0 | ||
![]() |
7777eaa8e1 | ||
![]() |
da7d2e14ac | ||
![]() |
29b38a1ced | ||
![]() |
2645663d9b | ||
![]() |
719419a6e5 | ||
![]() |
d292968f7c | ||
![]() |
745e81bfd0 | ||
![]() |
aba6b89399 | ||
![]() |
4bc5aa3531 | ||
![]() |
5b8ee009d6 | ||
![]() |
23ec35bf4a | ||
![]() |
b13347be38 | ||
![]() |
5a06842bf8 | ||
![]() |
441e55790f | ||
![]() |
4e1d3f8772 | ||
![]() |
7efbb2e4e0 | ||
![]() |
d9d412645d | ||
![]() |
be88192594 | ||
![]() |
99b5b20479 | ||
![]() |
79368ed8f3 | ||
![]() |
a48d620c26 | ||
![]() |
5b05d429f2 | ||
![]() |
f0baf3dc11 | ||
![]() |
5d1636e40b | ||
![]() |
ef5ca80a47 | ||
![]() |
c04f2d2d88 | ||
![]() |
13c781f04d | ||
![]() |
a7fef37657 | ||
![]() |
113eb203b0 | ||
![]() |
e572e899bd | ||
![]() |
7ab37e81e0 | ||
![]() |
27f24bd9bc | ||
![]() |
605ee05491 | ||
![]() |
95f1350ca8 | ||
![]() |
1b169bf28e | ||
![]() |
4762d46427 | ||
![]() |
1eadf553f1 | ||
![]() |
c55f142c6c | ||
![]() |
e0c3f46496 | ||
![]() |
eb65ec41b7 | ||
![]() |
d20f4fca69 | ||
![]() |
c8cc23336d | ||
![]() |
ff6c1c7a30 | ||
![]() |
bd886d21e7 | ||
![]() |
30f03021d1 | ||
![]() |
7f1b3606a8 | ||
![]() |
e91d2c719f | ||
![]() |
d7f9caf37c | ||
![]() |
f8196a5db5 | ||
![]() |
6cc4ae1f1d | ||
![]() |
541620cf78 | ||
![]() |
cb73155945 | ||
![]() |
312869381a | ||
![]() |
999d29dc2b | ||
![]() |
726516b8c1 | ||
![]() |
0962c325fa | ||
![]() |
8db883c540 | ||
![]() |
05bb051243 | ||
![]() |
03a9f03822 | ||
![]() |
68fdb43573 | ||
![]() |
dfac2da7fb | ||
![]() |
dd3a098a9b | ||
![]() |
189b933dd4 | ||
![]() |
6ca6d569ff | ||
![]() |
2c42479890 | ||
![]() |
f1a77c0198 | ||
![]() |
be09985c87 | ||
![]() |
b48faee850 | ||
![]() |
5fdc02282f | ||
![]() |
063d795599 | ||
![]() |
419f6750c0 | ||
![]() |
4433986e40 | ||
![]() |
0a130caf58 | ||
![]() |
01dbee83e1 | ||
![]() |
aadd724362 | ||
![]() |
6b3f302132 | ||
![]() |
78d96e94fa | ||
![]() |
04eadc803d | ||
![]() |
d9602e4362 | ||
![]() |
86aaded7e5 | ||
![]() |
d11099ae32 | ||
![]() |
bdca73cc14 | ||
![]() |
7f4076bae0 | ||
![]() |
8629256dc7 | ||
![]() |
56308f6490 | ||
![]() |
a8a3c81528 | ||
![]() |
7fb6afbe9f | ||
![]() |
0e80be83b3 | ||
![]() |
a59caa3c33 | ||
![]() |
554ae518a2 | ||
![]() |
8516ae86d7 | ||
![]() |
2e0c011fb8 | ||
![]() |
62742996f8 | ||
![]() |
826fa36ba3 | ||
![]() |
034c3f2270 | ||
![]() |
9eee4dd92b | ||
![]() |
a5df26691d | ||
![]() |
6f1501a601 | ||
![]() |
b9844b545f | ||
![]() |
a57f58253a | ||
![]() |
eade5c17ea | ||
![]() |
2afab21ffb | ||
![]() |
4647dfc988 | ||
![]() |
faf833bffc | ||
![]() |
e84320ad75 | ||
![]() |
2ecafd41ba | ||
![]() |
484d4351c2 | ||
![]() |
02b94556cf | ||
![]() |
967377369b | ||
![]() |
889f38135d | ||
![]() |
a22dc67a21 | ||
![]() |
478a520900 | ||
![]() |
a22eb4d3e5 | ||
![]() |
0f731b455c | ||
![]() |
cd8722304c | ||
![]() |
b495ce0371 | ||
![]() |
1089896b8c | ||
![]() |
f938f356cb | ||
![]() |
a8086be81c | ||
![]() |
7232c15b3e | ||
![]() |
3d468a181a | ||
![]() |
ea9a7b2523 | ||
![]() |
b08753eef0 | ||
![]() |
fec641d27a | ||
![]() |
64852b44b5 | ||
![]() |
2039664e47 | ||
![]() |
81d1529a13 | ||
![]() |
0d19984cda | ||
![]() |
6b2b60f683 | ||
![]() |
25c0874bc1 | ||
![]() |
142e378618 | ||
![]() |
0c920ecb07 | ||
![]() |
ecdff3b563 | ||
![]() |
a4d39f9713 | ||
![]() |
9121b015c1 | ||
![]() |
114fc16266 | ||
![]() |
b750aa8bfc | ||
![]() |
d0c0a9abfd | ||
![]() |
2beb44a80b | ||
![]() |
9abb0fb0c4 | ||
![]() |
4d9fc506df | ||
![]() |
d40b603856 | ||
![]() |
ba68cbefc5 | ||
![]() |
6e22d4c096 | ||
![]() |
a402edac1a | ||
![]() |
9460dbe906 | ||
![]() |
46213f879a | ||
![]() |
a64cdd63f3 | ||
![]() |
8712f4bf19 | ||
![]() |
f11ea2ae13 | ||
![]() |
a2d65354a0 | ||
![]() |
5cacae8f29 | ||
![]() |
76b6b60b8c | ||
![]() |
71472268c0 | ||
![]() |
28cd3761a1 | ||
![]() |
0dc83c2b10 | ||
![]() |
4aa8c2fe5d | ||
![]() |
e013b4a91e | ||
![]() |
f6380e4a38 | ||
![]() |
de7a212630 | ||
![]() |
85a49d4198 | ||
![]() |
5623e67fb6 | ||
![]() |
5a45d71a11 | ||
![]() |
974526b244 | ||
![]() |
224f95f442 | ||
![]() |
2fa0e55450 | ||
![]() |
12fa8c637f | ||
![]() |
2be3aa86f0 | ||
![]() |
c4183fba00 | ||
![]() |
0d584c32c5 | ||
![]() |
cea0918352 | ||
![]() |
07f1cfd9b0 | ||
![]() |
964a404451 | ||
![]() |
b43a7ac0e7 | ||
![]() |
64e2832bc8 | ||
![]() |
d8577d9bfb | ||
![]() |
6cc21c4ee6 | ||
![]() |
45215d0e78 | ||
![]() |
45d948f2da | ||
![]() |
9225cb45ac | ||
![]() |
b0aaa31702 | ||
![]() |
d154c7253e | ||
![]() |
1039cebb87 | ||
![]() |
74784a0d52 | ||
![]() |
faa78313d9 | ||
![]() |
dd69b65638 | ||
![]() |
e8ae27bf8a | ||
![]() |
b068ee307f | ||
![]() |
3b45b9d74e | ||
![]() |
ab6e73066b | ||
![]() |
258fbd6bf9 | ||
![]() |
c2af281c0c | ||
![]() |
aa366b5113 | ||
![]() |
c1ed6088a6 | ||
![]() |
22f2a1d47b | ||
![]() |
3de6695ae8 | ||
![]() |
89e4de8d7b | ||
![]() |
36358bad84 | ||
![]() |
c3dac0f8b6 | ||
![]() |
db01dbc4ee | ||
![]() |
766ccc2210 | ||
![]() |
f5166b3bb6 | ||
![]() |
b83484df97 | ||
![]() |
ac3807ee8d | ||
![]() |
c529e2f85b | ||
![]() |
eaee504c4d | ||
![]() |
9c68853023 | ||
![]() |
43fe9fd171 | ||
![]() |
677a1f80c8 | ||
![]() |
c33805791d | ||
![]() |
5a2a150829 | ||
![]() |
2aeefb13be | ||
![]() |
405be1c940 | ||
![]() |
4d27420543 | ||
![]() |
50a5a6f315 | ||
![]() |
32344c4dc4 | ||
![]() |
5a9f5a6514 | ||
![]() |
4560f7037d | ||
![]() |
832dde9cb6 | ||
![]() |
1af7d8e547 | ||
![]() |
4aac98f145 | ||
![]() |
4e42ad5bf2 | ||
![]() |
3558293ce8 | ||
![]() |
d43fbc0c0e | ||
![]() |
0cdb5d0aa1 | ||
![]() |
75006cf21d | ||
![]() |
8bb6b81c60 | ||
![]() |
50ddf6a68f | ||
![]() |
faef004250 | ||
![]() |
aa0e8bf568 | ||
![]() |
8fdd434bb5 | ||
![]() |
e6e0887005 | ||
![]() |
32f0d24e1f | ||
![]() |
568370827e | ||
![]() |
2cb292de6b | ||
![]() |
304d223a2f | ||
![]() |
58977be208 | ||
![]() |
b6660634b4 | ||
![]() |
f61ae0001c | ||
![]() |
840dc1981f | ||
![]() |
7fcdf8369e | ||
![]() |
f512cffcd0 | ||
![]() |
c161bb0c18 | ||
![]() |
f91f80ca19 | ||
![]() |
4492a4219a | ||
![]() |
51149b65ad | ||
![]() |
764154dc75 | ||
![]() |
69328ba304 | ||
![]() |
09c223de00 | ||
![]() |
11ea995ff3 | ||
![]() |
1a4dfd5658 | ||
![]() |
ec8b016d08 | ||
![]() |
f906fad985 | ||
![]() |
b8b0497697 | ||
![]() |
d5fe1bce63 | ||
![]() |
8a75b3c50c | ||
![]() |
45c46504e2 | ||
![]() |
642d729847 | ||
![]() |
607eec8532 | ||
![]() |
881ec133d9 | ||
![]() |
fa960f7d95 | ||
![]() |
442638e562 | ||
![]() |
ca09f4dba4 | ||
![]() |
13bc0e2367 | ||
![]() |
66376389fe | ||
![]() |
59dd0f8a48 | ||
![]() |
f71271dbaa | ||
![]() |
7a3c0d3519 | ||
![]() |
b576ad4ca3 | ||
![]() |
d706dc1f80 | ||
![]() |
5d590a1e87 | ||
![]() |
30662e4e2b | ||
![]() |
1d5089e574 | ||
![]() |
91749844e6 | ||
![]() |
3d8cc222d5 | ||
![]() |
165e5169a9 | ||
![]() |
0298837252 | ||
![]() |
a2cdff5583 | ||
![]() |
27e67cc371 | ||
![]() |
50e1b23efb | ||
![]() |
7f5d491a05 | ||
![]() |
fc49d33449 | ||
![]() |
dd060656d3 | ||
![]() |
545d1536d8 | ||
![]() |
cf0c39723e | ||
![]() |
927aecaf6d | ||
![]() |
49d94cced0 | ||
![]() |
c57ec92eb6 | ||
![]() |
a179e39c38 | ||
![]() |
66bd809ac9 | ||
![]() |
5ef0dc7666 | ||
![]() |
4a98b36416 | ||
![]() |
53f2aa93ae | ||
![]() |
f6f0aed9f3 | ||
![]() |
a1d4b18d8d | ||
![]() |
cb4940051a | ||
![]() |
8ae80d2fa5 | ||
![]() |
c5f1ae38a2 | ||
![]() |
8ddc210bf7 | ||
![]() |
c9249e2d3a | ||
![]() |
bbc465efff | ||
![]() |
562660df9b | ||
![]() |
0d9c8f66a3 | ||
![]() |
05a44d2813 | ||
![]() |
85522c0d48 | ||
![]() |
4a18c895ca | ||
![]() |
db157e3168 | ||
![]() |
93e3aca5fa | ||
![]() |
9644ba6dcd | ||
![]() |
ef08bce645 | ||
![]() |
865739e5b1 | ||
![]() |
1a5128f51e | ||
![]() |
1d5da8660b | ||
![]() |
8d116a4ba1 | ||
![]() |
761478a032 | ||
![]() |
fffe642d67 | ||
![]() |
984bcb5d69 | ||
![]() |
737db4a7dc | ||
![]() |
44955943f9 | ||
![]() |
22e444c5c7 | ||
![]() |
25e1674fbe | ||
![]() |
e0ab056d0c | ||
![]() |
dd1a07f207 | ||
![]() |
aee1d7fb96 | ||
![]() |
c7c6a79bd0 | ||
![]() |
1b7f4567cb | ||
![]() |
171501b93f | ||
![]() |
e98879f19c | ||
![]() |
7b33b1c916 | ||
![]() |
8b61c49987 | ||
![]() |
aab281546c | ||
![]() |
86e5c67d6c | ||
![]() |
e892356884 | ||
![]() |
9adc94985f | ||
![]() |
a8bd3ba1bb | ||
![]() |
ac15486ae0 | ||
![]() |
ea6a7a9725 | ||
![]() |
9cb3d8d200 | ||
![]() |
be23be08dc | ||
![]() |
f77c04d007 | ||
![]() |
359a21f102 | ||
![]() |
2965fb843d | ||
![]() |
720917f39a | ||
![]() |
d2a30acf33 | ||
![]() |
dc79f4c8c6 | ||
![]() |
91f2458020 | ||
![]() |
6233dc6210 | ||
![]() |
6d15475815 | ||
![]() |
e7678cdaa4 | ||
![]() |
41d3440658 | ||
![]() |
aea3ade74f | ||
![]() |
ca49a7bec2 | ||
![]() |
5ed8b2be55 | ||
![]() |
39cf27689b | ||
![]() |
537ae4f990 | ||
![]() |
fc04966c36 | ||
![]() |
6a7561203d | ||
![]() |
c5e7490963 | ||
![]() |
d6fc7430b9 | ||
![]() |
ecc602e3bb | ||
![]() |
29e94f89db | ||
![]() |
9376aeef9f | ||
![]() |
cac8f7f1cf | ||
![]() |
d8c48903c4 | ||
![]() |
3664f4a859 | ||
![]() |
1e3d92f8a9 | ||
![]() |
591b3249da | ||
![]() |
6eed02bacc | ||
![]() |
56c4ddfaf6 | ||
![]() |
9b7252b8bd | ||
![]() |
ee2c0d7e7f | ||
![]() |
8e731ca622 | ||
![]() |
8493495361 | ||
![]() |
eb78a0b53f | ||
![]() |
799ec7b8c5 | ||
![]() |
b50898894d | ||
![]() |
ddfa743aba | ||
![]() |
fe504d3357 | ||
![]() |
c7f0ac1bf9 | ||
![]() |
7f80d4dc7d | ||
![]() |
4baecc1d4a | ||
![]() |
40be5fa99f | ||
![]() |
4ff8d9f6b4 | ||
![]() |
c26105d22e | ||
![]() |
8cd4f95ea3 | ||
![]() |
b068bef45d | ||
![]() |
c7778641dd | ||
![]() |
c03f6065fa | ||
![]() |
67bbf9c961 | ||
![]() |
0f55c20afd | ||
![]() |
e3fe9a93c7 | ||
![]() |
2ccd2b016d | ||
![]() |
81865ec5bd | ||
![]() |
375316d0e2 | ||
![]() |
22bd2ae63f | ||
![]() |
e9310171f7 | ||
![]() |
ddd33fd7e4 | ||
![]() |
4dfba7a250 | ||
![]() |
01c3001eb7 | ||
![]() |
4f1b005522 | ||
![]() |
3df665a888 | ||
![]() |
b727821c79 | ||
![]() |
2577e3a703 | ||
![]() |
a5f21ca700 | ||
![]() |
a2461021b6 | ||
![]() |
0afe0bb777 | ||
![]() |
2694eb9df0 | ||
![]() |
9b6df109c7 | ||
![]() |
479e9be45d | ||
![]() |
8736342782 | ||
![]() |
26aea0ed37 | ||
![]() |
8526de84a5 | ||
![]() |
37549e4563 | ||
![]() |
fa81a23138 | ||
![]() |
5f3e10de8b | ||
![]() |
8316ff2b0a | ||
![]() |
091308cb3e | ||
![]() |
0ab5f70b3c | ||
![]() |
ff0a2cff05 | ||
![]() |
4fadf647d2 | ||
![]() |
89934b405e | ||
![]() |
bbac59148c | ||
![]() |
a36b8fdc94 | ||
![]() |
5bd18e3fdc | ||
![]() |
89be689f77 | ||
![]() |
ca487ae131 | ||
![]() |
c6b058b7d2 | ||
![]() |
9859d837ca | ||
![]() |
ed2bebd783 | ||
![]() |
a68f1e7adb | ||
![]() |
64bc12c154 | ||
![]() |
2ecdde0045 | ||
![]() |
391bd2a48f | ||
![]() |
27e485d22e | ||
![]() |
940441106d | ||
![]() |
edfd55c197 | ||
![]() |
feb1d63771 | ||
![]() |
0ee73ccbe5 | ||
![]() |
dfc4caa1e4 | ||
![]() |
7841c8a3df | ||
![]() |
9cacc57350 | ||
![]() |
be70f42de7 | ||
![]() |
2f55291ceb | ||
![]() |
49dd61906a | ||
![]() |
3ff6874658 | ||
![]() |
f129586459 | ||
![]() |
bc7d00ea6d | ||
![]() |
bb6263af60 | ||
![]() |
5cf3c2663b | ||
![]() |
412d691f54 | ||
![]() |
55b9d0a24a | ||
![]() |
5ff5ee0698 | ||
![]() |
5f67bace1b | ||
![]() |
ee1bbcf0bb | ||
![]() |
4d303e76be | ||
![]() |
50606f8569 | ||
![]() |
a6749046f6 | ||
![]() |
2e2494fbef | ||
![]() |
0a9697f5e1 | ||
![]() |
7e59769b1f | ||
![]() |
7361a1206d | ||
![]() |
43c18f3cfe | ||
![]() |
058c0348fd | ||
![]() |
71a254489c | ||
![]() |
5740038026 | ||
![]() |
f8e2adfe91 | ||
![]() |
afb1c57470 | ||
![]() |
42b9b2f5b3 | ||
![]() |
28a083bddc | ||
![]() |
029a78813d | ||
![]() |
def3a95b14 | ||
![]() |
a297a44d2f | ||
![]() |
34e22c54bc | ||
![]() |
e96a7f0dfb | ||
![]() |
2a77e282f8 | ||
![]() |
dbabbe180b | ||
![]() |
559858c822 | ||
![]() |
0a95b2f30c | ||
![]() |
7f3a2bc727 | ||
![]() |
6685414a77 | ||
![]() |
0cd3ebfc40 | ||
![]() |
5740607806 | ||
![]() |
eb151e39b0 | ||
![]() |
594221fff2 | ||
![]() |
8f3e5553f3 | ||
![]() |
5f9a0b568b | ||
![]() |
3399235bec | ||
![]() |
7d24cce78a | ||
![]() |
1c09c0c832 | ||
![]() |
2036c7158d | ||
![]() |
3e37bcedf4 | ||
![]() |
32c6ac9133 | ||
![]() |
4f233e3ba2 | ||
![]() |
fe3bea090e | ||
![]() |
e1181475e1 | ||
![]() |
931ee4bf62 | ||
![]() |
53231a81dd | ||
![]() |
8a3201d91e | ||
![]() |
fc89d1968c | ||
![]() |
d11f9717fd | ||
![]() |
5b85b1a539 | ||
![]() |
d6258d60d6 | ||
![]() |
186a8116be | ||
![]() |
7b6c0b99bb | ||
![]() |
b41a8aaffd | ||
![]() |
4f0554fa54 | ||
![]() |
4c7220322b | ||
![]() |
7a0beb4867 | ||
![]() |
b3c8afe272 | ||
![]() |
502c68264d | ||
![]() |
5526301908 | ||
![]() |
786090b35d | ||
![]() |
ef92e06de1 | ||
![]() |
9a9d98e02f | ||
![]() |
4852a2c5cc | ||
![]() |
c02f6fb3fe | ||
![]() |
31b4f39d3e | ||
![]() |
1a18012be3 | ||
![]() |
e3cfa4bcae | ||
![]() |
eac91d0453 | ||
![]() |
cb04226b4a | ||
![]() |
ceffa70b97 | ||
![]() |
b72dccb3e3 | ||
![]() |
1044558b64 | ||
![]() |
d15c61e84c | ||
![]() |
cce0efdff8 | ||
![]() |
01abca9852 | ||
![]() |
a8b7c65bca | ||
![]() |
c772963c9c | ||
![]() |
ae92b85572 | ||
![]() |
cc1f1c60ee | ||
![]() |
e549ccb32e | ||
![]() |
2751064692 | ||
![]() |
8f3cdf6236 | ||
![]() |
99d56248f8 | ||
![]() |
976143e365 | ||
![]() |
4162c20787 | ||
![]() |
19b1173577 | ||
![]() |
d97a90acb8 | ||
![]() |
feff5381b4 | ||
![]() |
25057811a5 | ||
![]() |
bf3d7d1f9a | ||
![]() |
4fd91c6fa4 | ||
![]() |
b7db5c8129 | ||
![]() |
d40e3200a7 | ||
![]() |
688fed36ca | ||
![]() |
7a15d2a5c0 | ||
![]() |
d15e119d07 | ||
![]() |
444cc78a3e | ||
![]() |
91becb3042 | ||
![]() |
9ae5b4e9be | ||
![]() |
086a470208 | ||
![]() |
42f6c15186 | ||
![]() |
7f91462019 | ||
![]() |
1aae2ad91b | ||
![]() |
ecc9393b36 | ||
![]() |
e13ba36abb | ||
![]() |
be17e9ed54 | ||
![]() |
2b383848a7 | ||
![]() |
307ff3bdea | ||
![]() |
111072a9f0 | ||
![]() |
2f5ef4d2b7 | ||
![]() |
f46f42b2b2 | ||
![]() |
690cde6903 | ||
![]() |
6820a4de23 | ||
![]() |
3a14ce19a5 | ||
![]() |
6eae466e32 | ||
![]() |
359bb6303d | ||
![]() |
87ff5479fc | ||
![]() |
08a9579883 | ||
![]() |
4c5a6b0e8d | ||
![]() |
0a8961a0e2 | ||
![]() |
36891a6775 | ||
![]() |
88f546b166 | ||
![]() |
b871261c10 | ||
![]() |
f64e3d5d9e | ||
![]() |
baeb981746 | ||
![]() |
81593cfc6a | ||
![]() |
910411f2f5 | ||
![]() |
d66e87b02e | ||
![]() |
58f55683c9 | ||
![]() |
f58adc4569 | ||
![]() |
2ebd1258b8 | ||
![]() |
9187caeab1 | ||
![]() |
25e9de9bfd | ||
![]() |
88ef98961c | ||
![]() |
3141ad0e40 | ||
![]() |
d8a17ca7c2 | ||
![]() |
233e33fe68 | ||
![]() |
cb0b2a27e3 | ||
![]() |
d39d261b7e | ||
![]() |
2a156572e8 | ||
![]() |
08b616e2f5 | ||
![]() |
c045ba3209 | ||
![]() |
d2514e3969 | ||
![]() |
02ebda559d | ||
![]() |
f47a7e8056 | ||
![]() |
7f2299c8eb | ||
![]() |
4ebbc0bf67 | ||
![]() |
b83a8d5768 | ||
![]() |
75cea65c99 | ||
![]() |
9e67d0baa3 | ||
![]() |
340e139ea4 | ||
![]() |
a84cc91682 | ||
![]() |
b2d107db4f | ||
![]() |
d9d991928f | ||
![]() |
b64daf9b3f | ||
![]() |
39efe8ac1e | ||
![]() |
48b492269b | ||
![]() |
3cb7d1bd8a | ||
![]() |
56abb316eb | ||
![]() |
90a9fb59ce | ||
![]() |
6b95875dc5 | ||
![]() |
e44c13cffe | ||
![]() |
087f38f347 | ||
![]() |
615b9803bb | ||
![]() |
f0fa9c748a | ||
![]() |
0cdd3c32de | ||
![]() |
c267caa542 | ||
![]() |
bd47c14c50 | ||
![]() |
5d2f0cb204 | ||
![]() |
c44196143a | ||
![]() |
dd856d5ad9 | ||
![]() |
6399012cee | ||
![]() |
2b22ea9630 | ||
![]() |
aae88ac799 | ||
![]() |
40422e9c55 | ||
![]() |
c9e571560f | ||
![]() |
407c9781f9 | ||
![]() |
fdebad0b25 | ||
![]() |
399cb4ca85 | ||
![]() |
8b4edf0229 | ||
![]() |
21691cb19b | ||
![]() |
564df33ac1 | ||
![]() |
6723e88798 | ||
![]() |
ba80d0be99 | ||
![]() |
9e01337a21 | ||
![]() |
a63d0a49b0 | ||
![]() |
9e9db0b22f | ||
![]() |
8e46d9a03a | ||
![]() |
279983dc8d | ||
![]() |
b05d50eac2 | ||
![]() |
99bc0a56a6 | ||
![]() |
b156d37d7f | ||
![]() |
3d51ba3479 | ||
![]() |
b8e734a24e | ||
![]() |
a0f3879a1f | ||
![]() |
4b2a580015 | ||
![]() |
d6ed107510 | ||
![]() |
61884c3b52 | ||
![]() |
c789e9c9f1 | ||
![]() |
25e8aa5cd2 | ||
![]() |
c4fba3708c | ||
![]() |
cbe0cf6315 | ||
![]() |
877663178c | ||
![]() |
c2749e0a80 | ||
![]() |
e4d2cd47c2 | ||
![]() |
12deb22f7f | ||
![]() |
d5515577d5 | ||
![]() |
fab0a6d75c | ||
![]() |
6d4824e02e | ||
![]() |
ea69276fd5 | ||
![]() |
400b7b8c74 | ||
![]() |
d585a5609d | ||
![]() |
c0865ac013 | ||
![]() |
de785f9127 | ||
![]() |
0a2f367e19 | ||
![]() |
5a7920ba60 | ||
![]() |
cec079ee72 | ||
![]() |
06f592820d | ||
![]() |
b39e17b06c | ||
![]() |
ff2c7dc0f8 | ||
![]() |
042a975238 | ||
![]() |
462fd4dffe | ||
![]() |
04522cd1c4 | ||
![]() |
cd751f98cb | ||
![]() |
7e956f879e | ||
![]() |
c7db07eae8 | ||
![]() |
085abe932a | ||
![]() |
7f59fccd52 | ||
![]() |
4076324c6f | ||
![]() |
78f03cd5f2 | ||
![]() |
5d4846b241 | ||
![]() |
b8fa1657ff | ||
![]() |
16e154a2c4 | ||
![]() |
caf0a5352a | ||
![]() |
ab80e092fb | ||
![]() |
bc32d806dd | ||
![]() |
772479ea2f | ||
![]() |
ac3eb678aa | ||
![]() |
83755748fd | ||
![]() |
a44e3f442f | ||
![]() |
25e60d6ab1 | ||
![]() |
72127ffac5 | ||
![]() |
c9781111e1 | ||
![]() |
64d511ef29 | ||
![]() |
5187ff2d17 | ||
![]() |
5e21ffe09a | ||
![]() |
7efe96d504 | ||
![]() |
d6836fb345 | ||
![]() |
2a9ea2c9f5 | ||
![]() |
dfff6ac852 | ||
![]() |
c00d7e056a | ||
![]() |
c30bddc18f | ||
![]() |
4671f8510c | ||
![]() |
ea2656277b | ||
![]() |
cd43536b27 | ||
![]() |
2eaf319b45 | ||
![]() |
1a23a411a1 | ||
![]() |
33ae76405f | ||
![]() |
ed3096913d | ||
![]() |
f9785c230c | ||
![]() |
910aeaafc1 | ||
![]() |
9da2c24903 | ||
![]() |
16a3fb1c3f | ||
![]() |
445472c2ad | ||
![]() |
8e2c2be7a5 | ||
![]() |
efaae93e48 | ||
![]() |
40e667280b | ||
![]() |
76791e90b9 | ||
![]() |
4eef2bc6f8 | ||
![]() |
3e0a4259a8 | ||
![]() |
e2b47d8483 | ||
![]() |
1e94f3423b | ||
![]() |
1863014fbd | ||
![]() |
31ebb42268 | ||
![]() |
63657df6e1 | ||
![]() |
b14250a677 | ||
![]() |
b2d78ae00c | ||
![]() |
5bbe3d71c2 | ||
![]() |
146157ddf0 | ||
![]() |
db3bf715e0 | ||
![]() |
383aad8007 | ||
![]() |
6b795f64a5 | ||
![]() |
94f5037ac3 | ||
![]() |
43915b302c | ||
![]() |
41e11a627d | ||
![]() |
a3fa5ae57b | ||
![]() |
9bf140afb4 | ||
![]() |
92a0cc7d94 | ||
![]() |
0b48e2a267 | ||
![]() |
08cba2dcc1 | ||
![]() |
98cb17f4fd | ||
![]() |
46ac878f6a | ||
![]() |
59e6165fa6 | ||
![]() |
35455b17be | ||
![]() |
16ca097ef2 | ||
![]() |
3cd0383d91 | ||
![]() |
2d6b86945f | ||
![]() |
8e2acc0df4 | ||
![]() |
e726d917e7 | ||
![]() |
1e6909d25e | ||
![]() |
00f0175ba9 | ||
![]() |
3f75452454 | ||
![]() |
06738fc051 | ||
![]() |
49a60ec084 | ||
![]() |
419b9a7ff6 | ||
![]() |
68abc19229 | ||
![]() |
e4e71215d6 | ||
![]() |
88d6e7c238 | ||
![]() |
90d2f8abfd | ||
![]() |
a7884250b1 | ||
![]() |
4dcbd24bad | ||
![]() |
05618e7e0b | ||
![]() |
dbc7c5f34a | ||
![]() |
47354a7404 | ||
![]() |
3367f17f60 | ||
![]() |
72efe6dcdf | ||
![]() |
8e5b3129de | ||
![]() |
2e70a8945a | ||
![]() |
73321e22d2 | ||
![]() |
8647624261 | ||
![]() |
8da9530652 | ||
![]() |
2760a3ef97 | ||
![]() |
89dc8d79a7 | ||
![]() |
1de16c7f15 | ||
![]() |
18276a8b42 | ||
![]() |
4122daa494 | ||
![]() |
ba4567a987 | ||
![]() |
5e65d8e126 | ||
![]() |
5626e65af2 | ||
![]() |
40edd58d36 | ||
![]() |
8d2682fc50 | ||
![]() |
331ac35f58 | ||
![]() |
e11a702c05 | ||
![]() |
73c4e9f0b2 | ||
![]() |
84f82d0a1c | ||
![]() |
2b0cb760d4 | ||
![]() |
05dbf0707a | ||
![]() |
c89d7a7426 | ||
![]() |
bb555926c4 | ||
![]() |
d42bac2866 | ||
![]() |
ce3990c1d3 | ||
![]() |
1c9b6b84df | ||
![]() |
ec3ecdc2c8 | ||
![]() |
722eba20ae | ||
![]() |
4861391501 | ||
![]() |
39a6d6086e | ||
![]() |
b5361d75e0 | ||
![]() |
24b7c7a365 | ||
![]() |
0d79039027 | ||
![]() |
45d313bbd7 | ||
![]() |
bfa2b92ca6 | ||
![]() |
4527bafad0 | ||
![]() |
c6a9beebff | ||
![]() |
e3715cddf0 | ||
![]() |
71ffa9596a | ||
![]() |
168343d2e8 | ||
![]() |
50dc301f96 | ||
![]() |
11ad09e4bf | ||
![]() |
e7a44a68e9 | ||
![]() |
cb4bafa4c0 | ||
![]() |
905bba637a | ||
![]() |
14ff4b75a2 | ||
![]() |
69f0882d3b | ||
![]() |
e0b73dc977 | ||
![]() |
5825a6be83 | ||
![]() |
dcf9d8f812 | ||
![]() |
3c84b01e02 | ||
![]() |
d4a3e437ae | ||
![]() |
fb3536fd60 | ||
![]() |
a9b84f9425 | ||
![]() |
be53902a13 | ||
![]() |
90da4821a2 | ||
![]() |
7855c52e81 | ||
![]() |
c91c6545fe | ||
![]() |
940ee1a641 | ||
![]() |
9ac5b04487 | ||
![]() |
af87ade8b8 | ||
![]() |
1fa076e187 | ||
![]() |
e80d9535d7 | ||
![]() |
2e2077172d | ||
![]() |
8a585856d1 | ||
![]() |
4152ca5c8a | ||
![]() |
4e23d3d49f | ||
![]() |
b6667c471c | ||
![]() |
42ad1c64bf | ||
![]() |
c0371d3965 | ||
![]() |
a7b78a5091 | ||
![]() |
0f6e18df8f | ||
![]() |
004d7cd290 | ||
![]() |
0227d96f48 | ||
![]() |
bbac6f5c20 | ||
![]() |
07959fc007 | ||
![]() |
351face053 | ||
![]() |
24ab0f1ea1 | ||
![]() |
60e9fb5a1b | ||
![]() |
59056937bf | ||
![]() |
f1d259a07b | ||
![]() |
dd5733202d | ||
![]() |
178fc2db82 | ||
![]() |
a1e1a7a721 | ||
![]() |
8d6e377ed8 | ||
![]() |
9c555f5a84 | ||
![]() |
a090e59b37 | ||
![]() |
e3105f5f1e | ||
![]() |
e3cac07a9b | ||
![]() |
b2876117f0 | ||
![]() |
156d034d3d | ||
![]() |
d991215a8e | ||
![]() |
182ec003cc | ||
![]() |
386ab1dad2 | ||
![]() |
6406d5f792 | ||
![]() |
39a56a1687 | ||
![]() |
c5f3281446 | ||
![]() |
26dbcb7640 | ||
![]() |
e18498ee27 | ||
![]() |
d9d58c9d79 | ||
![]() |
bb431f124c | ||
![]() |
ad65698a48 | ||
![]() |
82e09db0e9 | ||
![]() |
272abc2fb7 | ||
![]() |
3f03f7ed3d | ||
![]() |
2fea4efa8f | ||
![]() |
0eea5d31e0 | ||
![]() |
3737e0aa6f | ||
![]() |
978c01ce15 | ||
![]() |
f1b73353e4 | ||
![]() |
c620fee404 | ||
![]() |
7869af6fa8 | ||
![]() |
21260754b1 | ||
![]() |
8fe5a443e2 | ||
![]() |
a16b2c5606 | ||
![]() |
25d21f4161 | ||
![]() |
0a42e6fbc5 | ||
![]() |
bdcea111f3 | ||
![]() |
6fa669a125 | ||
![]() |
2336aa684d | ||
![]() |
c08c5ded1a | ||
![]() |
03844d1f51 | ||
![]() |
78370689b8 | ||
![]() |
39a8e5e041 | ||
![]() |
58e5d0c240 | ||
![]() |
7cc7ae9d24 | ||
![]() |
e961488d98 | ||
![]() |
c9aba7c7ca | ||
![]() |
e4f2e4a99a | ||
![]() |
5f97728780 | ||
![]() |
173dccb646 | ||
![]() |
d00adca199 | ||
![]() |
2beec54e47 | ||
![]() |
2eb3100dca | ||
![]() |
1ec9041bf8 | ||
![]() |
c919ab4bdf | ||
![]() |
3932d9b660 | ||
![]() |
dc036016a3 | ||
![]() |
d1917c918e | ||
![]() |
c5aa03c8b9 | ||
![]() |
1f1cd5c4bc | ||
![]() |
e59c7f887b | ||
![]() |
a7cc447b28 | ||
![]() |
5b8db66227 | ||
![]() |
b066ac0b23 | ||
![]() |
d36b02927f | ||
![]() |
7a2bef02c0 | ||
![]() |
4f10973853 | ||
![]() |
61d15870aa | ||
![]() |
e3433fdaef | ||
![]() |
4ff41cfb4b | ||
![]() |
a91d913901 | ||
![]() |
0029d2b08b | ||
![]() |
681ef77734 | ||
![]() |
eb048ce0c6 | ||
![]() |
ec288b1b07 | ||
![]() |
6c09c167ef | ||
![]() |
6c0578d31c | ||
![]() |
c0da1bc44d | ||
![]() |
c6ed104e91 | ||
![]() |
32e091260a | ||
![]() |
090b1cf229 | ||
![]() |
9306c9584b | ||
![]() |
303610154b | ||
![]() |
438f07c9f7 | ||
![]() |
86ac21c3cd | ||
![]() |
b5081339e9 | ||
![]() |
4f3244351d | ||
![]() |
40894bcc49 | ||
![]() |
54e662c6f5 | ||
![]() |
7831f65f83 | ||
![]() |
0e1bbf9259 | ||
![]() |
285c9f0dca | ||
![]() |
94b58239e8 | ||
![]() |
d6e70e7053 | ||
![]() |
00affe43aa | ||
![]() |
7e15a07fea | ||
![]() |
acd4b81cc9 | ||
![]() |
2bba3dc3b5 | ||
![]() |
d36699624b | ||
![]() |
f2db594567 | ||
![]() |
041abec5b2 | ||
![]() |
8e533496b0 | ||
![]() |
3fdd3ed9f7 | ||
![]() |
35936bfa79 | ||
![]() |
7ac1b0c917 | ||
![]() |
8f8accf9fb | ||
![]() |
c668ed4225 | ||
![]() |
5189450500 | ||
![]() |
6adbe84120 | ||
![]() |
d5717d25cd | ||
![]() |
92cec8add5 | ||
![]() |
b6bbd80212 | ||
![]() |
54a0a7924a | ||
![]() |
68794e074b | ||
![]() |
1b4bca605c | ||
![]() |
7e1c8efa02 | ||
![]() |
d54aee5b0c | ||
![]() |
c29daa63ae | ||
![]() |
aa7aafa5d9 | ||
![]() |
03d2226f45 | ||
![]() |
c97bdce962 | ||
![]() |
c9f3127ca8 | ||
![]() |
27b83e3095 | ||
![]() |
33b977e36b | ||
![]() |
73bfd3d0eb | ||
![]() |
2852177f4d | ||
![]() |
32a45769d1 | ||
![]() |
b233c55b12 | ||
![]() |
3b387ef274 | ||
![]() |
c15cacc902 | ||
![]() |
4621423e5e | ||
![]() |
bd8c770439 | ||
![]() |
df39586a88 | ||
![]() |
0c2025cdc4 | ||
![]() |
8f6bc97a36 | ||
![]() |
23e9d8bd88 | ||
![]() |
29a5adc6af | ||
![]() |
81d9a27c47 | ||
![]() |
864ad1b5bb | ||
![]() |
1a1a83f1fc | ||
![]() |
158181ff37 | ||
![]() |
b385e0dd2b | ||
![]() |
68d54030a1 | ||
![]() |
2c3a2da48a | ||
![]() |
eeaa60f6fa | ||
![]() |
affffe1122 | ||
![]() |
bf4b470098 | ||
![]() |
e9b01f202b | ||
![]() |
68b904884b | ||
![]() |
dc9039086c | ||
![]() |
f39c07a3bb | ||
![]() |
35e96f621b | ||
![]() |
91a310e603 | ||
![]() |
2e7df9e423 | ||
![]() |
25f4f7982c | ||
![]() |
fcd0f72cdd | ||
![]() |
ba83d5daeb | ||
![]() |
23687672f3 | ||
![]() |
685baf77df | ||
![]() |
8376904aeb | ||
![]() |
87499e44f2 | ||
![]() |
66d5cf8d2d | ||
![]() |
ce7304f909 | ||
![]() |
2d3ac4e2ed | ||
![]() |
bfa2cfc9ed | ||
![]() |
c905d59106 | ||
![]() |
b50f7c22c3 | ||
![]() |
ecd2872cf4 | ||
![]() |
91c6c727d5 | ||
![]() |
0a6326c6ac | ||
![]() |
ea387fcfb7 | ||
![]() |
93a3256da8 | ||
![]() |
76d7c616bb | ||
![]() |
49891d89fc | ||
![]() |
061b46e09d | ||
![]() |
b24addddb4 | ||
![]() |
16c4c066f4 | ||
![]() |
3b87093bff | ||
![]() |
0f5372dbaa | ||
![]() |
bd9f03a336 | ||
![]() |
9d4f8b5379 | ||
![]() |
0a10f6db26 | ||
![]() |
93ad8e8db2 | ||
![]() |
691e009f97 | ||
![]() |
701f3a1af6 | ||
![]() |
9ac8820fc9 | ||
![]() |
89e5f6ca53 | ||
![]() |
fc63a98f17 | ||
![]() |
67503870ca | ||
![]() |
a142f10aa1 | ||
![]() |
4eb8839037 | ||
![]() |
e1686aabf7 | ||
![]() |
2d3db4b594 | ||
![]() |
bba44fc3fe | ||
![]() |
ef180f1623 | ||
![]() |
c8b3328996 | ||
![]() |
1684c52a88 | ||
![]() |
fd7ebd4d15 | ||
![]() |
7415dc4649 | ||
![]() |
c5edf94003 | ||
![]() |
3ba725a556 | ||
![]() |
a019fbd970 | ||
![]() |
8849a5336e | ||
![]() |
ba0853888d | ||
![]() |
8c685faa64 | ||
![]() |
8a927c284d | ||
![]() |
29f96fb1f1 | ||
![]() |
14853ea2f2 | ||
![]() |
4a12a9f3e9 | ||
![]() |
2f6c069296 | ||
![]() |
e11a47f18b | ||
![]() |
c927d24af6 | ||
![]() |
10b2754056 | ||
![]() |
f2cbc9b7c5 | ||
![]() |
94681850a1 | ||
![]() |
e41d1e4862 | ||
![]() |
90f582b188 | ||
![]() |
e65fbe1bb8 | ||
![]() |
b3a43ca7a4 | ||
![]() |
bcee2af398 | ||
![]() |
98fb27a577 | ||
![]() |
389de7c6bf | ||
![]() |
787f26c882 | ||
![]() |
895905b85a | ||
![]() |
7fd51535a4 | ||
![]() |
195467f014 | ||
![]() |
c20b429a90 | ||
![]() |
2d39c7855a | ||
![]() |
aa0c54dade | ||
![]() |
6d458caefe | ||
![]() |
2194ad81f4 | ||
![]() |
f14697416e | ||
![]() |
a32f491855 | ||
![]() |
bd4333447e | ||
![]() |
213949dc34 | ||
![]() |
1e9e397122 | ||
![]() |
61f704f269 | ||
![]() |
71da944c82 | ||
![]() |
ea6f2fbe92 | ||
![]() |
633400bb56 | ||
![]() |
ac9392b855 | ||
![]() |
fed948dbd4 | ||
![]() |
7a7b388401 | ||
![]() |
b647716199 | ||
![]() |
be93f29f2f | ||
![]() |
9491c6850b | ||
![]() |
80ea28e918 | ||
![]() |
b535a54f5f | ||
![]() |
404059f018 | ||
![]() |
abf6f8be71 | ||
![]() |
471995c5f7 | ||
![]() |
fe8dffef5d | ||
![]() |
462b170a30 | ||
![]() |
dcf664963f | ||
![]() |
10c9e4decf | ||
![]() |
1304719aae | ||
![]() |
d80682e753 | ||
![]() |
bda9ff8338 | ||
![]() |
68665d3cb5 | ||
![]() |
4101a8c099 | ||
![]() |
2c326d8222 | ||
![]() |
8033b058a9 | ||
![]() |
1dd788acdc | ||
![]() |
c8559648fa | ||
![]() |
96cf1b5a9f | ||
![]() |
7fcdf1cfa2 | ||
![]() |
169573bcb5 | ||
![]() |
114a8ffb9d | ||
![]() |
51fa97fb44 | ||
![]() |
7fb8db014e | ||
![]() |
fabee4e244 | ||
![]() |
3d41cb012a | ||
![]() |
8c266e8f3c | ||
![]() |
90fd764cd8 | ||
![]() |
821e3460fb | ||
![]() |
8b27c14aa9 | ||
![]() |
7a3383b482 | ||
![]() |
8f67130e9e | ||
![]() |
ec35f534c6 | ||
![]() |
f4954df0c9 | ||
![]() |
f4c594bfc6 | ||
![]() |
8a1f6711bf | ||
![]() |
5a19e25347 | ||
![]() |
a6e76ac010 | ||
![]() |
5e68671f88 | ||
![]() |
0dc600c69a | ||
![]() |
a39725b793 | ||
![]() |
d689ff63e8 | ||
![]() |
74720a22f3 | ||
![]() |
c10afa9643 | ||
![]() |
1f6fdde646 | ||
![]() |
cb3bca249a | ||
![]() |
79dc7a2d26 | ||
![]() |
8846e9376c | ||
![]() |
dc93f28381 | ||
![]() |
2e47442a6b | ||
![]() |
02d58faad4 | ||
![]() |
a9d4b49252 | ||
![]() |
169a6c63f0 | ||
![]() |
5544be7018 | ||
![]() |
f11c22ae30 | ||
![]() |
fa511dff45 | ||
![]() |
7cc47082d6 | ||
![]() |
0e682ad692 | ||
![]() |
53bced39fb | ||
![]() |
5cbfb6966a | ||
![]() |
38ecfc54c6 | ||
![]() |
011795bcbe | ||
![]() |
2ede200967 | ||
![]() |
e4e663ced4 | ||
![]() |
3ffb310fbd | ||
![]() |
a21065e6eb | ||
![]() |
4e44efaccb | ||
![]() |
13e0fb92b4 | ||
![]() |
93826d9556 | ||
![]() |
13d51f895b | ||
![]() |
a6aacd851b | ||
![]() |
ce3d1cd5cb | ||
![]() |
3aebbc5330 | ||
![]() |
aa7c8a9de0 | ||
![]() |
355700c904 | ||
![]() |
d20e3e6cb1 | ||
![]() |
9e52d1698a | ||
![]() |
5a4c460329 | ||
![]() |
f7a7e1c9ad | ||
![]() |
4059df0f2f | ||
![]() |
e579477490 | ||
![]() |
2ca0c2fd10 | ||
![]() |
73a31979e2 | ||
![]() |
6cd3863cf6 | ||
![]() |
cb245411b0 | ||
![]() |
334d9bbc09 | ||
![]() |
2244810dcf | ||
![]() |
908490764b | ||
![]() |
5544a77f77 | ||
![]() |
e034b69fa6 | ||
![]() |
f056636086 | ||
![]() |
24fbe2d61e | ||
![]() |
ce5d2f6d01 | ||
![]() |
d13d9b3c24 | ||
![]() |
07470c3dd0 | ||
![]() |
335c0b39a2 | ||
![]() |
6e0b60cc8f | ||
![]() |
4a7332f4c6 | ||
![]() |
0607c22f8e | ||
![]() |
20324388a4 | ||
![]() |
c0b441f8fd | ||
![]() |
0733e453c7 | ||
![]() |
d456d25a1c | ||
![]() |
73c2e3cadc | ||
![]() |
5dd9b0dcef | ||
![]() |
314219387e | ||
![]() |
50b976d716 | ||
![]() |
aa92c70134 | ||
![]() |
64569d3b8a | ||
![]() |
96d41a67c5 | ||
![]() |
a04a5dbfb1 | ||
![]() |
fbc84dd056 | ||
![]() |
8a713c1e90 | ||
![]() |
a5196bf3d6 | ||
![]() |
b6becada17 | ||
![]() |
fca36515b9 | ||
![]() |
18102ec708 | ||
![]() |
3a5c87f964 | ||
![]() |
a1620048fb | ||
![]() |
6ff9ca12d6 | ||
![]() |
77c2fcf147 | ||
![]() |
8a3dbb0401 | ||
![]() |
a4685d8b54 | ||
![]() |
c67e12e718 | ||
![]() |
0943b8b7eb | ||
![]() |
370f24290f | ||
![]() |
fd454300b6 | ||
![]() |
2b9840894d | ||
![]() |
cff76a98ae | ||
![]() |
a519a03f63 | ||
![]() |
9b96ea1a99 | ||
![]() |
6ab5a5b159 | ||
![]() |
3e8677e7e3 | ||
![]() |
26f5009e91 | ||
![]() |
14fc50e732 | ||
![]() |
5e56c3e7bf | ||
![]() |
b6b9e475fa | ||
![]() |
fe4930612a | ||
![]() |
916528e3f5 | ||
![]() |
6cf24cd47c | ||
![]() |
2197a490f7 | ||
![]() |
45d1acf916 | ||
![]() |
0006522211 | ||
![]() |
99f72fa499 | ||
![]() |
272f7f75e2 | ||
![]() |
ab6e464ae2 | ||
![]() |
5ea386d698 | ||
![]() |
f994c2f1fa | ||
![]() |
36ae82b73e | ||
![]() |
4233394e8f | ||
![]() |
6c81f708c5 | ||
![]() |
50bffd3284 | ||
![]() |
9c6fe6b0ff | ||
![]() |
1ce79eb219 | ||
![]() |
b19a0a5dc3 | ||
![]() |
e28f78ac55 | ||
![]() |
b57f425cfe | ||
![]() |
7acce8a724 | ||
![]() |
9d0c492d30 | ||
![]() |
5c3cff2f25 | ||
![]() |
87d75328b2 | ||
![]() |
c45d608569 | ||
![]() |
5ff8d6d0d2 | ||
![]() |
e1845365ea | ||
![]() |
1fa11f17ff | ||
![]() |
fec4f7f389 | ||
![]() |
556e4d9008 | ||
![]() |
efa9e5fdd0 | ||
![]() |
0e95233aa2 | ||
![]() |
8779e2a603 | ||
![]() |
58968f6a22 | ||
![]() |
72dab4a041 | ||
![]() |
37e75a1c5f | ||
![]() |
d4c548cf42 | ||
![]() |
2d30c2e1ad | ||
![]() |
bc3d56e7fd | ||
![]() |
22b2a579ba | ||
![]() |
9e2593a7de | ||
![]() |
0c8a7a77a8 | ||
![]() |
345d229385 | ||
![]() |
076811af68 | ||
![]() |
d5bdf8f508 | ||
![]() |
7d4ed8af03 | ||
![]() |
a28fb52719 | ||
![]() |
8622362394 | ||
![]() |
19a8e69476 | ||
![]() |
7d1a2d03e4 | ||
![]() |
071f707a6d | ||
![]() |
8d7cdbf427 | ||
![]() |
fe7f9571d2 | ||
![]() |
8823f89a32 | ||
![]() |
484d528b40 | ||
![]() |
bb265d2700 | ||
![]() |
d765b60778 | ||
![]() |
2ec8d37eb4 | ||
![]() |
b233ed7e03 | ||
![]() |
8d7cb8cc21 | ||
![]() |
fa3c1c81d5 | ||
![]() |
3dcf36c701 | ||
![]() |
e98e4e39a3 | ||
![]() |
447d143b9d | ||
![]() |
b17df7a07c | ||
![]() |
58e4adcd63 | ||
![]() |
1c230c27ec | ||
![]() |
7e6a36889c | ||
![]() |
209f4c296e | ||
![]() |
c4a79617a9 | ||
![]() |
0ef57501d9 | ||
![]() |
2dde07af55 | ||
![]() |
ead36985b3 | ||
![]() |
7d8e1c6e0c | ||
![]() |
6af240d8da | ||
![]() |
38d6d8542b | ||
![]() |
66498152f1 | ||
![]() |
e9c0296240 | ||
![]() |
8598e55370 | ||
![]() |
9488684703 | ||
![]() |
e1eeb483ef | ||
![]() |
7b069790ca | ||
![]() |
b932c267f8 | ||
![]() |
d5251513b1 | ||
![]() |
fb07c62f2c | ||
![]() |
b450a9c826 | ||
![]() |
2c45d67ad3 | ||
![]() |
d9329b1522 | ||
![]() |
6329248217 | ||
![]() |
57efcb9854 | ||
![]() |
081ba38707 | ||
![]() |
56841998de | ||
![]() |
747851724e | ||
![]() |
25f4510914 | ||
![]() |
d7e2f288ed | ||
![]() |
647baec5a4 | ||
![]() |
86a67fef48 | ||
![]() |
53eaead824 | ||
![]() |
995f11adb1 | ||
![]() |
c531f3d79b | ||
![]() |
aa9d140a2a | ||
![]() |
d4eb6a41b7 | ||
![]() |
bd7d3c38ad | ||
![]() |
6962540662 | ||
![]() |
81ef122ca9 | ||
![]() |
3177180af2 | ||
![]() |
6d2c1edc76 | ||
![]() |
2d185e42ec | ||
![]() |
d154603074 | ||
![]() |
8485a804ab | ||
![]() |
cecbcd9f3f | ||
![]() |
2490cb67a2 | ||
![]() |
2af71d7266 | ||
![]() |
2df4ade39b | ||
![]() |
6d6ac81d41 | ||
![]() |
a67f351b67 | ||
![]() |
38e553e418 | ||
![]() |
798e27286e | ||
![]() |
45fc03c190 | ||
![]() |
e4be679780 | ||
![]() |
4fd9992561 | ||
![]() |
d8e7f362dd | ||
![]() |
c5f6a8b0a2 | ||
![]() |
c80e450931 | ||
![]() |
3bb3db5314 | ||
![]() |
005c7b5797 | ||
![]() |
6c189708a5 | ||
![]() |
946408251f | ||
![]() |
f34859cb90 | ||
![]() |
e954bf6750 | ||
![]() |
e96a35b9a8 | ||
![]() |
a2ac800ab8 | ||
![]() |
6b6fde9098 | ||
![]() |
6717947ffe | ||
![]() |
843d2a9b5f | ||
![]() |
867ed156f7 | ||
![]() |
f75dd82866 | ||
![]() |
4b9c72f329 | ||
![]() |
1c182674b0 | ||
![]() |
32547f1127 | ||
![]() |
fa1effdb3c | ||
![]() |
7c9872e255 | ||
![]() |
4e4f1729dd | ||
![]() |
b6e55d9856 | ||
![]() |
f4ba3564f5 | ||
![]() |
f18d0a1212 | ||
![]() |
413938143b | ||
![]() |
a7d2703246 | ||
![]() |
6ec89f028f | ||
![]() |
74911be889 | ||
![]() |
1158a1ef3b | ||
![]() |
e144c58fb2 | ||
![]() |
70c2ebb698 | ||
![]() |
fc047b4e00 | ||
![]() |
3c17d3fc05 | ||
![]() |
d43d4684bd | ||
![]() |
27affd8da1 | ||
![]() |
11ec2cb94a | ||
![]() |
0c0cebe031 | ||
![]() |
a3aaedc76c | ||
![]() |
945f5b83f4 | ||
![]() |
2003421454 | ||
![]() |
d9c0a49cba | ||
![]() |
c62523666c | ||
![]() |
54f93f127e | ||
![]() |
e5adfd5d89 | ||
![]() |
e624364967 | ||
![]() |
276c2a67ef | ||
![]() |
f390425db3 | ||
![]() |
00ebd2d7f2 | ||
![]() |
ac5e72e280 | ||
![]() |
5dae1e1dc2 | ||
![]() |
83090b4705 | ||
![]() |
2a859abd33 | ||
![]() |
3f3ac4de25 | ||
![]() |
0d10f7bfe5 | ||
![]() |
9d4fd7f9b9 | ||
![]() |
5de019d9bd | ||
![]() |
69480be12a | ||
![]() |
7faa3decd9 | ||
![]() |
ae67eb0490 | ||
![]() |
ccb6d78bab | ||
![]() |
4d6c7bd6e3 | ||
![]() |
7f771e1e87 | ||
![]() |
c3fc94c4b8 | ||
![]() |
8731c95b35 | ||
![]() |
0a811cea4f | ||
![]() |
517d7d909d | ||
![]() |
7f0d4e36de | ||
![]() |
a191e7a4b1 | ||
![]() |
74a455fb11 | ||
![]() |
009b5e2bfd | ||
![]() |
645cd6a5ad | ||
![]() |
d465449b05 | ||
![]() |
25887b350d | ||
![]() |
b617b0832c | ||
![]() |
5e1b40ca7d | ||
![]() |
8156a89eff | ||
![]() |
3d6f4c8bbe | ||
![]() |
a8d3a80067 | ||
![]() |
3ae44211b3 | ||
![]() |
109230d0da | ||
![]() |
4d4205675a | ||
![]() |
b6d61f5ec0 | ||
![]() |
858c378930 | ||
![]() |
5c8025e23f | ||
![]() |
6976fb6ba7 | ||
![]() |
ef2c459941 | ||
![]() |
acf2f4988a | ||
![]() |
4af1830356 | ||
![]() |
74d548bf58 | ||
![]() |
0e715e71d9 | ||
![]() |
b6004a043c | ||
![]() |
41d49abbd9 | ||
![]() |
ac1a054bb3 | ||
![]() |
0548c4c175 | ||
![]() |
d20b4c97a9 | ||
![]() |
21fd08be71 | ||
![]() |
cd04535903 | ||
![]() |
175b962f55 | ||
![]() |
38fce780d9 | ||
![]() |
bb4174e6bc | ||
![]() |
4ca6bde32f | ||
![]() |
9d60dc16b8 | ||
![]() |
09189026e6 | ||
![]() |
1befdce0e6 | ||
![]() |
b5471300d2 | ||
![]() |
239b01db7c | ||
![]() |
f209eb448e | ||
![]() |
2862302bce | ||
![]() |
dfdf52eb9f | ||
![]() |
cfc7652a28 | ||
![]() |
9842508580 | ||
![]() |
ee7fcf2a07 | ||
![]() |
94f327219a | ||
![]() |
3b9b26f760 | ||
![]() |
33c75d98c9 | ||
![]() |
d6172ce37a | ||
![]() |
33c4ca36e4 | ||
![]() |
aa6e58f82a | ||
![]() |
9be9f70caa | ||
![]() |
c7d3dc6fab | ||
![]() |
30ce9acd33 | ||
![]() |
efb08feb85 | ||
![]() |
d6ee360f7b | ||
![]() |
084446418f | ||
![]() |
b0858427aa | ||
![]() |
f9d8d483cb | ||
![]() |
8254e8de31 | ||
![]() |
9fd62733b9 | ||
![]() |
9acfe6e11c | ||
![]() |
e58521c9e8 | ||
![]() |
868959350f | ||
![]() |
2a6122c54a | ||
![]() |
8950c241b3 | ||
![]() |
2634622d3d | ||
![]() |
3772b502f6 | ||
![]() |
38e8725bec | ||
![]() |
632357b275 | ||
![]() |
6083dc09a3 | ||
![]() |
a14301b2d6 | ||
![]() |
6004063206 | ||
![]() |
fc09eb21db | ||
![]() |
ea86442857 | ||
![]() |
bc55177832 | ||
![]() |
07ceadf7d9 | ||
![]() |
cd88e9f1f4 | ||
![]() |
97402d5ab5 | ||
![]() |
af704ae067 | ||
![]() |
1b9d659c3f | ||
![]() |
71ee356d2c | ||
![]() |
7634484dc2 | ||
![]() |
5942a611e4 | ||
![]() |
23c68045b4 | ||
![]() |
5e8aff2c5f | ||
![]() |
cd586623b6 | ||
![]() |
5885b9490c | ||
![]() |
972d6b6664 | ||
![]() |
e3a5c38382 | ||
![]() |
bac1ed6579 | ||
![]() |
ad5de59f93 | ||
![]() |
cc70838dc9 | ||
![]() |
d9e39f5c6f | ||
![]() |
5009c236fc | ||
![]() |
f6c2e40a11 | ||
![]() |
9ddc25afe3 | ||
![]() |
918332cf9c | ||
![]() |
01a894a269 | ||
![]() |
4d5a88c7fc | ||
![]() |
01c1dbb349 | ||
![]() |
1009ff65cc | ||
![]() |
5fcc8d4cd1 | ||
![]() |
bc32bb164f | ||
![]() |
253c579c25 | ||
![]() |
a840a54fbc | ||
![]() |
9256ee7b1b | ||
![]() |
8a699372f2 | ||
![]() |
0dede83264 | ||
![]() |
75cca9f19e | ||
![]() |
83722a5fdc | ||
![]() |
eebc7b0a7a | ||
![]() |
b2e49c80bf | ||
![]() |
a30a41af78 | ||
![]() |
1afbaaa804 | ||
![]() |
dc6586dd9d | ||
![]() |
4f5136cf2e | ||
![]() |
cab120f521 | ||
![]() |
fe8d39afc4 | ||
![]() |
cd65240673 | ||
![]() |
8e39e9c815 | ||
![]() |
057ff3519d | ||
![]() |
0df99742c4 | ||
![]() |
2076ab1248 | ||
![]() |
294888053a | ||
![]() |
9dd2ae4d76 | ||
![]() |
f016caa312 | ||
![]() |
9285559c8c | ||
![]() |
ff40eed32d | ||
![]() |
eb4ccf5758 | ||
![]() |
c9d23c96d6 | ||
![]() |
da1fde28f3 | ||
![]() |
f3857dd613 | ||
![]() |
8787fa2a36 | ||
![]() |
11876f92fd | ||
![]() |
fca13796ef | ||
![]() |
7ae8f93e45 | ||
![]() |
1615a21cd8 | ||
![]() |
aae9cd7b11 | ||
![]() |
4694c3e997 | ||
![]() |
ff88701b77 | ||
![]() |
0097ad8eb3 | ||
![]() |
4c751ec04c | ||
![]() |
98e0501343 | ||
![]() |
504056888c | ||
![]() |
1ae2c871d0 | ||
![]() |
d95b9d6d32 | ||
![]() |
ee4a9a4a7c | ||
![]() |
ce8ab5f16a | ||
![]() |
3677871347 | ||
![]() |
2e7b6dac31 | ||
![]() |
4936c32772 | ||
![]() |
6bb56fe0cf | ||
![]() |
0c4d13a822 | ||
![]() |
9e779dae7b | ||
![]() |
422e90db3b | ||
![]() |
da1e254652 | ||
![]() |
2e999bad34 | ||
![]() |
2b2a70d45e | ||
![]() |
8f21763616 | ||
![]() |
8be263d2a1 | ||
![]() |
949e10e4c1 | ||
![]() |
376e90fbf2 | ||
![]() |
15c2477273 | ||
![]() |
e0c69dde02 | ||
![]() |
84d00ec58f | ||
![]() |
7a55116f12 | ||
![]() |
d6cd754121 | ||
![]() |
c8bead8393 | ||
![]() |
8cbc0c57b7 | ||
![]() |
265ac5b233 | ||
![]() |
a73fe50864 | ||
![]() |
00a772bf94 | ||
![]() |
13108bb558 | ||
![]() |
1ec469d116 | ||
![]() |
ded8af57c4 | ||
![]() |
babf7a32bf | ||
![]() |
9466b3fbda | ||
![]() |
0b42749621 | ||
![]() |
cc116067b2 | ||
![]() |
1a10b990f2 | ||
![]() |
9ed83e1c74 | ||
![]() |
de018aa2c5 | ||
![]() |
98fc344ddb | ||
![]() |
a9eddae103 | ||
![]() |
229c1ebb67 | ||
![]() |
8e9df32309 | ||
![]() |
2b6c9b68bb | ||
![]() |
0008a1e84b | ||
![]() |
bcd7222522 | ||
![]() |
06101224b4 | ||
![]() |
1fa15abe92 | ||
![]() |
a0e1ce1b57 | ||
![]() |
6a4b0c922c | ||
![]() |
674663464e | ||
![]() |
388134769b | ||
![]() |
404c96e2bb | ||
![]() |
f89b0a229c | ||
![]() |
67a349d8f3 | ||
![]() |
b1841fdfa2 | ||
![]() |
03f97fc34b | ||
![]() |
1eacd4aea0 | ||
![]() |
618190127e | ||
![]() |
77b6a795d3 | ||
![]() |
49d798abcc | ||
![]() |
8ce16d517f | ||
![]() |
7b8a61a18c | ||
![]() |
05f8feeae4 | ||
![]() |
9998337539 | ||
![]() |
7063b01aab | ||
![]() |
0ec6413562 | ||
![]() |
6c096bfa13 | ||
![]() |
378e1b0853 | ||
![]() |
2042fd34e0 | ||
![]() |
252dd1e9f0 | ||
![]() |
c5ee870b85 | ||
![]() |
bcf0ee185b | ||
![]() |
3b23de31db | ||
![]() |
3d9a0a0c17 | ||
![]() |
da38477544 | ||
![]() |
a54ed9eb24 | ||
![]() |
033a66bac8 | ||
![]() |
8af9042405 | ||
![]() |
395c3fbe9f | ||
![]() |
d6b1d2e4ca | ||
![]() |
6a319928c4 | ||
![]() |
3967b7a75e | ||
![]() |
6ccb35ec94 | ||
![]() |
08ace8409d | ||
![]() |
0d8b139bc1 | ||
![]() |
8f5a6ff60d | ||
![]() |
e92848789a | ||
![]() |
3b82367871 | ||
![]() |
a1da7cac85 | ||
![]() |
18df1e4783 | ||
![]() |
82bdc8a2ad | ||
![]() |
cbdc1f3f72 | ||
![]() |
5c1dad8e36 | ||
![]() |
dbea8d3385 | ||
![]() |
05a155782b | ||
![]() |
ed9c283589 | ||
![]() |
5cce35c647 | ||
![]() |
a50f82bebf | ||
![]() |
619d29386a | ||
![]() |
c7d62cfd76 | ||
![]() |
a570ce8f40 | ||
![]() |
37dbad8fcd | ||
![]() |
d3da2a2884 | ||
![]() |
01a87e0d2d | ||
![]() |
c696087e32 | ||
![]() |
b3dd5a4c86 | ||
![]() |
252b52ac5a | ||
![]() |
fe9c9049ef | ||
![]() |
7c8bd08f6d | ||
![]() |
e9ffe02fa1 | ||
![]() |
2d693c4d4a | ||
![]() |
07e5f6fc3d | ||
![]() |
77d748617a | ||
![]() |
f25eb7f18d | ||
![]() |
b296712403 | ||
![]() |
1a468b6efc | ||
![]() |
d22abca488 | ||
![]() |
767ddfc86a | ||
![]() |
77d5eb6a5a | ||
![]() |
367c5b522a | ||
![]() |
d8e8ce0e2a | ||
![]() |
6b741e34d0 | ||
![]() |
c2f81073fd | ||
![]() |
4af64fdbfa | ||
![]() |
9da6050e08 | ||
![]() |
eafddfd3d9 | ||
![]() |
97cd9fdc13 | ||
![]() |
12c89aa853 | ||
![]() |
f5c9f8bcd3 | ||
![]() |
78d934ad8e | ||
![]() |
55994f83e0 | ||
![]() |
6e3185049a | ||
![]() |
c3b4359873 | ||
![]() |
a81649f992 | ||
![]() |
65d433161a | ||
![]() |
48866b760f | ||
![]() |
5acff0e61d | ||
![]() |
4d3d0aeb66 | ||
![]() |
acb17fb450 | ||
![]() |
6c706c5714 | ||
![]() |
34e1c590cb | ||
![]() |
ac52b5b738 | ||
![]() |
8ebf986587 | ||
![]() |
1ad7743133 | ||
![]() |
15d7b83ad3 | ||
![]() |
ddd1dd0c4b | ||
![]() |
e4999275c2 | ||
![]() |
e6c570a22f | ||
![]() |
650086f3e6 | ||
![]() |
6deaaf609f | ||
![]() |
2acda557cd | ||
![]() |
9ee08999f4 | ||
![]() |
dbf7d4402c | ||
![]() |
e14f9f4c42 | ||
![]() |
5eae6d1405 | ||
![]() |
c0d910d506 | ||
![]() |
bc74cff479 | ||
![]() |
43ac692a09 | ||
![]() |
bce1f4aeb1 | ||
![]() |
7b13105120 | ||
![]() |
b757fa812d | ||
![]() |
4e55889dca | ||
![]() |
1331a61100 | ||
![]() |
5333afa607 | ||
![]() |
bff0ec82a6 | ||
![]() |
d3e5dbe45b | ||
![]() |
6024122e54 | ||
![]() |
763865320b | ||
![]() |
35be6d0715 | ||
![]() |
459fc9de78 | ||
![]() |
78714d0fc5 | ||
![]() |
d662ab5f08 | ||
![]() |
cd306661a2 | ||
![]() |
cdaa69e122 | ||
![]() |
65a20d5a09 | ||
![]() |
dd66bb9817 | ||
![]() |
4172b60818 | ||
![]() |
e3798c2ab9 | ||
![]() |
107bd080a5 | ||
![]() |
dc7161cffe | ||
![]() |
790286ab6c | ||
![]() |
b6febd1356 | ||
![]() |
598f982a6b | ||
![]() |
61f42f2d4e | ||
![]() |
7ee1a87e7d | ||
![]() |
4fcbdea974 | ||
![]() |
9054a8f214 | ||
![]() |
481bafe943 | ||
![]() |
9040e795ed | ||
![]() |
c1f7b87fb1 | ||
![]() |
4373c601ea | ||
![]() |
1879ec1713 | ||
![]() |
9b7e08603b | ||
![]() |
4e6a3cecf5 | ||
![]() |
3fa9e283a0 | ||
![]() |
caf5e8a167 | ||
![]() |
6ae12093ce | ||
![]() |
ff80ec70c6 | ||
![]() |
50ed7b58bf | ||
![]() |
5f7a9ee97e | ||
![]() |
0d8aebf1d9 | ||
![]() |
e306a2e0e8 | ||
![]() |
f1702d2bb1 | ||
![]() |
236e12e5f0 | ||
![]() |
ed92da89a9 | ||
![]() |
28751d32c2 | ||
![]() |
a611be4c07 | ||
![]() |
64830b9b3d | ||
![]() |
3955b01653 | ||
![]() |
8deca2838c | ||
![]() |
ed320b500c | ||
![]() |
16c9652f27 | ||
![]() |
b4f275f9f8 | ||
![]() |
47b7779329 | ||
![]() |
5052b325fe | ||
![]() |
8c68fe1b5c | ||
![]() |
3ff7758bcf | ||
![]() |
229df24ae8 | ||
![]() |
b068c2ff94 | ||
![]() |
09791ed1d1 | ||
![]() |
ef10339fe7 | ||
![]() |
6e84c41d05 | ||
![]() |
efca8cb682 | ||
![]() |
5ad03fb0ce | ||
![]() |
2ea386a516 | ||
![]() |
9df1c930bf | ||
![]() |
fa7c67d622 | ||
![]() |
0537968f00 | ||
![]() |
8d95b3da89 | ||
![]() |
e1f3249285 | ||
![]() |
b667939b57 | ||
![]() |
0a14ab18d2 | ||
![]() |
5bf6e2e378 | ||
![]() |
c9fa625e41 | ||
![]() |
b0abb49402 | ||
![]() |
6f4579af85 | ||
![]() |
ad6cdb5aaa | ||
![]() |
9241ca42bc | ||
![]() |
286030d532 | ||
![]() |
ed1e47e325 | ||
![]() |
98da67aa9a | ||
![]() |
68a638d367 | ||
![]() |
dfd8c0ca05 | ||
![]() |
06c41ec6c5 | ||
![]() |
3992ffa2c2 | ||
![]() |
ef74ea08ce | ||
![]() |
efcdcd7bde | ||
![]() |
62b34412dc | ||
![]() |
f926c5ce81 | ||
![]() |
a7df6a7759 | ||
![]() |
b14469b36f | ||
![]() |
47fc970e03 | ||
![]() |
60ee42eb3e | ||
![]() |
ab996934eb | ||
![]() |
d6c6675bfe | ||
![]() |
f82f602ec8 | ||
![]() |
63b6e905fa | ||
![]() |
71c19e2921 | ||
![]() |
81458f5dcf | ||
![]() |
bd23d3ab6b | ||
![]() |
613c5e626e | ||
![]() |
37cd00e170 | ||
![]() |
8a81d005e5 | ||
![]() |
75d7684e9f | ||
![]() |
5890761ef9 | ||
![]() |
f698c62361 | ||
![]() |
f2954bfb79 | ||
![]() |
fa1af48c83 | ||
![]() |
6fc49ab518 | ||
![]() |
88bab6e591 | ||
![]() |
f2b010f503 | ||
![]() |
8ed0d7fe96 | ||
![]() |
eda8ce728a | ||
![]() |
32fb2607a3 | ||
![]() |
c2fddac8ca | ||
![]() |
b2480c3b55 | ||
![]() |
bd02141659 | ||
![]() |
3930b6f378 | ||
![]() |
d003511467 | ||
![]() |
0126625ded | ||
![]() |
10ccb6bf0d | ||
![]() |
6d4598eba8 | ||
![]() |
ad4cbf4e7f | ||
![]() |
387ce309ba | ||
![]() |
3337f22eb1 | ||
![]() |
aa76127d01 | ||
![]() |
75bd1a9dc0 | ||
![]() |
c218f62920 | ||
![]() |
1aaf2b1899 | ||
![]() |
c39d112620 | ||
![]() |
3786b721e8 | ||
![]() |
0f8340d0a5 | ||
![]() |
ce53dab272 | ||
![]() |
6bd2b8dfa5 | ||
![]() |
9283abc1a0 | ||
![]() |
b60f9bf27a | ||
![]() |
27125b8c39 | ||
![]() |
a883082f87 | ||
![]() |
d6d23fe002 | ||
![]() |
6919b95010 | ||
![]() |
a100450cd9 | ||
![]() |
b8ee4c2b19 | ||
![]() |
675f359e91 | ||
![]() |
8c11382a52 | ||
![]() |
88fc34aa7a | ||
![]() |
252c0c9164 | ||
![]() |
709c0a9905 | ||
![]() |
7dbfacb27e | ||
![]() |
e1c4c0300e | ||
![]() |
ddfa3934d8 | ||
![]() |
0bed3d5d6d | ||
![]() |
5471f117c5 | ||
![]() |
dd42ebef94 | ||
![]() |
8765e9f5e7 | ||
![]() |
dccd4af9aa | ||
![]() |
79b9fe334a | ||
![]() |
76a5804560 | ||
![]() |
08784ed58a | ||
![]() |
72708f298b | ||
![]() |
8a9095a92e | ||
![]() |
e64f674237 | ||
![]() |
9eb055c9aa | ||
![]() |
36b8a69009 | ||
![]() |
f2d8420b1c | ||
![]() |
d0d8e6867a | ||
![]() |
a4fa1e728a | ||
![]() |
ac2ce94de0 | ||
![]() |
5c39a4636b | ||
![]() |
6967de563e | ||
![]() |
39f1d253b1 | ||
![]() |
8d6f46d9d2 | ||
![]() |
df8ac4af91 | ||
![]() |
951d2f81c7 | ||
![]() |
effd3f6212 | ||
![]() |
b7169a2248 | ||
![]() |
7512685767 | ||
![]() |
abfa377fae | ||
![]() |
dfcac15739 | ||
![]() |
4c84ed4d98 | ||
![]() |
650e59a1c2 | ||
![]() |
a4e25839d3 | ||
![]() |
e95b298262 | ||
![]() |
634edc8ab3 | ||
![]() |
0e1fbf97f4 | ||
![]() |
a06668af30 | ||
![]() |
af1e289332 | ||
![]() |
75a15cf640 | ||
![]() |
aac71904ca | ||
![]() |
788128aec7 | ||
![]() |
1675d32261 | ||
![]() |
26bf239e6d | ||
![]() |
f99d62013b | ||
![]() |
c264679fb4 | ||
![]() |
e6f42c1ed0 | ||
![]() |
11937b3df7 | ||
![]() |
bdcb3e9e69 | ||
![]() |
97a26ae97a | ||
![]() |
d8d1cb4195 | ||
![]() |
8d79ed6b3e | ||
![]() |
2d4155a6a9 | ||
![]() |
8c443016e9 | ||
![]() |
5d4707e22a | ||
![]() |
cc3a729995 | ||
![]() |
adcd3ad46b | ||
![]() |
0f40e62ca7 | ||
![]() |
e421a44ac6 | ||
![]() |
757faee9ec | ||
![]() |
fba0b18d35 | ||
![]() |
bd83f866d1 | ||
![]() |
576f5fac23 | ||
![]() |
3a039e3725 | ||
![]() |
915feea12d | ||
![]() |
1ec95c33e8 | ||
![]() |
6cbe2edaad | ||
![]() |
d6cc31cf95 | ||
![]() |
cee64ed3bd | ||
![]() |
fd1eacc2ed | ||
![]() |
a091e52316 | ||
![]() |
58d19dade7 | ||
![]() |
e5c415cd3a | ||
![]() |
8c27553538 | ||
![]() |
fcea7af9d9 | ||
![]() |
cc4402b6cb | ||
![]() |
e40543a401 | ||
![]() |
17ea79bb4e | ||
![]() |
19dd79bdee | ||
![]() |
4dd9acccd2 | ||
![]() |
2c49f52b0d | ||
![]() |
d20880ce3b | ||
![]() |
95d1476e27 | ||
![]() |
e2e7b46542 | ||
![]() |
a58c6d56bb | ||
![]() |
8cb15f6203 | ||
![]() |
e4df0cbe1c | ||
![]() |
47f1caed2f | ||
![]() |
f5aa69a5fc | ||
![]() |
cc84d271ea | ||
![]() |
9f87a19de4 | ||
![]() |
5ba299be18 | ||
![]() |
684ef016e1 | ||
![]() |
e4ad271073 | ||
![]() |
3ee8b3929e | ||
![]() |
466f3257eb | ||
![]() |
7c32e41ab8 | ||
![]() |
3de22a84e8 | ||
![]() |
e547fe40df | ||
![]() |
73f52dc729 | ||
![]() |
a3ef48c265 | ||
![]() |
025cc6f603 | ||
![]() |
9da8ace8ea | ||
![]() |
ac8b7b8aaf | ||
![]() |
7be3649016 | ||
![]() |
b21c16908e | ||
![]() |
c7a322cc4c | ||
![]() |
0a69e14278 | ||
![]() |
9e3508bfa8 | ||
![]() |
5ba2143c1c | ||
![]() |
2490097420 | ||
![]() |
209e0d6ad2 | ||
![]() |
8a0b617940 | ||
![]() |
21f4211d1a | ||
![]() |
c7b80e640e | ||
![]() |
49fa2e4651 | ||
![]() |
59a0d00a5d | ||
![]() |
4c3aeec74f | ||
![]() |
0fe3a91494 | ||
![]() |
f55d6cc110 | ||
![]() |
11d701a6ab | ||
![]() |
2dfe92767d | ||
![]() |
309e66d984 | ||
![]() |
60252b7845 | ||
![]() |
b7c76ded31 | ||
![]() |
249d2dac28 | ||
![]() |
1969955e50 | ||
![]() |
dfdba3cfe4 | ||
![]() |
3bfe39f279 | ||
![]() |
3e9b530d62 | ||
![]() |
90121f4056 | ||
![]() |
6fb79e269b | ||
![]() |
b072206313 | ||
![]() |
47e440019c | ||
![]() |
34275564f2 | ||
![]() |
ecb90c1db7 | ||
![]() |
6ab38b52d3 | ||
![]() |
51884edb6b | ||
![]() |
665ebd7f48 | ||
![]() |
72ff9077a5 | ||
![]() |
f3655100b8 | ||
![]() |
a718110ae0 | ||
![]() |
a1cb516817 | ||
![]() |
1e3498ea01 | ||
![]() |
1c129c723d | ||
![]() |
789627612a | ||
![]() |
921e178562 | ||
![]() |
9cf2d1fc69 | ||
![]() |
d8a5cefa63 | ||
![]() |
e5e7a9319a | ||
![]() |
1a61d29d5d | ||
![]() |
e21de85b9f | ||
![]() |
caafa041d9 | ||
![]() |
8120c7988a | ||
![]() |
b00c72cf23 | ||
![]() |
9eb228488a | ||
![]() |
b27bbd3ec6 | ||
![]() |
c6b3ab3966 | ||
![]() |
63f6251812 | ||
![]() |
8e40bb689e | ||
![]() |
69ff948d39 | ||
![]() |
3817a71b88 | ||
![]() |
daac8f8815 | ||
![]() |
418b933aea | ||
![]() |
dd72c4325c | ||
![]() |
9ab74588d5 | ||
![]() |
a4e062600f | ||
![]() |
6730cbfb25 | ||
![]() |
d2220a407b | ||
![]() |
c2ecb71dbb | ||
![]() |
ad92965474 | ||
![]() |
6ef58da59e | ||
![]() |
65524e5d53 | ||
![]() |
f90323c8d4 | ||
![]() |
accf957727 | ||
![]() |
71dfa931eb | ||
![]() |
23ccd06ede | ||
![]() |
00fe9b205c | ||
![]() |
2b36680f0a | ||
![]() |
55afe8bd9b | ||
![]() |
f0554477ae | ||
![]() |
63e4e08e0d | ||
![]() |
b09ed9a0f2 | ||
![]() |
466c8b0e03 | ||
![]() |
b4c5f4e92d | ||
![]() |
c1c6520c4f | ||
![]() |
1331444822 | ||
![]() |
2021a58aec | ||
![]() |
ef4fabf61f | ||
![]() |
48b37fe384 | ||
![]() |
db54a83f74 | ||
![]() |
bf3673a415 | ||
![]() |
4e9cde758e | ||
![]() |
bf5e6c5f2d | ||
![]() |
f6469054dc | ||
![]() |
0aeac68063 | ||
![]() |
d480c04be1 | ||
![]() |
26244c7dcd | ||
![]() |
8d39261603 | ||
![]() |
b1220da496 | ||
![]() |
1fff0c05b7 | ||
![]() |
afc1f0d99b | ||
![]() |
c4bb6e6c39 | ||
![]() |
420365d922 | ||
![]() |
76ade7165e | ||
![]() |
ac2b656a13 | ||
![]() |
4b1c3cf0b6 | ||
![]() |
6a015491a0 | ||
![]() |
fb2443ac5c | ||
![]() |
8aac6987c2 | ||
![]() |
e69317b501 | ||
![]() |
287aeebba7 | ||
![]() |
b2c891f88e | ||
![]() |
4dc055506c | ||
![]() |
2e1d6785d5 | ||
![]() |
4d140f79e6 | ||
![]() |
e78a008b36 | ||
![]() |
3fea6468fe | ||
![]() |
97f44b7c39 | ||
![]() |
18ba9833bf | ||
![]() |
b53b52985b | ||
![]() |
916288e85c | ||
![]() |
91b7f12cf1 | ||
![]() |
becf207d0c | ||
![]() |
4750ce1e6d | ||
![]() |
c8bbb2b551 | ||
![]() |
d21777d4a2 | ||
![]() |
6972612e1e | ||
![]() |
fadceca448 | ||
![]() |
0507b83360 | ||
![]() |
aff044857f | ||
![]() |
75410eb457 | ||
![]() |
7e1a241b09 | ||
![]() |
e02c226725 | ||
![]() |
1371f50daa | ||
![]() |
fa8c6a552d | ||
![]() |
36d5a0fdcd | ||
![]() |
9ba2667cf5 | ||
![]() |
fe87ba41b8 | ||
![]() |
1fd4771e59 | ||
![]() |
c14bc7b10f | ||
![]() |
1ff68f58f7 | ||
![]() |
57e9429e73 | ||
![]() |
7bfd19880f | ||
![]() |
c015242947 | ||
![]() |
bb6dbdcf94 | ||
![]() |
a7cf0725d8 | ||
![]() |
c630801ae7 | ||
![]() |
300811f1e2 | ||
![]() |
07cd468262 | ||
![]() |
3968dbf258 | ||
![]() |
f1f266f953 | ||
![]() |
4ef1c5fb91 | ||
![]() |
44a2a5d3e9 | ||
![]() |
75e7234f70 | ||
![]() |
6e759e079f | ||
![]() |
a7785e8edf | ||
![]() |
85f69a7a3f | ||
![]() |
2541b9f0de | ||
![]() |
b47d17188b | ||
![]() |
8ef9302c31 | ||
![]() |
6b7d1223a5 | ||
![]() |
b81bddd457 | ||
![]() |
3590890716 | ||
![]() |
5a482a139c | ||
![]() |
fbb97aa6fc | ||
![]() |
f11d9b522d | ||
![]() |
670f78f56c | ||
![]() |
067a17de48 | ||
![]() |
94d9cc1266 | ||
![]() |
03731570cf | ||
![]() |
85731e8830 | ||
![]() |
e5b4743d38 | ||
![]() |
c0385e978a | ||
![]() |
751eabb796 | ||
![]() |
ba432c7a47 | ||
![]() |
3ee522a31d | ||
![]() |
7ce879189f | ||
![]() |
c5d9c7da9e | ||
![]() |
b614b4a69a | ||
![]() |
d98e1918cb | ||
![]() |
c9cc89cd8e | ||
![]() |
d18b7220a1 | ||
![]() |
a7aba3571f | ||
![]() |
d09cc33190 | ||
![]() |
fc48fd8653 | ||
![]() |
b5c3c2d1d5 | ||
![]() |
b63db81086 | ||
![]() |
559eb7ff26 | ||
![]() |
2bf3db0907 | ||
![]() |
bb13556240 | ||
![]() |
e1e20892f9 | ||
![]() |
912b13a779 | ||
![]() |
2b80b2e5ec | ||
![]() |
bef96f35fd | ||
![]() |
f108eecf7c | ||
![]() |
44e4f6d8f9 | ||
![]() |
7717df2c93 | ||
![]() |
00bd5e21f5 | ||
![]() |
47942be18d | ||
![]() |
b01f5e367f | ||
![]() |
a768a54e18 | ||
![]() |
0949e7acc7 | ||
![]() |
bae4a01de1 | ||
![]() |
083792880d | ||
![]() |
85f7e5477a | ||
![]() |
bcb7f9b018 | ||
![]() |
01093b7c13 | ||
![]() |
71edfd70b7 | ||
![]() |
e36dea065d | ||
![]() |
f6a0bb4d04 | ||
![]() |
3b517e0825 | ||
![]() |
bc7902d99b | ||
![]() |
7c4ed6a423 | ||
![]() |
1d2c544cca | ||
![]() |
514cd2022e | ||
![]() |
917e120b96 | ||
![]() |
51aee3877b | ||
![]() |
b06f2bc67c | ||
![]() |
be69262137 | ||
![]() |
8b68274319 | ||
![]() |
fdd3839d80 | ||
![]() |
1668a1602a | ||
![]() |
563da1b9d2 | ||
![]() |
f8547b1d97 | ||
![]() |
38a28993fc | ||
![]() |
e8154c6c7d | ||
![]() |
5930278702 | ||
![]() |
2473f57ba7 | ||
![]() |
284c4e3e31 | ||
![]() |
5c05e6c247 | ||
![]() |
c10f5ce9c1 | ||
![]() |
f4289abffd | ||
![]() |
8ac8ec49f4 | ||
![]() |
f953bd983e | ||
![]() |
f12b23188a | ||
![]() |
424ba0f2ff | ||
![]() |
0833f2376e | ||
![]() |
8addc3c571 | ||
![]() |
7b9b832be5 | ||
![]() |
eaffa1150a | ||
![]() |
313886e22b | ||
![]() |
7e1d035077 | ||
![]() |
0800c68be6 | ||
![]() |
0b5b9472ff | ||
![]() |
89eaa1fe5f | ||
![]() |
601f6cd54d | ||
![]() |
92ff44da12 | ||
![]() |
0831608c8b | ||
![]() |
27044108d3 | ||
![]() |
8b2cd8fd2d | ||
![]() |
2681da4531 | ||
![]() |
5199904c57 | ||
![]() |
fabfb6fe00 | ||
![]() |
8e9b944a83 | ||
![]() |
1f5ba59b61 | ||
![]() |
376c148fb8 | ||
![]() |
3964efd729 | ||
![]() |
1e3876039f | ||
![]() |
a9e2a96e69 | ||
![]() |
10003a3f5d | ||
![]() |
290f69662a | ||
![]() |
2313a465b6 | ||
![]() |
9ee1265e0c | ||
![]() |
57ae2c9530 | ||
![]() |
17187c4646 | ||
![]() |
2de0d8ebbe | ||
![]() |
c2a6a7da7b | ||
![]() |
408f5f835c | ||
![]() |
30ec2de83f | ||
![]() |
4591f0427f | ||
![]() |
be27cbdc4a | ||
![]() |
b3db7f7a9c | ||
![]() |
cef23c4853 | ||
![]() |
d411fdf615 | ||
![]() |
a16ee2f1c3 | ||
![]() |
5191581e9c | ||
![]() |
7b17313a7d | ||
![]() |
ea39c2709f | ||
![]() |
02c2cfaaf3 | ||
![]() |
90b66edbca | ||
![]() |
37995c09b7 | ||
![]() |
afa08b509e | ||
![]() |
ba6c00505d | ||
![]() |
3e1138e997 | ||
![]() |
00e88b08d5 | ||
![]() |
d43879e224 | ||
![]() |
4c189ae585 | ||
![]() |
aa05c827e2 | ||
![]() |
5e9273ad0a | ||
![]() |
288776e7f8 | ||
![]() |
5683e8b46b | ||
![]() |
877d0cadf2 | ||
![]() |
e87a433c20 | ||
![]() |
de17e243d5 | ||
![]() |
32ff46b633 | ||
![]() |
b0b876d076 | ||
![]() |
59ed9cebaa | ||
![]() |
b3a615391a | ||
![]() |
f576b81340 | ||
![]() |
cd977ae6a1 | ||
![]() |
c84b7ed0c5 | ||
![]() |
ccda20b8d1 | ||
![]() |
f44eaac48a | ||
![]() |
91f0b3bc04 | ||
![]() |
6bf703ad98 | ||
![]() |
7b99da42ee | ||
![]() |
81779c2863 | ||
![]() |
ce55152060 | ||
![]() |
3aa4973acd | ||
![]() |
73f1e1bb50 | ||
![]() |
7b9113178d | ||
![]() |
0b8fe1af87 | ||
![]() |
e5c2bc41ed | ||
![]() |
4b211a7769 | ||
![]() |
f2f9831ddc | ||
![]() |
ba0ecaa107 | ||
![]() |
86e2a48dc2 | ||
![]() |
09d25b2964 | ||
![]() |
9b3af0253f | ||
![]() |
cc308de069 | ||
![]() |
a691d340d1 | ||
![]() |
2834f47031 | ||
![]() |
ff5b42b839 | ||
![]() |
6dec6a6dba | ||
![]() |
03cbb3ee58 | ||
![]() |
dd4fc9aebb | ||
![]() |
4b517a969a | ||
![]() |
14320df0f5 | ||
![]() |
07cef9fb65 | ||
![]() |
bd5939d57e | ||
![]() |
1307d3037c | ||
![]() |
5882da22ec | ||
![]() |
b112d27ff5 | ||
![]() |
5c6f18be5c | ||
![]() |
27a1d69504 | ||
![]() |
cfc8361fe6 | ||
![]() |
0de8e401db | ||
![]() |
2c532cf02b | ||
![]() |
a0983a012c | ||
![]() |
4c88bfb96d | ||
![]() |
b7165f5d01 | ||
![]() |
23d390ecb1 | ||
![]() |
4f76baba29 | ||
![]() |
1922f41ef3 | ||
![]() |
3f4bcd8cba | ||
![]() |
f0b4847100 | ||
![]() |
9ca19e9c52 | ||
![]() |
2d1c3825a8 | ||
![]() |
d4103b3570 | ||
![]() |
3815a773a1 | ||
![]() |
0db7e53b84 | ||
![]() |
fa3421cd10 | ||
![]() |
28344e0445 | ||
![]() |
b948332779 | ||
![]() |
53e5c09052 | ||
![]() |
7b029a318b | ||
![]() |
3b115e6e9b | ||
![]() |
33ba1a4ab9 | ||
![]() |
7202d119cd | ||
![]() |
a087442259 | ||
![]() |
b106feae71 | ||
![]() |
7f5a888bdb | ||
![]() |
cec9a98bc6 | ||
![]() |
dfba04e807 | ||
![]() |
234219dc33 | ||
![]() |
2684a5ef91 | ||
![]() |
7ba978806b | ||
![]() |
573ad05a8d | ||
![]() |
53df3ae1e5 | ||
![]() |
23b8d64cf7 | ||
![]() |
b48fdcb6e6 | ||
![]() |
46431487f7 | ||
![]() |
067ac63196 | ||
![]() |
62e53e6f49 | ||
![]() |
4e21e80400 | ||
![]() |
37d53d5a04 | ||
![]() |
89e750a201 | ||
![]() |
54003aecc4 | ||
![]() |
07d4c541cb | ||
![]() |
f603d9c703 | ||
![]() |
9ebbe1e3f3 | ||
![]() |
cc54e66ad8 | ||
![]() |
56bd057123 | ||
![]() |
10f1f924cf | ||
![]() |
f8f9ac8206 | ||
![]() |
a3b27c083f | ||
![]() |
963511bffa | ||
![]() |
e5654b75ac | ||
![]() |
f3203f3409 | ||
![]() |
efcd72029c | ||
![]() |
84400eefbb | ||
![]() |
3b609ab0e4 | ||
![]() |
9216436186 | ||
![]() |
f3b150a6a6 | ||
![]() |
f011684206 | ||
![]() |
d8a63a38c6 | ||
![]() |
c1bf3acf44 | ||
![]() |
600da8cffc | ||
![]() |
93c9c7c5c1 | ||
![]() |
fb257ee83c | ||
![]() |
40997c2c62 | ||
![]() |
4dc0b40f42 | ||
![]() |
f5d2e7b779 | ||
![]() |
8a712003aa | ||
![]() |
452c5ac989 | ||
![]() |
5c76ef78cb | ||
![]() |
59fe79fb45 | ||
![]() |
96d1cd00b7 | ||
![]() |
bc4fa01de7 | ||
![]() |
6366da48ec | ||
![]() |
3942972bef | ||
![]() |
91eda57680 | ||
![]() |
74218530b6 | ||
![]() |
228c27112a | ||
![]() |
24a4cb2f0e | ||
![]() |
06b99c059e | ||
![]() |
f2602f3200 | ||
![]() |
e3756c64d2 | ||
![]() |
a47d823405 | ||
![]() |
f464298c8e | ||
![]() |
173bdb2c06 | ||
![]() |
0ce151b8fe | ||
![]() |
0ad6e4efb0 | ||
![]() |
dbcdd4e4a7 | ||
![]() |
ecb87ca5f1 | ||
![]() |
d82fa6adf6 | ||
![]() |
fa15ac542e | ||
![]() |
f37fd7fa1a | ||
![]() |
64f2d11e38 | ||
![]() |
5d7fe139b5 | ||
![]() |
9afc66fb51 | ||
![]() |
ca5fd05536 | ||
![]() |
cf5ded9cc5 | ||
![]() |
cda67fb544 | ||
![]() |
836bd22257 | ||
![]() |
2b10cd1beb | ||
![]() |
7c37c25ef2 | ||
![]() |
dd5c8f7737 | ||
![]() |
c0136f0cb9 | ||
![]() |
aafcf997f9 | ||
![]() |
2b17168ac1 | ||
![]() |
063de1fbdf | ||
![]() |
f5e743a520 | ||
![]() |
94ac1cd1df | ||
![]() |
50a3f019dc | ||
![]() |
ee19427a86 | ||
![]() |
9577734278 | ||
![]() |
1a5ef4bb3f | ||
![]() |
df2436d359 | ||
![]() |
e122152373 | ||
![]() |
e00079daa1 | ||
![]() |
f4f6c13841 | ||
![]() |
3c3a1df730 | ||
![]() |
bf5496149b | ||
![]() |
584120003a | ||
![]() |
43de8ff19f | ||
![]() |
b564ccd504 | ||
![]() |
cb6212b073 | ||
![]() |
99cdd670af | ||
![]() |
91270aafa5 | ||
![]() |
562677a6dc | ||
![]() |
fc1582d2b7 | ||
![]() |
33483f9f21 | ||
![]() |
0b4aed09d5 | ||
![]() |
aeb2d5cfa6 | ||
![]() |
e8a1781c52 | ||
![]() |
0640fbab60 | ||
![]() |
76f6592d12 | ||
![]() |
6bf5bde107 | ||
![]() |
836a162089 | ||
![]() |
361fb400ef | ||
![]() |
d8d388eb3a | ||
![]() |
f4e203103d | ||
![]() |
bfca4c7ba9 | ||
![]() |
1740d94626 | ||
![]() |
922bd2fe52 | ||
![]() |
0b3684c48e | ||
![]() |
91e6f2621c | ||
![]() |
c40e6be82b | ||
![]() |
1e08c15512 | ||
![]() |
a3bcbb5c8a | ||
![]() |
4a4371d31c | ||
![]() |
c5a5707450 | ||
![]() |
551a9ef5e6 | ||
![]() |
5fc238f675 | ||
![]() |
0b94cf65e4 | ||
![]() |
e64e531e3d | ||
![]() |
cfcf39f0e7 | ||
![]() |
55e8ebe29b | ||
![]() |
96f83f7ca3 | ||
![]() |
207883e72b | ||
![]() |
32789c0047 | ||
![]() |
e05b56fdb1 | ||
![]() |
a4a1c67b9e | ||
![]() |
9fa2f116c3 | ||
![]() |
7862b15679 | ||
![]() |
178ee5b879 | ||
![]() |
9018d9aa37 | ||
![]() |
7f6ad37e5d | ||
![]() |
96ac2c425f | ||
![]() |
8143eca499 | ||
![]() |
935fef29bd | ||
![]() |
6dd67bbb76 | ||
![]() |
4214d78847 | ||
![]() |
7c6c8e110e | ||
![]() |
50acf5eb15 | ||
![]() |
65f885738d | ||
![]() |
eef3e5ebca | ||
![]() |
bd6ddcf21f | ||
![]() |
c2459d8cc2 | ||
![]() |
514c2b3587 | ||
![]() |
c025ce4d66 | ||
![]() |
01aeaf2e95 | ||
![]() |
ae717797e5 | ||
![]() |
d19fdaa4b7 | ||
![]() |
db991bc0f1 | ||
![]() |
9504fcfc0f | ||
![]() |
a00c73458f | ||
![]() |
cb1d4ba97a | ||
![]() |
4704f00fc2 | ||
![]() |
b63167f9e6 | ||
![]() |
a920afd2d2 | ||
![]() |
e61e2c1eb8 | ||
![]() |
42e179ef9d | ||
![]() |
d48bc086d3 | ||
![]() |
617136296c | ||
![]() |
f0a35e2cd2 | ||
![]() |
81132bb2f4 | ||
![]() |
cfe2e1130e | ||
![]() |
5e7c876282 | ||
![]() |
e2dee956b8 | ||
![]() |
6ddab74d55 | ||
![]() |
b6f59d2a6b | ||
![]() |
7aeafe4bae | ||
![]() |
a73754fece | ||
![]() |
ee41549263 | ||
![]() |
76138d6f0f | ||
![]() |
9cb0f03808 | ||
![]() |
84d6cb8cf0 | ||
![]() |
39fa9cfd1a | ||
![]() |
95dbc33fb2 | ||
![]() |
3351daee61 | ||
![]() |
1a2b370ad6 | ||
![]() |
ec152105f2 | ||
![]() |
1083872a08 | ||
![]() |
cb6025cdac | ||
![]() |
b7fd773cc6 | ||
![]() |
6d9f040d29 | ||
![]() |
99aa43a65a | ||
![]() |
097edc86c8 | ||
![]() |
2d9eb54732 | ||
![]() |
5e2e49af82 | ||
![]() |
dbdcc95c9c | ||
![]() |
b9a64c5e34 | ||
![]() |
23c60d6b72 | ||
![]() |
023d66dc1f | ||
![]() |
edf351ce6d | ||
![]() |
275c7f21ab | ||
![]() |
8f1543a76e | ||
![]() |
3401d55726 | ||
![]() |
6292e5c878 | ||
![]() |
fc210b44a6 | ||
![]() |
b55b957adf | ||
![]() |
8e3a7731cd | ||
![]() |
41958082bd | ||
![]() |
d531fbd8b0 | ||
![]() |
16d25da76b | ||
![]() |
323c9f4981 | ||
![]() |
6d1881b42d | ||
![]() |
0f172715b0 | ||
![]() |
39533af024 | ||
![]() |
275f63e7fd | ||
![]() |
fe76b396f5 | ||
![]() |
41c55d18f5 | ||
![]() |
810a121201 | ||
![]() |
79c71c9f0b | ||
![]() |
8475d5fea1 | ||
![]() |
ecccb36a41 | ||
![]() |
150599e5ac | ||
![]() |
b2ff871e38 | ||
![]() |
50b6713a25 | ||
![]() |
6c9db6085a | ||
![]() |
e150b0b3a1 | ||
![]() |
7a1f4b65a3 | ||
![]() |
35c8a010c6 | ||
![]() |
40052b3461 | ||
![]() |
9402121a46 | ||
![]() |
2e263d26a2 | ||
![]() |
18ab3b9e6d | ||
![]() |
a1974e6db0 | ||
![]() |
105cf92a13 | ||
![]() |
baa76be615 | ||
![]() |
497dbaa2df | ||
![]() |
7fae9f7397 | ||
![]() |
24d11b7e6f | ||
![]() |
89533482a4 | ||
![]() |
0258b9d5a2 | ||
![]() |
7dda2deae8 | ||
![]() |
7ff940f2a2 | ||
![]() |
2b39e72fac | ||
![]() |
b14076a4e6 | ||
![]() |
9345582471 | ||
![]() |
0323fffd4b | ||
![]() |
5bb987b3a3 | ||
![]() |
543c168314 | ||
![]() |
6e172f0ac1 | ||
![]() |
018e7f5842 | ||
![]() |
c597f92be9 | ||
![]() |
57bfca9045 | ||
![]() |
3da6818c9e | ||
![]() |
df8f298d8d | ||
![]() |
a1d4595d65 | ||
![]() |
4d3240261d | ||
![]() |
0ef2a22673 | ||
![]() |
b63e161012 | ||
![]() |
f77c4c0f2b | ||
![]() |
c78f0e3f73 | ||
![]() |
517ac20127 | ||
![]() |
8ca1313e38 | ||
![]() |
41996e8d4f | ||
![]() |
e34eebb854 | ||
![]() |
b675db4c56 | ||
![]() |
dd0ced3046 | ||
![]() |
c8194a1788 | ||
![]() |
dcd51beac0 | ||
![]() |
f899a3ed2c | ||
![]() |
3d6b80a33c | ||
![]() |
35a681d717 | ||
![]() |
4b97e7bf02 | ||
![]() |
edc94a8d21 | ||
![]() |
85cf4a39d7 | ||
![]() |
f8796aac39 | ||
![]() |
1e6e7bff78 | ||
![]() |
0d564deed8 | ||
![]() |
5b1f1b4a70 | ||
![]() |
6c5749f34a | ||
![]() |
4e071b9f3e | ||
![]() |
33b4bdc448 | ||
![]() |
b34f22d801 | ||
![]() |
27985472d9 | ||
![]() |
1b4bb0bb6b | ||
![]() |
a74eb24e69 | ||
![]() |
2f52dbd7b7 | ||
![]() |
1cc913bc69 | ||
![]() |
a8f544289b | ||
![]() |
2d3990c50a | ||
![]() |
2d217f08b8 | ||
![]() |
6436eaa16b | ||
![]() |
00cdbcf110 | ||
![]() |
ba0336c5b9 | ||
![]() |
828a21792c | ||
![]() |
c4532c8e98 | ||
![]() |
09614f4f14 | ||
![]() |
d197162033 | ||
![]() |
5b0792f74b | ||
![]() |
a7edde7c40 | ||
![]() |
1feb210e93 | ||
![]() |
39ae00fa0a | ||
![]() |
7d678875c0 | ||
![]() |
e4e65aa255 | ||
![]() |
402b1c29b6 | ||
![]() |
f0e184767e | ||
![]() |
b445641dd7 | ||
![]() |
41217bb06c | ||
![]() |
50d515b9a7 | ||
![]() |
0b757be7cc | ||
![]() |
7f4a1275ab | ||
![]() |
3d3c192666 | ||
![]() |
671200ac95 | ||
![]() |
e01cde7b1b | ||
![]() |
d7f946d28b | ||
![]() |
f60487821d | ||
![]() |
636b6a1a59 | ||
![]() |
495837bfa9 | ||
![]() |
9709887815 | ||
![]() |
3b9676762b | ||
![]() |
4ac65b4c6b | ||
![]() |
b9aaef46ec | ||
![]() |
5ffe6f1644 | ||
![]() |
ed8d6b5b25 | ||
![]() |
bb3a3d025b | ||
![]() |
2501cad25a | ||
![]() |
c8791e5581 | ||
![]() |
e3bcbb26b6 | ||
![]() |
0624eb4118 | ||
![]() |
dbcc77d0c2 | ||
![]() |
8a6de2ca14 | ||
![]() |
807a74a7ac | ||
![]() |
2609127acb | ||
![]() |
850a5a49ee | ||
![]() |
d7f09eb0ed | ||
![]() |
2d8a93cbb6 | ||
![]() |
8b41bca615 | ||
![]() |
57c4b941b7 | ||
![]() |
95fa39dce8 | ||
![]() |
3e9f2fa071 | ||
![]() |
fbfc89944d | ||
![]() |
2f09c0ed0f | ||
![]() |
c77a1291d6 | ||
![]() |
8b8a6733d1 | ||
![]() |
524f6dfb19 | ||
![]() |
355f320a27 | ||
![]() |
a165f1fffc | ||
![]() |
3f913c123a | ||
![]() |
83bbf4b339 | ||
![]() |
d7bdf902e5 | ||
![]() |
e504df830c | ||
![]() |
141c0d7532 | ||
![]() |
6b207c65d6 | ||
![]() |
dbec59166f | ||
![]() |
dd063b3a02 | ||
![]() |
f1b41d790d | ||
![]() |
921a1e3dc1 | ||
![]() |
e8e4d36bc9 | ||
![]() |
0733e90c7f | ||
![]() |
72ee812e2a | ||
![]() |
d34d015078 | ||
![]() |
127968b1e4 | ||
![]() |
34e9d9ee41 | ||
![]() |
304a514863 | ||
![]() |
8a9aa08de7 | ||
![]() |
db57561479 | ||
![]() |
9e91810807 | ||
![]() |
09ffa28224 | ||
![]() |
08bf506953 | ||
![]() |
3a2a86b525 | ||
![]() |
e609a21906 | ||
![]() |
62a1eb9d68 | ||
![]() |
b4dbd15386 | ||
![]() |
a6d111ff2a | ||
![]() |
98a4c53ad5 | ||
![]() |
acf1a6cfa0 | ||
![]() |
c65bb64cba | ||
![]() |
bfa728538f | ||
![]() |
494aa65f24 | ||
![]() |
daa94cf279 | ||
![]() |
f5e81fe182 | ||
![]() |
63e0b9ccbf | ||
![]() |
6cf467cc9f | ||
![]() |
f538319263 | ||
![]() |
9e6774d043 | ||
![]() |
d54b7c7078 | ||
![]() |
624d0a89ae | ||
![]() |
7a8b1f683b | ||
![]() |
52b514bf62 | ||
![]() |
d87711b9f4 | ||
![]() |
415d93eda2 | ||
![]() |
5e2c179d8d | ||
![]() |
491fab0a28 | ||
![]() |
29a77e56f6 | ||
![]() |
bca73f1c69 | ||
![]() |
1da352c367 | ||
![]() |
291eef285c | ||
![]() |
fec2055af2 | ||
![]() |
e82b3b2dd5 | ||
![]() |
68537fd9f4 | ||
![]() |
6fb81d2360 | ||
![]() |
d8cee06073 | ||
![]() |
d4c88a299b | ||
![]() |
4a8cd31d51 | ||
![]() |
dcbba04d38 | ||
![]() |
8d1a791ed5 | ||
![]() |
6674213a88 | ||
![]() |
40f23d124b | ||
![]() |
30bc98ce0a | ||
![]() |
d3e65d548e | ||
![]() |
18fca34ef3 | ||
![]() |
b79866d01a | ||
![]() |
980ffffbdc | ||
![]() |
2b92e26267 | ||
![]() |
d812c96456 | ||
![]() |
d00dd2b4b5 | ||
![]() |
f1c4736f67 | ||
![]() |
380f854852 | ||
![]() |
7f5e96d030 | ||
![]() |
332e9a47ae | ||
![]() |
181ea64cda | ||
![]() |
8b0933b610 | ||
![]() |
5300f38b75 | ||
![]() |
647c24fb86 | ||
![]() |
21955a9a8d | ||
![]() |
8188e64223 | ||
![]() |
0c7d85d173 | ||
![]() |
cf043af8fc | ||
![]() |
3af914d858 | ||
![]() |
d3dbcefcc8 | ||
![]() |
0a39b48acc | ||
![]() |
6f50850e76 | ||
![]() |
30b44f534a | ||
![]() |
7c8fea9ce0 | ||
![]() |
25b631d72b | ||
![]() |
ee3e10af78 | ||
![]() |
87e79153c6 | ||
![]() |
a58df54bc4 | ||
![]() |
825509ee9e | ||
![]() |
2bc3df8196 | ||
![]() |
4252545064 | ||
![]() |
dd8af18d7a | ||
![]() |
b32a941b8e | ||
![]() |
5070fbf161 | ||
![]() |
1f14d58c72 | ||
![]() |
b581e8e6d0 | ||
![]() |
c74f1bebc6 | ||
![]() |
a600713cd6 | ||
![]() |
615960be9c | ||
![]() |
839952c65a | ||
![]() |
d21bc7f1e6 | ||
![]() |
20e3692a8c | ||
![]() |
91a07e7b75 | ||
![]() |
c34b37fe0b | ||
![]() |
5e83586896 | ||
![]() |
d7030c2758 | ||
![]() |
aff26e4d6e | ||
![]() |
26ccfbe111 | ||
![]() |
553e18f679 | ||
![]() |
81438e3fe8 | ||
![]() |
9e3b959bf9 | ||
![]() |
9ee9c0e674 | ||
![]() |
d62b9eb9c4 | ||
![]() |
531b94359e | ||
![]() |
255f59e53c | ||
![]() |
b436ef479e | ||
![]() |
3b349db1a7 | ||
![]() |
e035a95723 | ||
![]() |
7b141342b1 | ||
![]() |
0d1d905353 | ||
![]() |
2c3c2381e1 | ||
![]() |
ae505db0c9 | ||
![]() |
2448a01a55 | ||
![]() |
3c8c0df6c8 | ||
![]() |
e0a7ec22ee | ||
![]() |
5c5b1626f7 | ||
![]() |
f6a05e045f | ||
![]() |
3566421e14 | ||
![]() |
2a3dae18ed | ||
![]() |
14b0862512 | ||
![]() |
a52c056638 | ||
![]() |
d95e222402 | ||
![]() |
623c327d12 | ||
![]() |
d5f6e56610 | ||
![]() |
7f88f4c275 | ||
![]() |
598d643e5f | ||
![]() |
7bd0bcadaa |
5825 changed files with 654359 additions and 1270612 deletions
|
@ -90,7 +90,6 @@ jobs:
|
|||
--prefix=/usr \
|
||||
--enable-phpdbg \
|
||||
--enable-fpm \
|
||||
--enable-opcache \
|
||||
--with-pdo-mysql=mysqlnd \
|
||||
--with-mysqli=mysqlnd \
|
||||
--with-pgsql \
|
||||
|
@ -153,6 +152,7 @@ jobs:
|
|||
`#--enable-werror`
|
||||
- run:
|
||||
name: make
|
||||
no_output_timeout: 30m
|
||||
command: make -j2 > /dev/null
|
||||
- run:
|
||||
name: make install
|
||||
|
@ -167,7 +167,6 @@ jobs:
|
|||
no_output_timeout: 30m
|
||||
command: |
|
||||
sapi/cli/php run-tests.php \
|
||||
-d zend_extension=opcache.so \
|
||||
-d opcache.enable_cli=1 \
|
||||
-d opcache.jit_buffer_size=64M \
|
||||
-d opcache.jit=tracing \
|
||||
|
|
|
@ -32,3 +32,7 @@ max_line_length = 80
|
|||
|
||||
[*.patch]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.rst]
|
||||
indent_style = space
|
||||
max_line_length = 100
|
||||
|
|
5
.gitattributes
vendored
5
.gitattributes
vendored
|
@ -21,7 +21,7 @@
|
|||
|
||||
# Collapse generated files within git and pull request diff.
|
||||
**/*_arginfo.h linguist-generated -diff
|
||||
/main/gdb_inlined_script.c linguist-generated -diff
|
||||
/main/debug_gdb_scripts.c linguist-generated -diff
|
||||
/Zend/zend_vm_execute.h linguist-generated -diff
|
||||
/Zend/zend_vm_handlers.h linguist-generated -diff
|
||||
/Zend/zend_vm_opcodes.[ch] linguist-generated -diff
|
||||
|
@ -30,4 +30,5 @@
|
|||
/ext/date/tests/ossfuzz*.txt binary
|
||||
|
||||
# Vendored libraries
|
||||
/ext/dom/lexbor/lexbor linguist-vendored
|
||||
/ext/lexbor/lexbor linguist-vendored
|
||||
/ext/uri/uriparser linguist-vendored
|
||||
|
|
5
.github/CODEOWNERS
vendored
5
.github/CODEOWNERS
vendored
|
@ -16,7 +16,7 @@
|
|||
|
||||
/.github @TimWolla
|
||||
/build/gen_stub.php @kocsismate
|
||||
/ext/bcmath @Girgias @nielsdos @SakiTakamachi
|
||||
/ext/bcmath @nielsdos @SakiTakamachi
|
||||
/ext/curl @adoy
|
||||
/ext/date @derickr
|
||||
/ext/dba @Girgias
|
||||
|
@ -27,6 +27,7 @@
|
|||
/ext/gmp @Girgias
|
||||
/ext/intl @devnexen
|
||||
/ext/json @bukka
|
||||
/ext/lexbor @kocsismate @nielsdos
|
||||
/ext/libxml @nielsdos
|
||||
/ext/mbstring @alexdowad @youkidearitai
|
||||
/ext/mysqli @bukka @kamil-tekiela
|
||||
|
@ -44,12 +45,14 @@
|
|||
/ext/pdo_sqlite @SakiTakamachi
|
||||
/ext/pgsql @devnexen
|
||||
/ext/random @TimWolla @zeriyoshi
|
||||
/ext/reflection @DanielEScherzer
|
||||
/ext/session @Girgias
|
||||
/ext/simplexml @nielsdos
|
||||
/ext/soap @nielsdos
|
||||
/ext/sockets @devnexen
|
||||
/ext/spl @Girgias
|
||||
/ext/standard @bukka
|
||||
/ext/uri @kocsismate
|
||||
/ext/xml @nielsdos
|
||||
/ext/xmlreader @nielsdos
|
||||
/ext/xmlwriter @nielsdos
|
||||
|
|
16
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
16
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
@ -22,15 +22,23 @@ body:
|
|||
```
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: PHP Version
|
||||
description: "The used PHP version. Make sure it is [supported](https://www.php.net/supported-versions.php)."
|
||||
placeholder: "PHP 8.0.12"
|
||||
description: |
|
||||
Please run PHP with the `-v` flag (e.g. `php -v`, `php8.3 -v`, `php-fpm -v` or similar) and provide the full output of that command. If executing that command is not possible, please provide the full version number as given in PHPInfo.
|
||||
|
||||
Please make sure that the used PHP version [is a supported version](https://www.php.net/supported-versions.php).
|
||||
placeholder: |
|
||||
PHP 8.3.19 (cli) (built: Mar 13 2025 17:44:40) (NTS)
|
||||
Copyright (c) The PHP Group
|
||||
Zend Engine v4.3.19, Copyright (c) Zend Technologies
|
||||
with Zend OPcache v8.3.19, Copyright (c), by Zend Technologies
|
||||
render: plain
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Operating System
|
||||
description: "The used operating system, if relevant."
|
||||
placeholder: "Ubuntu 20.04"
|
||||
placeholder: "Ubuntu 24.04"
|
||||
|
|
5
.github/actions/apk/action.yml
vendored
5
.github/actions/apk/action.yml
vendored
|
@ -6,6 +6,8 @@ runs:
|
|||
run: |
|
||||
set -x
|
||||
|
||||
OPCACHE_TLS_TESTS_DEPS="clang gcc binutils-gold lld"
|
||||
|
||||
apk update -q
|
||||
apk add \
|
||||
util-linux \
|
||||
|
@ -53,4 +55,5 @@ runs:
|
|||
postgresql14-dev \
|
||||
tzdata \
|
||||
musl-locales \
|
||||
musl-locales-lang
|
||||
musl-locales-lang \
|
||||
$OPCACHE_TLS_TESTS_DEPS
|
||||
|
|
9
.github/actions/apt-x32/action.yml
vendored
9
.github/actions/apt-x32/action.yml
vendored
|
@ -6,6 +6,8 @@ runs:
|
|||
run: |
|
||||
set -x
|
||||
|
||||
OPCACHE_TLS_TESTS_DEPS="gcc clang lld"
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
dpkg --add-architecture i386
|
||||
apt-get update -y | true
|
||||
|
@ -33,17 +35,16 @@ runs:
|
|||
libsodium-dev:i386 \
|
||||
libsqlite3-dev:i386 \
|
||||
libssl-dev:i386 \
|
||||
libtidy-dev:i386 \
|
||||
libwebp-dev:i386 \
|
||||
libxml2-dev:i386 \
|
||||
libxml2-dev:i386 \
|
||||
libxpm-dev:i386 \
|
||||
libxslt1-dev:i386 \
|
||||
libzip-dev:i386 \
|
||||
firebird-dev:i386 \
|
||||
locales \
|
||||
make \
|
||||
pkg-config:i386 \
|
||||
re2c \
|
||||
unzip \
|
||||
wget \
|
||||
zlib1g-dev:i386
|
||||
zlib1g-dev:i386 \
|
||||
$OPCACHE_TLS_TESTS_DEPS
|
||||
|
|
5
.github/actions/apt-x64/action.yml
vendored
5
.github/actions/apt-x64/action.yml
vendored
|
@ -10,6 +10,8 @@ runs:
|
|||
run: |
|
||||
set -x
|
||||
|
||||
OPCACHE_TLS_TESTS_DEPS="gcc clang lld"
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Install sudo in Docker for consistent actions
|
||||
|
@ -74,4 +76,5 @@ runs:
|
|||
libqdbm-dev \
|
||||
libjpeg-dev \
|
||||
libpng-dev \
|
||||
libfreetype6-dev
|
||||
libfreetype6-dev \
|
||||
$OPCACHE_TLS_TESTS_DEPS
|
||||
|
|
2
.github/actions/brew/action.yml
vendored
2
.github/actions/brew/action.yml
vendored
|
@ -13,7 +13,7 @@ runs:
|
|||
|
||||
# Some packages exist on x86 but not arm, or vice versa.
|
||||
# Install them with reinstall to avoid warnings.
|
||||
brew reinstall autoconf webp tidy-html5 libzip libsodium icu4c
|
||||
brew reinstall autoconf webp tidy-html5 libzip libsodium icu4c curl
|
||||
brew install \
|
||||
bison \
|
||||
re2c
|
||||
|
|
81
.github/actions/configure-gentoo/action.yml
vendored
Normal file
81
.github/actions/configure-gentoo/action.yml
vendored
Normal file
|
@ -0,0 +1,81 @@
|
|||
name: ./configure
|
||||
inputs:
|
||||
configurationParameters:
|
||||
default: ''
|
||||
required: false
|
||||
skipSlow:
|
||||
default: false
|
||||
required: false
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- shell: bash
|
||||
run: |
|
||||
set -x
|
||||
./buildconf --force
|
||||
./configure \
|
||||
--enable-option-checking=fatal \
|
||||
--prefix=/usr \
|
||||
--with-libdir=lib64 \
|
||||
--enable-phpdbg \
|
||||
--enable-fpm \
|
||||
--with-pdo-mysql=mysqlnd \
|
||||
--with-mysqli=mysqlnd \
|
||||
${{ inputs.skipSlow == 'false' && '--with-pgsql' || '' }} \
|
||||
${{ inputs.skipSlow == 'false' && '--with-pdo-pgsql' || '' }} \
|
||||
${{ inputs.skipSlow == 'false' && '--with-pdo-sqlite' || '' }} \
|
||||
--enable-intl \
|
||||
--without-pear \
|
||||
--enable-gd \
|
||||
--with-jpeg \
|
||||
--with-webp \
|
||||
--with-freetype \
|
||||
--with-xpm \
|
||||
--enable-exif \
|
||||
--with-zip \
|
||||
--with-zlib \
|
||||
--enable-soap \
|
||||
--enable-xmlreader \
|
||||
--with-xsl \
|
||||
${{ inputs.skipSlow == 'false' && '--with-tidy' || '' }} \
|
||||
--enable-sysvsem \
|
||||
--enable-sysvshm \
|
||||
--enable-shmop \
|
||||
--enable-pcntl \
|
||||
--with-readline \
|
||||
--enable-mbstring \
|
||||
--with-iconv \
|
||||
--with-curl \
|
||||
--with-gettext \
|
||||
--enable-sockets \
|
||||
--with-bz2 \
|
||||
--with-openssl \
|
||||
--with-gmp \
|
||||
--enable-bcmath \
|
||||
--enable-calendar \
|
||||
--enable-ftp \
|
||||
${{ inputs.skipSlow == 'false' && '--with-enchant=/usr' || '' }} \
|
||||
--enable-sysvmsg \
|
||||
--with-ffi \
|
||||
--enable-zend-test \
|
||||
${{ inputs.skipSlow == 'false' && '--enable-dl-test=shared' || '' }} \
|
||||
${{ inputs.skipSlow == 'false' && '--with-ldap' || '' }} \
|
||||
${{ inputs.skipSlow == 'false' && '--with-ldap-sasl' || '' }} \
|
||||
--with-password-argon2 \
|
||||
--with-mhash \
|
||||
--with-sodium \
|
||||
--enable-dba \
|
||||
--with-cdb \
|
||||
--enable-flatfile \
|
||||
--enable-inifile \
|
||||
--with-tcadb \
|
||||
--with-lmdb \
|
||||
--with-qdbm \
|
||||
${{ inputs.skipSlow == 'false' && '--with-snmp' || '' }} \
|
||||
${{ inputs.skipSlow == 'false' && '--with-unixODBC' || '' }} \
|
||||
${{ inputs.skipSlow == 'false' && '--with-pdo-odbc=unixODBC,/usr' || '' }} \
|
||||
--with-config-file-path=/etc \
|
||||
--with-config-file-scan-dir=/etc/php.d \
|
||||
${{ inputs.skipSlow == 'false' && '--with-pdo-dblib' || '' }} \
|
||||
--enable-werror \
|
||||
${{ inputs.configurationParameters }} || cat config.log
|
4
.github/actions/configure-x32/action.yml
vendored
4
.github/actions/configure-x32/action.yml
vendored
|
@ -10,6 +10,7 @@ runs:
|
|||
run: |
|
||||
set -x
|
||||
|
||||
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib/i386-linux-gnu/pkgconfig"
|
||||
./buildconf --force
|
||||
export CFLAGS="-m32 -msse2"
|
||||
export CXXFLAGS="-m32 -msse2"
|
||||
|
@ -26,6 +27,7 @@ runs:
|
|||
--with-pgsql \
|
||||
--with-pdo-pgsql \
|
||||
--with-pdo-sqlite \
|
||||
--with-pdo-firebird \
|
||||
--without-pear \
|
||||
--enable-gd \
|
||||
--with-jpeg \
|
||||
|
@ -33,12 +35,10 @@ runs:
|
|||
--with-freetype \
|
||||
--with-xpm \
|
||||
--enable-exif \
|
||||
--with-zip \
|
||||
--with-zlib \
|
||||
--enable-soap \
|
||||
--enable-xmlreader \
|
||||
--with-xsl \
|
||||
--with-tidy \
|
||||
--enable-sysvsem \
|
||||
--enable-sysvshm \
|
||||
--enable-shmop \
|
||||
|
|
7
.github/actions/extra-tests/action.yml
vendored
Normal file
7
.github/actions/extra-tests/action.yml
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
name: Extra tests
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- shell: sh
|
||||
run: |
|
||||
sapi/cli/php run-extra-tests.php
|
27
.github/actions/freebsd/action.yml
vendored
27
.github/actions/freebsd/action.yml
vendored
|
@ -1,11 +1,18 @@
|
|||
name: FreeBSD
|
||||
inputs:
|
||||
configurationParameters:
|
||||
default: ''
|
||||
required: false
|
||||
runExtraTests:
|
||||
default: false
|
||||
required: false
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: FreeBSD
|
||||
uses: vmactions/freebsd-vm@v1
|
||||
with:
|
||||
release: '13.3'
|
||||
release: '13.5'
|
||||
usesh: true
|
||||
copyback: false
|
||||
# Temporarily disable sqlite, as FreeBSD ships it with disabled double quotes. We'll need to fix our tests.
|
||||
|
@ -13,6 +20,8 @@ runs:
|
|||
prepare: |
|
||||
cd $GITHUB_WORKSPACE
|
||||
|
||||
OPCACHE_TLS_TESTS_DEPS="gcc"
|
||||
|
||||
kldload accf_http
|
||||
pkg install -y \
|
||||
autoconf \
|
||||
|
@ -27,7 +36,6 @@ runs:
|
|||
bzip2 \
|
||||
t1lib \
|
||||
gmp \
|
||||
tidyp \
|
||||
libsodium \
|
||||
libzip \
|
||||
libxml2 \
|
||||
|
@ -38,9 +46,11 @@ runs:
|
|||
webp \
|
||||
libavif \
|
||||
`#sqlite3` \
|
||||
curl
|
||||
curl \
|
||||
$OPCACHE_TLS_TESTS_DEPS
|
||||
|
||||
./buildconf -f
|
||||
CC=clang CXX=clang++ \
|
||||
./configure \
|
||||
--prefix=/usr/local \
|
||||
--enable-debug \
|
||||
|
@ -81,7 +91,9 @@ runs:
|
|||
--with-sodium \
|
||||
--enable-werror \
|
||||
--with-config-file-path=/etc \
|
||||
--with-config-file-scan-dir=/etc/php.d
|
||||
--with-config-file-scan-dir=/etc/php.d \
|
||||
${{ inputs.configurationParameters }}
|
||||
|
||||
gmake -j2
|
||||
mkdir /etc/php.d
|
||||
gmake install > /dev/null
|
||||
|
@ -101,5 +113,8 @@ runs:
|
|||
--offline \
|
||||
--show-diff \
|
||||
--show-slow 1000 \
|
||||
--set-timeout 120 \
|
||||
-d zend_extension=opcache.so
|
||||
--set-timeout 120
|
||||
|
||||
if test "${{ inputs.runExtraTests }}" = "true"; then
|
||||
sapi/cli/php run-extra-tests.php
|
||||
fi
|
||||
|
|
34
.github/actions/test-gentoo/action.yml
vendored
Normal file
34
.github/actions/test-gentoo/action.yml
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
name: Test
|
||||
inputs:
|
||||
runTestsParameters:
|
||||
default: ''
|
||||
required: false
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- shell: bash
|
||||
run: |
|
||||
set -x
|
||||
# XXX: Set up other database tests?
|
||||
# XXX: These tests are not running containerized
|
||||
export MYSQL_TEST_USER=ci
|
||||
export MYSQL_TEST_PASSWD=ci
|
||||
if [[ -z "$PDO_MYSQL_TEST_DSN" ]]; then
|
||||
export PDO_MYSQL_TEST_DSN="mysql:host=localhost;dbname=test"
|
||||
fi
|
||||
export PDO_MYSQL_TEST_USER=ci
|
||||
export PDO_MYSQL_TEST_PASS=ci
|
||||
export PGSQL_TEST_CONNSTR="host=localhost dbname=test port=5432 user=ci password=ci"
|
||||
if [[ -z "$PDO_PGSQL_TEST_DSN" ]]; then
|
||||
export PDO_PGSQL_TEST_DSN="pgsql:host=localhost port=5432 dbname=test user=ci password=ci"
|
||||
fi
|
||||
# Slow tests criteron is doubled because this runner isn't as fast as others
|
||||
export SKIP_IO_CAPTURE_TESTS=1
|
||||
export STACK_LIMIT_DEFAULTS_CHECK=1
|
||||
sapi/cli/php run-tests.php -P -q ${{ inputs.runTestsParameters }} \
|
||||
-j$(nproc) \
|
||||
-g FAIL,BORK,LEAK,XLEAK \
|
||||
--no-progress \
|
||||
--show-diff \
|
||||
--show-slow 2000 \
|
||||
--set-timeout 120
|
4
.github/actions/test-linux/action.yml
vendored
4
.github/actions/test-linux/action.yml
vendored
|
@ -30,7 +30,9 @@ runs:
|
|||
export PDO_PGSQL_TEST_DSN="pgsql:host=localhost port=5432 dbname=test user=postgres password=postgres"
|
||||
fi
|
||||
export PDO_FIREBIRD_TEST_DATABASE=test.fdb
|
||||
export PDO_FIREBIRD_TEST_DSN=firebird:dbname=localhost:test.fdb
|
||||
if [[ -z "$PDO_FIREBIRD_TEST_DSN" ]]; then
|
||||
export PDO_FIREBIRD_TEST_DSN=firebird:dbname=localhost:test.fdb
|
||||
fi
|
||||
export PDO_FIREBIRD_TEST_PASS=test
|
||||
export PDO_FIREBIRD_TEST_USER=test
|
||||
export ODBC_TEST_USER="odbc_test"
|
||||
|
|
6
.github/labeler.yml
vendored
6
.github/labeler.yml
vendored
|
@ -320,6 +320,11 @@
|
|||
- any-glob-to-any-file:
|
||||
- ext/tokenizer/**/*
|
||||
|
||||
"Extension: uri":
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- ext/uri/**/*
|
||||
|
||||
"Extension: xml":
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
|
@ -464,7 +469,6 @@
|
|||
- 'ext/pdo/php_pdo.h'
|
||||
- 'ext/pdo/php_pdo_driver.h'
|
||||
- 'ext/pdo/php_pdo_error.h'
|
||||
- 'ext/phar/php_phar.h'
|
||||
- 'ext/random/php_random.h'
|
||||
- 'ext/random/php_random_csprng.h'
|
||||
- 'ext/random/php_random_uint128.h'
|
||||
|
|
1
.github/lsan-suppressions.txt
vendored
1
.github/lsan-suppressions.txt
vendored
|
@ -1,3 +1,4 @@
|
|||
leak:acommon::DictInfoList::elements
|
||||
leak:timer_create
|
||||
leak:netsnmp_init_mib_internals
|
||||
leak:isc_attach_database
|
||||
|
|
3
.github/scripts/setup-slapd.sh
vendored
3
.github/scripts/setup-slapd.sh
vendored
|
@ -72,6 +72,9 @@ olcTLSCertificateKeyFile: /etc/ldap/ssl/server.key
|
|||
add: olcTLSVerifyClient
|
||||
olcTLSVerifyClient: never
|
||||
-
|
||||
add: olcTLSProtocolMin
|
||||
olcTLSProtocolMin: 3.3
|
||||
-
|
||||
add: olcAuthzRegexp
|
||||
olcAuthzRegexp: uid=usera,cn=digest-md5,cn=auth cn=usera,dc=my-domain,dc=com
|
||||
-
|
||||
|
|
4
.github/scripts/windows/build.bat
vendored
4
.github/scripts/windows/build.bat
vendored
|
@ -41,7 +41,9 @@ if not exist "%SDK_RUNNER%" (
|
|||
exit /b 3
|
||||
)
|
||||
|
||||
cmd /c %SDK_RUNNER% -t .github\scripts\windows\build_task.bat
|
||||
for /f "delims=" %%T in ('call .github\scripts\windows\find-vs-toolset.bat %PHP_BUILD_CRT%') do set "VS_TOOLSET=%%T"
|
||||
echo Got VS Toolset %VS_TOOLSET%
|
||||
cmd /c %SDK_RUNNER% -s %VS_TOOLSET% -t .github\scripts\windows\build_task.bat
|
||||
if %errorlevel% neq 0 exit /b 3
|
||||
|
||||
exit /b 0
|
||||
|
|
15
.github/scripts/windows/build_task.bat
vendored
15
.github/scripts/windows/build_task.bat
vendored
|
@ -25,18 +25,17 @@ if %errorlevel% neq 0 exit /b 3
|
|||
|
||||
if "%THREAD_SAFE%" equ "0" set ADD_CONF=%ADD_CONF% --disable-zts
|
||||
if "%INTRINSICS%" neq "" set ADD_CONF=%ADD_CONF% --enable-native-intrinsics=%INTRINSICS%
|
||||
if "%ASAN%" equ "1" set ADD_CONF=%ADD_CONF% --enable-sanitizer --enable-debug-pack
|
||||
|
||||
rem Some undefined behavior is reported on 32-bit, this should be fixed
|
||||
if "%PLATFORM%" == "x86" (
|
||||
set CFLAGS=/W1
|
||||
) else (
|
||||
set CFLAGS=/W1 /WX
|
||||
)
|
||||
rem C4018: comparison: signed/unsigned mismatch
|
||||
rem C4146: unary minus operator applied to unsigned type
|
||||
rem C4244: type conversion, possible loss of data
|
||||
rem C4267: 'size_t' type conversion, possible loss of data
|
||||
set CFLAGS=/W3 /WX /wd4018 /wd4146 /wd4244 /wd4267
|
||||
|
||||
cmd /c configure.bat ^
|
||||
--enable-snapshot-build ^
|
||||
--disable-debug-pack ^
|
||||
--enable-com-dotnet=shared ^
|
||||
--without-analyzer ^
|
||||
--enable-object-out-dir=%PHP_BUILD_OBJ_DIR% ^
|
||||
--with-php-build=%DEPS_DIR% ^
|
||||
|
@ -46,5 +45,7 @@ if %errorlevel% neq 0 exit /b 3
|
|||
|
||||
nmake /NOLOGO
|
||||
if %errorlevel% neq 0 exit /b 3
|
||||
nmake /NOLOGO comtest.dll
|
||||
if %errorlevel% neq 0 exit /b 3
|
||||
|
||||
exit /b 0
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
for /f "usebackq tokens=3" %%i in (`findstr PHP_MAJOR_VERSION main\php_version.h`) do set BRANCH=%%i
|
||||
for /f "usebackq tokens=3" %%i in (`findstr PHP_MINOR_VERSION main\php_version.h`) do set BRANCH=%BRANCH%.%%i
|
||||
|
||||
if /i "%BRANCH%" equ "8.4" (
|
||||
if /i "%BRANCH%" equ "8.5" (
|
||||
set BRANCH=master
|
||||
)
|
||||
|
|
49
.github/scripts/windows/find-vs-toolset.bat
vendored
Normal file
49
.github/scripts/windows/find-vs-toolset.bat
vendored
Normal file
|
@ -0,0 +1,49 @@
|
|||
@echo off
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
if "%~1"=="" (
|
||||
echo ERROR: Usage: %~nx0 [vc14^|vc15^|vs16^|vs17]
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set "toolsets_vc14=14.0"
|
||||
set "toolsets_vc15="
|
||||
set "toolsets_vs16="
|
||||
set "toolsets_vs17="
|
||||
|
||||
|
||||
for /f "usebackq tokens=*" %%I in (`vswhere.exe -latest -find "VC\Tools\MSVC"`) do set "MSVCDIR=%%I"
|
||||
|
||||
if not defined MSVCDIR (
|
||||
echo ERROR: could not locate VC\Tools\MSVC
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
for /f "delims=" %%D in ('dir /b /ad "%MSVCDIR%"') do (
|
||||
for /f "tokens=1,2 delims=." %%A in ("%%D") do (
|
||||
set "maj=%%A" & set "min=%%B"
|
||||
if "!maj!"=="14" (
|
||||
if !min! LEQ 9 (
|
||||
set "toolsets_vc14=%%D"
|
||||
) else if !min! LEQ 19 (
|
||||
set "toolsets_vc15=%%D"
|
||||
) else if !min! LEQ 29 (
|
||||
set "toolsets_vs16=%%D"
|
||||
) else (
|
||||
set "toolsets_vs17=%%D"
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
set "KEY=%~1"
|
||||
set "VAR=toolsets_%KEY%"
|
||||
call set "RESULT=%%%VAR%%%"
|
||||
if defined RESULT (
|
||||
echo %RESULT%
|
||||
exit /b 0
|
||||
) else (
|
||||
echo ERROR: no toolset found for %KEY%
|
||||
exit /b 1
|
||||
)
|
3
.github/scripts/windows/test.bat
vendored
3
.github/scripts/windows/test.bat
vendored
|
@ -9,7 +9,8 @@ if not exist "%SDK_RUNNER%" (
|
|||
exit /b 3
|
||||
)
|
||||
|
||||
cmd /c %SDK_RUNNER% -t .github\scripts\windows\test_task.bat
|
||||
for /f "delims=" %%T in ('call .github\scripts\windows\find-vs-toolset.bat %PHP_BUILD_CRT%') do set "VS_TOOLSET=%%T"
|
||||
cmd /c %SDK_RUNNER% -s %VS_TOOLSET% -t .github\scripts\windows\test_task.bat
|
||||
if %errorlevel% neq 0 exit /b 3
|
||||
|
||||
exit /b 0
|
||||
|
|
26
.github/scripts/windows/test_task.bat
vendored
26
.github/scripts/windows/test_task.bat
vendored
|
@ -58,12 +58,15 @@ if "%PLATFORM%" == "x64" (
|
|||
curl -sLo Firebird.zip %PHP_FIREBIRD_DOWNLOAD_URL%
|
||||
7z x -oC:\Firebird Firebird.zip
|
||||
set PDO_FIREBIRD_TEST_DATABASE=C:\test.fdb
|
||||
set PDO_FIREBIRD_TEST_DSN=firebird:dbname=%PDO_FIREBIRD_TEST_DATABASE%
|
||||
set PDO_FIREBIRD_TEST_DSN=firebird:dbname=127.0.0.1:%PDO_FIREBIRD_TEST_DATABASE%
|
||||
set PDO_FIREBIRD_TEST_USER=SYSDBA
|
||||
set PDO_FIREBIRD_TEST_PASS=phpfi
|
||||
echo create user %PDO_FIREBIRD_TEST_USER% password '%PDO_FIREBIRD_TEST_PASS%';> C:\Firebird\create_user.sql
|
||||
echo commit;>> C:\Firebird\create_user.sql
|
||||
echo create database '%PDO_FIREBIRD_TEST_DATABASE%' user '%PDO_FIREBIRD_TEST_USER%' password '%PDO_FIREBIRD_TEST_PASS%';> C:\Firebird\setup.sql
|
||||
C:\Firebird\instsvc.exe install -n TestInstance
|
||||
C:\Firebird\isql -q -i C:\Firebird\setup.sql
|
||||
C:\Firebird\isql -q -i C:\Firebird\create_user.sql -user sysdba %PDO_FIREBIRD_TEST_DATABASE%
|
||||
C:\Firebird\instsvc.exe start -n TestInstance
|
||||
if %errorlevel% neq 0 exit /b 3
|
||||
path C:\Firebird;%PATH%
|
||||
|
@ -89,8 +92,6 @@ rem set SSLEAY_CONF=
|
|||
|
||||
rem prepare for OPcache
|
||||
if "%OPCACHE%" equ "1" set OPCACHE_OPTS=-d opcache.enable=1 -d opcache.enable_cli=1 -d opcache.protect_memory=1 -d opcache.jit_buffer_size=64M -d opcache.jit=tracing
|
||||
rem work-around for failing to dl(mysqli) with OPcache (https://github.com/php/php-src/issues/8508)
|
||||
if "%OPCACHE%" equ "1" set OPCACHE_OPTS=%OPCACHE_OPTS% -d extension=mysqli
|
||||
|
||||
rem prepare for enchant
|
||||
mkdir %~d0\usr\local\lib\enchant-2
|
||||
|
@ -120,11 +121,14 @@ hMailServer.exe /verysilent
|
|||
cd %APPVEYOR_BUILD_FOLDER%
|
||||
%PHP_BUILD_DIR%\php.exe -dextension_dir=%PHP_BUILD_DIR% -dextension=com_dotnet .github\setup_hmailserver.php
|
||||
|
||||
rem prepare for com_dotnet
|
||||
nmake register_comtest
|
||||
|
||||
mkdir %PHP_BUILD_DIR%\test_file_cache
|
||||
rem generate php.ini
|
||||
echo extension_dir=%PHP_BUILD_DIR% > %PHP_BUILD_DIR%\php.ini
|
||||
echo opcache.file_cache=%PHP_BUILD_DIR%\test_file_cache >> %PHP_BUILD_DIR%\php.ini
|
||||
if "%OPCACHE%" equ "1" echo zend_extension=php_opcache.dll >> %PHP_BUILD_DIR%\php.ini
|
||||
echo opcache.record_warnings=1 >> %PHP_BUILD_DIR%\php.ini
|
||||
rem work-around for some spawned PHP processes requiring OpenSSL and sockets
|
||||
echo extension=php_openssl.dll >> %PHP_BUILD_DIR%\php.ini
|
||||
echo extension=php_sockets.dll >> %PHP_BUILD_DIR%\php.ini
|
||||
|
@ -134,21 +138,23 @@ for %%i in (ldap) do (
|
|||
del %PHP_BUILD_DIR%\php_%%i.dll
|
||||
)
|
||||
|
||||
rem reduce excessive stack reserve for testing
|
||||
editbin /stack:8388608 %PHP_BUILD_DIR%\php.exe
|
||||
editbin /stack:8388608 %PHP_BUILD_DIR%\php-cgi.exe
|
||||
|
||||
set TEST_PHPDBG_EXECUTABLE=%PHP_BUILD_DIR%\phpdbg.exe
|
||||
|
||||
copy /-y %DEPS_DIR%\bin\*.dll %PHP_BUILD_DIR%\*
|
||||
|
||||
if "%ASAN%" equ "1" set ASAN_OPTS=--asan
|
||||
|
||||
mkdir c:\tests_tmp
|
||||
|
||||
nmake test TESTS="%OPCACHE_OPTS% -g FAIL,BORK,LEAK,XLEAK --no-progress -q --offline --show-diff --show-slow 1000 --set-timeout 120 --temp-source c:\tests_tmp --temp-target c:\tests_tmp --bless %PARALLEL%"
|
||||
nmake test TESTS="%OPCACHE_OPTS% -g FAIL,BORK,LEAK,XLEAK %ASAN_OPTS% --no-progress -q --offline --show-diff --show-slow 1000 --set-timeout 120 --temp-source c:\tests_tmp --temp-target c:\tests_tmp %PARALLEL%"
|
||||
|
||||
set EXIT_CODE=%errorlevel%
|
||||
|
||||
nmake unregister_comtest
|
||||
taskkill /f /im snmpd.exe
|
||||
|
||||
if %EXIT_CODE% GEQ 1 (
|
||||
git checkout ext\pgsql\tests\config.inc
|
||||
git diff > bless_tests.patch
|
||||
)
|
||||
|
||||
exit /b %EXIT_CODE%
|
||||
|
|
6
.github/workflows/docs.yml
vendored
6
.github/workflows/docs.yml
vendored
|
@ -17,11 +17,11 @@ jobs:
|
|||
if: github.repository == 'php/php-src'
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
- name: Install dependencies
|
||||
run: pip install sphinx-design sphinxawesome-theme rstfmt
|
||||
run: pip install -r docs/requirements.txt
|
||||
- name: Check formatting
|
||||
run: rstfmt --check -w 100 docs/source
|
||||
run: make -C docs check-formatting
|
||||
- name: Publish
|
||||
if: github.event_name == 'push'
|
||||
uses: sphinx-notes/pages@v3
|
||||
|
|
167
.github/workflows/nightly.yml
vendored
167
.github/workflows/nightly.yml
vendored
|
@ -17,15 +17,27 @@ on:
|
|||
run_alpine:
|
||||
required: true
|
||||
type: boolean
|
||||
run_linux_ppc64:
|
||||
required: true
|
||||
type: boolean
|
||||
run_macos_arm64:
|
||||
required: true
|
||||
type: boolean
|
||||
run_freebsd_zts:
|
||||
required: true
|
||||
type: boolean
|
||||
ubuntu_version:
|
||||
required: true
|
||||
type: string
|
||||
windows_version:
|
||||
required: true
|
||||
type: string
|
||||
vs_crt_version:
|
||||
required: true
|
||||
type: string
|
||||
skip_laravel:
|
||||
required: true
|
||||
type: boolean
|
||||
skip_symfony:
|
||||
required: true
|
||||
type: boolean
|
||||
|
@ -35,6 +47,46 @@ on:
|
|||
permissions:
|
||||
contents: read
|
||||
jobs:
|
||||
LINUX_PPC64:
|
||||
if: inputs.run_linux_ppc64
|
||||
name: LINUX_PPC64_ASAN_UBSAN_DEBUG_ZTS
|
||||
# This runs on a self-hosted runner; see https://wiki.php.net/systems/ci
|
||||
runs-on: [self-hosted, gentoo, ppc64]
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: System info
|
||||
run: |
|
||||
echo "::group::Show host CPU info"
|
||||
lscpu
|
||||
echo "::endgroup::"
|
||||
echo "::group::Show installed packages"
|
||||
cat /var/lib/portage/world
|
||||
echo "::endgroup::"
|
||||
- name: ./configure
|
||||
uses: ./.github/actions/configure-gentoo
|
||||
with:
|
||||
configurationParameters: >-
|
||||
CFLAGS="-fsanitize=undefined,address -fno-sanitize=function -DZEND_TRACK_ARENA_ALLOC"
|
||||
LDFLAGS="-fsanitize=undefined,address -fno-sanitize=function"
|
||||
CC=clang-17
|
||||
CXX=clang++-17
|
||||
--enable-debug
|
||||
--enable-zts
|
||||
skipSlow: false # FIXME: This should likely include slow extensions
|
||||
- name: make
|
||||
run: make -j$(/usr/bin/nproc) >/dev/null
|
||||
# Skip an install action for now
|
||||
- name: Tests
|
||||
uses: ./.github/actions/test-gentoo
|
||||
# There is no PPC JIT, so rip this out
|
||||
with:
|
||||
runTestsParameters: >-
|
||||
--asan -x
|
||||
- name: Extra tests
|
||||
uses: ./.github/actions/extra-tests
|
||||
ALPINE:
|
||||
if: inputs.run_alpine
|
||||
name: ALPINE_X64_ASAN_UBSAN_DEBUG_ZTS
|
||||
|
@ -43,7 +95,7 @@ jobs:
|
|||
image: 'alpine:3.20.1'
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: apk
|
||||
|
@ -82,8 +134,9 @@ jobs:
|
|||
jitType: tracing
|
||||
runTestsParameters: >-
|
||||
--asan -x
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- name: Extra tests
|
||||
uses: ./.github/actions/extra-tests
|
||||
- name: Notify Slack
|
||||
if: failure()
|
||||
uses: ./.github/actions/notify-slack
|
||||
|
@ -153,7 +206,7 @@ jobs:
|
|||
runs-on: ubuntu-${{ matrix.asan && inputs.asan_ubuntu_version || inputs.ubuntu_version }}
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: Create MSSQL container
|
||||
|
@ -196,14 +249,12 @@ jobs:
|
|||
jitType: tracing
|
||||
runTestsParameters: >-
|
||||
${{ matrix.run_tests_parameters }}
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- name: Test OpCache
|
||||
uses: ./.github/actions/test-linux
|
||||
with:
|
||||
runTestsParameters: >-
|
||||
${{ matrix.run_tests_parameters }}
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- name: Test Function JIT
|
||||
# ASAN frequently timeouts. Each test run takes ~90 minutes, we can
|
||||
|
@ -214,8 +265,9 @@ jobs:
|
|||
jitType: function
|
||||
runTestsParameters: >-
|
||||
${{ matrix.run_tests_parameters }}
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- name: Extra tests
|
||||
uses: ./.github/actions/extra-tests
|
||||
- name: Verify generated files are up to date
|
||||
uses: ./.github/actions/verify-generated-files
|
||||
- name: Notify Slack
|
||||
|
@ -254,7 +306,7 @@ jobs:
|
|||
FIREBIRD_PASSWORD: test
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: apt
|
||||
|
@ -288,14 +340,12 @@ jobs:
|
|||
jitType: tracing
|
||||
runTestsParameters: >-
|
||||
${{ matrix.run_tests_parameters }}
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- name: Test OpCache
|
||||
uses: ./.github/actions/test-linux
|
||||
with:
|
||||
runTestsParameters: >-
|
||||
${{ matrix.run_tests_parameters }}
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- name: Test Function JIT
|
||||
uses: ./.github/actions/test-linux
|
||||
|
@ -303,8 +353,9 @@ jobs:
|
|||
jitType: function
|
||||
runTestsParameters: >-
|
||||
${{ matrix.run_tests_parameters }}
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- name: Extra tests
|
||||
uses: ./.github/actions/extra-tests
|
||||
- name: Notify Slack
|
||||
if: failure()
|
||||
uses: ./.github/actions/notify-slack
|
||||
|
@ -323,7 +374,7 @@ jobs:
|
|||
runs-on: macos-${{ matrix.os }}
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: brew
|
||||
|
@ -348,13 +399,11 @@ jobs:
|
|||
with:
|
||||
jitType: tracing
|
||||
runTestsParameters: >-
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- name: Test OpCache
|
||||
uses: ./.github/actions/test-macos
|
||||
with:
|
||||
runTestsParameters: >-
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- name: Test Function JIT
|
||||
if: matrix.os != '14' || !matrix.zts
|
||||
|
@ -362,8 +411,9 @@ jobs:
|
|||
with:
|
||||
jitType: function
|
||||
runTestsParameters: >-
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- name: Extra tests
|
||||
uses: ./.github/actions/extra-tests
|
||||
- name: Verify generated files are up to date
|
||||
uses: ./.github/actions/verify-generated-files
|
||||
- name: Notify Slack
|
||||
|
@ -399,7 +449,7 @@ jobs:
|
|||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: Create MSSQL container
|
||||
|
@ -424,7 +474,6 @@ jobs:
|
|||
with:
|
||||
jitType: tracing
|
||||
runTestsParameters: >-
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- uses: codecov/codecov-action@v4
|
||||
if: ${{ !cancelled() }}
|
||||
|
@ -453,7 +502,7 @@ jobs:
|
|||
USE_TRACKED_ALLOC: 1
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: apt
|
||||
|
@ -478,7 +527,6 @@ jobs:
|
|||
- name: Enable Opcache
|
||||
run: |
|
||||
echo memory_limit=-1 >> /etc/php.d/opcache.ini
|
||||
echo zend_extension=opcache.so > /etc/php.d/opcache.ini
|
||||
echo opcache.enable_cli=1 >> /etc/php.d/opcache.ini
|
||||
echo opcache.enable=1 >> /etc/php.d/opcache.ini
|
||||
echo opcache.protect_memory=1 >> /etc/php.d/opcache.ini
|
||||
|
@ -505,25 +553,28 @@ jobs:
|
|||
repositories="amp cache dns file http parallel parser pipeline process serialization socket sync websocket-client websocket-server"
|
||||
X=0
|
||||
for repository in $repositories; do
|
||||
printf "Testing amp/%s\n" "$repository"
|
||||
echo "::group::$repository"
|
||||
git clone "https://github.com/amphp/$repository.git" "amphp-$repository" --depth 1
|
||||
cd "amphp-$repository"
|
||||
git rev-parse HEAD
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-reqs
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
|
||||
EXIT_CODE=0
|
||||
vendor/bin/phpunit || EXIT_CODE=$?
|
||||
echo -e "\n::endgroup::"
|
||||
if [ ${EXIT_CODE:-0} -gt 128 ]; then
|
||||
X=1;
|
||||
echo "Failed"
|
||||
fi
|
||||
cd ..
|
||||
done
|
||||
exit $X
|
||||
- name: Test Laravel
|
||||
if: ${{ !cancelled() }}
|
||||
if: ${{ !cancelled() && !inputs.skip_laravel }}
|
||||
run: |
|
||||
git clone https://github.com/laravel/framework.git --depth=1
|
||||
cd framework
|
||||
git rev-parse HEAD
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-reqs
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
|
||||
# Hack to disable a test that hangs
|
||||
php -r '$c = file_get_contents("tests/Filesystem/FilesystemTest.php"); $c = str_replace("public function testSharedGet()", "#[\\PHPUnit\\Framework\\Attributes\\Group('"'"'skip'"'"')]\n public function testSharedGet()", $c); file_put_contents("tests/Filesystem/FilesystemTest.php", $c);'
|
||||
php vendor/bin/phpunit --exclude-group skip || EXIT_CODE=$?
|
||||
|
@ -536,14 +587,17 @@ jobs:
|
|||
repositories="async cache child-process datagram dns event-loop promise promise-stream promise-timer stream"
|
||||
X=0
|
||||
for repository in $repositories; do
|
||||
printf "Testing reactphp/%s\n" "$repository"
|
||||
echo "::group::$repository"
|
||||
git clone "https://github.com/reactphp/$repository.git" "reactphp-$repository" --depth 1
|
||||
cd "reactphp-$repository"
|
||||
git rev-parse HEAD
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-reqs
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
|
||||
EXIT_CODE=0
|
||||
vendor/bin/phpunit || EXIT_CODE=$?
|
||||
echo -e "\n::endgroup::"
|
||||
if [ $[EXIT_CODE:-0} -gt 128 ]; then
|
||||
X=1;
|
||||
echo "Failed"
|
||||
fi
|
||||
cd ..
|
||||
done
|
||||
|
@ -554,7 +608,7 @@ jobs:
|
|||
git clone https://github.com/revoltphp/event-loop.git --depth=1
|
||||
cd event-loop
|
||||
git rev-parse HEAD
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-reqs
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
|
||||
vendor/bin/phpunit || EXIT_CODE=$?
|
||||
if [ ${EXIT_CODE:-0} -gt 128 ]; then
|
||||
exit 1
|
||||
|
@ -565,18 +619,22 @@ jobs:
|
|||
git clone https://github.com/symfony/symfony.git --depth=1
|
||||
cd symfony
|
||||
git rev-parse HEAD
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-reqs
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
|
||||
php ./phpunit install
|
||||
# Test causes a heap-buffer-overflow but I cannot reproduce it locally...
|
||||
php -r '$c = file_get_contents("src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerCustomTest.php"); $c = str_replace("public function testSanitizeDeepNestedString()", "/** @group skip */\n public function testSanitizeDeepNestedString()", $c); file_put_contents("src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerCustomTest.php", $c);'
|
||||
php -r '$c = file_get_contents("src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerCustomTest.php"); $c = str_replace("public function testSanitizeDeepNestedString()", "#[\\PHPUnit\\Framework\\Attributes\\Group('"'"'skip'"'"')]\n public function testSanitizeDeepNestedString()", $c); file_put_contents("src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerCustomTest.php", $c);'
|
||||
# Buggy FFI test in Symfony, see https://github.com/symfony/symfony/issues/47668
|
||||
php -r '$c = file_get_contents("src/Symfony/Component/VarDumper/Tests/Caster/FFICasterTest.php"); $c = str_replace("public function testCastNonTrailingCharPointer()", "/** @group skip */\n public function testCastNonTrailingCharPointer()", $c); file_put_contents("src/Symfony/Component/VarDumper/Tests/Caster/FFICasterTest.php", $c);'
|
||||
php -r '$c = file_get_contents("src/Symfony/Component/VarDumper/Tests/Caster/FFICasterTest.php"); $c = str_replace("public function testCastNonTrailingCharPointer()", "#[\\PHPUnit\\Framework\\Attributes\\Group('"'"'skip'"'"')]\n public function testCastNonTrailingCharPointer()", $c); file_put_contents("src/Symfony/Component/VarDumper/Tests/Caster/FFICasterTest.php", $c);'
|
||||
export SYMFONY_DEPRECATIONS_HELPER=max[total]=999
|
||||
X=0
|
||||
for component in $(find src/Symfony -mindepth 2 -type f -name phpunit.xml.dist -printf '%h\n'); do
|
||||
php ./phpunit $component --exclude-group tty,benchmark,intl-data,transient --exclude-group skip || EXIT_CODE=$?
|
||||
echo "::group::$component"
|
||||
EXIT_CODE=0
|
||||
php ./phpunit $component --exclude-group tty --exclude-group benchmark --exclude-group intl-data --exclude-group transient --exclude-group skip || EXIT_CODE=$?
|
||||
echo -e "\n::endgroup::"
|
||||
if [ ${EXIT_CODE:-0} -gt 128 ]; then
|
||||
X=1;
|
||||
echo "Failed"
|
||||
fi
|
||||
done
|
||||
exit $X
|
||||
|
@ -586,7 +644,7 @@ jobs:
|
|||
git clone https://github.com/sebastianbergmann/phpunit.git --branch=main --depth=1
|
||||
cd phpunit
|
||||
git rev-parse HEAD
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-reqs
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
|
||||
php ./phpunit || EXIT_CODE=$?
|
||||
if [ ${EXIT_CODE:-0} -gt 128 ]; then
|
||||
exit 1
|
||||
|
@ -594,7 +652,7 @@ jobs:
|
|||
- name: 'Symfony Preloading'
|
||||
if: ${{ !cancelled() && !inputs.skip_symfony }}
|
||||
run: |
|
||||
php /usr/bin/composer create-project symfony/symfony-demo symfony_demo --no-progress --ignore-platform-reqs
|
||||
php /usr/bin/composer create-project symfony/symfony-demo symfony_demo --no-progress --ignore-platform-req=php+
|
||||
cd symfony_demo
|
||||
git rev-parse HEAD
|
||||
sed -i 's/PHP_SAPI/"cli-server"/g' var/cache/dev/App_KernelDevDebugContainer.preload.php
|
||||
|
@ -605,7 +663,7 @@ jobs:
|
|||
git clone https://github.com/WordPress/wordpress-develop.git wordpress --depth=1
|
||||
cd wordpress
|
||||
git rev-parse HEAD
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-reqs
|
||||
php /usr/bin/composer install --no-progress --ignore-platform-req=php+
|
||||
cp wp-tests-config-sample.php wp-tests-config.php
|
||||
sed -i 's/youremptytestdbnamehere/test/g' wp-tests-config.php
|
||||
sed -i 's/yourusernamehere/root/g' wp-tests-config.php
|
||||
|
@ -647,7 +705,7 @@ jobs:
|
|||
runs-on: ubuntu-${{ inputs.ubuntu_version }}
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: Create MSSQL container
|
||||
|
@ -669,21 +727,18 @@ jobs:
|
|||
uses: ./.github/actions/test-linux
|
||||
with:
|
||||
runTestsParameters: >-
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
--file-cache-prime
|
||||
- name: Test File Cache (prime shm, use shm)
|
||||
uses: ./.github/actions/test-linux
|
||||
with:
|
||||
runTestsParameters: >-
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
--file-cache-use
|
||||
- name: Test File Cache (prime shm, use file)
|
||||
uses: ./.github/actions/test-linux
|
||||
with:
|
||||
runTestsParameters: >-
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
--file-cache-use
|
||||
-d opcache.file_cache_only=1
|
||||
|
@ -691,7 +746,6 @@ jobs:
|
|||
uses: ./.github/actions/test-linux
|
||||
with:
|
||||
runTestsParameters: >-
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
--file-cache-prime
|
||||
-d opcache.file_cache_only=1
|
||||
|
@ -699,7 +753,6 @@ jobs:
|
|||
uses: ./.github/actions/test-linux
|
||||
with:
|
||||
runTestsParameters: >-
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
--file-cache-use
|
||||
-d opcache.file_cache_only=1
|
||||
|
@ -715,7 +768,7 @@ jobs:
|
|||
runs-on: ubuntu-${{ inputs.ubuntu_version }}
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: apt
|
||||
|
@ -793,7 +846,6 @@ jobs:
|
|||
with:
|
||||
runTestsParameters: >-
|
||||
--msan
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- name: Verify generated files are up to date
|
||||
uses: ./.github/actions/verify-generated-files
|
||||
|
@ -807,7 +859,7 @@ jobs:
|
|||
runs-on: ubuntu-${{ inputs.ubuntu_version }}
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: apt
|
||||
|
@ -857,38 +909,38 @@ jobs:
|
|||
CXX: ccache g++
|
||||
steps:
|
||||
- name: git checkout PHP
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
path: php
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: git checkout apcu
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: krakjoe/apcu
|
||||
path: apcu
|
||||
- name: git checkout imagick
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: Imagick/imagick
|
||||
path: imagick
|
||||
- name: git checkout memcached
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: php-memcached-dev/php-memcached
|
||||
path: memcached
|
||||
- name: git checkout redis
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: phpredis/phpredis
|
||||
path: redis
|
||||
- name: git checkout xdebug
|
||||
if: false
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: xdebug/xdebug
|
||||
path: xdebug
|
||||
- name: git checkout yaml
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: php/pecl-file_formats-yaml
|
||||
path: yaml
|
||||
|
@ -987,7 +1039,7 @@ jobs:
|
|||
PHP_BUILD_OBJ_DIR: C:\obj
|
||||
PHP_BUILD_CACHE_SDK_DIR: C:\build-cache\sdk
|
||||
PHP_BUILD_SDK_BRANCH: php-sdk-2.3.0
|
||||
PHP_BUILD_CRT: ${{ inputs.windows_version == '2022' && 'vs17' || 'vs16' }}
|
||||
PHP_BUILD_CRT: ${{ inputs.vs_crt_version }}
|
||||
PLATFORM: ${{ matrix.x64 && 'x64' || 'x86' }}
|
||||
THREAD_SAFE: "${{ matrix.zts && '1' || '0' }}"
|
||||
INTRINSICS: "${{ matrix.zts && 'AVX2' || '' }}"
|
||||
|
@ -998,7 +1050,7 @@ jobs:
|
|||
- name: git config
|
||||
run: git config --global core.autocrlf false && git config --global core.eol lf
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: Setup
|
||||
|
@ -1008,12 +1060,23 @@ jobs:
|
|||
- name: Test
|
||||
run: .github/scripts/windows/test.bat
|
||||
FREEBSD:
|
||||
name: FREEBSD
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
zts: [true, false]
|
||||
exclude:
|
||||
- zts: ${{ !inputs.run_freebsd_zts && true || '*never*' }}
|
||||
name: "FREEBSD_${{ matrix.zts && 'ZTS' || 'NTS' }}"
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 50
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ inputs.branch }}
|
||||
- name: FreeBSD
|
||||
uses: ./.github/actions/freebsd
|
||||
with:
|
||||
configurationParameters: >-
|
||||
--${{ matrix.zts && 'enable' || 'disable' }}-zts
|
||||
runExtraTests: true
|
||||
|
|
46
.github/workflows/push.yml
vendored
46
.github/workflows/push.yml
vendored
|
@ -78,10 +78,11 @@ jobs:
|
|||
zts: true
|
||||
asan: true
|
||||
name: "LINUX_X64_${{ matrix.debug && 'DEBUG' || 'RELEASE' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}${{ matrix.asan && '_ASAN' || '' }}"
|
||||
runs-on: ubuntu-${{ !matrix.asan && '22' || '24' }}.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 50
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
- name: apt
|
||||
uses: ./.github/actions/apt-x64
|
||||
- name: System info
|
||||
|
@ -129,7 +130,6 @@ jobs:
|
|||
with:
|
||||
jitType: tracing
|
||||
runTestsParameters: >-
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
${{ matrix.asan && '--asan -x' || '' }}
|
||||
- name: Verify generated files are up to date
|
||||
|
@ -139,12 +139,14 @@ jobs:
|
|||
if: github.repository == 'php/php-src' || github.event_name == 'pull_request'
|
||||
name: LINUX_X32_DEBUG_ZTS
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 50
|
||||
container:
|
||||
image: ubuntu:20.04
|
||||
image: ubuntu:24.04
|
||||
env:
|
||||
MYSQL_TEST_HOST: mysql
|
||||
PDO_MYSQL_TEST_DSN: mysql:host=mysql;dbname=test
|
||||
PDO_MYSQL_TEST_HOST: mysql
|
||||
PDO_FIREBIRD_TEST_DSN: firebird:dbname=firebird:test.fdb
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:8.3
|
||||
|
@ -153,9 +155,18 @@ jobs:
|
|||
env:
|
||||
MYSQL_DATABASE: test
|
||||
MYSQL_ROOT_PASSWORD: root
|
||||
firebird:
|
||||
image: jacobalberty/firebird
|
||||
ports:
|
||||
- 3050:3050
|
||||
env:
|
||||
ISC_PASSWORD: test
|
||||
FIREBIRD_DATABASE: test.fdb
|
||||
FIREBIRD_USER: test
|
||||
FIREBIRD_PASSWORD: test
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
- name: apt
|
||||
uses: ./.github/actions/apt-x32
|
||||
- name: ccache
|
||||
|
@ -178,7 +189,6 @@ jobs:
|
|||
with:
|
||||
jitType: tracing
|
||||
runTestsParameters: >-
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
MACOS_DEBUG_NTS:
|
||||
if: github.repository == 'php/php-src' || github.event_name == 'pull_request'
|
||||
|
@ -186,15 +196,14 @@ jobs:
|
|||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: 13
|
||||
arch: X64
|
||||
- os: 14
|
||||
- os: 15
|
||||
arch: ARM64
|
||||
name: MACOS_${{ matrix.arch }}_DEBUG_NTS
|
||||
runs-on: macos-${{ matrix.os }}
|
||||
timeout-minutes: 50
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
- name: brew
|
||||
uses: ./.github/actions/brew
|
||||
- name: ccache
|
||||
|
@ -218,7 +227,6 @@ jobs:
|
|||
with:
|
||||
jitType: tracing
|
||||
runTestsParameters: >-
|
||||
-d zend_extension=opcache.so
|
||||
-d opcache.enable_cli=1
|
||||
- name: Verify generated files are up to date
|
||||
uses: ./.github/actions/verify-generated-files
|
||||
|
@ -226,6 +234,7 @@ jobs:
|
|||
if: github.repository == 'php/php-src' || github.event_name == 'pull_request'
|
||||
name: WINDOWS_X64_ZTS
|
||||
runs-on: windows-2022
|
||||
timeout-minutes: 50
|
||||
env:
|
||||
PHP_BUILD_CACHE_BASE_DIR: C:\build-cache
|
||||
PHP_BUILD_OBJ_DIR: C:\obj
|
||||
|
@ -241,7 +250,7 @@ jobs:
|
|||
- name: git config
|
||||
run: git config --global core.autocrlf false && git config --global core.eol lf
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
- name: Setup
|
||||
uses: ./.github/actions/setup-windows
|
||||
- name: Build
|
||||
|
@ -251,10 +260,11 @@ jobs:
|
|||
BENCHMARKING:
|
||||
name: BENCHMARKING
|
||||
if: github.repository == 'php/php-src' || github.event_name == 'pull_request'
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 50
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
# ASLR can cause a lot of noise due to missed sse opportunities for memcpy
|
||||
|
@ -286,7 +296,6 @@ jobs:
|
|||
./configure \
|
||||
--disable-debug \
|
||||
--enable-mbstring \
|
||||
--enable-opcache \
|
||||
--enable-option-checking=fatal \
|
||||
--enable-sockets \
|
||||
--enable-werror \
|
||||
|
@ -306,7 +315,6 @@ jobs:
|
|||
sudo mkdir -p /etc/php.d
|
||||
sudo chmod 777 /etc/php.d
|
||||
echo mysqli.default_socket=/var/run/mysqld/mysqld.sock > /etc/php.d/mysqli.ini
|
||||
echo zend_extension=opcache.so >> /etc/php.d/opcache.ini
|
||||
echo opcache.enable=1 >> /etc/php.d/opcache.ini
|
||||
echo opcache.enable_cli=1 >> /etc/php.d/opcache.ini
|
||||
- name: Setup
|
||||
|
@ -318,7 +326,7 @@ jobs:
|
|||
mysql -uroot -proot -e "CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'wordpress'; FLUSH PRIVILEGES;"
|
||||
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* TO 'wordpress'@'localhost' WITH GRANT OPTION;"
|
||||
- name: git checkout benchmarking-data
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: php/benchmarking-data
|
||||
ssh-key: ${{ secrets.BENCHMARKING_DATA_DEPLOY_KEY }}
|
||||
|
@ -355,10 +363,12 @@ jobs:
|
|||
path: ${{ github.workspace }}/benchmark/profiles
|
||||
retention-days: 30
|
||||
FREEBSD:
|
||||
if: github.repository == 'php/php-src' || github.event_name == 'pull_request'
|
||||
name: FREEBSD
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 50
|
||||
steps:
|
||||
- name: git checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
- name: FreeBSD
|
||||
uses: ./.github/actions/freebsd
|
||||
|
|
300
.github/workflows/real-time-benchmark.yml
vendored
Normal file
300
.github/workflows/real-time-benchmark.yml
vendored
Normal file
|
@ -0,0 +1,300 @@
|
|||
name: Real-time Benchmark
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 0 * * *"
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
pull_request:
|
||||
description: 'PR number that is going to be benchmarked (e.g. "1234")'
|
||||
required: true
|
||||
type: number
|
||||
jit:
|
||||
description: 'Whether JIT is benchmarked'
|
||||
required: false
|
||||
default: "0"
|
||||
type: choice
|
||||
options:
|
||||
- "0"
|
||||
- "1"
|
||||
instruction_count:
|
||||
description: 'Whether Valgrind instruction count should be measured'
|
||||
required: true
|
||||
default: "0"
|
||||
type: choice
|
||||
options:
|
||||
- "0"
|
||||
- "1"
|
||||
opcache:
|
||||
description: 'Whether opcache is enabled for the benchmarked commit'
|
||||
required: true
|
||||
default: "1"
|
||||
type: choice
|
||||
options:
|
||||
- "0"
|
||||
- "1"
|
||||
- "2"
|
||||
baseline_opcache:
|
||||
description: 'Whether opcache is enabled for the baseline commit'
|
||||
required: true
|
||||
default: "1"
|
||||
type: choice
|
||||
options:
|
||||
- "0"
|
||||
- "1"
|
||||
- "2"
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}
|
||||
cancel-in-progress: false
|
||||
jobs:
|
||||
REAL_TIME_BENCHMARK:
|
||||
name: REAL_TIME_BENCHMARK
|
||||
if: github.repository == 'php/php-src' || github.event_name == 'workflow_dispatch'
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
REPOSITORY: ${{ github.repository }}
|
||||
BRANCH: "master"
|
||||
COMMIT: ${{ github.sha }}
|
||||
BASELINE_COMMIT: "d5f6e56610c729710073350af318c4ea1b292cfe"
|
||||
ID: "master"
|
||||
OPCACHE: ${{ inputs.opcache || '1' }}
|
||||
BASELINE_OPCACHE: ${{ inputs.baseline_opcache || '2' }}
|
||||
JIT: ${{ inputs.jit || '1' }}
|
||||
INSTRUCTION_COUNT: ${{ inputs.instruction_count || '0' }}
|
||||
YEAR: ""
|
||||
steps:
|
||||
- name: Setup benchmark environment
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
YEAR="$(date '+%Y')"
|
||||
echo "YEAR=$YEAR" >> $GITHUB_ENV
|
||||
|
||||
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
||||
PR_INFO=$(gh pr view ${{ inputs.pull_request }} --json headRepositoryOwner,headRepository,headRefName,headRefOid,baseRefOid --repo ${{ github.repository }} | jq -r '.headRepositoryOwner.login, .headRepository.name, .headRefName, .headRefOid, .baseRefOid')
|
||||
|
||||
REPOSITORY="$(echo "$PR_INFO" | sed -n '1p')/$(echo "$PR_INFO" | sed -n '2p')"
|
||||
echo "REPOSITORY=$REPOSITORY" >> $GITHUB_ENV
|
||||
|
||||
BRANCH=$(echo "$PR_INFO" | sed -n '3p')
|
||||
echo "BRANCH=$BRANCH" >> $GITHUB_ENV
|
||||
|
||||
COMMIT=$(echo "$PR_INFO" | sed -n '4p')
|
||||
echo "COMMIT=$COMMIT" >> $GITHUB_ENV
|
||||
|
||||
BASELINE_COMMIT=$(echo "$PR_INFO" | sed -n '5p')
|
||||
echo "BASELINE_COMMIT=$BASELINE_COMMIT" >> $GITHUB_ENV
|
||||
|
||||
echo "ID=benchmarked" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
set -ex
|
||||
sudo apt-get update
|
||||
sudo apt-get install gpg
|
||||
|
||||
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
|
||||
gpg --no-default-keyring --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg --fingerprint
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y terraform=1.5.7-*
|
||||
- name: Checkout benchmark suite
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: 'kocsismate/php-version-benchmarks'
|
||||
ref: 'main'
|
||||
fetch-depth: 1
|
||||
path: 'php-version-benchmarks'
|
||||
- name: Checkout php-src (benchmarked version)
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: '${{ env.REPOSITORY }}'
|
||||
ref: '${{ env.COMMIT }}'
|
||||
fetch-depth: 100
|
||||
path: 'php-version-benchmarks/tmp/php_${{ env.ID }}'
|
||||
- name: Checkout php-src (baseline version)
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: '${{ env.REPOSITORY }}'
|
||||
ref: '${{ env.BASELINE_COMMIT }}'
|
||||
fetch-depth: 100
|
||||
path: 'php-version-benchmarks/tmp/php_baseline'
|
||||
- name: Setup benchmark results
|
||||
run: |
|
||||
git config --global user.name "Benchmark"
|
||||
git config --global user.email "benchmark@php.net"
|
||||
|
||||
rm -rf ./php-version-benchmarks/docs/results
|
||||
- name: Checkout benchmark data
|
||||
if: github.event_name != 'workflow_dispatch'
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: php/real-time-benchmark-data
|
||||
ssh-key: ${{ secrets.PHP_VERSION_BENCHMARK_RESULTS_DEPLOY_KEY }}
|
||||
path: 'php-version-benchmarks/docs/results'
|
||||
- name: Setup infra config
|
||||
run: |
|
||||
set -e
|
||||
|
||||
cp ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini.dist ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini
|
||||
ESCAPED_DOCKER_REGISTRY=$(printf '%s\n' "${{ secrets.PHP_VERSION_BENCHMARK_DOCKER_REGISTRY }}" | sed -e 's/[\/&]/\\&/g')
|
||||
sed -i "s/INFRA_DOCKER_REGISTRY=public.ecr.aws\/abcdefgh/INFRA_DOCKER_REGISTRY=$ESCAPED_DOCKER_REGISTRY/g" ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini
|
||||
sed -i "s/INFRA_MEASURE_INSTRUCTION_COUNT=0/INFRA_MEASURE_INSTRUCTION_COUNT=${{ env.INSTRUCTION_COUNT }}/g" ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini
|
||||
cp ./php-version-benchmarks/build/infrastructure/config/aws.tfvars.dist ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
|
||||
sed -i 's/access_key = ""/access_key = "${{ secrets.PHP_VERSION_BENCHMARK_AWS_ACCESS_KEY }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
|
||||
sed -i 's/secret_key = ""/secret_key = "${{ secrets.PHP_VERSION_BENCHMARK_AWS_SECRET_KEY }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
|
||||
sed -i 's/github_token = ""/github_token = "${{ secrets.GITHUB_TOKEN }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
|
||||
- name: Setup PHP config - baseline PHP version
|
||||
run: |
|
||||
set -e
|
||||
|
||||
BASELINE_SHORT_SHA="$(echo "${{ env.BASELINE_COMMIT }}" | cut -c1-4)"
|
||||
|
||||
cat << EOF > ./php-version-benchmarks/config/php/baseline.ini
|
||||
PHP_NAME="PHP - baseline@$BASELINE_SHORT_SHA"
|
||||
PHP_ID=php_baseline
|
||||
|
||||
PHP_REPO=https://github.com/${{ env.REPOSITORY }}.git
|
||||
PHP_BRANCH=${{ env.BRANCH }}
|
||||
PHP_COMMIT=${{ env.BASELINE_COMMIT }}
|
||||
|
||||
PHP_OPCACHE=${{ env.BASELINE_OPCACHE }}
|
||||
PHP_JIT=0
|
||||
EOF
|
||||
- name: Setup PHP config - baseline PHP version with JIT
|
||||
if: github.event_name == 'workflow_dispatch' && inputs.jit == '1'
|
||||
run: |
|
||||
set -e
|
||||
|
||||
BASELINE_SHORT_SHA="$(echo "${{ env.BASELINE_COMMIT }}" | cut -c1-4)"
|
||||
|
||||
cat << EOF > ./php-version-benchmarks/config/php/baseline_jit.ini
|
||||
PHP_NAME="PHP - baseline@$BASELINE_SHORT_SHA (JIT)"
|
||||
PHP_ID=php_baseline_jit
|
||||
|
||||
PHP_REPO=https://github.com/${{ env.REPOSITORY }}.git
|
||||
PHP_BRANCH=${{ env.BRANCH }}
|
||||
PHP_COMMIT=${{ env.BASELINE_COMMIT }}
|
||||
|
||||
PHP_OPCACHE=${{ env.BASELINE_OPCACHE }}
|
||||
PHP_JIT=${{ env.JIT }}
|
||||
EOF
|
||||
|
||||
git clone ./php-version-benchmarks/tmp/php_baseline/ ./php-version-benchmarks/tmp/php_baseline_jit
|
||||
- name: Setup PHP config - previous PHP version
|
||||
if: github.event_name != 'workflow_dispatch'
|
||||
run: |
|
||||
set -e
|
||||
|
||||
DATABASE="./php-version-benchmarks/docs/results/${{ env.YEAR }}/database.tsv"
|
||||
if [ -f "$DATABASE" ]; then
|
||||
LAST_RESULT_SHA="$(tail -n 2 "$DATABASE" | head -n 1 | cut -f 6)"
|
||||
else
|
||||
YESTERDAY="$(date -d "-2 day 23:59:59" '+%Y-%m-%d %H:%M:%S')"
|
||||
LAST_RESULT_SHA="$(cd ./php-version-benchmarks/tmp/php_${{ env.ID }}/ && git --no-pager log --until="$YESTERDAY" -n 1 --pretty='%H')"
|
||||
fi
|
||||
|
||||
cat << EOF > ./php-version-benchmarks/config/php/previous.ini
|
||||
PHP_NAME="PHP - previous ${{ env.BRANCH }}"
|
||||
PHP_ID=php_previous
|
||||
|
||||
PHP_REPO=https://github.com/${{ env.REPOSITORY }}.git
|
||||
PHP_BRANCH=${{ env.BRANCH }}
|
||||
PHP_COMMIT=$LAST_RESULT_SHA
|
||||
|
||||
PHP_OPCACHE=1
|
||||
PHP_JIT=0
|
||||
EOF
|
||||
- name: Setup PHP config - benchmarked PHP version
|
||||
run: |
|
||||
set -e
|
||||
|
||||
cat << EOF > ./php-version-benchmarks/config/php/this.ini
|
||||
PHP_NAME="PHP - ${{ env.BRANCH }}"
|
||||
PHP_ID=php_${{ env.ID }}
|
||||
|
||||
PHP_REPO=https://github.com/${{ env.REPOSITORY }}.git
|
||||
PHP_BRANCH=${{ env.BRANCH }}
|
||||
PHP_COMMIT=${{ env.COMMIT }}
|
||||
|
||||
PHP_OPCACHE=${{ env.OPCACHE }}
|
||||
PHP_JIT=0
|
||||
EOF
|
||||
- name: Setup PHP config - benchmarked PHP version with JIT
|
||||
if: env.JIT == '1'
|
||||
run: |
|
||||
set -e
|
||||
|
||||
cat << EOF > ./php-version-benchmarks/config/php/this_jit.ini
|
||||
PHP_NAME="PHP - ${{ env.BRANCH }} (JIT)"
|
||||
PHP_ID=php_${{ env.ID }}_jit
|
||||
|
||||
PHP_REPO=https://github.com/${{ env.REPOSITORY }}.git
|
||||
PHP_BRANCH=${{ env.BRANCH }}
|
||||
PHP_COMMIT=${{ env.COMMIT }}
|
||||
|
||||
PHP_OPCACHE=${{ env.OPCACHE }}
|
||||
PHP_JIT=${{ env.JIT }}
|
||||
EOF
|
||||
|
||||
git clone ./php-version-benchmarks/tmp/php_${{ env.ID }}/ ./php-version-benchmarks/tmp/php_${{ env.ID }}_jit
|
||||
- name: Setup test config
|
||||
run: |
|
||||
set -e
|
||||
|
||||
cp ./php-version-benchmarks/config/test/1_laravel.ini.dist ./php-version-benchmarks/config/test/1_laravel.ini
|
||||
cp ./php-version-benchmarks/config/test/2_symfony_main.ini.dist ./php-version-benchmarks/config/test/2_symfony_main.ini
|
||||
cp ./php-version-benchmarks/config/test/4_wordpress.ini.dist ./php-version-benchmarks/config/test/4_wordpress.ini
|
||||
cp ./php-version-benchmarks/config/test/5_bench.php.ini.dist ./php-version-benchmarks/config/test/5_bench.php.ini
|
||||
cp ./php-version-benchmarks/config/test/6_micro_bench.php.ini.dist ./php-version-benchmarks/config/test/6_micro_bench.php.ini
|
||||
- name: Run benchmark
|
||||
run: ./php-version-benchmarks/benchmark.sh run aws
|
||||
- name: Store results
|
||||
if: github.repository == 'php/php-src' && github.event_name != 'workflow_dispatch'
|
||||
run: |
|
||||
set -ex
|
||||
|
||||
cd ./php-version-benchmarks/docs/results
|
||||
git pull --autostash
|
||||
if [ -e ".git/MERGE_HEAD" ]; then
|
||||
echo "Merging, can't proceed"
|
||||
exit 1
|
||||
fi
|
||||
git add .
|
||||
if git diff --cached --quiet; then
|
||||
exit 1
|
||||
fi
|
||||
git commit -m "Add result for ${{ github.repository }}@${{ github.sha }}"
|
||||
git push
|
||||
- name: Upload artifact
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: results
|
||||
path: ./php-version-benchmarks/docs/results/${{ env.YEAR }}
|
||||
retention-days: 30
|
||||
- name: Comment results
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
cd ./php-version-benchmarks/tmp/php_${{ env.ID }}
|
||||
NEWEST_RESULT_DIRECTORY=$(ls -td ${{ github.workspace }}/php-version-benchmarks/docs/results/${{ env.YEAR }}/*/ | head -1)
|
||||
gh pr comment ${{ inputs.pull_request }} --body-file "${NEWEST_RESULT_DIRECTORY}result.md" --repo ${{ github.repository }}
|
||||
- name: Cleanup
|
||||
if: always()
|
||||
run: |
|
||||
set -ex
|
||||
|
||||
rm -rf ./php-version-benchmarks/tmp/
|
||||
rm -f ./php-version-benchmarks/build/infrastructure/config/*.tfvars
|
||||
rm -rf ./php-version-benchmarks/build/infrastructure/aws/.terraform/
|
||||
rm -f ./php-version-benchmarks/build/infrastructure/aws/.terraform.lock.hcl
|
||||
rm -f ./php-version-benchmarks/build/infrastructure/aws/aws.tfplan
|
||||
rm -f ./php-version-benchmarks/build/infrastructure/aws/terraform.tfstate
|
||||
rm -f ./php-version-benchmarks/build/infrastructure/aws/terraform.tfstate.backup
|
||||
rm -f ./php-version-benchmarks/config/infra/aws/*.ini
|
13
.github/workflows/root.yml
vendored
13
.github/workflows/root.yml
vendored
|
@ -13,7 +13,7 @@ jobs:
|
|||
outputs:
|
||||
branches: ${{ steps.set-matrix.outputs.branches }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
# Set fetch-depth to 0 to clone the full repository
|
||||
# including all branches. This is required to find
|
||||
|
@ -48,17 +48,20 @@ jobs:
|
|||
with:
|
||||
asan_ubuntu_version: ${{
|
||||
(((matrix.branch.version[0] == 8 && matrix.branch.version[1] >= 5) || matrix.branch.version[0] >= 9) && '24.04')
|
||||
|| '20.04' }}
|
||||
|| '22.04' }}
|
||||
branch: ${{ matrix.branch.ref }}
|
||||
community_verify_type_inference: ${{ (matrix.branch.version[0] == 8 && matrix.branch.version[1] >= 4) || matrix.branch.version[0] >= 9 }}
|
||||
libmysqlclient_with_mysqli: ${{ (matrix.branch.version[0] == 8 && matrix.branch.version[1] == 1) }}
|
||||
run_alpine: ${{ (matrix.branch.version[0] == 8 && matrix.branch.version[1] >= 4) || matrix.branch.version[0] >= 9 }}
|
||||
run_linux_ppc64: ${{ (matrix.branch.version[0] == 8 && matrix.branch.version[1] >= 4) || matrix.branch.version[0] >= 9 }}
|
||||
run_macos_arm64: ${{ (matrix.branch.version[0] == 8 && matrix.branch.version[1] >= 4) || matrix.branch.version[0] >= 9 }}
|
||||
run_freebsd_zts: ${{ (matrix.branch.version[0] == 8 && matrix.branch.version[1] >= 3) || matrix.branch.version[0] >= 9 }}
|
||||
ubuntu_version: ${{
|
||||
(((matrix.branch.version[0] == 8 && matrix.branch.version[1] >= 5) || matrix.branch.version[0] >= 9) && '24.04')
|
||||
|| ((matrix.branch.version[0] == 8 && matrix.branch.version[1] >= 3) && '22.04')
|
||||
|| '20.04' }}
|
||||
windows_version: ${{ ((matrix.branch.version[0] == 8 && matrix.branch.version[1] >= 4) || matrix.branch.version[0] >= 9) && '2022' || '2019' }}
|
||||
|| '22.04' }}
|
||||
windows_version: '2022'
|
||||
vs_crt_version: ${{ ((matrix.branch.version[0] == 8 && matrix.branch.version[1] >= 4) && 'vs17') || 'vs16' }}
|
||||
skip_laravel: ${{ matrix.branch.version[0] == 8 && matrix.branch.version[1] == 1 }}
|
||||
skip_symfony: ${{ matrix.branch.version[0] == 8 && matrix.branch.version[1] == 1 }}
|
||||
skip_wordpress: ${{ matrix.branch.version[0] == 8 && matrix.branch.version[1] == 1 }}
|
||||
secrets: inherit
|
||||
|
|
14
.gitignore
vendored
14
.gitignore
vendored
|
@ -29,6 +29,9 @@
|
|||
# Libtool library files generated during build process
|
||||
*.la
|
||||
|
||||
# Mac shared library files generated during build process
|
||||
*.dylib
|
||||
|
||||
# Directories created by Libtool for storing generated library files
|
||||
.libs/
|
||||
|
||||
|
@ -128,6 +131,7 @@ config.h.in
|
|||
/sapi/cgi/php-cgi
|
||||
/sapi/fpm/php-fpm
|
||||
/sapi/phpdbg/phpdbg
|
||||
/sapi/fuzzer/php-fuzz-*
|
||||
/scripts/php-config
|
||||
/scripts/phpize
|
||||
php
|
||||
|
@ -234,6 +238,7 @@ php
|
|||
**/tests/**/*.exp
|
||||
**/tests/**/*.log
|
||||
**/tests/**/*.sh
|
||||
**/tests/**/*.stdin
|
||||
|
||||
# Generated by some test cases
|
||||
**/tests/**/*.db
|
||||
|
@ -290,6 +295,13 @@ tmp-php.ini
|
|||
/junit.out.xml
|
||||
/.ccache/
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Editor configuration directories
|
||||
# ------------------------------------------------------------------------------
|
||||
/.idea/
|
||||
/.vscode/
|
||||
/.zed/
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Additional test build files
|
||||
# ------------------------------------------------------------------------------
|
||||
|
@ -302,6 +314,6 @@ tmp-php.ini
|
|||
!/ext/fileinfo/libmagic/config.h
|
||||
!/ext/fileinfo/libmagic.patch
|
||||
!/ext/fileinfo/magicdata.patch
|
||||
!/ext/dom/lexbor/patches/*.patch
|
||||
!/ext/lexbor/patches/*.patch
|
||||
!/ext/pcre/pcre2lib/config.h
|
||||
!/win32/build/Makefile
|
||||
|
|
|
@ -32,6 +32,12 @@ had several contributions accepted, commit privileges are often quickly granted.
|
|||
PHP welcomes pull requests to [add tests](#writing-tests), fix bugs and to
|
||||
implement RFCs. Please be sure to include tests as appropriate!
|
||||
|
||||
By submitting a pull request, you certify that you have the necessary rights
|
||||
to submit the work, that the work does not violate any third-party rights
|
||||
(including those of your employer, if applicable), and that you license your
|
||||
contribution under the PHP License or under another license if explicitly
|
||||
accepted by the PHP project maintainers.
|
||||
|
||||
If you are fixing a bug, then please submit your PR against the lowest actively
|
||||
supported branch of PHP that the bug affects (only green branches on
|
||||
[the supported version page](https://www.php.net/supported-versions.php) are
|
||||
|
@ -350,9 +356,10 @@ Currently, we have the following branches in use:
|
|||
|
||||
| Branch | |
|
||||
| --------- | --------- |
|
||||
| master | Active development branch for PHP 8.4, which is open for backwards incompatible changes and major internal API changes. |
|
||||
| master | Active development branch for PHP 8.5, which is open for backwards incompatible changes and major internal API changes. |
|
||||
| PHP-8.4 | Is used to release the PHP 8.4.x series. This is a current stable version and is open for bugfixes only. |
|
||||
| PHP-8.3 | Is used to release the PHP 8.3.x series. This is a current stable version and is open for bugfixes only. |
|
||||
| PHP-8.2 | Is used to release the PHP 8.2.x series. This is a current stable version and is open for bugfixes only. |
|
||||
| PHP-8.2 | Is used to release the PHP 8.2.x series. This is an old stable version and is open for security fixes only. |
|
||||
| PHP-8.1 | Is used to release the PHP 8.1.x series. This is an old stable version and is open for security fixes only. |
|
||||
| PHP-8.0 | This branch is closed. |
|
||||
| PHP-7.4 | This branch is closed. |
|
||||
|
|
33
EXTENSIONS
33
EXTENSIONS
|
@ -170,56 +170,63 @@ EXTENSION: dom
|
|||
PRIMARY MAINTAINER: Christian Stocker <chregu@php.net> (2003 - 2011)
|
||||
Rob Richards <rrichards@php.net> (2003 - 2012)
|
||||
Marcus Börger <helly@php.net> (2003 - 2006)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2024)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2025)
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
SINCE: 5.0
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: simplexml
|
||||
PRIMARY MAINTAINER: Marcus Börger <helly@php.net> (2003 - 2008)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2024)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2025)
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
SINCE: 5.0
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: soap
|
||||
PRIMARY MAINTAINER: Dmitry Stogov <dmitry@php.net> (2004 - 2018)
|
||||
Niels Dossche <nielsdos@php.net> (2024 - 2024)
|
||||
Niels Dossche <nielsdos@php.net> (2024 - 2025)
|
||||
MAINTENANCE: Odd fixes
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: xml
|
||||
PRIMARY MAINTAINER: Thies C. Arntzen <thies@thieso.net> (1999 - 2002)
|
||||
Rob Richards <rrichards@php.net> (2003 - 2013)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2024)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2025)
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: lexbor
|
||||
PRIMARY MAINTAINER: Niels Dossche <nielsdos@php.net> (2025 - 2025)
|
||||
Mate Kocsis <kocsismate@php.net> (2025 - 2025)
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
SINCE: 8.5
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: libxml
|
||||
PRIMARY MAINTAINER: Rob Richards <rrichards@php.net> (2003 - 2009)
|
||||
Christian Stocker <chregu@php.net> (2004 - 2011)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2024)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2025)
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: xmlreader
|
||||
PRIMARY MAINTAINER: Rob Richards <rrichards@php.net> (2004 - 2010)
|
||||
Christian Stocker <chregu@php.net> (2004 - 2004)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2024)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2025)
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: xmlwriter
|
||||
PRIMARY MAINTAINER: Rob Richards <rrichards@php.net> (2004 - 2010)
|
||||
Pierre-Alain Joye <pajoye@php.net> (2005-2009)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2024)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2025)
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: xsl
|
||||
PRIMARY MAINTAINER: Christian Stocker <chregu@php.net> (2003 - 2011)
|
||||
Rob Richards <rrichards@php.net> (2003 - 2010)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2024)
|
||||
Niels Dossche <nielsdos@php.net> (2023 - 2025)
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
SINCE: 5.0
|
||||
|
@ -231,6 +238,7 @@ SINCE: 5.0
|
|||
-------------------------------------------------------------------------------
|
||||
EXTENSION: bcmath
|
||||
PRIMARY MAINTAINER: Andi Gutmans <andi@php.net> (2000 - 2004)
|
||||
Saki Takamachi <saki@php.net> (2024 - 2025)
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
|
@ -412,7 +420,7 @@ STATUS: Working
|
|||
-------------------------------------------------------------------------------
|
||||
EXTENSION: random
|
||||
PRIMARY MAINTAINER Go Kudo <zeriyoshi@php.net> (2022 - 2024)
|
||||
Tim Düsterhus <timwolla@php.net> (2022 - 2024)
|
||||
Tim Düsterhus <timwolla@php.net> (2022 - 2025)
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
SINCE: 8.2.0
|
||||
|
@ -426,6 +434,7 @@ EXTENSION: reflection
|
|||
PRIMARY MAINTAINER: Marcus Börger <helly@php.net> (2003 - 2009)
|
||||
Johannes Schlüter <johannes@php.net> (2006 - 2014)
|
||||
Nikita Popov <nikic@php.net> (2019 - 2020)
|
||||
Daniel Scherzer <daniel.e.scherzer@gmail.com> (2025 - 2025)
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
|
@ -495,6 +504,12 @@ PRIMARY MAINTAINER: Andrei Zmievski <andrei@php.net> (2002 - 2002)
|
|||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: uri
|
||||
PRIMARY MAINTAINER Máté Kocsis <kocsismate@php.net> (2025 - 2025)
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
SINCE: 8.5.0
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: zip
|
||||
PRIMARY MAINTAINER: Pierre-Alain Joye <pajoye@php.net> (2006 - 2011)
|
||||
Remi Collet <remi@php.net> (2013-2020)
|
||||
|
|
|
@ -17,8 +17,9 @@
|
|||
17. ext/mbstring/ucgendat portions based on the ucgendat.c from the OpenLDAP
|
||||
18. avifinfo (ext/standard/libavifinfo) see ext/standard/libavifinfo/LICENSE
|
||||
19. xxHash (ext/hash/xxhash)
|
||||
20. Lexbor (ext/dom/lexbor/lexbor) see ext/dom/lexbor/LICENSE
|
||||
20. Lexbor (ext/lexbor/lexbor) see ext/lexbor/LICENSE
|
||||
21. Portions of libcperciva (ext/hash/hash_sha_{ni,sse2}.c) see the header in the source file
|
||||
22. uriparser (ext/uri/uriparser) see ext/uri/uriparser/COPYING
|
||||
|
||||
3. pcre2lib (ext/pcre)
|
||||
|
||||
|
|
62
README.md
62
README.md
|
@ -15,7 +15,7 @@ blog to the most popular websites in the world. PHP is distributed under the
|
|||
[PHP License v3.01](LICENSE).
|
||||
|
||||
[](https://github.com/php/php-src/actions/workflows/push.yml)
|
||||
[](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:php)
|
||||
[](https://issues.oss-fuzz.com/issues?q=project:php)
|
||||
|
||||
## Documentation
|
||||
|
||||
|
@ -42,28 +42,50 @@ a default build, you will additionally need libxml2 and libsqlite3.
|
|||
|
||||
On Ubuntu, you can install these using:
|
||||
|
||||
sudo apt install -y pkg-config build-essential autoconf bison re2c \
|
||||
libxml2-dev libsqlite3-dev
|
||||
```shell
|
||||
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
|
||||
```
|
||||
|
||||
On Fedora, you can install these using:
|
||||
|
||||
sudo dnf install re2c bison autoconf make libtool ccache libxml2-devel sqlite-devel
|
||||
```shell
|
||||
sudo dnf install re2c bison autoconf make libtool ccache libxml2-devel sqlite-devel
|
||||
```
|
||||
|
||||
On MacOS, you can install these using `brew`:
|
||||
|
||||
```shell
|
||||
brew install autoconf bison re2c iconv libxml2 sqlite
|
||||
```
|
||||
|
||||
or with `MacPorts`:
|
||||
|
||||
```shell
|
||||
sudo port install autoconf bison re2c libiconv libxml2 sqlite3
|
||||
```
|
||||
|
||||
Generate configure:
|
||||
|
||||
./buildconf
|
||||
```shell
|
||||
./buildconf
|
||||
```
|
||||
|
||||
Configure your build. `--enable-debug` is recommended for development, see
|
||||
`./configure --help` for a full list of options.
|
||||
|
||||
# For development
|
||||
./configure --enable-debug
|
||||
# For production
|
||||
./configure
|
||||
```shell
|
||||
# For development
|
||||
./configure --enable-debug
|
||||
# For production
|
||||
./configure
|
||||
```
|
||||
|
||||
Build PHP. To speed up the build, specify the maximum number of jobs using `-j`:
|
||||
Build PHP. To speed up the build, specify the maximum number of jobs using the
|
||||
`-j` argument:
|
||||
|
||||
make -j4
|
||||
```shell
|
||||
make -j4
|
||||
```
|
||||
|
||||
The number of jobs should usually match the number of available cores, which
|
||||
can be determined using `nproc`.
|
||||
|
@ -74,13 +96,21 @@ PHP ships with an extensive test suite, the command `make test` is used after
|
|||
successful compilation of the sources to run this test suite.
|
||||
|
||||
It is possible to run tests using multiple cores by setting `-jN` in
|
||||
`TEST_PHP_ARGS`:
|
||||
`TEST_PHP_ARGS` or `TESTS`:
|
||||
|
||||
make TEST_PHP_ARGS=-j4 test
|
||||
```shell
|
||||
make TEST_PHP_ARGS=-j4 test
|
||||
```
|
||||
|
||||
Shall run `make test` with a maximum of 4 concurrent jobs: Generally the maximum
|
||||
number of jobs should not exceed the number of cores available.
|
||||
|
||||
Use the `TEST_PHP_ARGS` or `TESTS` variable to test only specific directories:
|
||||
|
||||
```shell
|
||||
make TESTS=tests/lang/ test
|
||||
```
|
||||
|
||||
The [qa.php.net](https://qa.php.net) site provides more detailed info about
|
||||
testing and quality assurance.
|
||||
|
||||
|
@ -88,9 +118,11 @@ testing and quality assurance.
|
|||
|
||||
After a successful build (and test), PHP may be installed with:
|
||||
|
||||
make install
|
||||
```shell
|
||||
make install
|
||||
```
|
||||
|
||||
Depending on your permissions and prefix, `make install` may need super user
|
||||
Depending on your permissions and prefix, `make install` may need superuser
|
||||
permissions.
|
||||
|
||||
## PHP extensions
|
||||
|
|
|
@ -778,7 +778,7 @@ TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void)
|
|||
return 0;
|
||||
#elif defined(__x86_64__) && defined(__GNUC__) && !defined(__FreeBSD__) && \
|
||||
!defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__MUSL__) && \
|
||||
!defined(__HAIKU__)
|
||||
!defined(__HAIKU__) && !defined(__CYGWIN__)
|
||||
size_t ret;
|
||||
|
||||
asm ("movq _tsrm_ls_cache@gottpoff(%%rip),%0"
|
||||
|
@ -786,7 +786,7 @@ TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void)
|
|||
return ret;
|
||||
#elif defined(__i386__) && defined(__GNUC__) && !defined(__FreeBSD__) && \
|
||||
!defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__MUSL__) && \
|
||||
!defined(__HAIKU__)
|
||||
!defined(__HAIKU__) && !defined(__CYGWIN__)
|
||||
size_t ret;
|
||||
|
||||
asm ("leal _tsrm_ls_cache@ntpoff,%0"
|
||||
|
|
|
@ -636,7 +636,7 @@ TSRM_API int shmget(key_t key, size_t size, int flags)
|
|||
{/*{{{*/
|
||||
shm_pair *shm;
|
||||
char shm_segment[sizeof(SEGMENT_PREFIX INT_MIN_AS_STRING)];
|
||||
HANDLE shm_handle = NULL, info_handle = NULL;
|
||||
HANDLE shm_handle = NULL;
|
||||
BOOL created = FALSE;
|
||||
|
||||
if (key != IPC_PRIVATE) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
PHP 8.4 INTERNALS UPGRADE NOTES
|
||||
PHP 8.5 INTERNALS UPGRADE NOTES
|
||||
|
||||
1. Internal API changes
|
||||
|
||||
|
@ -14,413 +14,158 @@ PHP 8.4 INTERNALS UPGRADE NOTES
|
|||
1. Internal API changes
|
||||
========================
|
||||
|
||||
* zend_register_module_ex() now takes an additional int module_type argument.
|
||||
This function will also assign the module number and type, there is no need
|
||||
to do this at the call site anymore. Writing the handle should happen after
|
||||
successful registration.
|
||||
- Core
|
||||
. PG(arg_separator).input and PG(arg_separator).output are now `zend_string*`
|
||||
instead of `char*`.
|
||||
. DL_LOAD now doesn't use RTLD_DEEPBIND deepbind anymore on platforms
|
||||
where dlmopen with LM_ID_NEWLM is available:
|
||||
this means shared library symbol isolation (if needed) must be enabled on
|
||||
the user side when requiring libphp.so, by using dlmopen with LM_ID_NEWLM
|
||||
instead of dlopen.
|
||||
RTLD_DEEPBIND is still enabled when the Apache SAPI is in use.
|
||||
. The ptr field of the php_stream_notifier struct is now a void* instead
|
||||
of a zval. If the zval was used to store IS_PTR values only, the
|
||||
extra layer of indirection can be removed. In other cases a zval can
|
||||
be heap-allocated and stored in the pointer as a minimal change to keep
|
||||
compatibility.
|
||||
|
||||
* ZPP now accepts a F or Z_PARAM_FUNC_NO_TRAMPOLINE_FREE type check.
|
||||
This is identical to the 'f' or Z_PARAM_FUNC type check, except the FCC is
|
||||
always initialized because it doesn't free trampolines.
|
||||
Trampolines MUST be freed using zend_release_fcall_info_cache() or consumed.
|
||||
Z_PARAM_FUNC_EX2 was added as well with the same arguments as Z_PARAM_FUNC_EX
|
||||
plus an additional argument free_trampoline.
|
||||
- Hash
|
||||
. Hash functions now use proper hash_spec_result enum for return values
|
||||
instead of using SUCCESS and FAILURE.
|
||||
|
||||
* The zend_object_iterator_funcs valid member has changed its signature from
|
||||
int(*)(zend_object_iterator *) to zend_result(*)(zend_object_iterator *) to
|
||||
be more in line with what callbacks are returning.
|
||||
- Zend
|
||||
. Added zend_safe_assign_to_variable_noref() function to safely assign
|
||||
a value to a non-reference zval.
|
||||
. Added zval_ptr_safe_dtor() to safely destroy a zval when a destructor
|
||||
could interfere.
|
||||
. zend_get_callable_name() now returns the name of the underlying function
|
||||
for fake closures.
|
||||
. Added smart_string_append_printf() matching smart_str_append_printf() for
|
||||
char* instead of zend_string*-based smart strings.
|
||||
. Added php_build_provider() to retrieve the value of PHP_BUILD_PROVIDER at
|
||||
runtime.
|
||||
. Removed the cache_slot argument of zend_check_user_type_slow() because
|
||||
now it only relies on the CE cache.
|
||||
. Added ZEND_NONSTRING attribute macro for character arrays that do not
|
||||
represent strings. This allows to silence the GCC 15.x
|
||||
`-Wunterminated-string-initialization` warning.
|
||||
. Added the zend_update_exception_properties() function for instantiating
|
||||
Exception child classes. It updates the $message, $code, and $previous
|
||||
properties.
|
||||
. zend_exception_get_default() was removed, use zend_ce_exception directly.
|
||||
. zend_get_error_exception() was removed, use zend_ce_error_exception
|
||||
directly.
|
||||
. ZEND_IS_XDIGIT() macro was removed because it was unused and its name
|
||||
did not match its actual behavior.
|
||||
. The following zend_string-related legacy aliases were removed:
|
||||
* IS_INTERNED() - use ZSTR_IS_INTERNED()
|
||||
* STR_EMPTY_ALLOC() - use ZSTR_EMPTY_ALLOC()
|
||||
* _STR_HEADER_SIZE - use _ZSTR_HEADER_SIZE
|
||||
* STR_ALLOCA_ALLOC() - use ZSTR_ALLOCA_ALLOC()
|
||||
* STR_ALLOCA_INIT() - use ZSTR_ALLOCA_INIT()
|
||||
* STR_ALLOCA_FREE() - use ZSTR_ALLOCA_FREE()
|
||||
. zend_register_constant() now returns a pointer to the added constant
|
||||
on success and NULL on failure instead of SUCCESS/FAILURE.
|
||||
The specialized registration methods that previously had void returns
|
||||
also return pointers to the added constants:
|
||||
* zend_register_bool_constant()
|
||||
* zend_register_null_constant()
|
||||
* zend_register_long_constant()
|
||||
* zend_register_double_constant()
|
||||
* zend_register_string_constant()
|
||||
* zend_register_stringl_constant()
|
||||
. EG(fake_scope) now is a _const_ zend_class_entry*.
|
||||
. zend_begin_record_errors() or EG(record_errors)=true cause errors to be
|
||||
delayed. Before, errors would be recorded but not delayed.
|
||||
. zend_mm_refresh_key_child() must be called on any zend_mm_heap inherited
|
||||
from the parent process after a fork().
|
||||
. HASH_KEY_IS_* constants have been moved in the zend_hash_key_type enum.
|
||||
|
||||
* The backwards compatibility headers ext/standard/{php_lcg.h,php_mt_rand.h,
|
||||
php_rand.h,php_random.h} have been removed. Include ext/random/php_random.h
|
||||
directly.
|
||||
|
||||
* The zend_*printf family of functions now supports the "%S" modifier to print
|
||||
out zend_string*. This won't cut off the string if it embeds a NUL byte.
|
||||
|
||||
* The inet_aton() and win32/inet.h have been removed. Use platform-agnostic
|
||||
inet_pton() from arpa/inet.h or ws2tcpip.h on Windows.
|
||||
|
||||
* zend_mm_set_custom_debug_handlers() has been removed from ZendMM, use
|
||||
zend_mm_set_custom_handlers() instead which now supports DEBUG builds
|
||||
|
||||
* zend_mm_set_custom_handlers() has changed its signature from
|
||||
void()(zend_mm_heap *heap,
|
||||
void* (*_malloc)(size_t),
|
||||
void (*_free)(void*),
|
||||
void* (*_realloc)(void*, size_t))
|
||||
to
|
||||
void()(zend_mm_heap *heap,
|
||||
void* (*_malloc)(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
|
||||
void (*_free)(void* ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
|
||||
void* (*_realloc)(void*, size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC))
|
||||
|
||||
* zend_mm_get_custom_handlers() has changed its signature from
|
||||
void()(zend_mm_heap *heap,
|
||||
void* (**_malloc)(size_t),
|
||||
void (**_free)(void*),
|
||||
void* (**_realloc)(void*, size_t))
|
||||
to
|
||||
void()(zend_mm_heap *heap,
|
||||
void* (**_malloc)(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
|
||||
void (**_free)(void* ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC),
|
||||
void* (**_realloc)(void*, size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC))
|
||||
|
||||
* Added gc and shutdown custom handlers, settable via
|
||||
zend_mm_set_custom_handlers_ex()
|
||||
|
||||
* __zend_malloc() has changed their signature from
|
||||
void(*)(size_t) to
|
||||
void(*)(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
|
||||
|
||||
* __zend_calloc() has changed their signature from
|
||||
void(*)(size_t, size_t) to
|
||||
void(*)(size_t, size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
|
||||
|
||||
* __zend_realloc() has changed their signature from
|
||||
void(*)(void *, size_t) to
|
||||
void(*)(void *, size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
|
||||
|
||||
* zend_observer_remove_begin_handler() and zend_observer_remove_end_handler()
|
||||
got each a new parameter returning an observer which must be called, if the
|
||||
removal happened during observer execution.
|
||||
|
||||
* zend_get_internal_function_extension_handle[s]() must now be used over
|
||||
zend_get_op_array_extension_handle[s]() when registering run_time_cache slots
|
||||
for internal functions. If you need a cache slot for both internal and user
|
||||
functions, you may obtain a slot for each through the corresponding function.
|
||||
|
||||
* zend_is_true now returns bool rather than int. Note that on PHP 8 this has
|
||||
always returned 0 or 1, so conversion should be trivial.
|
||||
|
||||
* Added zend_hash_get_current_pos_ex() variant of zend_hash_get_current_pos().
|
||||
|
||||
* Renamed rebuild_object_properties() to rebuild_object_properties_internal().
|
||||
This function should not be used outside of zend_std_get_properties_ex() and
|
||||
zend_std_get_properties(). Use zend_std_get_properties_ex() or
|
||||
zend_std_get_properties() instead.
|
||||
|
||||
* zend_object.properties must not be accessed directly. Use
|
||||
zend_std_get_properties_ex() instead.
|
||||
|
||||
* Removed IS_STATIC_VAR_UNINITIALIZED constant. Check for IS_NULL in the
|
||||
static_variables array instead.
|
||||
|
||||
* Removed ZEND_DIM_ALTERNATIVE_SYNTAX constant. This syntax no longer has a
|
||||
specialized error message.
|
||||
- standard
|
||||
. ext/standard/php_smart_string.h and ext/standard/php_smart_string_public.h
|
||||
were removed. Use the corresponding headers in Zend/ instead.
|
||||
|
||||
========================
|
||||
2. Build system changes
|
||||
========================
|
||||
|
||||
a. Abstract
|
||||
- The configure option --with-imap has been removed.
|
||||
- The configure option --with-mhash emits deprecation warning.
|
||||
- The configure option --with-pdo-oci has been removed.
|
||||
- The configure option --with-pspell has been removed.
|
||||
- Symbol SIZEOF_SHORT removed (size of 2 on 32-bit and 64-bit platforms).
|
||||
- Symbol DBA_CDB_MAKE removed in ext/dba.
|
||||
- Symbol HAVE_LIBM has been removed.
|
||||
- Symbol HAVE_INET_ATON has been removed.
|
||||
- Symbol HAVE_SIGSETJMP has been removed.
|
||||
- The Zend/zend_istdiostream.h header has been removed.
|
||||
- Abstract
|
||||
. Preprocessor macro SIZEOF_PTRDIFF_T has been removed.
|
||||
. Preprocessor macro SIZEOF_INTMAX_T has been removed.
|
||||
|
||||
b. Unix build system changes
|
||||
- The configure option --with-imap-ssl has been removed.
|
||||
- The configure option --with-oci8 has been removed.
|
||||
- The configure option --with-zlib-dir has been removed.
|
||||
- The configure option --with-kerberos has been removed.
|
||||
- The configure option --with-openssl-dir has been removed. SSL support in
|
||||
ext/ftp and ext/mysqlnd is enabled implicitly, when building with
|
||||
ext/openssl (--with-openssl), or explicitly by using new configure options
|
||||
--with-ftp-ssl and --with-mysqlnd-ssl.
|
||||
- New configure option --with-openssl-legacy-provider to enable OpenSSL
|
||||
legacy provider.
|
||||
- New configure option --with-openssl-argon2 to enable PASSWORD_ARGON2
|
||||
from OpenSSL 3.2
|
||||
- COOKIE_IO_FUNCTIONS_T symbol has been removed (use cookie_io_functions_t).
|
||||
- HAVE_SOCKADDR_UN_SUN_LEN symbol renamed to HAVE_STRUCT_SOCKADDR_UN_SUN_LEN.
|
||||
- HAVE_UTSNAME_DOMAINNAME symbol renamed to HAVE_STRUCT_UTSNAME_DOMAINNAME.
|
||||
- PHP_CHECK_IN_ADDR_T Autoconf macro and 'in_addr_t' fallback definition to
|
||||
'u_int' removed (use AC_CHECK_TYPES Autoconf macro instead).
|
||||
- HAVE_ODBC2 symbol has been removed in ext/odbc.
|
||||
- Removed linking with obsolete dnet_stub library in ext/pdo_dblib.
|
||||
- Removed checking and linking with obsolete libbind for some functions.
|
||||
- Symbol HAVE_JSON has been removed (ext/json is always available since PHP
|
||||
8.0).
|
||||
- Symbol DARWIN has been removed (use __APPLE__ to target Darwin systems).
|
||||
- Symbol MISSING_FCLOSE_DECL and Autoconf macro PHP_MISSING_FCLOSE_DECL were
|
||||
removed.
|
||||
- Symbol HAVE_BSD_ICONV has been removed.
|
||||
- Symbol ZEND_FIBER_ASM has been removed.
|
||||
- Symbols HAVE_DLOPEN and HAVE_DLSYM have been removed.
|
||||
- Symbol HAVE_MYSQL has been removed.
|
||||
- Symbol HAVE_PDO_SQLITELIB has been removed.
|
||||
- Symbol HAVE_WAITPID has been removed.
|
||||
- Symbol HAVE_LIBPQ has been removed.
|
||||
- Symbols HAVE_LIBRT and HAVE_TIMER_CREATE removed.
|
||||
- Symbols PHP_FPM_SYSTEMD, PHP_FPM_USER, and PHP_FPM_GROUP removed.
|
||||
- Symbol PTHREADS has been removed.
|
||||
- Symbol HAVE_STRPTIME_DECL_FAILS has been removed (use HAVE_DECL_STRPTIME).
|
||||
- Symbol HAVE_PHPDBG has been removed.
|
||||
- Symbols PHP_HAVE_AVX512_SUPPORTS and PHP_HAVE_AVX512_VBMI_SUPPORTS are now
|
||||
either defined to 1 or undefined.
|
||||
- Symbol HAVE_LIBCRYPT has been removed.
|
||||
- Autoconf macro PHP_DEFINE (atomic includes) removed (use AC_DEFINE and
|
||||
config.h).
|
||||
- Autoconf macro PHP_WITH_SHARED has been removed (use PHP_ARG_WITH).
|
||||
- Autoconf macro PHP_STRUCT_FLOCK has been removed (use AC_CHECK_TYPES).
|
||||
- Autoconf macro PHP_SOCKADDR_CHECKS has been removed (use AC_CHECK_TYPES and
|
||||
AC_CHECK_MEMBERS).
|
||||
- Autoconf macro PHP_CHECK_GCC_ARG has been removed since PHP 8.0 (use
|
||||
AX_CHECK_COMPILE_FLAG).
|
||||
- Autoconf macro PHP_PROG_RE2C got a new 2nd argument to define common
|
||||
default re2c command-line options substituted to the Makefile RE2C_FLAGS
|
||||
variable.
|
||||
- Autoconf macros PHP_CHECK_BUILTIN_* have been removed in favor of
|
||||
PHP_CHECK_BUILTIN and all PHP_HAVE_BUILTIN_* symbols changed to be either
|
||||
undefined or defined to 1 whether compiler supports the builtin.
|
||||
- Added php-config --lib-dir and --lib-embed options for PHP embed SAPI.
|
||||
- PDO extensions in php-src don't have the include flag -I$pdo_cv_inc_path
|
||||
directory anymore.
|
||||
- Autoconf macro PHP_SETUP_OPENSSL doesn't accept the 3rd argument anymore.
|
||||
- Autoconf macro PHP_EVAL_LIBLINE got a new 3rd argument to override the
|
||||
ext_shared checks.
|
||||
- Autoconf macro PHP_SETUP_LIBXML doesn't define the redundant HAVE_LIBXML
|
||||
symbol anymore and requires at least libxml2 2.9.4.
|
||||
- Autoconf macro PHP_SETUP_ICONV doesn't define the HAVE_ICONV symbol
|
||||
anymore.
|
||||
- Autoconf macro PHP_AP_EXTRACT_VERSION is obsolete (use the
|
||||
'apxs -q HTTPD_VERSION').
|
||||
- Autoconf macro PHP_OUTPUT is obsolete (use AC_CONFIG_FILES).
|
||||
- Autoconf macro PHP_TEST_BUILD is obsolete (use AC_* macros).
|
||||
- Autoconf macro PHP_BUILD_THREAD_SAFE is obsolete (set enable_zts manually).
|
||||
- Autoconf macro PHP_DEF_HAVE is obsolete (use AC_DEFINE).
|
||||
- Autoconf macro PHP_PROG_SETUP now accepts an argument to set the minimum
|
||||
required PHP version during the build.
|
||||
- Autoconf macro PHP_INSTALL_HEADERS arguments can now be also
|
||||
blank-or-newline-separated lists instead of only separated with whitespace
|
||||
or backslash-then-newline.
|
||||
- Autoconf macro PHP_ADD_BUILD_DIR now also accepts 1st argument as a
|
||||
blank-or-newline-separated separated list.
|
||||
- Autoconf macros PHP_NEW_EXTENSION, PHP_ADD_SOURCES, PHP_ADD_SOURCES_X,
|
||||
PHP_SELECT_SAPI now have the source files and flags arguments normalized so
|
||||
the list of items can be passed as a blank-or-newline-separated list.
|
||||
- Autoconf macro PHP_ADD_INCLUDE now takes also a blank-or-newline-separated
|
||||
list of include directories instead of a single directory. The "prepend"
|
||||
argument is validated at Autoconf compile time.
|
||||
- TSRM/tsrm.m4 file and its TSRM_CHECK_PTHREADS macro have been removed.
|
||||
- Added pkg-config support to find libpq for the pdo_pgsql and pgsql
|
||||
extensions. The libpq paths can be customized with the PGSQL_CFLAGS and
|
||||
PGSQL_LIBS environment variables. When a directory argument is provided to
|
||||
configure options (--with-pgsql=DIR or --with-pdo-pgsql=DIR), it will be
|
||||
used instead of the pkg-config search.
|
||||
- Added pkg-config support to find unixODBC and iODBC for the pdo_odbc
|
||||
extension.
|
||||
- Added pkg-config support to find GNU MP library. As a fallback default
|
||||
system paths are searched. When a directory argument is provided
|
||||
(--with-gmp=DIR), it will be used instead of the pkg-config.
|
||||
- Added optional pkg-config support to find NET-SNMP library. As a fallback
|
||||
net-snmp-config utility is used like before.
|
||||
- Removed BC enable_pear variable check due to --enable-pear configure option
|
||||
once used (use with_pear variable name).
|
||||
- Cache variables synced to php_cv_* naming scheme. If you use them for
|
||||
advanced cross-compilation, these were renamed:
|
||||
- ac_cv_copy_file_range -> php_cv_func_copy_file_range
|
||||
- ac_cv_flush_io -> php_cv_have_flush_io
|
||||
- ac_cv_func_getaddrinfo -> php_cv_func_getaddrinfo
|
||||
- ac_cv_have_broken_gcc_strlen_opt -> php_cv_have_broken_gcc_strlen_opt
|
||||
- ac_cv_have_pcre2_jit -> php_cv_have_pcre2_jit
|
||||
- ac_cv_pread -> php_cv_func_pread
|
||||
- ac_cv_pwrite -> php_cv_func_pwrite
|
||||
- ac_cv_syscall_shadow_stack_exists -> php_cv_have_shadow_stack_syscall
|
||||
- ac_cv_time_r_type -> php_cv_time_r_type
|
||||
- ac_cv_write_stdout -> php_cv_have_write_stdout
|
||||
and all other checks wrapped with their belonging cache variables (see *.m4
|
||||
source files for details).
|
||||
- Windows build system changes
|
||||
. SAPI() and ADD_SOURCES() now support the optional `duplicate_sources`
|
||||
parameter. If truthy, no rules to build the object files are generated.
|
||||
This allows to build additional variants of SAPIs (e.g. a DLL and EXE)
|
||||
without duplicate build rules. It is up to the SAPI maintainers to ensure
|
||||
that appropriate build rules are created.
|
||||
|
||||
c. Windows build system changes
|
||||
- The configure options --with-oci8-11g, --with-oci8-12c, --with-oci8-19,
|
||||
--enable-apache2-2handler have been removed.
|
||||
- The configure option --enable-apache2-4handler is now an alias for the
|
||||
preferred --enable-apache2handler.
|
||||
- Added Bison flag '-Wall' when generating lexer files as done in *nix build
|
||||
system.
|
||||
- HAVE_WIN32_NATIVE_THREAD, USE_WIN32_NATIVE_THREAD, ENABLE_THREADS symbols
|
||||
in ext/mbstring/libmbfl removed.
|
||||
- FIBER_ASSEMBLER and FIBER_ASM_ARCH Makefile variables removed in favor of
|
||||
PHP_ASSEMBLER and FIBER_ASM_ABI.
|
||||
- HAVE_PHP_SOAP symbol renamed to HAVE_SOAP.
|
||||
- Unused symbols CONFIGURATION_FILE_PATH, DISCARD_PATH, HAVE_ERRMSG_H,
|
||||
HAVE_REGCOMP, HAVE_RINT, NEED_ISBLANK, PHP_URL_FOPEN, REGEX, HSREGEX,
|
||||
USE_CONFIG_FILE have been removed.
|
||||
- The HAVE_OPENSSL symbol has been removed.
|
||||
- The HAVE_OPENSSL_EXT symbol is now consistently defined to value 1 whether
|
||||
the openssl extension is available either as shared or built statically.
|
||||
- Added configure option --enable-phpdbg-debug to build phpdbg in debug mode.
|
||||
- The win32/build/libs_version.txt file has been removed.
|
||||
- MSVC builds now use the new preprocessor (/Zc:preprocessor).
|
||||
- The CHECK_HEADER_ADD_INCLUDE function now consistently defines preprocessor
|
||||
macros HAVE_<header>_H either to value 1 or leaves them undefined to match
|
||||
the Autotools headers checks.
|
||||
- Unix build system changes
|
||||
. libdir is properly set when --libdir (ex: /usr/lib64) and --with-libdir (ex: lib64)
|
||||
configure options are used to ${libdir}/php (ex: /usr/lib64/php)
|
||||
. PHP_ODBC_CFLAGS, PHP_ODBC_LFLAGS, PHP_ODBC_LIBS, PHP_ODBC_TYPE preprocessor
|
||||
macros defined by ext/odbc are now defined in php_config.h instead of the
|
||||
build-defs.h header.
|
||||
. Autoconf macro AX_CHECK_COMPILE_FLAG updated to serial 11.
|
||||
. Autoconf macro PHP_AP_EXTRACT_VERSION has been removed.
|
||||
. Autoconf macro PHP_BUILD_THREAD_SAFE has been removed (set enable_zts
|
||||
manually).
|
||||
. Autoconf macro PHP_CHECK_SIZEOF is obsolete (use AC_CHECK_SIZEOF).
|
||||
. Autoconf macro PHP_DEF_HAVE has been removed (use AC_DEFINE).
|
||||
. Autoconf macro PHP_OUTPUT has been removed (use AC_CONFIG_FILES).
|
||||
. Autoconf macro PHP_TEST_BUILD has been removed (use AC_* macros).
|
||||
. Preprocessor macro HAVE_PTRDIFF_T has been removed.
|
||||
. Preprocessor macro HAVE_INTMAX_T has been removed.
|
||||
. Preprocessor macro HAVE_SSIZE_T has been removed.
|
||||
. Preprocessor macro SIZEOF_SSIZE_T has been removed.
|
||||
|
||||
========================
|
||||
3. Module changes
|
||||
========================
|
||||
|
||||
a. ext/dom
|
||||
- dom_read_t and dom_write_t now expect the function to return zend_result
|
||||
instead of int.
|
||||
- The macros DOM_NO_ARGS() and DOM_NOT_IMPLEMENTED() have been removed.
|
||||
- New public APIs are available to handle callbacks from XPath, see
|
||||
xpath_callbacks.h.
|
||||
- Added public APIs to manipulate namespace data, see namespace_compat.h.
|
||||
- php_dom_create_object() now no longer accepts a NULL obj argument.
|
||||
- Removed the `ret` argument from the DOM_RET_OBJ macro, use the return
|
||||
value instead.
|
||||
- Removed DOM_XMLNS_NAMESPACE from xml_common.h. Use DOM_XMLNS_NS_URI
|
||||
from namespace_compat.h instead.
|
||||
- Added php_dom_get_ns_mapper(), php_dom_next_in_tree_order(),
|
||||
php_dom_follow_spec_doc_ref(), and php_dom_follow_spec_doc_ref().
|
||||
- ext/gd
|
||||
. The gdImageScale*() and gdImageRotate*() helpers are now internal in the
|
||||
bundled libgd, like they have been in external libgd as of gd-2.1.1.
|
||||
|
||||
b. ext/random
|
||||
- The macro RAND_RANGE_BADSCALING() has been removed. The implementation
|
||||
should either be inlined and undefined behavior fixed or it should be
|
||||
replaced by a non-biased scaler.
|
||||
- The php_srand() and php_rand() functions have been removed. These were
|
||||
slim wrappers around the corresponding php_mt_srand() and php_mt_rand()
|
||||
function since PHP 7.1, but using zend_long instead of uint32_t as their
|
||||
input/output types. This made their behavior incompatible between 32-bit
|
||||
and 64-bit builds of PHP. Users of these functions are encouraged to
|
||||
migrate to one of the more modern engines provided since PHP 8.2. If that
|
||||
is not possible, due to backwards compatibility requirements, then the
|
||||
php_mt_srand() and php_mt_rand() functions should be called directly and
|
||||
the values appropriately casted.
|
||||
- The PHP_RAND_MAX and RAND_MAX constants corresponding to the removed
|
||||
php_rand() have also been removed.
|
||||
- The generate member of a php_random_algo is now expected to return
|
||||
the new php_random_result struct, replacing the last_generated_size
|
||||
member of the php_random_status struct and the generate_size member of
|
||||
the php_random_algo struct.
|
||||
- The php_random_status struct has been removed, since the previous change
|
||||
reduced it to a single void* member containing the actual state, resulting
|
||||
in needless indirection. Functions taking a php_random_algo struct pointer
|
||||
and a php_random_status struct pointer as separate parameters now take a
|
||||
single php_random_algo_with_state struct by value, making it easier to
|
||||
pass around the state with its associated algorithm and thus reducing
|
||||
the chance for mistakes.
|
||||
- The seed member of a php_random_algo has been removed. As a replacement
|
||||
engine-specific seeding functions are now exposed. This change allows
|
||||
users to better take engine-specific behavior into account. As an example
|
||||
Mt19937 ignored the upper half of the seed parameter of the generic
|
||||
seeding function.
|
||||
- The CSPRNG API (php_random_(bytes|int)_*) is now provided by the new
|
||||
and much smaller php_random_csprng.h header. The new header is included
|
||||
in php_random.h for compatibility with existing users.
|
||||
- A new php_random_generate_fallback_seed() function has been added as a
|
||||
replacement for the generically named GENERATE_SEED(). The internal
|
||||
implementation has been improved to generate better seeds, however any
|
||||
users should use the opportunity to verify that seeding is first
|
||||
attempted using the CSPRNG for better output size flexibility.
|
||||
- The standalone combined_lcg engine has been removed, as the lcg_value()
|
||||
userland function is deprecated and as the engine is unable to return
|
||||
unbiased integer values. The internal php_combined_lcg() function remains
|
||||
available for now.
|
||||
- ext/json
|
||||
. php_json_encode_serializable_object() now assumes `EG(active)`,
|
||||
if not a bailout is caused. Therefore a minor BC break exists if the
|
||||
`PHP_JSON_PARTIAL_OUTPUT_ON_ERROR` option is in use.
|
||||
However, this situation is highly unlikely.
|
||||
|
||||
c. ext/xsl
|
||||
- The function php_xsl_create_object() was removed as it was not used
|
||||
nor exported.
|
||||
- ext/libxml
|
||||
. The refcount APIs now return an `unsigned int` instead of an `int`.
|
||||
. Removed php_libxml_xmlCheckUTF8(). Use xmlCheckUTF8() from libxml instead.
|
||||
|
||||
d. ext/libxml
|
||||
- Added php_libxml_pretend_ctx_error_ex() to emit errors as if they had come
|
||||
from libxml.
|
||||
- Added php_libxml_error_handler_va() to pass libxml errors, and
|
||||
corresponding php_libxml_error_level enum.
|
||||
- Removed the "properties" HashTable field from php_libxml_node_object.
|
||||
- Added a way to attached private data to a php_libxml_ref_obj.
|
||||
- Added a way to fix a class type onto php_libxml_ref_obj.
|
||||
- Added a way to record quirks mode in php_libxml_ref_obj.
|
||||
- Added php_libxml_uses_internal_errors().
|
||||
- Added a way to override document handlers (e.g. serialization) with
|
||||
php_libxml_document_handlers.
|
||||
- Changed the refcount fields from int to unsigned int.
|
||||
- ext/pdo
|
||||
. Added `php_pdo_stmt_valid_db_obj_handle()` to check if the database object
|
||||
is still valid. This is useful when a GC cycle is collected and the
|
||||
database object can be destroyed prior to destroying the statement.
|
||||
|
||||
e. ext/date
|
||||
- Added the php_format_date_ex() API to format instances of php_date_obj.
|
||||
- Added the php_date_initialize_from_ts_long() and
|
||||
php_date_initialize_from_ts_double() to initialize a php_date_obj with
|
||||
the given unix timestamp using GMT +00:00.
|
||||
|
||||
f. ext/pcre
|
||||
- php_pcre_match_impl() now no longer has a use_flags argument.
|
||||
When flags should be ignored, pass 0 to the flags argument.
|
||||
- php_pcre_match_impl() and pcre_get_compiled_regex_cache_ex() now use
|
||||
proper boolean argument types instead of integer types.
|
||||
- pcre_get_compiled_regex_cache_ex() now provides an option to collect extra
|
||||
options (from modifiers used in the expression, for example), and calls
|
||||
pcre2_set_compile_extra_options() with those options.
|
||||
- Removed per-request cache, the cache is now always per process or
|
||||
per thread depending on whether you use NTS or ZTS.
|
||||
This was removed due to fundamental ordering issues between destructors.
|
||||
|
||||
g. ext/standard
|
||||
- Added the php_base64_encode_ex() API with flag parameters, value can be
|
||||
PHP_BASE64_NO_PADDING to encode without the padding character '='.
|
||||
- The php_escape_shell_cmd() now takes a zend_string* instead of a char*
|
||||
Moreover, providing it with a binary safe string is the responsibility of
|
||||
the caller now.
|
||||
- The php_escape_shell_arg() now takes a zend_string* instead of a char*
|
||||
Moreover, providing it with a binary safe string is the responsibility of
|
||||
the caller now.
|
||||
- The php_info_html_esc() function has been removed, use
|
||||
php_escape_html_entities() with ENT_QUOTES directly instead.
|
||||
- The deprecated php_uint32 and php_int32 typedefs have been removed from
|
||||
ext/standard/basic_functions.h. Use the standard uint32_t and int32_t
|
||||
types instead.
|
||||
- The php_mkdir() and php_mkdir_ex() APIs have been removed, use
|
||||
php_stream_mkdir() instead.
|
||||
- The php_strtoupper(), php_string_toupper(), php_strtolower(), and
|
||||
php_string_tolower() functions has been removed, use zend_str_toupper(),
|
||||
zend_string_toupper(), zend_str_tolower(), and zend_string_tolower()
|
||||
respectively instead.
|
||||
- The php_replace_controlchars_ex() function is no longer exposed.
|
||||
|
||||
h. ext/session
|
||||
- Added the php_get_session_status() API to get the session status, which is
|
||||
equivalent to reading PS(session_status) but works with shared objects too.
|
||||
- Added the php_get_session_var_str() API to set a session variable without
|
||||
needing to create a zend_string.
|
||||
- The ext/session/php_session.h doesn't transitively include the
|
||||
ext/hash/php_hash.h header anymore.
|
||||
- It is no longer allowed to return out of the PS_ENCODE_LOOP macro.
|
||||
Instead, you should break out of the loop instead.
|
||||
|
||||
i. ext/xml
|
||||
- Made the expat compatibility wrapper XML_GetCurrentByteIndex return a long
|
||||
instead of an int. This corresponds to the XML_Index type when
|
||||
XML_LARGE_SIZE is not used in expat.
|
||||
- ext/standard
|
||||
. Added php_url_decode_ex() and php_raw_url_decode_ex() that unlike their
|
||||
non-ex counterparts do not work in-place.
|
||||
. The php_std_date() function has been removed. Use php_format_date() with
|
||||
the "D, d M Y H:i:s \\G\\M\\T" format instead.
|
||||
. Added php_url_encode_to_smart_str() to encode a URL to a smart_str buffer.
|
||||
. The functionality of getimagesize(), image_type_to_mime_type(),
|
||||
and image_type_to_extension() is now extensible using the internal APIs
|
||||
php_image_register_handler() and php_image_unregister_handler() in
|
||||
php_image.h.
|
||||
|
||||
========================
|
||||
4. OpCode changes
|
||||
========================
|
||||
|
||||
* DO_ICALL, DO_FCALL, and DO_FCALL_BY_NAME now call zend_interrupt_function
|
||||
while the internal frame is still on the stack. This means interrupt handlers
|
||||
will now see the internal call. If your interrupt handler does something like
|
||||
switching EG(current_execute_data), it should not do so if an internal func
|
||||
is on top.
|
||||
* New FRAMELESS_ICALL_[0,3] opcodes for faster internal function calls have been
|
||||
added. These opcodes don't create a stack frame, but pass arguments via opcode
|
||||
operands. They only work for functions that are known at compile-time, and
|
||||
that provide a frameless handler (search for usages of the
|
||||
ZEND_FRAMELESS_FUNCTION macro).
|
||||
|
||||
* CREATE_GENERATOR now initializes the generator with opline pointing to the
|
||||
CREATE_GENERATOR op (before, opline was set to the next op).
|
||||
|
||||
* YIELD and YIELD_FROM do not increment the opline anymore.
|
||||
|
||||
* The EXIT opcode has been removed as exit is now implemented as a function.
|
||||
* New ZEND_DECLARE_ATTRIBUTED_CONST is used when a global constant is declared
|
||||
with `const` and has attributes; this opcode is used *instead* of the
|
||||
ZEND_DECLARE_CONST, and in addition to the name of the constant and the
|
||||
value to use, has a ZEND_OP_DATA with a pointer to the compiled attributes.
|
||||
|
||||
========================
|
||||
5. SAPI changes
|
||||
========================
|
||||
|
||||
- SAPIs must now call php_child_init() after a fork. If php-src code was
|
||||
executed in other threads than the one initiating the fork,
|
||||
refresh_memory_manager() must be called in every such thread.
|
||||
|
|
|
@ -274,7 +274,9 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
|
|||
* If it's not local, then the other blocks successors must also eventually either FREE or consume the temporary,
|
||||
* hence removing the temporary is not safe in the general case, especially when other consumers are not FREE.
|
||||
* A FREE may not be removed without also removing the source's result, because otherwise that would cause a memory leak. */
|
||||
if (opline->op1_type == IS_TMP_VAR) {
|
||||
if (opline->extended_value == ZEND_FREE_VOID_CAST) {
|
||||
/* Keep the ZEND_FREE opcode alive. */
|
||||
} else if (opline->op1_type == IS_TMP_VAR) {
|
||||
src = VAR_SOURCE(opline->op1);
|
||||
if (src) {
|
||||
switch (src->opcode) {
|
||||
|
@ -418,6 +420,14 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
|
|||
}
|
||||
break;
|
||||
|
||||
case ZEND_EXT_STMT:
|
||||
if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
|
||||
/* Variable will be deleted later by FREE, so we can't optimize it */
|
||||
Tsource[VAR_NUM(opline->op1.var)] = NULL;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case ZEND_CASE:
|
||||
case ZEND_CASE_STRICT:
|
||||
case ZEND_COPY_TMP:
|
||||
|
@ -468,7 +478,67 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
|
|||
goto optimize_bool;
|
||||
}
|
||||
break;
|
||||
case ZEND_IS_IDENTICAL:
|
||||
if (opline->op1_type == IS_CONST &&
|
||||
opline->op2_type == IS_CONST) {
|
||||
goto optimize_constant_binary_op;
|
||||
}
|
||||
|
||||
if (opline->op1_type == IS_CONST &&
|
||||
(Z_TYPE(ZEND_OP1_LITERAL(opline)) <= IS_TRUE && Z_TYPE(ZEND_OP1_LITERAL(opline)) >= IS_NULL)) {
|
||||
/* IS_IDENTICAL(TRUE, T) => TYPE_CHECK(T, TRUE)
|
||||
* IS_IDENTICAL(FALSE, T) => TYPE_CHECK(T, FALSE)
|
||||
* IS_IDENTICAL(NULL, T) => TYPE_CHECK(T, NULL)
|
||||
*/
|
||||
opline->opcode = ZEND_TYPE_CHECK;
|
||||
opline->extended_value = (1 << Z_TYPE(ZEND_OP1_LITERAL(opline)));
|
||||
COPY_NODE(opline->op1, opline->op2);
|
||||
SET_UNUSED(opline->op2);
|
||||
++(*opt_count);
|
||||
goto optimize_type_check;
|
||||
} else if (opline->op2_type == IS_CONST &&
|
||||
(Z_TYPE(ZEND_OP2_LITERAL(opline)) <= IS_TRUE && Z_TYPE(ZEND_OP2_LITERAL(opline)) >= IS_NULL)) {
|
||||
/* IS_IDENTICAL(T, TRUE) => TYPE_CHECK(T, TRUE)
|
||||
* IS_IDENTICAL(T, FALSE) => TYPE_CHECK(T, FALSE)
|
||||
* IS_IDENTICAL(T, NULL) => TYPE_CHECK(T, NULL)
|
||||
*/
|
||||
opline->opcode = ZEND_TYPE_CHECK;
|
||||
opline->extended_value = (1 << Z_TYPE(ZEND_OP2_LITERAL(opline)));
|
||||
SET_UNUSED(opline->op2);
|
||||
++(*opt_count);
|
||||
goto optimize_type_check;
|
||||
}
|
||||
break;
|
||||
case ZEND_TYPE_CHECK:
|
||||
optimize_type_check:
|
||||
if (opline->extended_value == (1 << IS_TRUE) || opline->extended_value == (1 << IS_FALSE)) {
|
||||
if (opline->op1_type == IS_TMP_VAR &&
|
||||
!zend_bitset_in(used_ext, VAR_NUM(opline->op1.var))) {
|
||||
src = VAR_SOURCE(opline->op1);
|
||||
|
||||
if (src) {
|
||||
switch (src->opcode) {
|
||||
case ZEND_BOOL:
|
||||
case ZEND_BOOL_NOT:
|
||||
/* T = BOOL(X) + TYPE_CHECK(T, TRUE) -> BOOL(X), NOP
|
||||
* T = BOOL(X) + TYPE_CHECK(T, FALSE) -> BOOL_NOT(X), NOP
|
||||
* T = BOOL_NOT(X) + TYPE_CHECK(T, TRUE) -> BOOL_NOT(X), NOP
|
||||
* T = BOOL_NOT(X) + TYPE_CHECK(T, FALSE) -> BOOL(X), NOP
|
||||
*/
|
||||
src->opcode =
|
||||
((src->opcode == ZEND_BOOL) == (opline->extended_value == (1 << IS_TRUE))) ?
|
||||
ZEND_BOOL : ZEND_BOOL_NOT;
|
||||
COPY_NODE(src->result, opline->result);
|
||||
SET_VAR_SOURCE(src);
|
||||
MAKE_NOP(opline);
|
||||
++(*opt_count);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ZEND_BOOL:
|
||||
case ZEND_BOOL_NOT:
|
||||
optimize_bool:
|
||||
|
@ -801,7 +871,6 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
|
|||
case ZEND_SR:
|
||||
case ZEND_IS_SMALLER:
|
||||
case ZEND_IS_SMALLER_OR_EQUAL:
|
||||
case ZEND_IS_IDENTICAL:
|
||||
case ZEND_IS_NOT_IDENTICAL:
|
||||
case ZEND_BOOL_XOR:
|
||||
case ZEND_BW_OR:
|
||||
|
|
|
@ -43,50 +43,6 @@ typedef struct _literal_info {
|
|||
info[n].num_related = (related); \
|
||||
} while (0)
|
||||
|
||||
static size_t type_num_classes(const zend_op_array *op_array, uint32_t arg_num)
|
||||
{
|
||||
zend_arg_info *arg_info;
|
||||
if (arg_num > 0) {
|
||||
if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
|
||||
return 0;
|
||||
}
|
||||
if (EXPECTED(arg_num <= op_array->num_args)) {
|
||||
arg_info = &op_array->arg_info[arg_num-1];
|
||||
} else if (UNEXPECTED(op_array->fn_flags & ZEND_ACC_VARIADIC)) {
|
||||
arg_info = &op_array->arg_info[op_array->num_args];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
arg_info = op_array->arg_info - 1;
|
||||
}
|
||||
|
||||
if (ZEND_TYPE_IS_COMPLEX(arg_info->type)) {
|
||||
if (ZEND_TYPE_HAS_LIST(arg_info->type)) {
|
||||
/* Intersection types cannot have nested list types */
|
||||
if (ZEND_TYPE_IS_INTERSECTION(arg_info->type)) {
|
||||
return ZEND_TYPE_LIST(arg_info->type)->num_types;
|
||||
}
|
||||
ZEND_ASSERT(ZEND_TYPE_IS_UNION(arg_info->type));
|
||||
size_t count = 0;
|
||||
zend_type *list_type;
|
||||
|
||||
ZEND_TYPE_LIST_FOREACH(ZEND_TYPE_LIST(arg_info->type), list_type) {
|
||||
if (ZEND_TYPE_IS_INTERSECTION(*list_type)) {
|
||||
count += ZEND_TYPE_LIST(*list_type)->num_types;
|
||||
} else {
|
||||
ZEND_ASSERT(!ZEND_TYPE_HAS_LIST(*list_type));
|
||||
count += 1;
|
||||
}
|
||||
} ZEND_TYPE_LIST_FOREACH_END();
|
||||
return count;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uint32_t add_static_slot(HashTable *hash,
|
||||
zend_op_array *op_array,
|
||||
uint32_t op1,
|
||||
|
@ -165,7 +121,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
|
|||
HashTable hash;
|
||||
zend_string *key = NULL;
|
||||
void *checkpoint = zend_arena_checkpoint(ctx->arena);
|
||||
int *const_slot, *class_slot, *func_slot, *bind_var_slot, *property_slot, *method_slot;
|
||||
int *const_slot, *class_slot, *func_slot, *bind_var_slot, *property_slot, *method_slot, *jmp_slot;
|
||||
|
||||
if (op_array->last_literal) {
|
||||
info = (literal_info*)zend_arena_calloc(&ctx->arena, op_array->last_literal, sizeof(literal_info));
|
||||
|
@ -175,6 +131,9 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
|
|||
end = opline + op_array->last;
|
||||
while (opline < end) {
|
||||
switch (opline->opcode) {
|
||||
case ZEND_JMP_FRAMELESS:
|
||||
LITERAL_INFO(opline->op1.constant, 1);
|
||||
break;
|
||||
case ZEND_INIT_FCALL_BY_NAME:
|
||||
LITERAL_INFO(opline->op2.constant, 2);
|
||||
break;
|
||||
|
@ -480,13 +439,14 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
|
|||
zend_hash_clean(&hash);
|
||||
op_array->last_literal = j;
|
||||
|
||||
const_slot = zend_arena_alloc(&ctx->arena, j * 6 * sizeof(int));
|
||||
memset(const_slot, -1, j * 6 * sizeof(int));
|
||||
const_slot = zend_arena_alloc(&ctx->arena, j * 7 * sizeof(int));
|
||||
memset(const_slot, -1, j * 7 * sizeof(int));
|
||||
class_slot = const_slot + j;
|
||||
func_slot = class_slot + j;
|
||||
bind_var_slot = func_slot + j;
|
||||
property_slot = bind_var_slot + j;
|
||||
method_slot = property_slot + j;
|
||||
jmp_slot = method_slot + j;
|
||||
|
||||
/* Update opcodes to use new literals table */
|
||||
cache_size = zend_op_array_extension_handles * sizeof(void*);
|
||||
|
@ -500,26 +460,6 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
|
|||
opline->op2.constant = map[opline->op2.constant];
|
||||
}
|
||||
switch (opline->opcode) {
|
||||
case ZEND_RECV_INIT:
|
||||
case ZEND_RECV:
|
||||
case ZEND_RECV_VARIADIC:
|
||||
{
|
||||
size_t num_classes = type_num_classes(op_array, opline->op1.num);
|
||||
if (num_classes) {
|
||||
opline->extended_value = cache_size;
|
||||
cache_size += num_classes * sizeof(void *);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ZEND_VERIFY_RETURN_TYPE:
|
||||
{
|
||||
size_t num_classes = type_num_classes(op_array, 0);
|
||||
if (num_classes) {
|
||||
opline->op2.num = cache_size;
|
||||
cache_size += num_classes * sizeof(void *);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ZEND_ASSIGN_STATIC_PROP_OP:
|
||||
if (opline->op1_type == IS_CONST) {
|
||||
// op1 static property
|
||||
|
@ -773,10 +713,19 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
|
|||
break;
|
||||
case ZEND_DECLARE_ANON_CLASS:
|
||||
case ZEND_DECLARE_CLASS_DELAYED:
|
||||
case ZEND_JMP_FRAMELESS:
|
||||
opline->extended_value = cache_size;
|
||||
cache_size += sizeof(void *);
|
||||
break;
|
||||
case ZEND_JMP_FRAMELESS:
|
||||
// op1 func
|
||||
if (jmp_slot[opline->op1.constant] >= 0) {
|
||||
opline->extended_value = jmp_slot[opline->op1.constant];
|
||||
} else {
|
||||
opline->extended_value = cache_size;
|
||||
cache_size += sizeof(void *);
|
||||
jmp_slot[opline->op1.constant] = opline->extended_value;
|
||||
}
|
||||
break;
|
||||
case ZEND_SEND_VAL:
|
||||
case ZEND_SEND_VAL_EX:
|
||||
case ZEND_SEND_VAR:
|
||||
|
|
|
@ -80,7 +80,6 @@ static inline bool may_have_side_effects(
|
|||
case ZEND_IS_IDENTICAL:
|
||||
case ZEND_IS_NOT_IDENTICAL:
|
||||
case ZEND_QM_ASSIGN:
|
||||
case ZEND_FREE:
|
||||
case ZEND_FE_FREE:
|
||||
case ZEND_TYPE_CHECK:
|
||||
case ZEND_DEFINED:
|
||||
|
@ -127,6 +126,8 @@ static inline bool may_have_side_effects(
|
|||
case ZEND_ARRAY_KEY_EXISTS:
|
||||
/* No side effects */
|
||||
return 0;
|
||||
case ZEND_FREE:
|
||||
return opline->extended_value == ZEND_FREE_VOID_CAST;
|
||||
case ZEND_ADD_ARRAY_ELEMENT:
|
||||
/* TODO: We can't free two vars. Keep instruction alive. <?php [0, "$a" => "$b"]; */
|
||||
if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && (opline->op2_type & (IS_VAR|IS_TMP_VAR))) {
|
||||
|
|
|
@ -254,7 +254,7 @@ static void zend_ssa_remove_nops(zend_op_array *op_array, zend_ssa *ssa, zend_op
|
|||
free_alloca(shiftlist, use_heap);
|
||||
}
|
||||
|
||||
static bool safe_instanceof(zend_class_entry *ce1, zend_class_entry *ce2) {
|
||||
static bool safe_instanceof(const zend_class_entry *ce1, const zend_class_entry *ce2) {
|
||||
if (ce1 == ce2) {
|
||||
return 1;
|
||||
}
|
||||
|
@ -267,9 +267,9 @@ static bool safe_instanceof(zend_class_entry *ce1, zend_class_entry *ce2) {
|
|||
|
||||
static inline bool can_elide_list_type(
|
||||
const zend_script *script, const zend_op_array *op_array,
|
||||
const zend_ssa_var_info *use_info, zend_type type)
|
||||
const zend_ssa_var_info *use_info, const zend_type type)
|
||||
{
|
||||
zend_type *single_type;
|
||||
const zend_type *single_type;
|
||||
/* For intersection: result==false is failure, default is success.
|
||||
* For union: result==true is success, default is failure. */
|
||||
bool is_intersection = ZEND_TYPE_IS_INTERSECTION(type);
|
||||
|
@ -280,7 +280,7 @@ static inline bool can_elide_list_type(
|
|||
}
|
||||
if (ZEND_TYPE_HAS_NAME(*single_type)) {
|
||||
zend_string *lcname = zend_string_tolower(ZEND_TYPE_NAME(*single_type));
|
||||
zend_class_entry *ce = zend_optimizer_get_class_entry(script, op_array, lcname);
|
||||
const zend_class_entry *ce = zend_optimizer_get_class_entry(script, op_array, lcname);
|
||||
zend_string_release(lcname);
|
||||
bool result = ce && safe_instanceof(use_info->ce, ce);
|
||||
if (result == !is_intersection) {
|
||||
|
@ -407,40 +407,28 @@ int zend_dfa_optimize_calls(zend_op_array *op_array, zend_ssa *ssa)
|
|||
zend_call_info *call_info = func_info->callee_info;
|
||||
|
||||
do {
|
||||
if (call_info->caller_call_opline
|
||||
&& call_info->caller_call_opline->opcode == ZEND_DO_ICALL
|
||||
&& call_info->callee_func
|
||||
&& zend_string_equals_literal(call_info->callee_func->common.function_name, "in_array")
|
||||
&& (call_info->caller_init_opline->extended_value == 2
|
||||
|| (call_info->caller_init_opline->extended_value == 3
|
||||
&& (call_info->caller_call_opline - 1)->opcode == ZEND_SEND_VAL
|
||||
&& (call_info->caller_call_opline - 1)->op1_type == IS_CONST))) {
|
||||
zend_op *op = call_info->caller_init_opline;
|
||||
|
||||
if ((op->opcode == ZEND_FRAMELESS_ICALL_2
|
||||
|| (op->opcode == ZEND_FRAMELESS_ICALL_3 && (op + 1)->op1_type == IS_CONST))
|
||||
&& call_info->callee_func
|
||||
&& zend_string_equals_literal_ci(call_info->callee_func->common.function_name, "in_array")) {
|
||||
|
||||
zend_op *send_array;
|
||||
zend_op *send_needly;
|
||||
bool strict = 0;
|
||||
bool has_opdata = op->opcode == ZEND_FRAMELESS_ICALL_3;
|
||||
ZEND_ASSERT(!call_info->is_prototype);
|
||||
|
||||
if (call_info->caller_init_opline->extended_value == 2) {
|
||||
send_array = call_info->caller_call_opline - 1;
|
||||
send_needly = call_info->caller_call_opline - 2;
|
||||
} else {
|
||||
if (zend_is_true(CT_CONSTANT_EX(op_array, (call_info->caller_call_opline - 1)->op1.constant))) {
|
||||
if (has_opdata) {
|
||||
if (zend_is_true(CT_CONSTANT_EX(op_array, (op + 1)->op1.constant))) {
|
||||
strict = 1;
|
||||
}
|
||||
send_array = call_info->caller_call_opline - 2;
|
||||
send_needly = call_info->caller_call_opline - 3;
|
||||
}
|
||||
|
||||
if (send_array->opcode == ZEND_SEND_VAL
|
||||
&& send_array->op1_type == IS_CONST
|
||||
&& Z_TYPE_P(CT_CONSTANT_EX(op_array, send_array->op1.constant)) == IS_ARRAY
|
||||
&& (send_needly->opcode == ZEND_SEND_VAL
|
||||
|| send_needly->opcode == ZEND_SEND_VAR)
|
||||
) {
|
||||
if (op->op2_type == IS_CONST
|
||||
&& Z_TYPE_P(CT_CONSTANT_EX(op_array, op->op2.constant)) == IS_ARRAY) {
|
||||
bool ok = 1;
|
||||
|
||||
HashTable *src = Z_ARRVAL_P(CT_CONSTANT_EX(op_array, send_array->op1.constant));
|
||||
HashTable *src = Z_ARRVAL_P(CT_CONSTANT_EX(op_array, op->op2.constant));
|
||||
HashTable *dst;
|
||||
zval *val, tmp;
|
||||
zend_ulong idx;
|
||||
|
@ -471,59 +459,15 @@ int zend_dfa_optimize_calls(zend_op_array *op_array, zend_ssa *ssa)
|
|||
}
|
||||
|
||||
if (ok) {
|
||||
uint32_t op_num = send_needly - op_array->opcodes;
|
||||
zend_ssa_op *ssa_op = ssa->ops + op_num;
|
||||
|
||||
if (ssa_op->op1_use >= 0) {
|
||||
/* Reconstruct SSA */
|
||||
int var_num = ssa_op->op1_use;
|
||||
zend_ssa_var *var = ssa->vars + var_num;
|
||||
|
||||
ZEND_ASSERT(ssa_op->op1_def < 0);
|
||||
zend_ssa_unlink_use_chain(ssa, op_num, ssa_op->op1_use);
|
||||
ssa_op->op1_use = -1;
|
||||
ssa_op->op1_use_chain = -1;
|
||||
op_num = call_info->caller_call_opline - op_array->opcodes;
|
||||
ssa_op = ssa->ops + op_num;
|
||||
ssa_op->op1_use = var_num;
|
||||
ssa_op->op1_use_chain = var->use_chain;
|
||||
var->use_chain = op_num;
|
||||
}
|
||||
|
||||
ZVAL_ARR(&tmp, dst);
|
||||
|
||||
/* Update opcode */
|
||||
call_info->caller_call_opline->opcode = ZEND_IN_ARRAY;
|
||||
call_info->caller_call_opline->extended_value = strict;
|
||||
call_info->caller_call_opline->op1_type = send_needly->op1_type;
|
||||
call_info->caller_call_opline->op1.num = send_needly->op1.num;
|
||||
call_info->caller_call_opline->op2_type = IS_CONST;
|
||||
call_info->caller_call_opline->op2.constant = zend_optimizer_add_literal(op_array, &tmp);
|
||||
if (call_info->caller_init_opline->extended_value == 3) {
|
||||
MAKE_NOP(call_info->caller_call_opline - 1);
|
||||
}
|
||||
MAKE_NOP(call_info->caller_init_opline);
|
||||
MAKE_NOP(send_needly);
|
||||
MAKE_NOP(send_array);
|
||||
removed_ops++;
|
||||
|
||||
op_num = call_info->caller_call_opline - op_array->opcodes;
|
||||
ssa_op = ssa->ops + op_num;
|
||||
if (ssa_op->result_def >= 0) {
|
||||
int var = ssa_op->result_def;
|
||||
int use = ssa->vars[var].use_chain;
|
||||
|
||||
/* If the result is used only in a JMPZ/JMPNZ, replace result type with
|
||||
* IS_TMP_VAR, which will enable use of smart branches. Don't do this
|
||||
* in other cases, as not all opcodes support both VAR and TMP. */
|
||||
if (ssa->vars[var].phi_use_chain == NULL
|
||||
&& ssa->ops[use].op1_use == var
|
||||
&& ssa->ops[use].op1_use_chain == -1
|
||||
&& (op_array->opcodes[use].opcode == ZEND_JMPZ
|
||||
|| op_array->opcodes[use].opcode == ZEND_JMPNZ)) {
|
||||
call_info->caller_call_opline->result_type = IS_TMP_VAR;
|
||||
op_array->opcodes[use].op1_type = IS_TMP_VAR;
|
||||
}
|
||||
op->opcode = ZEND_IN_ARRAY;
|
||||
op->extended_value = strict;
|
||||
op->op2.constant = zend_optimizer_add_literal(op_array, &tmp);
|
||||
if (has_opdata) {
|
||||
MAKE_NOP(op + 1);
|
||||
removed_ops++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -78,8 +78,10 @@ static void zend_delete_call_instructions(zend_op_array *op_array, zend_op *opli
|
|||
|
||||
static void zend_try_inline_call(zend_op_array *op_array, zend_op *fcall, zend_op *opline, zend_function *func)
|
||||
{
|
||||
const uint32_t no_discard = RETURN_VALUE_USED(opline) ? 0 : ZEND_ACC_NODISCARD;
|
||||
|
||||
if (func->type == ZEND_USER_FUNCTION
|
||||
&& !(func->op_array.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_HAS_TYPE_HINTS|ZEND_ACC_DEPRECATED))
|
||||
&& !(func->op_array.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_HAS_TYPE_HINTS|ZEND_ACC_DEPRECATED|no_discard))
|
||||
/* TODO: function copied from trait may be inconsistent ??? */
|
||||
&& !(func->op_array.fn_flags & (ZEND_ACC_TRAIT_CLONE))
|
||||
&& fcall->extended_value >= func->op_array.required_num_args
|
||||
|
@ -202,18 +204,12 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
|
|||
fcall->op1.num = zend_vm_calc_used_stack(fcall->extended_value, call_stack[call].func);
|
||||
literal_dtor(&ZEND_OP2_LITERAL(fcall));
|
||||
fcall->op2.constant = fcall->op2.constant + 1;
|
||||
if (opline->opcode != ZEND_CALLABLE_CONVERT) {
|
||||
opline->opcode = zend_get_call_op(fcall, call_stack[call].func);
|
||||
}
|
||||
} else if (fcall->opcode == ZEND_INIT_NS_FCALL_BY_NAME) {
|
||||
fcall->opcode = ZEND_INIT_FCALL;
|
||||
fcall->op1.num = zend_vm_calc_used_stack(fcall->extended_value, call_stack[call].func);
|
||||
literal_dtor(&op_array->literals[fcall->op2.constant]);
|
||||
literal_dtor(&op_array->literals[fcall->op2.constant + 2]);
|
||||
fcall->op2.constant = fcall->op2.constant + 1;
|
||||
if (opline->opcode != ZEND_CALLABLE_CONVERT) {
|
||||
opline->opcode = zend_get_call_op(fcall, call_stack[call].func);
|
||||
}
|
||||
} else if (fcall->opcode == ZEND_INIT_STATIC_METHOD_CALL
|
||||
|| fcall->opcode == ZEND_INIT_METHOD_CALL
|
||||
|| fcall->opcode == ZEND_INIT_PARENT_PROPERTY_HOOK_CALL
|
||||
|
@ -223,6 +219,16 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
|
|||
ZEND_UNREACHABLE();
|
||||
}
|
||||
|
||||
/* If the INIT opcode changed the DO opcode can also change to
|
||||
* a more optimized one.
|
||||
*
|
||||
* At this point we also know whether or not the result of
|
||||
* the DO opcode is used, allowing to optimize calls to
|
||||
* ZEND_ACC_NODISCARD functions. */
|
||||
if (opline->opcode != ZEND_CALLABLE_CONVERT) {
|
||||
opline->opcode = zend_get_call_op(fcall, call_stack[call].func, !RESULT_UNUSED(opline));
|
||||
}
|
||||
|
||||
if ((ZEND_OPTIMIZER_PASS_16 & ctx->optimization_level)
|
||||
&& call_stack[call].try_inline
|
||||
&& opline->opcode != ZEND_CALLABLE_CONVERT) {
|
||||
|
|
|
@ -143,7 +143,11 @@ static void zend_mark_reachable_blocks(const zend_op_array *op_array, zend_cfg *
|
|||
end = blocks + block_map[op_array->try_catch_array[j].finally_op];
|
||||
while (b != end) {
|
||||
if (b->flags & ZEND_BB_REACHABLE) {
|
||||
op_array->try_catch_array[j].try_op = op_array->try_catch_array[j].catch_op;
|
||||
/* In case we get here, there is no live try block but there is a live finally block.
|
||||
* If we do have catch_op set, we need to set it to the first catch block to satisfy
|
||||
* the constraint try_op <= catch_op <= finally_op */
|
||||
op_array->try_catch_array[j].try_op =
|
||||
op_array->try_catch_array[j].catch_op ? op_array->try_catch_array[j].catch_op : b->start;
|
||||
changed = 1;
|
||||
zend_mark_reachable(op_array->opcodes, cfg, blocks + block_map[op_array->try_catch_array[j].try_op]);
|
||||
break;
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include "zend_func_info.h"
|
||||
#include "zend_call_graph.h"
|
||||
#include "zend_dump.h"
|
||||
#include "ext/standard/php_string.h"
|
||||
#include "zend_smart_str.h"
|
||||
|
||||
void zend_dump_ht(HashTable *ht)
|
||||
{
|
||||
|
@ -66,13 +66,27 @@ void zend_dump_const(const zval *zv)
|
|||
case IS_DOUBLE:
|
||||
fprintf(stderr, " float(%g)", Z_DVAL_P(zv));
|
||||
break;
|
||||
case IS_STRING:;
|
||||
zend_string *escaped_string = php_addcslashes(Z_STR_P(zv), "\"\\", 2);
|
||||
case IS_STRING: {
|
||||
smart_str escaped_string = {0};
|
||||
smart_str_append_escaped(&escaped_string, Z_STRVAL_P(zv), Z_STRLEN_P(zv));
|
||||
smart_str_0(&escaped_string);
|
||||
|
||||
fprintf(stderr, " string(\"%s\")", ZSTR_VAL(escaped_string));
|
||||
fprintf(stderr, " string(\"");
|
||||
|
||||
zend_string_release(escaped_string);
|
||||
/* Also escape '"' */
|
||||
for (size_t i = 0; i < ZSTR_LEN(escaped_string.s); i++) {
|
||||
if (ZSTR_VAL(escaped_string.s)[i] == '"') {
|
||||
fprintf(stderr, "\\\"");
|
||||
} else {
|
||||
putc(ZSTR_VAL(escaped_string.s)[i], stderr);
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(stderr, "\")");
|
||||
|
||||
smart_str_free_ex(&escaped_string, false);
|
||||
break;
|
||||
}
|
||||
case IS_ARRAY:
|
||||
fprintf(stderr, " array(...)");
|
||||
break;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* This is a generated file, edit the .stub.php files instead. */
|
||||
|
||||
static const func_info_t func_infos[] = {
|
||||
F1("clone", MAY_BE_OBJECT),
|
||||
F1("zend_version", MAY_BE_STRING),
|
||||
FN("func_get_args", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_ANY),
|
||||
F1("get_class_vars", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
|
@ -46,6 +47,7 @@ static const func_info_t func_infos[] = {
|
|||
F1("curl_multi_strerror", MAY_BE_STRING|MAY_BE_NULL),
|
||||
F1("curl_share_init", MAY_BE_OBJECT),
|
||||
F1("curl_share_strerror", MAY_BE_STRING|MAY_BE_NULL),
|
||||
F1("curl_share_init_persistent", MAY_BE_OBJECT),
|
||||
F1("curl_strerror", MAY_BE_STRING|MAY_BE_NULL),
|
||||
F1("curl_version", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_FALSE),
|
||||
F1("date", MAY_BE_STRING),
|
||||
|
@ -129,9 +131,7 @@ static const func_info_t func_infos[] = {
|
|||
F1("imagecreatefromgd", MAY_BE_OBJECT|MAY_BE_FALSE),
|
||||
F1("imagecreatefromgd2", MAY_BE_OBJECT|MAY_BE_FALSE),
|
||||
F1("imagecreatefromgd2part", MAY_BE_OBJECT|MAY_BE_FALSE),
|
||||
#if defined(HAVE_GD_BMP)
|
||||
F1("imagecreatefrombmp", MAY_BE_OBJECT|MAY_BE_FALSE),
|
||||
#endif
|
||||
F1("imagecolorsforindex", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG),
|
||||
F1("imagegetclip", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_LONG),
|
||||
#if defined(HAVE_GD_FREETYPE)
|
||||
|
@ -393,8 +393,6 @@ static const func_info_t func_infos[] = {
|
|||
F1("compact", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
FN("array_fill", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_ANY),
|
||||
F1("array_fill_keys", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_replace", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_replace_recursive", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
FN("array_keys", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_STRING),
|
||||
FN("array_values", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_count_values", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG),
|
||||
|
@ -403,13 +401,8 @@ static const func_info_t func_infos[] = {
|
|||
F1("array_flip", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_STRING),
|
||||
F1("array_change_key_case", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_intersect_key", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_intersect_ukey", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_intersect", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_uintersect", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_intersect_assoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_uintersect_assoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_intersect_uassoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_uintersect_uassoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_diff_key", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_diff_ukey", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
F1("array_udiff", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||
|
@ -428,13 +421,12 @@ static const func_info_t func_infos[] = {
|
|||
#endif
|
||||
F1("get_current_user", MAY_BE_STRING),
|
||||
FN("get_cfg_var", MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_FALSE),
|
||||
F1("error_get_last", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_STRING|MAY_BE_NULL),
|
||||
F1("error_get_last", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_NULL),
|
||||
F1("highlight_file", MAY_BE_STRING|MAY_BE_BOOL),
|
||||
F1("php_strip_whitespace", MAY_BE_STRING),
|
||||
F1("highlight_string", MAY_BE_STRING|MAY_BE_TRUE),
|
||||
F1("ini_get_all", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_NULL|MAY_BE_FALSE),
|
||||
F1("set_include_path", MAY_BE_STRING|MAY_BE_FALSE),
|
||||
F1("get_include_path", MAY_BE_STRING|MAY_BE_FALSE),
|
||||
F1("print_r", MAY_BE_STRING|MAY_BE_TRUE),
|
||||
#if defined(HAVE_GETSERVBYPORT)
|
||||
F1("getservbyport", MAY_BE_STRING|MAY_BE_FALSE),
|
||||
|
@ -518,9 +510,7 @@ static const func_info_t func_infos[] = {
|
|||
F1("getcwd", MAY_BE_STRING|MAY_BE_FALSE),
|
||||
F1("readdir", MAY_BE_STRING|MAY_BE_FALSE),
|
||||
F1("scandir", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_STRING|MAY_BE_FALSE),
|
||||
#if defined(HAVE_GLOB)
|
||||
F1("glob", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_STRING|MAY_BE_FALSE),
|
||||
#endif
|
||||
F1("exec", MAY_BE_STRING|MAY_BE_FALSE),
|
||||
F1("system", MAY_BE_STRING|MAY_BE_FALSE),
|
||||
F1("escapeshellcmd", MAY_BE_STRING),
|
||||
|
|
|
@ -2409,7 +2409,7 @@ static const zend_property_info *lookup_prop_info(const zend_class_entry *ce, ze
|
|||
/* If the class is linked, reuse the precise runtime logic. */
|
||||
if ((ce->ce_flags & ZEND_ACC_LINKED)
|
||||
&& (!scope || (scope->ce_flags & ZEND_ACC_LINKED))) {
|
||||
zend_class_entry *prev_scope = EG(fake_scope);
|
||||
const zend_class_entry *prev_scope = EG(fake_scope);
|
||||
EG(fake_scope) = scope;
|
||||
prop_info = zend_get_property_info(ce, name, 1);
|
||||
EG(fake_scope) = prev_scope;
|
||||
|
|
|
@ -82,31 +82,8 @@ zend_result zend_optimizer_eval_unary_op(zval *result, uint8_t opcode, zval *op1
|
|||
|
||||
zend_result zend_optimizer_eval_cast(zval *result, uint32_t type, zval *op1) /* {{{ */
|
||||
{
|
||||
switch (type) {
|
||||
case IS_NULL:
|
||||
ZVAL_NULL(result);
|
||||
return SUCCESS;
|
||||
case _IS_BOOL:
|
||||
ZVAL_BOOL(result, zval_is_true(op1));
|
||||
return SUCCESS;
|
||||
case IS_LONG:
|
||||
ZVAL_LONG(result, zval_get_long(op1));
|
||||
return SUCCESS;
|
||||
case IS_DOUBLE:
|
||||
ZVAL_DOUBLE(result, zval_get_double(op1));
|
||||
return SUCCESS;
|
||||
case IS_STRING:
|
||||
/* Conversion from double to string takes into account run-time
|
||||
'precision' setting and cannot be evaluated at compile-time */
|
||||
if (Z_TYPE_P(op1) != IS_ARRAY && Z_TYPE_P(op1) != IS_DOUBLE) {
|
||||
ZVAL_STR(result, zval_get_string(op1));
|
||||
return SUCCESS;
|
||||
}
|
||||
break;
|
||||
case IS_ARRAY:
|
||||
ZVAL_COPY(result, op1);
|
||||
convert_to_array(result);
|
||||
return SUCCESS;
|
||||
if (zend_try_ct_eval_cast(result, type, op1)) {
|
||||
return SUCCESS;
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
|
@ -1579,7 +1556,7 @@ void zend_foreach_op_array(zend_script *script, zend_op_array_func_t func, void
|
|||
if (property->ce == ce && property->hooks) {
|
||||
for (uint32_t i = 0; i < ZEND_PROPERTY_HOOK_COUNT; i++) {
|
||||
zend_function *hook = hooks[i];
|
||||
if (hook && hook->common.scope == ce) {
|
||||
if (hook && hook->common.scope == ce && !(hooks[i]->op_array.fn_flags & ZEND_ACC_TRAIT_CLONE)) {
|
||||
zend_foreach_op_array_helper(&hooks[i]->op_array, func, context);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -98,6 +98,10 @@ ZEND_API int zend_optimizer_register_pass(zend_optimizer_pass_t pass);
|
|||
ZEND_API void zend_optimizer_unregister_pass(int idx);
|
||||
zend_result zend_optimizer_startup(void);
|
||||
zend_result zend_optimizer_shutdown(void);
|
||||
|
||||
typedef void (*zend_op_array_func_t)(zend_op_array *, void *context);
|
||||
void zend_foreach_op_array(zend_script *script, zend_op_array_func_t func, void *context);
|
||||
|
||||
END_EXTERN_C()
|
||||
|
||||
#endif
|
||||
|
|
|
@ -128,7 +128,4 @@ int sccp_optimize_op_array(zend_optimizer_ctx *ctx, zend_op_array *op_array, zen
|
|||
int dce_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *optimizer_ctx, zend_ssa *ssa, bool reorder_dtor_effects);
|
||||
zend_result zend_ssa_escape_analysis(const zend_script *script, zend_op_array *op_array, zend_ssa *ssa);
|
||||
|
||||
typedef void (*zend_op_array_func_t)(zend_op_array *, void *context);
|
||||
void zend_foreach_op_array(zend_script *script, zend_op_array_func_t func, void *context);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "zend_ssa.h"
|
||||
#include "zend_dump.h"
|
||||
#include "zend_inference.h"
|
||||
#include "zend_worklist.h"
|
||||
#include "Optimizer/zend_optimizer_internal.h"
|
||||
|
||||
static bool dominates(const zend_basic_block *blocks, int a, int b) {
|
||||
|
@ -816,7 +817,7 @@ ZEND_API int zend_ssa_rename_op(const zend_op_array *op_array, const zend_op *op
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
static zend_result zend_ssa_rename(const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa, int *var, int n) /* {{{ */
|
||||
static void zend_ssa_rename_in_block(const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa, int *var, int n) /* {{{ */
|
||||
{
|
||||
zend_basic_block *blocks = ssa->cfg.blocks;
|
||||
zend_ssa_block *ssa_blocks = ssa->blocks;
|
||||
|
@ -824,15 +825,6 @@ static zend_result zend_ssa_rename(const zend_op_array *op_array, uint32_t build
|
|||
int ssa_vars_count = ssa->vars_count;
|
||||
int i, j;
|
||||
zend_op *opline, *end;
|
||||
int *tmp = NULL;
|
||||
ALLOCA_FLAG(use_heap = 0);
|
||||
|
||||
// FIXME: Can we optimize this copying out in some cases?
|
||||
if (blocks[n].next_child >= 0) {
|
||||
tmp = do_alloca(sizeof(int) * (op_array->last_var + op_array->T), use_heap);
|
||||
memcpy(tmp, var, sizeof(int) * (op_array->last_var + op_array->T));
|
||||
var = tmp;
|
||||
}
|
||||
|
||||
if (ssa_blocks[n].phis) {
|
||||
zend_ssa_phi *phi = ssa_blocks[n].phis;
|
||||
|
@ -916,22 +908,90 @@ static zend_result zend_ssa_rename(const zend_op_array *op_array, uint32_t build
|
|||
}
|
||||
|
||||
ssa->vars_count = ssa_vars_count;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
j = blocks[n].children;
|
||||
while (j >= 0) {
|
||||
// FIXME: Tail call optimization?
|
||||
if (zend_ssa_rename(op_array, build_flags, ssa, var, j) == FAILURE)
|
||||
return FAILURE;
|
||||
j = blocks[j].next_child;
|
||||
static zend_result zend_ssa_rename(const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa, int *var, int n)
|
||||
{
|
||||
/* The worklist contains block numbers, encoded as positive or negative value.
|
||||
* Positive values indicate that the variable rename still needs to happen for the block.
|
||||
* Negative values indicate the variable rename was done and all children were handled too.
|
||||
* In that case, we will clean up.
|
||||
* Because block 0 is valid, we bias the block numbers by adding 1 such that we can distinguish
|
||||
* positive and negative values in all cases. */
|
||||
zend_worklist_stack work;
|
||||
ALLOCA_FLAG(work_use_heap);
|
||||
ZEND_WORKLIST_STACK_ALLOCA(&work, ssa->cfg.blocks_count, work_use_heap);
|
||||
zend_worklist_stack_push(&work, n + 1);
|
||||
|
||||
/* This is used to backtrack the right version of the renamed variables to use. */
|
||||
ALLOCA_FLAG(save_vars_use_heap);
|
||||
unsigned int save_vars_top = 0;
|
||||
int **save_vars = do_alloca(sizeof(int *) * (ssa->cfg.blocks_count + 1), save_vars_use_heap);
|
||||
save_vars[0] = var;
|
||||
|
||||
while (work.len) {
|
||||
n = zend_worklist_stack_pop(&work);
|
||||
|
||||
/* Enter state: perform SSA variable rename */
|
||||
if (n > 0) {
|
||||
n--;
|
||||
|
||||
// FIXME: Can we optimize this copying out in some cases?
|
||||
int *new_var;
|
||||
if (ssa->cfg.blocks[n].next_child >= 0) {
|
||||
new_var = emalloc(sizeof(int) * (op_array->last_var + op_array->T));
|
||||
memcpy(new_var, save_vars[save_vars_top], sizeof(int) * (op_array->last_var + op_array->T));
|
||||
save_vars[++save_vars_top] = new_var;
|
||||
} else {
|
||||
new_var = save_vars[save_vars_top];
|
||||
}
|
||||
|
||||
zend_ssa_rename_in_block(op_array, build_flags, ssa, new_var, n);
|
||||
|
||||
int j = ssa->cfg.blocks[n].children;
|
||||
if (j >= 0) {
|
||||
/* Push backtrack state */
|
||||
zend_worklist_stack_push(&work, -(n + 1));
|
||||
|
||||
/* Push children in enter state */
|
||||
unsigned int child_count = 0;
|
||||
int len_prior = work.len;
|
||||
do {
|
||||
zend_worklist_stack_push(&work, j + 1);
|
||||
j = ssa->cfg.blocks[j].next_child;
|
||||
child_count++;
|
||||
} while (j >= 0);
|
||||
|
||||
/* Reverse block order to maintain SSA variable number order given in previous PHP versions,
|
||||
* but the data structure doesn't allow reverse dominator tree traversal. */
|
||||
for (unsigned int i = 0; i < child_count / 2; i++) {
|
||||
int tmp = work.buf[len_prior + i];
|
||||
work.buf[len_prior + i] = work.buf[work.len - 1 - i];
|
||||
work.buf[work.len - 1 - i] = tmp;
|
||||
}
|
||||
} else {
|
||||
/* Leafs jump directly to backtracking */
|
||||
goto backtrack;
|
||||
}
|
||||
}
|
||||
/* Leave state: backtrack */
|
||||
else {
|
||||
n = -n;
|
||||
n--;
|
||||
backtrack:;
|
||||
if (ssa->cfg.blocks[n].next_child >= 0) {
|
||||
efree(save_vars[save_vars_top]);
|
||||
save_vars_top--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (tmp) {
|
||||
free_alloca(tmp, use_heap);
|
||||
}
|
||||
free_alloca(save_vars, save_vars_use_heap);
|
||||
ZEND_WORKLIST_STACK_FREE_ALLOCA(&work, work_use_heap);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API zend_result zend_build_ssa(zend_arena **arena, const zend_script *script, const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa) /* {{{ */
|
||||
{
|
||||
|
|
27
Zend/Zend.m4
27
Zend/Zend.m4
|
@ -149,8 +149,14 @@ AC_CHECK_FUNCS(m4_normalize([
|
|||
pthread_get_stackaddr_np
|
||||
pthread_getattr_np
|
||||
pthread_stackseg_np
|
||||
strnlen
|
||||
]))
|
||||
|
||||
AC_CHECK_DECL([clock_gettime_nsec_np],
|
||||
[AC_DEFINE([HAVE_CLOCK_GETTIME_NSEC_NP], [1],
|
||||
[Define to 1 if you have the declaration of 'clock_gettime_nsec_np'.])],,
|
||||
[#include <time.h>])
|
||||
|
||||
dnl
|
||||
dnl Check for sigsetjmp. If sigsetjmp is defined as a macro, use AC_CHECK_DECL
|
||||
dnl as a fallback since AC_CHECK_FUNC cannot detect macros.
|
||||
|
@ -187,28 +193,21 @@ AS_VAR_IF([GCC], [yes],
|
|||
|
||||
dnl Check if compiler supports -Wno-clobbered (only GCC).
|
||||
AX_CHECK_COMPILE_FLAG([-Wno-clobbered],
|
||||
[CFLAGS="-Wno-clobbered $CFLAGS"],,
|
||||
[-Werror])
|
||||
[CFLAGS="-Wno-clobbered $CFLAGS"])
|
||||
dnl Check for support for implicit fallthrough level 1, also add after previous
|
||||
dnl CFLAGS as level 3 is enabled in -Wextra.
|
||||
AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough=1],
|
||||
[CFLAGS="$CFLAGS -Wimplicit-fallthrough=1"],,
|
||||
[-Werror])
|
||||
[CFLAGS="$CFLAGS -Wimplicit-fallthrough=1"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wduplicated-cond],
|
||||
[CFLAGS="-Wduplicated-cond $CFLAGS"],,
|
||||
[-Werror])
|
||||
[CFLAGS="-Wduplicated-cond $CFLAGS"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wlogical-op],
|
||||
[CFLAGS="-Wlogical-op $CFLAGS"],,
|
||||
[-Werror])
|
||||
[CFLAGS="-Wlogical-op $CFLAGS"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wformat-truncation],
|
||||
[CFLAGS="-Wformat-truncation $CFLAGS"],,
|
||||
[-Werror])
|
||||
[CFLAGS="-Wformat-truncation $CFLAGS"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wstrict-prototypes],
|
||||
[CFLAGS="-Wstrict-prototypes $CFLAGS"],,
|
||||
[-Werror])
|
||||
[CFLAGS="-Wstrict-prototypes $CFLAGS"])
|
||||
AX_CHECK_COMPILE_FLAG([-fno-common],
|
||||
[CFLAGS="-fno-common $CFLAGS"],,
|
||||
[-Werror])
|
||||
[CFLAGS="-fno-common $CFLAGS"])
|
||||
|
||||
ZEND_CHECK_ALIGNMENT
|
||||
ZEND_CHECK_SIGNALS
|
||||
|
|
43
Zend/asm/save_xmm_x86_64_ms_masm.asm
Normal file
43
Zend/asm/save_xmm_x86_64_ms_masm.asm
Normal file
|
@ -0,0 +1,43 @@
|
|||
.code
|
||||
|
||||
; ZEND_API void execute_ex(zend_execute_data *ex)
|
||||
PUBLIC execute_ex
|
||||
|
||||
EXTERN execute_ex_real:PROC
|
||||
|
||||
; Assembly wrapper around the real execute_ex function, so that we can
|
||||
; save the preserved registers when re-entering the VM from JIT code.
|
||||
; See GH-18136.
|
||||
execute_ex PROC EXPORT FRAME
|
||||
; 10 floating points numbers
|
||||
; 32 bytes shadow space
|
||||
; 8 bytes to align after the return address
|
||||
sub rsp, 8*10 + 32 + 8
|
||||
.allocstack 8*10 + 32 + 8
|
||||
.endprolog
|
||||
movsd qword ptr [rsp + 32 + 8*0], xmm6
|
||||
movsd qword ptr [rsp + 32 + 8*1], xmm7
|
||||
movsd qword ptr [rsp + 32 + 8*2], xmm8
|
||||
movsd qword ptr [rsp + 32 + 8*3], xmm9
|
||||
movsd qword ptr [rsp + 32 + 8*4], xmm10
|
||||
movsd qword ptr [rsp + 32 + 8*5], xmm11
|
||||
movsd qword ptr [rsp + 32 + 8*6], xmm12
|
||||
movsd qword ptr [rsp + 32 + 8*7], xmm13
|
||||
movsd qword ptr [rsp + 32 + 8*8], xmm14
|
||||
movsd qword ptr [rsp + 32 + 8*9], xmm15
|
||||
call execute_ex_real
|
||||
movsd xmm6, qword ptr [rsp + 32 + 8*0]
|
||||
movsd xmm7, qword ptr [rsp + 32 + 8*1]
|
||||
movsd xmm8, qword ptr [rsp + 32 + 8*2]
|
||||
movsd xmm9, qword ptr [rsp + 32 + 8*3]
|
||||
movsd xmm10, qword ptr [rsp + 32 + 8*4]
|
||||
movsd xmm11, qword ptr [rsp + 32 + 8*5]
|
||||
movsd xmm12, qword ptr [rsp + 32 + 8*6]
|
||||
movsd xmm13, qword ptr [rsp + 32 + 8*7]
|
||||
movsd xmm14, qword ptr [rsp + 32 + 8*8]
|
||||
movsd xmm15, qword ptr [rsp + 32 + 8*9]
|
||||
add rsp, 8*10 + 32 + 8
|
||||
ret
|
||||
execute_ex ENDP
|
||||
|
||||
END
|
|
@ -1,3 +0,0 @@
|
|||
<?php
|
||||
/* dummy file for 014.phpt */
|
||||
?>
|
22
Zend/tests/__debugInfo_reference.phpt
Normal file
22
Zend/tests/__debugInfo_reference.phpt
Normal file
|
@ -0,0 +1,22 @@
|
|||
--TEST--
|
||||
__debugInfo with reference return
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class Test {
|
||||
private $tmp = ['x' => 1];
|
||||
|
||||
public function &__debugInfo(): array
|
||||
{
|
||||
return $this->tmp;
|
||||
}
|
||||
}
|
||||
|
||||
var_dump(new Test);
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
object(Test)#1 (1) {
|
||||
["x"]=>
|
||||
int(1)
|
||||
}
|
19
Zend/tests/abstract_implicit.phpt
Normal file
19
Zend/tests/abstract_implicit.phpt
Normal file
|
@ -0,0 +1,19 @@
|
|||
--TEST--
|
||||
Abstract methods not allowed in classes that are not abstract (GH-16067)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
// Still allowed via trait
|
||||
trait TraitWithAbstract {
|
||||
abstract public function foo();
|
||||
}
|
||||
class TraitWorks {
|
||||
use TraitWithAbstract;
|
||||
}
|
||||
|
||||
class NotAbstract {
|
||||
abstract public function bar();
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Class NotAbstract declares abstract method bar() and must therefore be declared abstract in %s on line %d
|
|
@ -1,5 +1,5 @@
|
|||
--TEST--
|
||||
using multiple access modifiers (attributes)
|
||||
using multiple access modifiers (properties)
|
||||
--FILE--
|
||||
<?php
|
||||
|
13
Zend/tests/anon/gh15994.phpt
Normal file
13
Zend/tests/anon/gh15994.phpt
Normal file
|
@ -0,0 +1,13 @@
|
|||
--TEST--
|
||||
Abstract function must be implemented
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
abstract class ParentClass {
|
||||
abstract public function f();
|
||||
}
|
||||
|
||||
$o = new class extends ParentClass {};
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Class ParentClass@anonymous must implement 1 abstract method (ParentClass::f) in %sgh15994.php on line 7
|
11
Zend/tests/anon/gh16067.phpt
Normal file
11
Zend/tests/anon/gh16067.phpt
Normal file
|
@ -0,0 +1,11 @@
|
|||
--TEST--
|
||||
Compiler prevents explicit `abstract` methods on anonymous classes
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$c = new class {
|
||||
abstract public function f();
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Anonymous class method f() must not be abstract in %s on line 4
|
|
@ -9,6 +9,7 @@ function skipFunction($function): bool {
|
|||
/* terminates script */
|
||||
|| $function === 'exit'
|
||||
|| $function === 'die'
|
||||
|| $function === 'zend_trigger_bailout'
|
||||
/* intentionally violate invariants */
|
||||
|| $function === 'zend_create_unterminated_string'
|
||||
|| $function === 'zend_test_array_return'
|
||||
|
|
11
Zend/tests/array_unpack/gh19303.phpt
Normal file
11
Zend/tests/array_unpack/gh19303.phpt
Normal file
|
@ -0,0 +1,11 @@
|
|||
--TEST--
|
||||
GH-19303 (Unpacking empty packed array into uninitialized array causes assertion failure)
|
||||
--FILE--
|
||||
<?php
|
||||
$a = [0];
|
||||
unset($a[0]);
|
||||
var_dump([...$a]);
|
||||
?>
|
||||
--EXPECT--
|
||||
array(0) {
|
||||
}
|
|
@ -5,8 +5,6 @@ zend.assertions=1
|
|||
--FILE--
|
||||
<?php
|
||||
|
||||
// TODO We're missing parentheses for the direct call
|
||||
|
||||
try {
|
||||
assert((fn() => false)());
|
||||
} catch (AssertionError $e) {
|
||||
|
@ -21,5 +19,5 @@ try {
|
|||
|
||||
?>
|
||||
--EXPECT--
|
||||
assert(): assert(fn() => false()) failed
|
||||
assert(): assert(fn&(int ...$args): ?bool => $args[0](false)) failed
|
||||
assert(): assert((fn() => false)()) failed
|
||||
assert(): assert((fn&(int ...$args): ?bool => $args[0])(false)) failed
|
||||
|
|
|
@ -5,12 +5,12 @@ zend.assertions=1
|
|||
assert.exception=1
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump((integer)ini_get("zend.assertions"));
|
||||
var_dump((int)ini_get("zend.assertions"));
|
||||
ini_set("zend.assertions", 0);
|
||||
var_dump((integer)ini_get("zend.assertions"));
|
||||
var_dump((int)ini_get("zend.assertions"));
|
||||
assert(false);
|
||||
ini_set("zend.assertions", 1);
|
||||
var_dump((integer)ini_get("zend.assertions"));
|
||||
var_dump((int)ini_get("zend.assertions"));
|
||||
assert(true);
|
||||
var_dump(true);
|
||||
?>
|
||||
|
|
|
@ -183,7 +183,7 @@ assert(0 && ($a = function () {
|
|||
$x = $a ?? $b;
|
||||
[$a, $b, $c] = [1, 2 => 'x', 'z' => 'c'];
|
||||
@foo();
|
||||
$y = clone $x;
|
||||
$y = \clone($x);
|
||||
yield 1 => 2;
|
||||
yield from $x;
|
||||
}))
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue