Description: General compiler
This file as text.
(active) Revisions in this set:
ba74d7d3f83de24f4f9824309943a4e234aa11b6,70ae0a2dc99eb1fa4a11452e8aa1b5e133389e21,800ce234991a53d652a31090a6bad7b2f40a7856
64ad48e89ef7d164e9517d02ec9eb5a124bfd826,a21397e356b523a0c3e5faf45014f104fd64b96e,49e7e5f5129a71a6ef81d712e0a04c650ce6533c
7855b3cf1b46021b2463fcf6987f9229c91d77e3,10f72ba2c897fd03477267faeb2d1985780d6e40,578e60e6ef29dc5a082fe253ef871908154449a0
b4a7d6a82eea9ad71bec75571d7c051cdd68b141,d5f0d8e30624ea69c18c50a4e200e39552bd1092,352fb866ef19c845756840859c91088f9ed32740
c7a0022146dcba901802ed22e1b1e76652e20883,8943c0584edc3089df819481e646371ebeae03f7,4860f3934a5b7ee9242a4b90717807f55730f8fa
68bcffc3e0c358a7dc84ff3a9dfe3f12ddd9f132,aa89182bf5f55404265650497f976f741d7506df,4c0a213f0d07ebf3ed1d8309fb4848bc445bd28d
84b5129f1dc443351e7b914686bf70e9b81b99f6,c306f57ecbcd6098f8442cdb38c3a1e8ea2e13eb,e60a5ebfe76d8935112337011c7919c134388f49
692c287c3e3d006e54eb72fab484b00a2ad3a6f2,7eb9b23fa5224f9ae4f9db985f8f163a7753bd63,116f36fe56bb53c4ead4752335f07411e678aeb8
f27fee55662aef795e91eb821cf76e7ee6c4c6cc,379c2fe821cbbba289662d2db0acdafde41d29b8,0a5e6d29cb32b42dd488fd5b0c9f377e138f5d63
a47f153daed4b95925d299168baf916a65573f73,112fb4613b0e0f014f12bc29da7ed2dcbe99a1d1,2b459b30d20db31236b4fe1695865faa9f2976fe
bf4eda478d267055cabd7621ffb48ad59be4553b,18a45d94a36cd61afd82e4313142190af31a74cb,011968e74b105e7fba13f10d1bf0c35931feff0b
64e8557180e68379b17d2d1a32b584c57893ffbf,cdce68451adb2285d3333a059f6003e1b32d55d7,a092da723abb7caca19994e66e60288060bf0c79
2a016889de1ba62b9791ff68ac039843a4ab899b,59d5d6ec9536d2e2181d1407448835c5b64614fe,2a9ce2ed6cc1cbdb8623cccfbf19e4981fa793d5
fa2d82f8795c06a3964e462d5ba55ad16df5e06e,2dc64e5fae911dbf7cd67233c39eb6b919aeedad,4357caaad882705021c49bab78882f65fe52a612
a0262525085fe0ea885f8571d336a366c4c750cc,30d64cec68371f819a3460aba3d9776770d08977,9b0ff05ee812e389651a5f0be280ca7837af3dc7
0e546d47ca72794e9d3edfd3f15435fc09d9cfa4,0a3c94bc72b244d10cc16c59d2656d31dd58e34e,c9a7503bbb0728fcde9decb9201bd6a519ce2587
8fba43609d2e6a3a8fc65690f06ffda024d36752,95d18cd0525963be91fd1e6fc43864c7cde6cab9,c2c942374d35ac90b5af802a805082f596a19275
a7642b70c14ce826822d39f691b70adfce0a03ac,f5ce7c572b7488e7b53763d88cef4a8e9451b891,5f1933eecf874f23c756a3544621c0d26ad7737e
b11588693015a51d2cb70f4be4cca08cd3e4ffc5,dd6039716512f6679aacf46e24a5313673a3eaef,5c5dc2ed500be380ad85a1eac08c08536f9d1b4a
9f16c34329410b03b01ae0f66c67e2f90c07b864,c37c485eb78f7e827cf5b66578935fe32080de5e,0d50a63c7de23aea457bbbf9a979dd64870e5a4e
063415fa72d9b7e83e5f7fe814845eff10f94374,4d2d26c3183165ae27d2ced87d124f9d7bcc5f2c,e157939b4102eb0b52d0b93e05ba2f1f2021edfd
a40335de34e27666392983943ce18b4c672c4003,72416edcc465a6f9a9fea43c4219566750fb8db8,e8ebc00b3b863f7072014f469f0f1096225f34ad
6a6ea6729f4d4fd60791e504fd15e72b1342dfb5,7c92412c74ca66345a3f5284e07596c3a138f078,095bd6da7d845178545634c74cb3ee4b7b31bc17
11851d274c8c040067b6e61577f2b1d7cd7052b6,23570bed33014b272064e963180c76184ed51d1c,08d6ca72604e14563234849c61ecb13f071fb5f6
6dbde11f5a46550784eb4d288b765c4339cf3c4c,ae8304f65776c3bbccbe89f6eb2981462ca96e52,cefb38b6054db7f9978ed12b95c4c6a13cfebe16
d1361ca6edf25dd49e7184b4312b3ed050a575fd,3b9f5a5e96f6871b119fa5dd6b68d64ac6bed3cd,9d56387e7fadbea2e45f49738abc2e376379004f
ea69a5b372db2e43190cc502392b965f76290de1,ccb8e8656020dd8b550dffddf6d2807bc7b8a2d4,b96a8aee616b2437cb5c5b8c8e2d5851a11f56f1
ac37a54d794ec134ac49fe81710ba0b45b774831,477d7be6515dc3e5e3ab5e01f63828d62caecfab,c43cae9231a40132bb9c3f446463152edcc472cc
20fea3607cce1b6c0284c7b4c3c75594589cea99,413a3599c1c35857c5be27e9c61721aa072524c9,97b40dc16daccea9a2ae62cff12366c3aa197c39
026d06cffbaf1658379a61f657415acd3f43e2c8,50ab607676f8a7eb9abd6e499dde5362d32bbdaf,758a8dd34a5dd016c6cc4447d609ddb1d6541556
b60cbf33296d21e8d207e6949dbb39717d0b2f25,67fe756642367b1a224c6dbaa05026fe61096bc1,6629e72d795b94e237dea897f8526617d6c5160d
eeadf618b8320fc653e66ff4b24b58017c10c607,2109612fa3bbc7feffcae2c52a7661e65eed250a,b7da7cd654a752872057bd48ac17628665750aa1
122d0d36d61c25a5a879591b2923e1f904896de1,3b7efb5123d3f0de813c8963ddbd0c8e027af90e,51502874aff7417cdd9050b3d0e24af48aebe176
32a51d7b6247b9d0a65a031f49beb5f42c69cadd,97bc58d2488f10ba7ae2590a029d41d60bbc7245,6e453a1477d6525becb22e90764547e63601385d
6b58185bda1b6d467f423d50a326857c5712f2a0,ff002e266434a261eb65df57b1b9e2241cd1ee0f,93e39fb0cd4f769d46de1db0c6ae9b7898b7bcd3
820d2f7135d7160dc85370c27758e2f1f6f3eee6,95171a1e2281d494c706108394bc0e695dfc1461,e69b4d2d9a9e1aba83c40a2b92ecda28c4625b44
ac8411f3cf29f0361ee963ef0d08d84ff85a723d,8845f4d1ce390679902873a611f9cf0e04e5b185,2330164ee2e700dd8e651d7018d2836bd722afed
7cc7268635512a76eb3f3473e6ddfc454ecc2294,c6bb85eae998ed42c242a3d5d7e24c2bf3231460,3b4011760a1dde45618b9b48529c5827d4eb8849
c55ffa8cc7574d94b38c7b5f7e7d41cb467e4578,1cc995b471f0e708abb9113064877d9a01a1d477,4f72edcdd59d7976e26aace0e6c0a393b6c4186c
f87304f5caf5f9e3afb96d339d12f90fe5dd9772,b1b559f2838fdbedfd399789c2a34405d0e74f91,dd290884306f9746c1a60a6b85f137d58bcfc759
eb769e3859d33f1c93f4870d97be243718de50f5,f3d831b480dabc787b9126e3929c7fcb387a309b,c9a7afe053a4feca5188dfaa57d2e42075eb48b9
70cadc76948864526b147e46052605cc7a69377b,f7549785407c1ac00df6addbf3c7346ef877debf,b840db72284ec707b22636aff5d36d84ad95a228
7f5c2fa3aae4273980635a703db4fc4c8fa828c4,a7c347fe567eead26455fa6be3c579a227673362,ce81e509075e2a186a2d9d854d1bddb891cea6f9
9c03c298567dabc027818e995fef06682e91a226,9a797b9f494d723f8b8b2286fc5db0338f63d98e,dee105654693cf7a8da064d3a2530d9436b07fdf
df598f186829a7074edfe4c4024c89e07abb2668,f6e32ae90e7aa852390174ebb5b8aca0392bcf25,bd4b7a6bc420196d0e846b5f058033101219c2cd
a2cee252e85a2e04b1e13a04d48060a3d8135889,4d03f3a65e9da5a7d9bd71c0b9d0a1090cd4bea0,a72a12eef6133dacfa6d0a93ca8de63a71e92da7
e7c4fccf41056a5695f6aaf39c4b12df95af44a2,2ba239ea6d1474f2a6699f725480bbebfecfa005,10ab893de389cd0dc689ee4b038fd07487f5b0c5
1d7486748a27010e304589d415c961435d3e0812,51e68eb302c8f7fbaf95a04162bf79e3c6de3161,1b16ff3629c51a305b9808e751456f7eff1a5df8
b223d1c3048a22c1d2bdb3e8d933414e2843a737,644c47e1213118690d78d593a1c217335215fb1b,6c82b2d1daacf29cabe1d6c22be050f12cfa3303
925531b99c1ffcb99a838a3991005eee827bfa9b,94d7a02fae1d06a40fc9313f7e42323f97d577c7,75a89d21159b3c4106596993f938b77e43ee048d
4f0da5fcc3d4c0dc053cd88b1b00775b22eac668,4fb7b5d3ffe403756478930a33574f41d05af580,8d3d5276d74979c670c7571d10d698ba09e5c9e4
cfd0790f89641b4c7b98a24314448ea5ce6543df,24f6cc0da52e0c9f0c5285c7961e5b66b6c88891,6cb6517411066233d517a2d97d1e0dbdaa1255f3
c7bb028d35b0db4355ebbb7d97cfa3962db938a7,597a23d278f2c870dbf0a5d7fadb83908b365ce0,d1878fe5b21ed2cf39dfb22c5197d02aee2a49ec
6c888949992e530b72e641603d5200b2d3f57b9b,a186f484427dd09971c4b5c335b3a7e807eee796,4db5478acc409c6070e38152b0d24b7693c4df9d
acbf7d15c494c68b0f8209ccb0d041c8dba351f6,afd4599d26c0462c59d0e9ce9fae76a47c6d333f,2f40f818907756d1dc844bf3a5c9899986a3aeaf
04d295f1865d6c011d131ea4ccfb7dd1928ca758,4869d0ace9883ec2e0a4aa9bcf0cb63070df81e9,9c3e9e80a3e9aea5136c0adfc5bc8b41b3fa689e
2d01fe76f6debe1369ae3a345fed259282e0cc10,e52cf555ab862662622817397df755cce1466621,2b6076a719f4671b7bb838bb3ba8bba19f1018d2
6c87b89e45184fc5deda0c5af0e4ad9bd476776b,503ea604f33b5a7dd72d7a6417f9a38774f19263,f9668f8c037b6202cd558fc173ca1c4256a1c6e0
ab51e8637c2a8879c3745dba029b57590c279630,8c362eac67df688f6c1fc7361f0d5c06a78c02ab,da0deae9aee929f3ccda08afdff56bc931a19e52
7a65e1f393fb3ef10fb4ac15865703a39123a8a7,353be907c76801e05832396087c5b653b301d7d7,7af95cbf063d4634f3e566419cca85ae6823b16c
1abea6451c7faeb0754df984102edb34066df709,13ce27cc1d4a7b148e4236d1a9c2d7d0d2f04071,d4e059bd41b62841560790c0051c9c437243cad5
e3546cf5af9cb17fd98cba5fa50f54ad16e14c9e,9a3ddf650c1c150039b2f63fd84300eaa4f1ac81,fa4596a08f2027787c19db2978208781828760de
3e8c7f66b71cf633a74971b60150d67690b43959,3a43ffd57bc989d3e5facb1edfefc49cbc0f18d8,382d5060a04504cacc56a365f02100a65108ad19
af36913469cc49f412cb38dabfe52400bce229f9,1a559f5c608c31d1b5e11e99076f5b8b9da19dc2,8b9e90dc7a9c45eb6d0458daec566d8064e1ef52
4e5f48a25ed461106a250314f5210f160aee1199,bc77aad3d935e43807cbf349ad3b355508a961ee,e829596750b6e556b5104bf2308be97cb4b1db98
a87a7270d5fa1ea935e2a5e0fd411061e3215263,607126346997c1c34a825017a7c00d68c4cf72ed,bead1f81802eaf2f58a58bc4181e29575080d492
08791712d710acf57282b09f0846b1c8d27b9c5b,7c4e7d6bd3d7df2117ee4a76929746ab68079fc9,a277a5f8db6a078f981748c1f73b8cb43ff36f83
9f88cae771bc3bc99e02047cb1719aefc64480d2,e5c2d13671435042f61ac84d9634dea94f00af57,4da16992df594235915d715c8bc83f53e87a1f56
039aee956804015b1a6c3b07c203a4bf3bbcc49e,a04e4971fc3ef9b3bf5adf3dbc2a3b97de28b287,c7834af3545959d7c104078eefb568243cc71876
075e3da334bfc9788c2de0fde5eea479afe9616f,f78e2072a193a49660ff8cd07273cb6c45b03779,62cef8eb2b66c464df6ae66827e090476bffb657
973741c9197c2b3217ba10f5058b7a2c3377d1d6,b0535d8d0fda36ec637e31343fabe552e8cce954,ed2ae508d090338a706418fdf740bc219b614776
bde560dac290929dbdf0c8df20a9c7e1f4dec727,1bb8bd471ae32a1db840b975616fe17e9653ac2c,5358851f84b9fb9af41df6290decea1c5ec7610e
2c1639003c50bb82167036f7372eff8100863a42,0b61b5d4cfd624402797619075436c57e0da3be9,1b0b81f714555cc0726f3679ddfbcd55c7279db4
927fbc4387efbde9bf4865e9e304385026e4ba39,349bb2ff38a56baf6960a0196326aafbb1aff9a5,2b78a8fd3dec629d91b9fb74a01d06d904384117
53542b7c5ec57aac80fa55eb4efc9c85fdf33129,44beea91b5b4b6a43d55a215cc7281e042f91cdf,e008785152df10d7ac99ff2a162190d2f39a72f0
b9ddddf9b153fa5178118319c4d245d20d24bdb3,33d57ac646240541aaaed7307758d44eb93ebc7c,8d19bb12a2326177304ca963f406dc9a90961cd4
55aeac44f0c462bb66b0025884316dd13ce033dd,213b87fe91453fbca07dacff506b7687e42494e1,97a144ea6abfc4deecba0e10786e17519e1c6ce6
079d616978f27a05004218d3fd6724ef05b5e4e0,5a5b47fa24520aa9275ceca1d20a36ff3b39485c,f76cde1c4c5a6bee8562d5b754dec8e9e99d84d4
ba1b4b1c920a86bf7f8c6fe8777026e0092a9651,b291d17fc5e3b53ce4e8cc5f37d6f9717a9f2288,cf9596421bab9d2feb295e2bdbf013195a8061fb
c0f064a35ceb3a847e6f976ba8879bd288bd2cd8,2ff391c25c763d3aa585160c5643293571a37e29,7e51c5e8561c905ef0041a993ce933093da43798
332679e28aabacc973453b31ba062f4141e919d9,8ec3cd6390b6da0f42cb4cf79fe910c04dc9dd5d,47812c8a3d5e4689d16d577507214929af857ff4
eb0f02348d240a2f68c662d83ab0cba140954b4d,4c34b7b67d9869f889d9b62a30cf2bfe1231d6ae,a418dc6c912099c870db748c09be7bd87bfe199a
aad87820e687fd71d0c8f87b559b8f4b367df657,dd418f24b594340b84eac3805f906c7dc97e2b7e,77658b925bef93b5ae127e686acf63cae731b234
9313ddea78051cc7ec69710462dc2e880080a1ed,cba4aeaca5dcbed78c85b804ed7a5bded119446f,322a717c446f4cc3e53966e908790a87cb309d2c
750567f8e36edb9af45221299f76d2e33b1ac8bc,4dbccce43c24eea0f0e9d97e66ba84ce45a40e6b,ded3dec22af8e83e1338569ca7cbe6daad23d3f6
465e8a99e00aef67489c91014f6bf2dcd67b4545,1dee4c41dd487adbc3eef94ac974f069deefcb6e,17c48694a50b69e1f8ae9f10b878a5057ab4b02a
fe99252a9b71bac16570c95e54f4165312d12fce,4239742b35471d8c36d1dca9c2bec527d66c12de,7c02f2b5314b4527db41eba28860ac5e121779bd
2487fa76056397bdca5711c3360bfb27f0620b4c,1e07606cbfb0166728c305cd73d35d28a3d9ccfe,4f2ab3fb1130a34460f5a2c5c0fa8db24d8f036c
ce8ec3ab5d5d8458b16c2e19e2650ec16822e542,d2b3da1f145484472d9ab905805715dd55a8575a,697f2fcf755fa92f67644acd88b1c1827c2ad8cd
dec03b5ac7d43c9462d930f53a61a6e1514b5b08,73c88619293407e62f358e0442389fb3cc10a87f,a9b015911dda052989f7c64a5604314a4cdc07b1
1474db42e45589fd8ee3f4a060e7efccacb4e7c7,7871ccd0546ee221079bb9f5c173d6d3eee4b23e,d3c3f2742c87a5dbd6360e5e8f4cbfc0d72dadce
db1903f45d6757f3d18799002df426b66fa4a0d6,9eaa46f7919d676acae31c785f8eb35b00138a1e,1f3d5e88653a37b06dd3de08d68b2083a323fc31
fe49522e6fbccf6fda941da340818b23e29dc1c1,cdd2ba1a4deadb65f70f19db565c8136f6722885,0db19546efc81de7638ea76bb323d00b1b8ea20e
4f3a5cfd1ee6cdf21242bb730c2aef6c1744610a,9fe80d741686ccd0e1ad78be9af35c82de80a4f1,85684eb66d671df344c3395aa97ccd3ef591a137
eea3eb1a8ec754748b565690cb590f5c0292da74,cbf95aebf44616969cd12b1f3f3a984b1d9f7295,fbbf1f4f1cf29d23bdc337dcc7064e5e69aa3218
749c4d4e4724910f52059874df8d6fb12111a6d3,d80dc03ccbaae1a432356148b88f20a36a9ed72b,5d4af28c0ff54f1b7d6d97f35a55074865612445
d6174499b1fdc948c28db191080da7f144c93d15,243c967967070429195b93b0cb51d2b406badb4d,7ef3d39d93b8a07c88d5359e7d40bf46cecb6614
a57899323426c8e1d5cd5ae6bc1100464c1f1ae7,982a870b15184d033e72efb19b743947c43a8db8,c425c51963854f592da4b9dbccef198959619cd6
98f55b1d8605ab1e5828d3a710df8c6e1afdad18,6b97c712f69b190f2a9139d829fe5741d4430c3d,0a91fcb44fb7cb51476ccc0ad2bd833d1f5af8c0
789f13eb247ab4a811112b430d294a4bf70b9c44,cc9f8b7f5685e205695165386f3d262b0c02132f,40f6a4ea3c36aae0b4da2e3185b533826286b089
56acdd3a11576ff9473ac42b59dad47ee2f6ecc6,67cf63049d4f37852306f5be9681093c5e760f41,40082100e1f688f755fd6726e01162fbf2af3c6c
a1a17447ff3d95d0145d4113ad563f7360480a88,0f57327bff922d389dd7534cfcf29027efebc7a8,449a14dddf92a0a45d0e810ba01d482ea5f27b9d
3fee990218b4648ab020d85f783959b1d8fb0dd4,e56b58c2b05124558bc3c0d18ef1d1c48e9b6d01,7f772683cb0c265dd3c8f84d5e2ee38c73e24b74
0a94f8fc085580d97717c8a8f2e19a9a53a44aaf,b2932393df279c6856cb7fbc12a389fac3de060e,f91e38d1bd3ba024ff15a4db488e2bd2d69f9bcf
84848df18d3b351fec0651a9873128553e84e522,39bab2dbcc3961a59542c60abd70ad73930087a1,ed5f19e7e388356d644a695c16c8c520811099fc
24c4b90343c76d18eb4fb3ae3d85000d03c321e6,ba413bcdfcafdd5ad69be04685808df1b836608c,d137e06ade00a851a5370367243c11fcc79043ea
ee940c8270c8fbdd585cdcd548930e1a6872ab55,e296b26e9ed25051d1d70504c7270f2f649f5d81,a1b556d2118d91a235a1ed365bf88ada086237d4
3ad24c9db8725f6b53e3f3250807ac850a7769a7,f1715ff337103b83ce632e92ea9425b308269fa2,62c137a6d801c5cdc3a2b9f20ea8731836523279
ab2fa724ecddafea7950d8998665d02ec5af3354,db37146f128563ea196aa00b118dbc9376e53f48,3a20178d96463df72b4357fad69838b87d0a5825
0e04d9b4def9447c67da46cfc22b8157d44b34bc,b5e6c0b98d2c04b0d6ba105a9c52a65eea00609d,99914b427931330a22b9fe9210ea44acc6ee8101
d31dd4ac7b6a7f2543c130bb10d927e8688be5ad,f9cda608fa3b891ceec7d21cad66ef75bd4735dd,55d5bdc98d787c733b84b9381a992d67f27d9cf4
71fa4d1fe2a5eaee061fb71fb2045bb5fff2db1b,5cea37425532e2ca502bdebe2acb19db22a31db9,d9d2515ada949fa0c8993ec3ff6579a08624a865
0b63e89ba290a4df67893b01019c3614f8cb8f1e,ced3885dbb54688ca8e0ad3692949eb4fc108b9e,402728239f070c34402db4a5f8f39c98788f95c9
a64a8f8debb219661633a1121082bb882d8ccadd,3a02393584b6b7e4e4ce5a4ff12353f78fa38b0d,352ff5f82ad07bbd07430a1c433d1c417b9f78b2
dfb9fffcf917260a6479ce75da4b87b733d1b4e2,8ce4f9606dbbae08b8cd9c7060ff6021943489dc,b945e66e2807410180709dd0b967e1ebe6cd912a
a72553eea27cc4a8ca0c96456e439e283d9ef972,9dbd1551310b08d5255d948106ac4d65508b9844,80ebb98431397073b582bab01c14a1555f3eb015
404b465c33823efb0294fdc75cfb8da79928e749,90bec938f6ecafc9ce36bd3fc53a73bacb0bb20a,98b1b04951f82c981675a16c2c462287ec5b699c
6d0c470a40bb3a58f2f0b2473c597d0c39a4ee7c,87458a065c54d01aa6d0013299c55d1b99d67f80,b7a8dd9479f550b99b902cf61a719bd3da44f0c1
6db674cd024f9d81069aa1e019afa101e693af38,4d6b8a6c45c5fcd9a7120754358cf94d1a8a42fd,04a50733ad9ab91ff3710e9ca24881c15439bccd
c932dfaf7058a61875276af4a7a9100c2addf1fa,d8903ce6b3af3cb3fc5bcfa48ae2823c1fc2c57c,3206ac35084ab844a20ed8d97a58048cd0b6e7dd
f04afdd5eae60b2ff1d7a1bc46bad34ca54b19d4,43b5dbf6136f053f082c975c8e8d5cb1610ea750,900fd35f4abd574488c8c85d8a62874814ea2a3b
12e63d8a2cf992f49656895e45b6c79b752546d1,145f4299b49a634827a46f3ab1c8a8762c5be06c,6cde8ab4cb9e41c81b04c310b6f0da5afed26e41
c282f21b1b4f9eb8403654abc51bef8956baaccc,217ae6e4bbd0c927967c8d5d2effcb9f621ea89e,e7fbebfef57f0cc75dc85cfa4ca85571e9ae6f99
83611b83cc9b24d1db270e1d545536c651f97ffd,aac8559a8d55b1d594ce91258d8cb66a7a3d0877,18dfdb423e18ff7a16f90699fbd840230e438bc4
6eafee72d78b5785512f113ff1330a9ccb572646,4c338b1f70c86f29d90f6af2e44f749401e88315,797e336222fd5fd1dc4f5da49131381a3174068c
db83612b2c220def234fdf6f78acd565fcc483d1,1da43f67d40dd92ea2fb1cfa327d6088fa838aa7,0b3418e9787ee6953820f6ae07c5e7b21559ccca
99af7f2781df0ba8475f99d20acef464fda91c96,2b6ee838f9745f266b22e73abbcf22def8b11864,46bac33a2d1bf06dd8fd27742ce4751cb0c12232
26acc8fb2a6f634ae80c2a15ecd7f95a8684ba3c,99f92ce5dda2fee4170b359c5163060986b4ea78,d2371f4176f73f22415c21cac3177752b7d27024
fcb6072fae11123300b6418ccdccfbc794319be8,d77a8fb5f46c450921938937ac1cb0f9a7a0a75b,83861799ae140cb032cba70e7ad3b98f92304f09
05c420fad517d77502e023c720e69428a03f5cab,2c4c34ef9b2da6a74ff850053573de7c160a9acf,d10fb705e4c39ab8c4ddd6140e6f86166dd01725
93a08aaebd6f9dbd709c700d092e2cc8aa06d895,5d01d53a962a8dea8af3a4a0ccf6b2901165cfe4,83afeb2e9374c4db290c5669598663211c86cc10
7809930b08765742aa3bb1ee307850e5a86cb0ff,6952ab5baf2bb78e2edd6fc8439348838c39f617,c32ddf42ebaa64e8cc136c8aa3ec88110efadad3
30e7406be3f112c3cff5bbbd88073ad8db08893b,8e436e6335f79785ccd5b4629882877fd13d49b7,3ebcef32ba62ad3f66c33e983b6c6b62b516bb31
1258439767d790a3cff8e567ea283340123e0063,b739d79f9ba4e096c35dc3da134db47f75867fee,2c176be2fd61a5da4520b9ba74e6d4de0e4e3a4a
868030b3fecc84668396e5536b7211d389ff65e0,34b3af7e9249c80bfd29928b6e85d722426084f9,901dde5fa58392d77b49bd648be0c72b475ac287
dbafff24fe5f38889834288c7b2b0dd6d1bf148d,c70f2c63cd9f0675a11031cd63d7ea707f3defd6,ce598c15ec5ce27ccaab373a292f250fe0cc8d78
46afcbb362df8f808307a213e72ecea43c4c6634,5a3883b1ab9f38bdc9f7ac82b62e8f0d87c93c74,d7c24c05d0ee92c575f4bee58429b8bf31eeb114
7132973847c3bd55518db8fbfcb2e410430f7150,a86623b97a80ed644ae83cc62f285bf0cde3aa43,295daf4a7fca682f9a043bf284f75c0661f9b53a
321e4d5837f7747c6ac08b58e3e760321df6b655,0c4d02ff9cc3ca0c9055a6e594c983b10edc3902,90bab63e513c3db6a75d67bef0e76304935a1b63
6d2a7a1b27c85a67ea35210900d5e5e27d8ba9d4,70b2904c48d6075c895a9d901481474cb2712346,3b08c6b0ea1c7d2a960bde6e004ee8f0d59b786a
35a4f96100870dd1de78141caf90c03477ad8758,251a93456ec25acccaca2cbbaee7a09ff608163b,1736950d58bbc94bcdba43bf1e79848c1bce1c24
d5a18f03a857c623cadf41ba2e26bcb32d9f93b1,d24cfcb31c283c66bb67c2d57e6be8d6e1fba971,deefeb1ca0cbd905cc9e677eca59c8e6c9f60022
dd9c76eeecbc3f607c7f9973e66732a6fd61f0b0,1f2354752ccda1d531faef430b0094daf6c66869,8dea445ffe45d8630f7835058cbf8283cd6e7e93
7038d18d5025accdbf95d3b6f8ddea4025542b06,7e78fc1d7faec4d9263b3551e0c3efe55fe5553d,bd168fc5520871b9b53601659a92f68568a31276
262cecf5285899bf64f3be1511692f34aeab7dc2,4b54cbea1e5de056d503cd1c195d1759c0b3c474,99b1283e2ec3b51085bdec70f7d60f02bdd98d27
3da4cf0792d73fae6a0dad36f2f58fe6f02a72e2,8f3aa926781ca9fa06f43c8394d53864a6498b0c,2d77a2c10478d1aa2d65520c5f0b4022e4280fcd
9f0f31a1e91daf920f45121f11e569328377011c,d1d2f6b7017a3ece17383831dabf9835bee88900,7bb6b525b1183a4155ebe3c51c1aefe84a2a5f78
90a164bcdac5e814327c161d2ce7dcd9e4a3c725,b7a4965ac31cdd9584e980ce3082e8a63924e0a4,238c9e576ced17809f6587d9114414adeaeb4329
f40736438cf33894a6a7b408da788d889959f699,2b767c4f8bdf972d3413db62b76de03b5ba59a7d,4cd8193c7975bb1a03ae2f9fe36d043462a5a38a
cc7e623802c1dd79578718708f0a54647263fda9,817ec5e6f284e61546c133fb7000f780c3c7d7bb,141f2403d367ec874aea7f192e8b9e1d003b96a3
d69cf3a440201fe5ff83b55f8c3332236319d0e1,955ebf2f098c47de6e3209fe55469965c79542f6,fc46b6c57c2444fd5a87915e683ba725f1a10c9f
7f8dc75604598da1d48340c5c46f471a5102e9f9,4c9a0403f4c79d12055bd04f67d9f52cebce3a6c,5947143d8fd2a02ed2b0d164eb4ad5434c335f88
24e3d95fe018bc7f6b9604d008b471855c09023a,ae953214eea3c5b8dff0255eb02167bc7cbef58d,31431d99ab5a655837445adf2fc2339d25a1ab98
6398c42a3831550ff98de4f629f474bab796c086,5edc520468a3b2594d7ddd6795a2d806f01d9ed6,5a379cc256b6e89d1031584bf2d49b1ccbc82c1f
58bbbadc16877e99d24515f7e05920c47854eac7,f23f3a4c5e194d651d180f28beb810848419f716,413beee9ae1bfed7219fdfd1249a123fab87aa71
46b4f911753672e5044af4db7468f3ffa02d25db,fd70fcace6f414013a726b5f45df78e91459befc,5d8078f6662f7dd4d24cc5c20696a5be1cbacab9
85edf1c1ebd0fcd58ec25d8f083ab5345d531bd0,c418d63c16021b2bcc97e6c5e621acb6945445c6,867df5362c21a89e6aef76d32f6f6a717d80c9e3
ba0768b6a6156b8c57274978ec072111b419ed6d,0a0397c9f5c30e67ab1a94e4db4b5cde8288b92b,3a1ecd4f167c06645577d18c1ffde5374b8ff445
0224d632f1fb094078200318febb294e828ceeec,71df2911da2124b7bd69428bda51dd6964e51c5d,81fba52adbb01bd7265cc598200456d2367f5167
45847da69310f4b42a005119be640012399c961b,663040a666d46d3c47d40c70dd2a36ded405e854,ba203c0564691f1637798193368a292f14b9765a
970ce7f24325e13a153816d8612fec071e1e674b,9230ae5aab60d4e085da647271f2e77779862251,4f38f12815c7cd5b02c1dc987dccc248dc442450
3d5ab366e1d6d2df5ec2c6edf3a870df2a0213f0,5d1d9858d1fc68fddd69f5c7d940f84ff79282b4,14a7429e19059bad9c62c2d2e0fabb544db17e56
4936358beebea71d5f20ee4673549db61dc60b5d,8fd0a27875abb2636a1388876f590a3a56d83b56,e7d590724ac8b26537fa90051f065a86d86bb443
94e22f1262e2a692cf1a39f1e6c47af351ed436d,3662afe93b6a35f38d1c7fc50945c14fded32d59,d29f44e1c730ca21c4a283925ec1241a096bf9c4
fd20dc1086b02fe2dab270a5fe77afb548d4bbba,9c00a8b616c42979f807b6aa818fd50b4e724ae9,a5a87fa84c08342e41d177168c616519ff01430a
69786ffe73a1247e34ceaceadde679a03e0e0d51,8ffb72ddd0ff843e830641aed26fd6c6bdc126c2,a019536cd5630612bb81e87cf98d665456076d7c
36286441b245ba19b1deb984879e173fc7de8c33,0c6f7321bfec374bf9542a1e664911fff8e893d7,de095c4631c4ab452e02f0efe665b4d5ce1adfb8
5eee29e5d1fd7b11f97871235f722b8d3aee391a,2a87b885b1c4d20f94f85a4467daae794188b473,db2875cebaf152bf1dc77e3517039a77743b5b6c
fd1d2271750c608100173ad89aa88cb9517cc211,5d9771d141a145cf168ad7570c99226c3611ad9f,16fc8c8d9a05fc4f94c0e489892f0e82ad530e76
50fe8f70f5095a318683cfd9435c5a8d56ed95b5,fa1203029f8885b25e9324e3c811d6e9b9f1058f,353fc13257104a006558df876a8a2eaf61424ab0
cc49d256ea2bd7324b054a63a5f4051dce2ed135,c3c3e99c6426da68c901d4a2314133b6e32d7df1,ce9e1a3419a525d024fc4f9ad5af6c261cd44f7b
d25820b83050c192461c02da3803cb16a066d2e1,aea0f3e667034d0aa878888bc0ff3d870a25fd2c,dcf4e4cb2c04adbd4bb299b389913c84ed56d0fd
cdafe680c2353d46fd1f00549e158a4c5f2fa8b0,58eef0a5aac53db1d7d5d7bed2515a535522e6f0,fa2e751f9f0787cc827c7cead21f3b36f12d9b3f
e3e23df7e208a0c72832b3528ed99446410e8dce,ef6dde6de305cff538f8cdd0bc4dca13c5574f4f,d14fd51d0b2f47c2059215a388a512a5c7d6b37f
9e7cf37cd6aa8d01ed7ba2c3765877631505ccd4,ff2d71869966b8f39c8a0772e108b766283ec936,9678542ba611d2c0a511eeaa844d760879903910
0fa70759a20202281c390ba48b8b46d7eee37d14,eb3a470f456c12ed78c52e9584db5bc8b87581de,19a69640883fbc5a0c0d607863a6a85673d6f8c6
435b57bdb120166870537cbe299aaaf8b86820b8,eb71d11b9914dc9b448e7d1a18603da807947c67,02deb7d954b37850bdd92822433cca41d27c102c
bd1d6f335db93b5e5912e4b60966a254e07c212a,14b7eaa46f2d80ec8db5efbd5fb71d4469002504,f6667a5143147f88a862a703d1baf1cd922dd885
56d91b4ca79540828c8af3950d6187cc210d17a2,d8e2db269197b6adbbfb23103d3a7a28b193163d,4064c5f39befe1f71d70992b9e3e02eff8f7fffd
11319353fd0d5275bdb7a36d1ccce97cc0524099,9e8bc7c93574678628b613fff8319b541f1cac21,3949be69898e3a724509357a28617376e8a339f4
b99323bb193977646957bb6ac6529e0288c0f963,49026e126182c2fa2dbdf4941e6d6d14b3b24c9b,79bdee3278415121dd1c7521cc4457c8ad3a8f25
3ae1b04d09a165e164e3697391125710604f5124,03f7ef4c6336182ebd5a053f8d962438abefc644,03dfc615dc450f38fae15cd06188dcd56b877616
cffc69ec1d0fd94be0ec1ab6f54302b1d3158371,988dce14c7499b599e7a707a88941c43a822a931,abb9401011e6985631b99c28b49a8c1053b6d886
c3f4ad39a3d93a445a490b963ca1015d416db6cc,16163b74ec9daf00f87075afea385e54f9813e5b,7ee889d4ecebcdd72887fc65961bd4a362db0dcf
a2d3522812a74b2715191f9d447407582fda6951,df4ec9e8e3b59f70b37bb762f50d37725c22bda6,8ecdb2e9ca9b32f1334f237612411e7e17e5d1e6
35e11cd6d4df412a4a193e63b09fda3c9ba910f3,245b58c249b4b29ffc54e6c1e50a1474cc84f7b1,e0041a8244b79abd964007b694f78a8e15bda682
29bdbdba95bf5785005d668aadeebf3033d3e29e,6c29ecbd1cd0e51977fba16d6ebb09ba32f4e520,67fc9a7853918631155a509ebca0983100e613e6
00c2fd40055ff5ee214326de04c594231b9a095e,533a1138857ba2ff5daff90e569c521483f2eae5,5573bee314cc43d3eab0cb29ebfacd0898f7b453
bdcda8660eaa0f02365a9000a55c7ad8ac3becf9,33c4a5dda713b26acaf35da6ec913ebde848f54b,626ef4ae0ccd379e74fc660f914e5524952e6c7f
9d765af6932467e439c8c850f43be86bb40f0ed9,af8783e8d2d8312897ac6406b2ac30af9b6c609a,e5de269664c7029770bb2e4092cd28a9a31545cf
7f8800eeb15ef2db9dbe43b91db194b0e0d0e53f,e251c8e2ab3909dae2b91253044e8be67a00f6fc,e80eee5da54e32313333c2ca1f6dea016bb95c27
e3c6ef21d101b8f95dd6d410eba8990ec9e88845,ee3258c0daaa60b9cf3c12e06317bb17ae886c0c,cb9f569906d356aad9005ae1f22966c3182d4452
fa9c7a92c78fc257294bfe2c9e7d92dfdb69be18,7e5bf5a9fbc07b8e2459545411ff41499679687b,2d2015144653ffdf597df5a9f24e78a1d11941b0
cc703a9c59d1ff69db1349257be86eb7b0cbeb16,421b06affe2d3f2a3ab174fb60934feb9e7c11d3,31e5b2d9a4e1874058b586667429956b61a46101
b7f58dd8c8eacbbfe8aaf8632b6617228ded7485,cfec7251954e78c5e2353a6f842bd269582f5d96,59d300fc6ed13237ccaa37bd2478fd07b1588a25
172a4a999bfa8f9d0429bc2e41fe363a778d8821,cb67577002b81669c34ab1edda2df068058b2334,e19eff13324011b667e4d1b85cc521b8eecb8eff
f481587bee170e0545df260fccc9c653740e1513,fdeaacac21cfa72ea0148158fa8da9aa67035881,ae04e5d7f0c2527677b7c4ce6be2c235a4635c82
c6a08cdc6e57c5dff6b586c40ad9fefe8c2f2a5b,c3ef42b164cfdee2dc5dfaa5b2bbb7790799fcbc,f9530437c2fd229250b3ffc48c0536df3456c192
3487c34ed9a2c87128c39bab5a5dcd336e5ef66f,6842c5784d5a6b21584bf26428a01457c21c60d0,1fc7667b3bc86cb83ffce20cace69ceb679a269c
20a47afe13d37f5d4f77c65f3437b4849f5eca48,7d12e8cc6dfff734632d92f9f6a8ca824a7c6cba,ac1e0f96bdf26510682788eaa26a813cbb80a7ba
c8f746b88170196adb878a3166e566be1189dc35,d275e7a7e658debe32497a50c5e49d61d154b294,f20e6ff323dce8717477f7d1cac6e70ce0c07b73
40bbb28fd2b877cb94ce03b5b0ffc5f45760a83e,137f392c66a298d58a03c3ca336470e5a5274efa,99ce957111b021c5739d96df65ebb11fb274e71e
79dfd9fb51a82eda8f6469a6236a78e7ba6f7f6a,88a8871c622794893012bb90c75253245a945d35,47dcc5b05b7d41ceadf0a7b10a5f6867ff110df2
2d295a381642e32edbbc08e206453d9251753d53,e1e89864620fe33d035b7987c470847d87b808be,7747c5fc27e6e23247c4d200e3d9fd4c060b9770
4b455600b8a6c98158383c01cbe818a3d80df6d1,7464c880034a94a76aa06cefa0b1c4133d8969f0,5f3050961f57c1ecc58565e6434ad93ec44e14ef
2f914ee2d89b64e629fa93132bd1ff126322b223,83a11c2a7daa26276316ce7cd2fccc7682532213,1d6e719e381c3a58254f3fa6cdf2021e630d0871
5c0a5b73c7cfade35d402e59bca06c8a6167a3f1,7ee0ad4d639e5a93e73056c343e792b7b03e6d1b,ae6b204c9492b9e7b369239b91af6a77fe998c60
9b3447a6a4cd9babd4b870b4f903bd58e918fd74,6bed497c7c3cba3bde7cf91a4544c67e90b041a3,e1433adc2e40670f50d53cbb7b20616728923478
d82335bf9a833519e0b140c666e7851f6afdf226,0ab0eefae0d359b976d1db4ec81ef5f3709d853e,632f13c47a1208c1f3ea5d05f880aacbad14bc70
87b3b089d6e5cf75078b21dd4a389b4609e2ea04,bf24882c33b971c1bb31effdfc865ec6d67eb692,d4f0658c0273c43dc0e36ad62c9aa6935096808b
798a1b62192d72ad565d4cd642df9c4c0d9d1664,a969097a8098a6f34d6d0797c9d0de39d9fa2d85,13ab35e3efa733623f0af62b3f21757b4de8e481
851accbb4b332cc720d4723075d8ba42bfd0d3ad,52cc02aa3b9b9b4987a724423789e415c1727fdd,60b329659445aebbc9468dd6e28a4e33124afedb
91f3f022fe4d75b8fd44c115e5863039d09829f7,7eb0be61273e009d716df175d8c321dea5230859,f505822ab5f7702187fcbca8fa5511236fb581e1
40c54e9d37736815438e236c15df0c996b3d16c4,da54d0e8f7efb83515a85c84b49c9311001f777f,6248a127cab04750c174f58514f492b759bc7553
a61a0cce4c96ba0173533319b973a48ebf0e53e8,ff415ba39c27148c52edca43e145b46d4cd4ebfa,61bf55e0fe5ca647824e11ad1254691af65c52f6
f5caa9940ba8869791a45ac22bbcaa461282b9b6,04984e9af9c5105b0ebffa308b2b8f97d72872a8,276f5bdef86a1a6edb28d0fdd58685365eb357f4
f13200d68b54786abd242bb1b0de2f1851386add,f4d96906c2363c66ff50f2b9e526d64c37ccd819,85637ad5fad7b0df35d26453779b00726966b164
6f584333e57f4eeda948203e5e2cace032ede931,6151f7af29ffb7a09cca8e6d49d0fce3eb564c46,da1312698b9f05bf26fdc7ab73aed647849b06a8
06fc84037ce1b08f1e26f4e571fe6f8270f1f4f1,a041f899d358832ce9e08d2111c4f26143ae8cb8,2e259ee3cc5d72202d207b5d6775974f791bc4d8
0a915e883ef0479aaca0db5ae9b68c2f17ecff34,4b3ce0c02359b0596f8099beecb18b6804a7bc3c,cd7e3f354b0c0658929aa8ad3648df80a0b9a0f0
f28ac2bfc6424e5eeb9c3acfbf5df4fcd8a6e6b0,1e66b2464a29125b2ff9570e4af8f453574cb409,2a1d26cc905b54f2880fb3f2c51c32a300f32bbe
bb3b1b06a735f552b0861973710a6dfcad99ed98,40c11baaaca151271e95ba91ea6973de369f5bb0,3e9bfedbc44836e69263eee77dc88c9b888f75f6
17c422c3f24137f2db2d1ffeb80664c85aa70602,8ea92a8280cb2ce9e847a618edfc2c65cd1ed6b8,c882828fd06dccda4ad6914fa4b71c5f3708f5fb
dea1855126c0c5ba379d386253cc03808735bd30,d444f750f9d58cd751f5d567e4e14d40f14aea10,9e307f5c3a408a44d0caefc8feeb86c1b23c003f
94b728005d2dc935ffa03fea63af09f10c5d57bb,acdff47554beb7135ab55f2de0957024970760fc,e775ecdc439186d8d2491925c11835b8fe2f082f
c6116258fdfa92ba483a20da200c968f7611888b,ec227bb75942e940502ac23d58370fdb6a7f640a,0802edb7101071b56a56ea62bf6acd2e0425ffc1
5b71ba2a9bc65a6acd50edbecaff5a1caaa5e24f,97eefb6ac3dfc18b920dd73366ace4334670fa0b,fb4b1cbf35264749d6c4dab1e3050d6cb9237620
af107ca8fee33355e8c35fab6fc5ba5290bd3ebc,cf0716123c0f1feb9e5fc84e9831a8d6ea22fe9d,7e6eeebdf01d8b666c5005383b5e087647953216
7000d82dcdcb5e061628c521d4139a8bf43ec8e8,ba73f7376f07cc32f8ab20187909bde68e348fd0,a9bb9f7310e0db16b56d31c1770b901bac8dd813
7405ae275803c25325ad0581ab3b3275c43a1010,fb33da5f412e0bfc3f36d73cc2ba0d1dc0b24000,3889529e4508035a61e270ba60ebf4b5ade11d02
4525edd9f7949c1a8b72662e9a8c77b46f917171,d8f1aacd785f7d10f6aa9d86e861c3ea5d71c668,92b0ea7d02b6573a4641d1431e08675fbe0b3eeb
4e4f55ac0e34fc39db0c76306aa4a1f8b0029c0e,06c1a17d1312c1ed5d2daa3fa1bfca294c6b959d,f2a8b8ad6a7943aff36bf84bd3cdc8c75f086027
b8a78b135c3dacbaaafc1475c1dc9ac75fe5f155,80a4a01f12de35c02a443d59af55d7ab75da6e88,ea7525392644e484d6fa0c6315f0a28c2c496408
3ced30f8168409baba430b02bd843f31de329c78,f2818bfe7afa76d1a3a7e006e2065c51d1330788,ac6e4f59c65e551801d0a6acf0f5d86fcbfd370b
2a315df80c0dcea764dd602e5152812b1cc56e12,599e2df71f6368e913e29822de9f7547ed5b103c,ef7e4f6f62fdf6ab920f3185dcc3006791a249e0
8c2aa326833e7f287a2059547cfd7fa5af59c130,a6354741e6e9d4338ed9b51afce5b14842df51df,bf5d75e5944cba197baf85a76cee434f3cd33b20
46a366d6ae0dc38d606a849e2b34ba3462d28feb,36e32ee607b644e0f2f4d963b0916b75e501e606,22ce9006ab7f5913237f44a5e4b6e088d7211957
a352a12bb42e507cac1645106bce2daa671335ec,c477816100404a063cfd386cb9ba4feb1e33585a,707f7225314f14f046fc0036b8580d7a2e44133d
0f57151d36944e190dae33e2299cd838e048ed9b,5f2410b87106781c786808f3ed3e3b38b574fe13,1779011ab4dfc7e883f49a837d311bdb59fc789e
0149d26adb6aa25b60d995fc88b8dccfc0f29880,30927039a6f2cf056aa57b69534cd90a70576581,8465710329a692ef64b2d88295b9d532c0dd577a
b8b5d8410868bae9efc28c1692b0bf18757ea049,2f374a37b7ad878b277916d0fe7c4d410328e207,4de6b3e6b9aa3af34516ac8ece2fd8187bd17955
cb44d7d4e2e6a9445e466f1df2ea659da12e727f,abb79553d293bbf36d93cb3f3349860deaae0560,cbec738829ee9bcb2e7bdb879d439121a06c1e41
ef878794025437980c7094b25a71e898bd36dca8,a20209e691bfe1196e52d533feef12c74cb0fdb1,1e3f72403eddd7eebe95ad4ee956c4d3863df9ce
f5833dc0482b39432519552050f9d9af6594b02a,96dfe3d03a8ce36de71970fe02610be8eb384389,b89487e7217f9e9c534ae10e24e80d86705f0a77
6d51c69dbe8e5a256704400b57764aeff2200248,1a9e246c29df8ab0b38ecfe715917c361366d8cd,114c27fb4e921df3808ea748e3c6fab528d9b26f
4ad7d552a1057da1ae1f7ce316b6e55411774f18,f59eae4f81228d9a7f06952dd15349c8f96e5162,fd0012deff5ef06a302cbd81762c3bb4085d36f7
051b9840a54206a5d6748e67b294db13aacdefc8,ccf409c8a08876dd9ba7f10bf966134ab129506a,00859420abe2f23c644087fbc9c319c0389c2e3a
9bd7401ce9ac4d02501c0638c85ae1623392cb64,f7a052f8846f8fb76723de3d13f04d2514efdee3,9bd33f7a45d5f62d7be937a3c3e17e8b7dbe8abc
67dbd0cdb3aa69292536a0343c718b4f90872ace,b355ba3d39870b671be98a13cfe64a571a4daf1c,797077855ee7ac488a555b7ba65c615fdb077359
a6a17efa42d9de2a1206311b536b5de0487e6a67,3885ce98ac05b1372ecd5b8895ba323d925cd34e,6fc79c7ed04c57dcb67a64c126ee960fccc7370d
f6c16323fafbb73c37f0df3a80252ad65fd46e82,d409548842031d600e52fc3871ff71bf0f830512,9b53ed53e3ebaec026ed20aef53cc4856a76d55a
1f5efe2a95174c9a72f3f4e7884dce0d3cad441d,ec0d98156cdfa010b029c88075d56e414db885fb,044d9467820ad2c79dc6200d8e36848303fc4993
e1d9be897a01c86262f7d39cf1a4a136d694bf9d,ebd674d40e107e4e8f093b4e28e067beea068312,1201cc024ed4f14903cdd59e26a458985f8621fd
451afd6e45d61fcbe6236803fb12eda7693355d0,7da6bac960893bfb3d690258f0fc11472c0aa1ec,3c16324f8065a20e737028144cc624f6d1834bf5
73c6cab0961f0bffe52aa6d81985f56d08e2d654,a34ae2261a45f4843fcf8f257b1a162b962ce88f,22cb46fca9876d6e199beffd0a68e2e642b8dcb1
d3f3f81e1627ca65878c1539e0dcad32de5eb382,76e7833a201b8de2b67028606dd45fd0ad972e79,fca4d3315bd3dce1f2013d66e2652bd157c60de7
11784cb76af3bdd83a034ed09d524eac48b39e02,6371d5f26d849975c0a6400fe46c153327603796,ae0ebd1e9326f2c863b23eadc2f0a24b1c007960
6612bb44347f5b978356417125a92a715900236b,9b68c7a5f5f0da2e43119f5845b60923b09ad801,92671c9b85c7320c80d6ded7727718ea94047e41
3dd6a8e24e228aa6a8883508f4eade692e088726,872c22842ec17ffd691eb365dd4d956687f4ed7c,404c6e0c15075a88a0128327e2d9dfa4449a0593
32be078ab8c2c1c7930d48b5b2f8552178f2066c,a75247d9b0f072cd37310da1d3a47822efbc77a7,9462d6b1eace21998fcc832fdfd343479ffe4ab0
31ef82b9c6f18e699ee8a9fae53dc5c257456119,3abdec9c953d6bded0f7200e4392c65a61caea5a,7a3a4244d105e3b32d79b52b692eccc62b362bb2
11287f018fbf940beed20d4e1c0c09f9b872a006,b5659df4251fdacdd80697632708689cdb64f8a5,f424ae392999b995c51a205eb14a183add9d38ac
30e186be784e320264a7b422e52d8541f58131fd,6f87a572affeb8d5a21d9085e986d98933abb22d,2f2b378c0346142566dba0f71a25248b651ee9a3
a9a711763f0f41b97f806beaa2509ad77ebd7542,aabd7c721783ea8db3983568e75918d5b8b6db2f,007df5d0face645c15ba7ccb1a851d93c795cd44
236c11ef71f341e9038730cd56a2c732670fbb45,124c64152d256c1e62a1f13103c2bf5cafb33155,2b70c64d09d8d58476034e1cee01b30d96c19e3b
5a1e6c2e914f5fefc3e5dcb848b5c3a5182b63bd,931d4dcfeea91a734cbbbb4ff28beabf8b9bda34,7cfb87b325aa1b0300734c04f338395e8d0e56c6
02c3f328a21d35ba3d4ba62150761a33d5dc4cac,2678522db552a5d377fedb1aea4983cb97ddf324,70a836c4a21104120f9f993710fb08e9525f97ca
48236401e002fef040b402ecc37844edaa13984d,4b4e316af02a968f27147123b189b04a9931ba79,069e040e49c79b8ce1f8b73d85e02a05df6126b2
16152cf948f30f16e1e185626dad97e298c843bd,fc44c2d4c965d246fc7915dd0212679d9a27d77a,4fc02d3d09b3ee04f0576ed25b5318c6690295d5
9a42625cfb4b042284bc2b789bd4d3f65ecc5522,90a40ab9ca5f0dbd344b28110a5fbe31a86fcdf5,7b4292c94e380e85aca13f6644419227f3f7034a
d87a5cc9fb3dea2cda54a06bfc4fabee195c446a,a807e185912a5ab61e3bbfcb7358e442256562ac,993144b91b468ebfe0cb0b2cfdbe93b8022e748b
6c71fd461daf8161fce6e1d4242a1e8b33f21271,74272975afea5cb9681b5e23c6d5df3e94e59021,22197641b883bf4ad288141feb49caa0a53962a0
3c18dee6945d3cc2d8d59fd7909bfb1db1cc3061,56d64b007f7eee75266dca41fc570e9286ee6e61,1486ab7c708eaa3f901a49adc7a2cc42a1081d2c
4a756a2d30b395b5d1038e3220da45c012336e96,1b3a3a7983c3553e38b1a2bf1fb3166053435b66,45ffa40b71d623e404c72413e935e1b0ef97389e
43c83b3ae60ade6916303a524f058febeeb683ad,df6516c29f348078c0f86034544445eedca59103,592df7fa5905081b23eba908345cff67fe584679
08f9ec98e597e7afe9848fff43fe06608900002b,b625afe8001b7508a131d683108a2e1a7550667a,254b85c352c92f8e8f7d4bc1acf10f5faedbbe51
6b47d9d9ed74d375c3c17b38ec215ac0cfedb90c,d479069f8c045b26678dce30fd8a14cefde3b611,77b54f501f0d1d6a45b8b3f11f4f6fec1260a4c3
5a87855b062c5cc8d0bbae3311d82eae2e099ec5,2ea35e55b199904b69341b46a3f25fcb29557f54,0af71da9cc956f8d70c81ab5dd7c3e8484af90dd
1993c5d1efb6811791df0d7d78472e383874eabf,679c4454c476583f1b28d179ceb8d54759aa63f8,b777dc21d70691a94c36cf921b428ddbcd36db2b
bbcbd4eae1c0e63afe7bee64469decb6d789118f,f4702ee139ed24007942b9b463974d3958fa1bef,3de193467d7d304aa1c0f3072af2a54f690eb821
12d015a9356bfe9511bbb24c05d2a9cad9385e0b,991ce83a2b5a329abdf175905196cf1032993743,40a60591430e4639b7786a1f0a3c34451bf73bbb
e7d2c93ca7c764c4a7f9764a06f9ba390a76dda1,39c48f0d0156f562e8e286003d5504baed62ea5a,c6350e2903d5d431fb53e4a5ad5d5f2e9fa9e9f3
21565c22849db95277d35ae21b17298adaf0d285,f632e2e7be71448f812fe80f5dfadc8aed22dc8a,3a5eb0ec59725106d89f21b1086f22851dcbd1fb
251b18b9661df41aa9de94df5f0fec334d3323f0,3279e6335112c042ef8f723eb1476175bbf5e48d,147559349b257db80d94aba077a3bef23409f581
20698bb36f16566f16a52d7c2c4965d6b1131512,b7afb2431c1fc7bb7e29a965503dffd9e95aec00,013491c69f6068b74240153c95bcb50be5da21fa
3947922fea2604edcb2a4af366332cea338c5907,e350264db18d5ddfe8458caf6a88ec687c3ce4e4,892454ff17bf5a12d3b7543c71ce149b9cab8f8a
2ad3c6dd97d08494ba0406b59868a5fd1198cbb9,ef3155c2eff240ffc64af5b713b545e5a0ea9b74,42324235bd7b9a00acae016699cb4f9c7e46177e
88836b467e591b57523bfdd06590dd6f58977d7d,3188dc18d41b540d6241e9ea20e918e217e55277,9989d408fd2e010dffc655e492d7882d9a52449e
27e89e07a359c9f5388dbff82bcd169823553154,93521ae8e87b79fde427bba35db6dfc8cef108c0,e50c4f6373933812d8fe57ceaf4ceab1c963cb32
3099e10f41016534a49548a5fe82e93ce6e90138,346118187b41859b88ba7c4b196493a809fd54f6,95e8992e2f2605f96187d057a5adb23b5109f163
49f789b92aed40ddeb16aa91b95fcff61b386982,c146aecc0112091e382e8c709026076038783409,4dff373feffed88c558076962dc7a9e9729033e2
2acc6337d817d6e041281c4e0393ef7fde833adb,c7b19e2fc96f01219e4664895b13a5d86ae7e120,a3573599718aad825241c4926833270091ba8b52
9bdfbc24731d670ecda14897eca0add4786871a1,684ef3008fcb26dc1318e6807d78e72942d9ae4c,9132b54b3b9ad8817fbc5bf20ede4ad947c193bb
62129db44cb6ccf173a6c2e34c6c1a29760c9479,80c0fc3c9268c59a07747f7ae88a106097c2a2c8,507fc9c1ff58a7b97b3739016838cf06f35f956f
ac974c9ab7418908c996b52499240a88ffa210f7,34be9e464331921895f19699348ef7c663dd7e05,f42b0bf6f556d1c8c9ab2bf04a5c170d62b44b8d
9819df6fe16de513a6c253b313cbd00ce4b3b11c,cea772308039d52e7dcac66ab46c1fdec607e67c,bc3131688af996b30fe4acc2e2b55d953ab70f8b
8f0376c888e2b8626f37b8c8ce00a704df869ba0,424c8a0ac0edc9a8cdffdb62687fd1a750727172,f8339a43eaa2808fe22ca13192c92b5c8c200300
6cac8cc77bd6f36cc5f312dc7e932108ba5f467c,135a88c888e24e3c4559af7fae7d2f25a668f7be,c20b27ede9fed9798af41af9fac56b3785ac6cb0
a880367b37004dc22aae426c0da8618c941d1fe3,96a712f7ff35dc5ea1e148bff113c3b347c1785e,aca97274189a9511dcb3ceb878b2984138b71f62
08c12ca4392fdf66b007ef89f4d391ad35a64b8c,27349661e08faf0d35056945bb9f845bdd4c7030,9e40d536cbf5d42a95ba8c69a15b64b5b2b25e78
34d1b90921c78fe89be27ec77cd3e61087063c06,73c68236b6a7943b8f5207a78e58483bf96a2737,729425447f65fd44cd5a47a4379dd807a8cb8130
0d2db1a11c35a88e2c24705550768792acea5f61,d0106d08b9602633c00c758c36aef8a3068cbf5e,ad99285fec1def7dd295c799935a8082f95a4715
77f5abac667cd81758ef39f889cf5107b920904f,bcbdc4ad92c91d8544741bc36dd48f0f7fab9671,30a4f667c171a8a352952bb008f7f7fc7e91284c
3189e4245d158f1a9ccabfc44fbe5fa55be2d2a8,678ca16d951ac865d47b2218af3ce8de81e86aa6,cfa9935c15439996735e322741979c4394545a64
5438bd66689a1d50683d9e1740a85c7b81d3624e,b449829a40d30c6a3de0a3cede92062c561d0dd6,a156a9246badc08990c28fda1b74b6dc4426de23
637ede68793715269928afd0f0b174249b73fb86,2c689fa57253e3940cce0c90aeb41dea25eda155,46e8cb3e49219d01e61279455fdc6778b64cd954
fb2e262027c88fcd40a1f79cfc70401bdb9919ef,b1759d9e9181b23b5298849c2bb9ee2b0389656a,2a8f2f3662e15b66ea1364d057d011e08de8728c
8c9c1d9798636e75e24410f8d18cd1de9a75e566,014785833f1cdfae202ceaf2f33b45408ee10849,2146ca3616be92349bd106477daa15a6b95a17e6
222cad35a9915a39ed2f83e44106b1c35a05976a,470cc8eb1c05f2769aca541105070c4f5031da28,662f069a219cbe2c73d727086623964634800f93
aa2907cffa51957375f70b19a613b72769ae153b,819e2638bb490c73b4f73473238aa5eb239e5e83,65be647bbd03d92d01302af29576a070ca82dec0
705218fef11b511c23a0e5b024555332e4a5988e,2a957e77bf1b7c61414c3f18f41240510f135c37,639f1c476f25339367367195da4c04e7ebccd05f
f976083e7fce1a1b274667ee4ab6a2142321ff99,5631acc401d8f2149e0a8d50732aa5e0ca49d152,47f6af4416d8ef3d46b315a80fcfd9c9f8e5c574
7e4ee79e65eae2721b5b2785a9fd3eda878bd7d6,d7126bd42cd8a697998355c31feadc86312414f4,c239ae9414d743ba417b15abcd3f4b638abdf5a8
523ebb42cfd9705ef1cc6b4614e3ccb610eb7a87,28154cebd19d30ae4f3f0219cfc3496bcecb0a22,e858343c38650d828b410d1a655116ca54cdc981
17298086cafacbb5bd61f75d8860441415fbb984,0290f364cc73f8d43bb80de8b94cf942393c8f60,41e554067a781db64def61fdce3d952d1290f8ec
db71a9428ac5ceb25078f792019137fe560f91d1,8fd53df3cd8aff0fb6875649a9d00c9dc5c3fa68,f51a893d1dc17579e99157bc5e8c8b91e9b38825
d1bbfe4cf75aca2bf00ec1cb1df43c5259fac736,a9a85711d51c890f453df4212ae866a911432458,391512546e73c8ac7687b1a6f7db65aa491447b1
b787efb7fd4c1dcc169f3ef38e4aee09d426df3f,0a40d927cb5a9e7ddc2889dcedfa6980c6a7c9a6,0d41d86dd29e5a5c73692e4acc841013809d55fa
b51f3d6e534a178ae60fb26454e49686553620f9,1f00875f8c0c8abbc0ee7d7af98b8282a4556f8f,79974a96713d98fd78bf838755c31fc44f2d0a48
3135effee3b9b61ccf624547eb4c6f9a22ad99ee,26db93d78cbf7656e49d700b123a33d10b5adea1,8e929b2879b133c1d49f9054d3a9ed5a0c7e1c39
aab0884182ec68f679c454fcea27fcdee30df7d5,5ef1ede0a4f4f63e977d0e71103602c25f8ff579,e147e191ca2aa54fdab540a8076f047a5e36bcac
a96a43d0d8933118e0f8d6224dd21747d9316769,b41c8342c859189350928b08def09ccee5318ea5,1e0640c9e99f3c498d3ce4cb726589fac9662093
c2cf21d176a9a6db501940d2cd7931f1c651aa0d,ba9e9305566658b3153f311fc09ce20eca55ab47,44d9498effae13337ae677dcf2c59e52e6ec2f4e
b033ccbddb9c6ce1b486cd21493e07b6949b02ce,4ba19f5418bb0dc18ff708c2ad73e7cee160fc5d,afd0ae44eecd5252eae6dab8a34b0d4dc97722f2
d5de84c6c52ce7403f6ea17e9330a1cf7d5e4032,ba3de67f3bbe7c6fb7dd93a4c7dca28358ada964,fa4cbc89a5256a5964460afe6a105e1390599a17
66cbee5e31091693cef12ba3c533ffea59e0c549,c1c201f93c721dda2fca9058649b51ec53df9757,fc98a0db4f917852568e8c777bb229ed7f2e53ff
af8202be3d829691ed8fde03d521581c8a61820e,3705f95b925b46ea38a795c81425d06de6e2fc5a,96a368fdf94976f59bac41f4da6c222a2833ea16
e8fabb752a5bb2506421e911497b1cc0aaaf9969,4836ff29bd6df688f05ed8f1047cb43f54ba7231,79f74bf8cbc84baf1776c08713b3659103d86541
9dd0a1f3b59c01b9901688cb77c93a86e33abc24,04f3784af5fd1c73d88a00ece5bc26566313fc2e,2e23e2b0fd526e37e53a5ed07821159fd9a8822f
759803f2689c544947533e29231cd63e42f6bf9e,f99fbafabccaac7dd1cf69debc8c983973c14a1f,1dd914ffc8989cafc9415682a178a900249ca091
b7374401fd1c7390bf675877e56e3b386492fb14,2a0eeb41dfe764055b37f0680eff6977088fa7c7,9753dd964b78619828120f868b6ad78c9679a45d
b9cc9f2e8ae08632866645ac8e885cdc2008188f,093e227edb4839157cad181ea1ca84af6ff73132,b352449eac03cc090900bfa8f06b097b88e80a91
f2d45a0e9d7d46e4d86ccb2b3bb66c610a8cadbb,4141df7fe6b1eabd4727d02d7d025c4a62cc0d64,f3560004cf486d89cb97dd144337c825d7ac0346
02ed51ea2541071642818c72552216d88aeda71c,39fa96579079493b11e2c94e2dba6c924bceb13f,71784254ab5cda0144cc92d0909533fff965163b
38c32bcada3d600fccd74eb60a1961f0dbc200aa,497ff94cb096fb436b9916b60120b7c235d01d85,d772a42375334be095f5bdfa06b601163695b9d1
4d73a9e637ba7ecb7abd2c849e5683dbe33ada67,458a6000e7c0665adcd9e55e7b09351fcbeb47e9,3d4cc7c2f663e3a4363c4f16fdface50f50ead8f
7c2c8581b7d3543cf28d8fe6c917f09f190d7835,2bae2a451c4dd4571b3ad81be202253050fb447b,3dff78621cbf792076eed72a35848b4f572c5d9a
3022927a6f73b6a74eba24ba6f941b1e78096037,2276caae243820b7dc60a7b7feff79b908d96c08,c4b66c89f7c08409f0c7d82869e473ccd84fd8c6
9bcff94e9e7674ca6b87f6aa45b5748aabd65dd3,73b563b3679e0771fe3d0f546da7695b9f911e1f,7172397077ad2126b5d59b985ee1f266d65663c3
19a9d4c4acb2d5dbe4bb14756517d3e3d85d79be,9176efbab4ef437703b08d88958ab3506accaca0,f5fc806c9d2cc3c880ff98e92f33f764747e6713
4f16473baad47661a858c77d100d8070af688941,001057b52ec0a30b4ab3a7c5888b11de9e8aff87,56ad37133e6225e2a4bf8dd07e9bfb19e0805489
5a07298ea516c581c06c1ce1b784fc3a6201159f,7125cb505c0e428110713679df6ac681bab49a0a,2b3d7dd42cddd513b70d4f7ddb61e2f7766cdb37
6ccb8b83dae165f9c48b9db693d7cdec6dbf1ab6,3ec0437d5fddb885c204ed9be2abbacee1b3346b,099faf2d2babda25febee94149772fa936244b2e
a49a7763079fc5df0be15ec3fa932015ccbbe69b,2edec13a0f2be3066ae9e6796ea7811b60971a56,7b2bd0b91766036ea7a58a8b5600b10523c5e52d
c2df0f23006ec371479ce58e37e5f1c86878db31,db19900eb1c6a4b8580f03fd57506a2592b80314,7eff3adbcb31ad65fa42aa2ea461e569fa947995
14d46bccba450eb00fda58f7be532e5438eebbcd,8ac8c79a71abc78e50e5fa2206c93ff1a555f144,57809eb922c2d9e6dbca04fdc54d3c020905df88
068f0d2ec8ee953998eebf578bcb27d821be4dac,3e29742fd9b4d483b0cb3c7bd1b0417e6fddbad6,5b941e3cea65f1bc58bc2189d6eb371b3c3441d4
3af74d2fd2a9a431d0b0b966b03d2fa07cc0e59a,dfde4def62ef9798084f4ea4a8ccd2963b9e354b,a6f1c04f22723ea2da0c5938240f74fe87552aeb
3b1d5794e9c7b06e2c8ce9f11610b479d3a55132,40633835dcaa2206cf041bb5abca51accb39b1b7,613a6e796a30c0e4ee4e926b92f7d5ad8213e817
12ef0668970c478becd1661e2825d0d0aa2cad3e,0cc592e9eea8cd2d1943adb20db14fc32d5a64e4,61358b1eaad0f8b5e605d58983b43c1864a38da0
b5a4f8837cb7abec3818eaaaa304ae2a4c2a17d0,3f62c5f5ef62b791b22aadf5059041619e88a5a2,3f40e00392b6701dffd95c5aa1cd38a9a4cf9297
329710f5730f6aa9baabab10992a50435b29a390,f150fc6b7cdf797f9cbbd436ab40ba388f4328bf,fed17122f85f08ee9bd0ce89ce3fdd2860e35eac
2b59000d563d6177edf02ad3d6bdc73afbbeafba,ada6d8ce5e1dcc4c5a86f63348fbe1c50be3c8a7,6143b8b54d03b8af9704d64fb25223629f0baa6a
7f0d582a4a46297bf021722e993cd40fdd121997,531c93a04e58755dff30399d08c243602e404080,042aae24554402b152750137c37ddd0ba079418b
b88107fa1d7eca0004f0cdeb149f2cb15b711f13,7f4b94e4087a46b3c89dfb8731ddc6a0ba2c015b,e01de8098137ca8a8fe9f5d0a95d742d6e8e7eb2
55c1ecedac40f079be9fbf04cdbd1dbcecc7660d,2aa0e508731a84586222db50b8937831ff8eca44,74abe873151caecdd73cb2442631050bee0bb7d3
483837ae5cdf79f77aa935f79598da4c3740caf4,8b71455e3b43235a283b815771ec85060dedfb6e,670e77864372d4e45300e6cadbb3d860064b7e1a
951f02d188c6233ff7e08ceb54590e27f07cf1f1,60345366f254fe85417c2de4e9d0ccf8f2c85d1c,f5e89ded35caa36d5dbf0aa664c0d26de59a8983
7757306c7885c915de6620ac62ff83cc7db96f1f,a46733218725a7650c3422aaf18c2fde35551330,258331e91421c438e80c926e79833b1f4845ffe8
287c298f378202ba9e5fa38f30f9d12bf8834366,04554d7505569d1dc67bc66f64ed61251ca1c51c,f72a795cc7f2f77d88e0c41056cb7cd4cc996036
8ef29235c37f5c8bb054f134b8eac6babd4b825d,db9a284d60127aab3bda2820b952df53d4e65665,e7f7927ca9d6db490e75d66abb30d8b71a358e90
a084c8829f6375f4ce90b68d7502b8b4a1ec6145,69c95115f6a9410d7067e624db594f5c5b03e5fe,a5d36e1bc6578d7d0ee6bab5f5defeb71a21c499
491462fd023245fabbd711538a8fa57de3306bab,db1ef439b5dee9f0fee101db4ea4a7119fbb1e3b,23fc0fe66a9d780615f6cbf78f0fa955070ff426
573d69c8fe2c62d414757b026140f1afd8bea956,a506fe95602b940cb4a5baa3e448d486fb7bddf1,589b2b956fbd6a738073b760f6e7298ba08c9736
6dbe1368ef95661336b3d81157dc67710f7e0795,07a8af33b16ce3e69e7d05630bc6b7071136cee7,86e04ddd5c5dc2024425c268e2132ebfb28798d3
50c221670f87d0ee44a000b2bfe47979787f0dba,04bd105cf5d2446cf6953e424af99437327d2abc,60c73dd14be996d98af574de4ae98f99e56cdca7
695a260ff80e53ba01376beb6ec8f0d7076851a2,cfb28c765471db145c14fd64749770266205c2b2,f8c2d4a6320417c267863bfcb026ca0b3d687702
6654faea084f0c50bba9a059f5593769a2be647f,20e2a0eface9ee9e46ca52b173ad1c522402e55c,365e320119208fc45b355b96d743af7318c16b47
7f769f024b1772c5b7796b88bf21394a39cac89a,9e0337f2483a3b83187e09c55f1de6f66f8a690d,e08c7b3642a18d76bfbb16b94224fb17390fe3af
5e90aa27d5435a07a44f5fbed44b2a5009a5a0ff,d5b8e49da276f3fde5443de72e5c338fe6283bb5,552107f577ddee5ac76eb2e8ee6e17cb94b49bb3
a063a538638d32c10ee10e4f5210df43e3f719bc,4c021c100a496f2ca5e2c1d8bc8a376c7bd94516,a79d12ae415573a66f6e8f3aa83081f0877d2d2c
34112c932c36c7162f866b4460cbc3700bddc92f,2f4390ac9bb56128deeaa9d0c1a590388db9eb94,9b1eebd333fe8737fce6ac9b31b2c186e4c0849e
19c1ecda547a4d1c97887a8479ada467bdd7ae8a,c0ffa18ee246fa8079c83e3461aa02a774c21dac,cfe2d94b251692eadb8b6e188be60e5c7aa49efa
89d9679b53d03e369e22b7cf92c9d5ec1dd2cf98,871f60ef61e733b32cbd5b4c4baa9be196f33443,43e6d84f33a40cd994ea08cf3d02ce617da9d892
0794878b41a2bf44dcefb86d202a0b23ca13af64,950c1d1693007106f9c8449640ce5b91da4019b6,aa6209ab513c9c7b00c73a1d84fb3d5cd87cd5df
e3870079b223386c5f71c993b69843a64f5fa44f,a61e18091a2275940cb7020abe3a0faee9ca03dc,4d710518598a90b8debb01d145cb3af298d41377
de805fddcd15b4eaf9d92764d043d5527c30311b,b6097a0300fbdb8a1d2a18429f3aea0e384b9782,3d2945726a482fb6c824e4feb8005782b40b7b75
8d1660893be11aa243991c52d4dcea7bf4d63a24,66a72cfb726bdc5370de99c0f6524469f1af218c,244f1dd83c703b6ed07377cfa50b88d1fb23cfab
763e0a14fe4b1077e2dc03cb764bc1bed43e72a6,8e23dc99a110b33a6e24ee75e2cd71c4564d6f1e,92e86e7673c326fa09cc93c9ecc0abc2b05068be
bba56d627fd799e9d2daefdef6c6f3ad64abe7d0,23fa725b0127903999c65e5068ff98e745f8354e,27e9dde81a0738042331616aec0d3dc4f50edc43
5d2be4da1cabec726ea95c0e7e5fb465a7f9a9c1,90ee079cd15ffbffc9309fd542686680e4606f95,256597be580a279590586176daee4e9335b3140d
ab878adfff2f9622574cc7f21fa6c29ad6f953b8,724676db4315a9a3a5f26bb6e4c05f9c49f80ebf,f1f819516ed91324c3b9680dc7c2cd9f10e3a423
569c40611687015c57eae7bb15d1b814c6cb70ca,732f1d9df6b379ad8548d0b7348abf40b672aa7c,03acadaf1ee9e47ae80d8287cdb9d5ea133089a7
0d11b5bf29f896a93e3f3af271b92628f2efb00f,1b5ee0d063119990b66b0952d80ccba4f39c1fe7,df275152c24173a66895698413d767f52602152c
f2b924573a2f26c134f2da49277afb8772fc0b37,5193e8332cd0c3daf4f661a7cde271b13483e2af,3ab5acccb175706526b82a53805d2cdb77366d0c
a4695a7015b1a3b218cd15660e276230e5f9e776,7dc6049de9a13b7d406accf3fb16c649adf2e6a5,4fed57adc13e75bc70c1495273cf9caa295c0d07
58d6d64fbadceaa81b96543fa2aaa02d88b971be,3e14eddaf6137e2604fe3234da7b4721f9c3bd6b,43686720c3225b2390c413452dece43a9b4f9d39
381be050a50fa99a05b168145c1b66e66a0c7d74,6422e9a803ed33cc9208a0a375f5671b69f5a524,be26429159dbcab219f1cab5ff4494ca89aa92bd
0a0935990636b0600c4cd5a606eb145002614414,b164f5aa65ade5e2cb8b2a3861bd73cc8fcd3baf,c81f433795128811d65ee618a1e2b5a17fd8965b
6764056eff5104edaf5eef1cd8dbdec087ad67ec,11a7b8592f043c9d4f5bf98379afb1aa9bc7ec49,0d402a13419f68233a97b28919abb3dea383333f
997184778a01718472c29a67e70ceadb32194e47,0caba1e84df0a72ac4c3fcf71dc688854360d2d0,bface9fd9470d0a8fc68ce8b3d8c98540a7d7038
4aba225c8bf7e64fee347d77557731fce563618f,616cb382922c96086cdf5f9298f690af5d003429,75ce122d36626cfb3423bbc2a1273bdfba1765f8
c1d124d497149d4ffa1998e9c84d9eeffc04b04a,40504a6f9de8930c6e308427631af0ab225dcbdb,5aaf863d560f9d6dc88fc511a27bbab06ed96a23
52572e10e92018a165096c9a530b4cb7d4cee936,4f4d8191f00d34702cdc0f9b10ec90bc257fb75c,92043c6e209ba987b8326b8abd2ae9b0a5f81b52
f8e7d0bc097fdae022c6e4e2fc22ee61cbf63ecd,fc5c35362bf995ea3d9c4c5ed087da508f7fc90e,4d428d945ec6e13053cd96536bb3baad6149c66b
d5874b00881a7323897b6d80e9cea2dbfddcf0b6,bc9b8af04b6dbecc12d22b592a4e4790e21ee3ff,6753f869878e39ec6d0a4bfce351861c5f69a462
04a42bef84f38626ea7fbfb102ac949d1b819e6a,bd19575f92a952a6189349c9fef5e17194ad0cde,bdabf674e1c9cae5387bc3abe884fb1b17545c98
a316229ef67f1c58f6b33996637e888f11cf72cf,254d0c0e2c7384bb225f8376cb1fce78d4047cd7,7cda3d9e57c4cab68647b2de91179c13472fadcf
ebcae70d72fc7a381f3cebd8760e3634eadda5cc,e5e386f94ab4f87880c4358e40dbc31a22e50ea2,2a2ec77b10bf6f25093123f55616c5791bfe9eb1
0fbd418cb739d5cb4dfc4c21ce6e67e7d17dc961,b581751ef339554b63e2556db2643e421829a1be,9ce97e6ba58f78ee3132c6a9b4e252506560f055
06a728df246871ebdf1dad443f12df695617f425,5947adcd7bdd21d7acee39eafc39266ef4776e93,4263ff44c1fd7fb1c061a79b6c1d67e24e48120d
531cc0ab0d1b22803a1e5b55a4ba7782f853c375,1f8a9c708efd1f18f40aefe98e2cf3f3393cf07d,b98cc1ebfff7b107ae3429844e19a78e1c68bdd1
4abc498f2f37d6b789eb3229779f6e716119a479,05091cf0dda02c86b90f46a20d1aff82309fa1ca,bb4d7a7a50d593ec2a1676f105c43b0411e90063
fe120269595d5fd1a50660fda2f374f2de341117,c6c834949fd50d42e5b724ba4a5981ea13f9c5c3,4beb4bf8b20a899174a472a7c5a5c52c54f01bc5
7dbab3a78f0cefad954346be023db3f0460e407a,7a60e044e3bec9814d891d1761bea3445eca284f,a2174753c1a89a039af948b9b7a72142b3fb6324
1df56495b7bc2d97b6506537f34e45f46e19456c,4559620efaefd84906cb6dff08ae912c662eaf13,37b607143a8ed79e9cc4e497535970d539cb2933
b239365479351d525b6cf372e7defea70d486f7f,f0edd62b88df48c4a4d97f5038bc6e35433f542d,2c8db3bb9ebf1e76b6a30cf16f3e9ed188018d69
d9eddc50fd7d1d3b9becfc1f4706113bb49bcffd,c38efe6d18f2b49a3e6dd58b8a45019543034462,5502d6cc58baeedaa471cbf75ec57509dd3a3c51
63af4e173dc10c05c6ace5158732eb1f6bb053dd,b54d9cfecbf88fade10380b310742c78d002dcad,13028db5a4418508c42143c2574275f9d2b0f158
fcf2cd2bea510174b60d78d534d331aa2477b5f9,97efb03ae67b7035d31b89984f04ba301198b7da,af0ba7be83258ee9f9b21f45fd645abf093953ed
edcc14a5ce33716e0e51d37dd4e281c0465ac369,9b54588d75372d25f022459da9bfe131e7a23795,2808873d1bc4e9cfea75304d1e99f39691298657
afc568cf93fdfaa09f75eb0ab65d3cbaa2f628f0,30e61067a0ee062c25830ca4aa5415972a0dc5c2,9d1c81438706b4f59bc37d7f7905e59617dd48ac
15baa272fecd73081cb57d776969aedfcf7ba1e3,4f707c3d7eb52dc9199a7f369436ba964dbb67d8,2507c1ace69387df7feb0d805cb33ec6611089d7
cc47a49c81781928ec5a59e127d0040dcce8a855,88b6bbe6cc9815f45f954e955a2c0d1d69e82c62,56632b720c4b0dfe65586504aad09855984e8cdf
627fcb4354a9027f4008b793050a60e66e482958,4caa471a241bc1bb67d6374bd831e1f58687dc41,5be84e807933f3bb545db3502e9787d5e0b271a2
e76f9e5b36e164ef69a4ba68cb10c21520aba710,58af742f3a57c156531c3e46332dd558194c77ef,6cc818cbe3e70ce85c23f3f6bba6bc22f79909a4
8f0a3cfce77aee2a6a85f76c1eeb5615d45cd7f9,809fb8333433fb37349425d52b026fa43a99d61c,aa243faab836d9287b124de54ef2fe125d556198
0bce44e342eeda9f92a915132e88de456b867637,3d81c8e51d16f919680b66b71d3fa68a7d66b177,78381bd1ae37be8526eae9e6979c55c687f71d67
82a3877126afb9658096f981be0ebe1ac2d18a59,93eb40b05c4157a929a6cf9c4946c0bda6812833,afb68dbcf35ecfb9a3b5671ae481981423b4e0e5
88c98a57419e0aff7c3ba8b7478cdb119c5e7ccd,84a1f614d96a2104f99e3be8b707846462ad0c62,36323fe424c1b3e543c4706dacd3754a806e7814
e8af7427bb0ead629eea25ac86556605b1dea252,850964f321a46cad5912ceba6a7d682deb144279,362d2b50df8d28dd4f769b6c90a18e23d5edf12d
c5d04d1a541555b29b176bc2cb7e96bed089d8af,f71b6f341b7ffdc3e6e58cb60f2f8884fd92fd25,195e7e09180e7187ffc1bf5a83625162651ff051
b4de0b2e9c8ddd9dca7af3f7f24bbdd825dfd7e8,0a62e6040b062e7176b404926328281c3355e42a,c49213c561171e398d76eb7957f8e965cbf2295e
d88da03e7da8bb0ee227a558db7f18a6cfa83942,3f95fa50efa96180d5c9648b354d280090ba4cea,651f5cb8a1e914c77dfbd99336b2b6d38da558e7
2353b1adee799a3821832dff63cfda1f4cd30b2e,0acae47310dc0a6fa2ffaffe21b2544ba869e100,c5d7e6807cce2042f90ce429335ddf0bb0223144
11cc085870fb6f58eac5195496f64d9d2d7f5ec3,3c8ac8d35697b44a8caf069a925da30ed5aea2b0,4a296c9f5dc776d68c1e52443758efc52c5f21f1
8ffd7565466fbda97e7551cea9036314fefcba78,42e4d66c5e4891900162f826f868e0a177a82ab1,b2714052d1a10ab417ae2eb783b671403c43922f
6104cd321c72d825b6e28c708bc513f8375af515,3685b50e752eea9b4b5c234ced112624b15a9b58,7eb782446e41d1c60614af575f74b560320bb325
996eaf16b36c0517a1985b88adceffc75d86efc5,8873a199ec1c07867420b46d0637633801194e93,31b7fd8965f0e707d2411c82dd03a11d96a16493
c8337937b374901d58d7aa4b9bd5af7674084a19,19a66947bc974b4dd1f42314874c26348717f1c1,792cf056eb5a2c82f83b9b81588a46a6e6337c02
0e54ea6babe4b1966ded98127de92435e6cf76f4,3e2cf16d1ffa53d02e375cd9bee14d039100f6fa,d0beacc35fdf89306b82234e03d99021a5986741
6d3bfccbe3f2fd59bd3ae9247b992c43522ba8a7,a91b42bd8d65dc68ff22ce64af52a5b9358eb3d5,ad66f17a876853bed249a1fd0727740b352af9b3
788797d0786e45a34d2715d280fc91ac9a358bbb,6d3b74f96e86e18a02101971f6d04d77eada3911,996ab2feba4407d20b087817aae89dbb13a659b5
b29257fd05f4ef1516360700a89954e2f1b48506,4a5a2f5ba2467ffed2bc718cfacd963271af636d,9c54d753f56bab86b9b451c8f4415cd041357a36
da2bd5f78908e630cce860ca25fe7da8454ce6fa,a5ab1c03ea466e93f6fb92f4c8da5dec7ed24b1a,4b5c8982ff496d89a179061ac28cbd1413776ebd
3023a9f0e2c82664c26c89c15dd2ca71f7d0c2ae,12dce172f95e77e67672ea56f25488e3bb42b288,84cd9e129b2cb9a674dd105856a6fd6441ec585a
d1377777be89c2515e6769e8f551257bd6d98d53,1263880ef02c11403bb728c7a61bb557faf0138c,f5489b567809e6690dd4603154ae0b0b50c0fbec
b776d48367cfbef2debb5c62e383192be8d05ba1,b2d6c36e70cf8e5b1f7fd558a70ff67ae41011e5,2b7d9c5a1fe1802c3ecd429e6b9f6821865de9a9
bf96709e398bba07fec3462e83d60dfdb1dbbef7,921e73ab0ca3d1af0b69d86d165ebf67884c422a,e2d8f7b68fc4ee2c687c2e16497660aeda0f6418
85149ab9a4c96bfe1b9f1defe7fee3b4b6a2c1da,3d4ad5b69487e66a162ce2844350f0e57c05470b,2c053b4f9c15d0cb14be6bf39c5c5aa1143c2a7e
5f67d830e74a409b9b17d52c7005cb15472342ef,c793f4227167b5f2bdb8e27396ae58ff2bad2f70,d1cb341cfacd61705fe3a2b9e098243faeac85a2
9710b2cbb406c6fe6bfb66b88fe72906038056d7,c90f78488c5c590a17d05c3880dba5077263c207,09bd361b484806a5d45865a963d3579b1133e787
dfa736bdcaaa5e466bdf59563601ae2cfae6345c,47ba80a54525b5ef8662f28282e4ccd73fc7d698,a0e2cd36382e3ad061e54cf9a32804b729e527ba
5816a4a9403df29aa77a5ed54e02d4dcde5651d9,aafc22bd74cf83c82037e51a1699abb3517cd9f6,5f118da6001068537b38bfcdab33319d1a0243a4
b2ed667a86f9a978c6d2eb6dae48e3f1932a86f8,4ec76072b4e4a02cb94cbe38363c12014181d9a9,c45c543faaef72817b1e1d9ddc7e774f599b9835
febeef03e4830cc4ecfcda0a5236e6f6b86d483b,33094d263fdfc7c0aba42e6bb9c48d349831207a,b3817f6d9275f887b48fb10db3400ec2c3a686fc
c6c996f506797b54228c248a3784265582a4975d,62c417c8bfd8a82909eea05dc63c52661b545e67,8738b4b47f3868d3c795f94743aebe743a1ea49d
2e36783d0e4fd89fecdf84623a1dddf32e491109,a2303bd89994f2997949a6f5e4a6043604cbaa98,11fd466394d945f20de98d013acb95b8603437c2
cc23515927ef60eb3675a5626802cefbce0d7d2b,c15b6f4516adb7c8e524adc70d7adfd1c1682bc6,7bffafdf8b0adf60492709c939e24c73a0de0139
4e1e35aef550f6a05f9307b0d39346f39e3eceee,78698beaadba891b06eb4e32534e95b6fcd08c91,27943baa2f65cb749ff9d0be8c37b4298abc1c60
a423bf64027c49e48d69cb365831a7ec15bd628b,cc7b6d0b05fd4871c2ba9909d6aac59a74837800,a7c0fa0deffdb9341c31c45bd3f1918faa42bab5
221d8d84aeeea1c61d689aadc1a13017b9cb5af2,e63c03125a8b066638cec8593d96eb8eb38ed3d9,e41912b07644864a3a685ac339de2085d252706e
cb11e2568d5afb2616e29fda4fe6cb2634c1ab40,f94518a9aefd1cd9511a9816cc842e838c7d4266,cba109c55d10bf8f95b8cdd88782f109c6e1e7ba
caee96399eec1c792b1168b222b809d2b424fb57,d401639b24ba6635c3dd05718459557c216b7b27,d62d6af7ec5a5103b53b0430ea07952e36700e8b
225b06e84a29cab4fa183ec914291ecfb74ddd4d,4bacec0ee36e3f999ed33047be4136fc65aacdf2,eaa2a2006c6c6ad4502c71dfe3f7746b2237589e
c29a0d029b5c22e27b14b4a5f59c9c389d7854bb,d41f4c7c4e806156ffbec259a83016fdd598e58e,ff295bf3498bb353abaf168a8834a80c33e8268f
8f91920c9bec7eeea70b2557a3b417aa8d90b58a,b7ef93030aa9484a8f1e34196ee1e314bc069817,965964d07c0ba60f9e13c5ce1ec577be698d65c2
e73dd883cd4f1efe93cebef228c9b2119b1edf4b,9142ad8950d2e2db6b115cd43b7a9471f1ef227b,58dcbab10e05674baaf11635fffaa8fa5b4c45a3
5ad02a3799684c950e71879877469b1f1021de1a,3caacc529a4b00dacfcf3b75a0ec32305ca79ff1,ec3fe2f99029fcedf165d41049d038a75f8382f8
3655c469825be8d1b8bd81810001049aa0e28771,d9d231c87534ecf76b51ee362f8ceb1509a62e19,792eafadef3b817d59d64706b32906f5b33d2ec8
91149df87f25d472ee905860129da887fde63f5d,cb41b22fdc575e248db3ef960ad4efd449fda102,96ac7f29f7ccf21a55fe34dd90b511076b6f706e
39f3a72c625daaf370453334f069b170bb7e3d5d,87bf6a4b5680796d37efd0d6779cbd4ffdfbfdb6,166ccc49a108d29c967d0d8e91e5f4e435507b86
ac5407268cf8b160aaa714668dba7e2986c695b2,cca536a86a82719d2ffabe7ed1e54c16c92162e6,02fd6f6e54e5e947b20a87591708439e92f1c587
13afd5c6c75487336b6ecef0a62cf0220f5e015b,0e9fc31dd7c0a55227f1b360acf1b851d5d9ef3d,dfdfbf896da044c1e175bb194ae79b189032cfe1
bb6d4929d88b68fae8f0eab3c43291aa34badeaf,db250b04e05e775542e030bbf3c1fffdd616671c,3e9e0a0f7db475f96238ed76722ff083d470ec0a
59331c3d3cb4cbe05ecd209ca2c221e598f842da,043c3df292fbea7a70d7c86d70811dbbf00b1bc3,d6d92e366675c7d73713b66966af423cd46fdc87
09125e834f81eda0f3cd6aa45d51e1bfb4401ba5,0c6998bb110a06cc739c3f0657e403aaaf0dc0ab,14bc6674a6cd8a7974266635487bf09f384d02bf
667a0103573e43d1b650ef56a08a2108f498e434,57b8f28574087bde2fdca66d5f26e8eecbb2f433,5da913de0ee29c1d4f70569ddb248e996e761e27
6478a727d78ec4d0fda9522f279b1cf3c7184c46,d7122c6338b637f0a4ec5e780764104350a39dff,80facfa0bf6b866c9ca14d2222f3631f8f7caa54
15f411a3328e2f191fdba93b851ed2cc0fe008e1,a258774ba958dc8332d0d0064bf8fd4eedbd9f47,c455e942e5dd3bccd111e086d798d69b9ed4de10
b1b9d1f341feb04d4dc668981e469a0fc864cc62,34a5dfc8856ca177e6cd8848b41ef2200741f508,28395337766e49f89b58e690ec80b3a140201bdd
a5bad32b7c1bfd2b0578d7cb2eaffa71bf4d34ab,f6e6b807d5db9adaebd4f17f83b331bed1e09399,72dc2145e9692cae4667563847612df46e37d73b
e6b89c98f526394b5b7fbc197a551ab3e8229c2d,a1720647670f3e009f0543c741c3dbf46f7e778c,55c4986c8d14bc058781031f016bacda3a8a4c41
cc936710a0818e446e8154999a200a5d41f5e450,0b5c50ea413dce745a264bf418f9bc15073bc2e9,2b86651914f674eeeb61d4c9a739a4b0f45a1003
2d8873d0854df357c28def22214ba55d5f0ad2d9,941020af1a9cc9f5136668d1fd03be5aa378c7ea,42f2e5f8ad0ca44b0d13b98b98c167354645d19f
b62045809d9e996591c2bb9f2fa80e34108f557a,6f661e44d0af94fddc382f5c563e44a53b2bdcee,f542ee7b92e90fca148df15f35c50d3040d3fd03
4964f5cf76586871ef5350d2c4d62de6a9156599,848ec1d2197dfbd696b5c69a8fcb39011ec5ec56,346adf7f556fda4abeb469c173efe806cdb4b7a6
0daba072460a9e6d5240b61fb28da62c7483066a,601e05f17f1e82cd60a2b4f863f68b5f44551459,ff820247c3b3ae7ba88bf244127b6a36abb33423
e70c8985039c67cc4dba5371dc515db77b3b942d,ddea92992347f28a2f9a0043b7743889d3e3e452,0000682043decf5ac145fb13535c1de0ed570bbf
3047ce71bc0506c71e21db1725009fbb983ae3cd,06a5ec5b5c771a120f864753daeacae98f6bb0a7,c17ad509e2c3589a781f96da8128eb3f23188806
fdb1cd38abbeba81032f75edb3df6b05510774e3,719220e8a4f5b2b30bf8b7261581bf84c72555e7,1d3ed354debe8b6a937517192cce2abeb1dbc347
86d55055df60fa6c773832076cbdbd29d0e2ec78,28f25b2df0b1422fbcd6ac195a83cfbda40e4d9e,e14a3f17e6d8d6ced42026b3c49e1f6d179e983d
315819692a6a92cd1c22f7a2031a0c0f139acc63,d9db6809373f3e8ac0a0a0d0123988982dbd661d,fcf085b141dbd7ffb23f79e3bc37f52bc7b7a1ae
985220d94c6092336c956ed5dea464eb80c6c0ce,af1e6fde5c8e7e77a96f43366b0ab6a69b1d0609,bb25c604cf7281bfbf85edae9f90ecf78aaf99cd
f20c76d73baf4c534c487b2196b9291de88a3d1d,d7ba09f5432fed805603c776afb6770daf65bb53,e2bf83b5734772ada599ce9176ec4072bc60f18a
f798141d30d284a7471c1c4c5f8f2edb89dfad34,995d2d280a79c02d3889fff62aadedc74874ec4d,867786c9539272bbd6be20a4614bbd5fbd0a0a94
87615458481ea121410a7951a387694af6a65a7b,2de0be96334891fdf07966fec883e1b9c612fcdf,fb0a0cb65c41e07549813b86cc6b9afb3d1c7430
a668814613173d9a682271b4c5a85a5137c83ce3,ff34fb16455ed861cd81137997c187b4906e7011,b88d12c7b9e35798bac97672a92ed9bda401696e
f3541984ee18971ee2bdc8d8580653828d85fdba,4faea3a1869969c91c3a17f891f88a24fa1219f3,352489c397080a5acab70ec57836256de380dfb0
fab0cf953719bd6a772552ee374c77968cffe928,dc4637862ff15560c16e5438618e8daf125b627a,17d583a419b65457783dc7b816297b69309157f0
7b65f85a0b9c398dea2dd5bac7cd1b6140480950,aefc1be555590a7dd6aef6a9b625f7ace096651b,ac6f74a6a24bfb0cd007bf8745728dbd506c5a04
887de9f27c255dfcba30973cd24b1c98431d6b05,631ec771578492fefe448d4f861283f04f1a5521,9d3b105fab0d6d66192678520c14c20d9d638357
f7d14128b53ad2147e50042d1d148e4ae9de62b3,1ba8255af07aa5e3c5a75d487c47b7e97d4a2016,ad7c3d9a098dd5d354390c3497e95681b2ee0f73
cc14f066771b4f7814b8295a2f85e037fc14f6bf,18b8b9c566f597015de7e0c3a03ac98cedc2a6fb,154ada9e86cd4b6b42857d97437caedbd4d0104e
721e89fafde6662c200a5efc3d67bc5480e4386e,f26735fc778f7f1a9ce234c93f1fad5002fa04f2,a88288bab3803476bfa3e54c432f8cc3ed264b0f
b4139720e60b86e64780e535c74176676ee2b67f,f72f021da42839f838f8161a5d186becd1f21368,324deca817a97a8513ffe60bda659485b739a734
f9ddc3ac66d587eb8547bc09d33e855db16b033e,86360152650fffd6720af949cd52579a735badd2,6878ffbf041008c0300f263ec901ae645ec0414d
222f981dd17189cc46d30d248c13d9e50e128797,15d1d00c34f1cd0b913afb83bbd88486a6ca8053,075057f929f9a197b4c3abca520edcd61315ed6a
2186846ab1d273fdab3ad47a053db8bf3cfb717e,e4b717c81766d4ee4b614e4627887045a781d771,764227193a358e8e5ab83e5a141631a8abfde89a
c75953c12bf0ce476422c8b9ab4964de607bf97b,17e75004c5fac061abeecb38bd55f136292faba3,9e11f8122f49356bf6f3429c67052d95ddc0fef0
580e9e516970c6788ec04994e130f3192d5f8faf,004ac4d1f4e0d67c811fdc51d3070c0203b0c774,b267f6fcb3f3e7d7f2e99b10dce495d510863b27
4873ec73a796b55e7002e8b5971189dd9ce570da,97eb32e6fd2216cb5e284329b4eb9758720b8a16,120825d1d6976806b5e7ab02e77ef1455598b03c
5d0e1dbe5a148350b5aa041c511a5115a04a5ae0,1002a7c5901cdb185711fc197b4b0c6cee1de91d,75e5afd45b8ad8fae83c2931a7d04e66de893f7f
c69090446ae513ade58e3c803a3f1d6092b8e6aa,e28fca97299911fbf77142d001c0b905f4337711,0a34a090e0f6676bae0ed2afb9570969b37a461b
de3a479be3a56a2bcb4f43c778d735b4b95e4d99,7157bac9fddade13cb9325499b12202009d0f7d5,0881e4fd9827791a508b5ad985e6f8def25f496a
5801a7431c7f923681ab48ad4f29332ba2fd4d9e,1f073818bad405b90da52ca942da5f70db6a1ec4,92d5e613b5bc2a33c97153c0a736848b10eb6a37
5ec489c018f207fa13ef58ef1f86a07bfd93fae7,c2c7ac634a3e201575638f6e4452ccc0b1afb28a,31cb670b2013c0128101c3b4556891b48b897386
6f222e276ed1cba81b3a1cfd328b859eb00d2556,15fe9f104786ec06addb735eaa3e4aba863ebcf2,eaa7d95a9d1994bff8d476b57ae61e93cb663760
26e2759c272b992021388c1cf0685194f6d45aa3,6e777d89671eb2d303c33a31645b9529e6848d38,04846345b2c8b7d805869582e9f3b6f96fa124ca
8cc58423174fd272b2890011b5315b2d30f294db,4dcdaa259a4396078bc00bbe98b7fe2853a4b415,a45f71d0dcf5b8c9605c20f63fa2bbe62ad6c0ce
6a3971c9b631c0e8a0f214d27125278dbd6aa6bd,eee67af68444314bc1668862a77548d1c8882628,5ec101d578ec46059cf5a619e3b30ad85d0be7eb
00db7646c8b9dee96948af82c76d2aba55a13089,04baeb2bcf31735ca563e3806e7c6d4c3fecf4c3,e5a923eb7abe7a6dc063a1c297381d573418be66
d1d3d7cd089fdf840bae5269fa4655f6c8054884,ea2ae3b8f0a677dbda1288f158eab2e57379b0f4,27fbf8c91e97f06d972c43315f2fa9c2fb6d2b88
453bfcd37094c40c7baafdfe477eaa137a3eaa43,3208929e176a2e6664f803ccb6db0fa03b22c246,03a0e6e82f4c6616fe6215e8a241b9aba7b00c23
46c354ae583e0e983ffa0bca2d46402108c6cc9e,d4c9e1f26047eaf2b6a6f339db190d82a93f9975,6e25a014e636af31e6985d017fa63455312b9a98
f30f62231f1231664b155cbff22f37ad60ad78b5,f4ded560cca46d7230e612511bf63349ba4ab3a1,250c0750a2ab541cb22a57490ef1c2dab64238f8
47d6699a2ee7a439b7bf02c4b53ed1f3638b2d99,fd0515344cd7b29f9b3cded698d44cbea3e30ebc,292574f3fc2bd068c68d7fba9425954ca3fa6eb0
3eb7a130885beda849b90b73e4cb54cc3c92c711,2c00016fdde15638a0737f51c75582409eea4e12,867ed59459168b90f10f42cb7d9b2450347fe61c
b36597c76ae267ba6b245209b1bd3e14e6eaff5e,6879a16cc33d649b0084668fb59e9775f2f9d966,4407670d15bd4110dc758305a4d74923a3710f89
d5ce344b67a811e9360b47ee0f02cbeeebd44953,1e38369d06eea6c5e8c7fbda743b6af27d147a62,b2177fb50e628d3a1fccde2245428b431940ca4b
965f759c0df8ec5383a0f0f6fad9b5203d86d99a,cc315e0ac7d0022197a7b49f4473ab219c3aa6b7,23956e9f10e8bad74b4521ae2db58b2d75b9d6d6
acef1e22d36eb351e2d9e7bf7b3c8929a894d118,c2dc342c556e5fd9a6db27b7de8f12e193b0fbb0,71fcb74e956c0022724c7428c171146994bdf2ef
451bb09e8f570a00db9949f7b6e3ed81652a2ec8,1edf99c324592b9d220984f35b754ccb8b52eff9,8ef63723407a4467752d2c482d92cae4ec67100f
aea85fcd66002e9c80162781f6d9b3458f4c5a75,243300c85fb465f5cc250bc3574667ba75dd8b5f,9337b2a3acf2ffdc6a43077a4902e71e7f4f616f
60c23daa91f9ed7154c8566e86113aee573e53f7,93eef547ae2ef3996a290ad16ce73d783f339977,e159c9296703c2ae67c48efbab431db049467474
d34168742e56e3b6e9f38ac2961eec23333f0317,c8f592d26055bf2ad05afb611fc5bef0522a732e,27b4f3df60156766fee4f681dac5f3d784de856f
ddf26cb3d2aa757a578531e5f59ba2bef189fdbf,8e74a04dc5fb758057bf1cc3d856d7596123e698,c06744b62b251146be8ecab4bfb42cc5fcbbc169
b5abefe03ed357ffdc0e7c69f76827899c9fb87f,d1521e80616f2f52b6c8fa6a1db55f872e3e763c,f8b17c410b1e347f39de7d988b5f95336b73a1a4
2f21f5ae93a99d573bbfca779593100b70db1f5a,d7fe9914a79453141c419fdfa3e9bac379868fcc,7f8f733963df9d4afa363f206ee71aa50f619cf7
2c54477807cf33e8ac18cecb469969a65bdf6797,60bd9c5ba094da176c97adbe10f61d4ec878ec2e,de180d765636fe651f86a239e98b0ebb5538041f
d3e18ccb5eef80f35ccaab8f8551cdbc7acd9f7d,2ff18e48a0dbc1fa9ba54c0ce9f0bf670ddc7d80,bf1eae7bd67e6fb7d3c29733068083f66f4a8762
2c372071fd140265dafc10645cabda2080c57e2e,e83d214e984bd5e8eb4f3d64fe7c78a3dc0f38a8,9f42931eeb56a4073864ecb6a1d0d45d11cfb53f
aa75d39ab5e07a783f97247d544f774a67151579,0bdc1fdea4812db1a728171fe9148a5fe95d2209,08b61997ca9e025df4355079a3b58a1db189d736
b55c74070211d90ee90c925b1f6576b07e9c95bd,9d6e34ffc8e4776b8bdf83c522b7c10c621be7bd,ff4e1345ffa0adb4d28fb269aee7b1dc138528fd
74e83e9d8ba5be9c594849ce8ef3caab36ea0700,4de5195a9ac9a3dd0e90af7f93c717a3c6b10cd1,dfc485c4f44ff22cab66875a50e9a7e4178f8391
a4e520180f0ab00ea3d030a151081c2598c9d39e,df6baa888b23c4b43c8d083b68eeff8eedb1983a,61da70bb72ebfc5b119b836c6b74cb763740a4cf
1fb7603f615884cb678045ae687636fe27a00da1,aa8fdabe1f0ed4157fef8c25c4a4ef688877a843,112f8a41add94fb12a75636a4b45a155725d9b1e
4ced513363c3a2a387b144a2b5639cc331957b02,1c370ccde1767aadb4d89aa9eb48b4ba68a39733,7f53d04ffdc6b44800ac1caf9276116754975ef1
eec51afadd209e60c37699ad2cda4b628a6e3060,bb92fbafa061f028aded7d3e3a22149b87af31a1,7c195d2062b07943d9bf363702d985ab84fc9d2f
aa745e031988c17c151427e3f61034b348baac48,9f8417ba522dddcbf40268f500d7cb3eaec440de,e124b07e868dc1a1441aae5306d5d8cadd1e375d
69fcacc9487aac44b1bc9b5cc9aef2d219122369,64da07da48c3206567b97cbd03872a73206afd54,c20b51a80679c899df57fa933ec3d4d32d939520
fa12dfa7b5fc86551e7bbbbccd64300c780a7e96,4a6358bfc1c2433ca4a17ff95cec2844b51f7e3e,284aca734872cdc6c60e9d5c3b94047907ec81fe
65047cecdb6a57fff0ff84673bd5e70a88be55d0,3463d469bf0d6c8da57c9157e2592d5b1cb59598,e47f44234c68c167b7a6123e56d74a1097ac1869
bb51a2134a6d5b19ca3300a0b7f262feb7b0c834,0685319be877914bf420f3a47d21dfbb4d8a4ff2,963fe73d195362fc615e4a8ee08b0534ebb43851
36d21d2d81dce53761c035f1fd68b59d9dd04424,549bc49c4ae33ae3075dc5d2a8bb452e92ef4cf3,ab9fa2012b7edc18d637f63cd2cd55c4a78cc0a5
e4f53a7e4100a9671745a7e5ad1f8ac20d49cf5d,f3a660212de69847743829a0cac380bf3450a61f,8e62bf649ee02a9f4486fd2e9340962449a1429e
cf153b0854ebc825c54303fdf943fe42382fb612,c2684c0dc35bee9fb91c408187c1fe344af147ab,ad8b2eaf8a2225dfa1059870c0e601e89ab8e6eb
a8b387a166210f5ca575c65981d4706ea51d7025,f284a6eda9e33a6617b958e476e92b4d09e64fcb,a3920d535629614e9d03ec76d143d7d0a8f34167
99d3651da964ea05c6baf3929c8f9fe70c8c95d8,56c58b517d9290198f50e8efa58290a5724ebc0b,637976e83fc692df21a49930461d41137145d1c4
f4898588551c5c96111e2a3d8c9dd0d716f33c08,7a1903cc8f084acdd210300c16d39641ff468924,0c2494bec82fe3595b77efa1b55ca38a7c853269
5e6ec33a59602b4fb5ecfc9ce6d1ba9ee5d0e03b,7dff106d14e7f9800853e63b4267dfba8f01a91b,3b0168ae162ff2b7a57aeb9114ad6beb42c8b02b
d0d07dc3bf21ab5cbe90f242202556f942233f95,9376f5a43ab500b5577ad71bc9b5b2fce4afcbc7,080d8c28f7a9725d93943ed6e4014ea729627046
3f19bd693ff42aacf053098d507cab586a642195,099134b54554c0c4ed5b871f23952dd40647393d,8bbc7d5df3d76fa56b90b07ea762ccea1b10a686
91a622328105fddad75b9a1794450c9ccda65d49,6fc930a0fc30a339624476fe1f0f79a261632387,044133fc87e120b53f7091d4dcba965028b2ad58
74d145bb16994e08bb5255a15f4d0d547b81c0ec,dc547b1426bcf6f2a15ae2eb384a20c41f9365f5,072934081799accd4acfc667b7046e13a0a54734
6d0ce1c4b60c142db8d968ea82200784c512de3c,703941dde56a38672779439d3aa3cfe93a6c3426,8fa62752d4e8a21b569cdde4644f4d1b006e6d1e
ff6a58ff89a0334a64329a29db000a0dbf91d9df,17c0291e86d90a27181304b8adb1d51d79c5b618,bf5b85e5e539afd6c964afe225614d0c90d84ac4
dfaee4f04b1c2ec66e01978b3d2377685f366354,3baddff71e3e04ee92cb792b904c9b9f5a4e4043,13f1fb60b4cc7ee884a00de755d983ae0790bb6e
b8e6610617d5067d8010610b50878c64771296a4,075966f142ca9ccc05cb5db2291a565832c141ba,5b06af888693055fb9d52146b70c356d28d06389
ff31d95a694c2c9bfd4f788ccc280c1d6593e527,7966b29b2f3a2e98dec9a097a3da18be690584b2,f674ed0324fa2af19d0c3a896ec06e33a1db024a
3d049a33096ee1906af356dad7f8830c95d895d2,8369f035bf5bae7a9d6af7902e514722f89a55bd,55d4ffa9de2999f1f8f36b7ead07d53ce281b4d4
dbb0b24de8b842780b547985e52c434d5b8a2d71,9d425ff4ca3d855ba303b815a93bfff98fe153a8,92beecb6fe00ff0af31bb52bdafefe6cc6c2b255
12843498d1747a87b7e0c0bd8d07e5e861b92140,1c61c30cd23c625aabb759d0080ecf6965a3fe22,38a059f0398a3f0594300f1a39a222c45c3821bd
312f1436b1fbf5445bd97935be451272ff4fc80f,519701960c0893ce801572c9604a91cb8912940f,eda7d535bd5d232c91f8c23fedfb26c8e17c98e7
37e934ffbd0864c0893f250e14c45130f11edb1b,60bb8600a1248ab490f5b5344e781967ba423bf7,f8d33dc1885af3d8eed394bac11f86455ae491a3
b47d2bd2c206114dbf07007ad6fce88f208015d4,1add3490c326215fb09024fa987c80435c1c1b6c,0d36b05df5d7e045c106817d54e9d4df0ea6af7f
3ae370b1908f4be08df639ed6069f6e34fad2c26,6ec460c619cb339eefb54d4b83a456882a2047a3,81e8982dd4d8d0d19899e55e511605be8174f926
f7050ef41ab48de9884816ddda2c2b1f713fe200,e46b426ca13519093fabc509cc2ce2adb507300c,47066f0ce7e8dc21393d07516de90e094610e52b
954123deb3b2d134860fc9dcd4424a3abca23e64,c496b609d18b20208fb0ca54f0b9137fe413f5db,359ff64afdf1eb6b134f69f7caa5c60d79a91222
091b0fde0ca1d8ab1aa2e7904f3a95cbfec60431,53928dc0edd2818dcf55b9cdda7eca3bf9aa73b1,82e16f02ca05cf1e64b877c92918321bf14da188
3d374727dd2e635beb37ed5de8a8f5b9ca44228c,78244d89dc7bcafd58ff04c29e7d6f1ddbb0777c,c3a0e0c6d2e401496bed2b9a377ad2d949e76c3c
3abee173f4c473633fb4e9e1875ea18fbac71128,eadcaa5dfc55dab3ed673f4d104fd16c0472bc51,10273e54dd198984719a932ced572c056ef464f7
d2247f6539e5cea8e6b31a3a4da63b307169a66c,eb67d87dec24d79a68f523e0a2e3683d2ed59137,fc960879dee7f26270e4baf2bee8dacf4c6f9b33
e440bf0e00d4d344b855693664da99ed9221e3aa,bf7961a9016220e8f4ebf9a4b2b62a39863cdc54,b64edc0170da3fa6a366f9564c95b985ea566613
1635d04b7bee15f943952680129098c58d295348,a82a587a1b750cf5fd2a409c9f1a942e78d49c64,e5d2c1a9803158671d8e7e2e32b27a3ed7ad2fbd
98eab07abd080e37907c99ef0934a62a54574df3,a0543f7f9bb7702d795e4facdd4da7dc4d3efbe7,24226ef4af57e9fd94deea2fdda3d23913054da1
f0b22a1569e315faa4954c7afc00450a35dbf2c8,e94fb2edc3aa38c27a17dfebf42cec19eb6345ef,6380df9b42d29b7db0301f50fa948f90f78521ca
c44095733c36ca1505caea5d389a35c0ebc0476c,d41579fb2b8c8a5c35d280065944a2fa4aee3d7a,aef337e67c4960aad357391e17a09dadfb1708e6
5633d5e8aac2d3da9cad03f29a803371f6a98244,33b4772eab459420afb5788ee18e4f4c5d21efc7,5b3240c8f1cf913530ca5cadb6274d52f44255c0
c06a931d5b7366d766fc9e5f2797ed557e9a95fd,47d96efe2913d5dcf8064da8697aae359713c3dd,152208c0be1952cebbb1636d86f89f277df3b8c8
f68804e9cdc1a0489145ddd82b4a7e8ea9713b09,ebb199b9d465a72c1784c5cfcb4f07b4d324f38c,ea11517d27fa00f40b626e47213f0caa8832d155
d5dcf5cd7ac8b28c6079aa2bd7358f40bf6f3e20,1d474f822e015968b3a0a5b592a454cad726ffc4,9c7cb3dbd7c02c54cb0da8f14f5c05743903742e
76406dbc36564d820b900665579540f4d5b1ff6a,7ad8f94ec4ca74e2fc30ac8278ed0c0accb090ab,1014e530813f01757a6ee4b4b16518fe2a7206e1
ef1ba48cc43b53d103b09b23906531f67d2f7812,4c0dac48649acc8b85729a7b6689661cd786d781,7444733f5d8e946afc88555d0073f32ba7f5ad5a
6b1c5861afbf20bac0a2462b7340166fa7b64142,9cf99b818d67babe783f4d9c48f87a46d8fc87c3,96f2e683e7b4e27d7e12473ea3960ba800204a80
ffa1b24f7e9bc8c7292367cf1a58c08f61740c7c,ab2db33b4cb91e2897263feecce167f40a3ee391,9dcf85a8efe7d502d9095949b17fe0ec34f8a337
4a050536501595ee343b8581c3278e7a22786497,6ac2957187119df2b0e6295fd99faa6de10abb2a,74eb7b5050dc2dd172e2804b9a1cae3505799a02
45fc515400db981d1bc9f9bf94435b23943f9752,6a88f2fc28bef9aefa6bf0ed3cef4693273ef7fa,d8997405c55b3454df147adae413ff263f50d1eb
c3e2285c45a80f3683daaa9b98863b77f6580442,5cd4e5a016fda0f446fe775e6b0de4a4a08c5b7d,bb80851d656c15fb20ddc4626ee230f8098ee074
787899b9216cf4e13cc1f584e803b2081baa8987,9c1c2acd64559533d3c01ff58a1c0c2938f8f25c,48271b880cba5d4479fc27890f3b4bb4bf69e60c
fdfe06382a17e6daa86523b886dd03e013853146,3af6a9826347573ff8a33b50748e48541e41a1e9,f8c84dd1fd36d1647cca55943c640964579d13d9
99d88b91a9ec759fca2b345d7c38362ed1c285ee,ff87df758174e4f7be7303fb40f03895beaf270b,5ca2356638e7c3a144d832668a06e8dbe035993c
82957ec5a382eb151a7fcde2bed5f5ca041b887c,8e13adad4c6ad7e1b5a3a2f6358f0ae564eef30b,8192bf1b3373484e96c6a31c368b9dfbdddddbbc
fbb2e63fea518aa03f018f42589c14d8db8ed78f,c47d6d7af0ee2eedcf79aa76b91156ed4845e48b,9758bec36c75cdde8f63d4d2f822c6fe0ce5cf3a
0a3d980f7e883862dec13db1745e75646c5f6f09,9730a50a5badf6803d2f7412d98cc227240e70c8,ae71ab728462e24367107623c19c4ba6aaaf8716
c890a126fe2ce05614b0bbff10b8046146824d86,792b629aa6e33ed5f9dc8bd6427bd87aa9c2606d,7f07c9f94d9e963f5bd457ea667178ec0b73c1e3
d97929e9cf8db0b23a936830ec3e4e64206b6813,84bf87b20dbacb2db9bc8770043968fe1d4e35d9,9901a11d223ff5407a9d243a343e0811b1e41bf4
af17e9460b17f9e0cebf469fde8c221f8b501768,0b63068ad2b7270cd9abcdb79026f77956303d7d,ec4556e03d6213debed73786cfa6e9f7cfdcd801
06b229e1c33157af5d90c1596dd62b675ae34bc8,a7fa31aa10ffd22de56175d14a6321fdcad160b5,6230de31bb7507f9a4eb6694f283f769fe0eae9a
482698e566a62166d5cbb129409ba2d4cba8ea86,0cc91a50c782509d8fac0ed8f977f60a727fb387,0530a2f6e718ed0178d417551b0d4235506bd190
28fdba2c08f6fdee34557b1419e310e70b864a41,9c6bdcfbb793f7557fc0339c251a727e8f14b701,96fcd2e760881dff0086fa86eb208e30f0d47fb2
d8d472cf68aaa59c255456d23a5698d70858c45f,8e5a54c92e47f1257e804bab50b5e045917870d8,b2615a9ba11f613a7920efd59b2199cfbc4f4017
4f3a21eeecdcd63d878b4d010796a2bba43bb380,0189276a12c2784225e4d97baacb0a7bea6aac6c,19d5e4361575564889b0d4230a10fd84973c43e9
28d248c9d41e47fff2237448b7c30d1096d7908d,6e4997265ca10e315fa140d645b9166c64c95b7b,57dc416d9608f12749c1a50f7b058b0f62fd2c10
e60a367f1b325b10428f3c7a274a4b6d24d60ffe,7da0284bfce4513392431f80b2b4ea35e29c0011,19ce665b3d95ffd9a59577f980819665b32aa8fc
92520c423e7d6a78f7f657ddae930b6abb404794,4f3271500a84ec359824d38ec2a0f1da564dc4d3,c0d75c1c69f804e924f79271a188a2f5bc590397
1a9678f4c4fd4dc138cdfb5e1e94dee81877ce97,d49453edbadd3242cb7a1077d5d5390aeb7573ed,8d238cfaa17fdc886d8465f3d2416243400f30bc
aeca33e80ad2db7c2c885c624b534c0b19aaef21,b3680eb5bda0d635435859166223dcfae6d4690c,a7232669fff29a5a4054bb64ea000f402d31bc45
674c3f04e042493b93c3b89990bc321b20df1287,348be7657df8af9c28ad0230bd81e85ebb42dc2c,3707cb4b1ec8931596f2e0c33e820358bbf0a085
a0e96fd55111b9f4512653f9f782b43a8e7b479d,a849e51a3c698f59fe89facb9b161b2d8d91bfdb,7f96a26de03564f81ba124211601a0b969243b97
7040587cc3a8be4e692a4eb85ebf0a73eaff2b52,8c98be824df6e28fad2a957e4908cf96be65d400,2bd7877ec00e5de5cb954ce87403c604aad204b4
1efeb5851ada4f52ab63cda11fc1862198744a63,bb8c3fd153083180e5f527eaa95ec5a70f0b08fd,817ef6949ae0334c4cb2ffd3a1251b4f16439bee
0d592e8d1a3c232754f0de04a8803ed0dfc1b8a8,f0298f63d0a2442d867f9565155ac77ead27541c,a0a8a6911a1d0f9e17fbd6c7f4a54bcdb1a9adca
0ab69ea0ad067a2114eb1e5142afc99cf5f5d965,c82aae59a11fdfde4b5cf400392450312126e869,88a0d4d64bc49b3c18150773506a11a487467132
6d7d567a25a28dccb3f5603644a4fccbb9f1bacf,b90ec52a0eb7042ce95d12843c246c80a05caa4f,eb722c8294f91f274806673ee4941fd40334890a
00af340febfa4f8b38630d5818f3003d8e74d4dc,aeff5b3577af8d13b99a78e0021306a2c03aacf5,9a0107a19dee80cf629e147e6ccf70ac5843500b
d6fdb384590bf8306e16b990dac52ca86f90deab,a2b720da564edba0ab08efd53eba8a6aa126c0c5,2a7ca7ddc721fee3a36a0af405a47fdad1449af0
04b059268bb291cb1b5471481bacf5aa93a756eb,fadac6a9a4169b7354b908e7ac7eb11b17927e68,25b27281375284e07b7b9047d7cfcb14f2805555
9858d9c5e67ffc9580feda5de1789b8e7f6d1b2f,9af9f140a52981f0d88b7d26bdcf2f915c95ad89,80f87edffd5b383a3530571bebdf15899c7c1724
a1b252538fc592ad908f881b5b7aa63bc152696e,2a897f5b6b36e4817a73b18bc9e2d3c346befd30,295e2d4dff621a17c042f1f48474b140f7bfb1d4
518db35eb075e4bbee9fd9f55324b96d292abe4b,072be7b0f7dd383df9653c900080513e12a38afc,213f84ad6ce093b49829e9411b597b626fb113b8
75acaad1219d06bb3821c4d964dbd6bc17241ea9,2a990b8167e0da36ce24a4e90263ac8e6cb47aae,cc92af8423a84a63ca73688c50f211869af3be97
01691e9ecbe3a4cccd531799227886d3d1ac92b1,2ec8145ec543c0babf24ecd8de10d0114a91dca0,11c17a87de784e7cd6dd4e412336a6d2094244d4
2bcd2a4a937cb2c8eb5e2e090e03816e934b8549,b713c7380bbd705f224c1bc1ad1e26eb8f5694e4,3a668d9b7c1720851d9980e132e0201d02b6a1aa
b03eefd5d0bc17a5bcd03eb7850280509aa17b0b,6db164c9936938755328022913d2985b1d3eec66,26170815b410639e9a1b233a854884f913d47068
0fd7a5cb1fb05d0ee521c98cdcff695e95194b79,16a21eea87c564e9bd99c95eefb5980c9b230cfa,053c42da3376a83975d1b45b78587f466d28fcba
6190258f5d0c9b9992e8346bffbc8c18070f976b,33afecd117abbd8c48433ff6396bc3b7419cda09,c0c0acbcb9edd11007a891b0942d2d74ee315209
3e047d3691851aa988e95fd76fe241fdb2386470,5d51a788f77f5a9b6610375c5b7f7598274bc6ae,5e3e4437c442a0e916cc3137f1a17583161a78de
8ba4c4bcf0ccb8f927c6a15dd9cf07bb02789946,6169bbeed5936ec152279666681362007726f3cb,e98771608e51c0ccb8b4910376e9e563b8b0c794
9b2bed6fdf168b694b7c62751b208bc82d075c16,185f20b9ecfaa598d6d6e3c042707c4e87273e0f,93be88b270d425ff7725db6f653519d2459ae3dc
2452e991b86091045a296ca6251b66ca3f6cea5d,b7ade3e566160485a9fa8c5f16c337fe7b5dc47a,95fae1a81d7a92d9e7511e02400fa362d4763bbd
507f0b3362db9513e09255168306a3c46d35f0b3,2fc672452d27fe93609cb52bfca8a90a1b002cd7,eb7702bea42c58dc4591524ef35fce8ea9b5b62b
edfbf2ce30215262b7e8c2d5f0b9c516bead4fc3,195c8b599c1ddd61ebaa739fd2def0db21436cec,7bba64854b52c877aac354180ba7928a903ff23f
32999fbaba853286412aed98a5d2a89262a0cd65,b4a6c22234aeb9982a3d27ca0c37e0f2b7963958,97abf6b49557961c9fdd525b4b4db4e4763d6e37
e6037961e3be89a55dcb273dd8327fdb85d5338c,7de94e7a1dd1ee7de675c334fc936a64f72fb978,b6cf482fcf3fc1f916615c8fc80e552e241ad15c
f8fc0073248b2be95224d2419bb844b4bec0d5e9,3109005791794f433437c6d452e72f1bffbd4a4a,d854d18bd9730ffbe4340dd8a1dc9c2c1efd65b8
9179f9d43b5ebc1ba356a7d0ad12a13a2ac52b3f,43ba5b69d2b86a6b00908c0c1664cd893db22f9d,f42b39a7b5c586378c5baef31567ee53cc427715
a65d778f73ae920d4eeec28438c254ad9ee0f8cb,e4eed4e25994349c28dec79ab566831565bec643,7343e9c4a273b789577856915e0edf6613fa4b41
c96029ebd57c852dd3f006cf8769d9fd5473a605,b8578f804f48a7e7fc45a176f4556cf729dab2db,12adb47d65e06d4d730cbb860c711bb668a94367
de36d6c0499c2ce4ceba4825d004767f0ba944bb,c84c4eb1a4cfffe8cacef0193af7a854f34c5bc6,09c009868604cb1a9a065ea9c739a37c41c93923
c3b5d0d5d5b522e8d1a594183e2b49dce34decfb,ce1f115b2d17e17832f36c91b285e83aa3fe8f74,28efcfba65295ebf1b88238906b79594fe54fda4
57d9884d964cc8e1208814fc3b0f381c3140e642,aec18c2426a503c0c85e057bbc2f029d649fe3bf,6160abe37ec2fd61fcd1424cd62cf95fd2f8b1f6
80282d6effe141239c36d02d418c51142b38f6f5,7f775abb6dc5c5b3b3a1dfe347304a81d970df77,4e9b42344e5e19210d8ffec442f1bba631df9078
f42f62565bf31b15c943b91eab9fc5a9569e01fe,227bd3e9041fa1347905fcf666a951382c1a0f09,eb81b981cd66a1ab82fa0dcc05119e3a9c5a09d6
469959d9b52e49254c45885e9e9f6d631a3481b6,217e9ac5a5714fa60214616b33f0e7a0860c2a64,5c2303a76b1a616d24f9e41679bf61f79020f4c4
a286ad9d774c19718bea0cbfc84347dc67dd4862,64e796ace2f58eda26c7c732c8d592029f5cf297,17d1b8afdb7dfe862aaa84d4bb012c2674d8cfc6
ecdac1dd399df3d5dade5151e320686db821ef9e,472f8c900b8b5dd32333c930ba1c6f4a75828102,259c865667d580981c3b8b0e98287383f38b40a4
54ea8468fc0fa0c2775c82a10ad62785c2a8f11a,344aadebb9e2cc9abe51bfad885a57400508d088,9003114a8f7cf994275dbfc88b93a0c8d0ce25d5
707bce74d765b6442a28036f5bbb0320c61b7560,8618a3b21f4079b12a7b439c9026d3ace63d3925,ecc3ce64eaeeca34fbcdf297fdea90420845fb11
14ddc59edbfafc8f7ff20ca7bfaeecee4ee3fd16,d4ad618a702802f02fe4196ce6487f15c5535bed,16f201292c0690d29ee40a4b525a60c13d203c7c
dc799a9d49d234980b4184d2561bb0ba04337177,85afaf528916ef20938b019e802619d65dc3f778,4111e13017f90f992971a522ec67f3bdf3b46b85
7a3eb453d40af468faa5c395a6bf301cc0a0cc40,b88f9ad57cb67ae1b565d9564f2d8e938c239ce0,2519fb126663d9dc4184d8ed9d7edca2e65baf78
9803318feffd8cbf8904be68d784f062eee3ed90,64c586b86dc064d1bdb07655975f1787f17129df,0a021be803f923bae563abf7eacc9a1d6bf36b66
221efd7a806a778f59a29b7f9baf74048e8b3978,9c265d71f0fc92ec1065d0a19c2565ff884dcc9c,31cd3df783edbe1bec40a90ccf4df82b5c327f2b
0ab6b1ab4dcc5a513a83831fdd1070ed8fbe49db,75491ae21c54217fc1838dad300f5c86a247db4b,4fa99cff624119b65aba0c5c6fd0af267ad0dc42
9b1567f0546a7df6e7a5818dab3c614146f95c7b,1f49e633b6599ef4acf917a4190a62bf171843bf,2567631aad9684c8b6c4cae9e4d94e3c93a2466f
04727844b5c663cadd8620aef3ec2fc892115d0e,225eb8ed12ef191cf97a185f1a405bbdaf9634b2,268f7bfb5c73b8e6dc11bfba6bcd1c61ec0353d0
e5c6e91bd0deb773586b10741d8435409313bf56,6975437da8f582ce6f964ba1f3d95972477784e0,5950a5f97b1a920fb9622f8897da0d1eef2ec04f
0b76059b37bdb2553beec800b2d4134a9d0df826,0ab4515e587d6eba0c82700a003dc3a0ba6a25bb,67fcf0f03e9b81241040ce5e31f8a8290384d029
e99827246e52288205bf3dff3533634aa553acb3,4bec57702f93cd54d61f68b1f8078ce4a4d985fc,8496690ed0f812c72b008f609106c933871be484
8b24d60df752458f3b2ec1eba42a1143529a7af6,1e960a9aeb12ae75877ef9321efbb89f34bbbdce,d0910b5ac837d58c141ceb758c366bb8a87f56ff
539a578cce5f4e05bf46dc283a0fc96952f22bfa,4e151d5a6d8b1b11617cc17f3fa3e08f612efe4a,aff1f4999c47aecd65f1f17bfe96e736a55b4ec7
ecce39a3b253b55250ffa0133d8d6bf3cdacb4cb,3b49e95415b79b02d6d74ee7786ddf1c1177c1a3,4245b20a32206201500e7d9c646b003b93f4c6e9
1c99c2655e3996df83e847a442e52eec3ae171e5,7f1aac8bd71488208af65d46e2bd3783d8efe725,afc80a84cf383fb885ae3366d429a5a0c6ffcd3d
87e1dc159d85ad4f56cc8cb3ed3eec71c93cd273,dda9f83dfe2f4841bf4fdd87aac87b46b0ae833c,a4b35d16f2b168c58016334e1f0c54731db2d84d
f1883c4e617085250b91f579760247865abd01fc,33ce19799b268409d89e0ed8c1598b73728ba970,0316a7697f9b6c3782abf8c6188df983ca1e9f7d
c3fb1e3a658af94ce69f431f739a80522ddcc546,44856e660c4ee3931003802128192b2d77415244,a3d68e6839f1803353d6b575f34fc91686ff5088
e694897bb3bdea5f4606946dbad784ba7bf0af1c,09d6398942ffd3e1b139d72067cc20e8ccd7a400,436a0d3f9ee306b55bb8d0b232587668c8ecf48a
5b29e7a3ecfdc47203c64ee8b26e5db5cba35b60,599ba8cc2a1d68bb9dc6dae9600cac6b1847d046,ef8d520e8277925f08c06e3b635a54ea80b2dfa7
2ffe777b446a42bc98d278288906bb924bb806c3,f333fb08ec41d4886a8dc9a35479bcdcc08f3b78,34f7c3e6d40e1702c5b9008ab852e5fe23cee7a2
60c8b71bae73cec85e5bde74239f2bc057f264a8,c7f4be71dc1048ed4364609f838bb5e79e372088,2912e38e91f1940d84b6a846ecc1f9888fb7cc67
5a26c582852c9e6486bfeaa164158a9521eb45b9,6beb28316e004311744aaa46f047f7048b989889,0ca1e2fb424c67f6c6b02eda1dd1ff22773af2aa
2f36069dae8eb1f6aa8ae4149c878fb55437868e,e430c92fcbb5b00680ac84579d6f969a4aa1c1c4,cefa05c8b1749d9f5b3d322f93eca52a13ae42ba
2cd695120564fd22f063cefeddc882523a86fd69,2703b36fe16907fb9fbbbeaa8d497e17eb13b4b3,0216f778193aa057395c3632482e751402a21048
236bef961c21611f2969259c8c8fdec54364a225,cfa3f4fa8c3a23fe72849a14532d02cf8bfe7730,857cbddf04ae8d54abca518b94792e30ee481042
c6443809bae23d8f0a519b4b3da501858a2f50c8,8d0ef71e37e6a59066547ebb898b17ca21e3b601,4c2e0b9ff0ce9c285f1aedeef6a7146c81a55d0b
ab0531f0ce5b02a4a91430a979f025a4684e2245,803779002d5bdfae8960d95520a4e5e5107f61fd,9c831677ff1f6d00592d7bea91a3fdb6d65e0aea
fe57cd353657f96ea5846d9f2575811e1456ec6d,272a0e3e267eb40a3c3e1a0cfaab9d2656792331,e0a1bc66750d810d57af27e21139203bfc2f3125
01178532e5ce1180f56697fe7d22e907d1afee11,316f2429f02f3f4ceb1d1fdbd857df0c500ee5b1,8ffa01e95fec30fbec3961b0df8080020e5b71ac
01937c4630f20652dee29b92dfbb2ab3d58cee8d,913bd009e9cef31344cee42d9351fa25dac3724e,c15bb07bf60ec1b6d14ee4954ab67dce787e1e79
62bd0068b65cb0fe8b553d08fa4a667276b40625,f4486039704b5ee3ae17e74e3a537b51fddb44f7,83ce289ea4f738bc0599fedb7fe153e804d1ea42
81402bb077acdaad13e50dd6e093e886e8de3ad8,6f3fccddd1ac5b363a3e02657cf838b87d741a40,d1fb44044f4711db2430d267ab8c884d242cb13e
b0772ae749bd1c8073b7638d0d511caa54fb5078,4be5f07f276e2f8c9080a05f7c297fc9d578b5d5,8fa04a0cee8de2d8f6d1c5a72090b4f9a0a44698
577e584c771de341a03c62bc93f1ed2fcda3e2de,1e5cbfe546555493b7ff115a326b2722e0c5c978,e047e7db91918a6356b18e5a76eed56aff2db155
62ea31f255cf83b7037e4d56c6a6f4e184d26084,9775a13e0263f14cd74692b3df566752c8de16c1,9ccdf2b3bf4a4da9d61cb657c1800fbfe3e8ecba
d1881d09519768a8b2fac9ae78bdebaf49ac7f83,03d353c1f5203640f225f84930fafc8787372b66,77f3acdf76d54e924dbb77682eb9352b5626f88e
85fa313e597796aa2035f39504c467078f51110a,a7de0b365b9d10dac141f7a7b8889e92e12370fb,f7dd8755ccd15cd31e30863a62b0214249eb2907
811cf381ad4f00636cf8b5628b663d7bb8cd07f4,612f063795d944b9dc7ea0ffc36a9a0fdc4ef73a,53effea0f5cbbe4e8670c65fc55ec65b507829fe
d608b4b689181bd3bde42078d6c9641348f0a050,9e2bcd940aa579c470990d60525be160ee191760,b9affc3406b07c24ffc76005f71d41adf22b08aa
c4ddb94cb42420c8e47c6daf181a64550ece1615,bae6ca6883d84aff6c9061af6ddf35a7766b51b4,1105726dcf0065083c5f23921c1e87c9172eb61b
c2ff85ac5ba307d7cc10cae7ee17d479c83c9119,067b9b2922824a6801001abe1f2c67559cdad78c,ca7c775e3671ce703894d6ad4b13fa11ae5c1ff3
308aee42a011e796260906a9d99699dc6521d3c2,6218254e53d3bd9bd6cc2c62b5d6ecb86235dcd7,793ecb3fa67214c2b6da67609c5f4e6ddef96bd3
8ec71bc810be192183c9dea7ef4bab8a33a2df66,47557e0ad24e6df119fecbf2d42a65dc9cd20b8a,bc4a22e24d21870fe797d495cf5a749cdf89a12c
07a8e6c1d61cfa4a588d3e88997940c22f25fd6a,c8c6e647be33882b84c2ffffd9c4b84ea4fee1a0,8ea95e9b9518ff3c9b52672a2575287d613bf5c9
7811b915a918cd014806bfde2085bdbad62c8b2f,682e29c4ff6b494b468fdf0f1295ec85fee37ec4,2885d3ab569ac5143b094419de211b2c1405f568
e53d18d876349d27b75a9dc00340b4a8edaceaf9,bf65bad5c5c92a2bffcc5dff4a5ced917116a8a1,3999d037e3f66961a2ee4993db53d1d8e9fa21f0
9e7d80a8bd1f1fcfd60bab5750b30c05db3c3f6a,f38f9ff930b754f2b94f8dc876f53d22ab0d23a6,f879d764917721ff3bd99c7e6fb6134cc8ee7197
f3d8efc8ec3690b97f3d5f15d6874359435271fe,08817f1aed8b29c9e30d7d9edc9530e89bb0bea0,87a67a3222693a0b627cda9a47197d8c4893a205
9ec85f940e650d196a66510be981d6f8b8a774a6,9a39124118cc4b065774f84a7a7d7cfdcc8456c1,3aebcccdf29cbe199a204f573fc1390e3760f678
934e3bba63c67b577d941d675cba3dccb2d53826,4bc957a1aa3bc241350f8ee2f917dfd0cf80f8f2,c90616944d3bde7b36e924d27a0790195d61f95c
1b34fe90a33567d41a103838648df4dc930ba2cb,ca399f3c7166947e42e507c3cb141cfec46f9e0f,b09669dffe04ed05fa7f4c19cdde5a2531be0668
243ddea68697120e162f5facac53b0ed59578ee0,9f8566dd84cd77faf02816ff11b6b4092af5a0d4,d8021a11029990117503179f27e8b9af6418d32c
81bd47343918e8de171f1f53f26db490934ece79,6ec6d2043b1c2c2fa2c5554b142610d9d333075e,c7f3469a3f6135de5990605db59ff5286c6ecbe9
f5bd3d81e78881e7311d4642ac4d41445b0d86d9,0188a558d1fb63818129f3adc8513dddb6bd42c7,726ac5a5a6afb3017e06ccdd75d6a593b97a72a7
2cc621618accab4ce12b8f5b34c5f883fa460b3b,75a9c5b5009e094dd4f1abd166f9ef47aab97c1a,c8e712f400aeb5f56d8b370f7e0feb5a6405b6cb
b5216a19907d45ffa87661879b2a571e589fce75,695665c393c0c3b0a67b060b5da4c86249c77f38,665180a579b47a5d7843c4912086bc6e2060aee1
d53b17cadcad90200962c5942a47cec174047612,d8f02107a1c79c2c4560c5e6ac260f516f083198,f5e5f9645cc90c01a6fcc2c89413ccbf0d1d3d5d
f9957f30a5a70def090032b803925a9733d4cc43,70760208bbc0574bd170e3acd7e8baad3cd90cf2,4da1ad71a4ead2a6643e56087d03c1ddb6303416
71dc62dde61909bd587485a20f3c234c832b9389,2a7aa1116397a409066dcef8048db673e50f77f4,f718567c95fdc28f629bbf213c0e8f2507064f3a
77681333f520d55157353f13183ef0dce9dd0e4e,29a5d3267cc3329ed313bdf3e6b8d59e659260fc,43c50d0a3266282a69f9e2d316fbc73b478c0774
a19e461ee05154f1934c39bfd925740b3f28e4da,17e3c31b7ef802363f2b721f076427735d7802e7,cd3570caf14145f0f75af95171ca4e773cb9bfb6
5557dbedf27c88984a322047c57b486fb7a9fccd,1a71ca410691438f182910025443da0580df5a47,77cc2f4ceda166a09eaf04ca07756f950d1ca806
1b22962140eee3b11bef19380d071ce49f5f4329,db02c7c85aea5f66f4e083bba8a8ba649e06c313,f1d30a5bc63f4bf5916ad20a81c12922ceae68e3
c2faf6a8fd63727b392123b69f5a403b9ed991cd,d06cb1a20ac5674bc70b8e8da0c419f004afeb7c,423940afd7c7d8afaa4d45a5c08d36f83fcf5401
7721995c71a089a8796aac9c6570dd6eed606d20,77e3a402dabc6622fc48d31c641177452ed49867,0ffd4f87808838f1ddb563eaa2863a4d0f984a6d
72667f41ad1e1b310052fe05a244276c7f813ad4,837b433abc0378039d91f0f03061d982b2cbcc9d,b464d3877781b483ed4a1af04784cbbf175019aa
595edf6f9b5bdf4d04ce6580cae49debc72cba89,256ca9d210e9fb9ddc11ca3caeaf811ff1d97dea,bf5f7144972fe1b99f2dabf2f6910b5e93090eca
f0b322f4ed22a2164aba0abad84925a1f40e383d,cdc7fec019bc6e77d40e11c9c3bb173f95a3b364,f76bb5fc5e29998effe2021ba7fa563a9a4a8e2b
c9b90ccde0e43d3a26a812289a383353b83ca220,5ef44c550a605a72a6f8b34fc3690185097aa49a,9977889f4a2dc700ff8bfdaf231d59910fc08739
cc5814dac195e6c3a60030015339e18d0296fbb3,210674b9a039da69dfd1444c0cbcbe7d5cbaf4c6,f6a444c6fcfa9f1993841e8dce9a36899a8d8c9a
ee187f78f411711fe221f871fea01b203114264c,9664ad4138ec531b0be7680bb274db0fdb39b554,542c3f0c4c916a61cce0614fc855241ba0e4e8c3
4dbdb4f0f1ec9a675c22f0f5650a8cc5b44275e2,39896a1b113912c28ee09155ab6f81cc9a14428e,d936280c6b5810d72bcf1db26189339025343143
9bad5180bb210fa49437353c7643d9bc574af68b,964c04aded9d81191c5030d1bd75be285e36d8b8,4ab310e0ed49cf72441c1072beb3e24206eb6e12
8535c758efc41d890c3d343d43e064deed88d132,929fc500043b93f1e06976d0735c3cfffcb2c446,da3eb5c1785feb0dbd417632bff6f791b4b458e6
022a9b210ffce670dbe4d675baf3b70db3e74b92,bc21634b467631b3350b42f83894a7339bea54b1,f0cc2c38b8aaff7b6b407aeeeb8bfe9556fbfa5f
884d24e321d3db6a74c25a2d0bf09b1e755645e0,e57059eea3959cfc9daeee5bd558b07a4ad21713,6f1d965dace0a9e093ce73faa9e02828db463694
430b2fd7917e4689de57e75a67ad864f38b570aa,c43d8e4adf47edacce499563558c0bbcc9c7fc3c,906d0ba06ef076fa6bebc994e1145bf222449b47
6f482952dee00a2e14dc900815d660a32e46bc8d,578424cf51d3c1a127c5eaddfe462e82a5588586,5726428dccfb87159f31ce505ab1bef04a5f59e6
e9b3db0d78ec4a3043d69de785b951b25179c2ae,814b68fac0e7a2328bf4cb0adc995bf20947383a,8006900e8e969fd4f8078398ce762f1575fff961
bae583118a0e685032f2712943d2ec5bcdbb900b,d56a90e5ed984b10ce192d3197e72fba5b4e184c,8e2478e6328415ca01414db2a77c2180c23631bc
30df9550019731ed3cf29d5e30fc6bff4bc4cc03,f2e0af6d37956caac79c5acf8c8cf5ad08475443,d5a0dd3d2577809d169cfe18aa78e8372fc3b856
5e3efa4455a0c20e72ee2d970df1fa630308192e,ea5ffd597f3b8a50300e9e7d1ea2fcd0f1e14f48,99f33824a7994a8e4fdbedfed79093cffcda03ad
1957ea11cba7537976c6600b2334a9df386d7aa7,3ecb41cd2dbbededc213dc54ee4e44880dbd8336,f59aab1371a008ff7c5f46d2b4d2fa56019cc15d
5085a04930268442e1dfd07f325291dc1f95d086,c02b43fb93381fec8823752d0ac24e76e143868b,c2c7982a22f940366468c2b78e6625739d584be4
e6e49baed14c826a83e384fca0e29e739d3aef22,e841e95390eecdfc83dd7747597d3bc15195f171,aadcb0097781d53e6b555da644d3dc05dcb5f3a8
4483343d00693632b120151f8ea67abf2a2c2d5f,04ebdf8df81632e5e3e8dd13d80dba4c75ea9c3f,6e4984184b94547a91ffdd96dc47046377693a0d
40e1a09e6c73c245cbc1bb3ea1b97a0816fb29e8,134bc7eb423c398b8ae1d1b93b105c2d1dc66667,214936b90e2f67c323cc530a4f022d3ab957e2ed
464730dc44dbffcdd9fb0d3ef0847e7f0a04c633,9d2e71ff699c447a2fc954ef15928f6697d60a8e,776667366feec2f8f00a81ba8d3f016730fd1e5d
7ee31ae252e6796fc32a3e1de90193e6f936920a,2c418b988cbfd4d9737fb34f6c81c52bd32c0bcc,3f8aeadb916de0d20cdef18897275c348133e90a
e1d9d1be0aa9b4029bdd144bb97374c3bf559d5a,50648f2a6052a27c6ab8591c5817d63c830aa0ff,85fffd7a77f5dafbf672ee80493fc42fe09aae5d
43b29375899276a2734571d2be8daef68e5b9008,7368fcf4c5a6845a0c2257ae0479556850184565,89d3d866d2370f8f332746506e97dea19c9fe382
356afdd25bd80af7c674633df6eda10826dbbf4b,bbcc3966445438e2d97e07d21491a83e9b0bbb99,d7a9a7319493dcd61d41e68b3baedcaf9442ec5a
ba1b0883c2771b3a4b9e5ab3954d2a9ea960cad6,ce1f9cce01e1f58859886593ea04e5a5bfd0da32,51326e94f38d72e89bc833c60e20df237502d811
94a15faa7f435b1b8a5e0776446b2352b0359065,7a4110cca91f7fcb4097d156104bf7e12021bc52,7d6b01bfc429e2bc70eaf7449a2f899f0ce4b0dd
ea47cb313def016b4f6359126d45ba9da4054411,cb0f422eb1f04ba531b1acdc0212194eb1c565e6,924f9466f0219cab6ea5c52da9b5676c97f9cf5d
c185ce02cc24c43f5213563669fce7c2c9727747,d16160be915fc86a6ba634f9ea8500255ff996c9,0d6a1d24bd0adb93608b17fff1e956564cc4d975
2629bd7ba92a03ed6b106448b7eae6429b63e94a,2a2576b1d5c6335deb98c92f51344903e912c7ee,c67d35b8ccfe8a4de74ea6f33017fbd9f68979b0
db8c723b9d503f0eee1b7058495170b97326752f,46507f956552ac35f745568284ca6ca7de4f328f,eb96734b2062ee19daf54cd52266164d70e84b02
7a8893396d2598628075a4f3e001622d731e1191,415bf22e01cbb676fbefc4de83ee4d18bfa6145e,4e4d268963dd6d2b596d1cb5a70332015011bb04
ddba001b651a404c2b01bdb88679599cc5df118f,5129c2cb9ac6bd7756bf77f8d94d60c0390e9734,17514ed5c0dcbfcc2d141653b021adf870d825ff
2be8f01efe35eec1c1bb9b278b54de3715fc5b2f,122c6c92cb5e494385d3fa3adffe6bee6ec4a51c,5920d169c096737ad6288a96a37a9377fd8697dc
136f0429725919c7759358a0499a4cec09f8a3ad,6a3f32ba6983dfda5250d03b9b2d33c8ffc6022a,10acbca82824b6a3ebf5dd829941da61211f947c
306fae299e2b90543f863504cd9a35be802d103e,07698050e56747de32c7ce580467cc8bbebb2a28,dd4b4af6a53514749c8ed329cbd9c41ab6f1b7b5
122ed4b76a4e735ab76b44d52c845879e6fa5535,c78e9557f81f7711a60400f8709b5b1fe017bdd5,64ddf22e1b77cea0a29d13f5bcd1e09e8bb17ebf
3ca73da91282ae5ea53ab61ece3301dacb454a43,07dcd22b1c812f4dc659995c84c51fc580383a59,0f0b9833fefa846d3291d275d5d78602212c23be
2e608a3dd025db0a270cfdb17a382e46547fe62b,61a3f6603d2fac4f4b88cabb5c1ab1361bf6429b,a73ee4f403dc037bdc0d45e2ae793f55f994771a
bc84f780ee3baba239b7cf99b16ac8ad70150c7b,968d00fedf64ee56f23796069752cac3207d48e5,e310be017eb68e356085ffb0495fc1d042aaf294
9526fc64cde63ce5768ebc21f9cacdbd9b827219,a18a6b4391ee8c0786fdbccf8154949b41be86b1,4a67f098ee5f2077417ed8b47e6912a0e4794d1e
c28995494c33ff0cf4c66858e8a7de86e10dc411,f134e3b0eec1866a21572feb012813fa14623b87,5ab67753769a4dd11c3d6c4d2356a18a6bf14fba
3ce6cae11d0f754038ac31a3249431903a7909c3,468975aa3046e252c5ebbf4c9a01088dc7d86952,9305bff861034a05c8919a8dcc3783017eff6c61
4d8ecfb42270e418060c9de45ac5a1527150c66c,dca4bde3a2b43a31fa0e6dbc564c823f53a20da2,1f272f8f90cb1fc0a0a9ba3723aad13ebfcc5f03
8efae66956c35ef07d5dd817cfa20d6600b6fab7,3069d74ecce6a302ef844f6fa2819f46af7eff2d,2ce34f7bd3a648cfa5c7af111bbd0ef0fc991f8f
d2921dfb55646401ff156f85a7997ba1d17f2d22,a5f6505edc01ba35c0fd05c2b048b6ab7aa306af,3cddfb4e2ff9fc38925ce973bd29fe36cef3fc98
6b7df6d22e246a54b7ce60e08ac4474664efe90d,33ad038bbbf5d724394d5c07aeb4bf7aa7ad71d3,213a0a704aed3270afbb0c9ec0070e4cbad85d9a
6007ceb9083c0b27313377c19f65dd8fea51fcc6,9a1ccd2a16a48e980662be44f228d549871e8b22,61cf121533572a72ea65a7ec35bed1a5b3621a5b
37bb10e893d97f44e4f130c06ad825a2b4693945,b4df9dbe1d10937f7e61265cc58cab832f6b8506,c7c8e2e0086f1f257af5f4fb927beae687105f4e
1e072aef31dbc456da749011f2ede30dddd76546,5762e687a3ab8fa55d3d7b14177de991b044e9da,4f77cbbac4accf137ac2683b95f5ee9f7c628ce8
5e9eb673f8141c2a931e971448cf1264d55e7f04,9bd785c06bb6f3b7c1dfe2190cb5fbfcfc6f76d2,5065e4ba50b7bcda40c0c010b404eb228a4d3188
9b4033fa80bff4b50cd2faa83a49aea8ed71c17f,a7e234254f19327d7053f390ac93d29f53d40803,abe3002b5badb867b33dfe4457e92535b089a954
b8befe3d1fd54329845387d8c7109827c55a0b3c,bd4c2064726700790c5c6bdd0a55d3d471dd0c5b,e121a753e116701c5a8c68f44ca90b296b67b6e8
b2165570de567ccd94e192353900000376492fbd,4a7a113a30030675eb50c9b1d0e563b6d0b82c73,81e83ffa675a60a8244c2a32723bbb00b70f3e46
6b26fa0f9a4c6c7f8d12a10737428c443c7750e2,eda6b105b718d810129c752ec7749d6a8e6132a7,3a242a17f4ad59a3bccdbc1b7982ce92b9dcec76
cd244cbf7dbd85f2a28b67fabc27455fd23f1e33,08b07122f8c0a270d4f9ccd1bd925e14402323e7,bdbdf2616830ee919a86d5181440b8db1b89ca84
4064694a5e438b10d71a24fe5d1d24bad40e4c48,a83f5749debb1409e18f0ef92b2e81bc9d0adba2,962c5bd727fe1930421e1897d0c8aaf6fba6a489
f78818e38727ccefbd1c3b1415d186ca67f34fd4,5a2d884fe3f3f556bec5ae3a74917d31c5ce896c,5bcc530707062fc715a4dab703848388d67efd7c
fc41306c4585c17e34d17a5f3618b59806152fdc,59ea39ce75fd1f8f5d3f9cb5afa264c3198d8a96,ffc5131087cc627c3ce957de0998d92518a3d958
fd4d6b8fc3f139bbb41eaa96d82055b25868ea4b,c200bf531176074e75a0d8efab36ad34886a3cd6,967b721e4ffa310891361e6947a40181e7288d2d
429454c8f48b197db4f8d25fb382cbc074f23e38,698b5de389b0342acb28bc6f753b79aa1b922933,eea8f3277211a2df7cc299dacd03cf600dcd48b5
e45d8578e8d8c5ee425f5efc31439f54ffd02ceb,2563cb6daa45b7b4ff2034f3c383a5c080c5f756,8cb92fd49a8f89d830850e3f775550342ccb1a8e
e8c3f5d6b0a19348358d039c2f975c920b39b26e,905f0b1f7819d50eaa2a0cc0e4c9da7e491d6847,12796d176d278f11843fde6abbd0935c21eba2da
455f603c8c6614f10993047e3c047fb8df3d3f2e,3c3120845af13d067111b13bcdae08ce00247333,92592be8e43db53a29b9f12d49efa317fefe844e
bb0155141ad1afa1869f503b585f9d29fc5bca6f,b97570c8b3b0e1c0f3b5d6c337b026686d5d8a68,ab0d7697c3038537c983dbedd52046fe27022d70
3e760b33c736290988741ce7354824cab306e952,69d5d648a9630a85a0ba9dbe0f79345152294112,671c674d6513502c0bb5bc477d83d4ee5615738b
01d6358f93faadd4ec8f61c1146d6a5178792580,78af12b58483e701da0097898e26335382e4dcb4,5abfe21f39cf60800c77ee5f22198d94e8341054
a3666aa8c96c198b294bd794cb1fbc6eed2c28dd,f56aa9abe79fff9dd5f36e5f092aa2629dd1c6fc,72a49b68cef4c213f089c79fc1d47b2874ba146a
27675967f85208af3308f342a4e2ca0d0a8dc0a9,4ef2a889464dcf5b05569da5ef97cc883a4a6938,050519f16fb7f00d857776249fbceab350196b04
7e53fecd092c55b7675af5e6bf5dfafbe9e74da0,fcb646bc3bae2cd53070cd608bf281b1da534271,e924dd0d16c13c27bfee35e98376e05bcb887415
6d1df899e61fc69117a2e061b17cfe241d2637f1,dbb6f95ea74a7d510502818c38e9dabbe8784448,cbf444bbbe699581354288d36b27c43ffcb47c17
a5d1ce26a00d1196bea7292c828caa5fb8a93f27,12496a638b4c5b1ec45b5435c8db03ea34e851f1,8295173f8665ba60a3b6df56581b280b448cf6f4
8c57d20abc119d71c86bf24088623dbced3565b7,3e984294181d96a590a814476616c1d3e365f458,2805e44ccb58b9c8a31864c6ccedccbcd024487c
2d2906205bbbdcc4769ea5587625deb9fa30c83f,ad8ed4b48d60ec8becdf5609d9b1a63cfbd1efdd,5066a7eb2464ad8d4a9d10bcbb8c848c66c63e78
217b3ea3cc200030e22b40831a479d5073bb299b,4e4910cb8409adc60bcb4e02d907d75203785a15,67cbb7032e1025996309689fc2fb3687c48b64af
4ebf857ffcf8997a3d5efca9c4f2ae2954d49b09,6e7e6326822490236e1c46895221212bd1840366,83f2f7bf375bd50366d8ae859ae88fcdc8ad795d
acdb65c2a33517d623d8468388f323969a49d946,bf5048cb5e9655558802a7f369fee009d33b57e7,238d09d875d38d19c2ff77a12a8b463ed4a524a8
bd6bbb6cf4fd0ba52c1447dff58a26dfd98579b9,ea401ccc826b13e56965ea4dbc0b79b8a01bb7f2,392ca81c20b781db7c33eba2b8609f71ce90ab15
efd58317428d3407d7ac5b5986f9674698a4de70,2d1ebe4cb3087935ef30467d6d71ca74cb8967da,07461d0fc3a36fd6071aaa9bd13f2d651ae0a74d
c881d057937f8146701634e884a44f58e29d24c4,abf831c430aff63659113e53150debbd0bc8724f,79f60923bad6ba4e0dec027eacf66a892375fae8
15b2f9a7b1482ab9b1abb457066d494f1e18b57b,2940d0f45f41fd70107d2660a5059f4682833fb4,346b57e238953710adbf9b576cba46a5f2e33817
1c8579da2e401ee0dfb54bcbd170130c0a653659,99c84da071bf59d35e0e0ec85f83dc0a2bde7bef,2102fbdc97e9cdcdb56bb5e549018454197351c8
db843287a2d21b94049af809161a9dab8884331c,bc76487b878e59133ce3c2cc19ebb13f9a9826ea,77b898fe45cecf6a52176dcdb86ce0f63b9a8f57
d37117c460f1cb65e6d750d9085f628a0dcec562,0bb781c92876ed29bb962e9129a4f9f1c14df412,6fb4b9b7dd751e41d7ef808c31a33e7810169c24
10db5ea5dc0093161900a4fc88d2905735c3d95f,a1c8e92904f3504fe6c3a7140134b910aadc04d9,8226233aa3f6265e9c29b120493fd1fff3e6b5ee
812732cb6ad97a11c9aa8f2b0767f8dda2dd29e5,5ad2d47e236b80d0d091667a665c6a4da736c1f6,2bce4d36db45ada7533f2e6d3d42d84d5b58b711
e85aff2b967839b9597ed00d613c268d1a6ccf50,7b3154911931d4b92c619c207e37194057c00b68,b46c010f82aae51435dda77ca93d91b1401b0203
e0ad427b6c83a334362f42f8d1d3782963f76fa3,82b6450f198b15bd2823554d47a275eb836c9933,b463f2a141166cc739f27e5c93c9274db683ad2d
ec0bdfbdd9235119d210efaf7243b0ce2c9decff,f701d2f29498bb4766d814265995bad14c68ad13,cdf1ceca765df8b62d4888981cc27f023978c39d
21fd8cd5d3f98ecdd2847aa3bb43cce64af8f7b9,c9fd115ec575728f9a8b3966b5de73f1477ea549,0c3e179652842f9f65b810ff64447aefaa9d76f4
99e449eaa1b34d4d45df59600ea65cd8c82b2e7f,f2abce7ea58decf10255bdfea14740578068dd4a,ef738f01cf32f00fdd58c7687dca7581fd54126b
0e647a073e5978f2e6aefafc0b034b187dbffce7,7ce1a7c6a0722dcfb6db9f2c2c3a0a54e4a5fc8d,6e7f0744ca11202c2defc6c7dfdd5863245612c8
99dbbcadcd19d4babe656949c20a5c643dd22a70,6e6c946e0fd1765f99110e12c79db27a400c6587,95243ed6ede742a891297e91d687bf510c9f31e0
f42817d1a2d3a3efa595c90d58aa82aa57f77cc8,8822be8a1f1c1b6affca58be1bf337be4c345bb1,d84a7d1bdedae4f5bdb31c406c4f052ff728aaab
f6b4a54f7d2de15793e3da1a477d1ef274f31cb4,835bc62e2a8aa887170510ecc2ebdadee27bb4e7,91d8009b531b61d41604406e3a6a94e92f1b9c41
1f19b113983906e1cbffd428eba4488e78b4cdeb,abd494624bf2e722938b14f2eb01ba91f4227799,4d571a19282490972e9434ec4059cf6a01fced72
2e5b895d70f68daaafe52ecee8a66736b055decf,c6a549eb487f3bb5b0578a56f08db35559764b0d,188a21bbfdbbd2c5c0a2b6a8232bf5da9f6ffb90
968e23546c6614cff0607478721e181800ac38b4,baf5ff4e05987a027d8912aa231ecd3c79147dd1,4fc763ac5033ae56e908ee263d538950f71e544d
d2726c240648a1db264cab515969672355746c97,177b38dfe9423dd714a99e9fc34abaa7f032df66,b5c7997c88f39c0803a8a5f48188848843f9cc6d
c1d8e32eaedd102759c3b5132228aaf493026b8d,39164ad732ea12af79ecf267172146569297aa1a,cc5ee6b868935bbc3fe22c349b9c312029d88523
4b39f7dea0383c96f62f381ab46f866bd8e2270f,026d23632aa3343756ebf454d4d0961048d34fcc,85207e94f8e4a1904a67ba2a3be06f7b69ef146c
2e3e3edb5fb5b137c79875e5f018e456fdd8c664,3258937d97b8ca6a4ea6b6556fe46664da9d65fa,cc2fa67dfa475710c57c4b3b73631a0f3a959e3f
c450b63f1ccd696c8034142a985222d3f01895f4,020a58b0750902e161a29bb1f8218052ddcd2d54,c1eeb8beda0df3f74741677df85259e86b0a789f
6f88919f3775a94c3df98f6b3d2c03f885202e03,0a383d8c0f50bf3ed3333dd57f295864fca02cae,5adec3ca98120bc2c4110ebe354dfc50d7095ebe
41db71c21c1c00dc83de8113ad0b35f5250ca2e0,3fb0fab410ac4c791227d74c1bbd8ceb45f653b8,b00c0e44a596bdf167ded7900b3ba71ea903591f
890b899842b741f54f5191ff369c8a97a89ac845,2e8c99947a978f8614d4075b1ee0d9caac4945aa,190c77e8633d185d983e3e59d62443bd443bb807
ab01b0ebd72c646b66a6bb3fd55ed717b9852541,494dac5db57f60073f2d538f66b6570b9fd05beb,2577180b935364b1a84ee8d38f8f6a42c0b812b0
1011c31a80e0ea9e67497b335a8293a49cbdecb7,9a85ac204ce5e0996478c0c4ede0138ab5ecab15,3989a01968ddee76110556f2cb2390da751b9694
c745ae4836a0f19a1733347f208d263d1a5829e5,7778d20003ab3b62779243cfde33bd0b129bb61f,01a449c807e4ad9a4142977ee86b16d6461ad256
1e136b0cc7ff37f900adcb91b2783962cf9d7622,5124ab2521defb4623b6866e4d5c36726ab74608,6599f1d898003773f70c24898419f4bf6bef78ee
d02921d66b14ea499ef783a834388be1322620ff,5be1bfeecad2af3cc4acad908fa649849a231bf7,7afb665c92e9e1787c518c1fbd6d205476b36d04
7ce19c1ad78a75d84765790f077f228b448129de,a5dcd1c44ddeac28ca8fda44f6d60e3b179266e4,464b3ebbed39dd87480513372caadb5214fb1e3e
f7b1ec24352fc4eb77adb23ec70fa47388734c75,bab60d819ffdd3c7fa6081634ebf89ee130cc61e,7110d1e48e8fe40a95738cb993cb06fdf535afaa
cf7ad98dbfcaf699983d813452a0a5dabe68818c,023f08d54bef139841faaf7c954732498e139277,674ed4069a2fdf69362353707cbfa08fa222d998
ddbdc529b1e3d99244e2d0cedcb20195c0fb55e7,99ab6bd56d4d60aa3cf5ec2680514a143da4dd1b,04a41fa5b08de0a837f11af30cfe9091c36a2830
fab4ca449bb6ba351500c5443a3e9c0567ba19eb,3c58f26e83b91e2d79e894b03403d469073c7113,074ce9c50fa5d97afd1ebff5720ece287f767f6e
d5867793f6d16bde39e0e209a11741ba8d8b0388,ec40db3da7ab1d8143b4276518416aa2816d792e,4752230c8f5f5f51774b90e52ceec3a142b3f62d
6bf4c7a68d2491971350170e80414a07e11ab4f5,7388735b11726d1263de7058d7492d9f87f9bcb4,b4bf371b34b19d4505b8a330a1b9250047a4b8ca
344da9597f1dc072a634820a9431146d0b7c60f7,8f68988aefeec865263dfecb29140de582470949,6c7e6191f64ac8cea36e963028c190263d8a2ea9
fd28cc0db04b00612387baba33f30f8e0dc3825c,d502bccc1b03094d5260f1494baf49387f674273,a925522ead1e0ccdbd0c77c57e2ccc147b61dc67
a4672fbd1c097752430017fbe84a26d702e43e83,cc3cbbb7b96d75e816f38a83abcbb08b9fd8843d,2c180cf101b6a49c1f8bdf462cd7b4e729600ad8
07413be8b569f000a158c290fa856365557c3dd3,ca9384fd6c265aa76a9ef59229b3746153e6114a,00d4a6889dd2f79981ebaef3f839be5354d2933c
236e10d03aab15949f7c2114ddc39b63cf2ea364,66b7ed45fd0f260e2d9d9c00b844e27b7b8b3191,6cb24a392959e10186cb0bdc9347ef78ecc53882
321764bdd93a675343fa0045ec22a1c2d62639c3,ee387f7c66f418a23f78a0b6ceb162bec71a5d1b,3511b8097269e7622ef97c9a6da7f0db8a948888
df92d88f39a81ef2ec20499ea82cfdee6df04df6,b91fc3a0d3409b39e20bf0e0120ec8c072bc410a,dcae87bd5267914c8be0b57481f355a3eb700f3a
0da5d57c1e54cafdfa4f2233a17e4d17dd5ff694,d55b2c2a35d9a30f4928cab612f02d70e2704fb9,4012c3dbd47f661805bb7a831c6c687807ede3b4
ea6529ff63225e13baa4e1fd2c193b84d1432048,ee10850a5793b69b19dc82b9c28342bdd0018f2e,08050086b950a6bdb5a04f6054d58a497f45d7a4
7e73e0dd2314527e9b9a79e51fdd5727e6efdad8,01dc62b1275ca935ab65e856495faf3300f6dc62,0662a0bd44c557d338e577cc29065db54b57f202
b3a9c36cbb77bcd8079505ee9f16b68a09307ed5,dc9090e67f48c7e23f7701e46427169be78d03e3,1ce2fb8a4acaeee52446e881f0da0d0540097b2f
9f077d4ac04479b4bc3e46a3eb8465d1916df5df,703ae75ba6a9d8d1c39e81e319e72a4fd19ef702,bb3095866549b503f6419b773fa2e65c0b88f320
c96e20378024002d340434835ac2cf912c8ebe90,4e3a6aa5a812fbd1aee6394f98cc4c2425032735,e018264ad93c77e2855f144d004c26873d2f772f
5a0956d8050eb4f3f54ba0d8b9fad41fea3a09c3,470e77a5725fdb0eeffa9475a14937779dce364c,6fe647ee3dd194e7ccbf230782da0c42134245be
342803532de444c5c0710e625bcc2b884193fc51,3094f756903a6c06ff7786a1fa972ff6a61de457,12a2c56461dd689b24756292d4f069e8e24690d8
d0fdda6da718e26af14c17fc9d7d0fd3d5bd9fab,7bef4d827d905fc57ed773c2aa70f157a573e225,7f1050464a60977ad6261a108e4e839bea8fa8a3
4610980f2e9ac4269074d2d0613290ab78c50bbd,10fcae34a957e94837fe376fa828815ab99d80a3,4b157a14988b5f0637e61b5555ca6e420e896b99
b58fdc3e584854a4c4fc02bd7fc23f378263d25a,c9d9d42f0e3cb3d413bb755b7ec11d99e5446ee0,42eb06f5c660df09a392d99fb41166ffc614e0bc
95ad8f1694dd0efd0774767b0a08b79dd53130d4,284317d877bb10d11ffe8f6f8d3cd34bd51ee837,fb7cdbefb3f14cd66a4960bbeded3e6a739a95f5
e657aa64317a385a5c6fb52bf6c752e883220eb9,ff3acfb8cda7f6a077dfc585cbe9acb0d8e34418,5a617cd1082e80008559a012673db2eecb6304bf
15865e760244be485772a53a6eaa09f80e5ca8ee,fcdbb31ec4f057f1eb169a1214f6c50a0ad5a90c,c4a1cdceaebf8d01151fc20ae3e3a053180db9e7
89d27751911d6904fbbb10660a0194c43522fc8d,dcb1fcd9b81d364660b9ca5906e7b2f5e0fe688f,d0cc6494280732f5be8ccfaecbafb2b6b7fb0f87
d96600a02d1dd4ee53ffe9bd4efc718f906e80d1,b78761efd30a814d055d78078c3f9d0422ef6291,5b32c81befccea3ba64fc012e3e4216bb875dc17
7e4753bebd600951a76838f3e7c08f17d0e65505,e0a78c2485bbcce7fb5972b2c7ab7fb6263674c0,2240c690784bc6117f8d602c9eedfb23d0d8846c
44051b4af33b097a1069a0702108fc4799864c84,9feafc7bd73705fea94842a34ef704192350fe01,9423d5e390b94f34046ee030b5712e466950640e
716e8c8e8975337c2f40122becd0b596b3461586,8e5c2467e29e86222877085a43575f04ac1204df,c1d43df4a1e58702a57452499fc00898a1e421d6
f570b6cb7bb10b90a7eba22de9d4d10a09e83703,c917639b91bd8d0d784a0f84e6dc3c3789ff8520,492d75483d05af525822561fc8232c52748a24b0
7fcbd1d7e0a24bbe476d5ec4e67c458b742190b1,d708bef92f5353e010bb13857469c55e671a6e05,292be9029e729b03f4f6f2ac415d43ac90fdc03a
8e7791ac232d88f298bd3a5ed3c6cd511c48ce5e,e4ee8fa6a2b6fbebf8723712c63d9e0504d1396e,03ce23246f11b42ac3739f91e2f2433c66ef25f0
1b06599e8224da182c91896475658796826a03bf,550d0481b343effe45626780f047ed090a88bb11,9f60628e5b8283cdfce7e9f6feb7055eb4b52a22
5289aab4f2bff99cbc0cfac2d3993a7fce68252d,dc161e519f1641a8c44f289387ab2880d18e6c7b,54f2308d2aeca1b90a4ae98a94ab044149c167d0
802f24dfbdcba129c833416f1ac273277637674c,5db20610dd8dabee146efd6703a62c2d15bc641b,feb5bde09cf9cc79e26b01080ec9400eef03f600
e86d3af7e0036346c5f189dfc8c49138181f6d6a,655a5f526cd9697d5874e85727adae18e89040a8,a58567004b907ab6841dfc7d47d9dfea7e824df1
2dc0995067a410daecf4b6cd8744823c1f876d19,3ce6c478ccdbd58c04daa6a07a721ae1faebce2c,6404478ea444cda85cdf7f8784efba0ed6669ebe
67f3a7502d0f1100046abd87c5df2565b8d945b8,b733e21fd1055e821b9d9fee644e54c917be440f,5bddb3a435103997b2ae5b7f6f75a4de994ec571
bf5f37b14a4b92e9c441cc5bc2cd9924d3cbfb7b,e132ae2feed6ac06daf9e22f48b735841691188e,ab0079434302d85260bf18c420611bd1227aab1a
f66dd54bc277618feb9cf38d81b2651a4f10db61,5c55f1a16ee0c41f8f657f5a706bcb3bfc8a8f2c,4f711a8b2c534fa786922acd8453c49b40bc1768
b0c0309cc1c1dccfd11acd3284b2168d6720892a,793c157a9c69201caf0dca17b64b55ec06e34ed2,222a41be7b5d3eba617c8f0530064911fff84cd8
40196f4a437626044a4a40baf9bedacb3fc984e4,60623f39a1917afa3a03a44c7a8b66d6fcfa4f7f,0f1c4b4db8bae6fe397c14d06ac2d2e0795265c2
89aeedac1ec47570922fe219664c3374e93aeb8a,da899df6b2bbb980a2d047b542eee3bff03f4fa9,0b3fb55c6a8e75e869ed29cc1ad09189325f82df
f02b7508de42be8a2768036727447cb16106af0c,4825d2d16c2af3d3658e12637fb9fbed32f86491,49af134ba7e2b99153d51eadc8a190bea19f8530
01e5f4855a596496921e45f3b098f86285097d4c,d255ffba8ba16c21a006d7ed9710ff095c3d30a5,5b4c104aafdacafe36495a89c4d0e3a8be62fa9d
d083cc7247bbc6895eded5624933114d1e90c50c,72661fd5c106a5bc1e689eef63ba7636a01d7d24,5921fa9a6285f501df028a8fb4e1d10bda5653b8
59fca3a01de11a06d304d72b74df611a4e046495,7b2cd0bcdc450b6c117ace262f4cd9d82e471a5e,e9acd759a4aa88a8ad1ff97a574f108eb7deef33
f60523a3b92a98ab693a37d3acf2a84dd0d321e2,7a15312b54869784baf92d15a459691fd6c8c419,06da0b3db6563ae317dfc108fe2425ca8b3736be
42c429bf450ea9f674192c0a0f4faabc5a0b9e12,be448e29f63fd5d5d2b4320f24bde4ec197ca895,f7239e03e7c4e21aea30ef17393a5303dd5d5ac8
c6874df5c8ffcb6ad97096e63b63afe12e86b08d,b4bd15a5c07ae81b0a7f7906bf61c3c6e6180751,77b9d62520dbc4cce3751fbdabfff0ca73aa90e9
2a50d5abf82d4806129fe9b6475a090dc9204534,e443936e12822b1466e9f0ead1e464742412202e,6147d6d8a02903b1a11d36424dd53b229aacee6d
b4c8c1da12f2aa006862bb1212ae540521604ca1,8609c0803e592a3e9cf2ab9c2fbf567fdbc750ab,6dbe71cd3000e8d396fe2a05e8e2f74d0c012f81
ab969e0a9b19820e57fedc21d18e0e1335e74949,1da7ce46de3829225c6c50d831656e46109ec7d7,683a92bcc8d791f4f23fde8205229b382dd8fec8
f289f2694ab837b414aa131a0514c56fee4950bc,cafd708b6d862776b7454e1b229f3134ccde5009,22cd8d5d62ca165e36c6fe39c9054d18322e51f5
abc4a0a4e6ef0c0622bf155edba8c8394fdec95c,30166f8eb79bd6a0609cdea2fd91559bd0a7eec6,67a1d52806449c5fa249d2c2b6e84bec4c9f1c6f
1e37eef3d240ff422ad2f92ea9cab6ebdc8391c4,273a598be86b5bc65f23c36eae35e88356389a28,116c861af6c13f6d3d0d0d91b6dc4e0c1eb88550
25eab57a582a022f3336e052971fd56d9d3cbfd9,d2447026de4165b06c574c99f54f6f646b897d88,2a93e65511cc09cd0723e63fd74e88f693a1c140
86c097086a23476a6a7cf73d28bddee86039cb5c,50a37d00e78c9b51b6eda868fd28baac87361d1f,2b7c28e41a496cb86ca5b59bdb64596c0bcb3fa0
3cf00af48df50812ef32e8bbb82eb57f5edfa61d,33cf86ff9f11e17c1e3dc78cd4fb503e2059193a,ea345f34aac81046f9865da1186024615e10a85d
c06a3f2ca3254b39718b1ea69653d231a0e8accb,abee4d46b668e5985ca49f3bcf5dc2b53e244f7f,15a5a62eb4a0cd3de7d8eabf394fd1fe93e4633e
e26b29888565c291d9d1bb80a99d02ff28aea1b3,5944631246cabaebdaab78e5ac36426b7e2ea51e,0bbfad1add6d76b4aad7bac9d6b2cb34b8f7fe1e
9c9c6cc81bcd2d99e54a7b040b1f80641ce49b9b,e5ac99a4c97b52c95b26829b6f62ec0029798e7c,bd226c00f16b778444c41673678b2ba6eb6e1000
e5df46722ef25585c66dc698943515ce95438283,acee4eb27ac492447d4dbde978f8989dcd292d54,89f9ebc7b7fed1af0347c9290bc8d657fab8ccb3
a8cf67d73b3a9421ec3089eae5c54e38e934161f,6e7a82440ef55b0e8d125e49b791ac8dd7ca43f9,bc4eb00a7a1d2c2050a8056d13abaf8656897bc0
f4e28ab357c786dc55efc9f9b3f5a4356f7d0629,326776c7fa47a36692b800a78966c66ba295ee38,9ee672f9eb8584c4d2de627aa131f6299711776f
4d33e5f137bce78e1d14a02cee370fd42e6adebe,d5a104f493227253eed8daa13f8b631366bfdccf,4966e9376477defcdf6f292a8ef84d2079c7ce41
98aa06d47f1bb52ce525dba52024f6cbd5e636e2,597afd9f23bf2abb384f3ac815f52f8e1c2d2254,6a9b4a1b13b4e0585301037c6f26838216f43ebd
1d4c28fb35ffe12a16ae79c8e6cd3c4a85b38c7b,c3e94051a18038745302b04dd6e1a75fa5153574,bb49c190afdd16da94cae4c6fdbc1e5ae4f8aa7f
6ac50f4100ee4c4e967dbd5754d338d4c7debe3a,088c746d45fadc744878771d586ecd42a1d75b31,9d95e6159ef7e9a88b50c751341e789db2e1033b
985e8d3d13ae35a53b3353ffe79df261cb8e5680,8e4e229a5fe9e8086d39bf36d23496794e29fe6f,d209d3ba846b9f8a5858efe1a261f793b30349e7
2d1ab3410dee76eece1a7e7b980f0b278fa19310,11d16be702862041c9793a389bbf5c9ce179bda8,986a6feb95287ae33f0acbb8854327f43c6227b7
0634d5349d549e3af38d845d92b727504c752857,92771760b79fe0f30e67400b6e1f131287c621b7,32d6cf7093c086fc3e963880860e62509f69d0bb
fbc65314b97740a39dac494cdd1fe238554a43a9,a7a0f47d9802eec87bd1154c5abdd4a5251dc5f4,eaeb6148874625b62b5bb6e8e75f802b88ea11d5
cdf676c9b5334642fc72a5f17928b8280cbe6038,76d3a9c4b5a20a226aad427a61c87e12595e0139,7de854ef1ec86310c67192a734cd1114ef03ad26
a9d883ada1de38e0c6cabf8832952111ad56fca1,73287c35d20d3583840fa115519ca96baa659d5f,4640120dbd167ac8c800311e52f6694dd3c4307a
c59b6a5d8dfa4a20eec23345839d116905de03f5,c062061d6d16782c0e0f53e3fc9f2ad4bda0b905,ec02d0abb083a556a5240c27b4baf8a7dc606cc6
22bbcf4b27a574dd3e8bf1978f10f35cacf71b57,5738a6ccf12819d7a4a039ea70e80f69432e3b61,a362c93f73148b505d87feea9e8e3c7ade99178b
a6921fff7bd15a4635d0bffc5f17df08bdeaa6d7,47825610b807e0b29022956ed8c6079f82080a37,69fff102af0e272918219f7e168dbc9f3df8c3a9
2e70bd7dcb7ede8d97c18582ce725597bb0507b4,d4e0a79d9e43686ec0584a87d57acff189f01d01,5ce96de0f2aa890496721b3462629ae99f3c2e64
1a8444087a70a0984f6e2f84efb16db0c235f1b7,2a7744df803e34ae64172be65946322b09748b6a,d93c7579deabaf1dc14abe1b90b91dd57621b16a
f8e04aad038cbdd8719cc7e72b850850c8983713,859ae5fc7c8d7fd43be1e1dc11284c455a176f90,88959bdda78e45058714616f15d3d625b3e5b570
c4f9ec91c92b9d018b24be606b1c7cf74460cd66,bb637fa389d846893ed8e5b4d2b1fd02b1382ab9,b3cbf07f27bd59c1988ff5055f82dd1f092d6f19
9739a88e119f4639eaf51b0eb07a04b3a28fb457,ed2dca9a9b6aa989265b355d597a23302144a818,a87b38f7530f472401ec5e77aec73d37ab1dd47e
6010ece53248848dff792ee6af912ebadccb1efd,29625c71126cf418d6f25f7e868b40e6e5a24c08,c9e8bfd118dd79985f4ee8f42cae590c5268ca12
2c0f10d9887b676545b05e06e2c29a07d74d8fae,60c967f255d4116c784810a1f8bdf45e8f7982ea,35db2b2da3732abc46140a1b930a877d7bbe4aa1
fd26453d5a802abadf17a5a3dc258e6bea4ac632,d5d97169163c83545fbb298b812a7f34d5b7ffe2,c92e290d679ac3d7b46b15b8f3a53fbf59284cd8
39f553496995104b1b674d48eead521243ce70f8,92082ab28f3f7d4a149cf3ca0b6a6190c50be29f,de58691e75b64891a12b106fcc243a79b63f15a6
f21f7f0f506a66a8384c2300330e3235bbb68e20,b26463ed993e184d2e2dc2cd9059ca7a024552a4,e5472845882a4747c80ba6e0d7ceaff936c71484
181ee30174afabdb00c3d631ac4bda26c0c31135,c4ea01cf3d328f81311b2ae0118cf2c3944efe56,8bef91d1de212c03036d234ebd0ece80a11f1867
5cf15be434bdaf2cacca29270030a5fd0ca4012e,30a7199165e96728ee8ab899209fe83ed775454d,41d4e181ea3674581bf32633bdc90376513a145c
073b48de826c232bba310d8b05490daead429411,b2e553d3c403c2fc8994714ed998cc542c6eaaa1,ea812d1c2ea7994f610b30cd459c0e235f46fdd3
65880e66313c1329c4079e2be1a4121baa83ff21,4db332fecf8a81392120f58d42e84142161ab7fd,a9c67f22fd3c74fcdf352f11ebe861d0f526710a
ed2b73eee6ce40f37f52ad0d09d4f30421b6646e,f02fc4fe0fa850f574eab90ac308933cb8eb1485,ec96d4242a682926ef1df2724a9cea074aa69f8b
b297199ab6dd8e698fd8009d8c5b4bc26fb53376,ac4df2b0660b1f7896ab20d30a7f845f446d5b72,6299e94c8f99fa043920d005c4111d657f690e7c
ff0b560fe422caa2692f77799dd382e566a89fdc,145b37425d4af659e6d77faa75cc564c9bfa8395,47d7520b32b13967dbf65464edd65cf713477f67
533a11ec80671a14059c89f6ccd15be44f16f1c8,3eac88eeaf90fa5addcf7b03612dafe9236cd114,e9e8013316ed280b268485762206dc9c3357359e
bd82ad0d4166303b6ff2b0f43ba66d5fc7edebe1,90ebeb275a6cb28db8397cdaab9eb16eb961b835,b5ab81c98342cf824a8337be41ea15e1f5502b75
897f0e178414116764304b49b26db58beef476d8,a0171e433531aa21219e715be55a936ef9d5efc3,0e0739a64f4da96b414f5ed447428c44ad8155ca
9aac622dc91b8c9b6c9293c12901cf9f57d4d048,749faa42eed7c49def6323af3412831cf1e6adb8,6fe9a1509497cac3937163bc676693c832e62fe2
9b9ae2db1ad85bb5d9aa0aab7772b8aea9bb32be,f8b1801a8fb7a247ea31be7260c44e333d069a8e,c1ef0944572b0a38dcc30f9555cc8b78913896c7
568d4de77ec6088683375ea8ad376972e03d3c95,06a00b53c3ea8d0ff655a0b925c26dcb275be1e7,b28495a423993aebba17b3e157ea75e10f5e7179
2ed2c213136a4e7eede7ec2f4761f4d23bb27562,a6d6f938878d5723e8dff5f81def5d2392b0a3b6,f0748ad59bdff939e9d3c2f535fc8e046ec3a305
833a971877521a3a906207fb37e84ccbc9f27f23,c3736810ac018b5aadb7d54c6f6c4c41d1c59344,28964711d7941d466e54261a7581241a97e66a1e
c42b8c43bd8725ca5f479ba02124f9bdb2e9670b,fe39f9ca216b22ca75bf1f065b3a6bdd5fcfd491,8f083f6342ab8d193d5dc0ae2205bad4b1d7bab9
077a3f1892da9a3f493c321f905825a02b82968b,305e49c0b81b9db7872c2ff2717dbe54b92c8f3b,a20bfc07535f5e6d7d27fafdec826ed8de07ee61
bbece3e6680dd7a7a9454b1f55db125619f8e639,ba51494bd7d9f5552c91918ea01f3c9e02152149,5e148c1dca80849b7ddd9b51574cab821fab7a60
67d80d414b5d1e9b8cad34ce56f984c6c51de00d,3c91a7c01ea16f5fc9239b21636d4127faacaf31,34630c2ef952944108b702134db3b99cf2ef1d2a
ff68e7b9de5045c67d723933985da998f115efb8,44094dba2f96fcc6c252f9c42398b6740edb85a1,00a287e77d4917662b5f57ff99898b598c3fe996
b048ae37b20d06da7f9beb52dc7f50c9d2bb4fde,2c80b2419ead1870965686bfca004b2a7315c0a3,92a0640bcc6ad53326eec32db9cd8353f434e777
f2305d1cee38e762aa2409adb9d01dc6751db740,ef4255c65bccc121da2f5943600e2bfd7c1c2ec4,ae17e6acb678406aa91a9029dd6a0857e5c90f2c
f7b7c39129d72330dcb4b37010f1f5b7f729f43e,f01c8411908099b369e7c0d83733ddb78bcaefaf,d2a2240a2cf9f00c8497c696155c9e0657a614fc
590c8786902fb712aa84e1e87351f0cf484380a5,e34116f7dea7c3f35da3a3ae43d14110d4c70fc1,2a339485214d53d5c37a390fc59a314413e192ab
7711ba610a7488361472f2a0bcefa52a573c653d,696b7b6f68d3dd75f870dcb5931dd6216640505c,bcab6185b9f7a02da1aea46893ce7a38aca43ca4
72e88a345251c138efa396094f0e0d5f145f40bb,7f1e420bb05add6439b6ae1028e841ad7780b481,3e26beb1edc839f05063aa957164b69fdf8afe56
094a353d879f36a3c46acb1fe91b56295abe388f,3444b23c9a7178cc475d9f72035a0b7530958bb7,2a5023508a2bc4ff3ba4f3a0ca16366d3df86db8
3f14a19d3e5ad546841bda2f8abbcb8029f79370,d198fc46cb6cec08fc91cd35d34c64e182e207b5,738a0a35de9c93d37368b6ea796372e757eff5d1
1cd8c249b1cba95a03488989ca6eb82232f88608,4b88fa8e3b56330086d17a01fb1f836d97dd04d0,471a5eb4e01279d5444dcc9f51f0c730e309a889
c85bef5494f4ca409b37791f96acaef97eabc7b2,81c8078735cf79755750e39e0a6ad2159ae61ead,665c1b396670d57d6c595bafeea3aa732f52170b
546455faca05d2827398cd0f2ab76ebe45de5b1e,01142f11d7f6e50b6b80b75ae9a611f8fc662d78,b637a3a022e7f959f07f9c60efb619621890499b
d3722861599383de61f0d09158917a8aa691553c,9e3f64733359a6ca802b5e913ffc4c6626746ad8,6f749cf43d6bfcad745e6639aa1b5dc09e570c27
33db5200e62fc14f07a000ca92afdbeb8f4dee0f,8d864559b7014df07a9fffd16e0654cdbafdc421,2b66f60a8844f45cfad54fb59703b4c332e34171
10191477aef35b233b08ccded1b8442ad763c156,cb959c2e6fb5911c74c07e23d00346902521faff,ae892610080ecf4711f1b105a6464ed06ad639d7
554ae218cacff3de526f7f89f8f1543613e615ed,61f9bc35e97e554dc79f282dcc6f8a89b1a1a3e1,27fb9086aaa079212cf225f194efd225e54c50a3
e0599bb231c48e7a039e1703c09f6c6ff9a62632,e9dc638a76649987bba77eca8c789ef49d6433c4,68bc5da3a23dd74a2fcc792f7f12223855644196
60919b497934d50e039c7a44962f101cb32f129e,0600287c638a5507710bd600e334e437675fe959,6df2eb5fd44a69d2f9e8f663c8a4972c3cbbbb21
5e0d5cd92eb51686d5299ab62f6ce3806af8b93d,be2c1c751df2f669920b3826ad495603fee09463,b1a72a86e5b6af44300a19aebec096df00000e2a
50b6978e681268a2ca80d62e8a7d274f65120719,22eb1e099fa15b018ad81c0bdff24462190b7afd,e9ee0a0be3513d2949cbd1b120f1b0e90d896a93
f5de329076217765e1127c424c52837a572f0f50,a9db41f1e5715fed88916e4cb2a11178af2bd10a,6421f2c36bc406e30f732086588aeefd9ff96fc6
2099e35d826b5336d0aa5e1717dc6339dec27cf4,c785fa4435a9abd48c8e338b1935cd5569900542,de9880375118fc0718080b97bd61090353e32fef
fba3da47c6c762c7e260f89bba56bdead6c42ba7,ed520548be3ee7ec66e4dd909c0e61978960d7a7,59c33d69abd815c2ce7b1dd4345f6c99b4391570
fbf68af60533634bd627ca24a9a6b57d4208df89,6a56ed24abc94c040a1c41a7890cb5fa44e06664,2f33c970066529c482f37a6a77a11b01bb7fdccd
6ea0050990e5786bf369dc68b0971f433e8c9069,c3ec62878eb04316a545fdb98553f5d71002bb07,16881556b915c6916a488334328d586951d76ff3
0e4188749bacc70a7d472f05053a90a1d0ee620a,7f3a5eb9abbf23c97b22ac93c287ec7e228f0ae3,943da88ddacfbad9b5d730ed61c59cb31529e27e
702f79ec8cfbcf1f077977f595b6aadbc186abd3,c6aba5cd8dbd71f7393b1b52ba401c20e09341c8,4718029fe07e813a2e61ece0ea9bd6d3db3d0bac
90844c2027e078fcc1ff6b8d3df911a77bac2ed3,0978f6ce16085662bca71344e135cad6a507ca49,3da54dcf9f87336887f592c98c0088372da876e6
96aa2bbf740e1af0e814fe6d07250fe06af9d510,b1f85792d7a7aa90bc2b200d3d2db0c97875fc32,9813eb9048a413d8cde171b9e2fd558da1e3a46f
5ce9353d58cd5ee2679dc510561ff35914329daa,4e28962115ee9479d465ba00a1db6028d2badb60,6ca6666d28d27151fdf2bf04c570d92afba6e154
57107c331093212fa5bc0d8fc865b43755ff3f12,7ff393085e3b1538a1c14f3ffcffa92a6b4a6c73,8120fb8b774ae89bba6a3d186e4b7723a84ed3d2
54dccaaad1a768d2028bdd7ecb238fe0e5415bd6,d29473154267150c65be268cf070941573a58ffc,411fa298ae03b9420a722ed347428c27ee423c29
a8cb061a5063fdab6cd5c1a92d7abe5feadc0c8a,527c68b6c3c9a77318768ad43b1558278dacf465,4293d4455c6481529846ff30ee7f50a19ff31bf1
379c1414a7088019cd71b98ea36353e65bd9e8f5,85c648e60318526bb63aa57dbf3c862805717606,971b8b9217d257dba56b7cdac22d71492fb6a7d5
62f21ae60dfaa4dc6f37972a03ca9acf33d0b8d1,43b4b343950aa11420fac1471c4d3a647541f2de,b108608b2918674762ed04b436604bffad4bd58b
6af886c2b961d5a4ed7772f81d6348b8634ab385,78535bbcd884a550ce399bc6c0ce8ca47017b45e,229eb93e72156f8d7175c3ae379087b8a46b60e9
b7b495a679e1ed166c6f99f1247398d3dec5dd4d,366d1332d18eece8de310aef2b9bb7af07d12e7d,5f3749dc49b9a7a8d68af715d51070c8903d1ddf
627fb9a25b1866f9fa30658ec7962f4cd31ab145,5075198a8b76034e5b5c36b8d783e276c6f11b56,2f1eb9be18338485bd807dd03ea602d41948cf6d
ee3b5f5a62f09a33031f5276351bb1877ba83b5a,9f3dcdb211ec3cecc9013f45e811bd0f633a7072,f62ffa74dc5eed4acd756d59cb891a3bf49f4eb0
4d57dee8d9e98e005a94fcd744aa3047a20e3a98,4808ed63e3717bd68a3e1fe0c5bcf63463016e0d,fab610a92770b9e5c3cbc8427c88fa770821e414
236febb14891bb2a46f273f69aef5cc7212982c6,f1bcd02aaf66b7eeaddc6173ded485938f8335b7,6cacd9c824d34c42f71977b23342dcf2403b47de
02289d1f5b986c96b0843110de46a143500f4c79,40418f5b3d5d69b4c38fefbbc46d353b84bc02ae,510a281c3fcbfc67a8691a892a17d37cb662dbae
8784dbc095442790a2f24cb675fdc67d1fe2d08f,b1d9d34665ce1f26bc1b95a87ab085a6bb3530ad,559fcdf73611ccba421b988237b062ed84a5e287
98a942a37e4d19a3c85f03c3fcc01f907abe3ef2,4053d59a2c9745af6f84fbca70293cae81a05006,66bac7c415966d5531b9b1f020147b522740040b
a5f3040da528a76bf21187f647e15c24c82d980b,c0fa45dc922b2ee1fbf6d63782e50f8b46c162e5,76753438edfdbf29d3c12c6793ee5ab9663eedde
22a4cc66ec7dc79315a0f63d27d2ab003f7777f1,62d5ddffb8b56411a06b8288b6237e31ff3c711d,6556d18bed27361321c0a2df91a1a6e126db2b36
e0e8620deda3a3b67df3a99a1f7b9951db533d33,74f95238064736efc2e83d349a712b8140f566e8,1fd2d3a83d2f3b656e2fcfe6a3399255320f5459
e87c52d7dc87eb53a11e91e2b27f55abbc03cc85,9695dba4d98dcadab0fd972ed9b5b20d3323781f,33eef1f9b12f4063fb7c93c01f4b184f0e1e4ee7
5cdef8050bb607ca65845f79a35c95f3cae518e0,f832444eaa72854e53515b253914221095c92419,13055bb58a2ca715666b5f19a8ce4b507e921886
20674089bd3306c2b2b9bef14647e9c41c6499c8,aec7aefdd5a0beea97fe69de99815f350afaf717,91563115c42448df25ac313b4be6049e0f65d11f
a75adf542dc2e3c8c0ff80a976d96cc53d5598ba,a7e19e9f068422a4d6ff58ecc1559c0f5627612c,8d2d91d5055e27ee3c2bed9444241d4ee5bd6dbb
74ab27ae4717aed64f7aa12a1ea5dcc772582961,cf6a97c8edea0f589a46eb3b862ef36455c18ec9,067d96242c10b0ec3c24f1461d71d450d9d72fc5
d1aaeff832bd6b0ef20f1f38c156622b0939ac7e,9b280db2b12bd6fb201ebc967af98a1320ca14cd,eba76dd0526f13fd297eaea1cc0d6228f88571b8
46b52d92d38fbbda8255542e888d23f0359b3081,038230bbeaa0828d92b1740874b753308afb162b,816ab7ffcce3ae3b73fe5fbb0cf1f363a9efcfff
edbddec98a5e2ea120ea0217656cbc0fadd838cd,a6766d62eed085ed4ac65e7ecb81876b0205f11c,0ae45bd2cf17b5d9dcc39f4f4590a214329e57c6
54aae023ea2f4ee864c4ef3ce98ad387c166cb52,5acd7a7b83643e3c4f8dc96955906b67ea14eb8e,9432a550e190d0530971363b55918ce85c045d58
bce88f2e2bf76c3f979902aaa60598a0487f1509,f6c741ee73d12001867ae9a750165320871cc340,78f23a462e3f4d4c3be14d4ea2a83877093543c5
fcaea2107583d5afd1d2cf43e7d85d32ea1248c7,3d3c904ac588dc79441b0d9c29bd79b6744358c7,4add05c625395fec0a2eda897f3f3dec67f760bd
8bef28ccbeaa95f39020c4c954ba9bee9ee5c0a9,a73869b879537feb38206e95e3ebbadf755fb406,578ce51fc3178e9a6a1602337ee6626426739b5f
8184287ec0c49498f61a587290a0117806282d64,deec6fc4ba954e698c7e928d9d2cbb2724a40b43,fd125b506e5f69cd2d70d011745c73bb35f8bfb8
798a4d76117736af4bafb662ecaacf66f0c45be4,69d40dd17a37b87ea0d9ab6aac62703819652470,4f9c19d94334a8ae546c0e9e0aaae699f16efad5
ac89cfc6c705d65fa0e8a359d0a83e0a08a261ed,1d010d918bdc0d0eb07220f75ead869100093f1d,5198e47e36c8bceb2842570a7e3f4ec7fd8748e0
ddab39dbdc65259d388133c8a99f9ab028c0e879,a285500d3680b13c2c5795d99c51404764b7df39,1d70437017f8158469f0d91186ccfb177bdb15dd
812736bd416afb2f02c894259aaa8b74f88f9c3f,cddffbed58d6cf218eb0266455b0ae5c8bc806a3,481741c65b34f6090e319161eadfa4612f786736
a0d4cccd873a152308f0f917f636d17ed6d86100,9b87fb4a347a3ac3aef351440911b50899b5e444,e8da1d081a710fb13101bc265bc363d05049316f
16cb409fbf3004690ac9cc22a41e4d564f1e441d,1923c8a6117876ed9646ed0ea8a7f8f2f49123bf,27db63969a047b37e4cacbd5d1be12b75cdf8dd7
637645b6d6d534f65d56a5b6a8582507f8f89941,81fd3e274831ad5caab055f3066cf3751e96d4c2,d6ff4ed9673ab5a0cd0ec8fd4c1df23429755d17
06cbb6edc7f1c0964999224e64fdb21238ed2bcd,7f886cc4b0f57b41c7391a2e359b3db16281232a,9f47e21da3c24a06be2dde8435acd3b3a2d1aa72
be969205ad77a1ecaa8dfd98bcfe6257d3a07b0c,76df7144bae7df032872ce6a009b6bee110ef2e8,09625785114812ff5b3565d357426e7af2e537d3
c79df5f0fccf50ec0c18d580af898b68021d49e4,d8f06aa4f163efae1c2938662c5e816e25a42b64,e03b9205206455c56174029ccc35d27a0e43b61a
8817e896db8619b278e679b1c62bbec316a12f0a,a1ee4e04ed8b5410a10b49b854fa17420eea19fc,3cfdf000a2506431a9176e47aeadb1db67d7357d
86643710c438d759e902012bd98c90a9996f070b,f1cb5d8f71cc09bd03a3fc6a67a1803bc2265016,6a6a17717ac141abdd0b6f661f766010837ff212
a764c035b23b0a278afa3710542ce850923804e1,f8967668371d7b2fe86362f898745d1710ab9abe,a33e6230a00bde7fda922ccf94a49da79f0bff5c
e865ab4c3a52fac811b39f24b4572610b0e59a7e,d0bf7acc188e3a0b701c58f48a196bc2d8ded78b,1b393c80aad885242259470682078971d29a83a1
9a7a97175ef8d78e03d878b29ee5d48d24186016,ccc843f98319c4dc3e5a6654f4c20a238969e284,91481a5fae82c1995f41256dfdb08c0f278348c5
aa43441ac98ddd6cf5fcb6b6109775a4ec91ee33,4c8e802dd36a951f6925bb8bcf4c9ea043235f81,e8e53d13cde14e49512f220373c6ef2f9352e1db
fe0048bcecff7c5c9af3fa64be991da072fb1ec1,32fa0ecaf991bb0f8ecca00675a31808976fbef4,3ca3c7a60609c3dd861f4335bc8118a83f0a0551
90eabdd6b4cb82333039c102808beebc9df0a3d7,283c213a0c6ffb942860649f703b4cf8862e4f5f,8bea5dd41e86662f33771e442650d774af1a3d4b
6e4e3b85800d8f12fabe4527e4c13ec5002d9a02,e74797d41150a8b333a104c245d69a700da0401a,9274f17c527a2e785206282bd05fe7f4ccc7a01d
0103964250203de699636e16921fec85562f0b17,16f5863847120e1990e3bcb14948d78a04936df0,7974f39522b36a525cdfd730a5c989d78308e88f
e0de75224b17627c9087f5cad5180c43cf8fffe5,7c21b371051de1de1ca7891802b48a51a8d2197f,dc1e0a6bb3391a0fc1dc1b031abb454b0f1f4dd7
0c6287894b88ebf70c22f4c65a83e8ff2ab99315,3994626cb110c51bb87776f71fc886ad15c0c4ff,abfd975571b3fd59209717b7ec76e2740aa97507
66b471e5160235499f94848a8eed6084c86497df,e8b0fc88e340b1b288e9e31ae8f3d5b7847ab686,6ee4ee960e41ae5053cbce3cf1336d20e57be942
45bf47ee05bde9acb4c64b1c39ea0009cb405c7d,e148afd506194474790e974cad61118610935f93,f73fc7d566fc275c067398b083de92fccbf8a1b3
0c9b622a742063d1496cb47ff9b18db2480fbe31,bb39ec161058e23c3fd41b3fcc9f9c47adb20779,c92a035614a1c9866ca2daba28ae283974b68219
41a6c5e967abc1588e2fa9bbb301704555b31b7b,a76085e463af334c83a13341f3349e6ee29d396c,a76038e1d1eb5a07a2cab78044e793f947247457
b6aaa06f83f64b1f574f0ba41ac8566c2b5d325b,dbba2d2746022e583890e6ddda9d081eea30d40e,ca29df1aa9c58b951d8e2dbaa7b98a4e56563f3e
e2eadc51a3516e7945d559531ebe4bb7d9a26bf7,534383f6860ddc205294134f53d981ed1002dbb5,288871059448cddfb241a8a8be22854b5e71b640
907e8402ab8ac165fe0a35cc81d180db03df8330,3a095f5ed5b1b715f5697aaac3d1274ca4674251,ee89b7c9ec683320f2fa32cca9b46340a77b074f
1fce5121f3b239994a241d91508f928ca2052988,bf412455494aa6401c89ff331f89ce9dc1eff77f,1dd80d596d0f11601c6c834df19cc1916bf9ea6b
7cd082ba5fdff0517a53e8d711ef654c252b5b51,83604b709c0e8383329d3fc67c37f380a6279404,8c67a4370be13ff0fe91ca86f4107680037d1657
573f2c20d757f2bac27c023d421a81e028c5ecd8,0ba7ef98b39d7d34ecc34f36cb230f5f9c9f0f2e,d3782401347e6887bbf2d9fc421c2c658beaac6f
34ebeb15ed8e3ab334edcfd953bfc328c7b52b5b,1c7626715d14138249a4a7fe0e9fea786ec00959,b29b81ae7b610091241f2f22e53ae2948e114a61
09587d0c1b6dd5e8de98b1e5af284c7a51523d01,6a00f9f40367640fb0ba40f8b705ba93da7de93a,4556cb35d1c96f4d775a2ae993b0476453d232a6
70908b1449289321e48f58b71266fc3e4884071a,743d7c50d0b74afe5709a7f976af2cf3259ada49,9e7895575ed1f29e0493d1f6a8e1704786ff1ac3
a19deace45acd25050ecfe0c8f31db1255982876,60b0bc55354360e257aa58cab02629465f1f28f9,dadc10658ccc475d2f016d5c360d1172d1d66842
29cfa3b2252eb8305ebd322ce1ca55ab5092de69,59f293711a806f74b8ebfc175f64fd1f505af73b,ae457a18adb106ee3c91d3f6fda679a16ba5264c
252707a873aace64a0154f099f1dab71e9c58426,5a680f014892d09c531e93ff6c058731f803b84c,ad72542e9e3eec2f4ca704690080534786c93dea
f27b55e9b2730ea8b4c8b5a81143ae618cbd31fe,2cdbdcd5c56251e49e7c56391a8adb04adc5912c,dbbf7e7f3bf1c565ff756c97e91ee5df1357b130
eaeb8b70fffcd163dcc3945ad999649b6d5e9227,4361e36ce0254e4cda21977745ec4bc619952253,ea8e3cfc37b068aefe4c0cb20e3fc081ef043bcc
26888342654bf4e8679de36aa069118cc4a52859,3b7842c30e21d72345fbc4708523a283848279b4,492754ecca850986a256273918bc4006fcd63bf7
2372a069268bb381d8248207ee7a0484811f5b27,a27bc236a06f2dde0c4f8521f1ce0d3e2f75856c,0e142c00cc432cf238e33c7274d2c08b396bb605
430f1910ed39628284a38dc8a7d44e0380c9cdd6,ec3a04da9b8f5f172ce3563ee17b17cae393eef3,f1b166d6b8013fe8e9c192dfe9e3908c5b379625
ea659cbc2065d5c0ccc0dc8804eb02efbc9bccb5,762057f46d321c99d1cd274a7e19eca5180ba746,dcf6063dc3669441e4c0a2fad206f21b253f2916
a05aa25aadd53a6e9857e511a82158c782c61678,591c1b0177b188bdb18572a0b3b20dd1d1ac076b,3ef0db24047a6e5108585a9be8f68bcba18e4903
49ad3b0d2c03a4bbfab9fbe779044357c1e0546c,a45e5e7ab643ada0dc7c122c405a3e84078a9e89,573b2554f4ed717c9d6f8ebed7e0fcb29021ff86
e7ec91eca8b4182e97a6cb88f50504285495df6c,25e832940cb6fa76e0c365762f66c466a1e6eef3,51ab0d759f6138a639453a429216f0907ac8dae8
60c95032fa92ee43565368feb999d9c66e1d9c64,76e3cfc38f770ac7fc6ef9cc2a1720eea5b4e99c,5d02c65425b2cb33d5c3b6ca07a13c35b4dac90a
b456833b03f54db6bea77cb2f4df20c856eba971,927e3fd455e895dea7a8af31eeb5bc82c6f7d24f,706443c354b0c9db48f7461a15f48086deb5a187
2307dc8f26b202a6eef263f2e2d7e6d2ec04a641,4c8249de3429731be1c98dbe8a75ab5d9ec6380f,f9b216f99a3dd7822d9f3f112aa1ebb7c8590f20
addd0e7dcfd08c9bcdc1a9d636d75941cf1c8530,61f01ded6193cd804b04960e151725e53c8cddc2,f382f2d6edcda2ea561d522194d61a8845b596b9
fc94770cdb70e26d869c8a75e2b9bd70f171e692,9e8d779f316db1895795a5fa191e4e50c27ffeb5,a730bf2b003c3715c19d4fa0a7c56407e3760f36
da5865139840a94a35177e27297296244787876d,e6b8aa07d7ebdab77f72838fb3a36035c4d75d19,c13517634fb6065309eda729db210ea2af3b1e32
8bd1f196393e22d49f8bd281da3d4cf3c0926891,41495627876fe3c013abdd8e9f650be3a3ccea98,2ce4f0baf561ba5ace64b9389c9f156f0c618909
d45076d9d6bb0c73c91b9a615679d3fc277e7cdb,9201047f31ec67e94b578ace4ac6537db69fd3c9,71c58c7b3d050d931f624c485f762f5fa1e30e51
25999ad8fff58ed787b8ec2999e5963052b1699f,3a34fc7be3402cb52a436935f31c3c4ccb5a2d86,def37052f159ff189b79860a51f66fb97f3904ab
03a961709b0a41630ae65f3723df5470bd34d58e,d153c75e84df79e2765ee566a40e2e7b4af1e39d,0d8156fee9625e8d85aa67f2667b7bf77e1dbfec
5562e3e440991e5d1270ea81925c403e1425da4e,598da1936e0f95aeadea62ed77cd1eaae45f43dc,b68512a96987120e021db04cd15865bc91e4e102
c3f27a2f1c2fe0f1db4594aaa5d111eaf50dc78a,98ec81896e01c501f7215dd2a39f535621b4c4f4,eed6effe27a384a2455c76d41811677aa2279ac9
e28b76a64e197166d26620b550ff959e22bd0435,d92bc0e7606b7e1d207e55fca54deebcbba569ff,94665a40d760b6cdc22b89278c201ace10a0b57f
1b2d7755aceb4592607340d8703410aab776be54,c42e64db82d1c0c40a4b470d46bc70e3fd4a2477,d5a50eee8aeab634b763e2b8e9c80f4936c50fcc
d2a1f9cb200b2b2b7ee5219c16e4250b037cb043,1ac2334b593e9ba9d9b3442fd1c1952e8fb1ec75,a0b637530cd7b81d5587907e0867075f9d7fd102
c26f9329b683ec0beebc131ecae9c120ba32627b,bc6ab39ea2f13d24b8a53a177901cbf3fc689143,14dc066d6ba599bc2ef8a34545920266f956adc8
4d6e3b4e1a4a9a0d7eb8933d83c154de1f612a8f,b11434a6f8f8f41730b7ec49c21bfa613bb99378,90e43e055b34073fb92f5fd7f89a6a4ef790bf5b
b2350d90ea29de8c1009c8d1babfbfd9a25df899,9b16fafc526d9ea57209fa6d48a364ccb72eb1d2,b923613eadbb455b35adae8facfb479b7f9f3629
b2a5334a7594238d83b84144e41cb0e37d8fc1c9,98ecfb1e4146927de0530a862643ddbafdc7a249,8eb2cea3494b684c5e5591e12b98511636ad1353
ef15d3d9ec80213697bb2acbfba3e6ca0f8fd487,37b5147b19c893de4555b0760cc8df1aa24b0f93,95dfccbb5e35bd5e97013e0336ee6a95ec6b04b4
d7f1e56191970344b538f551391f36907e9fb048,27a1acdc7d90a8aaa931f2d011fdd6f28695bafb,ceda27ae256cb00987c9face4adfa80a20477534
aff2a424312993642fcaeeb34814a43ac6973dcd,83ce54b8153d6eb47b392517e3092ae0f501dcee,fcb5531fbc90cab7e998ce8eab655182d165ac50
f5cf8956c5622b240dd8f2013a983afdf5b59014,6a485065ba42601a46eebed8ab85705bceef3f23,2ce3656ed3e43445a41168015466e8490bc39653
a19add9c886b7f64a2371633e16cf8ac2e9447fd,6dc47c71fbd26f85458ed5f923e60fa109f76bbd,e28238da9b5111fbceaf4bdc81528ef4cdfe26e2
a8352f3e99382c195ea69466e2f63be2ff723a9a,403292a13151dbc265748d2119f9d1bd52fb9d54,7bad1771390cbc297580a4d5bdea5b5281a9012e
b2ea782eb4cfd6fed9a85619390793815c204dda,1ab6fc9a4bf25638a2e2364f8d4679025fcd3613,f6b5c513bb73bc476a71769e094ea8401eab13eb
82a8640111169ad62aafce0e0cbeb2fd6864af44,af9c9a826e888fa0927a1969c93bb90dbaeba124,7cefe8a822589c09be7d80381a6ef9c4cc32e3aa
94c87243ca2a55d5374a22900b59bfbdda348d8a,4193563190b9a25de40bd6803f58e3529539bb18,776c39dc0a8b7563b0f511d19346e280a749e9ee
3385ce92a2ce8a7c6b47b02c689e8b28b8fc8362,be39828fca10b355e2cf9ee514736e87157748a0,d1f035f456df43bbd068ecda33d2ec08d9190b2b
fcae0e311db59f8c545d7b2f37f94a343c8ac206,e25594c48e207157dddad49d8dd246fe59537e57,3e94af163bdff38073de96da87ed074c167afdb2
cf5feb0dca15e1898739352de4bc0028b831d0f9,8363c48863a1d8ee33fe1cecbd184030f86da0e9,9859125c7b927677e77085dd99b4b4b83df65ee1
eb8325300e523a56d4a11c8f2dcb16f5892a5cf7,2606cef21fc2d8d3679d33c994d9d5fb04a68def,fa5575ea549cb3b9f6c70c3d6429db41fa46864b
b821b9d502b1cfea62fcf2fa36f439eac09739a3,557e82373484ddb4b48373d7e4931d7b234043bd,4db653998bc84211acce9ca2945d06dbd2feb90a
7475d22154dd441e70e8c256642e33a1e6a42dbc,b900be6142403533e6c6d7cc2ab78eca1676b797,db980a5d18d1de83a9ceccad8ce9e283d58484f9
c910ec814cb6bfb0627142dfa44e17ecafc9e49b,4e3c170ad4fc325c532c2075dece7459b9682f5e,7cef39657f0211ce337b25aae8c0cd7901b03718
8aee781950f2333140c7bace9bd9c36be86af4d2,1bbd16d1b7d8c7c48348d63a5bcba07e32ef9982,078aa5d04677fbbfb0818bcd0b004719c742c5e4
9dfda963a3df7c62be5ec5c94de0b149de590f2d,ec9c81e77e0f39f2a5748fadac320f6251959748,ad35fc82af76c5460dce612b2792398bcc9833d6
b6c4592513f8a8295093b82c5293c2570003c33d,46dcd4da760057b54e5f5694e8f75408c33fbb3d,dba189f4af385e887d479365612d398358d9f732
8d90cd3e64c8e2cd348f5f5d88714ee259f05527,4144f8d93a7f63d62ad13092c72a290b3a3f967f,5395e52539816eed706dbbd90d3ef5051857bd30
eed1fbe38aad67688da6bf7b142e146ca34a2fbd,a9698b6f6ef11184139ef9e53c3bed8b24c0942b,b82af25e63e562264c0cf2d3ce5077a272129480
90305b6032926a4e7d19d8cdedb183310d56edb7,6a94d2683bdf2ff9cec4aae2815d079b592c0650,bf17a84dd28433d810b4f83dec7bf08a1eb52c87
972a9df03189ef97cb7de63bbf9af1e56f74cd6e,fcadc801638ae44193e61aafa7ec1a65630159d0,63c8e458bba2831baaae76913d61ab0ccabc4b94
1148caaece7a1924ca70f4a6db73790bb02c8856,5604bd951ee6bada9d50bc86d8ec1dbdd84e6948,a16f35dcb18eedba213c9311a76babef6d529dff
e66378ee59998ae15f8a3b6afae4f657d17d37c3,2da28054d4ebb426bdf6fd3888df387c4cf6d0fc,19ad26afd850fa79b4bd599042a87c88abebdf14
75c16b61266043673223fdfed30c543e353d4b6c,7ef33cf4b2857437662c9aaf505d824e3fdca023,425707e936772a859aa4e0208fd671397f0b2808
2ed4071c1e02e8374aa8ca5235df314eed3dc7a8,55482bd87644bcc0d813b90b4c67187695d8ff55,8d441929a8c725273d101a0cc3138ce59f9c59e8
90b8b9d121a3d60c65022f3456d896f68a472795,7bd1ac4507647dcc1b07f0ee09acd8676f0960c5,6e1d7b4e57e0317e53947c0f33203c28325c0489
c6af4df9b91312d1feac6863b934ef14794b31a4,f32ef29253f6f347c568adf4686de4e10893bc6d,0e9ea11859fca6ff4a40536c22f8c25483344252
5012e45d0482034268a530ef31a3e33c2360e1d2,3d6c53ee74d148bba2a3da49d76792037b78eae7,de650dea55203e30699f786b59cc811498c9671d
6c065e69fd17b5fb5fd7384f4ca97317cafb11dd,43bdd8c07e7dc0ac9814135c4c99ad463ead4890,d2c2ddb337c3bea49c1fb5b6ad7408fa128b2d53
815b17a43b059c1aba2023ce866200f6cf887f2d,3a07aadba2db6140876ab58ab55ec7b0a6cc6d93,c122e16bebcaa76a8e1740d7404c1eaf56082a9f
6c47f8f4d79d3cd571e5d6526dec0791d2b2c8f8,b1e65ca49fca83bd215b4c8e8427560bf9083cdf,f5d76c55932f8e5ca2c267fb9b0a1a6abc3936ce
77e350b6b8dc61de3cba519b0f4f79b25eea9f49,f19b390c685209851873339a9c9f9756b0bf81c1,0c62ac9f1624faffca6d6505b6564e8b9969d3c0
e9b394a5507b35cff1ea969ef7991ee0fe2c6d45,6eede0f71f0fa802f18aeb6217d3f82b9d5834a1,f7dcb68c5a0173048e3a1fb2cdd1a2c5c0f3b761
89605f47c23776c423698a5b4bc2493060e3c13c,65b442567218f772939978849f85c497f96c4dc7,99074a557895249d03538e5df9861fcd6ae9a6f0
899981f318cdafa2e2e4764f0bc5a26889091ebb,dd5c2ea6e92ec1af35393ffc8ab83cf81fb80eba,d13a8671274398f7bc01e2a9dfbc9fd4b2bee4b6
59811090e1269d403f67bbf74d6288d4103eebc9,2a196899bcac210138cc267bb47475075aa07cb0,b5a71086e840fd6080d2d376ed43d31918ed1d0a
edf5fce7e33aa26cebca17878b42971c8da91475,e9594227538ce6dc537f25cf7082b5853034282b,cc260eb7b2549e88bb6c2aa0480197ee5eaf5016
ceab50cafbfe9b4b8cce092994fd1bf888e9c476,efd92fba01224190b6b225f487ef3735aa9c58a0,dd13b4608886c540135bf83d2992107bc03fdeb0
a401898139b7e50d9b6e872de949b56e4fe0e24d,5afd809e88788ea53097471a7ee783826475d15a,35958a9b6b927d8ce9b1d0002ba942e14c6b8422
abb7aebaba5721512c3d16857c78781c60259e66,33ef88858ddb65eedff41e3a1108cd6baf563917,6407b5f4db68d24454b0fbaaad864727b5c61352
260368ea557daad41a5395c9d08bf1f2eadfa2fe,5e7330448dfdf3974ebf638dc8837c87bf0c2e5f,bb4d3fda25e858b0f9153a0861fd8336c6007ef2
a135940cf5184c7af0b2ca1a7c72f58a45dc4f3c,6757bf3832ddfe5cc0fd488e98b20d5245fbe8bd,85230758e453f88ee2b89665f774994db443d968
b8723226787a98cd1bb7a1020dc0e73029991df3,44dca29926bd8364d5b013cbc6820fde67cf3e75,55629aeb19b0e7cf968d33c9fc0f465baba8f82d
761f65cef8dbb17867efcb380db2b28d1454e701,32f4931fd24c18db383d9ce156dec1a65c83d98a,131c1e1b938c14cd5a3892d92d20f2950b13cc3a
e7218d09fbf59d858cc952569537d739e93401f5,a2d7503f714ee8ff856efd8d17548fbab928f0ec,3f24bd38864d884b37aa4c8da025c51a437452cd
84de6a00491c1f20c7fc988d01197f8ae012af62,d6e8375e64516fd5e2310c8baf4efdd4420c6e36,079905654dbb98e0838a18e3d25a86b03889c012
85c7368759f5fb53aa23e03c8cc27c2deb424b62,7d23c2e9d0f569d3560f774da097ebb443c8c737,6c67798272308aee107d13be45ca61f0a7e5c12a
832b566097608a1864baf649e03638603d610ce8,8595c927a87f661700dce8391bfab95cddd730ba,5135b586cb692ca40e08114cc25cab5f709fda76
e5957b1ef0a3bcb7d6d04a24525f0a8634e26ed6,f2a5bf17fc9192bcb7ba4c53800e6cbd726c382d,3695bb5da509d5ce98ff59c2b0a76da714b61578
f9a4631adfa3ac07fb46811aaa847691e6de6be1,645fe8a0c309f3c33297509b977ba76954edc05e,a93942cd272eb048590c7e0ad3a373067853c4da
5a60eac0c816b8d4c107d5d0f751ce487f70df61,92e5ede3478073799ed5df091349fb4b90635e92,8a0498622b029a9c1150347f45a2fa310099a2d0
018c1e5dfdcf49b3e7d5e3035ddb089b3cfc2897,fd94b6db913cf9c38ee03a179ecc180ef52db711,29495c9ba57dce83d6753ed19e301855ea37f035
9adcc891cf8bff2098fd9360ae1b4d5d508213c1,ad1c19864d20b4fb311f8e74ace511a58c40cdc8,9061fba9ff2599442b5fd214efaa2789c34a261b
cebb47fe9aa7298b8ff50bc2963266f78ce4830e,c1db756617aaa5ed0477ce48292b44e1bb997179,4846bd78fb0e7f1199ed3d5f52b5099bb183ccc8
ed7b0c5e68bd870faadb6fdb8b24969cb434b78b,5cbb36f218ebb40c708c29b342ecbf43e7ffc6ba,4b1978026a3c63f1de96e8e310b4535e2b2d4197
f097d1ea353382bdab42490a2cc91d239de82e24,3a11ee9a14ae2e43449db6acdfd9e1312cde68a5,83969d3ba38ec2321439c98a7da615ee66b0e228
6cbb3d982d3f547ad09a73aaf5939c6092ae3aab,63a2395e2c552f5b983406f20b88dd364458bf09,cb96acefc93200a2e035edb877edd8cd5721c5d9
a6c7ed5e61f961a022897dde1d47140998466a23,f51798e449aa229723742425342b84f41025791e,657b9a62033085763aef3004e928f56abb9bbc7b
897caac4ac733e650c1e0109e692ddd066ad9238,b26703feaa97b31004bf833428a0a7cf8315e1fb,df3a0af7e0574f160e3934175b9ae4252269a1d0
136022a7b2f24e0005aa966f84042815d6d50187,e746cf96daffc2365178a934dcd1eb28ac955f4c,b0e1867b4c2658568d72cb1d023a5a010d483825
e024fdc5d7a5ff55e3ff96ed11ebd921fd582d78,9848349610219cd0d2dadc67b112fb09a8317e91,cc7d67d08cca783f2d0f439b24285a526e9185f5
f562a8d9fdaccdfd630db4792ec4e0ba3a8d6e58,62a57bf82ef45c28142baa6f07d3b9b8873b7d57,c43f671baa06671d2aa86653f3925b9dc8f74c4d
d1d0afe337c11f386fc189630265b6142f5f734a,13fb30c52ef398c3c8a82c262ea64bb83567fe55,e21186cac0739d0a8290759c551a3feceb1b4360
68253e2a738a32d47259137de23d67c5adc1d228,168016b865d3d1ea7de06f0be713ca4ce18b717c,7b09eee02a70122b34747137458412f1a29ae541
c8fee693450dd3cd085a662952b4239483e2e1d2,5a6d9ff5329a79ddc330a4e8b6a59c4805a19113,af1194de4d5a33681608e7e745249db774e3a22a
4f9acc10f092a6a59a8c213ca29c08227ee1ab61,b8920670f442575cc5e981066c1512377d2ac50f,2187bfaddd5734e223948e60857b502909e80c8b
efbf5eaa01649749fc7f8adee03b63db407ec2a3,965bba5ab477bcfe124c7981e47f53457e718928,b11366c95b2c9eb3611e71919692eae50cd0e7a5
dbbb91705f606be92e0cc9daeaefeaeb290ad643,444fe092da1e614163712d0710f6f38b2948ee3b,1a66cde35bd76cc076e25f8c2f71426f333117c2
93752573657acece7e917904e59078ab99cbef93,88cf633b973ba2002e8f392ad0748b614bf1f1c9,123f196d5d4bbbac76bf1b918a6a0e4dda0174ff
1fc54dd8bbdb83ad9a8f82e4a16d73a17178b655,9e9b38d0cfc08bbc3c9aa873ba41441b9ea0afb7,b0675058f5764236ed3b32279700155fc968a1ed
c32d556a3c1377b40284b68ecce8a3eef74fd8b3,9a760db57350c5efcf0521ece91c4157d0fc1d36,a91e547832499249ef916470154a1a2b31421ee4
f8848dd1857855256d50e4855725fae3aa5b4d60,ad7cc0e69d28afc3091c8b9a1e90175533efa9a2,b934517871cf6fafd0313b4ab408886cc0c2df60
6cbbf9c52aad12dcaf3ff5e44cbe19f39a5b7018,920e1c8d1916b723d2aa60268f1c6a8b5527712c,188cac3bc6dc666167aacf47fedff1a81d378137
d12bf094aba2667fcacbc7d4c9ae6ac2c32b2e28,32261a0f6d6a7277bd48712f13a4480c14c75a73,02aac653d2599332b70af2cb3433e8f5d76e6400
3e5f6d322853f4615392217e462a59f1a9c59178,1b6982107f1ac4b4111e37be0a3649d155a2bc1e,bb51ac77dd8ba9ad3512f3552515f5ddcd051d11
e2ade64a1e34f6374b9f3a4f1ff802b4b9a4c803,a835d8b533fd7ebba6d375602a4b5c981ac465fb,b150480c60aff770924e4ffd3382132b189aba2d
41b8f6a42e7c43acf8295c26acdd861210ed98b5,567244007ecf2a289cc6761dfd53c4db97bf0ee9,45b1d592f5a4bf280c7f1a59394aac2cd8f4a541
dbd8259c48e3654620507cfcac4f532ba857aaab,e2a26ecece15f944eaa327c30143bb55a4528235,27aa4d4e3495db95e396cf32746ecd93020f484c
1c86a4bbebf6bce1f14f2e3e17ab132fb3ccb8db,c83e6c34a90cc86ce1c3f3aae1da39d618793335,5670a7543cb170889fee2f3e8e65ccfd96c0b18e
cdba427bcf82e1c7af5a47b132f17550be4a473b,130c36c406e500af2dfae72748bdf470db602b5f,36f771a3125ada1b155bb98b62765f88bb9bb540
e142953c6d2b796e833e441773acd51325a7ed77,dd0711a27e85d15d45dc47e7b014c6bcc3fbf230,626e23d89fbb58d5eb3aa4ac9532fe8790d1d689
399d82e1da8ddef74297867282862598aa96fd97,d35be8a9eac21ee762b452df1ea879c9c5699f03,2c51abf40dcbdfdfad4532f571e1f095dff9c8aa
2b48afe151a41943520040852a7d075968ff1bf6,3d805b8a9a2e9803f58ae40ce286b274877f2b78,a1ea1dd98e7c76d656a232e822d3d7c47063a11a
fb66369a3bcffdf7d2a96cffe8c633b2ecd12182,86547d35d78ffd26e1d0b63187ebc8472beb204b,3ba9cf5b4ffe0a10dc0874f69e0d72e5c77f7358
3fa77a4f627e5ce993c88be7849e27b64e7ae80a,be401422fd786e0c14b27340eef512f70d1f668d,49ddf159b26fc34b5f9a0385d1e82edeb75e894f
9fc2b9062da63731b113043f5550b6734ae0eea1,c75bb80b140536d16e31f140a111a14c18ae7ad2,a7d1f7d7712b7f8845a59937fc9e22e67a7fa5ca
35a57bac94046da556fe8af48b1e791d23df9c0f,e050a019a278827a3ae9c0a32cdcb2dde00ce50d,f0e31628ad7d584507612b2d7c4ea017532cea78
49fb1b4c292e3fe305a470b3a2c4dd52f6d46733,cd8ddffe426f37743c0d17ecfa990b5b9ddf442a,f18524f2fe32fdbb798b38a19d9e9bbc24fef3e4
e62cf5b9e7f98f8beaef2ab288574aced94b15ec,57935a895cd02101ae2e26701579133fb23f75e2,ae12a79bf75e2019cba48e94d54b1f5c2fe07f92
a1064ad8fdf5b5941c86eb5d94009a264e9f8cbf,6d3e3d06e2bc18dc15000093869e821a050d9b60,92cc78e723496ec16475848d6339bd8ddbcad9cd
0eee70ac816afaebbc567e00a5c18a6ee46873e1,3f7bf0fd70b339a43889898efa59af4fec33ea84,e748e4c7ab79a4dcacee4f106f53c5699d55dda1
7da9b4a98858e6d82f297b12757b32e62c8491d7,c40f518de4c9ee3c4e6bafd2ec909dc4ca286b24,a0366d7d28f806b3bf825d6613040e38d3bdd64f
342524c31234981a48e52659d07ff2e52cbd81b4,e67670fa70b7f92724ad4c55f5fedbb3b4231615,c5cdfbd9c03c0d443e5a4f4a7eafd5ea1c2b0e21
cda8971baaeb240bb7c5075faa96dd4be02d923a,2d680afab7ce6d66ee736c93761c82141229ab67,96f43001588a2a88d10cf2e2a8d5e8561e98a774
8fac3d62ce2a37cfc11f16ed5d47761c6cfd57d2,12c4290ffe114161fca1a0c5ecdcac5cfd7f87a2,3d2c96ebbfb8ba47349db24d327fb1b577ab12e8
92e60d210759a6250e1820f891c8aade6214ad20,3db1415a449212d8c3ab5a9085106c9f11acaa0d,95f94a279c1807554ec2c865ca045aa29bd9e5b7
1b08b89b7b552beecc90672f8ed0b1a858169658,3c2703787cff417098cd01d1c51b4b5cf70f2677,a714e2ff35e78233486f4549d646980ead04c4a5
19cee9b8415bce777f012d5ec7634497f0cd53e3,d221f42a578316c99fc74674b037e54725bfbdbc,b051e7667c5051b3ae9dd511ad235aea19f2c0d5
9e3483fbeb8743afdb32df31c859753adfc96039,36afcbf7fea3dd51e292b20594ef994f683d26b0,314f632377306065e939fb1b17593168bca3982b
827fe2bd83a9ee5d77b49cf4eb8cdc3ce0369859,822022186611aa62d08c8a328f69f37bad2dd38f,57466587c5470ed174144263608febae128895af
a2789d611f74b71fefbf8a3bc0c66f3f3ec3eaa3,df80d4e6120edd441361bcf9e2e64045ec042c2c,931bda56331fc2fbd376ce925c4c9923c92498bc
77f53ebde3c14b1e26734fc0a57629e5149743f7,aa5517d44228f2909b25744ed2fb90770d45dfe6,e942c00f8259a6d9505d1ed849b36399e9def989
71df6b83c64d331a3a7347f762e80755088639e2,d3abd339b7cf9b3c7e70679ee65a4732b56ca37d,f2bd099afba70273fb8ef60dd42226feda3808bc
3cf8ae8433acbc20e09eb6bee6c6e1e1000e6b9c,a0c87be0fc75cb242378c1029e5fc58e7dd41a18,c9461b73139c742a7a86af045212e08dea83c72b
3b43bd027c51f7914bc8fe7f938a7a21d58c1d85,8bb3367a491826f1f5984810bdee49b8ee35552e,8520dabebb53c28245bb39d8b52503aa750e02a1
e57ef24e37be92ca117302735b9e3584254483d9,a27cb35fa83d995a33f90474c2481d367cf6b14b,c21bf747fb3d5750ce62ef49ad5334528e2880ba
e7e4044bf053846dbc1fa692b9d559225e385f06,ef53f9bc25aad1cef20f3cd7e7e248dd5d172e25,47789734923810f9363f0ef384c2aca27171dde8
f6a8b045c2f52740186feca3d50c3211c74c775c,7da8c774be6670d6cfe3dd9b707d4e47c0a4870b,42b052eb83682e0bc5dcbb2c8d47e045c462dcfa
f3f9c68ddbea571e5cc95625a7a14fee620c09b8,0ba4cee279b0bd8b13dfa27ff9a32b6b80397d79,69c78385718462de06ac5af39e5b1c2829582bc0
170c112301ab3bcdba04a12657ae61dd275496cc,1a19fe1f033a7d4571f62a4506cf3a60d37e3080,84be45f55d92a379c237d76f7b2db9e55e0603d7
1b439134083d3f032eab1ed5ec5c016bf4be84db,16bd996e74560b716938e825ad216ff57b9a51aa,2a44ffe51bf56f86ad3043e9f578e268b860e4dc
247423400f0d0686f2eaaf5de7d95a99b258419e,9d8fd6d55e486d7234c597a89823e0dcafd91331,7488f1e3f886d215ca392e47bb7c2e5754c18985
a5702d89e8703ed2e5c4bdcd246ff9421fd551d7,170051672181f66a9296bb6f8dab13bfe0a03de4,cc27576339115108f045222df45a8acb3d91723e
a1a2549cf10e38b25c8f277a41dc3ba409a7a1b1,96d4bd19ac815bf860541e51249fef93ebe41c76,c5f4a6acd0d48a567e2d11bb0041c92a2a8db897
487ca08cf31ab89695d703d45cc7861868251c94,c4899b5dc080d09fdb5ba48fcecdf1f9cdbdb5e3,7a34677b2ab134fab30a19c6bb6249425e802daf
977ca19dc013324096e5ef2ac6d9e2ccff824d42,e0eff8bd89aa0aa3d631a197f33863241c6b13c2,230142e183d986fc9a4b1f8f32b42816bef6be26
f00a932cc6fec80533ad821192d4be8266446839,42d91c02bdf7c57fb2df8887d92e0fa298c4d8ef,a1abe51f2a760d47c2a12641f7b7fcf9c634d4ec
1e83d415c3a2aa7b66c191bf40781d40e37e5179,bba1076e12d2c689b405b12f16120c1a46f9b69a,8ad7decaa39dac87fab7f37f75b7da0aea49b2a1
7854152304110571f6c1a950f3828b4aceded90b,851af5033fb80d4e19c4a7b5c44d50a36f456374,14466ee9d99918072db8982765e621c2de309a9d
425d17c1b3407975f531465d0aea2495dd5315ad,b9a8e6832f8db6bee1abeb9e5e958de8821d949e,af04a523bb4881f106908e231b94561d889f2d81
e2905b8fad1750fed539e32f40cd69619beeae39,5605cebd462b2011437b05d12b320c3b6544736a,ea7b9c73f3ba29a464b2cdacc83d73129f4f8d6a
e1f993c363a05c12f7d54d9da46e7133431be624,28e7dd77dedae2b592eb3ecf7d3188b23718f637,81b22cc5d1673cee927fc645edcf8a90fd8a7f8b
c0893e5c160e21a40086e573dd870ccfce6e53c7,babcb631f8f24998899b6fc2112025a077e281aa,adf9f98f7c182131fe5f83dac16411645897f123
e0fef23d77e43c36d6d6ad474a21e5d1235742c5,30e0df384d5961c5525c70f2878963f04ec9bafd,4430422489633ac2fcd7c8833267ecf9cfbb9361
e19f60503b81a4752596a845e9dba035d4510550,721e988da2298e426c5ebc78205b2917c7169816,56006aa002ea57a67ff1d7b7c69c4261b6bcfe84
4e959de2c73a6a87b96dfac61334628437afeedf,3eee2d8ff34834d7f17f7970019db5e5ab0f5e1d,4c6338207f4b13eee54c34e67502630efc4d2459
5d7e3ca24005a3b76d307c879d76d05e99ae59b8,1d73dab2b0e61165ec2100a21dfd4071fffb2145,a6ddea87b7eb020c03692d383d9592dea2be0cef
d410deb7ae8f405e9451bd10db24a65ec5f30a33,4510945465e4e8cd483c64d316d1d43005ffb585,d7d65fe0d7b62c61f4751b896eb6ab9271d03a0c
7affd789045f9bf2a141cb96c50c08cc484e0100,430bcac389c29a5ceca7759cfca69454aa31abf9,b6b2785b66023ad48242b2a7bc55e445ccd48238
e1288897f3639a08330dea060b23283d9e455558,4b659175d9043c58f5fc78f3ef159a09167d45ca,32f8dc7ef5916443ececb9742d4ddf5ee8abeed6
0b6942de8ac5b69d48a07cca22539945cbe5d201,baf950bf76b7becc2a13fdd4d2814a744ee9b52e,1bb4003984c399f8a9d881ec1d1a231d907c41b2
6c5f9537b36d95ea91686af22b34c2087634ec80,ee0ad3ff86723cc14eac57aa8f5f625976b557fb,ab581c5c301090d6c68c24437af404c0a5962990
29bae2297fa3cebc09fd9d18a823a683aa67daed,f2d6b4d530b0e7f7429bbb1a7c6459f23ce36b24,cd8aa3f0e0716b44cf14ee24b4463f1c12b77de7
a641860fa84fb2686b1360723b13625f6ac1866e,51fdbb5524512dc3279d0cca38d44b38160b8111,f364bb6b112e7765544195e4d16da1f5943f415d
a74a35a16e236463207780120735d0501f922800,cd6d048588584e4a641de16abc7b857eba961e32,9cfe6e97a0688bd6321e4a42603e0a6ed0cb3815
459dc68ab9a7ff969a121ab5e22e18efe41b9854,00a5d30300e91ebe54ab99d4b64922d5e6e39850,69761839c0c2094d9ae69ae2d0283eb06d761df6
0b45cd95f745a2cfc485062e1bdc171984d68568,3cea1706e9208fb739b0482519fe48420ca520ea,4793447be120d6d3d9fa2e53d50b45b4b00ba2f5
aaa6f0d9c5ea729efccfb200f4ee0125cfa6c847,e77ec69de4f3db4d89f2e9287672d46cd35c949e,a9dca3268982c53b363346f2ccbc716b7d695183
8b08486fa1ffa3f84aa6715bebe98895dd83a0ee,4e8ef448eda713f0b54d8ff02b2c195c6f66dccb,5598ffc210c387da7e4e166aea1c018bf6b3f185
55deefbab5a5f3f203587cfdb1f065251d3321f4,e54197e9d2b5c595cf77d884fec32f0639dafb8e,ec28b7586c4b74823555f196772743fe9bfa3dde
789031a6e638a733e34cfda80ec8c355e2fdea63,821c22a38f8c172e3a6eca20e28027d86f854876,8ef0f590250b9d1f374dfee8409827fcb3020d4d
dfb8794d4d2cad05b61dc07402610bde5febf506,ea417fbaaf750b7e1fdf1dd1150416785501e270,e8fcc5343beea4180e7e1f83bef6e27e19dde242
fb9c7183716e375d2c35ef7ffe4e6d1400d62993,ed50a1941b9ecaa3269d4744fcc00f62261ca218,3e75ba52f32d1e826b9dce0c406f22628a1ebf0d
048385fd7f3ff8573ef72b00fbd02c20c21e0710,bedd4edc727d8f31b9eef0a40403b811656f5c04,09b435cdab4e310bb7d0f4d6e4aa0fad3e916ad2
e9ec4a8bb3c08c399fc5f674e07e9876b5f9411c,c577ac5ce9329a112fbc31e3360092f445752615,6bbb10e64d1f3c5e613e9242b3598c30d41888cc
70b0cb99d435314ec92cbf65749bd899e5d4bd48,22243058345dc952492a1846fb13c2f7357616c8,18eec3055e0b05bad8583a87dcd70da07c9fef40
3cae3e7e4861aefea93bf7598444b5a292b141b1,33dfb6cb4e38fbb9f960c900f3c57a8aa7faffc0,ae47cc2c88688f9daaeec061d870db8f88bedd52
64feb6a5cd3bda525fc0dedccd8d7900abe88fe9,7f41bb4718f238a86ab07aeef677d27c16a43c5a,9c10167b6fd114d4996debe4ce117b3df3d38a53
6e84ee580668f9df9fe5cd9219fb2f1858fe5d98,f79448a9ffff84ffeb2242e7ec442477ad6a022c,7e3bdd501c189f7446bf34600add137a2be25cbe
87ec3d6fad48ec2179019ba0789c8616ecb47e5c,71e0c12c88dea98b02812f8b9c6b15b766486332,0e05e908d54113f40a6d4ce0870e2fb9f87a5d6f
f1f84a292c9478a02bb2ea40b4c368fa15047e21,c7a0c0bbb4984f935eec3b933c1a00db7b511052,67864b662a9ab677d2653500daed0b40a49b28ac
d3ccd10674a7c3d3e4aab9025f98d7f71299b5cc,d06852e6e9b50422f9a7173119f7d64d1755011e,def475f889d886c05f8de0b3c85b4e6ae4f58e35
63199a096610f3d7b1d1dc07d1715357dccf11b1,c8b2a36bb1671e6347fe7ecb7312856321b608ea,b8933dd267c554ca4f5441f23f14a822ea6ecde7
b49c3fe4f8e3396aec1469fa072cd105a5db2965,3f25438d35d772669aa2ada696c23d51f14c004a,4d676cd6fa2995248eb969a7861168c20a78c175
811c68377596fdebf8bfcee8e8ce773df42593f7,dd7320ec137055b4d1992b5a0b65d4068a86d1c5,ece59f25341cc47a1f3c38919844ca5b0904af2e
22f1289b2a1a04c81e9421ed2a1d36216f0fb73e,a221f2af79ac6f13b4b74cab79037bda1430327a,8f7e61eef68f532103387b9d88d23dfdaaeb3cad
586a7d30abb173acab88226edeb9a2c4549caeda,3635f7cd6fa703a23ff6b93b5264b527b1846c81,95e5eeb2262ed56d2c617ac5e45a626b7a4bb3a3
3882066f235ad7d31ae6f90780c4b6fd6c7bb9ff,40f23030dc4600301936f826949704112feb440f,708aaa7b97f598f0c378578e491a6e16f5a4bda7
ecf2ad3e53c1ca9ce9486ba1adbd82c117a8473d,ccbdfa91505dfde79e981b12030205933e1b20b4,bf8746ed101c4603ea005db72ef9743ee8cf3a11
d7d4b446c147aa5bbbf485b4665ec9309b14fee2,a9cc89ff46ec68f37a1a0ffcf636d7a9a4cfba99,9e228ff35571d28049571bd55f265993f62a0c57
5adde504a973b765c68268a8f9a9910e13851b30,99b01f66343d9d28c1231953d186a4e5f34b3210,66ff7a928c665e8524160da6004bbd98e0889e0b
30cb20bccd1e2ad966d107c43da4e799463d0bf1,2b0317f400596561c986147c61c9ed7248c4a7e9,7909f00c834b31579aa4a9cb50c5cd719c379732
c1ecfc323ae3c259aa3c085dc7bdb2abb5b0f3e7,64319dc019b03af26fff3b35bb3cb2853e540909,0e46041717a2d5fd81d4a5881c50a2fcce8aad3e
839849085b397690e4337e22fa6f51ef1bd88b5b,e41bfa04951efd43e7b89c16594e994702d33f5a,0ea0b69a30d32333ffa6d336bb3c0ef7aebf8f5a
0d3ec87492b9d2918608839746c34836ba19d3c0,488c389b9b8e6bff675fd486d601efe17f3b52d4,2596af84faf82b0cd93c56989bd774789be03d66
224f62a843c2d478e3de70e44d07f3b91a7afae5,4848327300b0580f23eed91842ea767e0cc60227,8cd10d88cc81868bce6f03f481b0bc83946d6ace
12bde4e9030c2c366b1cfcb62bf163ef77a24632,3ad8b4199c6293ef911ceb53ade968eb336c3478,466561f09fdccac4c599aaa1a337153773f3c99c
b797bbf5dc08ecf002c05c73ec1aec4adfd7195d,6663d5ca63d7ef3498c936bc35a749ccf66a2384,644ffa8e7ae3740c4997ac235a6675002eec4911
e40f997a40868536d6f49024e07f928052c4da23,e82c98bfce885e79fd7f9f10cd8d6c060bb1f90d,4143912b7287ad135e56b079a426b25277a22836
8f3cce556d7c3e3acd3205eb747ed58a5f9236e3,3855625b8da2d403825b5fb27a55ad65fd7cfa88,a807144ead497385572b4af461f240422a517ef8
2a4ca98e852939dc2337b66e0c88b9ddab682e8d,652f21b656cf37ad7cd5c627cf9fece13a86ab8f,4750840e89293d286db914f853154f2dcbb10b96
665670ae015eeb151e39336214cf7c15746b0608,e40996cd2c1a0719f324c68ab31cf7048761ac26,144ee6d51d302376a19099ba98af595c143b80d6
bb407aa135c73da8da59dd9a8122016625b08ef0,f720ea3a21cf0d65cd4289b9037f72790252c608,b53034705fda8db007d80a2a866a8e60b4ab3aac
24acfb806428a1f6d2136210070022dc20fce15d,60cff917ba595ec388dddd080296b4dd10ad2c42,7c64bce04eed17eb0b594a970e38c56d79bae60b
094345871385d9deb3a9138f4aaa287c1f5600cb,46fa168d43ecd2f07bb101ba322d64d22e30d237,219fedfea6ee033ec68d4cd19447595c531e9d61
27476a915b81f5fce5486831db41a0cc3e669ad5,5d104c9115301beba82a7918ae61903cbd6f94ff,647f211aa5622ea9ff21c354cad5d0eff46fc499
a52b3522dc88a5d35c5084523ea5260a1dc737bb,c6effbd676cb27a2b733c3c0d6b467ae6c17f6f5,a3f441b590804111ee5f5912eb78622fb1de0fff
c38cc828e8885d50ee2d71b235c403ee98bd1591,c6d936dc25f443c76983068bf0718b9bf8cc2f81,8ae016fb85a071be24cf1b9de24dbf9cda432df4
c1e2f557f124dd6d00ac869446da0e9ad2ff74c9,5a123d33bab953b780933a6c310fc6217ff3e92a,d24548f8d8a26e19cd306b2f58ea5f2a62b6ae8c
071ae41d2485ae3200aadc10757c741f71148acd,3bb2586269c876856a834fb0d72a09928ff9d16b,0515be62b4f9e3b7b9b82c90128489afecb6767a
8696ca652d6f9686f26fa4627b070fe1da589077,bc72021039c8b01e5a76ebbaf5a2285787c6e7e1,a31f37b5e560433aea4eed2162d2dd19c35d7549
ecfff40f960ff65a27ea4cc6f72e21dc9e36b651,fefa163a354885c289f9672673cd65dee2960df6,2005e3c0941051eed2f5d224f493059b47c40e8e
d74d41c5d217d32d2e81e0c65334cb7ac61d2b39,519a102379bf41de2a988f9c0aac508a5d384a51,b4ff9b71d318be9463d054b4c8cc998aadc8affd
c94531645a31d8bfb9cce98e6c8ac7c32e9e7eb7,52147baa0495218ea06c588d1f849106f480c4f3,9b8af14f47176d0c97a7b3b07e70631e8bbc044c
da2649fadefac495f3da024bf955aa889a0e5108,93438ef1a5f157d2acda458c15f5e074f9ce9866,33fb8874799a1c90f79175f108dd21702d696472
60cde554fda8facdd2f7d79db327d628a7dddb69,bebe53ef9f82bab6c8a6396f4c96d53d73db796f,ad69c6e1b5462769798f96d71d4327a5d6eab3b8
c925c1aaa6fbd3091c7917603fcf49cf7faba2f3,3e21d24098ec9822d0b6bac12cfd9492e8521840,a778fb2eaa4c793cd7f6f3c6d4a864dbe308184e
dd09bf64b39e402109394dd0f4d32cc97c2352bb,022d2804a9500d50cf68e02d398af269ea731291,c33f47a707add75d246ab1efb5e63a8f21c9ff24
5cc4096f41544ea8ff8948aa7e6058ae37bcf12c,1f7636612542d76c4a9163de1f126f9d654fa6cf,627fd6bce120c83fd3446f01e44f3cb147df8de3
3770b55ce135c7d2868b6e5bfdc95b17bd97ed1a,3b3a0a660cfd8427674a6d689172b4bc4672ae3e,48556ab039b1b2a6507377ba1f7148655a0e804b
e555eddeda10f75c367d6e1b0bb3dcee6b5a3083,11712658b0ee16f5df5ec56840161afcc1863613,2039509cfb7940fe9a912c776ec1644cc6d76882
a0b78ad1f7859efbd51f3267fc93fafbc9d7de32,8743f72f1134750b0522330904f57d7ebd535eab,84b60d3f001c642e252659e84923d21924da90e3
8b138aa0597d7c12f0a5c5f43564c5818a4f295e,a47a1c093a31e2352d44f94a37698c1e69cc5e23,ca0384172482ab6488ec7efa643c68c96a796671
9daabb2123594cee642baf50ea3c0cc5e7f7ab6e,8cd6606970c8fedda95a3411d684dbd57379b46d,f670ebbb280f5bf5cb198f12498e57ba1dc5bf0e
6ff566350cbc2ecf8615cae6cc6792939a288ec8,3d55ac9d0967620c1a2c196e2aca66cc62a95d9c,c117c0abf576dc47f01257751b8c10109b5c9c6c
e6cbdba0bd6bba9c4dac1333ce0405a14389e3a9,d38dbcac8f21d79c666649301216ec274ad838b7,8eea58f64901b97890fc5eb4b37427a55036b539
9b4366e4f6d565b0a1b2b2d105e350b0744b8d7c,95d7bdc3da9cd08954dc6fb12f8d6b2ac890a7d4,b891cef5d2ffd8af876eff736ec15045eb02ed92
b247302871aa4d46bee7e0d516a96cb8102732df,1a4b97a62a6e6569c3b8146e80d489ef22347df4,80c8575636a7b2e41f9081f78878d6399cea84ed
ad1812f90aa26c0ead768ab1ed32287fb9dccd67,15c95e0ac7f66c4e21033d9e01c1328e00ea2545,c22b6c10b7a29b5375e95102e43ec60fdef32b60
f6cd75add97afbc45461db9befd4d47325a8384c,aedacd916089f2392d89dcc9d5a6c0e2e95fc53a,0f89852908219e54e76a72bb21e1847305166d52
4d62764fa34b7c0fb8a4699e689e3ac8a846ba94,c6b059ede6d90f87e4507c0cc4e258ac8b4461e5,601c8f9c8b23db6102663ecee9b1a697b410bc4b
c67bcf003295d9ba9f56cf06450050e528c3f305,2eb3f5f0b84f60daf562376b0bcf0dd12776aca1,ed748a65b49f64d53e96adc2dd485e34f550af3d
9ea1f6de197d554fefa42bfb2b29b76918460408,0d256f517f57f80933f3e6305e38df55d8277d11,f410d8a77c0e23be19ee87c33fc160b738320a4d
87e49314892e33419c0104dae47ab463bc6e6b91,be0c92c65d684fe637575bc9187273c5883252ce,9d893b5d0d040194bbbb2ec220e03ec5f88f759f
2f1ccd6f2a1451c13f16851c10ea8435254130c0,f800e405958125dd1b05c79dd06617b0860e3d44,d5a538b5908065ecf83b6f5e74625a5eb85393b3
08dca09c7ee43e2b73fd98c319fdf54934a082e3,0b7a771ca945dc531060e0597c8f1e69774a6451,8382c6f5860949eebe1e6e6aefd156c8dae83fad
553cee72eb0349e50f1430f28900fa47c036759a,8acf2e3ff31df8b8396ad0f416df9e1ac221a9b5,389646adeed406d305c0dc7d13c7133ca176963a
322befbf5603040e68207d847ce87f5dab7917fe,c482bafdafe17ba5e23e292e1127e6f103444ce8,535107a700c98bb89e23332f2465f5b896fe6e1c
1930aaa340a808e6ec530093d7463b157646646c,188fc9c11281018efcdb567895f6137a5862552f,76474c85bd7b449a233d409727a53e71869f3c7b
bbedb958f61b03c8af63ca52af882115d051ec71,fce34eb4bf9a70ac0b8a9a5417f0f7b327b8bb37,edbb865260e4033930f266b2f453524a68c48ec9
5c792c438db1a5dca3ee6539ecf5b1c84e52e56f,06f35ae04f229e4cdd54de4bac67e785c043a1ae,fc76d9fac299ff9630515bb62b980d09dd432437
62cc594ca469388c8bb45cadd24e73b21437230f,7133ad7ecc46700618193adff85cef84682355b0,251af216ce7c63204152c8cacfffaeab899c8c82
34f1a3ee280a5d2e1e9aff4f2f39c1b9e97c771e,f721210638e919e910d340b4187b2154df8e835c,d97d34ee9c538f4d9d9f0cb4ac1b2fbec6c91deb
3dc64dd67ef64da854e08093e229719ab1e3d49f,c7776d899bba809811549d2dd99b37b80fa361c9,78025d90b3ee3aec45bb100d2bb01e3d931391fc
a20e8b9a3d1c2bda0b5d62d50435a8647bcd7105,c994b5efe8809ce84b3ba52046c32fc37909a65e,78c0c267a5c62e1bb773813d24d12717256d2ca5
1e62913183eaf9906c5ebaf98241a7e14e45dca8,f47ca0c5d102655f5b336f04594f2cc15b9bbe96,92f148e667620fbdc439e5baa13c36f8a66302cc
2cc319bb8e2d21c61e051f77d8d31f0704275289,79d1fcd40d6ee362a0340751051edade7b124027,0261a025de8b59a41b3c43cd07c30d81a8e59567
486f3a0c7f7884895a0e9742a1a3ede419f208a7,e14692f59483e83b1ac55e9741916c93d5699582,21b135a6ecc49cfa6ed65ab0e26bd14aa04cde38
299f942d291fbeb2c3b6e6e653ae57ede9b7e525,7f4b2f63b3e384dc3589499f21e0545205b9d3df,70850835597032f7fb37777bf6fe44eea3b0d16a
d3cc97655125c9e8bfd6577c29ad61e3f4ed87f3,125bd9d5e91d67849303f33f47daed55130208f5,a6e0e1fe59ddc7349d9aae062fa264cc215dec7c
28a3223b6b017dec23f867c8ceead32d2b22bd72,d3111517d5cfd1d044e619766e37c3312ebe12fb,fd1f7b2ef8989c9da4fc58adcf90d29b0df6d8c5
2a83972db8c644948b29e3eb745f2796dd868af8,6ffa258abbf7f27a213cf96fac2b94a27e591dfa,e4d5de8d05d4ac260ac9d9c451d176486d88dbd0
2443fd0ad738f0f3232c779e9d2c9d7ff1072ce3,ee97c0ca03cf35ddc2ebb7c7590d57cd7d407e14,b8f8a1dd1f869bd4a09e571a766ccbd2d641193d
71ec7a94d17846597b89acf6de64caa3afe90f19,699db16fe4d81890f6f9a0ebf525624f34f35245,dde19c01441be3aec285967d6a9aa279332597f1
b49d58a9fa9bab90e1b0501584b0f0d58f01b0dc,69e775630ab21b0a88a13bc5a502a4a96584ec85,681a00a76fef57322c70428202c0dd3e9b68d556
2949d0b5488f58f8fe9cae976a9c3ec00efd30d5,1a410bae128760633dd53f721c7a4865f1d80ab0,82dd70e72f3ab33b1b8737f743e1cdd009d9c8a1
9440b17eea324558acec52a25a1d9fd020ea0408,ffdb789a49f3f5874863bd35bc477a974fc2e267,ff673eadac997e39822148a313b9d343ca9c40f4
22a1acd610072a1c3b57e0a8d60affe0aa8b4aac,13346a42bccca70bd5bacfb1a16021efdaff2879,4096d9b74f2349f9b9b8e3103c02c0be11c70926
50040a2cab9975aff6974bf462a0e2635d9b84ca,1be741681648796d41bfc5f06da5ef26d4581541,24760621984e934604baaf60f7937f0222dddd14
49d66b8f2018386d7512a5abff875efe82ec1a88,35e52b90f5763f65bfb6953d4b4bd0973753ff2a,a9f3906dd552a0a2e467f3c0dc0b40f9f55b306e
dd586da7093bac753ea54a5a7a1ce72a64ca919f,91be1793779f35e0ba8a9b46b6b2e23fc7f7ff1f,fd0f72303beb9dab2c170cf89ab57e45d7a7514c
2df57e117b52f4cc72b00837141df6ad18405cbe,3b455c1cf2ed22fa5a645aebce67fd1066970e8f,cf4d02ef92340976b686df6b58ceef8965fcb77b
63f91a768c34e0a7cba88de066b9bef0629bbcb1,63642b13c8876671ba96ee0747dbd8119aa4b78d,67f89afe99faebe50c6177a2112aa5c56f676de9
d63b6294b5e8b033f98e02b0654572964c5f972f,d2edd6fd2f0bd37367b396d23c8c45f9a28c6f64,bcf77c70fdee6bb18be5dda3978659cc8cfe6618
224a7a8a5448442da597dbbad120d46e7b24fac0,fbe64536d1b6bd12b233ba65976f2faa89239782,c96641f901daa34aab14f6ccf88e860039dbbaa7
4f7c2890299bf18f9ae0c274f1eed967005f2799,803a6fea24d5dda205849a092392c555f9d39338,5e6e24ec086b5d71352012f55b713d264f60feb4
e8a03ac8bc1319da1cfac4e3b753066bc83d23dc,ba559329292b7e06efb9cc1b22d86055ddd41a87,f7e4c0f28229269a4e59aeba7fab6243b9eb0e2b
ede47ffea9fab9f2bca9c7bcdfb9a5c6c1f63b7a,dec6255a190cdfb47f7b82167ef7839e317f3bde,a37430c245d8ad18303c18db03d3d98a3061be66
fff60f9f67aafedd5369c1f8297ad56235a6ae02,6ff403139875c45e257ae3f4b291dd6f8254d1f8,0680ea46c85c1482460989a78989cda79f1dc89c
1a26c0ccfea520bed7717b1f72aa5fec6ffe464b,df2488ea6e9f0036a73b18a9375b0e3da1e8777f,16b14c574ee9d97310968fdbb6bbd484ce1dae71
da4980c4c0fcfbc1e588064fc638c63d7a201066,a5f1600275c7a82972a180d1072733d55955e1e8,595402cac7e3e60ba923834b2b5ebdb21f7e0a74
089e7ca6c8a1cfb24f80383afdd26ccea01ad2b6,84f0b94549750466a5f84fc63b9130f865e6b4ef,3a85a5a9cf7e66c8ffecb22e1abd10f3b5376693
11b743fd6ab270a5c34f65ad1a133892d53ed3fa,8e66041b7902f31a3d741ebeaf8b321c2990d171,a3f221e189506777dd25308f67ed457ad121352e
6f5c6ac4107526e2d0856c715208ce4fac011fc5,94cb1c3a49c870888ebcec5c84bba9e42140d4d8,922893ddbb7276d85159ea0ef63f7ebe8f11c2df
c97fa0a05da6fe5fa6e630b4054509974a624bd0,3f4c41b45ffacda2defa96b3fe6df84f3c62e448,e318348372f0017a23830a65f217fe50ec5c5316
267b99a8aadd1517b6afcdc81d4cde4f568e5903,6aa1f3686e3e557bb1d58b1195ef2080416272f9,3892bb265e492f693c20aff1c369c5f186cf0c8a
c48a8ad31fa9b549be358497a7641481c1d98581,3c19adda78114804ebcc8d923b155b43f229b99f,e0c41ebc5a882278c58d56311e9180bc6720c301
ea18d11d410b6b6cb8f98f54cfb9fc1479c474b2,bc7b113e09d921871c1ecb3c5ad108ae7e8ab010,c2173185e7996689cab3b5b41caaf89760b78d73
d911e462b2a85b7160400ce36755003400584282,c4061e49e61398ea21466f63d6b1430efa3b7627,edabca144788a9651c22e624301346aa95b1d9dc
db23f54f8ce5bf8f519d0a7673476210fd747054,0e39e7c12de0812c6daa343796c4d2fd148b1b32,e81cff0408c5008784229ffd1bc1cac39be8854a
5b64e5b9579cadd9baac768a773823d71914f3b2,8b00598cab3618b66c8b68663750d1fffa4ee85b,59128241adc5ca60b513cb47f0316df6d1adbf76
0f07c966b62445ab8bdef939ce15f460c9beae80,9584348c407935d8e306cc9750195c10a4aa4518,ce742b5b4d7f9f750a40581d0219fe2f6d704f78
d50ef3381fa11144a75b300c21c2605ada94b6d3,fc9719f5f989b7785e7d8ea06f82042e49f6229a,bb2e626fc39410627cada94e17d469e8102fe136
23e514621d6e5b0963912debe801603b75f62089,f88ee7b2d8053a1599facaeb0c065c216e58ef43,287ef8e79aac426249c59181a07f217ebe95986b
879f48d2151cc48a54cc11242d0aa07150bf5e8d,38d2f3d58cdfe477b60f3abf4dfe61ab76ec6cc1,f9ecc12e5bac5414286325ae2f940de555304fc8
6f942996a5870c36a5178a27c21cf248c2d3e894,5e9cf637d36db400f9fc7926af8b51b5ab9b8215,b1cec6de2aa6845ad4b891617fab6b134f8ac046
84186db35f1879b102759102797abbc4f9b90e75,b3e64d70e7b712b675d69a3cd57ad089af5c5ccf,da37fabc42ce12bf7bbb5f9ea75a5eec7a8b7b79
545978b290f97ceb0de431e1d7bbc5f11c7cd19a,9f19f582c414a2543d1db7621d1e1fd3db60ec47,84e2613ca87a621d53dca817806f6c66332ecbc2
cf21365a21993c145e9fb7b99f83dfe54b9faa1d,064172d65a4bc04e8205a0c5b560516e70180b83,bf29f2051c6408567e61d428e10b348bd9870861
5486182f568f0151894a6223e8a4255a522b2376,31dff18a61e5ba7bbf0be67c466f0b481c262836,3defa344709ecac3fca36af91829cf48c30f6d22
b521ac967f6ce6e802521d9ec385d34536abc9ac,1fafcbc12557e8cbebf0d50168f1a6c174c511ad,44cda176749d2e50e9b7de9184d475b81f224fa8
acf5675a909452433618b11daa267433a1beac01,b18c10d0d8930b3e49e2e9f4eca8f9b4b09677e9,af1eb33a7502c017a4fa2c7c739b6a3cff6e962e
f4da88726c208fb12331e2bb4ebd8998977fd79b,9f3a50315b1c2fc5c3ab09eaa8b2f5b1c40f7fcc,da47c509dfdaa4bdb4d92a4935c4071191341338
b054febbc8e2a927629eb888105e2a6e0a4a84d9,90e0b426ef479cdd8879cc95b7dadb8d4790d45a,04b28ed5879408ddf5a07015057768b76b2af9f6
a02848632571f0d3cfc676bb8bb38161d4ce1e0e,b5fa73b82c05ae51ff1c0b51f50de32c7a4491f4,7080bcc16000b5f14ea81b0fad40a8ab0b5f9677
526de20d9a1850e6913ae15e599ce8af03fd6666,49ce3f5d2a0e65fd340897a684d73ae370e6e624,beca14334c4a38174c0dd6d628d81e4367ac4969
589fb20386b63be2f90b0fed86868be88d2b878c,0b6faeba68f1cc4083cc753173e8167d4c64e3e0,0ca260e08ced39b0ec1f111b159ada45060dce44
afe2e80673d93a936d245e9adbd6b7ef2f71476e,5fab6cc5e00e52e60bf6155968e9c950d5a4079b,63a8fe07ee7226016f9e2edcd829c03236829584
ade7af52347f580b26312bad7b6a1f1f01f9df22,d53af12a6dab99b71d8598aa82608e24c488b15e,81157e9846ffbca01d1c3e9f49a218d15f51ab96
bc1c93c05fa4d1d595b33a5cae9ed112cae503de,68668c649e5aed88bac022a11a4e78bb3adb3a41,032cbc54a77be957e307acfdf0fcc2636664d173
3f1d62af8e91db86d04cf42c094e17e64eabd258,63879e74cda7c7d2ea7be1680e6308aa7862c87c,1f178d381fe9f66905cdb409c1986dacac061831
c9b88a1cd0f02bddbc5a74c662a2c6ee299bb4a5,6e9521d99a8f1c6002f4b5f0dd55211f2229662d,6e5860cb8753189d62529ab327e07f6b83d0e629
ef1cb852a8fe0d0fab065f2b24eecab37b7bf48c,bc727f9fb220c61518b916307d182a02e5586265,b9668a88c69abcd7061bfb5a4baf74d83db13be9
d98d0c5e62b6fc704ff39364bdc20f66e0dd64d9,6652fa79199d9f0d0c1d433b1c7481571bae9f5c,ddac127347b4dca6ef0c0156bd60f27904431488
5a61f51b3c9cfa8bd2122da0e8747bff97e279f2,4a1db1dc797edb2d8f5aa89ec3b8fe9e8b2137c3,3c34c8b86b456574518ce6565d5ea23d65c63402
e5de38c42d7e767a8625b4042c57ad64bdc941e1,2ed2ca5cf0611267f1f0d58f164625cdfbb6f858,98ef2773e01cb66bfa25c72f6cd84034f6eec22a
ba773e3385d908ad2ecab8c6e50371b19a3c1adb,d72eaaf734e8cc074acbb9ae43bcf25154476ea5,679f2f75b3bf361288e87d1130a777207e7c757d
a398da4c72b5a65018ff8f4c1b70ed574a46a95d,439faf0da88cb10015eede0b7b8c6119ad740358,429d2cdf12f628ba3c6ace311d5a590facc4dbcc
29916bc6f64e0a7d0c745df657ad3eb7baaaea01,248082347fc619a7c4381218e01b96ef32545594,6b2e4fa4133a496c1c3f89e3c71fffbdd7c192fb
271f69db12263731e2efb601e27862b7d97a0b8e,2db4cae7aa05c1dbd754744c608ff9c11818fe92,72081c803ee5ea2007ee77a1bdae0f2a02e94c8f
6fd5b86cff2c5e04292da1e4239b93f34c839cf6,dbcab9cc2919b923595e087a9c4aac133390443c,2c89ddf62b1156ac23c85bf5d34c8cbc98d9875b
af40ae2c9192d5c3ad8370d8ca7799e6015d6a23,3a2342fec4e810872748e3ac2613e552dd2f2fc7,f39cfc75fcb7da60b832e745ba7d442e039aae19
ccf631eabd3f52111825846b4911ee6dc918726a,692754b4228c0c97b08b2857362e7321eac7d936,f249987133a617dd1d86cced6e16be1dd36f7205
9eda172a485371faa535561c5428b5d5d256b96d,f2c5bb2bfdd30aaf65514c79899dc4d5dc1eee3c,5649ce150b66e35934033879931cbed15f911aa1
f1e32bb187b6ffaffed39eb94e75d0b26be2c989,34ae77bd3b0c157043dd666e65667cb2c7116039,e1e9a6728f7601f9994be89374720edcf408826c
82f025e9e7505259228cd1b1a1b18e81c9806a82,1f91fe4b11d06cba30801be7852cf0b0be7a3b21,b81b818a7569b762f653584deba78bb0fca2a81d
a4c94c8b449d5090d2e781f0382a6ba3cdd29c42,24fcd05e8cbc84c6cc8281c4914bd560a36fcbdc,aa3f29eec8ef6cf9280699e260ee4f700e13588a
49cb7b256476409924c581145a760b863b9e755d,5c090fce2ce9a099ad52ea4aadf7abbefdeb67f3,3539b4a6f342a641418d0761942352c158128aae
53e7006d56d7e111ba6629d0296806cd02e91f5f,790a58be52aa745633f5c23464a774d774200fa6,78793878611786c74714f3ec66551cb9050b4077
0f8ecb73e73c3a5ed9ba6ce7fce91e7d40c611a5,6bead20fc34cbb19d66c74047a3c23dd9d6d378f,340499dd3a7b22bebf01644f857254d1dff2f814
54eb8de6581fa93531ac048f356261ef565d7a53,34445a912abc41bb8c95281e51388fd9ecb0f241,90e7b2be56ec428191cf6a68581840468b74a054
2626b85984b08a8e1a3d9da1ea07d72da43049d2,a08c937bebbe84aa66173b7484caf0246817ef34,01dbc63735030485dccf5960470de6aa12e6d28a
3bc6340424b6c43a67a1879a4648f1542ecf1d29,e6a3aa345000b3738ee681bbb516d6d1c0ac7e33,57aead9a1487bf0d0f60110780e5b73408bd23d8
e81b062e2d295ad64a692dde3cf6649282049d3e,be56b641d708f31fb418f5d2f6133e3d97613f88,c7880e7bd12117dda3958a7792e31e6145ae69ef
f87a66f1e69891839a5e039a0b36084d21423761,bcb7c069fbf2f13ab209b17384b854b3d9f6e2c2,621699acca8f4f7683795ff8757c247fac6bc57a
c9b407508aee0ac699f5cb6b4a73638776572eb2,36fe4cf43d2945a7123f77bb602af6c4d94dbe97,01d97bea00960c131451ec6f58ee7593a36ab0e6
16c18e845f04fca60341937bcb9117a40784053e,8591f1218c9990918424536446c8751a0edbadae,b2861bacddec80d8fb1a7f84eb30848a4668574f
7d41f5eb92f5d837bd51a6434367122d7e329f67,2ae98a7363e1bef7c369eac8846d622a703b9d26,5a5abe2419afd2f124f821f76c9229f9a7de1a9f
8802c7d489d067ec1ba67b497fa29571701263d9,9063c3c0ed0bd09880b9e6689934b5bf070c85c7,e7f6da4cb09fcfa957cad8bf160a8a22d05ddac5
8a7743b566bffc2bc27033cb208fee09a9a7223b,3121ee136700feef1f966195c5913f4ed8ba4e0e,e3c5d016e0c1f139711edbec8123d9e6b830a5e3
6f7c1b5b4e67c8ab7e59321c457ac6d2fdc55069,10b201c50699cba4a8a2a553f77bf5531dd6516c,e4600f5e3843028ea8c08772860d931a7f57dcd0
818b6e698305326f1d4e5d3b2538a1504d05a7bb,bbb564437d88a8843f1769ce773c79c6ae0ed3c3,e754937ad3a5b4dc97336d476db90141c64c71cb
2ab16a5a8f0374692494351da9bb6b3d54d995fe,50f76a2ffb54c6825f5c1e81816e4e0ae4e77363,56fe6cadc8a6ff57658a3c6cb3dae4b6c83c54c5
23fa8c80b6a1c0892be85eac8e0e73b758621855,8606f13b243891ad0a468fc4d70b6d655f491120,fc7ed302e7c804143223502510288ffe4697d03e
b641687da22a1d868cf4ed0ac05f4c1514e2c9af,272db1b872f59e6a8b5a1f0a2106a77e01dbb318,c6e054dbb94b811cb91bea2f6c75d5ba672bf74c
121e793c37ad31d488da53a7c1ae67e81414362a,e569863a1a8efcd537e440e92ef16da80cebbe22,ee4d77b119cefa866eba5786f34fda261f37bac7
ced7e40c43b3b40ce4bfe37e28b4a8c78d82c041,a0df7c27afd1247988ec3aa3755d0e47b62e03d8,efc4ab792820526df0f7c448323ed09622f5394c
a6d4374f1078ec113f57fa4bbf74f47418bb0c4d,c293d0b7299101e93228925ad239f2472c316c02,4ba064d8942f2fbba8b447951c1ba0bf163572ec
6597f02ebce8d1db39cf44bd6a1a6763532561f9,d25d094d579adceea87cbe96bf0fd64a111eded6,83f383e0041161d8193e392b2c200cfb0d120eb2
3d5a100f7969531e54198bb3721de2f00738d3a8,87a3bfe99d2504740152fd6cd662c35239429c58,4b179ce4fa92d06dc0a4bc44efa58e3665834e3d
4b9e1ab30a5921fa7daa7dc991e044f59cf48313,24972d986167814ccd7d02a4b7da3798463296e5,eeae32669e88af0ae699b0a9bf41551cd9f7759f
605740fd0ad213bc577e3439a6e65c0d478e14d3,791328ccb551ce8c79956271d535eaf6beb9c569,026781b9a36d1afbdf06c0213bf87d8d8e03dbd6
7f30a8765152d85371074c1648cf22a844d612f9,881ca2c52f58c11d44de6ef4f8feb8bee18cb258,a1bdf11d993f03f0d2c4d0f3955b5d9435ee1e38
649438efa63c3534d61cfdcb8481ba41729c85ad,82c52ed12780f83701c05e26d8144a357e3c6131,268a148d3a6e3722781532ba093e539f72453261
bc798695fe74403d2d3e1f5b38ebad4e46c24211,aa296af787968ba25e586b6af2f22f63a842768b,c605da6ab31e678a9f8e23da7b89b4420ade58d8
118e093c974d3b3407976d602a93192f668e815c,3e14d47b92df79b31acba350d748a465b2cd9989,bd606c6b77d18fed794725aa5f8365dede23e882
35f2fb1e8d77df3b8e894b6ab5481aae51106c92,ae93f8de918b71ad9ceda00f1e05b7554aed4cb7,73895d3cbca2ccc3a93516495837a002e6bb7f41
d6c3c74b468f443deb81d9782c781eeb00a1c63a,b5b7cd54eb4acf37cd3d4108df73f8a54986e96e,ab5c5a7e9a20520ae472b30df8b321571317d705
787454d5b2e8c6f8e7c909fcd1a423ed33404977,ca0323d4ca7519d49c9b8c5fcc39feb6b6bdacac,1606d4e28d1809086629c44f4a6cc190417ed9f3
b00454bb0ec8aaf70496b3f441de0547f7f71cf0,1853d1ddd8916104f4087533ba3a861f55fac9fc,ad61db2ff592ee455738b159dc415970e76adca1
569b35dfc4add6006eeb47c7b03815eac6797ad9,7266981c6c55c521ac70f06dc2c287fbba16725c,eb046b07d07fec12b144ebe3fa00b586c6c169b6
7887f4670039897c66ca0f3d904714121e25b98c,0be3fe9ab4b9ccc01ed2bb88b679123bdff2f340,e695edff98f7092adc79ff2a21795941b1593b52
f30a41359d8be3766d6617dcd9363f04da73fd23,f83223c8b2b44437e4b0f1ed5b5eb89268219420,b88b8efbcec52425337044a8ea652d1d738cb6de
541bd66a6ce4d57737709ce9076adb389d172a8e,880eb3658ae80f73662773ca45ad51806a6b9832,4f4beb6225f8c4e907ad0068dc7e35dc1306406b
52f0ec579ed810035db0886b266fecb1934038d2,da8ccd64efd0c6763e414939bb2420c2fe66c660,16c4e0300cf3dd04411b72bb0547e8f80ad72575
b2f31c4112e69e75e29c29f4472a2730547c6004,c342a5f47373ab522ed67ba1f4e95f9a208dc83f,7d6158d5f49b19dc80558318e974d70a6c7b9d32
5583781f4720cd90c579993352fd528649498163,a387accf810bc6c32d07cfe2e9fd7a131cf8e5d0,3c4a1087f33a319b48b99ab6256c48e33f7eda25
2c72b62a0e153f1888e19c988631d0275b0f34f7,d9a67bb16d321cb6ccdae1d1f3132afa8c0d3bbc,ac0c187b56accbcc5f8a72ed9bcabf1fe340f100
946fc370e93ae5e7245ddad0171d006248bc9366,f5dbd38b7eea68cdcc714330eba4e7fb28c95f5b,88a42c3ee0c2c0c53acdb99e2972ab24ecc9faac
507e9eb20aa8129472e348398258bded6c5eb4ba,f4f6a16796a4b3fbbecfcbe9f77d62f6ecc9e54a,1c1dbaf77645efb1c0e6599d0cc3b6d354646f5f
409de5ac96692fea0314aefe5a9c880ab8983599,7747e1f6c8b51cb9c7d04e3a581663d25e1e99bf,e1d56a99445063bfeb640a3c6e0c41688076b65e
c453bac7adfca20397628a8e981c9e92281bfa04,cf79ca16b49445df2332539777dd879f6aad5b36,50986967f52041db50ec176d31342fcb3df7b305
5845bb90951932e8a6863acc0bdda42d3342e434,0b3238bcd37b605701e958099ddf6cd7e4772cbd,69ce966691078a4b344d6691798916b52476ec46
dc4689ba1bf6dbdd5d6cbdb2e5bccaa849b3346e,b361b41a86c1385540e4f85d43263ec4d0716ce9,1e89579766d31975cd605c3f551e58ae6f512c23
12d7d271d6648061fd0c5ced3769578047b0f024,1b2d29ea1a6c28a8828c2dd4acf81054f177db42,7a228bccfc85f23b97ef2d38620463364e24993c
5771245d74a7115ec8a8744c6c91506d40904285,b440f57739efb5d68f18adaf6d71bf0aa126a8b7,4208fc79c702c8c571a8824a7d606774cadf98b8
e6a68b28b6de64dbbf0cf9eb8f859891308f9fb3,880d0333b0b5804ed0e58b71c29447402ae3bad4,408e388af3e48f51925fa2502a3b21a23478418e
9ee13f2937e57b63c014a3764d96606e8218eb1e,167c7bc5656cb7012290bb4d2e683e9f554dab27,2eae62a6e89673af2a083e3f7500c91393ee3f1b
a4121d2201bd3bee71d7425f75f8ae29dc3cf92e,ef796906e9faba606b8a6280c1dc97a88846c71d,cd93050d7e071642ccfce2410d5b8a12161937d4
bbeb98aeefa8d22dad0bcd1ee62c09b91ff205a4,27be091c443b47d9d8a57f21c508fbd678d887f4,f48282d7b34e2d9d276c9e6c2e5ad81dd7a88509
d03963afe9ecd26a7b1cd149ad0ce9a07490aab9,c4a77a832ffda91ba094b260656a19a826df9806,ec206cf4905cdee0764333d3c5ba7fa3adacf095
eaf9a9f1b986c1d2ccbb84972f1ffb3303bfff84,baa81d5275a9cf1137339738fdfe8becf2af779a,5eb5fdabadb5d025613443b09f4b5cafab1cdf9d
c49ac16a195a306d0a60c289658150c4ac24561b,dd1565c667e5bbb60975ea887c7380297286a151,93d38629aa446397d36112cfe853cf00d013e854
952f4bae17dc5a12142ddb7ba7009aee1d7bc604,d83004dee1cc329b640e68e075240354eaef97ad,5fe4ab49bc3c0d58d48ca793677a2ce72c8f85f4
3c08ad4af5be43950c86eeefca448cea9f1c0dae,9a983632f93361100fdb50361f86337760cfacfe,ff4744e0ed1c64879a672e58849875b6189f895a
3724e00169d4780e538a585eb91712512819c35e,995309c20901f2c0e92ebb1ac967c73b00902445,cd9ed54d35fc4573b4adafde00979b15473749e5
81471859075f0835a88bf09bc3d49df5b6fe6c7e,0104edce45a3671d32109db527a2064514336485,f86a9bd5c026c7a10a165a8225bcf83e17c47b25
40cbda6e7e30dc29ddd7bbeeb9f50325c42a8cdb,9a1083c98eef9645ea5c5313496deb321c73ca1f,bb2e2f83e9087ecbd5f5f652c877e694e00660ae
543b341203f415a4886c1452015ca4c70d4556da,ada576e559748a528e2f663345cb20f2c517fbd5,6ab2cd3ce994399872036947cc4c0543818874c8
dfdc4a4d78d0584a1a9d2a69681a52581be4eea5,39c3d5d035a49280859339b4814a27cfc50ec97f,4933d739388bd958c3e3ad2bc6d11f44b7bb0738
a2a85dc7af9390d1fddd43880a544492f9849cdb,d87a6c89d46d8eabad17c67f4d0f8c987f78e3a0,00d8d53c4e4804eb3722f114eda489e94b4e0495
baf9681684c1aabddc3b06c7d994e3f9a9b2acb1,3071ae231ae0bfcd22494ff07164e2f8b821e6ad,f3401c3f5393ec512d2ec14b8f70e453bd7c9b3b
b35c1182441e95912f2930684a419421c8da9e65,dc16426790e06df8a08c9af64d6bfe6df5d51c63,30c8930c30c68ccad17d87f364718b0f94ea843d
1061965ea597e8ae4c7fb6ce04f88887a62d247e,baee5b9fd4b1217b7facb2f7814eb5df55671ecc,e3b6d70f93e2f7831897296d218f32247f13adc7
b679f8bc06f52a3e00d282582703beaf0acb0b98,3fddae4a40d3ed8e2cba9e5256715b14d9a97040,4b2a924ea038f4304e05a4ecd3ed2dff703e44dd
aac37e31795e3dffabe1cb3745e99d6b75d79f8f,49395f2b00b01e65331ba4ce11749df8291cb26f,749688b3b0938d0c59b31d58adf5e64ec276c179
b8db469c48dbce4cd9128ab2843435839145d623,6a9376cb9e3802c9e7efb8f09bcde88829e3942e,7f3ed9e85c45f126b1aea6e69481ce973e8bdf7e
c527437594d7cba7bf028ae69ba0e2058ffeff8f,55002d19056049236f7c61d984657b54b778325c,2de0bcb8d0fc180b1e1b85769ef55b58b5f50b06
79d739baa60261b18826b202799b82d71fa1f294,02b7cc0e56f8a597df74b821f5413d00a3dd7f3e,09accffd2878899c633c8a65155789a84c68b703
962b36a6e843c3d2d7d0e42cd7d9b03cf8db8b44,3121f3f8a08ff1fbca9d2d3c7416faf3d7cc1523,07677f421412915db1e5453d8b483d2fc8306e42
1d48cd7eba33c5059cf840c42073c3a0b624ead9,59c88f4c7927cfbe4b9e4515bc6a2ddf08dfabaf,6b47a03cc97643fdbdf30dad9fb20e7e21ea6d91
033a2ae2e77427bfeb6d20b76c2e762490b446c3,4084da63abcbfcab5ffe1fa83bb2b50f445ad6ef,cd72a8910e3d0430bcca3d02b783b366cd0a78e0
93365f7e38e8c2fb63dda8e50a570b654560191a,9681378d37b4c5653f586785dce888ea03f74ab2,e3f4bad1646c9b16fdd672707c0145fdaa356d38
60e77de115c2ad9fd823ba9684f1b991f8ac3b39,7163a893e9ea8e98731da28347a61854965deb74,dbf6527508b6de8799239fa025fe74221b91d829
f7bfa0e426c6dd8d5ea9adb7fd042d5e33634b16,170c05592b56e987c2d72c660f066c349ccc85e8,82ac4299540a0cec37c545787ebf0dc4c1fe303b
fbcd90f2860903ed0bd7fcac0fe51f7202156a14,3c57eb42f91348c5f066f70d7f7700b843dfbeda,db137d0528f1228abdf90068aac290359cb4009c
020ca55e257c3b3f354211dbeb9f992730578d99,88ffc9e22822e13511a7de1eff2d6723505f51fa,19fe377455f4ef904b4f71034fc714f51bab1b1c
a8b4c0772c18bc98b934815aedb0256fad88f1d3,637c34571e50d78cc1c9368f0ee44128f06a2bc3,74625648cfd30f1244ca56410a0d5a5a87982c83
4c330f2799c68105aeacaeb442365ad6f8da8da6,1fecb46c52c98e1d55ec875987770738237ee1ae,a9316b1953b31f452d32f6d6fb4a52ea81a05104
01246e4d30d7933b6e08b1ce2bcad9121352304c,5f42443db3ff3a04b64361597c650fee9849cba6,1ffef6ed41fb47c1e7dac5a0fc2120c3ce96e303
f65e4f23853f38d6e39221e9d70abb9867c07052,4867d48e99731b11af3d405c621d1f2e945ba95e,03fc5d23235c1b6b7184b9278aae7ebc4546c2c1
04a077707c334705b9ca639642a2db03b6b154a8,42f447257dee02eae4fa1aa194f0bfd387004858,9648463eb544afcb9f6d65c17682ee05a4cc6c1f
7595dd3624f048163ca3b575333d0e0b86d14c92,79f6ee538dc8d81f876c7f32baaf594f5fc9d1cb,7bbd33bcd6fd57b01619449c2f5c9fdf217c2e02
3db060e47afd90db26f7b5cd8ae1584438169a23,fadf43a33b4bf3c5cd4d73f086d8de0c9c02aa6c,6aa49038a5b9a2316e609b3bccee9bc6acca4e2b
47c21fd1bc4700da1e233cc1c8ede88773105057,feb79e0068b27c9c22358fcf6ce84282e9390b3b,981ec64666491aacab8ec00d0f631ac371f31812
c4fc5fc916c4eca14831a70d75dda09df96778e8,5605566e427158a4300941f4279b41000985fcdd,8ae28b48463fab579e6194b76c238c5d7779e0ba
71ba76532b7bfd39f9f861cbb8f87ff949796ee8,5eda6e027d305b1708b7f938745ee454a1e58342,11b0b9dc57556caca09bf46bba722979ded5fcc5
ca6fe96360edd68e1a9822a614c507fbf9681aee,5c564ea940001ecad02db8b2dd9320ffa42a93b4,1d1e070ad2fbf3c5b2cfbd41b307d59fc67e40c1
f3e03f048376a63ec50862c54579104b7685480e,b514e979bdf7fd53556ba1d58dd5915bb1308f53,e3b93b07c6a6968cbc0b7c8b1d22353faff60614
2e441609bebd024a9cb9d0eb2c3d6885f4f0b092,05d6e20accbf8ea92b1d17949a5d41d583887c6d,3e06242fd8302a9098a30cfe457357ee3a1927c0
b32573d1ebb4c7a33708efe3a6e275bf2fdbd4a1,2044868c10fa1a330c98b21af704abf5a6631816,d06dd2b0ea1487fd0cc91c5d489c843a2152a375
bac4ca19e7298e0395e7d3d7e7fc370fce1fe769,698d432ccea80b6740fc9b7980c19d973b03ab0a,de03a1b894799e2f9133cbbad05c3f6f46af1423
2055ef4e886888a361bc6fbdd90980a174d29d84,62495c964abcfcc8f12038bd90db3f66a60c15c0,529b64790bb5637ccedb0d10926f9827c905c007
277a3be9b06258b5b439b4ad363d98786985e8d1,97f159e4b2c861df559966142a50682130e8a1f2,560d597c85da4521779cb2dde6d5ea344aaab412
122251f71d6bc2395be342a4f5b1df4353852991,b45aee980f15f4df903989529bd8c178ca1647ed,83b5047931866e5ea58811596b64a633dbed9480
5b27fa93753a42dccf78082c99c580952f87d728,8fa3c57c1bb005d27664e66544a4005758f43dfe,ff3b4adc2773934710b014df680d96897948118d
506634f261efed31de36b3766393d1386fe2bdd4,3f0853692c9397088fee4217a5d8466e3e24f6b4,178687531909624efa0328c8a2cd7ec87f5499e6
d575aa5240840b008186da794007e06097cd3850,2d5c1d43cff48050beccc906049cfb7ebac83c6c,4d5479741d6a7165b1592abe890330207dc4795a
064adbf3f8aa7e1f7f1f85b31d2eeb8988a481ac,18c6e13f45298162520fe8d20f3397b1037c35dc,4cc5cf4d0edcd8b18562af0d41b89b027b1bee74
4cb97dcdb34f5912ff29019b5c9b5ffc20b90db6,f3e667da42bc0994dc51aa92de55a70ca819ef09,24315a7f28237e3dacaa2e5352220fc15f260764
5e0dcfb49b7a970ce61b26ec468b662904218236,4443e83b75b36946e8a35fd0dfebbb93c396c1fb,93ae6261ccaef7c84096785c28d5f2569c1ec60e
3ce07ef6fa90d13b7e6c965bfc489226575b548d,a81715d6ea0651bad3436d09effcd4471e8f2abb,d9317e5df522c6ff359c8650e7a2d542d306dd96
7cd044eae742f33e905dc01ced9a8cb1e31f0adb,ae465fa8dc85ea69180527c3fc1e03b25ecab082,e53620ebdb89140ee851e89d2f3fbdf9ca49a162
6f7481fd24bce9fb1d2481b5f7be3cbe11e0ce5e,1351746a46807cecd8064e873c41c615f9af6ec9,8aa9ac99a6a2796e77a5157aa45b327699eecd83
a5caf91f74d7eb8e4863d155887ae09f60e13c34,881eb0fab5bea2ca1cc283d2aa76d75a1904458e,5298e25c8420f43587d174c6d549f688f514a04a
f8dbb09a46c4b48d6ed0db3656aa6474a1ef2ada,27a2a042799566a069ae6d4772ff77405491e794,2c527cfc01eb10f254fab67623eda3d8180b8fd4
d44cae14f597ddd55b803ca1f8591e816a655de8,4f82fade82a92bb32768602a1098388bebb3b2dc,ac6dc582bed106bcdc44b5ebc16adfd17a6c67ba
f80f1112d4faa565ac5a1266875bb9f22056f980,d7581aa1eefbbe22851baf8e9f8db92e4f99d085,28c4c58b345a72e85026f83d1e49b86a9ab18183
e4bd58d66abe436e1d660baeafcdea25c42c2c54,b4eabbe5ceef3ec4542f3654d7a8ee601200dc5a,d7a486f225448fbaec7e31208a5ce66de71d8a62
462c201ce6a4229e562a351da130491d53eddfc9,c98e160c197b9cc53c41ab131ee8bf5a80164e5b,546de9f7e74d80800d8c0641ab5865965c9bf87a
0bf0f26dd57a32756012e677279f53c7ce81a850,2ba04dbd137012def9d723e90cec51dae6788bee,e073d5f7f79db76d758b96927c9287868a14227d
26855a29c8d0a726653f455704fd2917e89876e2,ddc2259e5eb53d48375865a4ff2a442472a2c042,ed8a05d6979982855e04383141350e0e2068d711
43721f21c4f5da7f8b16745cc9ffbc49df070838,bc0d2293a1a89f2a352fafdb0924a30ede104322,8a48d1bbbcc9a5084d93333460fcddcb7871f69e
2575cbc439e7e7a047ef0eec5c5843988b3cdd0d,629c87efc8c8ca951d624c5ae392348a2a93e6a1,53bf5dc6efa13c3b73e6645f4da47544898f1b0c
060a7185ab508b377b3d989768531e47e5187a71,eae74aaee07f8dc1ce1e2317bcfad967701ab218,63e8633262df27bbf20f1c164f2a5a8f5a9e9360
3ed5a4a022db3e68b6c84c0f749dfd9971c70f79,a71cc7158570729c256fc7573b7d556ceada1843,c96ef4902bf78e208033b9226f2475bc97caef82
fe62b3ace8c237d8bd1800beb5969e5cb540723f,57f6ed804ea377783098a2ba25646fcc81c370db,ac3425a14d1cf2fd82482cf0d1118b6d4ce39bef
1ee9a39fe2dbd16979b0ae54c6f5ae79f56af8b5,421d67556aae3632415b8d1d585a63be325ae0bb,d9903e6e16852a5f4a21e4cd73fe1db2f71c65c1
e406cbd9c8143219c368fe15a1b80b1338f16c5f,a736a4bba7c7151ad58edb776c51eca69e787cdd,ae927b06896c08a1df957e44e18e4a1da2bfc01b
7a29d8f54d45907913381878f0ee1d06bb1000bb,1e0f6f9f6465cf23899c470dd6d27aac003cdf55,81464433366a9557971399113c5a772f6639f650
852aee489c39868fad7af9061eef8c2bdfe72c07,11200cfaf63413b745a7186718c42e90d9fc98df,1dbde8a79d846dad16169366a06a12dad949917c
ea102d792f2d757d78cb32c884fada058050b317,462d0eb07c1be2cad06675bad91e4acfece448e2,ccb1985953b0dc1af1ce31a48a12245e2f99fcf4
af482fde235da37ceec7c58bba42fdfa8c3d4be6,79ed0db6247eed326ea5193a073de03bc826f0c6,906571fa253d0571d779475a69ec3709d9e42f76
a512273976991cad7ad139a3c3ae49097704eb75,728fb7c58c0851de7ce64e7208d16081cb96ef45,a75e453c3081f6ba4318bca58806a1be48c924d7
bf57750436afbfbfb6d0ce08245b5bea0242af21,42c9eb4096ebaa8bd165e8cbdf55277939f418b8,6ac14de9864d08c047b77aadde576778d3803349
64e7dcbc8129b40cc0e1b18122248e7eac4ffe8f,bccc0b195e3727c26db7b18e340896cea6ba82d9,5c890b59e3d68fa8aaa90f826e3cc2fd105d5c94
4e8b1cb97ace5bdfce5bc6db5d7b340456d0494d,91946b78d52af2f88709756ddd130f3b9a2ae851,9cc30829faae560f603a19065591176650a0babe
b8bf295cd18560aade6743aec14d308b1f09b096,3cf7890352fe2febc337c886d51ceb8129f3a92b,a2939e4187f2bb18e00270d44d2977dfc86650b9
3447512e2941ed5504b3308e407a30011262bc90,37c3e86c7fb4ae0c78f63a70310b06b7ce0e39c3,e7f9626592d82d098c554806cdc5466535cb4d8d
7c5847bc70613f8a06bb4249e020bd259fef8c13,37ed03667fab8f0a6c2c4fd97b8bb879b6d787cf,2dcb15f88f6a7dbda19922411b12800bb7d27464
587af1c78eaac3dd94bea5850f1a6397728f9057,21cc89f1e337f55ddb48cae69c819de70f526e85,81d98f5ae246a64c8ca7ee47aeba1552f13c97d3
26a2ae92adc88bef97bfb9c05adf8ae53f470bbf,b367d7c905b476245094bb06bac226b4024e0bbf,f4b9d51aff032689bd9525366201b188b235f0b9
ab65c9889b567e6083596f60fedf5c4246d9e308,91284ba543ef8cb265d1a80cb005f7afa63e0498,472f9be9a6ad0046b97b8d1b1ec9a59c5cf4f926
13f58fe3432a0605a046d37b1b1a32d4dcd79737,0ae014a98f254bbbdc2387d45ea061c553cd74e3,fb821b8c9b45626ac54b26b7a87a5bf176bc6b73
cad21584e5f2383d2f66318d9ef0bd3dfc783ac9,f2d739b93af80dcba155ca836196e626369fb0be,318e31487a1e0dbbe49120373fb643815e3d668f
ce702df5264de939853ee92ac13f605be4fb5c71,010127a622d3b3608c16cfeaed46a38d70f5826c,1966ce7c1c94595bf4c7e9c8db6c3c34098a8f17
9da276b352d8d942d6967b8c4867d149b9ac944d,6a28ac53da5123900e10c8c157f8daad01479f53,f9b98092c4c709e605d4d5100cc1a14fff785253
f77b9fa4efffc8983eb392f7ced90b47451cd30b,4769ed948ac11a609bda4c3d489f3b15c1adbace,2c9870f85ab1d9f90f06563d94bf15e32f7b7b55
1bba83cebbc3a6584a2727cc0d4320bd8ea774af,5ea60b97b1551ff26cf0876caff335c988c3fbce,b804fc5164ecb8c5640da684456c248905dca9b5
c21a0f065463d346c9f8e1e982d280da644d6425,0e5da37533baf174b7451e64a1f6ef7b3e982761,ecc16278f087d7266fa3eed85ae6ad24d727f7e6
179fc5848b01d230a25349d614bfc5487f740284,4736cc2360d401731a9fa615b3020a60e2f35c77,dba69917a9664913f85bf54386c1a59aa32c09cb
1ab46c909af6280b56ef3888a4b3e39754b756c7,05f0ceeb26fd3a32c375af1f536525859ef53d5d,4103b3d180a332f4e7905aa72b48fb23103e3ae4
64141c8bddfbb818fe0083220649ff794a9a4639,2b7df4237b210644c13fdd56932dfdee62474cab,bcf320a76ea108831342ce607126ce8c57bebf9d
1dbcba47967b4e3b23476c9289018707f12a1325,325d29307f1ad7b476de9f1578bd73f471abd427,a15dfba97115ccde1cda3ad516a2bb64cbee3fa4
bf2a3566fa7e4c9ff400c9ded3cd83a61e4b6e3a,a907eb49c9c2961818bf610105c87c45cdec67cc,1f2203c304dce7d446d067a138a59f50dd0e3d97
59c77a48b5d4533ab71b5baddfa203186f39b0c2,0fb4fca957e02129140e8303f85a75f8f2b87572,9db42f5e67f25cab39013bd51b0967df70fa108f
cc552c081501670addab1f8c70fdad49a42b0571,821f3e326fb00a4c75ff000852a5152b7dab918d,76687a04e526f0e93ecd3acb819225080254f54d
2e6c3b060d2bc9d5eb14741b0f1f486a323cbff3,f41025f5dd7d1b7fb4367f0aceac021a7a1f8478,b2bc020fd7044c950fc707a16206aec2ec40033c
22de07446dc3b14f4dab989709912a20e7cc7110,a7fe49f38fd3378f24f326b91c90b460d98a4150,f4e955d04fb051456624d46e27a7f4648ab8840e
755d22123009817a35066fc465a6db94d6f7b8f1,4c434ceb08fcfb00a2429559de39de58db0729c4,5086cf7e7236e2abd8d613e4871916f6c60cd28a
594d4cc4f9cfd6c535c20be43f8ccd570a4d23b2,e35403c3b8364f7efdc40ce0af00eefec0226e24,948766a37ad62ce222986c1ea3f474c39f4d41b7
f88622a799cceca94f910ea70d606d10e91c53f5,4378319f874b31534ca92f3828aadecb463f7bb2,e1297e085928a274220a6d5d6da7d8e4f7a2dee2
81b7b80749ce3f65fe899655de51362367b76f67,77c86cafd08020fed213b65882ea4fd3ed411650,e4a0ce2fb5ad8b60b74d98cc92763302517516c1
11b341cc97b521fce9a74405eed2718cbc226e00,ee1916e919ac94a84e35549a8448f61beaeec513,2a46596eddd34d29d8d283a781c9e3f23e08c425
c79361c010621b76e379dfdd9a697f640aa70f85,c3b8b51cb5907c92fbd303d42e6c81e0f86afe91,316e127948efac638f6aa77b282ceb1b5c454372
c52794f94396901717f439233f6d3facc6c44e61,36b511f0572408c1976d1a7ad89dbaa3e76039e7,06fc6f1e6bba325a60098343a3c950f225d0f495
4100f750569162909dbcfae5d3be786ef2d10cb5,99851f22f543106be3cdda8bde9aa54d62ade4c0,b7322ae4c399b69dc11cf82aa76b96944cffde82
dd858f37aaae04757051ef92f915503935d1c779,1fccfd3ee1e48878337a4bf30351b4ae43b927c4,20f9b82543a0414c51c6cf1d57591ecb7d0bc67e
12176d36839702ab84473655e663bf641f3c8d24,ac150e58c81540661ec65cc9dad7926362806b15,9056ab80257b71fb8bcdf90be2f71e2fbbf912b9
7c609ee7c400fc257842d9b0742a8066070d2271,c68ddc5360cf4e1c7a543cfba9e469f21a434ec3,afea558fbe80b4b5688c38b85a622329df4b91eb
8971103a00e24b1f15333afa0e37c5db5415152b,564597a573d450d22cdf649e58e1e0cdcbaa0117,fb3c4ff75be75c367f4f4d505563475ef7accdb5
15398549a4db924a196c5b1405ab532a0e1f67f4,fea8050457728571c56dec8a1b651c0f45ea80ab,2641f65bb7cdd494eb8459daf45bc4f5b1e1e965
f0cc07fe68989577370032c06d9ab21c49158779,0efd3afb8c5e338a7d8c569fe834ed0a1acbd2f7,56d84c92833e87124fb24fe9f04a7a31a511997b
8132ccd42bdc21fd45a37e0e31742238b8085889,c87213085f5d1206bc0497aac77dea261d3be571,13e7f947ea8e1a03774318542f30a626b2795856
a8d496ade781502600a6bf75d509a202a8bd38a5,240739e71dc7f5b47073725d5981bcf757b8bed6,a90691435bbca123be9a9ce39c76bbccb7e70fcc
bf1c674672a48c159fb936e3d20593b7a8c1b734,e88248d453bbaf80cc0e48440d397edb74dadca5,7c3ab69c5076e762120051d4717b9ada1f945b4f
3b8fcfc6ebcc03cb56958b7286f3bf5e7fa4c8d0,b00e9543a72263cd8542b4d138c850f08f78499f,e7716dc05f4099a6488d4e8b25c6e89685b67896
8cdb3deebd6ca62a0fc5a543f62656202c8ca30e,8511b0fc7b82a9fc2919c9e8ba2c84f61190e225,f56587bddd2c7b983e9ead0a55dd74b4f8fef43a
9ee1821622f500efa9268ad130aeee8b08eecd3d,bba4edb6d0b921d0a36fb08f3809f8085d589578,1ba93085f73c8635dfa403a5b98f558dd4247a4f
88ab9576b159dc778ac34423683e9ed432e90dbb,139f2dfe84cf07d03e461e50097a426cd88a0797,2e65a5d458f7fc677442414dfee4058a39dd9b72
80750f7591998694e5849184ed63c17b6ea0bbdc,fd68d3bfbbf3ff8dd6f34287d18435578715883e,550397b98218b7b6b8e1def5bea34175c483c971
eaf24269bc7a77efbdbd0eb0458dcebb77e25dd3,0e9efd07efacd7d4184d5271f6450946e746dfee,7a1ef994b4579a63d4b5cfd9228da6a5ce543d1e
e76c5d96d8446fbbd6c338bc38dea54a95b0f12f,b0d61558e38f7e9ceb3918dbbaab13bc49496320,13fc4075f5a3ab3129f41f8812f0a7448bb2d4f6
1222456c13c21eaa8074279ce737b7e4992160fa,5c46b5116d5e75e4ef12a7ac325a331ace605b0b,0aa851b7f77dc9a0c4cbe808f6af11b4f8fbd56a
b3c1f294ba4b69f2d3bee53730c86af204e456b9,2e9556f2eb28769f913c9b8edb19f58938fa9abd,48eeaf00a4f9beb8313ebbf396f402aec9ef9ca5
6dfe323e6fc26fa7cc35710bf3e369be33b4d025,65f2dd233745fdbafa615308de06b4ab1f2b2eb0,b1a76314ae95e9d2652754b6a7adc7d06bd0faad
f29ff58ab97e2dc4ab553f9d683a63fcb5d81c01,a4240a0c62243e757f56e3f13f19d7257ddf9333,e601156b8c379fce44d8c92e956b73d40806fcd6
e130557d9fce5ae426c040a72786012bfce407a1,f36fbd17b1b4fc327984460acec850a1df7a9de1,e187d49590068d74c6f3b4f09eb0de32e8ec7955
1bc0ae3d18d475d9a6b2033f7a4299bcfcb51a37,d0c7838eec3c0e3297b1c35fbbb065415bb0ad73,85ee93c2c5edae6f49450cc81fb57380966ee60c
80f1d558229e3533c3a732a19074395847d229d2,2f9ed0576ec93815ae07a0571c3e3ee799b5dd8e,e412f6be55f9ba2b45c020a240ed467cce5ac28f
d5c6286852892f3cb1c9766a0837c4eed1d0f70a,902c93f3c3c213fd0600db49371e64e1f214766b,9409ec634186e7453346e17e55d4f3c4c657295a
c3a3cfe80fa1cff78441a38392700f034a70a3ac,2e86cdb6209f56939ae97f8d0e9516e4b81abcf6,17b7782929e4288a4dd67f644500347ec12ef6d5
2d1fba1fa15eda788f6d133aaca8804d4d28ab3d,61397d40ae0c43083844e850d87c60ba74b34d28,7f03fb696693a06f919965fffd2ad169cb60ee17
51f5726343727453333843f8c3093e34bbbad678,ab66440e76ad5133aeedc48923df2b84285c6b51,fc6d6c123d5b76c26f8b0d6b984111ac7017d71b
1de3aba4e3ad86ed2dc533a0042aa696c0805293,5a9d4d44faf1c8042d112e87bf3c60812d025cb7,ffe97bb7d966363d3f58f7c8782d6ff9a26b87c9
c39a3c6473a967b0f8bda6dc4037a813847007af,ebe7bc8097db6017f0959564bec070c942e041be,cba0ca490e456ecfcff524476f6db0cce09a7d7b
7b0578dc173f3eb5029ed3dfef964dab2c6a83bf,ad6e9049edc74085273451745d5d927ab8955601,346962beaaa5e896c155680f220a57a2eee2e6fc
f6a0da71fcd83a32037b6129fbd1f923804f58dc,b6da7a799a116154240ff0f11d94397fabaabc09,6cc391dfa13640cb6297e84de772cc06343beb01
b828529b24e149ed4129cbbf89b34d95f068b8de,edc1c79cbb2925e9f0d1b929d8da01348eeedc35,e60a7d01a45353fe263b3b5fc55e8904fdb00d69
a478a33c3262087cc9fe277372760244f1e558d7,1e9e533e6c27e8665aba11cdf6542798295025a7,e7145f5f7c677cc55f3e9208d08640db49a75e0b
312cf246adc4dcfa1a9aef3968e203660f94df40,3302dae600c38211c87ed5f2f3ec05755cda05aa,a888a141a2bdb99afdb4a0e9e83fc69613c796d6
02704f85a925475c71663e5db5ddf1700c00ceef,a04d2b59f643d3fd329129fc373835a8261694a3,70d2f81e5eceec3ac7ecfd0c188bb1a8adca6284
04631040b8a4eff865e06031d0b83e7b464c1480,bfe5733624f4e7c0a929ed684628b88908d6f72b,485b31de21583caf6165581588015e130425d445
11246aa5b4c2b72f50041d019165f6e3e48976ee,9b1861a1049aa0a646bbb2edbaa6280711bc31ab,5e00358f13ebdb36f70332431b8cbff7f6b04c0b
1e3865a187d8ef54d877185da306713640f935a1,a91c1ab6278349ddab8787751e4b561bdfd6cc2c,59ff8a0f654b5bca8a0cf32bb938256cfcb2d508
90779547622977b5aade4b06a2e0c131f9fed7c8,205e4f34212527488ea73f2fb4ff1a54f03db744,52849480878634dc1bc05288e780483d9cc9ebc8
fc1050a834eb612fd4333a1430fee1558a6c0556,1fa83a91abb262f6acfcef71e3976ac427dd830c,078e2eabf9d118854b09dbe32c4a0dc858bc81b3
b1a91501609c36a50532ecc324226085197acdaa,a9c88ace25531f56db09d2bb320b2dab6f6da153,096d5f50b21f8d4fab941c73982959109fb92631
291532e740b7187638d45538ecebe93a257b4d9c,4a4eadc60eede952c3d39eabec7fb5eb96a855eb,f49da0563310f72c509225c53a8cdcf01a92790e
b826ad8b7ee25ad5e70f9fbbf6c9b789dba8e200,c42bf9cdf5ef417b76093b3e8fb344e54397e62b,2d8a50556cdf0d49cfab4226ce47960bc4c87f47
a27abdd62170b60d641b1c439876243c17e06b2e,c86e7b43b434407e08a4c722d32dabaa2cb19a78,e29d1ecda9162428b813c1478f2c22e6ff6a6485
7284e161a205e7bb47fe42dc35a696fea7579510,8e717f41426df720dc5211801441a6a7efc8c71a,eff10ee9b7bb254c1a82c3e838eee6a20edcf3e8
8f106b616bf0ef62ea94601ddebc33b6c20ae6a2,e56052bb32d191e5de15645a38ac3071f12ace8d,cab3b8c06f91fbb847fca4234d776cdf4cbe0565
bba8558a1a22e5652cf76e5560445b9874d0d8a9,83abe1fb15e2ad290c9e0b0e484d49dbc123005b,ac0e641ce776cb13fc7e739ac9e2e2c2c4b32a21
53459fed2b18c72e64f4ad75949dff30338204f3,d9c786fee68349b4ffe3400cbde2de879d4747f1,627734e104652e6d10ae10e83815ded7f9daa71a
e507f612f5bee3e00effa488a48b0b1280add211,14b3c11c0d94f4972db7a40d09bfca284a24eea9,fbf20eee31f00b6e9cbe53803adbf1b9096a374e
0a886833104abbbb3742c40aa8f965ab14547e12,39f7172ee89eac78c2c68e9c951fe82caacaebb5,605b21af8c51d612fa54852d5545c5bdfd03164f
2de19f9e6695fd26f9aafc2201c1c43ce9d7ec71,bf970b29f46aa39f8294308c8598ddd86bbdaf5b,e0229632fbd5324090e43252aae1e171e7e2b0db
f6651f8855ab01cb6f53d3f70791a8bf8fe01d7d,d5ab671ec33f975082ddf04589bdf9e05a92053c,4eb8f8e5659868077b481bcac9e658f4a6f33b34
ba555ea68de61473e931e799e1c6887d0690a064,055681c8b4f5805b4eaa45e154fb88131c570827,8db51a367ec1b80b6cef6ad0c971df81eec52195
860c32f833d407ea1accb5e43fa81fa7b325c289,73a251410eee81a71e54b157a7ae12187485d353,c64fae2f8963fed5028c4b57edb83acad854542b
953a4e1b6452936c7de86a0c7f14d17423628e20,8c2aca6ece8c58b3bcf46cf67bb0736079bc4ecd,f584c559fd036f07885f527485dd803d3cd239d7
aaeefacf85974e22a3b8f84333a5d98230ac1f27,15b3f1664629c860920f2be31edc10824a19c7dd,52c5a0932d2fd596c5872f4e668212233f08e93e
f5beaa80d810f8164f179c8165d8e7fd1d7b6003,c2664fdfa557b7f8e5f31590864b8a5237d8e989,5bf93d220f34a840bc676d012a75ce05703299f5
bdb611c925aacdb6450dfc4e655f3f8e11d78f0a,d44a1c4100800fa59a5428c7c8db360d6766567d,a38effb29b4f0fc8ec503d9ff1e1cdbf146202cb
5fc78b223c11d08da3f9dea1be8bb59c2f2b4e79,2fe3955be93d40368dd6f1db2c4e49757e87ca00,83d3a3941715dfed0e09d9f8beb57e33c4c48229
8b2ebd07bf1a6b9cd2440b5748f95afe55ca3efe,f8da65f8e9a5fa02dadcd16ee19ce14c44133c85,13de117b8e52f4d7c1c5e3a0ece89f380d36975b
6c50c02f7c97118bdea91edd78085b47534f1261,9e8f09b93f3844cc6f8f5ad9926b6eebcfc06342,abcced55af080fd4577f0a107ac1366b3d5d7f16
440a635bce6aa43e7b26611e4625e91f778dcf9a,c491856533b75b0cd2f58d17b766c24dce7bf575,e17b6291f5c3fd88bc6ca2f73af68b1b80cd82f7
c4f046f1b8e9d71d894431c35d1a642d37f08a02,07da0058e3289ce240c7d80244ad6079ffa20d1a,28287525879799fc0bb5fd8b42976e5dc1079249
924d4b9b53b3066a6ac96ec304f7b104015e3f9c,6f8655ecc9c81617e3873674c4c509cd49fa73b5,a71995a521343e12b951ae07b0ff9d45f1f4c8ec
c88037b8a7e3682ddcf492d74a4322af7c5612cf,9ce7fbeef025dff2124bca6773d4c84b7b4f41b5,db5e821ead12339c031c5f9a3c208c509df8f9cf
adc66b233d33e90bbbb1248887e30287b38b9003,8cafafc3e670481482caec9e5318ea81a52cfe3f,0fadf3515e2cd9b53a99e21789e4b040a335b5d3
5b03123bd411c1455aa00f5ebb9ff3b185af087d,26c69d564f0d9b399c0bc3bdb08b84e05d87fb9f,35701f8fa2f826998b56f6a8a67de9e5a17a4174
fd74c26707e47ea8f1989941d05b02d92fd04598,b974e4a25f99f91d635d3023792a614f87d0125b,e87982e925720e0b29d7c097749802c99ed92125
ffaeec243a674a1fe4b447bdadd9d360dda314f5,9caabdc4e78ea95eba77a4ac9e17be420fbf4188,47d23951104be6402acb8ca5ef3c9b2a1ed175d3
b64701da1b8844dc50c51e453374a64967a9e1bc,f6002d80781aed00cf9549647cae12f17b1ebf98,a816fc2114eed47eb4617e14a4aaf9109988a60f
4c787b4b9f79a958991f248ec2db7a8e6497492e,0c61c7057a91560772a884b44cdd841100105ec1,1743df7b80edf021173e1ed7e4fc24586cd58f95
c6e715a54e9d058624b680c7d5c36511ac7982d5,4c3d8d016eff0753f2b6dad39a8aa08a087c0af7,748dbbcb20d662572667064bf4494f87fd8abc8d
1030f67fb4842fad0edc3d7ef2798ab0aedb7f08,e86882580d4ebcf6392ad27d18f2de1382656804,c1c1d46c1547cafe1e7b71864e100e82340b6dfd
8e79108e518ae31a8a354f26a998c84ff68f8455,02e90adfe1003b6ee2516023dc5e0c38c3ae019d,09f2fa0daffcea9d44570641d341b4fd40346cf4
ea988e0b920bd55fd07baaeaede08ce82eeb45cb,95593f15ddee345e0ac36a25b4de904c1f8378f9,8ec86ad053ed6c0777e2f9d1842de7aba29a86b7
152bb316c37eef709e576061abb8aab413908526,fd1fb255a6d2a706041e19f41521fdb6afd20558,d9e3afcb1d3d8f981d1daa05934e893b19282b32
83a8d584e0bb7f5a7a2da71f14351634c6839afd,4adac78f85014ad8e52d0dbdad28478d54273283,65d4319dc2f9f4643f8fed2cb0cf038ee945d27f
7cbf18c6f395b2133ff1fd8c44cffbe4c7c8f28f,437e7fa75af92b1ebf2dc97084b019374481fddf,de1b3a982b28624802102ba9a3dcce7a71099af6
b0a82993e6f8d0920c2ee789e84d67951e84a334,b71b5b771f4304a82d79ba84647320755253a19f,9f6a3eebb78048432f2240922b18cec3ae80a686
9059ac067c160ff836e8dc7d75b3e03f22404f12,e67094ec28727aa9f0df6f331e29179fddcfb623,6277c21261e0ed4116cf460ca08db26db2d99175
0a9169eb67beca37d9108bc9769011237c8a497b,258ad62c4d8562463516d40d5f4c5768b9f9ddeb,d8340641cc3c64d043524e8f52411e414440b4a2
b08b5bf136c80d80abdd52fa5295589aca38eff5,5cfd214b680339f496a630d8be236382ff5090fe,fcfcdc2ccd310f211d4ffa4ba084f48ca9d57379
43229cdf2e5e0245921e5b5be3495aa3f1cbc907,ee3ff193120005677c4ef63c84ae91af57ff8c37,6a067b55d1523bd258aa3bc8ed2eaa2046892d7c
478a227aa4ca965b1af6badb27f3df4c01b78183,a06a20f9c03dd42ba19457a8c0a4c570af5fd6cd,87137a4aaaf7a9a389c2c34d2eb96ee0e744faf4
1737035501ddd392579f1da5974ecf778e9f1c9c,c81f10bfbd5ab6ac67067933be7c9edccec95040,1c96bf5d30ea0c339ab5234b17cb6352676576d9
52651a7ede3b51d3305f84d5e1ffe90e6811683d,ec2f18f8befdc0423298f1a439278988c0d6e4f6,d270c2ccddda47397de4bcf4fbd791e7d4b675f5
9c81c4a5faa18681f921caa8ca5a7cbdade4044e,6d157b5bf0128f5aa9077daea7f66e89d8dd00f9,657e4bf838f850e1d209baafed59ad2ddcf5246a
2f5cbbacb714ef74a99c483f545d530a01d600ae,a4242e60b2b8dbb6bf5b03bf2665343d7441fb42,80febbd8cf6cdf0dabb80612060d0eb36363a4cf
8708144c509651ebe9e928c500883c4703dfffe6,10ec49d75bf66731bda613fbad531fe49a8e3907,cc2406ad742a00b88568d4c2d9b64c562b42ccb2
9cf31e2bb3a99a883fe22275f205a87c39412108,aaf536ae109a4797c13d4c6a0655c3103596d5c8,4afb07cc5ecfc9d3fd300b9672ee83fa3626d4c5
3c027b0ba03df25a95ff94cb18f15aa1dbac2272,3e6cd16bb56e5f468fecd2ab3250440cad90f7f2,23dec631f52229bc132d7050f4fa7e560de750e7
8bbb28ace8d4ebb6b051425761958e4b4d14d242,e6ba09aedd16890cb76de875abb370512ec0aa01,1ecc880fc813db7da9b55145e21cb6f62b45220e
d4816d12f790f6fc56d492fb8eec520da62035b0,34025aecac5ddc82c0b8fa17873849687aaaad5f,610f2bb3c9a50115f706a01488c2ab5942d3e395
961042356ccf45e7d6247aa334323c44230586f6,a87481cfa4c3e5de8c80387677c172cdf39029f8,0642f145520e2893519c967678575b6a2e3d2542
70ca28701b6fe30e3d0b8d81b02d5059eadbda85,44a5f6623bd8e58b80537eba80048ea01ed72df6,6ec1b7e1b55fb40c21c86eec260ebda0f5b1d1a4
db86dd07fb93ed5aa73827513dbe1483995d8a82,99b7b19f1743d796d9e5f78db2e64fb0c6afe8d4,f1a173bdf6ed78c5440ee794f8ec9bd6a9cf09b9
7e938ffafcff78037e849ef69727ae7fbdea395d,d1348d17bf8d5d81a03e2ea3c36d15add9a3150f,605ca8144f12c6f84cfd285925f91bd55a5f0926
cd8fda1c2887334eb49143c156536ea904f770f1,df4ef397624905f8ab0f9d7fd7673e36da1cb7f0,afbc36897debe5e933a07faf6f2daa961405f8d4
f38b12240d40e4684f7c7de354295812064b26e7,39ab212642b9c86dd002d39a9811d14785b885e1,334ef633a80967422b7c9a213da44731b47d1fea
0d5dd4196f9b83859a45cb62a1c2282a9df18f48,a441d8ff28f7e68a2801285bc58e8cb599602ef9,90a756931ed4e354ed958c55165b7fc31ce05d41
c9f6b93d226d8404f00dbe3786863340ef82806d,07b4ceac49abc1138ed4be662789a618c84c6824,3a473f9148adbe0219e6d11c634dce828571d12d
b6f60e33ca63f95d9c862edb186aadf20f266aa7,914b1fecebe3e44876dd69eba8a98a83501704d8,8648c0353aa73dc211796e0a0cfce6e5035c21cc
4d48e7e4d33604c67ad1c4f0e8192ae92dbbb28a,cfa7d6a0c61637941ed8ac693347bc52c112e3af,b985cd0ea55ca2b91e7b74bd58ccf9688f393bd1
dfe60b53d1a020908d0d585adf8f96d0282ccf86,4adb6b2beea805e62999fcde8f667313bf1a8d17,2e2281387cfe95db0175af1e145106d8f73a983b
f81485a9b10488eca3d521c79cbc15f9ca1ea59c,8833fabb4b16a4a492103636e9253241278f2966,7b05051fc16b5efe71e55dec68336ecf78d37e5a
3218f25d130f9e3989ee3a8c6e3079aacde55c8a,0366df9fbdfc89a0ea03b7ff89abaa953b5be5e7,6ef37d999a126d73500bc57d6b07a76bcca94aec
081af9a892a11c4ae29bfa932acc9b3ea8e96854,a53eb8b230b1783f11bc13898d2968521e3f97ae,bf78823e60877ba498c1297b560159de98cb9a01
c54d1d4b8938af969afa035435067ac224c8354d,159d97e86413c12d36e4c763e89a97c86931ae2c,7ec9d2bf9fb0b51a8962ae005eb30382ebcd64bb
167b5213d14e72cf0dc5ed04c8a6232ab22af047,b499e7593a593b86ee2f543ec1bee6efb0899b63,8dcf4e62b753d35569f4e5d815ae45bb4f02c20d
44f58c702fb70614cbbd3702228443212239b759,a4608bd008938e4e8853e5fffa1ca47c24abe4bb,4527365f0d0aa5e413c476bdaa5b1fb66941f044
0f39633acc39fd200a3c8cc29a5c5efd8ffdf762,4112318e2f22f8df913e17ef086c52a863505802,7fc6d5aaa1ec5245f4c4522f896ec7dabfcfa40f
184c612f7865eccc53ad40f688d9ce5d9288f6c9,cad9cd22d36c362b4de12cc3a80e1b207d5ce6de,0735ac0d1f05e1a017dfe19f2ea607bbb1fd7113
4f42553cb3b884a0a62ca6a5dd7edf80c5c63220,d2785117df1711e874d39e68494c263862584274,7a1c50ff87ab6a9a29f41415655fe65e2969b5e7
58a3f2ef64ff6ed1eec0380ef829c93aa1ed7572,b6527c6c031f373876d81d57da3f2bdc3af25026,7ce2f95db0266716057528bd9fb9083bdaf32789
54d65ff75c15029c7420b5e52252dcc15703b127,dd26c1502c8637ab6bc1741724fe876d66af1104,f81ce16d2abe8f15cd4477cbafd27c048073a173
90cc6db5cb13a68b33e100eae48ebfbad4432815,4fea0e355ea297b6037c8452fbaeeb762402378c,ce5a632432ffcadaebbd5024637576561db422c5
d53a81e2d96bd580dcc90fe32fdf3d71cb412b9c,5e327453a858f41964f6751c5ebf766681d414d3,a76ca8f60e8f91d9594f3e7ae208c6e38183ab97
6ab6d613e0f272502306f306e05cf72af1904420,342ede81ee24eb90a1a31ffc63f226adbf443b0b,293ddffebd9c09cb3327bb97ce03d0e81346275e
28b080d9bcc50c59ccdc9ca300e48a3c0d05ab04,38100cd50193384ec3f68514d15e32d4c47b68a8,437faaab1293556a232cecdb3a6c7e5eda70de95
649173001c2503161bd85280562dd9dc97ecf800,d786b639c016e22d09da7c59e5d62f4d3c4085ff,3e036e4ff83042e70c62561455fc5044991281cc
75e061e06f3dd6fcae380256b04c115f8c6e8296,3d204dd0daa2ebfa70d37916960c7c366317a6d4,6149fe394e66d4612026cfab03847dc79e600470
3d25e52b614f2fdfd0a8e29f6b16971c9eb9d727,964aa8b71bfc312e004d7f41f0d0e04a12313de6,45374be28e8b735ab8244d1fdf567d2ea4574905
5e996dc18f9969d3a691625a19ec1e0fa75786dd,d79c549f039365c60123f239cd45149a037e731d,27fd290150dab0dc7c05989e8c93f3904987444a
2ba0f42508c179af0d79e41d711493b9eccd8197,a0cfed14fa4e9b0b7d6659043b60930e032092c3,424686ce34b2a84815ff79e6614b3bb2ece64d99
677fd4fb00c070eb2f5318589245c2ffda606898,a4ff1d185e956160be4d3c4ab96cf70ef7598a7b,adac1e6db211ade0b010590d5bce76ead3208f13
97e5936f788017402d80384ae987ac55ee08d1c3,d60300e807e911efd4e903412082084b21db8e07,ee98fa8e3f5f31ebbad70b1f2225d62157db2413
9799c6a5ecdbf7d46363a0bfbc8e0ab7b94cf565,60965cdb69c7c9f0142138ee3d112bc325488174,b7742def46354751a38bda786b6abc36be303246
06917784d033fcf9e4a1c59888ef5758971e8105,dbc3e71edac58d1896c0896e5d3ef211a0b471c5,1ddf0149803ddccb0aad22d3e6545a04f17bbe89
cc15a2dba7fc9ad98ecc335fcce6a0c994214a4b,d2231e99e8cbdff20da1d4331fec565ecd3c6861,23debb77b39082f3c483337f10e4dd454952210c
d41d98b70baf95c1767395d713f1b10329c0da29,c8e4a52428e84c11e26493aec1952532e60fca1c,d81170ab23c3f1f76c69034f96d8b1e88a045978
99943610cbef38f25c7589329b5ef5b5532e5cc9,f5336f631141e3f43711928226a7eac5cc803991,84da5e619c4adc3c72c5a6f2da80c56be2899a72
190b27ad45fd6e8dc45643da93fb09c8f85eacee,761b45196210d758fabb7f87573c2632f9dea107,05b67c740833c9bdd5dfb1e20e9302943b7edb91
b9ca30165cefbe0d857c4f2d32bbb6718b141bc5,80523e192a26f9918a7a942d0adffca8ed180f60,1a08d76ccb9422788daa011c3fed2d3f464f9638
562ca0ad801ea4d6015f8c9c971c8929b9c428cd,4914a5a31f907bdf8ec97ad9d9c5ca3ea52b716e,993db6cf32c96c03e2e339b4d30677211ea5052c
36ecb2b5daeaa10898b4d276cbd8c2ab33f545c8,aba44452f36284f757f4b8e899910b328864ce12,beee98e246d2684dc0d1fa42ef9c77c59a381733
0e0c4bd6210b11158e9ded139b9081858abab805,400094921cc3714875282ba96219af966c842d70,9d7ea2c069d125253462baabfeca9cc814701fcd
cf7d9fa4c5a22f6ee4b6ad563c54718107c168f1,29ee863e8faedc99e3b12b1e4d66b21bf51cddbb,b1a18f569018cac1082670353a18f8742b5731a7
76fc3275bce9cd593ff9841374ac4ef572336eb0,ffd461860b9e36af008caada650839ab99845053,2ee8a59fbda3b2d7fbe3b160a644459cc8064f59
85143f515ddbb545e199b5f2b3725a774d4a65fc,7c545cfa8b3e4d6d9950cb61ab1fb52b9a3d7689,b5d0cd57edfb7390bba5b8fb7b617311774ad1c5
507e728ee87ac8f16aa143e58e7a584dc9551291,a46c6229c516a172c35f68e36b2d35f6713d93a6,33a389dfb7dee9ccb787d70e6aa12cfe7a2ac330
44d9234f385531cd418214f6c14fff10712a14f1,1ea876b5173b6823a10898eb94acec7e7f3a2a3c,508e0dd01cf2d4a7511449e4e84eb5febdffb847
130d1e9d4050a29a8f2ee10261f59487402778f8,dba753eb8d899be32b91af258182243b109b74a4,a7be888255630421c404200098dfa23c4aeee5b0
3ae64e5e175d07677d9c367bd41a4edb101d2a16,5c94ccc4c214ddea0f81bbcc1561a0ec4f4dd07e,eb440e0ff132cf5854b326cb80c697d359e048a3
d247c30965fb9ced124b85502e7b1e7208a34da0,8c73d0a0e2fa2d847cdfeafeba39203200fd7a94,17c0765655f44cd0ac761df780f746f435c3aff7
d7e24e8708bba502dabde291f496b4e2feec3b0c,63d9c1f077fe89360a57f07c3fc5619f91f43090,034c361804c13b896340761ec26f09b78cd5b1bf
9a8c6fe93d3ce3eda84042f2a3fd8b64c50e8f1c,7c023d33d0cd106ddda298cac1e340ebd5a098d2,2123c5994181a14cbd912c4064755da6ab0bdce1
b47687852e39a2925ca9e35f0b9657c00ada96bf,14ad18a82b20d0c9cf48bcdaa8cb0e03a066087d,530a962dfcddfc079343559a51c96f7ca855c906
e9d8bcf484ea417ab2d599700a8e8e5a5d019df2,d1438e0d3905fc5ba6315e4b4bb216b2d07746bb,f356d8cc5198111bcd53e61cbc6bebbe0fb16960
fdae200281798334038bcda0cf43790d4ea6af03,8e6a8a36cd9dd38e516b9af63180cfb70851e5c8,a6eeaf2c72770f56ebe59005a0d2af0a62ac2d1f
be9bfbecc588b206ea124d7d2e27cbdcd8451e30,8cacfc3355fc5c82aaabcc191ae368b282d3d51c,66f73d466b16f14994b112cf6a6064fc271048e3
2f5fe67e56fad1e8a05058fe3099774f5c26d19f,66ffc986c02bc46b3abf1f9e6defc054c4d465b3,00d86d24be1b301eb7cada055e591dfc180db86b
180c23b3956a04de88e75ff33bebceb6b5e0fd38,7b02331168b52fd8f59f9dbdff6cfb22ba3078dc,44c8193cfa93c9417b9f5fff5abdd56fd68e7145
b8154e387757772ddd003f29c78cc8e297a302ac,bf7bf44727c0f26577e093a9cccdcbe44f163171,b077d17cddf1140a5aff2f176e12990f41e00e07
b667be825ef6555eceb4cae7c2c372b514617dfd,e8c627491557ec9da82e99d2c834db9d6f284e0d,e9fa0510d0b589026a57cb027fa45030b91681dc
584e49c6a20fe67d9b1ceee2ce99a0a3ec22d3d8,3431cf5bc032a23946e4e9964949648242836e8f,cd3a06f66e944656d87018cac9d45c542fbb3866
57eba4032c0e8569b40eea12123b3c77e31ee189,ce20ea80436b8dc97c226bbe6d7e3d18269268ef,42f15792ec8ed8752024b5b162aff2b3aa159022
a188322e76155477bc266b686db87c03f7f1f8d1,683b566cb7f30c643103d8f2d941c41f3be2e806,3e7d58bce78e5d8c5dc6c1a2a6f34f910112a59b
9fa091f8f5358d22d1d97cfbc257a9c655aed209,c24cae29d644cb68b0620fe1c576a2b2eeec5ef9,0c7aa1805d0f4e3574ac42cc7742007e625f570a
1850aa96b5e0afa40f5916a70921925268a3d0b1,477b9ad5568da3430987d95eb6ffec03b7e6ae50,fe4f12172124b3a6fe604b20980c556e6361ced1
7b0cd590a60f1d3c5d836fd4d829cb1cf86c2527,28e1daa8e1e368a02e2f08a7fbc1b3275ad0d62b,e91c8040eaaf56e3e6e85edebba4cea98407289f
23bbf87c101945b090bf3ceb95a2ad72cac77c6d,ef16a99c08ac8201c8264b9dce44ffab4c596af8,dcf6a97d64c9514cae9ea9866bbd954ca0e2521c
cc063e7a9c6ea5455b4afdc4d3507eafa45346c1,73420dcacedd0ea88ea26f3c9bbabf31903adc4d,0417504d128f8217972e3d35cc5076165cd0b6ae
c83a047dda5fdc5f6e5940ed6df0fba708931e05,210cb8cb74215c76bf1f3f9860d082e3139ec2f3,2cfb790eb7560f8827f086bfa678e64888783957
1d629270cab501ebf0a2193b4637024c2a59607d,46e5903792ac7bbf9c21910db01df1c41c0ad3bd,32d0531c7170455c208923ff1f47ed56344140cf
bdeb161d85e590f36fb0b5eb88c2cd1e3f1943ef,bb31f32941bf3e95b5f231d59df37d580aa6b676,e048266473f06c7e74ffa726e126a1cb3e11612f
04b0dfc8122fb817789f221f7925d9a613302735,46dcffed421e5f6093b65f17d6721c7cfc46a1b5,c82861588675daba0fdf004b5b471f314843ee13
b2892adebf22e769736c9191ff4a9b33885efd24,431d4395eaf0c4e1e9cf4eadfb0f1de0dd4a1047,b8a4a72760b1db9dd3101da2dd82011f1c6666a4
00ae194e0a1ffe6705a6b990eb5b585284eca598,22ec4a20332f8208273604b46e727e481f6502eb,397293f09f7a3e116119ab629687c64aae507539
74d2d2f0d8281e0d4a293d5569c832f201bdc3ca,a9f522c29df6c2ca2189c9b9582840d52924985b,5d4bb6db9be290e5316aefd9cd7cc18945b90307
4ef30edbd449910f1a5da609064eda65c184f820,511beac49c57ef4c6791494a450cad1886a4fa9a,75d7b66bdf066af9f3dbd899c5db07e37c183370
bff561063fba763a9be03fa8b4d609040f849292,7a963ac56a0921ec1b12701c6a4c02bcd9421154,b28681e91d1fca8d60f7bf371468bd0f766d1d39
6618c0dbf7c282a58eb2f78c868f9ecdf96d70a1,1778fb6fe3f01f16c7de5270b19d3e2f15d941f5,b7edddf9d9274c827cfae90b610d84cd0f5ad7ba
59a1199110f4b4f9d937817994c2f369365ffbbe,800fb6624e395cadc11b0a4ceea9e2ff014211b2,bea36238e7ed10caf56df832ed070f569d6892f3
05b73f1523b619c68e08f7a63f00c7211fb698b5,7343a129088752d50e578547bfc8996bedfb0780,183a10b2928f2e804dde61b04191af01c8d05d6a
0b97f169b0eb951810216ef03a36200dad8ab8d9,8498eacdeb34d2b8cbffb24553914ac8af91912c,8450d4f5e7e24485f41314364c1baabc88aff5e5
091189a40c7de400cd14c694740904ae3032b47e,22d7033d18ff3bad17d2f22331de5f47e296e0fe,6efe984a2da795b134cff8743964dbae083e7e63
57fd8f13c9c8368db8949d835dd7a81d32f8b109,0430e1bd1ae4c64aacb78fa6a8f08dacc108507f,b7afb6237fd0a50d85c54003ca5ee8fed8e03b05
465537583b5c51f1e8e0d2682c41335e26787ed2,552ba9353657a25e0457ae36842afb8a8bbe9113,f2d44148fbf28294f0dabc8ab4260889e2c7e070
b67415d1a82a54b96349e18acec88a3ebf680e3f,bb27442b1963ea767dbcd322ce8beeea7810474a,dad75d44722010acf9c23518958d754a6e3702c8
e2dd3a09dc4184a0debcc3d87cfa09806be7418a,42c5e368bde9ca694e9389c5c8d64e6fec8bfa8c,ee6bfa357a056d26096ddc9064a85a45e84ce5d1
959804798cbfdae932b7ed962700ab26f1450975,43d1036b3a8ad931c8c7a2444b2daaf08c7e665c,ca92c49f8c8d1c226f2a3505181510ac4632a90b
ccae78f97a11267394bc62419c78e14f691fb069,4b92df28cfeacf147b4a3b555a1123282a5bac08,89b1cdefbeff7a773a31187097218c3138e6fb74
b6af220f1a99d352a574b0dda714ae57e1cde29a,e4af0fc1e989534551aa5df34d8fced260bf2787,798d793cdcbc23dfd952e85bb386d7afc775e71e
0b49fba6371411abb804cae8ebca925b54ef468a,4267545c72371e41ccc9c039a52bdc9d1eefbe7b,36611e66e62becc8dd75bb7e42f87966bc65cba6
4888442fb425fc85437547d360ced84d6c65bad0,4d732b44d47e2f0bc6a5a1216bb6d353f465e013,0e393084165b9c57b308920039d1c09c1c1f94c9
ad4fe174b114c63c0fc006cdbc35a1075c3d178b,7b3efe6397630799bd023b6abd573a02018ef356,8f37905609f636b79f3c368b05c86727aceea058
c236ac5e97b01b1f2407957f9908c5ce99a47d00,e1e301dea8e7569a7d68160c6891681438057f8f,e15f731a9b1ce32f5e44116362a457eb902499a2
81d24975f0a5f7400bd3c3e7a2f10b34e9bebd24,ac4b089e14bcd6af507ab6e6f9962710968d6aae,3206b2e0cddde24f0ef1ca944c9693b5082ce8cf
246d7865c552f9000a3c1dbc2fa875f055776f42,798f2ba63272467b5c4d2e1d5362304c759ff720,389c927061ea6b73bcef5f198fdf81fd73177821
3d6710c0e3cb9cf9e954a856b8b5c165cc5b65ed,c45d03851afc8d46c3017888e688ef2426a7e3ca,27a0da5a20d1a1476678f715063450d57954d4b2
e8144afb6b2622825a0b204c90d1d4c9225bb716,f689746372a3889341136aeaa6b6ad852a8340f5,5b54ab2040772b029046f130fb3c13066923d5d7
60690e379eed41b2e342446bfb3dd7254303c08d,2390e70a4e434e5567c0b4e319da670e932afda5,0c5281343338d4963135c58f586d662b0219b445
9d94ccdc38542b77098666fc821a0e225196479d,6828da9c6c843ea5401d82e31a8b2a923f7dd778,311c023271a74374852431c0d9492cdf2749d4eb
b26c009d90049b91bebaca9616ae8e43add25d06,74bad92e4db4897b52b95d4e5f8a3626d03733a3,f32eaa1564e54eb793af9087a8c467681044c5ec
98b1aee2a515ed420dff3f94d424c625e85ee92a,5632af2afa36d8f178c916a355840d47fbf4f5a1,d33e7920a2eb99afdaf33173b41a0723efd72b7f
4bc9f64b7044a10050c32c7664213e60eaa83507,8023fffd3ce6e6713f2b508fabc5cfae73cb9fcb,49aa14170341f23598bb18e720cc6cd033d4b921
d14748813333c3e0826427bef025e3c3a5caeb7a,553a1b968d546f947f85acd344bf93a16a3a229c,0c749505eff609a619e6efe07840efa8ad078e41
2da48488d7075d84f0022cbaf0be8084482d4749,af233b8ef8b75f8f47ceadc5cefa95bcd76d1b0b,8d0bdf2f16632ca4385d7c95cabae36f2e7f299b
891e91590fb2ee43938d78065ca3cf1decee9207,57da25581e2e3b830a072358bf68765a28f9d98b,64ba751ef174c8c40fff1c88aac96ca7d09de115
065a81b72c3d2ff9ca6498c9a11cd2625590daf2,aa0ccd8b59475f48c55f58d837c1f9d32745caa1,b4a83e29a44254ff564c12278f172b2d05d16afd
9ba3b12eaa58fdb22ed90edbf421a33c171e4afc,310afcd78344b1dbe6455df06bf463c9b6029970,9de0025394fcf6d37f7726d17e208fed26a4f534
32b3477fe23c5f0639430f814c6cb8a64439c8c4,b7608b045b9fbc05d2ddfff1ad866d97cf493902,79ff74ac447bca6cb85d7b1ed2a01b433716a120
93d855b2ca1b285cf0288d9d0166bf274cfbda10,f7cbed1a72bdf83f88def30a963aa0baee4ab4d2,db83f9c696ca94eaee9d068bc255fdf719854e40
8f81b213dcc96104d0c3804ee544a80705004b7a,9b63123bf0535b0abb704b898c2e7f4f031c357f,dedc018beb810b57caa9880741a92de64f8f1aec
3b7d9956ca19fa5b451c80cb8d1997e75185e465,64e87c87bcda295da38e615b64068e1f9eaba1fd,de8d54cfef354dc0dab00d3f19e7b463468276d7
e30ca2791434447e1e7df097cbcddd250428ca7f,7fe7e266592d081419f56d47f54df38704e844ff,d335ce60dd4584a89ff9ca56ceba263b96aa585c
c3a6df26ee40a7acefb03c87eaa5d7ab62f52b6d,f2d41e680b765072e791c7f686637aca7b09ab95,a16f2ae35dc914bcb8ce5c545bd9019dac1fd98f
40f9d006d6f931f07b2df21849bd8a96776110ea,9a2d0e0692e726e018abdced722bdc9f7064a9c1,1388e2af5b82e388a14d7e255f4cfa5a0f32bf58
3ba27d3160fbe4b4600b85a4dae0869849598a46,b1791af0a3737f230436dc1103b1e94585a2b6b3,59be46a6fb02c4dfee8580b863b91e0327b709ab
558a7ef1edf41744d37c8a2da450bc4ea15fd347,5ec9386d27b93ea85844bcc56e7bde2f867be560,4f5b708d492c10de06fe7925340f240d029b8ef8
2a6fb3297410fbd4ea149d863c6f783342e1309d,540807c5c8cc03b662c1a9e41e9b60f03869414b,5add7991935fe7ec87f5659b795593268d5736a3
f3b28369474a70f7464a6cc94999c57c1b1cec29,bc3b68ae7e42c9d62e0dbbd9309e5c7a925f1c0e,ead882f58d4a99e73d6fe60ff0f4241fa9b685d9
4185e1dc671c371e5568b2bdd0f9d0ede480fa01,8674d45d7b6e407f09daeeb160747a27727a9926,83f1d1eefb7b819ba405346c73580e7c16d4c72f
f7264d3f2918102993cc4b20570d7fadcfdf79fa,dc6057a112aa528100cab408b6be81162486f767,06f8ad2e3dfa87fb4c8b623a04820df85bbf65c5
50b160651c091249c605731b5887d6430944a73f,72daf3f556208778d53f644711db13c5b24b1e2a,c8052a3f1d18e4a5f151c6c525246b6e331a088a
5c4db7dbca8f5d751aff8796c06c47ca339f2675,155756f668c3623565bf2f7cca2e61466e9912a6,b4d3468f684385086d1146a8f1218ac2d86b3698
2c5a070959e86b72c6e86ac78633a62a7f15b4fb,b5eaa8555aa8bca1977eb25cf3b60bcf2f062431,7aae7a8d51e763fd3c3fe3a17ce1c37ef58478b8
e082fe97528a712786b136263908e1eeeaa3cbef,3f0593b55489a7204ee246cc9ad57d3de5622135,f2f39d4aaadcefb1a20c4fe6d8202f82b58b1ba8
d595976f4cfc6022036dba60a6dae42008220a7a,a370b6ff1d4783db2208fc82f179e3de4e702b9b,5d100fd2c6cb07a929d7b5ad9e59f7eccbdd9c97
c3110dfaa982648f79ffef8de1847cf6a07c619d,a9ab15c60d1ebc2ce17a894b15c69c03d13ada74,366acce9ef86d9f3f572a7db3735d746de3942e3
63845c2be6555b0887c45570a62ea7636d3ef479,1202b2612fc2d80bd448c3ebbcab4101a60e1cc1,971d97c179dd4b81ba52910d708a6aa6336ddbc7
cfee7d07d8b3b18a40690d95a20db6318ec8f53d,dc2c6c8996617465b43e53f88ef0d7faf491305e,5bb4049737468baaf97a5a67bc86f01e496ebed9
f417c87ec8137080b45c58423ec6f7e502dfbdd1,c6c05f839595c5aff6f1cf930c2e0c8068b5caec,1a130056f7ec23cd4d68cb2d954353d38fabadd1
d3c3b79e7914220f4a6ffe6843cd94f69137f280,9355e703d7fbe78c78eeae2708aec79637ca7b99,5c6abd2e514df0c9810a62a8f6dbd29692e4abc3
599b187589b51f8d6e6cce36c25c72a87de5d3d5,d1c3ba96f24008fc4d400353d68a357e0a0ba363,ea9e3e02bd1be61fe98ef28d9dc48270a74b7277
cfc5f17b0dc3dd6ef2dcd5a94752a367c8c2c478,bf41de879a50447193b8ac33bab610d3cf0ba381,522612a632e38fb54d6f3099f80310832322d975
95c2a5a2d796d208c5e7c86485940c7b566af69e,5f9ea00b38ce9de9c48f7fbd8c1dcea937f75753,e17c5751234075579fdfd122ef5342b136ad0209
56fa196b03266a23c6446eef7d0ba4d48f3a5ad5,2e77e1a47178ee197608c6841982a9c6a3c82f52,6ce57a16257939c96c97fd1af1d44bb98ea04c77
bd1a6a60e85a5524339f9e1bda0f534d6dbff914,9a77a855e48641858be539edf52ce48a44863871,ba8554fcf5edd85995295642fdd0f05a9f1c8866
f75de6c340ed47a8b0bb0ee2f54fc84391b1dd86,125da5f10a8199ade31c07f5fd7103c214c25d3b,4753acb3fce051ceec26d4b31af2ca6d96c0cd19
b810e6d5cf42b881ebf91c5c4602ee156a6d3487,44282acecb50c64e9507abc318cd280266e93a25,6631f83ccf244b4f7c2eb777cbe57459d7bee2c3
b2f6214b33f66b5d50dfe8e7aa59ade2fd76758b,9cb6497faeadf07c48657a342bbbe675107502f4,d1ba97d46248d4061e2e13d55953b1ea5b40324b
bcaa58db019ac175d6857db93693133e0912ebd4,09be204011872adcc3fbc1ffd3a2d33bed479ed2,6cd75b75c3001e2125bbc687b59d878b90a26165
ec76f13bd7d4f2fdf2484e3f5388bbd385f499f7,1802a8c4936be2572af60b0b9d58d19c61ab03c2,f3ded5e82eb74efd6c9d0464381b3643ceaa8f72
8790c4303a6836ed7f21d0fa71c2111a9e6f8599,55aa5ac129fb44d38a1164f4917dcb3182fb8256,03f45f8b0a16e792dddd7c04a4b94ec35a673bfd
99b71eafdad72910e6be2f5a9838470f47350924,1a07e13c023a6ef423917c4500086f242fe056a3,29b3b092518ddd6ea3525fdfc1cfa1d7b512e824
346ec2e86f63643ffd071963cdb371af63a34e76,490c431bf99b5ddeae2d13ecc5d75f08d0033430,21668148d853092dbb56bf5f8160f2eff0c0a1fc
d88aad944eb20e217c1a8d7cd47bd9e7d7e7549a,4e3fc8290a13cfb748416758caf51e840fa060e1,d71f8233735c29084123bcba463b9e955982410c
de51e6a32abe540960354cc1411b7a4f70a00d6d,9a223100d1c5604e4e3be573d93953073051bbc3,5a07867d202654130e326b89c2c6acdf0bce7f8c
d87ba066083c2b7ef48a3ace83745ce65b460632,847ae42cc11fa393a13977cbb810d58b81e60f2f,3a714774ffec45484fce4547c7b2fa72a6ddc789
ef7f2ab5a7aa65dbac4cfd06192faf5594c59b52,326356e8e9000eec4b8c1a24ca3db8515c57f80b,c005544f3dd010457719f39c8f6082172c3e7d61
eb38ba60c4b0efb9b5a6fe99cb7b7825a244062c,39fb7618e4d4e5e088f1381dc1b9e3fb933f6d79,9432af9ec67bd69d61b9e3458f8da00ef1e8bc22
7c01edf8314c9321857c76ec02e6833139c68f85,e09304f67163e4419ecee27440712da5e09e8451,0730e86c9db81917c48711b7f00c1dd503d1ac91
4427392d56d0cc33d961a9af0df1454d9d95e6be,d842d822ff3679bb77dac51e9f147d85a25ef5cf,8e45bb133dda3e4417c9427f1cc2c11739447b38
4664e510e64bd76fa3700d739204e12a72bf5f5e,fecd25bac187d7df0846f58ab719fa2aafede2bd,665b019ef3b1f43c4bef68237a604e2af1487317
da6c0e919b9846586a59ccfb77a698b2093b3b80,e749c81040070d3e8cb0c070e6e63f2f9b54fef4,e219b24aec902218ad27678a06d18359f10889c5
4648f967bdb769a954cdce0cf995a45d9aafdc55,7c443001362afde8da7686d318ff4d96c945394c,79b240ec8165084058d553693e696819c7732f1a
b2f5f6ac7d3527806868807d95621861b3a0247d,e237da95d2b16fe25ef196674215cb341b983188,4b757dd360796cdfd6ee412ddca5e806ef4159ee
671a36c823fcc87d2bd867a644bb50aeac68dcb2,0c939ac6c6e5ec83962f636cec7c98ab93199759,d35a2f53e770df0a1b7a5c5dc07264997e7a4f35
9b2726fe316a385ee349cdec688b79771f252f21,fa384956d60c96d19c3c6ef891f3ce0936b491f6,b2dd980329175ae2c9a308034893c06d6b9592cd
831a46eb2f20a1649fc30fe31bd5eb0a0b8998e6,f85aa24ad0f75a4a32c03ea62503d4cf2901ac2c,a70e4ed9be34661a2ac97994e99899fea47da7e7
553681007535fa3d8397aaa9c296f087808d69c6,fd72ed8c5691877125886042ad5da7e9cd33f9f6,83c9b17ec5aa3644201b414cf72c3166fd2f1930
e20466ffd120ca16ddecada5f822b25f0f206b6c,2bc965ee280146dd77ef7a968776c8759a0f7bc3,5a32b7159e3110c291c8ebeaaa641d3c61bce92a
59ab80bbb06eada221101354f6572aaa6dac8fa9,251ca6b6582660db76aa087a996020bef7bafd5c,32c1f78dc194610895ea173ae48fc2d96192f44e
4340d03ba9284c1388dbbd6bebe9284bb9f5ef4c,924c917276b094964f31f72a3a9cd01d38c7255c,ab3a10eaedf10ff086f89f5e7c940b86a93e130f
55d3d1447cbc07c98dedeff63d44ce1e4364abb6,b9098d8c5fb0762955acee79c0348d375558d44d,d86e726e87e279ea5c73e9c8d04c5f16e509f99a
698e16a12d13e20f468ad022453b708f4bfeeb78,70591f6449a75f084d5ebe630e4597495abe31d6,51035eb0f48892838ab40705676d4cefbb0336db
d1dbbc0a35aca0bcf45bdac1727808f2341b4775,4ac20ba523b5d11826b0f2c5d9e77861d2e63d27,2ef405b3e577461668de1e776cb07aba7ee5342f
0df9da502b666cddf8e5a4a8762202f777b20eec,2679972f3822ad5301d73f20c9da79ad0b27e208,b4b4896f7fc2b0f61a920dbfe3e220d8358a1a6e
4200ebd748aaf9bf82357212f6c2286649298509,aaf0bf7e191b8abfe6cbf4540de096d4e5234b7b,aeef060a0ba3bdbad60f1597f66358de1591e03d
0ebb98da7bc60af4daaec6fcf08d6cf7eaee6620,c433b740e445095ee93b3c8cda5eb494755df256,783436f2a12e9860c28c5f5ca2f76182bfcfee29
39ac8a79233b885785148b3f4a2fcc1547dcf599,2b9455e262e7e7f7333180268dac1cb0263b4143,ce134abe46a0a22a91dceee69f6b2996a3959bde
7a19bc012a29b05540b958e90bf387c21c143397,373ebbcf41478383382db9db4b0fee61d649db9a,d91be468dadc5cf2c66efb2596ba4f45d31dc80b
e6d140df80b76227f76f632da148795fb696753f,1f6ac0609e416b083e8e3431263501dd729434fa,09417140dee6b84871b1d193457613b8258aad68
c515d4502644f9aeafd447169e848196a17f9083,263e7e1de1f5b93c9b06ae448faba3e32fcc4f6d,f0b2d4a4cab1f52c8d03cec742da524be80ebd6e
97fde501012bb27041b27a7153b4381a0784552d,c7290bfb78ae1802361d1efd937fbed9d4f4cf82,b5bccf7a77fa90e095eedb24b57b9ef1af768c45
922457e5b58d76a13ff706f9220d9d6350631930,ad50adf5f329454329b5bac372c7b5091c620edf,860a2d01455925f60eb3f14a0289f2d47a22f72d
b5e20033924651f3481c3c223409af31a68e751b,b58469a7bd20259b4e6ecbded940cc3a4593bee7,07a2c6b37e194371572172e72e821163a0266447
e33f720fa5dc519ca19b936aaae9578cec74187c,c74c4ad9ada5fd217f40663fe65820b3136e6c4f,58df41dcf09036df5e244a2781b93f1529c20bd8
5e641960ac0ee1946d419175aa4594d68b0a66fb,98f6c64f826f0cacbd817d84e920c194a33ffcfb,b3a8fd009a8653c759f57549db0926e5b6af0c8c
b67e6ed75e558f7e7fa90b74c0ea7b2130ab3e07,be1fedb2ec90082a6393c6ee2998ea3a8db4ac28,1547f28a4001e3d405294bee87be5c889c87b1de
ef5c0a4ba85c12edfdfcf395c7317c85d34e6d4e,2f3c0bc8bf96ab70c031af16754bbdfff8fef1f0,25e955b6e4d407fbd87c0c743fb6201997643455
b09cdf35a55c30a7b4174868f2145eb4fe54b8d0,1068015c4da99af9466ccf7c4db1d5c8b8bc2780,480200a708885c2d63270a1314808ca0668a65e1
0f2248f923dc1cd790a9588b64d0a2dcffcf3560,21276413ea4f5044fb183efee1b78e303fbc0715,8b816782c3a6a06e4c30b61f89c618fbf384e5ca
859b100da682797de580abc1988b3103751a0a10,4652593a8c13f551efd3313da8616d7ca996d3a8,2cd92ee792e46297dc982a8990638cfcf0244bd1
328e60c15536be8fe559c9bf4b8f3eaea1370f38,e05a618483e8111d531a8f8dbe71988754c5d143,30c06d66c3c30adfee4d061a0902dc79924cd7c0
5aeaf398cd6ca30c3a0ea01fb78632eebc6dbe81,16d8d466919c531acaca0afaf1bab803cbf64c88,db7abc11d679d11bc1dab883a4b21b4c023be2ab
ec3ed04b73a1a8999a5683ad708f92cc823cd33b,36e9e39bcaa5c5175d96b4e7141126b9ec75384c,166a24ae7748c6a5f724325950c7533a25597b1f
f7edf0355ae2f2c1c538c24082048ff5afb5e574,61bf79c0ace37a74fa7ef47ed95577184175f9dd,8c5a48da2bb48162c53380d92d3cc192ee3271da
9792ef566ffa8fd34a18ad56b82176bb9c59c9f2,e0aed719edc7d2c7bcdea2dc35b1d978093d4e63,310069221a259dcc21e1ed90a58193716b8e39c3
e1478e27b3474c802494c2260b82c63b7376c115,04a31f8be27c7136b81319e0f2c3b4fc170bd3b7,36e65b34645b0b06770d401fb047cc5cd169b78e
d3a0a2dddfcbe3d8036e6f3f32e79488af221363,6ba102ee575ca97764117d05c580e30385438b52,1ef148148845ac920b73d8c32d836ca2130a4595
b20f968454f2c803485916fec7d5b4df4d52064d,4b5c6ba3fc0a23b340efae4ac53bccb72c26da92,1a57a65c5fe1a17f8b1d447051ff18559fdefb93
eb5c61281cbbee572ce4fbc0f4ad7adbf678dc78,f0cecf536700060b56eb12c7c8db20ec6e839428,dc5c99be6db706536ef07f18a4d06da831b6e2f5
cafaa9f5b805627f3ccd22ae9fd5202625152f8d,6314d69c400ff08dfe231a1a67e85e9185e2e819,547fa426c7f399f60cc70a06c7f4d1449c6a9634
754c40cdb0175f35f8e1b61472c14d424188918d,0785652b55ab72528d0514b2cf569be75fe641a0,a74a4aca030af59d0e76d8b0455916bbc1917e99
065ddfd8d434ff901b14c71b1ba5eaf095473a3b,f65994ddcb5ebe7e5d9122477ea2cd1e6cfc2cb8,f8f54dcbcfa27eafd4fa8593601c692e1bb1a13e
548e91f104a22e37552632fcfb43a612e50fe18b,c07da2a6546c72cda73c151a064e7508c47a63a6,84a852bc1368345c77cd1804aa60a630af3a27fc
b1151ef4ead1548855dbbcdb65bbd2c5c1250e40,425ef662cc54e3293ef63bab37cdff44b29a23a6,62236ec2bb058143ae3465884cb20f0856482f76
43538416e37d26d8bea7b2fb2bada8c52b24b236,b611c0011d4b874fa5cabb48799ac4a879d66e62,1a65b058b3845a129bd6c35a047e94218b5a0f0a
6c4d218b8d1c00cec55f889ab5fab9639a8159fe,b0852b70c613024ba1558036b3fc50fa8012fe04,bd1da8ffb7240bee2f5ab4055c94dffc48c30290
da65fc54a62b73a8f937fdb1036d2cc736982fbd,9bc294a5ed2ba951f6cc331ec28932c76355a44c,21e13f0c2c71f896dabfb3190144e10146e281eb
d6825a35612f7df856097fc778a74d3cbd88a729,4cae231a521302a6356875b1d2268323067a321d,f672d4cccf83d80351f5353a80270b55b6d74eb4
bbecb015c9c841c77d38d8499d26f4fa6a2a27b1,cc81e56eb22b94c0525dcd745aacc42b7f04ae55,835375e7e06ad42a02640b6a48a1bcc86c4e39bb
23875bd8c47e3cfcd9fc287781c9ff95870c7fbd,7afde9fe77b9f63131f5bc9ddfe1eec55416031d,eba0624535cc504fcaf367055cd3adeab56097a4
51b9f31f7cecef028afa71252926888ca9ea42b7,dc0e6f4aa83c8ee516b6b27104947a23fc834f48,927020d981031267e392273cf672c1bca8b5f6fd
e7b6a08eae73effb64efa5cae6025a72d01d7026,67ea121250f8d89f5d26c26088554cf4c9ca4e6a,32a19eb5b358499282ab50300ebee96114a613ac
f579f6dba5525abfbe88101f52bdf676d5b3a32c,f971398f4700e3847a500805ade5b34e4027882d,48fe8e6208ac91446b65d3a4260413eeccf7cc90
5e7bc906e5b4ca4e4ea05ea8add74e756de40ab8,ee5903fe3e57b68e4ceb3462eab02b31eb0d1fb7,9849de984bb974c4e253f134410fe5b52c28e1fd
d79db82ca2ebdf6a89396c6f73efb39f566ed83b,317b01db6528a6e0e2cff27caca9688a4ddc9373,9d85249ee5454a2dfa037edfab9e9ea29fa135e1
6008dba0f71e1e690c10751794dd442136996143,d2926867d688aec3b5fba8df1dfc09e64610bc3c,5646d14a3c5b7161d4d1c47f45d3ec2f2a8fc854
4e1c9aa1dffeb368e82d0376eeadc3c7e7630956,f372eb8a33e269d3ebb857703c4861bc7e62a1ab,4faba3dd5d7b2c49c80422a117d9e87c5fdc9162
992532d5657f135fb597b6e164fcf39186a8296b,5cf2fac78cfccd72dd2ed6f6dbcf480edc680f46,105382b8a17691d31c3991ec127fb2ac391e305a
fb04659eb956e92b7f0d722c3f3c4403c4cc99df,6f526e83a4d83f9a4158863a156ef06b5428e5bb,95993ea7a4949af99f8987912788dffe382ea957
5ffdfdd04ff1a060e5ace0958c39d61ab5ffe1b3,b49d2f689f23e5e04d8d963cec7569799821830b,0c00e3ae132268798ad2574b38b71f50b1b7c4f4
2ec7817ad4c6f72be0ce69af53ad43ce890ee98a,c8cb48ed7393e5b4b794c9052db34d6478320eab,7d0ef337668af544e9712b025c75beed6f28e29d
4aaf65e9f849a8771046f8e2cdc68de851e4422e,0610d691b6ba50c6596ddaa3906503bda2771b5f,08b7d2ffdb662073c748512c3b5a60bc33d42119
5462dd388ba79274fc7f0dcd1bf9018966842487,4ee4e9ae1edc970498641c1bd864fa58f968de23,ff9aa15143dc4520453a4f35c4aeaff57776f01e
0dea63ab081bfc42541d6513f1f11bc25a126fb5,51249b103a8296dc7429981647bfbffc5ee52f4a,cca0c2e11132805adabe526c4e7dc91d0968c31e
b1f122ffadcc952a67cfd4de2afc72c99e080722,9bcb1b6f2104572fdd1a49dd08b3a729562c79df,de46b06f27cbd94134c533cd2e8016d340fda765
ee3fb5544246a4f3f5f1cada28f38798ffea5440,cd1251bf00fd0a3891feb0611bb4427fbbfcc8ed,37b3a88fa0b455b8e3084b66bb395f3f6510b873
d659ca7427cc2bc71fb26275b6a2e5d2fca54c5a,d47fa4cf1b94f0e7dfb8e826db552ac2bed57c65,470e3b94489c95b9ed86fe299771e50d801c62ea
e1509e1c6d287b826ff8968650bcb514cc4730c9,9d55e3aa0ed0711c8695927b1469565437319de5,d8682f36b99b3da55df517bd99eb75855d85b999
67df8802b1c513faad634e90893c690477f612e2,290c597878560282b24831336bfe41b31a464ab0,ca8bed443fdb37492837382e1415f866c8bd88e9
6548dd02119e46570611e64d5b9038d405a00fd6,f6353540426267c8a192124da5fa5fe83a8d7724,8a836ccafcee73fbb0cfc57e4c7b6674d93fc398
0b0033f53c759ac7c03578873bb8cb1848d8570d,1d72eeb2cfb4c82188138ec3b703b09937c2bc9e,5745635a713dda23ed3761de15d076d18c6143f2
1a5ca1e4bbf3022a549420a8bdf0d67ac0f52c05,a70129f39436ccf9fec1780aca4802ef0ef8a74a,b274091fe8d50ff6d490cff92b82f43b06f77bef
45d8ffe13dcb4dc2eb46e8977e145406641d8322,53cbfe3f85f70d0f8225d1e6432b08504e9e4645,d53ea44fe42c328070b800cb51b0ea1b754357d4
a06068b4f175a724b45b2322c7d92b947605e526,4c7d6b11607cf86e541347e5bccc5ab29c56074b,e3e1285c5d450a34766320e32a0b6387126503f8
095ff0d96a57d3d49a984d6a20f6c0024a36fd4a,6724e3dec8f871c0b718391e6c28a868d876e9f9,5c5d590abbca26edf633815ba771301517ea1cbd
f9fbbd4a88b447e5da34e624a8b0e07e0bc38571,71cc17d60d592700030b7d56624c205ac3720538,6870e68f4e9320f9b1775206e1c1183db646ad04
98563dd06904e1fdf03a0efab4ce75107e4e09f1,98d8830eb79bbc3d67ea9fc3a852e6088d014502,18f2553e8e9440a7bc95bfb1dcaf272fa7095f90
5f215e812667de34f93c9170941eb396cc4b6a0f,aa516f34d06cfbcb0ef0213e73f698c7f9589dc7,0cb047230fd1dca6846c910d5a2b94a4822384b5
833c668e29b7f3207eb1d2f94fa8ea80cde73b2e,4a81f13709943f3959be282269e9a8f01c491046,f3311d95767f33d017f44ed67535697a02edadbd
6608fe63414fe51c057dde1beaada8584a1d28fd,7a4dbdc5aa5c26e363545ceefec120c986de73f2,90685b3b5de1f481a9b0338d14f5fc3d967b260e
b6a686930a1df8012aaeec7cb2fd84d9bfbf9219,b790ea1a861860f58e431787fd36dc1e008f470d,e8b60753118217ddb880db1f931ffe4c6f30b1c5
37cd24f65aec7b436c306c60adc81efe7c1a950a,63e26059288ba398064d7ebba0d9c3243841fb9b,32b217bcd7e9940a4fcbdfe244e4f7cb9ade4c96
d030c85f12be754349ef74282fb9a7ab597fa41d,994ebf55ecc59d97605335edf443868b8ce4c3ae,5381fb2a4f3f6af3daecfe95a1e130844854c8cf
5d72473ca10fb30d4eae79087a9f6c2cfefdb4a1,41be042a28b88bb2e765586dd1fb5e0e5c082ba6,cae21c4410a8db8e89446a57291f998626e574cf
2c1fa9e94f8bee6aafac56c0964004cb3f9ee864,548a07c0dab9d6d1ed9139260b88007f2e1b83df,a86f4728a91793cb6116e13bb270c42b30caa59c
04af66679532741d82157d80c16afa84b3506f25,7fac24bfe5a8fcc9ca571849514a04ff8079201b,b96bd62d6cefe06baf877f35c8628c654855d9eb
1c9dc63e3b495104e6134e19306b98b5937928f9,acc3219aad24f298c8e930fb315d9c893790168c,e6114a573d60a14fadde963c9455387b74d4bdd6
d87edcd4be5681177f219d581edec148432e6843,9844fa09490e23a221affbb81cabccc445918af8,e1b6a8f192948f34a704cee421dd9086bd6ddd31
38fd88f0017894f9b69f10a384063938ac704ef0,285ba1cc6f344d9c86301aeccdc18ab77d31a2fd,dbf18e9d294c554ff07b2a2ab074533ae2dcfe02
0e30f6c97c02479a12faaa327c2fe476ca219b41,ea76a1f5e0807d7a3c06ecd300397651bbe45eaa,9bff60e270524d662bc80745ef2b916aee91678d
6b0942166c48136c759c66d8570daad296f2f45c,7b2b51e6f36b8a9d7074266c2dd1d894e6834b00,ed1893bd8fec07f964e2339ec6ab9255b0227ae2
1f035adf9f63f3b63bf5f6f495b59d39bf7fc36c,3efd82b68510341dbc53270a793069689b1ac152,e5a64ee5216b24aa1a58466e72c9400a41c489eb
a6af56cc0d15edf8464a0b07943fa1aff775a0a1,84a415897956e4787e6c71b7e555a92e8a193ed3,0420b033390aa01745306fb25f2b804f2f52c4fd
0167471b9142f35903f201f11a62db7f757f24c7,cc60175e6732c84406a9ce8fa26c1a9100b27edd,e706df5cec6a39b3c22e5499ffa11527c0fa9fa2
d12e8ddd506052db3c04cbc5074ca7f3b3dd4f2e,075985568b46759df3cf96ec6cd08f52037bedf9,2e6d9cc2ec86194f19d520e2899ea4197a44b4d3
edae43588c523da042ad915e06953b48366da47d,9cbd77b05960f368ddcaf5e487a113ef8a61646a,694a360d4cb892ca4c5fd1009994e0c8d0ef8960
9af8d099febb6e14bdca626f0d1283d27b5aecb0,d1242ad4e7a612b2bd90f24c04ca3f7dd8a2f807,0af3f2a903aafdf301d67835b15f7177b3543ee1
d67f878722b78f4d78ac123e351bc74a20a24940,0b176e43f7a7b881f8957c27be9c1d71c58fb2d5,0b84ccd55546d56e7ce0e67ff0928423acab34f1
bfab984080e734cbf53bdd2bf83c0cbf8b430d38,329442eb27675becfad560fec496b72c989ea042,9e54493696ed8f735a774c1b183b4f689d06fbd8
b2a010de7fd9817c7d8149920260c9d1ec04b185,41c42af1586a1548bb6f5ff0ccb9037e7ff67980,f061541bad8a21e3e119505bd1a8ec71200f783a
38f4c3ac9c9bebd60d098da5b39ca5bb6a11dd53,8ef1499404dc4d05b5ae1584c3674aa172a6899e,129d8fd074bcf19b1040ce48abaf230db056486c
ba843d4598b119cf892ae2112a550dcec882ed5d,41fa38d2173523460111fe528b745f1b80defbd1,54f71270484d103ddba65cd7613f1efc724a4b1e
23217f4ac9df2a8a6d2ed0a496cf1294c8a115c7,8c1e70dc29dda985092c7e55016549b969df6125,79eee75aa0aafa7a7cc51f1a79ed236aa44033ea
f3a443f99e78c74cb3606e03534282b7dc1ffea1,0f337a9a2ca958d9d5587c33ececc77302d8935f,f1301a14e172383a02c6a061976de6bbb67ab915
8de37f69b9b205ceab0777338189aa37b1500fc6,b0b60431ad2a06162e25ad380f600dc9d74bf2cd,f6ef9f2aa365331d1c9b44f2ee02dd769a389da2
69611bba2da4834fb190bf1b9fb36cf17f02a086,6a82ca8a1e431a1358f12c08b60ae211a6d13ffc,820f0b290703e98d723f89fae25d4b3d56fc49cc
21fe99bfccf56bdb4c765b5d0dd5c4629c9eca92,1fa7d4f92ad5d55483c3ab609279783ab6e16431,e1d6a355b532f0a7ff613a3aa1554342ebb20068
0fed8ffe7cbc6e254c33d1841b51b3627349056e,4f1f0d93a5022b0f9365f0c1891d5c3d2c3fb376,2b837452110ee09961ea737c0a7050fb88f18503
0d2297c9ca511d68e4fd0a1dc25941ce0aefc1c3,f71871e60d248f1127e033061d6470d4fac3f6b2,1f12737bebcd13ecc1aa3531d1aae1bdabe22950
436c3049b90197acb537a2233771bc1518fd7a37,a45253c7acbe22cbf2ed3f7c43637527623b2a8d,688e20f7a5306b29e78971cdbe1ae77d964ca191
1d5a31ed4187c9c88b0441f28ce1573b1b454862,e059f7829b4f7ff19aa2d4f7b375d865a549225c,e0daa4fe846cbf0bb7c0a825db0e14dec64ab41b
6a259624da012c2e8d82dbd135f4661ca60a9c14,a5b79cc7d7b8894a20f6aa612b418af4a482fa3a,6ed0a74f54327e07f33e66ddcc4fb5eb8d808dd8
e9026b2a1c027eb84fcf708d9d2aa9808409965e,a291347d98d47e317d6ebabbad1d2a99a964e28c,c75982a639166ff56c8f117cc0752cd737a59cbf
c4c71d362c2d4b12f15206af9dd4496558f706f1,8030e218e1dae0f2707f76ec9d3af7aab7e4a9a3,ed65f26e98ddb3e358a0b361f02e50eb8b907214
d27916e006ba63d3046fdbdefbc0f1e2eedcfe77,b383013bfbaaee78de780ea1e04c78efa9f80b73,0bbd64b9dedfc12013248feaa8179452b4415d59
63c4bc29baffd173c2322fe7ea6c2e35f91ff53d,4dc1afa83e670391fc238f00789d24cb343fd805,f9608e850692595aa8393cb5d684f681081ee618
c21beefbb2a1a26f84bb1776829bd4cfd3d6e58c,8c3758f976b720e56fa03fad4a65207d1bc2eedd,7ce80bac7d99d795dca56d27ef2833d171a5e5dc
26a547a11abe2dc30ffcae6d3a60a4e06b3ce649,b079f27ecc4910c18da4e8ecb6eb402d616bfae9,97bf2a5beb86eae46a84334a533ec1450303c22c
46999f1f68dda09365050bd55a663c8bc4d90d44,9301931bcc9c2f1c2f5f6ae116ea5ca6b2d78cf0,8797966db30c975cc81b6673baaff62bb40694d8
d7da4c90a0574dd9e87b131a56780787fb4c3a66,f96357e27babf617ca7e55270b28c0b7239c2ed7,1961de4ce0a3ad344e6b72aceae2719ac5f8f748
61be1e67205725559f394d8921c0b014a4239a9f,adc93a26d5db06ff033768f8b9a88e5fa49aee0f,43e88d28416201707d4705fc86053dcfbc707c09
cb019e175744db493ace616177b9a418c39e6981,78a870548c9ad778a32703ef446a80eb9eeb10fe,562410b89b67e8683d96e0375ee07e06a73a81d6
19acce7c8ac271167530edc41067ce1bfc9247de,956db59bc21a423d462a38c0a8398ebd1a5f3f5d,96e2242e289086e2164e5bf812e451a78776deda
6eb2be4bb7416a36b7ab6fef2ab646a49d5dabfc,07bcb62d5e3589d1bc026d1d324d2fd307e128d5,9d94f4cd625836824210f22696c42c3d4a76c8bc
cafe1e33916a15e44f751aa7a6c72d7a22453414,0e28d9a85ee18c1ed14e3bfeee65995b0a30898c,a4499f5a0b21900d175f94c5b24cd616b731eefa
682a643766127fdf2ce8011a66be25bf07a19244,17bb41f2ea3a2aee5df2562063b58f276e5bd13f,6debe5591a8c4303e8c39f19cfcec0258ee845c2
0a3b8df711858debf9e43e1469618e85156aeddf,ca1511b83c836da5e1285ce812f254ea1a0a3a7f,ccbebd6463ceb5933802a48cf411bb86794ca219
d29cc470f6f3c1a9cb05608279c55e62b242e2ab,2e4e6f5b4e45510e3942052a9d77c8a86fa5fceb,6c9078a4a763d55a89a968b53ebdc693b96dd630
743289359b570da1f6101411d7b48e99126758f7,b32912d16de8c0bae711f2e4949a946194be81ae,8977b49bb0a03625927a84ea6d08dc4a1b315ee2
bcef50a51a8b3c58c618674fb2947981f35df50d,2acf7bd1b83364ae89e8f14813303b6eb94fcd9f,b225ba27781e00738f46adeabaa7c948096fd32d
5c9a86794da0cac9ff1ee47b02c7628accba7a89,c4d4beec8dd2f0b9080439859d2490554e83c179,1a52b14a70e115ae9caf4bcc9cd48d61f80eba8f
466f50d173335ea5f0b524ff1f033227e2c5255a,f01bf2e0049084198f670ebae0f784b363c67aef,c933b20c29d25a4ea9b2b0a930aa92242db98501
51c5bb8bdbdbc6ec7587b6bcd7dc8142d2fd98ed,7cdcf039102a65e0b045029016ee77e132fd8942,0b01378398030ec72a05d6d4b6ab71b9f2d2fd23
0a088a319ba7d8d9827b0797b629d727ae8954f3,af970e5be23b90334b1c81335e1cfd603706643d,7b5b41642dd44b6c6d3e7c3cab84aeecab1eb5df
6f223a163459b8d9e5b3a227cdd0d088efe4e83a,714d421ad3a6ce0150e7ef1d01b7805c0ae5df39,b7f23d3a7eb4d18bb5784a5dd30d558f376242a6
dbf7ba4721f8336139e84a99c74b89025edc55c3,5414a589b8125f8ce0720bfcc8f70aa13a8becb3,02d82debaf04d6fd897381b7c3f7a5ade66dc013
54b4c114cb1dd08ab86fe6d6cf9c5f208224179d,e0064ab03f867b2598a441e8e6a295433f908ef2,30c1d10a91da04fcfd68d839052213dac5bea91f
d7f38784b27482d6ed8a137a249c2dde7cb02089,15d6f3808f41c4c83be6e2b8c56f15c5c8a8fa3b,b0879f9abb3df6562644b18cf758a402a552c7fb
0c79db7ee643fe80026b114ac297df443c829720,425b12b1368c93b63170a93624cf0891758d2c02,f1cbc8b4005f2cfd6c83552599e4064a93ff9f49
263ea6f463148053b1b20491cba94649a8f6c0dc,79a74064088f3f3bae71df203ff2697ee7de1b2b,74367b930cc9c3d103770a9ae5d04bedaca26813
30c1523d91af9e6f355a887ed476d4c919762bea,621ca7d416a5e221260d10f39a9cfb8a1f04f832,e91acbc569fe463a28e5be9fbcc57d9ffe690e54
5ba5e4fb4e22824372ef3e61d79bb18aafff4d59,b1343eca01212c5e2bd227587a4a173698d51f9f,8470ed075de657428919e85417ed11980bdc7e5d
4801ddaf0a68852a9b59eeab34224a8aaec87bbe,4d07da193fdb2601de32e9b42a096a0638efab94,3818722b232817d24cc013b64da9b25d4bb312e3
30adda92214ac984d22e908ac3719f189f38e8f4,a6ef71473a20edb204e6e1f91ce735257ee813bb,fe1f3041acccbfa7d579a914899fd2ebcba04102
a067283bcebc6815d9723aa7e52c4fbfb2cbb734,6a934513eaf3660d2476c0aaa0a9b8ef5270835c,f5bf774d358de32514592eca609839e58d2693fa
5be2acb757d337075a72f6d1d60e8b5314b74659,a9b5a7df2d73869479ec5dd20f40defb080132c4,c19dcab3f57c8eacd929f9b7d60960aca51ddb89
1ceaa02f416697dfc369ba245e9875fd6086a7b5,66db4dfe9427b0a9a63ffdfecae77a720aa700a9,29bae9fb3c4931f9bdf77abda736568f4ec9266c
b2509e2f44989fdcabc25a6fa3a44de9bafef118,d766dbca4e13dbd9c55abb2253718b7189208ffc,d78ca793b72df14271ff7eb37c6a59bb27b11cd9
34855a61d3847439c2564c5d1fe1d182c1a2c5e5,18492a41794a3062c76bdb9fd0b5d0f16a96641e,cfcba5038565af140d5b1d4ad45db9a78904e273
444b7254449b307e1129ba5d8527eb7dc850ff02,3cbd937a8d40e5ce27ee4f79e969c1a7be00e202,5ce613e4dd71602e09c9e8f95403a66e745710ed
2f36ba10f5c0a1a17c444bfd40ce5c64bbda2e99,8531a81aab8049481ec4d77939b0e90284ea003a,b4d04891480b29aca310ba2ab7b2ace3c0e3345d
f60a88a38dbac9effe54bcf2f9fd105fb6f1c64a,5e44cfa4865111e4d802fbc2e22f1b0556c1d7eb,cbb3225e6af004eca0e9b4cb504183e58dc9e32e
8c8180d3716f930dc8ed5f669e9010c7f5bdd5b2,c68a8b77c4b9aff8b5a344a25c50a1a4eb830dd6,03e21a8ca4b813c114a4f4404694c53ffb642140
5d058a189ad8df6eb0d54ff561a04cb85309a449,4ad6636f0565c1484b8e27b53a26c870dbbdd5eb,12bfa69736f5990d46b7c056171e3e77aa115f66
3762a704238d0923c4d5bd2ebcb32a286b22e3a9,3299b73099f428c975eb130104c7c690475f72d2,ce8a4b2fc0d389fff326c6cd6037339801fa5619
744c7c8d28a06497137d31d42e93d35b7d2fd1ad,e68ab1a7b272f8fff954c23c310f209fe7ac3e87,94141934bce5329435fde57308d53a9e5194f11c
2995772a029602afd1b5afeb0818d72166c90281,da58058722f844d802afe0e469da52f87f64a8ae,a3ae828b657d08c5f832796d81b22663c91ba2a3
ba6a170292c5f3d36cdfa499876ccb97d6c4d1de,eb4ece98b5bce439d8a0a3ec156a1f7b31803ed7,97560f909c5e598c1622c102c13e844146698a8b
0d4474e11c4af26dbb3e8070560fa1f09a38d018,d6ff2d6eb37eae0da1e9f56c79fd32f9bdb5a378,d6d1db2bfb32aeeec7895b6eecb7773de09089ed
4a1af9eb6946920b2b8aa8d44e460e4d8883b910,1c9d59510c00ba88f1c59389aa4d23cf2ee103f3,03eb9d0c0ac89969bab0b57e803e5ae6fc3a097a
aeb3ea06d49d0051a0932dd0dae542d9a8712c54,915d7a325394f0de7a89a9c0908112f808c6631f,b64c6c4c5e10621069294d461e60de60cc9c7de0
0ecd8cf37eebfbcfdb5143b81e0b5d2c5f185558,ec2528d868f56d8ca3258dac08e59c9b5e133c6c,836a08bfe1ebab81a33a54908d49bd7e236a658c
0f9dfa29ac686c36337afd2372311b6077776f08,4bf58bb2d0ff8c2461f9576b633dd52dd3f92ab8,c2b8089bf4d890729f7d9e6c8d9330a92324e79b
97bfcb8bf2c79831ac8bc616c157e156726ce860,843cc4b7966b612f7649c5a25c7b6a1d51354f7c,fb506b5c02a5eb6b40a7ee28c5d6c5e077bc9140
e255eda4f5891e6fc305427208e70018f171180f,659d94ed3f830050e449b77618b00888e83499aa,ab6a6416c4829fbf205b889377e074b5f9fbc4eb
e23c96dae2335d363926f116001be92fac44e45f,d2f11d1d2e94fa39f6675b10d2348e950425e540,9d8624b6b5eb45939d52c3dc7cf88d74ee224fb8
e0cdb3743511994b97b5d3769050032717ce45d1,f3aa0e27a48c39ad5a912e332ba7e972690fcdd6,32eb50d64d288e13747da602013ef7d80dd129aa
a502921481bc6186b79662cbc21401590978d9fd,197818631a83167df347979eaa01a64efd1c33ab,4be5e6933adbf5e758978cfa934ea5106ad6d852
4697a21761ff7af670abb6e2102689d6adbbf242,b0174d2cae859b1f599595ab9abc56179ccdaa41,ce61e52266180faf9cec3d8497f5ee25ba0478b3
1ecf9a6ef9b70dd0ee38f8165087a662ca46f03b,e833e5b7c6c8aa860915169158ce989a0c3dd119,67dbb5ad94cd900a4e8e0e8f185e95025c008c70
9c2a042eb80df402d3f343ff1fa467e22b38b5b7,333dede76d45f9479725d10de86cd9c9819bc488,b08c41c42718a14470644e12e3d4e1d3f42b7821
b79fab32661f06caee3e11154ead1d6ceab57b00,3258cf1bba05ca3d641d58a8627121104fe1e43b,975e5d04981bf090971ff5c8bddae29cfa1889d7
17f0bc1ae18b5dc17525fced7263078f38e5e6d8,54ad4b25c61d9cdb8b61b447495ba330316ed94c,30c631b6fad1b1dbcc4840afc1f20c3bcc2cf4a3
9d6b66c9e4d5b63eefbf7447653ce9e6478c8958,5bf33deb9d6e7a8105c98a6e5ddd4fe80611c02a,f7886ef2a8e68e7c881ecbd4caa80a75a2ace59b
947c30e9f10ca6aac25e25a1fe2c5286a1135714,738f0a8c839f8a8fff1a69f33ef27963796c3402,7dd98c4c5bc105ee0c1e42baa48a5d93e8112aec
701904fe85297673699f35014d1cbbaca113e9bf,9ed80546cffebf75be9f8e267eba434301c0b052,7c09be1b5c3cdb33069312259500ce50148341fd
8198d88c142ce719f462ad6c732efe303d5a2980,0932e34a71c9ccb5a38a3ec2b9546ed9e2b5b68b,4bb876ed989bb27a5488242915a7f26e5f041daa
56f53ed323d9b8d3ad8bd757ff8216e411b3a95f,fdd8a0537ad58569d073fcb6ec5d649a4519a35f,a73dda69b40c711783b9af46109c5f1a7072ff60
4832338c532c0924315e7d09283eba043566d93c,a35946a635a9a696846646af3b1e3ac02dba4bd3,af2846286502a30fde4e0a22c773ebcd17b7f2bb
fb577a9175032d9c111324b4e890789b7a786943,6cd4fa85b5c73b53e8fa7bbd108abbe30f075692,d0ad23f0ba036df5417506728f1cce50bb5be87f
2aeddc8041f494f0961f6f68517aa39b60699755,876d486e596f1d7f2b45461fd77c347f8982407f,b68203a4aef5aa6f4ea8842cafff25f2135a0994
817418ef1d89e54244614684c14a6b610d514e64,c611adf3d8ed51d4a10b4cbc227232b16d12105b,6a0993de33101bc2384ced2d046514d8ed266d32
8cd0f2bbf8175cfe967cdbe7fd4ac1567f050fa1,582cab6342fec04fa639c2621944b6b8664e02c5,c44c572d02398c52cb6e0242ca6c85f92d5db4cf
4611060e994d541eaf62d2248da99be8662af21c,76099bf30e3b693953af2fb11445f386589fb554,923bddabc8fe1031687b1049b2e39a9f4ad928f7
c8da8b6df400759d7e928d7a50bcaadf2d80ddec,1f8a8dd1602b5ce6ba07fad09d2e6813a4cb3920,6c8e6e2d2acda2bddb8d3c7edd5a63efa5afcb74
9031eb890bf450f9d46929d2d29418295d47208d,a6c86b9d1c706f6d40797c1104736df83fdb45c9,16e24b9ca17a2eaef91c9a074bffad88d846b1d7
5bf217ed536638b5d85d3a2377dcdbcf65fa6c4e,c53e775a0903b9ddc5d65e271eb86d094a051923,0ebe023534e0b830ef59cac58e9b78a6c40afcbe
2a63c7474b53286b72af858282f61c2bc2fa6f9b,91eb56bdfaffb170be11e51f6f72566551141cc9,dd5c25c2bc5377e605b12bd0daf5739eaa371637
b66b156963018f333d755642b7e234224b846e0c,fbd36fe22ef5385116ea09125582bd48c5500432,e552cb81363b3d2e3965c835318e2eb42a98eb73
a618b486d39f3e7b6db8072b51e2e1ca38e5d15c,d53e4030afff7b1a88f1d9e9f3b5e9545076b2c7,98ab19b6eb05e5ead38e54555f944aa0a26bd5c6
2c1ff71e8c0bd2d4ceb05dd5759c46188ebf9dc3,cb4594a1554abd06c6beece8bc1fcd33483d4c1a,789b3614828cfca36125fb7810db43813b96332a
ada0fdf9b375e124b72a2b8cddde447ebe451d52,49c9a1f3230f095cdbe3d88687367bf927389711,4d3f31e168fcf405a1d250e7e28e99b2f373e9b6
ea587ca3ae7810ddbbeb0c06c2989a59c295302c,602bea2a1d1b44e1732207b51cf9754eb2ef1b7f,be04dc238b28e97a8e9d5b1d7a92010c1533bd0f
7edc3bf168bef3b1b590661e9d11467b00b39969,edb3b426aea697596c883b168a5f1a5c0cafedb0,e6b71444729a0a31c375a7b71de41deb65bcc36b
b85b81303dc9968b394496670ad47034ec698c7f,0901f4464b62dc4b9a8395a449abd79229a23af8,5408f4eee64074ec9810a9b8c674370e25d02f5e
03c8ec49ede8833d7e274ab2b3650344ecabfbe0,381e15ff5b2cfa7adbfe0eb5028175e3b2085821,bbc025e3b9c7daa46dceafb5e4d1a2a62f0e9e60
335431fec4b3fc1e64e3d9e1e3e86ca54c7e36ab,ca0f47187e0085a3037c1201409b3cb573d130ac,7348f674ce672f24673bb13ac18452a346b52139
44d614e4be082ea8d060068bc53e6531face79a3,4d975d8a5f65ad009059704de7aa2f5de82a03bc,18f5d5cbf4f04c28ec86467508a09322db404aa6
8b8fa4d3495212afe8c2e82c89a7f36021cec147,980c128724d7239cd40834eae34aa86b9bf24ad7,d0d9a8427a94688624e5b041027d566c34b4c4b2
d57974dde70a9ce1b4555ba20b4bf568fb426450,6737714ca459924d240974160ad8631c45e2d705,972639ee394c9d2f9420db59f56fd1b6ba23aee4
229e50cf057858087d1f5cc5de5c5297ad406f8e,b7d1cba97f3a976f746ebb52736960d155a95fe6,706598dfcd6961cf184816c4f5fd564194159693
d089f213b4838789ee1646c732b7dd14e04e309f,6fe10aafff86e1703bf1ad6ae73912c8bd4b4461,80d35085aed7253f15b5444fa72487d98bb20227
60e27781edc15bfaae690cac9789f3e800640f29,af595389a602100f0b017e638bb8e7e60485d6d3,211db1d6727930170a26045c2b90d34fb8b975d6
0fb946f7d924dfe125b1ba4865534c37258db6e5,e8d90a3042f57403cfb1610cf4aa12461f9b5c34,60ae7aeeb554565d34d350ed75a1bbc931b7e77b
82504a26ddcb45ebb2ec8d5f69abf06b2bf7136f,6b1f77c267ce6ea8dac35fdc01736b29c4d1deba,9170ee0ad3e25dc0356312d5362512dbe280ca79
fc7704a9926dc718681c7d3d3cf6987ebf71fe48,c1493ac46c70318e4c020be278cd6440e83e5d50,e74303e3f9b888813ae55cde8bb4d9ff19fde057
d131af15729fb06ff9852a309ff2888f44cf10f6,35ebd43d395ea214e9f3101394e93b131c23db98,5a2a7deffb5aea041114c3c7e660ec64625df106
35604b0926e836450c921e8140d75058d23a581c,3d580691991f8970f57a808ca1a65f754212fd22,831f00321025aab5387b3f5552d429c4abbd7fdf
dba413d9ac6653335f69a076f1b6aa4da7f10396,635c4c761cc22a6231637679512d99d0ad651693,bdb427b08454cff85dca2fbaccf7249716962845
4ce8bf22b86a63bc8386f421c3b54b6430d06807,b6be686f7fcd0039593730a12dbdb453b86c4949,40e226f137d59945b733d399dcb3aec42d934a51
ef02056859b90020adfedffd1f5098719ff67709,28230592cc659ae7a787a928cf6a6ca7c6bb4f76,6082b1b2f727ca18121640017022cf8f1d363224
bc2af0d6d6a5a0304937bbde98edbd41b06ace6c,16a9651046d485ed998db65ba501aacd4dcd1561,21e28e6095f7f90504f47b9daed885579e3a4e8b
51f3548dc282a8856a54b53255216417631e981f,f9a36d68b0a823dee0490d8f052bf58891e7169a,9d0e1bdcfd17bfe244460ed92d0d9cab4d6d0223
aa8050f30ce7a23f8881de844c07c0f17033409e,f83b04bd8ce65be4fe060f89679c3040ed0c7199,a149686c1c0233d1f8cf3dbf488791b315e07cee
ec8e9de18142a49485452c9abd13158d408877bd,b3afae567b3d321d6ceaad5d543a9097fe0e1890,cdec9590e15174576ae13885158c73add1905ea3
2eaba50b82271998b81b1debe9233c7484869f5b,7ead401881dc584693b1ca1b86ffe7b380378d47,260a89e584099ab624964f948482984084850767
d53f2b4acf86cd05c49380a1f4189e733c93f7e6,e531e4c302150045d867997f2a9b786ef71f9f54,934fea03397fc6c57bea208934275e966e9ac1a9
0c0576cec8c26f0a3e0831d03031e3d0f2555186,cc3fc58d822d80c14bfe5943720789bad46bd542,cfa7f5f77a79f0355b05d639732cb4bb995f8355
5596aaf10ef6a8faedf77e3db8b376467b39e8f2,8737c028337b241f11e11c4c96d588a718d8e2ea,9b77c6264686ce9ec325d0a8d008a69fbd164b38
31446a8fb371c63f9df39094dcfaacab3ab38578,28119a61ca4e1a7d618115eb1cc4422f6ccd2083,349f9ccc14243492ce0d832bac5231d53a52c114
35d9f304b187620e49f6e3af08002a9416cc49be,4ce0b7932a6650cc0cacf218f69cd32c9d0bf756,7f5ff469c6bca408f82706abe621e3b00f36d4f2
cd70bf6444a7f9c75e4952677878b42af1b30752,58d2420c1ea5d26dc0532697e9e0bc5a42aafb45,5d98e7c73d9ae1100b52e5f239b5a059c7e66157
d411be8ad96c8c7fc9b822a4b041fad62305edd4,d2d7b6d0458ad417722f3af642711166ae5585d0,4e3e213652ca07ad7581b0ca4d5d200e147683b3
93fee7a6861a09567ef13f9ec5e342f25f75fff7,0b3e64fdf52971a1e41cbf7778230f53fb5999d5,a35fe4698b65ca0be8f2b5f9113b5394d830d556
7d79b285b04802e5b914e9b64f7c7b8c272158e6,9cc48239f35fa3c922d57195601fbfb5fccca4bc,eec2e10bcf82043c2f7a06da2dabb6ec1409702b
b6062322110791aca2b86f75c694fdf51c782bf7,9ae7eba2478f96b9a999276eb64bd378f96ff281,9d2bacabacff10ba719853ec570142a8950a8ef1
68781abf2d98221d0f7ff3d42a235104324737fc,c2fd1c35249b091d8d32491b21813c7d472e8d81,938ff0e7907a4d0356c964d0fe46f22e0104a89a
c3a6d1ef72dcc3f56348761bc1f145f17de15dc0,29a3773a69f72fcb35ae06d498c6e9e635f69d0f,df32b4c0cd4780f434d72a6bdd89334f238da054
4afa4f43cd9ee458e7079a2df722c31f5ee46696,a5cfd52cabf635484d17f953e4155b466e4d6286,6b3ca128e04d86b3a8aa4ff6e3908107ba95ec62
2a521657cc818759f986196ad14654750f474613,afb01acf78abdf25be91600cbcfd799d0b0cdaa7,64d604d34922713ccef6745f7b5d5c431d1569c9
5ebf96886942fa480fe3d1b45af72a1f1a16661e,ccc3decde33e43ba9cf392c8ffaaaedd1ade38a4,060425cab6117ead6b9f1f3d293314a4b4b016ec
25da45f6661a314a55e35927d658ec9158033bf9,41483b26915c6a4454b2b48a01caf92d35a96eff,a7d755d6f2c64daaec0a0b7b619498f1662ce29e
d735a2a9ec7680c2c3c49452e2fe20baa48f9e38,8896307f1544174cf808cfc1899262fd25b57776,8af23fd95b538407639a55316a42c2c84cddf530
c17b3e43caec0bfe53e54c632e541cb2d4186468,b3cc7f7ac2e97d699823dc3efb112b3be58644db,a2c89e47f8b538909316deba0ec0f6135d775750
82c794ebce4aae1866d6da42cc8508934da3f471,192a4474b6d2bdee94b1a2de4c10884b343b7d6b,2bd50d370e8a8833095d5d3560800d4cfa8f93f1
4fd3922aa4699491d1f70c3a4a9f2ea9aed05c70,901164f6030692ba84a2f4ca2aa1fa916b147740,20744c169fbcc7b219eb375ee19ea145d434d24e
6677b2ffcd6e67e70c1f7a9db24f121bf8771887,69361bd5c16eeae7664cd7b1a9d48d3e64f00d35,f5cec4db7697f7ebd16ef30f80218e5f86186213
dd36542f63e6303a92042d8e14a0b9f7e7ea0d10,20e52d20ba9dd91b35832f1e4630b4470a8585f7,20d72426f9a7086449a98a8139a1e628ad64a88d
4e121f2776b3391cfb17916cbdd11fd66147de77,0f59ace8ee7269af66091b23f211ab38f078baf3,b86563634b2e24969067309eb23fe04ea299f1cf
6755fcf7316aeadaa9439d633068506c92a70676,31ccc6299d02cefc1c72f655231cb9e5e7d4a26e,b8fd9ed87c0490f077359385f1a4f9f4d6e41596
3c3c8c49ae02aafaba8783a76cec68eec1f8cb81,510d4b9a801b4c7acca28cb7eccdb6715e9d0643,0b338549c01fcbd75918b246cbaec3cc8c9bbece
74ec67d5dc60c111c09262a1c5c208d385bf8149,e52d65c8b8952f360db0bc7eb361532556a461ef,73264577658d5dc9410c3ecba6e06df42ce31326
1c33bdce41e2995b4e7c9c8931a0a75f59ff3bdf,ade7add550a2aabef28ca43751b8006f342a2586,668e4386412f22c8121649dce121ebfed80c21d4
7ba39027fd8921ba884fb568e8e01d2058fe8ea4,85b890c2972d292182d8dd0930e27a66d5386fde,9557911c751181fd908c45937634ec3c3e640748
4dafc88b9ad2aff1f1efb3a6af680c44bcd0e21b,749c186cf8c9390eff916341215d8dbc5a987ce0,54cf8960be818f7b15c548f059124ae7bc167559
dd55a351a582dff3195e3213e9a024355903fff6,ed1068a770c0c524b6bafc93c5956f22dc0ece80,2917e9341c00d294497eff158a7530b0088965c6
a6ef35fbca5e1444d408723a54b84ac27cc18b43,42de81a53fc167f2ccd2821d0db0ed8a941e67e7,71b24b8ea753032d6eaf0b4ec8ade5356594d488
6106de4cd6d5ee5e0971ea9d42c57b9310346070,d6ca464b3255d31c9a88df37f565f797e902a42d,10ecc20b5c97b66ad018e2636e9669b4b08f772d
433504407f1be18f6d6a2af0f24f52cc921760a7,4e39873fc92c0a5e6b74d4f4cd35d7c7323a6a73,4edfc9baf6e1f36096ddb1ecd24061993c3640fb
251aad4d52548accfb85414e4b467f9460cb420f,957d20c0bc0529e842b06422afc081cfa3e0b834,1d4f0b9b612a8590b2bb83586555229540b35ffe
1c4899ec5afdd8df173c71434ad5a832d204405f,00776435c6e10c5fdb71dd58ee73bfa99b1ec19d,50b8ef26327bec8cc56683316ead3e0db9253e57
a9a69e3ba98d643c013d08581f87f04c79c10c9e,43db5be21b55db98031b84e95e237b1210793e68,ed1484a87a965142116ffac478172d219e096a60
89de2f4cd9a453dcddd56c88d4abf967b08fb48d,a5da235662d979f1044dbe8e68ae427f503e53e5,3bbdee22d286ae913348f688648ee581e67cc8ac
7d22b9f990fd736824b7e2a6dd58d9b7af5cf5d7,d70f6a86273cdac6b51e85cf174b3c4aa07c9247,c562becf56d7af8ff331c1251e3821fba7f9203b
b0a5cc1603e663eba22ac959fa86787227e345b6,5d3eab7d00376a38db5feed4d6f65b0456d2c4b3,c2b01ef53dd0f3b951588402e9cd316d16136108
e2d01e3adc56ee2b85209cbd84423e7e4e66d92f,c12424f52870d2379d8d949bdfeadf31efd95b5f,a21eb6f30c4474ccf7aa9c4e827ba3959475787d
9245a56fda3806514e3e12d5267782be37a4f9ce,814ad72c7bca2dc7ba4e9132ab312912a59d8135,17c002e6460417e6980fcae2affe6e5bbb00bd6a
31b071a6c802396846dec5e36355e46a5c8df297,f35083915ef010b9041ccbf55a8d925d098e031d,59214c46c30ae4a3af101d7134a18fbcff0b3c10
89152d9440232c4a4386cfd7d52088f75d8656d3,175a512efb5fd5c79cf89c4944c8912a97151f25,fe5a39c822424766b0402fff7c39ca8bde9b4689
671e25e8ff79f3b407d7a81047d794de5b1e281f,5c4007efc3fbdedde42fb3313d603f44ffc23c46,d020bd76677f050d4fb31e30d6eceb7cfb4fbace
0f1dbd77b2bf3a2648b391fd15b775d650abf5e0,396cf575488f7cfa8a16685c9046c18f2f87dcdb,a4d44754db767c985692aaf376accf558058f13c
907f58b2ec9df26770ee6300058b09a9df7ddcb8,1339e59d585698b701c898b6afb69f62d016ea99,18bee8e10b3378bda7f6c23c8fd5dc713c069f17
d3975bd65e6b4865abeaa0ce3448bb2df7b67ba8,2d320449b9ae2043ce20af886adb8855cbcf5029,33fe3a02f3ac738afbb4e682fc390ba601fb0d77
f6a1cb6b38af2daa98404c0bd794172591805561,45f82d746f6fbb9bc0b61419864b39f1c4a91a7e,069e142aabaaeae491a509b583581ac1bb4137cc
e5f2658eeb29d7a23784c0e343e13c2e2054dccc,4f7f57e80c832a8e1a84de6607d4bbf0c69de32f,79a9c2e990aa40466677bf7fc3b83efd3783b97e
792d51692b4c9dba9055147fc65f30d2b0a87b46,43a998dc07900f4fc4e7a51888c1ae55b6aba565,641354cca0bc3b66344da0e63026a6636ab07d66
66b1f25ab3b9bc02a1605d819c39703be46289b6,9faff07d06e69b02485f33a43c911b69f44cc606,15dceccc1a4b666a767c0381c6739a0b820d5990
9e4c8eacde4c9eb6e705a75cc079534b68e93ed2,cb21e48dd6295dc0ba5ff304e9f62c1e04510eb9,ce9a60ff86a305f45cdb332b99c8a8383669a92f
f741adec682d1ecbb32c8c347de1ee914e744739,b1a421debef595890e2f9fedc4348e146650d225,23e1c25911abf9c19c05a6c9089365a1783ba429
e7068366aaa85a1aa8825ea8bf46335d479169a5,6dcde3b90187fbb8f5a14b1a134b188319a3d10b,42993d99f02fb7955350eefe1be382e99a43a465
7e07ceb8cdf71b0056e06e17c08546976f36a38a,c8cf3ca28ac3ef13ce04b15e6e45ae12397bc785,9e6581fe3317ae8e66f6e92a44cc9e4f28240ed6
1ec82f8d51781007557e41add88aab0b0d4916bb,440696f33fb839fc172adbeb8b3a02d408f88d06,db2842e58151b9130eee3b997b2eae92e5899b15
2a561718b493de17f524d20ce482c3a995ce039e,7a6251bc8897b1c769460f00472a28a7d5abfade,be2b29ed5dbff699747289761061bdf92ce553c3
d39705a9568f5f076c894391b9d071613dfcde2d,ecaaa71b3088f908d4a3dacb544e25a4b1c1cf79,581b508e8af0bf039de0043b16830f356d0475a5
46a3a39b93eec0659baf5d67fda24e5f45a1c14a,c9e4a89020065baf8232e1d335e664be8f3d055b,b251ac04a450a754d3a0d13ae801780bba8869d4
1e42abffdc6b1f3c5b4dd8c0bffc01ceb9c687f3,acc89a14c881682bb6aa398d122a2c27310fc682,2d7ce72ad770754061d9c4720291be4008485c8b
fa235b07a324817568d1473711c761d96ad32d90,12e268f6f67f71de0b674d04309d597f9aff1a94,0f9521d474d2f4977e3d13e4ab19582117f2dda7
7f261027fac892b7ed0b46668ab4ddcfd5b9288f,eead61e1613d0d65c6d157a449364916a5799107,f792adf86e89c19e68361c9e8748eb96b9894094
4df25dc509e192df7ecf4e09ae7b378aebd600b6,41b39314894fedc8631f390a7ad7cfcf21c795ed,2a856e4390d981a6bf8e7ee497ad3462e4c9eb33
59977d20a866519f7a1c85eb571215e437d080db,fe55d125fe81807eff649348b8df41aacb8cd520,1e0b42ca1e6ef90055a7268712adef1d42b2c2f7
46b51b09bff8aacbd80d78c9385e7a815a70dfaa,9cf6395ae996a03bdcb8da7d1913ee1a6cd530cf,6005d595f7bd7e8ef2c26d125152f451c5342a0a
2372614710cb7353bcf1a3189b5ae5065b7dea9c,b505917d29d7b4041a692a82c056f6ec75481308,a38fbc13b550e3cd46c5d6e74da5c964e5c9f6df
9d7d5cea1a4f882ea5975e05826829dd37971072,46b9caa01ba2ff2adffeae2588a84b4103929639,05a045f1a9b0aba97f2666e817a5e0e35156fd3f
aa0696d840e25fb078bd4d701b39c04d3248cf36,6d6d0df0d25208a0f1fcb42163cd92240f25a582,811f5f8707bafb1aa3efa5a5369ad2113fdc5905
4afbed7b7e2d549ac46325191ee49e48cf2de36d,4bd87f7a923516bf12c04dffe3680035fb48b11b,9fad39ff3b79d04fb951555c687e09abaeb10c97
f7c919c2f8cca593e8d3316702dee8ab31a2207c,e96a8ab1e14b1639f6d85330a67280fb571bc449,d0aa007cbb8354242210fca17a747d4a8cb22292
40d8769b23169b53361b7316d3eac3c6b7de7641,98af4c2be8cca9a22b77d0f9edf352ee1f38610d,c87925915fb0ba9c4f617dc7cae0faebb5ed7af1
4247384c2d8081a49c24630fa98e4772f44bab2e,fa6c50a35e959a35f2f7c867b4a61a5699fe57f5,ef4c3bb107794987a678ea341e5d9b9df4340e53
693a0e2bf806834ca2e87396ae68a04849062abb,9808dac68a2bd595f4603ce432678a1183bbf372,4f4a5bd8ba6a0bdab0572774add582b2b5967fb1
2aed3c726c034ff66fabc30cbcbecb31135ec8d2,31766f44ebbd07443fd78243536e4785310ee506
Clicking a revision will expand files
* normalize tree: - do not allow statements in expressions
+ add a comment to the destructor of tsymtable so that others (and maybe me a well) will hopefully see that the destructor of that class is not completely trivial!
* fixed some issues to get correct values of section_count, works better than before but it is still not perfect for unknown reasons
+ based on a patch by Laksen, optimize (v>=x) and (v<=y) into (v-x)<(y-x)
* support aitconst_*bit_unaligned in the intel assembler writer, resolves
0034222
* relax formula for max. nodes to inline
Add missing TFenceFlags and TRoundingMode for riscv32
Fix default CPUs for riscv32
cleanup: remove ARMHF-related comments from RISC-V only codepath. no functional change.
* addendum for Mantis
0034333: also complain about number of arguments with the maximum number of arguments for Copy ( = 3 ) is exceeded
* is_range_test returns false if "lower" bound is greater than "upper" bound
* fix building with LLVM=1, thanks to Karl-Michael Schindler for the hint
+ patch by J. Gareth Moreton to support BMI2 instructions
+ extended avx test generator with the newly added BMI2 instructions
* Fixed overflow error when calling align() with corner case values such as align($7FFFFFFC, 4) for the longint variant.
Fix riscv64 compiler compilation with -dEXTDEBUG
Fix compilation with -dEXTDEBUG
Add -Tlinux and -Tembedded help lines for riscv32 and riscv64 compilers
* Fixed writing of method's RTTI for aarch64 by explicitly writing the $self parameter first.
* Reverted
0039947. According to Sven, the $self parameters is not required to be first parameter in RTTI. Appropriate tests will be fixed.
* Fixed overflow error for the qword version of align() when i=0.
* Undef FPC_HAS_TYPE_EXTENDED for x86_64-android.
* avoid range check errors
+ make use of the BFI instruction in tcgaarch64.a_load_ref_reg_unaligned
+ implement assembler optimization Str/LdrAdd/Sub2Str/Ldr Postindex done
* avoid to create a stack frame on aarch64 if possible
* take care of the fact that x and w registers overlap when carrying out the Str/LdrAdd/Sub2Str/Ldr Postindex optimization
* Optimized generic implementations of tcg.a_op_const_ref() and tcg.a_op_reg_ref() for PIC and CPUs which need 2 or more instructions to load a symbol's value by reference.
First the symbol's address is taken and then it is used to load the value and also store the result. It eliminates extra calculation of the symbol's address needed to store the result.
x86 and other CPUs which can handle refs ops directly or more efficiently already have overloaded versions of these methods and are not affected by this change.
* SetExecutionWeight(): Set execution weight also for nodes with special handling. Minor code cleanup/improvements.
* Restore previous execution weight before exiting secondpass().
* It all improves register allocation for variables inside loops in some cases.
* replaced "is" test with faster field value test
+ introduce tai_align_abstract.create_max which limits the maximal number of bytes being inserted for alignment
- x86 align does not use a register anymore, code removed
+ new fields for more precise control of alignment
+ support of new alignment control values for GNU AS writer
+ support of new alignment control values for binary writer
* better alignment settings on i386-win32
* improved inserted align directives for if nodes
* skip align directives after unconditional jumps
+ factored out TX86AsmOptimizer.PrePeepholeOptIMUL, used now by x86-64 and i386
* generalized and simplified the code
Disable three operand overload of MatchOpType for avr and jvm targets, which only have 2 operands max
* Removed 'inline' from public methods of TFPObjectList and TFPHashObjectList since they use private fields and can not be inlined when called from other units.
* Reverted
0040181 because the "not inlined" notes are issued not due to access to private fields, but due to string conversion. It need to be fixed by overloaded versions of some methods.
* Removed unused local vars.
* Commented out unused "size" local var.
* Removed unused local vars.
- get rid of MaxOps, it is redundant with max_operands
* MatchOpType with three operands is only available of max_operands>2
Fix 3 operand version of MatchOpType
* Moved inline methods to the beginning in order to allow them to be actually inlined in this unit.
* Rearranged the code to place implementation of inline methods before their usage within this unit.
+ Added overloaded version of stringdup() for ansistring to allow stringdup to be inlined.
* If a function can't be inline (contains an assembler block, etc) remove the po_inline flag from its procoptions.
* Removed inline for methods which are too big.
* Removed inline for functions which access private variables and can't be inlined from outside.
* Removed inline for Unix2AmigaPath since it is not necessary and can't be inlined anyway due to ansistring conversion.
* Addition to
0040225: Forgot to remove inline in the implementation.
* po_inline can't be removed from procoptions when the interface part is already parsed. It changes the interface's CRC and causes other units to recompile.
+ Added the pio_inline_not_possible flag to timplprocoption. It is set if a function can't be inline (contains an assembler block, etc). When calling such functions, no note "Call to subroutine "?" marked as inline is not inlined" is emitted.
* Changed verbosity of ""???" not yet supported inside inline procedure/function" to note to be consistent with note "Call to subroutine "?" marked as inline is not inlined".
+ initial work for tls-based threadvar support on arm-linux
+ check if initialization/finalization code uses implicitly thread vars
+ i386-linux support for tls-based threadvars
* define renamed into tls_threadvars
* compilation on x86-64 and i8086 fixed
* non-linux arm targets fixed
+ support for tlsm_general on i386-linux
* redundant code removed, work is meanwhile done by aasmcpu.optimize_ref
* i8086 compiler fixed, resolves
0034552
Avoid overflow error in riscv code generator
* do not re-used gottpoff symbols as they are PC-relative
Fix riscv32 compilation error introduced in last commit
Use same parameter type for update_reference_offset override
* better alignment on 386-linux
* three operand shl for shifting by 2, 4 or 8 can be simulated by lea
* set nf_write flag properly for vec. nodes of types with implicit dereferencing
* better alignment of while loop heads
* fixed adjustments of lower/upper bounds in range test optimization in case
of strictly smaller/greater comparisons (mantis
0034385)
* moved finalization of code generator temps to a node, so it can be getcopy'd
(needed for LLVM, where we need two copies of the finally code: one in case
an exception occurs, and one in case none is raised)
o also first finalize parameters and only then code generator temps, since
in theory the former could create more of the latter
+ new spilling heuristics which takes care of the usage weigth of a register,
not yet activated, can be selected by passing SPILLING_NEW when compiling the compiler
* finalizetemps nodes should never be considered equal and have side effects
* don't generate tempsfinalize nodes in except filter procdefs, as that would
finalize the parent's temps twice (fix for
0040345, mantis
0034574)
+ MovOpMov2MovOp optimization
* building on i386-linux fixed
* disable MovOpMov2MovOp optimization on x86-64 for now as it seems to break
* pass volatility information to llvm.memcpy
* thlcgobj.g_unreachable() dummy implementation + llvm override
* fixed dynamic array constants for llvm
- reverted
0039188, as this hack removes the type correctness of the
instructions, which breaks the llvm code generator. Put such hacks
in CPU-specific overrides
+ customint torddef type to create arbitraty bit-width integers
o use this to handle non-power-of-two-sized parameters for llvm
o no general support in the parser/code generator, so don't expose
* systematically capitalize first word of errormsg/sentence, patch by J. Gareth Moreton, mantis 34618
Regenerate msgid and msgtxt include files after commit 40422
m68k: reinstate the inc/dec tempregister type hack again in an isolated way (it was removed in
0040385, as it was breaking llvm target)
+ abi tag for i386
* arm abi tag moved into pascal file
- disable cs_opt_use_load_modify_store because for llvm because it is
apparently buggy as far as type information is concerned, and it also
results in tons of spilling
* ensure the generic version of tcgshlshrnode gets used for llvm
+ volatile() expression that marks an expression as volatile
* disable matching volatile references in the assembler optimisers, so they
can't be removed (more conservative than needed, but better than removing
too many)
o the CSE optimiser will ignore them by default, because they're an unknown
inline node for it
* also removed no longer used fpc_in_move_x and fpc_in_fillchar_x inline node
identifiers from rtl/inc/innr.inc, and placed fpc_in_unaligned_x at the
right place
* only free the temp holding the function result after we've loaded it into
the function return register (so we won't load from an already freed
temp once we emit lifetime info for temps on LLVM)
* emit temp lifetime information for llvm
o also allow freeing temps in the middle of a routine for llvm (we won't
reuse them, but it results in better lifetime information)
* add nocapture and dereferenceable/dereferenceable_or_null decorators to
parameters for llvm where appropriate
* fixed bug that caused the "sret" argument attribute to never be used (and
a guaranteed internalerror on AArch64/llvm)
* fixed paraloc def when changing the size to OS_32
* fixed shifval for big endian (bits instead of bytes)
* set paralocations correctly for LLVM/AArch (must be register-type instead
of parameter-type based)
* only coerce the type of the leftover bytes of a record if the location
size doesn't match the number of remaining bytes
o prevents a second "single" field of a record getting interpreted as a
"cardinal"
* support OS_32/OS_64 in AArch64 cgsize2subreg() for MM registers (can happen
for records with floating point fields with the LLVM code generator)
* initialise cgpara with valid data for the C-style "array of const" para
(necessary for the LLVM backend)
* replaced some stray cpointerdef.create() calls with cpointerdef.getreusable()
* pass dynamic array parameters of cdecl routines by value on AArch64
(like on onther platforms)
o it was passed by reference as a side effect of the fact arrays in C are
pointers, but a dynamic array already is a pointer
* fixed type consistency in handler for array parameters on platforms where
these have to be passed on the caller side (i.e., AArch64)
+ internal sqrt support for LLVM (faster on all platforms, necessary on
platforms that don't have RTL support for it, as the the generic
fpc_sqrt_real just calls runerror)
* fixed dynamic array constants for non-Darwin LLVM platforms
* support for compiling the objects unit methods that expect local procedure/
function pointers using {$modeswitch nestedprocvars} functionality, activate
this for LLVM and also activate that modeswitch for a test that uses this
o also convert the IDE units to use this functionality
o requires extra typecasts because implicit type conversions from
procvar(p: psometype) to procvar(p: pointer) are not supported; on the
plus side, even those type conversions are checked for validity
o note: requires {$modeswitch nestedprocvars} in all programs/units
that rely on this functionality
* cleaned up blockaddress instruction (add type rather than hardcoding it
in the assembler writer)
* fixed taking the address of a label in a typed const for llvm (fixes
tbs/tb0468a)
* fixed <> comparisons with NaNs (use LLVM "unordered" comparison: succeed
if either operand is a NaN)
* use ccallnode.createintern() instead of
ccallcnode.createinternfromunit('SYSTEM')
+ LLVM support for the FMA intrinsics
* fixed LLVM code generator not taking into account constalignmin/max
settings for typed constants
* fixed used resulttype of char-to-shortstring typeconversion in case the
shortstring type is smaler than 255 chars
* simplify all type conversions for formal constants even for LLVM and JVM
(since these happen at compile time and don't result in generated code,
they never need extra type conversions in the code)
* force pointer-based self parameters of inlined routines in temps for LLVM
to ensure that their type gets updated
* fixed result cgsize of LLVM's second_nothing type conversion node (new
size instead of original size, which can be different in case of going
from void to something else)
* in constructors, free the temp holding self only after loading the function
result, as self is the function result there (follow up to 40501)
* fixed string constant length when going from utf-8 to single-byte code page
(mantis
0033666, patch by engkin)
* handle constructor function results that have been migrated to the
parentfpstruct the same as regular function results (see
0032687)
* addition to
0040631: also force inline self parameters that are already in
a temp into a new temp for LLVM, so their type gets updated
* (modified) patch by Gareth Moreton: Speed improvement in case blocks, resolves
000034762
This patch improves the compiler where "case" statements are concerned, using jump tables more often and creating more efficient machine code in some situations:
* If a case block only contains one branch (not including the else block), the initial range check is removed, since this becomes wasted effort.
* If the else block is empty, the else label is set to the end label - though this doesn't decrease the code size, it takes a bit of strain off the peephole optimizer.
* On -O2 and above, some node analysis is now done on the branch labels. Most of the time this just redirects it to the end
label for empty blocks, but if the block contains a goto statement, it will redirect it to its destination instead,
thus increasing performance by not having multiple jumps (this won't get picked up by the peephole optimiser if the label addresses are in a jump table).
* Some checks now use what I call the 'true count' rather than the 'label count'. The true count includes each
individual value in a range - for example, 0..2 counts as 3. This increases the chance that a jump table will be
utilised in situations where it is more efficient than a linear list.
* For jump tables, if the case block almost covers the entire range (32 entries or fewer from full coverage),
the initial range check is removed and the gaps included in the jump table (pointing to the else label).
* pass used tls model to the assembler
* better code alignment for x86_64-win64 and x86_64-linux
* not all targets support the tls-model switch, use it only if section thread vars are used
* changed maxjumpalign:10 to 16
* changed (max)jumalign for Darwin/x86_64 from 0 to 16
* fixed wrong change of jumpalignmax from 10 to 16 in previous commit
o renamed jumpalignmax and coalescealignmax to jumpalignskipmax/
coalescealignskipmax to better reflex the meaning of these setting
(and the difference in meaning to e.g. constalignmax)
* update alignment values for Darwin
* (modified) path by Gareth Moreton to fix case handling
* when optimizing range checks in case nodes, unsigned comparisions must be used, resolves
0034782
* fixed LLVM memory leaks
* don't emit 0-sized parameters for LLVM: clang doesn't either, and some
LLVM backends (like the AArch64 one) trigger internal errors when
encountering them
* patch by Simon Ameis: adds mcu STM32F091* to compiler unit t_embed.pas; thus internal error 200902011 is not raised anymore, resolves
0034570
* improved explanation for warning 9034
tabs to spaces cleanup. no functional change
* fixed several places where the interface crc could change:
o unsetting po_inline while parsing the implementation for various reasons
(interprocedural goto/label, accessing a local in a parent frame,
having nested procedures)
o instead handle this via the pio_inline_not_possible flag
o noreturn can no longer be specified only in the implementation
Change default debugging format for x86_64-haiku to dwarf-2, as stabs is normally disabled on 64-bit systems
* modified patch by Gareth Moreton to make ie unique, resolves
0034849
* when deciding about the case code generation in case of size optimization, the number of labels is relevant, not the covered range, resolves
0034818
* -tls-dialect is not a as option, removed it, resolves
0034901
* constrained generics are also compatible with formaldefs, resolves
0034893
* modified patch by Gareth Moreton to pool TmpUsedRegs in the assembler optimizers, resolves
0034679
* fix and enable MovOpMov2MovOp optimization on x86-64
+ patch by Marģers to support the x86 assembler instructions blsi, blsr, blsmsk, adcx, adox, movbe, pclmulqdq, resolves
0034815 and
0034799
+ avxopcodes tests also movbe and pclmulqdq
* fix MovOpMov2MovOp optimization if no -Cpcoreavx2 is used
* open arrays and arrays of consts might be only stack tainting if they are passed by value
* avoid assembler errors for the MovOpMov2MovOp optimziation in case the size of the instruction
gets changed and the first one contains a constant, resolves
0034933
* factored out OptPass1FSTP, used by x86-64 now as well
* better recognization of procedure exit code
* factored out OptPass1FLD, used bx x86-64 now as well
- removed unused function
+ tls support for x86_64-linux (not yet enabled by default)
morphos: support section GC with GNU LD as well
* do not call the internal assembler if -s is passed
+ support msr regf,reg32 on arm in the internal assembler
* do not load always the references into a register in g_concatcopy
* correctly handle LDRD in TAoptBaseCpu.RegModifiedByInstruction
* first step towards supporting 32 bit targets with the LLVM code generator:
use the generic code in more cases when cpuhighleveltarget is defined
* perform extension of parameters to 32 bit for Darwin in the paraloc instead
of in the cgpara (cgpara should always correspond to the real parameter)
* fixed type correctness of and simplified the threadvar loading size
optimisation
* initialse the cgpara for the C-style varargs on ARM (needed for LLVM)
* fix loading of constants in registers in the LLVM CG if the constant
does not fit in ptrsinttype
atari: fpc now searches for the compiler with .ttp extension, as that's the default on Atari
+ nolinline modifier to specify that a routine must never be inlined
* let de LLVM parameter manager merge multiple paralocs used to represent a
single ordinal, as such splitting is handled by LLVM itself (and handling
such split locations is currently not supported by our LLVM code generator)
* set default Mac OS X target version to 10.6 for LLVM (earlier versions did
not include libunwind in libSystem, causing linking errors when compiling
on later versions)
* always emit UAL when using LLVM (clang does not and will not support
pre-UAL)
* removed unnecessary replacements of the paraloc def with arraydefs on ARM
* fixed ARM paraloc defs (for LLVM)
* update the stack alignment field of parameters when doing so for paralocs
* LLVM does not support 128 bits arithmetic on 32 bit platforms, which we
need for overflow checking -> use RTL built-ins
* fixed thlcgobj.g_rangecheck() for cpuhighleveltarget when targetting a
cpu32bitalu
* fixed the default external assembler for llvm when using -s
Fix bug report
0035065 using provided patch by J. Gareth Moreton
* properly quote pathes for objcopy calls, resolves
0035072
* ppudump: Use buffered write when outputting to json or xml. It improves the output speed a lot.
* ppudump: Fixed warnings with -O3.
* arm: Fixed crash while loading double constants with PIC enabled. This is the regression after
0041129. The crash has occurred due to usage of a rare code path. It will be fixed in the next commit.
* arm: Include pi_needs_got to current_procinfo.flags when the GOT register is accessed. It forces proper initialization of the GOT register at the beginning of a procedure. This fixes storing of a double constant to a field in a packed record and other rare copy operations when PIC is enabled.
* aarch64: According to ARM64 ABI, function's arguments and the result are not required to be sign/zero extended to a full register size. Obey this rule for all targets except iOS where sign/zero extension is required.
* don't use cg64.a_load64_loc_cgpara() for 64 bit records passed in
non-integer registers
* move the homogenous float aggregate determination function to a common
unit for ARM and AArch64
* keep track of whether a routine has a C-style variadic parameter in the
procoptions even when it's through an array-of-const parameter
* always call create_varargs_paraloc_info() instead of create_paraloc_info()
in the former case, even when no varargs parameters are specified (because
on some platforms even some non-variadic parameters need to be passed
differently, such as on ARM with gnueabihf)
* add support for HFA parameter passing for ARM hardfloat
(fixes test/cg/tcalext6)
* give an error when trying to call through to a C varargs routine with a
high level code generator
o we cannot create a high-level stub in that case
* type left-over parts of parameters as arrays of "stack slot alignment" if
they're an exact multiple of the ialignment size on LLVM. This prevents
both overalignment (e.g. remainder of 8 individual bytes on ARM
would be aligned to 8 bytes instead of 4 if typed as int64) and
underalignment (e.g. 32 bytes remainder of a record that needs to be
aligned to 8 bytes would be aligned to 1 or 4 bytes if types as
array of resp. bytes or longints)
* remove double "nocapture" attributes
* also add "noalias nocapture" to sret parameters
* use ` instead of ^ as replacement character in LLVM asmnodes, as ^ can
appear in ARM inline assembly
* properly set 8 byte parameter alignment for first parameter on ARM if
applicable
* also specify the byval alignment at the callee side
* support OS_32/OS_64 in cgsize2subreg for ARM MM registers to handle
records passed in MM registers
* Removed unused local vars.
* Removed inline, since inherited is not supported.
* Do not set pi_needs_got in current_procinfo.flags at the node level, since the GOT usage can only be estimated there. Instead set the pi_needs_got flag at places where the GOT register is accessed during the code generation. This eliminates generation of the unneeded initialization of the GOT register and fixes linker errors when the _GLOBAL_OFFSET_TABLE_ symbol is referenced but no actual GOT references are present.
* i386: Minor PIC initialization improvement if the GOT register is forced to EBX.
* i386 PIC: Do not force EBX as a GOT register if tf_section_threadvars is not set. Actually forcing EBX here is a bad idea anyway.
* i386: Do not request GOT for every function call. GOT is requested only for external calls in thlcgcpu.a_call_name(). Local calls are always PC relative.
* track va_uses_float_reg also for varargs functions without varargs
parameters (see e.g. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=23070 )
* better alignment values
* fix for
0041416: 64 bit values on 32 bit platforms can of course also be
passed in memory
* initialize function result for variadic functions (fixup for
0041420)
Fix tmoddiv4.pp test failure with -O1 option for powerpc64 as suggested by Jonas
* ppudump: Fixed a warning regarding text clipping.
* only add hidden parameters for objectdef methods after generating the vmt,
so that they take into account inherited calling conventions (mantis
0035233)
o don't needlessly calculate the paraloc info when generating a JVM mangled
name
* also accept {$elsif} after {$if(n)def} (mantis
0034858)
* fix msgtxt array size if the text size is an exact multiple of 240
* clean up some things regarding explicit paraloc handling. this should fix m68k-amiga and powerpc-morphos builds after
0041716
* reinstate the internalerror removed in
0041730 for i386, as that was a valid condition to verify
* added extra header to ppu inside a subsection, so we won't run into
trouble when the ppu version hits 255
* also moved several ppu flags to a set inside that section
* hopefully fix fpu emulation ppu header flag check after
0041846
* documented usage of ppuversion and ppulongversion
* check CurrentPPULongVersion in ppumove
- Add support for .option directive in riscv assembler.
- Use addiw when adjusting U32 to S32
- Port RISC-V64 startup code to native inline routines.
- Fix UTX* optimizations that didn't consider the optional ROR parameter.
* insert the hidden parameters for objectdef methods after resolving
overrides but before generating the VMT, so that these hidden parameters
are part of the procdefs stored in the VMT (fixes some LLVM type errors
after
0041716)
* use ".set" for aliasing global symbols on Darwin, instead of declaring
symbols after each other
o removed the .reference hack that was used previously
* replaced TCmdStrListItem getter function with a property
* moved sleb/uleb128 helpers to cutils and use SarInt64() intrinsic (based on
patch by J. Gareth Moreton, mantis
0035327)
* micro-optimization for tentryfile.getbyte() (based on patch by
J. Gareth Moreton, mantis
0035406)
* optimized and simplified tai_aggregatetypedconst destruction
- removed ttypedconstkind parameter from tai_simpletypedconst constructor,
as it always has to be tck_simple anyway
* fixed double free in LLVM code generator after
0041963
+ add support for MultiHelpers modeswitch by Ryan Joseph for Mantis
0035159
+ added tests
* set correct fileinfo for statements_til_end() block
+ support for verifying whether a case statements handles all possibilities
(based on patch by Martok)
o enabled by default in ISO and Extended Pascal: compile-time error if not
the case in ISO mode, warning and run-time error in Extended Pascal mode
o warning enabled by default in all other modes for boolean, enumeration and
subrange integer types with ranges different from the default ones
(i.e., different from 0..255, -128..127, 0..65536, etc)
o warnings for all ordinal types can be enabled in all modes with
-CC
* fix overflow errors in case coverage code
* fixed crashes on platforms using parentfpstructs with generic routines
that contain nested functions (when specialised, procedures don't have
the main function of the unit/program as parent procinfo)
Remove two warnings about missing case (others are still present in ppudump.pp source)
Fix arm-aros rtl compilation
* DFA now takes case-completeness into account (mantis
0035598)
* updated German message files (patch by Karl-Michael Schindler,
mantis
0035559)
* append rather than insert the alias symbols for the program/procedure
initialisation/finalisation routines
o this ensures the procdef's mangled name and its first symbol match,
which is required for Darwin when generating debug information and
using ".set" directives to define alias symbols, because a symbol
defined via ".set" cannot be used in a data relocations (and the DWARF
debug generator uses the default mangled name, which used to correspond
to the alias symbol due to the "insert" instead of "append")
* don't double-define function aliases for Darwin defined via ".set" directive
* fixed loading parent frame pointer for nested procvars on targets that
that use explicit parentfp structs (fixes webtbs/tw17379 for llvm)
* made the fields array parameter of llvmgettemprecorddef "const", as it
doesn't get modified and hence doesn't need to be copied
* abstracted registration of library init/fini routines (to be able to add
LLVM support)
Add DEBUG_PPU conditional code to be able to debug ppu changes (only useful for debugging purposes)
* disable regular array -> dynamic array type coversion support unless
{$modeswitch arraytodynarray} is active (mantis
0035576)
o changed compiler to compile without this modeswitch
o added the modeswitch to a test that depends on it
Fix division of constants on ARM thumb without long multiplication.
* support for handling subsetrefs with bitlen > AIntBits in a_load_subsetref_reg() and
a_load_const/reg_subsetref() (needed for handling 32 bit platforms using a purely
high level code generator like LLVM's, and may also improve the situation for
16 bit platforms)
o can probably be optimized to split them into parts that cover partial word loads
and complete word loads (to reduce useless merging)
Added T2 form of LDR/STR for SP relative forms.
+ added TNewExeHeaderFlags type, describing the flags in the header of win16 executables
+ added enum TNewExeTargetOS
+ added type TNewExeAdditionalHeaderFlags
- removed "cmp 0/1, pasbool1" optimization for llvm because this discards
the upper 7 bits of the boolean, while other platforms take it into
account (even though they're technically always required to be 0, and
the value is undefined if they're not)
* fix bootstrapping with 3.0.x and -O3
* Nintendo DS port updated to libnds ver.1.7.3
+ added set TNewExeSegmentFlags
* prettify the "Use of +offset(%ebp) is not compatible with regcall convention"
and "Use of +offset(%ebp) for parameters invalid here" warning messages by
showing the exact register used (bp, ebp or rbp) and using the original asm
syntax (Intel: [EBP+offset]; AT&T: +offset(%ebp) )
* prettify the "Use of -offset(%ebp) is not recommended for local variable
access" warning by showing the exact register used (bp, ebp or rbp) and using
the original asm syntax
+ introduced the asmmodes_x86_intel constant set
+ add asmmode_standard to the asmmodes_x86_intel set on i8086, because i8086 defaults to intel syntax
* prettify the "Use of -offset(%esp), access may cause a crash or value may be
lost" warning by showing the exact register used (esp or rsp) and using the
asm syntax (Intel or AT&T) used originally in the code
+ added the asmmodes_x86_att set constant - similar to asmmode_x86_intel, but for AT&T asm syntax
* suppress warning for targets without MM registers
* Updated Wii port to libogc 1.8.22
+ added class TNewExeHeader that encapsulates a NewExe header and allows writing it to a file
+ initialize some defaults in the TNewExeHeader constructor
+ added class TNewExeOutput. Not functional yet.
+ added a win16 internal linker class. Not functional yet.
+ implement TInternalLinkerWin16.DefaultLinkScript by copying the MS-DOS
implementation (not correct, but a good starting point)
- remove the tiny memory model code from TInternalLinkerWin16.DefaultLinkScript,
because the Win16 target doesn't support the tiny memory model
+ register a win16 dll scanner. Not functional yet.
+ added constants for the known CC_OmfExtension record subtypes (IMPDEF and
EXPDEF are the ones we care about - they are used in win16 dll import and
export libraries)
+ dispatch the IMPDEF and EXPDEF records to the newly introduced ReadImpDef and
ReadExpDef methods (not implemented yet)
+ use the new CC_OmfExtension_EXPDEF constant instead of the direct magic value
when writing export libraries
+ use the new CC_OmfExtension_IMPDEF constant instead of the direct magic value
when writing IMPDEF records
+ introduced the TOmfRecord_COMENT_Subtype abstract class
+ introduced the TOmfRecord_COMENT_IMPDEF class. Use it to encode the IMPDEF
records instead of encoding them directly.
+ introduced the TOmfRecord_COMENT_EXPDEF class. Use that to generate export
libraries instead of generating the magic string directly.
+ Implemented TOmfRecord_COMENT_EXPDEF.DecodeFrom
+ keep (certain) arrays in registers if they are used with constants indices only
* building on powerpc and arm fixed
+ implemented TOmfRecord_COMENT_IMPDEF.DecodeFrom
* disable array and record regvars for all cpuhighleveltarget platforms
Commit of new debug feature implemented by J. Gareth Moreton
Allows compilation of compiler using -dDEBUG_NODE_XML
which will generate a NAME-node-dump.xml file for each
unit, program or library compiled,
containing a XML description of the nodes handled during
compilation of the unit, program or library.
* one more disable location of DoPipe in case not on a Unix platform
(mantis
0035743)
* partial fix for Mantis
0035346: more "inline" directives for TCStream and TCMemoryStream methods
* remaining fix for Mantis
0035346: add "inline" directives to various methods of tentryfile
* simplify and optimize generated LLVM code for case statements
* also register symbols referenced from assembler via asolutevarsyms
* volatile syms should never be regable
* LLVM-specific support for bsr*/bsf*
* LLVM-specific support for popcnt
* record in ppu flag whether or not symbols are ansistrings, and use that
flag in ppudump rather than hardcoding targets (it's also the case for
LLVM)
- removed remnants of old ppu file support (ppudump does not support any
other ppu version than the current one anyway)
* fixed compilation with -dTest_Double_checksum_write
Commit patch submitted in bug report
0035787 by Gareth Moreton
* fixed range test optimization for signed types and enabled it for them
- Fix bug in 64bit softfloat double negation.
- Clean up handling of CPU/FPU type handling in RISCV.
- Do more fixes to get RISCV32 working.
- Fix most soft multiplication handling for generic RISCV code. Still missing a few.
- Add RISCV embedded targets.
* maybereplacewithtemp/maybereplacewithtempref: also create a temp in case
of possible side effects
- disabled ogmacho, as it can no longer deal with the assembly we generate
* on Mach-O, PECOFF and ELF platforms, write local symbols as hidden/
private_extern (or plain global in case of PECOFF, as the effect is
the same there): visible across object files, but they become local
when linked into a binary/library. This enables cross-unit inlining
of functions accessig implementation-only symbols.
* factored out checks whether a procdef's symbol needs to be global, and
the generation of the procdef's asmsymbols
o also removed unnecessary definition of procdef alias symbols for Darwin
(they are already defined in ncgutil.alloc_proc_symbol)
* fix tobjectdef.vmt_def to search in the correct symtable
* always register vmt defs (so they get written to the ppu) in case of llvm,
because it may need this def in case a method from a class defined in the
implementation of unit gets called from an inlined routine that gets
inlined in another unit (normally that vmt def would not get written to
the ppu file, as it can't be referenced from the interface and it's also
not necessarily directly referenced from the inline routine's nodes)
(fixes sdo_dataobject compilation with LLVM after enabling cross-unit
inlining of methods accessing static symbol table symbols)
+ parse the IMPDEF record in TOmfObjInput.ReadImpDef
Reintegration of Custom Attributes branch by Joost van der Sluis with patches reworked by Svetozar Belic [patch 1/3]
Implemented attributes for class types and properties (based on work by Joost van der Sluis). Added TCustomAttribute - a base class for attributes. Added TUnitInfo record to RTTI. It contains the unit name and unit options (for now only a flag which specifies if the unit contains attributes). Added several tests for attributes.
Reintegration of Custom Attributes branch by Joost van der Sluis with patches reworked by Svetozar Belic [patch 2/3]
Regenerated compiler/msgidx.inc and compiler/msgtxt.inc.
Reintegration of Custom Attributes branch by Joost van der Sluis with patches reworked by Svetozar Belic [patch 3/3]
Added FPC_REQUIRES_PROPER_ALIGNMENT to TUnitInfo definition. Added FPC_HAS_EXTENDED_RTTI define.
* rename trtti_attributesdef to trtti_attributes_list
* change boolean parameters for try_consume_unitsym to a set
* instead of declaring another type with a 'attribute' suffix, *search* for another type with a 'ATTRIBUTE' suffix (Delphi allows declaring both a TFoo and TFooAttribute in the same unit)
+ added test
* instead of embedding the attributes inside the class' and property's type data only store a reference to a table of attributes
* always write a class' reference to the attribute table, even if the unit does not have attributes
- remove unit info and related code again as that will be handled similar, but differently with dynamic packages
* considering that at least in theory every symbol and every def can carry RTTI attributes (Delphi only supports property and field symbols), move the rtti_attribute_list to tstoredsym/tstoreddef
* as attributes can be part of any type they are best suited in a common part of TTypeData
* fix code formatting (no code changes)
* check that we indeed have a type node and nothing else
* with a type node it's not necessary to check whether it's typedef is assigned
* fix code formatting (no code changes)
* rework code for parsing attributes to only allow constant expressions; Delphi only allows those as well and better we don't open *that* pandora's box just yet
* fix code formatting (no code changes)
* store the parameter nodes in the attribute object as well (we need to write them to the RTTI as well as store them in the PPU)
* ensure that any potentially created constructor call is freed if the attribute is not bound to a def or sym
* instead of collecting the raw parameters we need to collect the parameters as passed to the call as there might be type conversions involved
* better check for a valid call node
* take a copy of the constructor assignment node (and free it together with the attribute)
+ add methods for the const nodes to directly emit their constant data to a constant builder
Note: reduce code duplication, especially for the tsetconstnode (with its descendant tcgsetconstnode)
* the RTTI of an attribute not only consists of the creation function, but also of the attribute's type, a pointer to the constructor and a data blob containing the constant parameters
+ added test
* add a remark that's going to be important once extended RTTI is supported (Delphi programs crash if an attribute's constructor is used that does not have any extended RTTI)
* move binding of a dangling attribute list to a sym's/def's attribute list to a class procedure of trtti_attribute_list
* make the reference to the TCustomAttribute type global
* generate construction function for the attributes used in a unit using a more straight forward approach
ToDo: "collect" attributes of same type and same argument list and generate constructor only once for them
* trtti_attribute_list.bind already checks whether the dangling attribute list is assigned or not
- remove code to create an attribute using a synthetic function
- remove functionality to get the code block when parsing again (let's open this pandora's box only when really needed...)
- symbolname field is no longer required
+ add functions for syms and defs and write sub entries of the sym/def to PPU and loads them again
* explicitely store the procdef of the picked constructor of the attribute
* store attribute information in PPU; this is less important for the compiler, but more for e.g. Lazarus when dealing with binary only units
* increase ppu version
+ added test
* adjust ppudump to handle attributes as well
ToDo: output parameter nodes as well
* disable [...] syntax for procedure directives if modeswitch "prefixed attributes" is enabled; they conflict otherwise and it's not easily resolveable
+ added test
* use two empty lines between method definitions (no code changes)
* correct identation (no code changes)
* allow custom attributes for all type declarations that are not a simple alias
+ added tests
* don't free the constructor call in trtti_attribute_list as that is already freed in the destructor of trtti_attribute
* free unbound attributes
* check for unbound attributes inside classes (currently they are only allowed for published properties)
Note: no tests yet as sooner or later most will be dropped once extended RTTI is added
* allow use of multiple, comma separated attributes as Delphi allows that as well
+ added test
* adjust error message when attributes are unbound
* regenerate msg*.inc files
fixed the messy state of messages after recent custom attributes merge. fixed a typo, fixed double definition of message 3350, restored a message that was removed but still used, so the build passes at least.
* get rid of the scanner message for attributes for real this time (sometimes I *really* hate Git -.-)
* first bunch of fixes for rtti for arm after attribute commits, fixes mostly alignment issues
- removed maxcrecordalign parameter/field from recordsymtables, as this value
cannot be modified in the settings (so we can directly use the one from
current_settings)
* properly align rtti for orddefs
* fix for Mantis
0023071: also store local symtable in the PPU if the procdef is generic as we need it to resolve genericdefs to nested types
* increase PPU version now that all generic procdefs store their local symtables
* don't reuse defs for attribute lists or individual attributes with parameters, as
they don't have a constant size
o fixes LLVM internalerror 2015122402 for test/tcustomattr{12,13,19}
* search dynamic string data record in correct symtable in
tllvmtai_typedconstbuilder.emit_string_offset
o fixes LLVM internalerror 2014080406 for test/tcustomattr14
* fix for Mantis
0035866: parse_paras does not check whether the expressions are really constant, so check that manually
+ added test
* don't bother finding the correct constructor if the attribute isn't a TCustomAttribute descendant anyway; simply skip the parameters in that case
+ added tests
* more fixes to rtti after attribute branch merging
* fixed field alignment when reusing an anonymous recorddef for LLVM and
the LLVM layout of an instance does not match the original one
(e.g. because it contains procdefs of procedures with different
signatures)
* reverted
0042463, the internalerrors were caused by a bug in the LLVM typed
constant builder
* some runtime errors fixed, if compiled with -CrR
* don't apply user-specified constant alignments to RTTI data
- fixed check for determining whether requesting the size of an array is
an invalid operation after
0042479, as regular arrays can have high=-1
(mantis
0035874, already checked by trange3)
* generate correctly aligned string RTTI, fixes trtti7 on ARM
* fix writing of floating point attribute parameters
+ enable the win16 internal linker if the compiler is compiled with the
WIN16_INTERNAL_LINKER define. Since the win16 internal linker isn't completed
yet, this define is not enabled by default.
* (non-ancient) Delphi versions that accept explicit ordinal -> floating
point typecasts behave the same as FPC (convert the value) rather than
as Turbo Pascal (reinterpret the bit pattern) (mantis
0035886)
* use the size of the generated anonymous record instead of the manual tracked size so that any padding is picked up as well
* set sharedlibext for win16 to '.dll'
+ implemented TNewExeOutput.GenerateLibraryImports, based on the ogcoff implementation
+ fpu_capabilities for arm
* some code converted to use fpu_capabilities
* make stack non executable on arm-linux
* insert FPC_THROWFPUEXCEPTION call into the correct assembler list
+ added an ImportLibraryList property to TOmfObjData
+ added method TOmfObjData.AddImportSymbol, which adds symbols, imported from an
external dll to TOmfObjData.ImportLibraryList (similar to
TInternalLinker.AddImportSymbol)
+ call TOmfObjData.AddImportSymbol for every ImpDef record read from an object file
+ also add and resolve import symbols coming from OMF object modules
+ create a TNewExeSection class
+ split the win16 executable into sections
+ added an TNewExeOutput.Order_ObjSectionList override and sort obj sections by
class name first, then by name, then by initial order
+ write the NewExe header in TNewExeOutput.writeData
* don't crash in TOmfObjSection.MemPosStr if MZExeUnifiedLogicalSegment isn't set
+ added dummy overrides for TInternalLinkerWin16.GetCodeSize, .GetDataSize and
.GetBssSize, because the default ones crash
* fix for Mantis
0035903: apply patch by J. Gareth Moreton to update the copyright year to 2019
* fix for Mantis
0035918: don't set the mangledname for the attribute's constructor function; let the compiler do its job instead
* create NewExe sections, corresponding to 64kb segments
* override MemPos_Start for the NewExe exe output and perform the whole MemPos
stage inside of it, because the linker script contains only dummy section
names and thus none of the sections get their MemPos set, while using the
default implementation
+ add a segment number (MemBasePos) to TNewExeSection
+ introduced TExeSection.MemPosStr - a virtual method for converting the
section's memory position to string for the linker map file. This can be
overriden e.g. for segmented exe formats.
+ added an TNewExeSection.MemPosStr override that outputs a segment:offset string
* combine the data, bss, stack and heap into the same NewExe segment
+ adapted TOmfObjSymbol.AddressStr to show correct segment:offset for NewExe files as well
+ adapted TOmfObjSection.MemPosStr to output segment:offset for NewExe executables
* reset CurrMemPos after each NewExeSection to ensure each segment starts at 0 offset
+ fill the auto data segment number in the NewExe header
+ fill the program entry point address in the NewExe header
+ set the initial SS:SP in the NewExe header
* factored out the conditions under which add nodes need to perform
overflow checks
o in particular ensure that cpu-specific overrides don't perform overflow
checks when nf_internal is set
* an incomplete case statement is not an error in ISO Pascal (mantis
0035910)
* give a compile-time error in ISO/Extended Pascal if the compiler can prove
the case selector value is not handled, and a warning in other modes
(mantis
0035915)
o trigger the case node simplification at the end of the case node typecheck
pass, like for other nodes
Fix internal error by using same code to set checkoverflow variable as in powerpc/nppcadd unit
+ fill the segment table start offset in the NewExe header
+ added the missing NewExe segment attributes as properties to the
TNewExeSection class and create the NewExe segment table into the .exe file.
Not all of the properties are initialized yet, though.
+ initialize the flags for the code and data segments in the NewExe header
+ recognize stack segments and fill the total stack size in the NewExe header
* convert the internal name from IMPDEF records to upper case if the
CaseSensitiveSymbols option is off
+ detect heap sections and fill the local heap size in the NewExe header
m68k/vasm: remove bits of Linux support. this combination has never really been tested or supported, and got broken recently. m68k-elf-linux has good enough GNU binutils anyway
Fix change_endian code to read double and single float data
* Issue file change before line and column change in token writes to allow for better display in ppudump utility
+ write the resource table (empty for now) to NewExe files
+ create the resident name table in the NewExe file writer
+ added constructor to TNewExeResidentNameTableEntry that allows you to
initialize this entry's ordinal number
+ added property that determines the resident name table size in bytes and use
it to fill the offset to the start of the module reference table in NewExe
files
+ fill and write the NewExe imported name table
* small optimization in TNewExeOutput.FillImportedNameTable - only add the
library name once, instead of trying to add it (which causes a look up) for
every imported symbol
+ calculate the table offset of each string in the NewExe imported name table
* strip the '.dll' extension from the library names before adding them to the
NewExe imported name table
* when reading ImpDef records, add '.dll' to the libname if it has no extension,
in order to be consistent with externals, declared in pascal files. The '.dll'
extension will be stripped later, when generating the NewExe file.
+ fill the NewExe module reference table
* fixed wrong typecast in TNewExeImportedNameTable.GetSize
* strip the '.dll' extension from the library name when creating import
libraries as well. This ensures that NewExe binaries, created by the external
linker don't have the '.dll' extension in them.
+ fill the NewExe entry table offset
+ added class for writing the NewExe entry table - not fully implemented yet
+ parse ExpDef OMF records and delegate them to a new method
TOmfObjData.AddExportSymbol (not implemented yet)
+ implemented TOmfObjData.AddExportSymbol - the exported symbols are recorded in
the newly introduced TOmfObjData.ExportedSymbolList
+ assign ordinals to all exported symbols
+ added class TNewExeEntryPoint and methods/properties to TNewExeEntryTable to
make it hold a list of entry points
+ add entry points to the entry table for all exported NewExe symbols
+ write the entry table to the NewExe file
* the resident table entry/table classes renamed "export table", because the
same classes can be used both for the resident and nonresident tables (they
share the same structure)
+ also write the nonresident name table
+ write the module description as the first entry to the nonresident names table
- suppress the warning that the $D directive is not supported on i8086-win16
+ pass the description option to wlink to set the module description string when
using the external linker on the win16 target
+ add all exported by name symbols to the resident or the nonresident name table
+ also copy ResidentName in TOmfObjData.AddExportSymbol
+ enable the ISSHAREDLIBRARY option for the win16 internal linker when creating a dll
+ enable the IsDll flag in the NewExe header when creating dlls with the
internal linker. Also make a SINGLEDATA (instead of MULTIPLEDATA) executable
and entry points in this case.
+ allow creating win16 dlls with the wlink external linker as well
+ added system_i8086_win16 to the supported targets of the i8086 omf internal
assembler/object writer
+ pass the ParmCount parameter from the ExpDef OMF record to the NewExe entry
point
* applied patch by Blaise.ru to reduce code duplication in trecorddef.create_global_internal()
* apply patch by Blaise.ru to pass the record name for an internal record more efficiently
Merge: fc46b6c57c 70a2b0b260
-- Zusammenführen der Unterschiede zwischen Projektarchiv-URLs in ».«:
U compiler/i8086/
008086int.inc
U compiler/i8086/
008086nor.inc
U compiler/i8086/
008086rni.inc
U compiler/i8086/
008086std.inc
U compiler/i386/i386prop.inc
U compiler/i386/i386att.inc
U compiler/i386/i386atts.inc
U compiler/i386/i386int.inc
U compiler/i8086/i8086int.inc
U compiler/i8086/i8086op.inc
U compiler/i8086/
008086dwrf.inc
U compiler/i8086/
008086ari.inc
U compiler/i8086/
008086con.inc
U compiler/i8086/
008086nasm.inc
U compiler/i8086/
008086num.inc
U compiler/i8086/
008086stab.inc
U compiler/i386/i386nop.inc
U compiler/i386/i386op.inc
U compiler/i386/i386tab.inc
U compiler/i386/r386ot.inc
U compiler/i386/r386ari.inc
U compiler/i386/r386att.inc
U compiler/i386/r386con.inc
U compiler/i386/r386dwrf.inc
U compiler/i386/r386int.inc
U compiler/i386/r386iri.inc
U compiler/i386/r386nasm.inc
U compiler/i386/r386nor.inc
U compiler/i386/r386nri.inc
U compiler/i386/r386num.inc
U compiler/i386/r386rni.inc
U compiler/i386/r386sri.inc
U compiler/i386/r386stab.inc
U compiler/i386/r386std.inc
U compiler/i8086/i8086prop.inc
U compiler/i8086/i8086att.inc
U compiler/i8086/i8086atts.inc
U compiler/i8086/i8086nop.inc
U compiler/i8086/i8086tab.inc
U compiler/i8086/
008086ot.inc
U compiler/i8086/
008086att.inc
U compiler/i8086/
008086iri.inc
U compiler/i8086/
008086nri.inc
U compiler/i8086/
008086sri.inc
U compiler/x86/agx86int.pas
U compiler/x86/rax86int.pas
U compiler/x86/aasmcpu.pas
U compiler/x86/rax86.pas
U compiler/x86/x86ins.dat
U compiler/x86/agx86att.pas
U compiler/x86/cpubase.pas
U packages/rtl-objpas/src/inc/rtti.pp
U packages/rtl-objpas/tests/tests.rtti.pas
U rtl
U compiler/x86_64/x8664att.inc
U compiler/x86_64/x8664tab.inc
U compiler/x86_64/
008664con.inc
U compiler/x86_64/
008664nasm.inc
U compiler/x86_64/
008664sri.inc
U compiler/aasmtai.pas
U compiler/scanner.pas
U tests/utils/avx/readme.txt
U compiler/x86_64/x8664ats.inc
U compiler/x86_64/x8664op.inc
U compiler/x86_64/
008664att.inc
U compiler/x86_64/
008664iri.inc
U compiler/x86_64/
008664rni.inc
U compiler/pp.lpi
U compiler/msgtxt.inc
U compiler/ppcx64.lpi
U compiler/x86_64/x8664pro.inc
U compiler/x86_64/x8664nop.inc
U compiler/x86_64/
008664ari.inc
U compiler/x86_64/
008664int.inc
U compiler/x86_64/
008664num.inc
U compiler/x86_64/
008664std.inc
U compiler/msgidx.inc
U compiler/utils/mkx86ins.pp
U compiler/x86/x86reg.dat
D compiler/x86/cx86innr.inc
U compiler/x86_64/x8664int.inc
U compiler/x86_64/
008664ot.inc
U compiler/x86_64/
008664dwrf.inc
U compiler/x86_64/
008664nor.inc
U compiler/x86_64/
008664stab.inc
U compiler/msg/errore.msg
U compiler/utils/mkx86reg.pp
U tests/utils/avx/asmtestgenerator.pas
U tests/utils/avx/options.pas
U tests/utils/avx/avxtestgenerator.pp
U tests/test/units/character/tissurrogatepair2.pp
U tests/test/units/character/tissurrogatepair.pp
U tests/utils/avx/avxopcodes.pas
U .
-- Aufzeichnung der Informationen für Zusammenführung zwischen Projektarchiv-URLs in ».«:
U .
U packages/rtl-objpas/src/inc/rtti.pp
U packages/rtl-objpas/tests/tests.rtti.pas
U rtl
* compilation on i386 fixed
* intel asm reader: try to read avx512 extensions only if the instruction supports them
* cleanup
- don't create a heap segment for win16
* fixed quoting of the "description" wlink option on Windows
* limit the heapsize to 65520 bytes on win16 (the $M directive in win16 only
sets the size of the "local heap", which is limited to a single segment. The
actual heap in the large memory model is the "global heap", which doesn't have
a set limit, but grows with the memory allocated)
+ fill MinAllocSize in the NewExe segment table
+ fill SizeInFile properly in the NewExe segment table
* fix detection of floating point constants for arm
* fix return registers for hfa's containing singles
* enable TCpuAsmOptimizer.RemoveSuperfluousVMov for VLDR
* fixed TCpuAsmOptimizer.RemoveSuperfluousVMov to be actually applied
Merge: 416c974d3f ad791e8e34
-- Zusammenführen von
0042652 bis
0042673 in Ā».Ā«:
U compiler/x86/aasmcpu.pas
-- Aufzeichnung der Informationen für Zusammenführung von
0042652 bis
0042673 in Ā».Ā«:
U .
* compilation on i386-linux fixed
* fix BccB2Cond optimization on arm
+ added class, representing a NewExe relocation entry
* reworked arm vfp capability handling to use fpu_capabilites
+ create defines with FPU capabilites
+ make use of FPU capability defines in the rtl
+ basic Neon support in the assembler writer
+ make use of VEOR if possible to clear VFP registers
* building with -Cfvfpv2 hopefully fixed
* forgotten part of previous commit: fix BccB2Cond optimization on arm
* fix tarminlinenode.first_sqrt_real
+ added and implemented method TNewExeRelocation.EncodeTo
* fixed compilation with -Sew
+ added constant NewExeRelocationRecordSize
* fix building for targets with no vfp support
* ensure that aprocdef is initialized to Nil to catch problems with compare_defs_ext() easier
+ x86 makes use of fpu_capabilities
* moved CPUX86_HAS_AVXUNIT to FPUX86_HAS_AVXUNIT
+ mm register allocator can be initialized with 32 mm registers of AVX512
Avoid error with -CR option in tobjectdef.vmt_def method
o overhaul-base.patch by J. Gareth Moreton, base for further patches
+ some inline directives added
+ some functions exported from units
Merge: 9230ae5aab a5e158f8d6
-- Zusammenführen von
0042706 bis
0042724 in Ā».Ā«:
U tests/utils/avx/avxopcodes.pas
U compiler/x86/aasmcpu.pas
U compiler/x86/rax86.pas
-- Aufzeichnung der Informationen für Zusammenführung von
0042706 bis
0042724 in Ā».Ā«:
U .
* fix RemoveSuperfluousVMov if the VMov destination reg is an integer register, resolved
0035978
+ VMovVMov2VMov optimization
* factored out inlinenode check whether it may have a side effect
o also added register assert as having a side-effect (if asserts are
enabled)
m68k: fpu capabilities support
Avoid range check error for avr/i8086 CPU by changing local variable dist type to asizeuint
+ added and implemented the TNewExeRelocationList class
+ added a getter for the NewExeSegmentFlags property, that returns the
nesfHasRelocationData flag according to whether the Relocations list is
non-empty
m68k: added more cpu capabilities. changed the CG at a few places to actually use them
m68k: rework of the inline nodes to use fpu_capabilities. added fast path for round/trunc (enabled for fastmath only)
* support unique copies of currencies which are handles by torddef, resolves
0036013
+ FMA support for aaarch64
+ AArch64: support for vX.8b/vX.16b register names
+ support for more than 256 registers in the register dat files
- removed totherregisterset
+ AArch64: use vmov to load immediates if possible
+ AArch64: use eor to clear mm registers
+ small command line tool for quick creating of vfp register list in a64reg.dat
somehow committing went wrong, second part of last commit:
+ AArch64: support for vX.8b/vX.16b register names
+ support for more than 256 registers in the register dat files
- removed totherregisterset
+ AArch64: use vmov to load immediates if possible
+ AArch64: use eor to clear mm registers
* another missing part of
0042916 ...
* avoid that -0.0 is handled by the eor optimization
m68k: try to optimize realconst operands into B/W/L sized integer operands. these are shorter to encode - which almost always means faster on m68k
+ AArch64: FoldShiftProcess optimization
m68k: refactoring to use fpu_capabilities at more places instead of hardwiring certain fpu types
m68k: refactor some code to not fail when the tasmop set will be bigger than 256 elements
m68k: added the most important FPU instructions with explicit rounding precision (eg. FSADD/FDADD)
m68k: added the remaining instructions with explicit rounding precision. fixed fsflmul to be fsglmul (this is also typo in the original 68k PRM)
m68k: more refactoring for fpu_capabilities instead of hardwired fpu types. 68040 and 68060 fpu types should now work
Suppress range check/invalid typecast errors when compiling with -CriotR option
m68k: added some handling for the explicit precision FPU instructions in the spilling and optimizer. fixed a_fsabs and a_fdabs names
m68k: make sure we're not trying to allocate a subregister for float paras when R_SUBWHOLE <> R_SUBNONE
m68k: use cpu_capabilities when deciding to inject scaling into a ref. also allow scaling in more cases.
m68k: cleanup of the ancient mess from cgsize2subreg
+ AArch64: CMPB.E/NE2CBNZ/CBZ optimization
+ AArch64: implemented TCpuAsmOptimizer.OptPass1Data
+ AArch64: FoldShiftProcess fixed
m68k: added CPUM68K_HAS_BYTEWORDMATH and CPUM68K_HAS_INDEXWORD capabilities
m68k: build fix (premature commits are the root of all evil too)
* support taking the address of labels defined in assembler blocks in the
LLVM code genrator (for the rtti unit's thunk hacking)
* different definitions for the same Objective-C class (can happen with
external class declarations) need a type conversion in LLVM (because
they're represented by different LLVM types)
+ AAarch64: TCpuAsmOptimizer.OptPass1Shift makes use of RemoveSuperfluousMove
+ AArch64: implementation of taarch64casenode.genlinearlist
* document how tgotonode/tlabelnode copying works
* fixed loading the address of a copied labelnode in a loadnode
(mantis
0035877)
* fix potential crash with copied goto nodes on nestedparentfp platforms
o as described in the comment for the tgotonode.labsym field, it will
be null for copied gotonodes
* changed resulttype and firstpass processing from recursion into loop, based
on patch/idea by J. Gareth Moreton (as part of his patch in
0035857)
* fixed occasional rounding error with currency constants on the LLVM targets
(fixes test/tcustomattr13.pp)
+ add "thunk" attribute for stubs/thunks and emit it for LLVM
- also removed wrong "noreturn" attribute for interface thunks generated
for high level code generator targets
* cutils.pas (size_2_align): Move to..
globals.pas (size_2_align): ...here.
Change parameter type to asizeuint to avoid overflows.
(var_align_size, const_align_size): Also change parameter type to asizeuint.
i386/cpupara.pas, i8086/cpupara.pas, x86_64/cpupara.pas: Add globals
to implementation uses clause because of size_2_align move.
* assemble.pas (TInternalAssembler.TreePass0): Avoid range/overflow check error.
(TInternalAssembler.TreePass2): Check that objsymend and objsym are in same section
and avoid range/overflow check error.
m68k: add subregisters. on 68k, these are not as universal as on x86 and work differently, but the compiler needs this infrastructure to do 16bit math (which is a massive improvement on '000) or word-size indexes on CPUs which support it
m68k: allow vecnode to use word size index registers
m68k: also handle OS_64 register sizes in cgsize2subreg
* try to avoid to use pic based calls
* if we load a got depends only if one is needed, not if PIC is generated as this could be also caused by tls support
+ x86-64: implemented support for relocation needed by tls threadvars in the binary elf writer
* we have to use __tls_get_addr from the dyn. linker lib else tls on programs with pure pascal dyn. libraries fail
+ support tls threadvars with the internal assembler
+ command line switch -CV to select the threadvar model for section threadvars
* section thread vars need to be access with the symbol type AT_TLS
* loading a got depends only on the fact if a got is needed and not if pic shall be generated
* the general section threadvar model needs a got but pic is not required
* be able to set an AT_* for datablocks
* set AT_TLS if needed
* fix LLVM compilation after
0043076
* add "readonly" attribute for constant pointer parameters on LLVM
* finally implement tdynamicarray.equal so that exact match comdat sections work as well
* disable the use of C-operators inside the compiler's sources
* renamed tls model switches and symbols to match gcc
+ new relocations for arm tls
+ tls models tlsm_general_dynamic and tlsm_local_exec for arm
* it must be decided in g_maybe_tls_init if a tls is loaded
+ support for the gnu2 general-dynamic tls model on arm, use it instead of the gnu one as the gnu2 one can be relaxed (access optimizations by the linker)
+ support pic relocations in the internal assembler writer
* it must be decided in allocate_tls_register if a tls register is allocated
* general-dynamic -> global-dynamic
* arm-linux uses dwarf debug info by default
+ dwarf support for tls threadvars
* several linux targets switches from stabs to dwarf
+ support for arm attributes
* abi notes fixed
* compilation of x86 and PowerPC fixed
* reduce amount of software floating point exception checking, VSTR, VMOV, VLDR do not raise those
* moved array stride back to array entry (mantis
0036144)
* fixed peephole opitimizer removing some infinite loops (mantis
0036139)
+ x86: LeaLea2Lea optimization
+ LeaCallLeaRet2Jmp optimization
+ makefiles use -Sew, so added to the project as well
* updated for new format
* fix Dwarf 3 array location broken in
0043171 (fix by Martin Friebe,
mantis
0036144)
* don't try to bitpack arrays of non-ordinals (mantis
0036157)
* give an error if an explicit enumeration valid exceeds the valid range, resolves
0034633
Fix parsing error in GNU linker script, KEEP needs braces
* i386: with a fixed stack, exception handling does not need a frame pointer
* change TObjData.sectiontype2options to a class function so that it can be called without an instance of TObjData
+ add a method to TObjData to retrieve the TSectionProcBits and TSectionFlags values for a given section type
* fix for Mantis
0036174: correctly initialize secprocbits and secflags given the section type
* generate better code for length(
)=0, resolves 0036060
* fixed compilation for Darwin and AIX after addition of section attributes
* optimizing length()=0 is not possible for jvm
* fixed i8086 compilation after
0043265
Merge: 5bfebeea4e 99d44ce40e
-- Zusammenführen von
0042725 bis
0043306 in Ā».Ā«:
A tests/webtbs/tw32219.pp
U tests/utils/avx/avxopcodes.pas
U tests/utils/avx/asmtestgenerator.pas
U compiler/i386/i386tab.inc
U compiler/i386/i386nop.inc
U compiler/i8086/i8086tab.inc
U compiler/i8086/i8086nop.inc
U compiler/x86_64/x8664tab.inc
U compiler/x86_64/x8664nop.inc
U compiler/x86/aasmcpu.pas
U compiler/x86/x86ins.dat
U compiler/x86/rax86.pas
-- Aufzeichnung der Informationen für Zusammenführung von
0042706 bis
0043306 in Ā».Ā«:
U .
Fix compilation error for i8086 cpu target
Change parent class of trv32aatreader to trvattreader
+ include -Avasm into the help screen
morphos: in SDK 3.14, the binutils is finally upgraded to 2.32 (from 2.9.1), which makes section smartlinking working with binutils, and also has finally properly working stabs relocations for lineinfo, etc. so it's the default again both cross and native compilations
* more precise estimation of subscript node complexity
* load nodes for variables in registers do not generated instructions, so their complexity is zero
* clean up TX86AsmOptimizer.OptPass1MOV
* optimize TAOptBase.SuperRegistersEqual
+ MovMov2Mov 6 and MovMov2Mov 7 optimization
* fix length(
)=0 optimization, resolves 0036215
* also type casts to booleans benefit if unneeded type widenings are removed
* fix compilation on PE/COFF based systems with GNU AS as there the progbits are not supported
* fix for Mantis
0036223: when parsing a helper type its extendeddef might be Nil
+ added test
* avr: apply LdiOp2Opi optimization also to and and sub
+ add a Flush method to TExeMap which is useful when debugging internal errors or crashes where the exemap instance has not yet been destroyed
* allow cmov with memory reference if it is a pure symbol or a rip relative symbol: as the symbol is
allocated within the image of the program, this should never cause a seg. fault, so it is save
to use cmov with it
* unified TX86AsmOptimizer.OptPass1MOVAP and TX86AsmOptimizer.OptPass1VMOVAP
* CallRet2Jmp works with PIC
* more aggressive LeaCallLeaRet2Jmp
Avoid warnings for m68k compiler
* replaced tentryfile.get/putsmall/normalset() with a common tget/putset
that expects an open array of byte, and use it for all sets
o since all sets need to be typecasted to an array type of the appropriate
size, we'll get a compilation error in case this needs to be done and
that also tells us at the same time that the ppu version will need to
be increased
* enabled {$packset 1} for the compiler, as this is now safe with the above
changes
* do not allocate an extra register for some integer operations if not needed
* removed accidently committed debug statement
* update generic linker script
* do not write section flags/progbits for .data, .rodata .data.norel as the compiler will ignore them anyways and warn about it
* parameters declared as out must be initialized
* fixed default value for progbits
+ MIPS: take care of setnoat
* read more types of references properly
* patch by J. Gareth Moreton, issue
0036271, part 1: general rework of the jump optimizer
* patch by J. Gareth Moreton, issue
0036271, part 2: x86 specific rework of the jump optimizer
* patch by J. Gareth Moreton, issue
0036271, part 3: support for the other architectures
Merge: e1e8986462 47bb71efc4
-- Zusammenführen von
0043307 bis
0043443 in Ā».Ā«:
D tests/webtbs/tw32219.pp
U compiler/i386/i386att.inc
U compiler/i386/i386atts.inc
U compiler/i386/i386int.inc
U compiler/i386/i386nop.inc
U compiler/i386/i386op.inc
U compiler/i386/i386prop.inc
U compiler/i386/i386tab.inc
U compiler/i8086/i8086att.inc
U compiler/i8086/i8086atts.inc
U compiler/i8086/i8086int.inc
U compiler/i8086/i8086nop.inc
U compiler/i8086/i8086op.inc
U compiler/i8086/i8086prop.inc
U compiler/i8086/i8086tab.inc
U compiler/x86/x86ins.dat
U compiler/x86_64/x8664ats.inc
U compiler/x86_64/x8664att.inc
U compiler/x86_64/x8664int.inc
U compiler/x86_64/x8664nop.inc
U compiler/x86_64/x8664op.inc
U compiler/x86_64/x8664pro.inc
U compiler/x86_64/x8664tab.inc
U tests/utils/avx/avxopcodes.pas
-- Aufzeichnung der Informationen für Zusammenführung von
0042706 bis
0043443 in Ā».Ā«:
U .
* swapped decrefs and StripLabelFast as proposed by Gareth on the mailing list
* fix and improve MovImul2Imul: we cannot insert the move target into imul if the imul is 64 bit and the mov 32 bit as
we cannot ensure that the upper 32 bits of the move target are really clear
* load left properly into a register in tx86addnode.second_addordinal, resolves
0036287
* packed tabstractvarsym.addr_taken/different_scope fields into a set
* patch by J. Gareth Moreton to clean up TX86AsmOptimizer.OptPass2Jcc, resolves
0036295
* improve ShlAddLeaSubIncDec2Lea to take care of foldable LEAs
* patch by J. Gareth Moreton: fix compilation with debug info after
0043441 and friends, resolves
0036299
+ LeaOp2Op optimization
* replaced some manual removels of p by RemoveCurrentP calls
+ added comments for LeaOp2Op
* be carefully with references using RIP when doing LeaOp2Op optimizations
* check in the internal assembler for references with incorrect use of RIP
+ test
* do not remove cfi_endproc after jmps
+ separate JUMP_DEBUG define
* i386 does not use anymore its own assembler optimizer loops
* i386: more clean up of TCPUAsmOPtimizer.PeepHoleOptPass1Cpu
* patch by J. Gareth Moreton: fix building for armv6m after
0043441
* disable condition jump optimization on MIPS for now for the time being
* optimization Move removed 4 fixed
* fix usage of ppumove generated shared libraries
* values passed to const parameters are not limited to registers and constants
* relax conditions in tcallnode.optimize_funcret_assignment, resolves
0036279
* MM registers which might not be changed can be still used in 3 op mathematical operations as source
Fix invalid typecast revealed by -CriotR by changing order of terms in boolean expression
o patch by J. Gareth Moreton:
* fix jump optimizer for MIPS(EL).
+ New method called "MakeUnconditional" introduced that can do platform-specific changes
* do not generate conditional jump with full references
+ more assembler optimizer output
+ patch by J. Gareth Moreton: new method TAOptObj.CanDoJumpOpts and arm specific implementation
* write assembler optimizer messages into output file if DEBUG_AOPTOBJ is set
Use same entered_paren local variable as 64-bit counterpart and fix register names
Fixes by Gareth Moreton for problems exposed by use of -CriotR option
* make use of RemoveCurrentP
* also generate indirect symbols for AB_PRIVATE_EXTERN symbols as these might be used from a unit in another package due to inlining
* ensure that nothing assembly related is generated for generics when a typed constant (this also includes local variable initializations) are parsed
* restore localswitch settings after the initialization and finalization code was generated
* reference FPC_ABSMASK_SINGLE/-DOUBLE using the indirect symbol if required for dynamic packages
* register constant symbols
* symbols called by g_call might need to be imported from dynamic packages as well
* check the localswitches of the node instead of the global ones
* correctly check for the system unit
* ensure that generic symbols are not tried to be exported
* when creating the static field of a generic, insert it into the generic instead of the global symtable as it isn't really used anyway
* the VMT of the exception class needs to be referenced indirectly
* keep track of static symbols that a global function references, as those must now be exported from a dynamic package as well if the function can potentially be inlined
* the symbol of the interface wrapper function needs to be considered as referenced as well
+ add a description for the link_e_comdat_selection_differs message
+ add error messages for undefined symbols (both with a known object file and without)
* regenerate msg*.inc files after adding new error messages for undefined symbols
* use translateable error messages for undefined symbols and also report in which object file the symbol was first found
* fix condition for including a unit's object files or not when compiling with packages
* use a different name for the packages' entry point and use _DLLMainCRTStartup as an alias to avoid problems with the C-prefix
* ensure that the required functions are referenced for Win32 SEH for packages as well
Patch by Gareth Moreton.
* TAOptObj.CollapseZeroDistJump: Change hp1 to local variable,
initialized as p.next, to avoid problems of dangling pointers
revealed by use of "-CriotR -O2" compilation arguments.
Use correct macro to for 64-bit riscv CPU
Minimalist change to avoid Invalid Typecast error on class when compiled with '-CriotR -O2' for i386-go32v2 target
o patch by J. Gareth Moreton, resolves
0036352:
* The supplied patch cleans up some vestigial code from the i386 peephole
optimizer that has since been superseded by the jump optimisations over
at
0036271.
* The PrePeepholeOptsCPU method has had a minor restructuring to better
handle the rare case where InsContainsSegRef() returns True and
p becomes something that is no longer an instruction (it ultimately
removes a conditonal check and some overhead from repeated function calls).
* factored out TX86AsmOptimizer.OptPass1Cmp
* fixed it
* activated it for x86-64
- removed code not used for years
* more RemoveCurrentP usage
+ optimize integer expressions like 2*x*4; which were not found by the node simplifier yet
* cleaned up safecall support: use a hidden localvarsym instead of result
register hacking
o this also allowed fixing/adding safecall support for LLVM
o patch by J. Gareth Moreton:
* adds an extra optimisation to "PostPeepholeOptMov" in compiler/x86/aoptx86.pas:
If the instruction "MOV REG, -1" (Intel notation) is found, where REG is either
a 32- or 64-bit register, it is changed to "OR REG, -1" instead.
The effect is the same and takes exactly the same speed to execute, but the encoding is much smaller.
As it cause false data dependencies, it is only applied in -Os mode
For 16-bit registers, only AX is optimised this way because it has its own encoding for OR that takes fewer bytes.
* fixed safecall for non-LLVM after
0043578
* fix Linux/i386 and Win32 after
0043578
* treat a missing genericdef with no symname set as an internal error
- the error recovery handling is no longer required
* warn only in delphi mode if an explicit enumeration value exceeds the range, relaxes
0043191
o patch by J. Gareth Moreton, resolves
0036355
+ This patch serves to extend the JMP -> RET optimisation in OptPass2JMP by also doing the same
for JMP -> MOV/RET, since there are often cases where the result (e.g. EAX) is set just
prior to the function exiting.
* RemoveDeadCodeAfterJump will now drop out if it detects SEH information -
this stops exception information from being stripped if it is called on the final RET instruction.
o patch by J. Gareth Moreton, seeks to improve maintainability, safety and efficiency
in the peephole optimizer by slightly modifying some function headers based
on their intended purpose, resolves
0036353
* Non-virtual methods and class methods that don't need to access any fields from
the current object are now static methods, thus removing the hidden "Self"
parameter and reducing overhead. This includes a large number of
frequently-used functions such as SkipEntryExitMarker and SuperRegistersEqual.
* GetNextInstruction, GetLastInstruction, SkipEntryExitMarker and
SkipLabels have had their 'var' parameter changed to an 'out' parameter because
they shouldn't depend on its input value. This will cause the compiler to throw warnings
if you start using the value without initialising it first, and may open up optimisation
opportunities in the future (e.g. storing written values in a temporary register
and only writing it to the actual variable when the routine exits).
* do not convert cmp 0,... into test ...,... before the post pass of the peephole optimizer
as this conversion might result in missing further optimizer opportunities
Also accept -a5 for older binutils for mips and mpisel cpus
Add '.module nomips16' at assembly entry for mips/mipsel unless -a5 option is used
Fix trv32notnode, by using same code as for riscv64 CPU
Change parameter type to tcgint for is_imm12 and is_lui_imm functions to avoid range check errors
* unified internalerror, resolves
0036378
* patch by J. Gareth Moreton: x86 implementation of RegModifiedByInstruction, resolves
0036376
* better error recovery, resolves
0036377
Add explicit smallint typecast to first marameter of SarSmallint call to avoid range check errors
Comparison nodes are always in LOC_REGISTER, never in LOC_JUMP for riscv32 or riscv64 CPUs
* use tdef.unique_id_str to generate the unique internal name for anonymous record defs as using the count of the deflist is no longer correct
* adapt register if the size of the paraloc and the register differ, resolves
0034409
* simplified and improved TX86AsmOptimizer.RegModifiedByInstruction
+ add a method to tdef to initialize the defid from within a constructor
* initialize the defid in trecorddef.create_global_internal as unique_id_str needs it
* apply (adjusted) patch by Blaise.ru: vmtentries is always created since 2008, so treat it as such (also fixes a memory leak in tobjectdef.getcopy)
* apply patch by Blaise.ru to remove last remnants of VMT regeneration which is no longer needed/used
* better error recovery, resolves
0036397
* check in CheckLive* if a register allocator is initialized for a certain register type
o patch by J. Gareth Moreton, resolves
0036371:
* This patch makes some minor improvements to the cross-platform code that deals with jump optimisations.
More specifically, it attempts to do more in a single pass which has the nice side-effect of
fixing a couple of minor mistakes (in some situations, it would erroneously remove an alignment entry).
- Most improvements are with dealing with Jcc/JMP pairs and their equivalents on other platforms, by
collapsing label clusters and stripping dead code as soon as it has enough information to do so, and being
more intelligent before calling Continue to see if another optimisation can be performed in the same sitting.
- RemoveDeadCodeAfterJump is now a function that returns True if a jump was found among the dead code,
thus allowing the ability to flag the peephole optimizer for another iteration of Pass 1 - the
destination label may have appeared earlier in the code and become dead as a result of the removal
of the jump, thus opening up new optimisations with instructions that sat either side of the label.
- Preliminary tests show that it does sometimes reduce the number of passes required to optimise a subroutine
under -O3.
* fix J. Gareth Moreton to resolve
0036389
* Remove duplicate ibextraheader handling.
* Move SymAnsiStr boolean setting inside parseextraheader function.
* Only accept same CurrentPPULongVersion in parseextraheader function.
* TVMTBuilder.build_interface_mappings does not need to be public (based on patch by Blaise.ru)
* move the common sequence to build a VMT for an objectdef into a separate procedure (based on a patch by Blaise.ru)
* clear up file comment (based on patch by Blaise.ru)
* more correct method names (based on patch by Blaise.ru)
* fix number of last parser_* message entry
* use value_real rather than value_curency when writing currency
realconstnodes (fixes tcurrency1, tw33439 and tw36179 with LLVM)
o we need to load the fpu representation of the currency values,
not the scaled currency value
- removed LLVM support for clang < 7.0 and Xcode < 10.0: those versions
contain various bugs and can't even complete "make all", so there is no
point in keeping them
o changed default LLVM target version to 7.0
* regenerate msg*.inc files after adding a new error message related to C blocks
+ recognise LLVM 9.0 (no changes needed compared to LLVM 8.0)
* patch by J. Gareth Moreton to fix an ie 2018061400 on darwin
* in PeepHoleOptPass1Cpu when an instruction contains a segment, don't replace the current instruction with the next, cause then we get an infinite loop when compiling on Win32 with -dTEST_WIN32_SEH -O4
+ MULX instruction
* change information for RORX corrected
+ make use of mulx instruction, if available
* patch by Bart Broersma to allow to declare "LongInt = AnsiString" comparison
operator in non-macpas modes, resolves
0029460
* do not crash when an unsupported code page is encountered, resolves
0035581
* optimize case statements with a single branch into if statements (ord const only)
* last commit was not complete/earlier version committed
* common naming for fpu_none string
+ tf_init_final_units_by_calls
* arm-embedded generates direct calls for unit init/final now as well
* renamed getintparaloc to getcgtempparaloc
o it can be used for more than integer parameters
* support for marking arraydefs as vectors
* LLVM support for writing vector types
* fix paraloc def for vectors with vectorcall calling convention (was a single
element instead of a vector)
* fixed writing of calling convention for function declarations/definitions
in LLVM
* added is_normal_fieldvarsym() helper and use it
o fixes several places where there was a check whether something is a
fieldvarsym, but not whether it's an instance rather than a class field
* increase support for multilib binutils for RISC V by passing the ABI to the assembler
* increase support for multilib binutils for RISC V by passing the correct ABI to the linker
* correctly handle local reference in the RISC V assembler readers (both 32 and 64 bit)
* when copying goto nodes take care if the label node is part of the copied tree
or not, resolves
0035820
* write a proper error message if
/ is encountered while no
floating point support is available, resolves 0032006
* use 64 bit code page in tppcshlshrnode.pass_generate_code for all 64 bit types,
resolves
0033582
* correctly handle reading of class/object pointers in combination with @, resolves
0026326
+ support for LLVM metadata constant string parameters
o they are implemented as a new metadata register class, whereby the
subregister indicates the metadata type (currently always a string)
and the superregister is an index in the metadata array (which
contains the strings). LLVM metadata can only be passed as parameters
to intrinsics in bitcode, so moves of metadata into other registers
triggers internal errors and when moving them into parameters, we
replace the parameter's register with the metadata register (and look
up the corresponding string when writing out the bitcode)
* support nf_internal to ignore currency conversion adjustments also on
platforms that implement currency using a floating point type
* record whether a function uses fastmath, and define the function as
strictfp if it doesn't (so LLVM doesn't perform transformations that can
change the fp/exception behaviour)
* use constrained LLVM fp intrinsics for add/sub/mul/slash/fma/sqrt
operations when fastmath is not enabled
* use LLVM constrained fpext/fptrunc intrinsics when fastmath is not enabled
for accurate exception behaviour
* fix LLVM code generator after
0043808
o share the high/length code for LLVM rather than duplicating it, since
LLVM will optimize away the minor inefficiencies
o removed temp reference in the old code, as it was useless (it doesn't
prevent spilling to get to an SSA representation since the same
register is written at least twice in all cases)
* set default target iOS/iPhoneSim version to 9.0 so we no longer depend
on crt.o existing, which is not shipped with the current SDKs anymore
* unified loadnf_load_self_pointer into loadnf_load_addr
+ var parameters are now allowed when doing tail recursion optimziation, resolves
0032811
-- Zusammenführen von
0031198 in Ā».Ā«:
C compiler/arm/aasmcpu.pas
U compiler/arm/aoptcpu.pas
-- Aufzeichnung der Informationen für Zusammenführung von
0031198 in Ā».Ā«:
U .
* the llvm.experimental.constrained.fpext intrinsic doesn't have a rounding
mode parameter
* support for constrained sitofp/uitofp with (the upcoming) LLVM 10.0
(fixes most of test/units/math/troundm, although there's still an LLVM
optimizer/code generation bug that breaks some qword -> double
conversions)
* use maytrap instead of strict FP exception behaviour in LLVM, so constant
propagation is still allowed
* fixed missing sign extension when adding a signed integer variable with
size < sizeof(pointer) to a pointer for LLVM (fixes tfmtbcd)
* fixed (harmless) wrong typecast
* fixed TAOptBase.SkipEntryExitMarker() not initialising out parameter in
all cases (patch by J. Gareth Moreton, mantis
0036372)
* Add riscv-embedded to targets that don't support non-constant leb128's.
* triggered by
0036505, removed CmpJxxDecJmp2SubJcc optimization as it was wrong anyways
* look further forward in TX86AsmOptimizer.OptPass1_V_MOVAP
* x86: avoid to put variables into registers if they are handled by the x87-FPU
+ MovMovMov2XChg optimization by J. Gareth Moreton
* copy fpu parameters using fld/fst onto the stack
* fixes TX86AsmOptimizer.OptPass1_V_MOVAP after
0043855
* avoid invalid type cast
* let the operation do the type conversion for x87 floating point operations
* Fixed safecall on win32 with -Ooregvar by making sure that $safecallresult
is never stored in a register.
+ infrastructure to profile different stages of the compiler
* missing part of last commit
* fix X86AsmOptimizer.RegModifiedByInstruction for VMOVSS/VMOVSD/IMUL
o patch by J. Gareth Moreton:
* applies some optimisations to OptPass1MOV. Repeated checks to the "GetNextInstruction_p Boolean"
variable are factored out, since all of the optimisations bar the first one require a
succeeding instruction.
* add forgotten exits, fixes
0043874
* do prefetching correctly
* more prefetching inserted
* unnecessary/wrong UpdateUsedRegs removed
* fixed for targets where currency is implemented via int64 after
0043829
* AArch64: fixed parameter defs for smallsets passed in registers whose size
is not a power of two
* handle non-smallset sets in registers in LLVM like arrays and records
* constrained sitofp is not yet supported in LLVM for all targets
* LLVM/AArch64: don't perform the parameter location extension workarounds
for LLVM, as that results in LLVM assuming exactly the opposite of
what's intended (namely that the extended locations contain valid
rather than invalid bits)
* accept locals replaced by symbols in inline assembly by the LLVM code
generator in the AArch64 assembler writer
* explicitly emit a sub instruction in tx86inlinenode.second_high, resolves
0036530
+ CalcUseSum: calculates a sum of all use sets of the current node and its children
* renamed sum -> defsum to avoid confusion with usesum
* factored out tcgprocinfo.OptimizeNodeTree
* moved conversion of for into while loops in a separate pass, so node optimizations on the node tree can be
carried out without losing information from for loops
* some fixes to loop strength reduction
* more fixes for loop strength reduction
* patch by J. Gareth Moreton: EAX -> EDX:EAX sign extension shortcuts, and MOVSX shortcuts for AX register, part 1 of
0036551
* patch by J. Gareth Moreton: EAX -> EDX:EAX sign extension shortcuts, and MOVSX shortcuts for AX register, part 2 of
0036551
* patch by J. Gareth Moreton: Some cleaning up of OptPass2JMP and OptPass2MOV, resolves
0036553
* compilation on i386 fixed
* ensure the rtl and the packages for embedded compile with features exceptions and classes disabled
- Handle jump optimizations on RISC-V
- RISC-V: Share optimizations between 32 and 64-bit.
- RISC-V: Add controller types for common RV32 MCUs.
- Adds initial controller units for these MCUs.
Code contributed by Michael Ring
* first part of merging parts of Jeppe's intrinsics patch, mainly
0031135
is merged by this commit with a lot of adaptions
* voidcodepointertype => voidpointertype as suggested by Pierre
* do for-loop unrolling after for-loop simplification, resolves
0036589
* patch by J. Gareth Moreton: get rid of another pass through the assembler list by integrating OptReferences
into the post optimizer pass
+ insert alignments after break/goto/exit/continue jmp instructions, if it is
superfluous, the assembler optimizer will take care of it
* enable tail recursion optimization also for const and constref open arrays
+ added test
* also allow by-value open array parameters for the tail recursion optimization
* adjusted test
* fix for
0032352: a unit does not need to be re-deref'ed if it just had been recompiled
* patch by Robert Roland to support the RaspberryPi 2 as a bare metal embedded target, resolves
0035236
* take care of m_duplicate_names when checking for duplicate locals, resolves
0033221
* patch by J. Gareth Moreton: x86 CMP/TEST/Jcc optimisations, resolves
0036624
* patch by J. Gareth Moreton: x86 SUB and LEA optimisations, resolves
0036622
* avoid internalerror for dec/inc(...,v) with v>high(int64), resolves
0035298
* do_loopvar_at_end is not possible if the loop counter would overflow with
the last iteration
* last commit fixing calculation of do_loopvar_at_end was not complete,
hopefully finally fixed
* take care of for loop counter read after loop
+ in some language modes the loop counter is undefined after the loop by language definition
* do not throw a warning about unreachable code if the responsible node was generated internally
*
0042239 broke the tw13948b test for aarch64. Fixed this and improved the test.
* Removed lot of unused local vars. It is useful to turn on the notes in options. :)
* Removed inline since it is not supported with open array parameters.
* improve LeaLea2Lea optimization
* fix internalerror if adding the object info for LLVM requires creating new defs
* disable cs_opt_regvar on all platforms when compiled for LLVM (LLVM does
that itself, our LLVM code generator can't handle it, and if it did then
afterwards we would have to spill 90% of those register variables again
to make them SSA)
* use same Windows platform name as clang
* never inline routines that call get_frame (otherwise get_frame would return
the frame of the caller rather than of the current routine, which could
cause e.g. stackframes to be missed in RTL helpers that are known to be
only called from run time error routines)
+ new pio_inline_forbidden flag to indicate that while parsing the
implementation the compiler determined the routine must never be
inlined
o difference with po_noinline: can also be set in the implementation
o difference with pio_inline_not_possible: it indicates that e.g.
LLVM must not inline the routine either
* safecall support is meanwhile generic, so enabled for all linux targets
* might_have_sideeffects takes care of absolute
* when optimizing boolean expressions, might_have_sideeffects is only relevant if the expression would be optimized away
+ might_have_sideeffects takes care of vo_volatile now (it is not exposed yet)
* patch by J. Gareth Moreton: x86 "OptPass1MOV" improvements - Part 2, resolves
0036608
* armhf/armel aligns sections to 16 byte, so allow a maximum c alignment of 16
* fixes copying of tcgpara
* fix PowerPC compilation
* patch by J. Gareth Moreton, avoid illegal MovAdd2Lea and MovSub2Lea optimziations, resolves
0036630
* added information about -M allowing to specify modeswitches
* patch by J. Gareth Moreton: CMOV extensions: frame/stack pointer relative references are always valid, resolves
0036675
* patch by J. Gareth Moreton: conditional Jump Inversion stoploop variable, resolves
0036680
Modify code to avoid error when compiling with -CriotR option
* patch by J. Gareth Moreton: deadstore removal improvement, resolves
0036669
* Fixed
0043577 for cases when the size of the new result of a simplified node after typecheckpass is smaller than the size of the original node's result. This caused internal errors or invalid assembly in some cases. Issue
0036587.
* patch by J. Gareth Moreton: processor-aware MOVZX optimisation cleanup, part one of
0036687
* fixed Mov2Movz optimization
* simplified TX86AsmOptimizer.OptPass1Movx
* patch by J. Gareth Moreton: cleanup TX86AsmOptimizer.OptPass1MOV after DeepMov changes, first part of
0036670
* do not fold constants if the resulttypes do not match, improved fix for #tw26587
* patch by J. Gareth Moreton: cleanup TX86AsmOptimizer.OptPass2MOV after DeepMov changes, second part of
0036670
* fix for Mantis
0036652: gracefully handle the error if one tries to implement a method of a type from another unit
+ added test
* regenerate msg*.inc after last commit
* do not allow constraints in headers of procedure implementations in delphi mode, resolves
0036584
* better error message if a constraint is found at a wrong location
* make maxpushedparasize a SizeInt: it must store an address size and not an alu value
* set nf_* correctly when an inc/dec node is converted into an add/sub node
* do not firstpass during dead store removal as it disturbes the for each calls
+ propagate constants across call nodes
* patch by J. Gareth Moreton: optimize MOVSXD as well, resolves
0036700
* fix global generic functions with constraints in mode Delphi by handling implementations with defines outside of parse_generic_parameters
+ added tests
* there is no exit stackframe needed if a subroutine never returns
+ CallRet2Call optimization
* (V)MOVA*(V)MOVS*2(V)MOVS* 1 optimization
* fixed tdel1/2 tests again for AArch64/LLVM
* AArch64 and i386: omit exit stackframe, same as
0044191 for x86-64
* in case a 32x32 -> 64 multiplication is converted into shl, the type casts need to be restored
* fold also pointer additions/subtractions
+ AAarch64: optimize divisions by constant
* revert accidently committed code
Fix linking error, in which libc.so.6 is not found on aarch64-linux when libdl.so is loaded, by adding appropriate directory
+ AArch64: profiler support for aarch64-linux
* reverted accidently committed changes again
* throw an error if the forward interface type and the actual interface type do not match, resolves
0036720
* (modified) patch by J. Gareth Moreton: processor-aware MOVZX optimisation cleanup, resolves
0036687
* debug statement removed
* track used register better: if a deallocation is moved/removed, the used register may not be removed from the current register used register set
* LeaCallLeaRet2Jmp is done in TX86AsmOptimizer.PostPeepholeOptLea
+ GetNextInstructionUsingRegTrackingUse
* better MovAnd2Mov optimization
+ TOptsToCheck to track expensive optimizations, needs more work
* ARM: optimize mov rX,#0 .... mul/mla/umull ...,rX,...
+ ARM: MovMLA2MUL optimization
* ARM: look further ahead when optimizing mov rX, yyyy
* ARM: fix Mov0 and MovMLA2MUL optimizations
* several fixes to get better reg. allocations in the arm assembler optimizer
+ take care of addn and subn in is_loop_invariant
* improve is_loop_invariant for load nodes
* CallRet2* optimization may not misalign the stack, reported by C Western on fpc-devel
* fixed JccAdd/Inc/Dec2*Adc/Sbb optimizations
* calculate complexity of an rtti node correctly
* more use of RemoveCurrentP(p)
* fix precedence of IS operator, resolves
0035909
+ JccAdd2SetccAdd optimization
* take care of C_C/C_NC in JccAdd/Inc/Dec2(Cmc)Adc/Sbb
* simple record accesses have not side effects
* do not do full boolean evaluation on LOC_FLAGS
* fix Peephole Optimization: Cmpcc2Testcc - condition AE/NB/NC/NO --> Always optimization
movhlps/movlhps only take xmm registers.
Handle spilling of SSE registers.
Add most SSE instructions as intrinsics.
* Show message about creating fppkg/conf.d directory
* add FreebSD to weaklinking targets.
+ OptimizeForLoop: convert for-loops into zero-based backward for-loops if possible, for most architectures, this results in simpler code
+ Xtensa: register information
+ Xtensa: lazarus project
+ Xtensa: initial skeleton completed
+ xtensa-embedded support in the compiler
+ Xtensa: support in the build utilities
* Xtensa: completed compiler skeleton
+ Xtensa: basic operations for Xtensa implemented
* Xtensa: initial controller types
+ Xtensa: a_loadaddr_ref_reg implemented
+ Xtensa: CALL0 abi started
cgcpu: Implement a_cmp_reg_reg_label
xtensa: Add preliminary support for comparisons
tgobj: Change direction of stack.
makefiles: Add support for xtensa-embedded target.
+ Xtensa: tcgcpu.a_load_ref_reg
+ Xtensa: tcgcpu.a_load_reg_ref
+ Xtensa: tcgcpu.a_op_reg_reg
ncpuadd: Fix handling of signs in comparisons
+ Xtensa: tcgcpu.a_op_const_reg
+ Xtensa: tcgcpu.a_op_const_reg_reg
+ Xtensa: tcgcpu.a_op_const_reg_reg
+ Xtensa: make use of ADDI
* Xtensa: cleanup unused stuff
+ Xtense: updated conditions
+ Xtensa: tcgcpu.g_concatcopy
* Xtense: prettify assembler output
+ Xtensa: implemented tcg64fxtensa.a_op64_reg_reg
+ Xtensa: initial tcg64fxtensa.a_op64_reg_reg_reg
Add immediate/zero comparisons.
+ Xtensa: make use of slli and srli
xtensa: Add 64bit arithmetic operations.
* Xtensa: cleanup dummy code
+ Xtensa: tcgcpu.maybeadjustresult
+ Xtensa: initial tcg64fxtensa.a_op64_const_reg_reg, still room for improvements
+ Xtensa: tcg64fxtensa.a_op64_const_reg
+ Xtensa: initial implementation of tcgcpu.g_proc_entry
+ Xtensa: tcpuinlinenode.second_abs_long
* Xtensa: set correct frame pointer register
* Xtensa: fix load_reg/ref_reg/ref
* Xtensa: improve tcgcpu.fixref
* Xtensa: more fixes for load_reg/ref_reg/ref
+ Xtensa: initial support of the windowed abi
* Xtensa: generate long calls
* fix LLVM backend compilation (mantis
0036833)
* Xtensa: fix txtensanodeutils.insert_init_final_table for the windowed abi
* Xtensa: no scheduler yet but loops can be unrolled
* Xtensa: improved handling of calling conventions
* Xtensa: parameter passing for the windowed abi
Fix handling of parameters with size below the size of a full register
* Xtensa: proper code generation for unit initialization
* Xtensa: system_xtensa_embedded is an embedded system
* Xtensa: align literals properly
+ Xtensa: implemented tcputypeconvnode.second_int_to_bool
* Xtensa: fix tcpunotnode.second_boolean
+ initial FreeRTOS RTL support, largely based on the Embedded target, limited to Xtensa so far
* Xtensa: tcgcpu.g_concatcopy fixed: keep registers alive
* Xtensa: fix tcgcpu.a_cmp_reg_reg_label
* Xtensa: use generic tcpuparamanager.getcgtempparaloc
* Xtensa: fix TCPUAddNode.second_cmp
* fix ppudump after addition of freertos-xtensa
+ -XlS option to specify a suffix for externally called LLVM utilities,
e.g. -XlS-7 to call clang-7 instead of clang)
* IMPORTANT: changed the -CL llvm code generation options to -Cl, for
consistency with the new -Xl option (-XL was already taken)
* Xtensa: returning of 32 Bit values fixes
* Xtensa: shift operations fixed
* make TLinkerInfo fields ansistrings as xtensa-freertos needs long command lines
+ Xtensa: generate all helper files to fpc can successfully compile a single program
* xtensa-freertos: enable softfloat for now
* ESP32: set flash size to a resonable value (assumes external flash for now)
* Xtensa: spilling for bigger offsets fixed
* Xtensa: reduce stack usage
* Xtensa: FreeRTOS uses windowed calling convention
+ Xtensa: boolean registers * Xtensa: register numbers of floating point registers corrected
* Xtensa: set fpu type dependending on the controller
* add support for creating non-address-only procvars to
cprocvar.getreusableprocaddr()
* use tprocvardef.getreusableprocaddr also for non-address-only copies of
proc(var)defs
* use typenames in more cases in the generated LLVM IR (results in smaller
IR in textual form)
+ Xtensa: the boolean extension is used as flags
+ Xtensa: hard float support, i.e. make use of floating point extension if available
* factor out first_addfloat_soft
* Xtensa: fix passing of floating point parameters
* compilation for non-Xtensa targets fixed
* building on non-x86/non-xtensa fixed
+ basic xtensa-linux support in the compiler
+ xtensa-linux added to systems_linux
Fix ppudump after addition of system_xtensa_linux target
* better setting of expectloc
+ optimize SUB for small constants using ADDI
* improve assembler reader
+ initial thlcgxtensa.g_intf_wrapper
+ initial xtensa-linux rtl
* fix taicpu.is_same_reg_move
* Xtensa: properly align maxpushedparasize
* Xtensa: register numbers fixed
* Xtensa: fix flag handling: B0 is considered as default flags
* Xtensa: fix expectloc of taddnode
* Xtensa: patch by Christo Crause to handle the sign extension architecture option, resolves
0036885
* Add FPCBINDIR macro for paths
* Do not expand FPCBINDIR on darwin
* Use exepath on all platforms
* Use exepath on all platforms
* reorganized arm cpu flags
+ fpu_fpv4_sp_d32
* some fixes to make fpv4-sp-d32 work
* arm: more fixes for fpu_fpv4_sp_d16
* take care of FPUARM_HAS_VFP_DOUBLE
* use FPUARM_HAS_VFP_EXTENSION instead of checking fpu_vfp_first and ...last
+ arm: optimize sxth/sxtb
* fixes compilation on WinCE
* get rid of fpu_vfp_first/last hack
* load 0 into unaligned memory in a simpler way
* Aarch64: UTX/STX instructions include now the postfix, so it is the same as for ARM
Handle all existing possible values for init_settings.fputype to set Tag_FP_Arch .eabi_attribute
+ common assembler optimizer base class for arm and aarch64
* check for stup instead of stp
* factored out TARMAsmOptimizer.OptPass1UXTB
* several other routines being very similar for ARM and AAarch64 moved to aoptarm
Avoid invalid typecast in tarmunaryminusnode.pass_1 method
* factored out TARMAsmOptimizer.OptPass1UXTH
* AArch64: use TARMAsmOptimizer.OptPass1UXTH
* factored out TARMAsmOptimizer.OptPass1SXTB
* AArch64: use TARMAsmOptimizer.OptPass1SXTB
* factored out TARMAsmOptimizer.OptPass1SXTH
* AArch64: use TARMAsmOptimizer.OptPass1SXTH
* re-added assembler optimization accidently removed in
0044738 as noted by margers on the mailing list
m68k-amiga: hack to avoid a linker (vlink) warning about merging sections with different flags together. Amiga doesn't support true read only sections anyway
+ AAarch64: FOpFMov2FOp assembler optimization
+ AAarch64: assembler optimization Bl2B
* bail out early if possible
+ AArch64: TCpuAsmOptimizer.OptPass1Mov
* Xtensa: dummy overflow checking
* factored out and improved TARMAsmOptimizer.RedundantMovProcess
+ AArch64: use TARMAsmOptimizer.RedundantMovProcess
* go through cg to generate jumps, so the right jump is generated always
* use j.l in external wrappers, this is not save yet as A15 might contain
an argument: externals need to be called with call4 if they use all
parameter registers, this needs to be implemented
* Xtensa: generate better code for adding/subtracting 16 bit constants
* Xtensa: handle localsize > 32760
* TARMAsmOptimizer.RemoveSuperfluousMove should not mess with PC
* adapted xtensa-freertos to work with the currently stable ESP-IDF 4.0, partially based on a patch by Michael Ring
* Xtensa: make use of extui for shifting with constant values >=16
+ initial support for arm-freertos largely based on patch by Michael Ring
Add several missing -T options in help
* fix for Mantis
0036935: apply patch by J. Gareth Moreton to fix a typo in cs_opt_remove_empty_proc
* for PE+ specific checks use a constant in systems.pas instead of an explicit list (easier to extend this way)
+ implement relocations for Aarch64 for the internal COFF linker
+ implement initial compiler support for Win64 on Aarch64
+ add a GAS compatible variant of the Clang assembler (currently used for Aarch64-Win64 as no GNU AS exists for that target, yet)
* Windows does not support a GOT, so rely on page relative addressing
* Windows on AArch64 does not support ProgBits either
* Windows on Aarch64 requires a relocation section
* Windows on AArch64 requires some DllCharacteristics in the header to be always set
+ add functionality to store a node tree's required temp nodes and their flag upon entering the tree
- remove sectiontype2options overload for mach-O, because the relevant sections have the correct flags in the base method already
* it's rather useless that sectiontype2options is virtual as we can't use a class type, not to mention that the classes doing the overriding are for the internal assemblers/linkers, but we need it also for external
Thus we move the functionality of the overloads to the basemethod and remove the virtual directive; maybe we'll find a better solution in the future...
* rename the local sectionflags and sectionprogbits variables to the more clear usesectionflags and usesectionprogbits
+ introduce a virtual method for writing the section flags
* the clang assembler for COFF requires at least an "r" to generate a readonly section
* use COFF sectionattrs for aarch64-win64 as well
* at least clang can savely generate relocatable readonly sections, so use "r" for aarch64-win64
* as a variant for SEH exception filters we allow them to be *duplicated* instead of being extracted; this can be done unconditionally as for extracted ones their code is set to Nil after they're done and thus won't be picked up by generate_code_exceptionfilters
+ implement compiler support for SEH on Win64
Note: due to the way we access variables in a nested function (which in this case includes exception filters) we can not extract the finally handlers and call them (like we do on i386 and x86_64, but instead we duplicate the finally code)
* the .pdata section currently only needs to be always included for arm-wince (at least until we have full SEH support there as well)
+ add an error message if the size of a function is invalid (in case of aarch64-win64: not a multiple of 4, the instruction size)
+ add Win64 target to help text
* regenerate msg{idx,txt}.inc
* the clang assembler does not provide support for the SEH directives we need (only the LLVM backend would be able to use them), thus we need to manually convert them to data sections
* due to an apparent bug in the clang assembler for COFF when assembling ADRP instructions we can't use symbols that are offset into their section
* generate jump tables into the same section as the code as otherwise we'll get bogus relocations (in case of clang.exe) or a future support for armasm64.exe will reject the relative symbols outright
* register the DLL scanner for aarch64-win64
* set implicitframe for copied tryfinally nodes as well
* implement dogetcopy for the Aarch64 variant of the tryfinally node
* Xtensa: do SAR by a constant using SRAI
+ Xtensa: make use of ADDX*
+ Xtensa: enable jump optimizer
+ assembler optimization MovxMov2Movx
* correctly set register size
* fix for Mantis
0035140: apply patch by Ryan Joseph together with some further changes by me to add support for constant parameters in generics
+ added tests
* fix tc_bool_2_int simplification in case pass typecheck runs again, e.g.
after getting a copy of the node during CSE (fixes taddset4 compilation
with LLVM after
0044712)
* destroying constnone constsyms can occur when parsing a generic with a constant parameter that results in an error (e.g. unsupported type)
* fix for Mantis
0036975: arraydefs are not allowed for generic types (this is only used for type declarations; for specializing constant strings which are char arrays are still allowed)
+ added test
+ add an explicit error message if a type is not supported for a generic constant parameter
* regenerate msg{txt,idx}.inc
* use a more detailed error message if a type is not allowed for a generic constant parameter
* Xtensa: set source_cpu_string
* simplify xtensa-linux building
+ initialize variables, so compilation with -O3 works
* patch by J. Gareth Moreton: refactor RemoveCurrentP
- removed GetHigh, GetNextReg, GetLastReg, GetOffsetReg and GetOffsetReg64 from cpubase. The methods
in cg should be used instead, because they do better error checking on the register used.
+ added Z80 helper functions is_regpair and split_regpair
+ added another helper for register pairs: register_in
z80: sdasz80 won't do section smartlinking for us, but it's used for the zx spectrum target
z80: added quick & dirty vasm assembler support to the target
* unfortunately tf_smartlink_sections is mutually exclusive with
tf_smartlink_library, and defining both breaks sdasz80, so put this behind
ifdef Z80_SMARTLINK_SECTIONS
Fix cross-compilation on aarch64-linux using -dFPC_SOFT_FPUX80 option
Fixed LLVM compilation after
0045143
+ z80: added range checking for d in the (IX+d) and (IY+d) addressing modes in
the sdasz80 assembler writer, because sdasz80 silently truncates d to shortint
which produces broken code and hides bugs in the z80 code generator. The check
is behind ifdef, because the system unit doesn't compile, when this check is
enabled, due to bugs that were previously unnoticed. When these bugs are
fixed, the ifdef will be removed.
+ z80: generate correct code in do_spill_read and do_spill_written for spilling to temp offsets outside the range -128..127
+ enable the sdasz80 lameness check permanently, because the system unit now
compiles, and it's important to catch other similar errors also
* do not generate moves unncesssarily in tcgloadparentfpnode.pass_generate_code
z80: fix global symbols and section attributes in the vasm writer
z80: fix typo in the previous commit
zxspectrum: added support for linking via vlink, and for pascal sysinit code. also some cleanup in the linker code
* fixed bug, causing the global variable stacksize to be destroyed
* added comment, stating that Z80 has no condition subsets
+ build an instruction table cache for the Z80
+ partial implementation of taicpu.Matches
* Z80: fixed code generation for pure assembler routines, that have no parameters, no local variables
and no 'nostackframe'
* do not use an extra register in tcginlinenode.second_IncDec if not needed
+ z80: added condition checking in taicpu.Matches
- z80: oops, forgot to delete some code from taicpu.Matches
+ z80: implemented taicpu.FindInsentry
+ z80: implemented taicpu.CheckIfValid
+ handle OT_IMM_PORT in taicpu.Matches
+ handle OT_REG8_C_PORT in taicpu.Matches
+ handle OT_RELJMP8 in taicpu.Matches
+ handle OT_IMM8 and OT_IMM16 for getting symbol addresses in taicpu.Matches
+ added Z80 inline asm instruction validation
+ z80: add operand info to the result of taicpu.GetString, this makes the
compiler produce nicer error messages, when it encounters an invalid
instruction in inline asm code
+ started work on the Z80 internal assembler
+ added class TRelObjOutput
m68k: have an arch-specific second_length implementation, to make sure length() doesn't return its result in an address register
* increase PPU version so that 3.2.0 correctly ignores 3.3.1 PPUs instead of fatally failing on the extended header entry
* GetCopyAndTypeCheck forces correct type
* propagate forinline flag through simplify
* allow recursive inlines, meanwhile, there are other means to avoid too deep recursion of inlining
+ enable the Z80 internal asm (which doesn't work, yet) if the compiler is compiled with -dZ80_INTERNAL_ASM
+ added an override of the abstract method TRelObjOutput.writeData (not implemented, yet)
* remove tempref mess for simple inlined functions
* compilation with -Oodfa fixed
ppudump: catch exception on illegal datetime (mainly cross compiled units)
* properly force the result type after
0045217
* correctly handle result type of string constant nodes for internally created
nodes
* handle generic parameters in Ord()
+ added test
* compilation with -Oodfa fixed
+ added build mode that enables the Z80 internal assembler
+ added class TRelObjData
+ override the abstract methods from TObjData.sectionname() and .writereloc(). Only sectionname() is implemented for now.
+ write the .rel file header and the list of external symbols
* the areas global symbols count must be in hex in the .rel format
+ write the areas (sections) in the .rel output
+ added the global symbols to the .rel output file
+ implemented pass1 (calcsize) of the instruction encoding for the Z80 internal asm
* Z80: match both signed and unsigned 16-bit constants as OT_IMM16 in the asm instab lookup
+ partial implementation of pass2 asm opcode generation for the Z80 internal asm writer
+ Z80 internal asm: produce correct opcodes for register operands
+ actually produce relocations in TRelObjData.writeReloc
* Xtensa: patch by Christo Crause: fix addmi/addi handling, resolves
0037015
+ write the section data in the .rel internal object writer (relocations aren't written, yet)
+ introduced the TRelRelocation class
+ added TRelRelocationFlags
+ initialize size and relflags in TRelRelocation
+ added method TRelRelocation.EncodeFlags that encodes the flags to string that can be included in the .rel file
* Put all code adding cs_fp_emulation by default inside one big
{$ifdef cpufpemu}
* Add system_arm_freertos and system_xtena_linux to the list
of systems that automatically add cs_fp_emulation to
init_settings.moduleswitches.
+ Do not use controller specfic default fputype for xtensa-linux
target that does not support use of -Wp option to set controller type.
Add -Wp option description for riscv32 and xtensa compiler
Do not use inherited first_int_to_real when arm FPU_HAS_FPA is in fpu_capabilities
+ also write the relocations in the .rel internal obj writer
* the parameter of WriteWord should be word, not byte :)
* xtensa-embedded: fix setting of the fpu and abi
* Release registers which have been used for a function call before adjusting the stack pointer. On i386 this allows to use eax,ecx,edx in POP instructions for stack adjustment.
+ lots of fixes to the Z80 internal asm writer
+ Z80 internal asm: support OT_REF_ADDR16 in taicpu.gencode.WrinteNN
+ support conditional operations in the Z80 internal asm
+ fix for conditional JP in the Z80 internal asm writer
+ support creating ar files in the Z80 internal obj writer
+ align files in generated .a files not by #0, but by #10 (Line Feed). This is
compatible with GNU ar and others, and fixes linking with sdcc-sdld.
* preserve the actual file size (before aligning it to even bytes), when adding files to .a archives
+ support the RST instruction in the Z80 internal asm writer
+ support relative jumps in the Z80 internal asm writer
+ Z80: support conditional JR
+ support the 'in A,(n)' and 'out (n),A' instrunction in the Z80 internal asm writer
+ support instructions like BIT, SET and RES in the Z80 internal asm writer
+ support signed 8-bit immediate constants in the Z80 internal asm writer as well
+ call ApplyAsmSymbolRestrictions for symbols that should be exported from ar files
+ added internal error in taicpu.gencode.WriteNN to catch unhandled asm instructions
- reverted previous commit, since it was incorrect
+ fix for writing absolute relocations in the .rel format
* fixed the TRelocDataInt to avoid truncating 16-bit addresses to 8-bit on 8-bit CPUs
- removed commented out writeln
* x86: Fixed peephole optimization introduced in
0044233. tb0219 and tb0548 tests have failed with -O2 since then.
* Added variants of the tb0219 and tb0548 tests with forced -O2.
* If a nested procedure does not access its parent's frame pointer, optimize it by removing the hidden $parentfp parameter.
* Improved the tisogoto1.pp test.
* only call cg64.a_XXX_loc for LOC_(C)REFERENCE and LOC_(C)REGISTER locations in
tcginlinenode.second_AndOrXorShiftRot_assign
* i8086 compilation fixed after
0045302
+ generate more optimal code for OP_NOT and OP_NEG in tcg64f8086.a_op64_ref
* call inherited in tcg64f8086.a_op64_reg_ref for OP_NEG and OP_NOT, because it is handled differently after
0045302
- remove unused files, resolves
0037032
m68k: preparations for upcoming full instruction tables, mostly converting code away from using sets of opcodes
+ use ApplyAsmSymbolRestrictions on all symbols in the NASM writer
m68k: added a full instruction table (minus CF MAC/EMAC instructions for now), based on vasm, and the required tool to process it
m68k: add the converted includes, based on m68kins.dat
m68k: migrate the compiler to the new instruction tables and drop the old ones
m68k: fixed instruction code formatting in the generated include
* fixed -Cl options now showing in the help of an LLVM compiler (and fixed
them to read -Cl rather than -CL)
* Always use parentfp for forward-declared nested procedures.
* Do not perform optimization of nested procedures for:
- targets which use a special struct to access parent's variables;
- pure assembler procedures (for compatibility with old code).
* avoid unncessary conversions of constants in 64 bit ints when doing constant folding
* improved heuristics for auto-inlining
* generate CFI data only if we're either using it for exception handling or if debug output is enabled (or should this only be generated for targets that in theory support DWARF exception handling?). This removes unnecessary bloat from e.g. Windows binaries
- cleaned up some x86-specific code from the Z80 inline asm reader
+ also recognize alternate registers in the Z80 inline asm scanner. This allows
the "EX AF,AF'" instruction to be accepted and assembled as well.
+ added the alternate Z80 register pairs BC', DE' and HL'
+ added a correct implementation of TAOptBase.SuperRegistersEqual for the Z80
+ Z80: added a registers_interfere helper function
+ introduced TAOptBase.RegistersInterfere (which might not always be equivalent to SuperRegistersEqual)
* use RegistersInterfere instead of SuperRegistersEqual in TAoptBase.RegInOp and TAoptBase.RegInRef
+ added subregisters for the Z80 flags
+ added the Z80 individual flag bits as subregisters
+ MovAndTest2Test optimization
+ Z80: implemented TCpuAsmOptimizer.InstructionLoadsFromReg
+ support the LD instruction in TCpuAsmOptimizer.RegLoadedWithNewValue
+ Z80: support all the flags subregisters in super_registers_equal
+ Z80: support the flags subregisters in the registers_interfere function
* handle OP_XOR for a full mm register correctly in tcgx86.opmm_loc_reg
* simplify constant expressions after re-ordering, resolves
0037062
- removed tabstractrecorddef.get_unit_symtable, which did not always return the unit
symtable (when you had a local recorddef in a procdef)
* modified tdef.get_top_level_symtable() so you can specify whether you want to
skip procdefs or not
* changed tobjectdef.vmt_def() to no longer require a typesym for the tobjectdef
(based on patch by Blaise)
* fix a typo in a comment. no functional change
* patch by Reynaldo to generate kernel image for the raspi2 embedded port, resolves
0027052
+ handle the flags register bits for many Z80 instructions in TCpuAsmOptimizer.RegLoadedWithNewValue
+ Z80: report flags register information in TCpuAsmOptimizer.RegLoadedWithNewValue for 16-bit ADD,ADC,SBC,INC and DEC
m68k: add support for bitfield instructions as CPU capability
* fix spilling for PAND, POR and PXOR, resolves
0037084
m68k: tabs to spaces and indentation fix, no functional change
+ Z80: report the flags usage for all the remaining instructions in TCpuAsmOptimizer.RegLoadedWithNewValue
+ z80: handle all instructions in TCpuAsmOptimizer.RegLoadedWithNewValue
* fixed IsJumpToLabelUncond for the Z80
- z80: disable regvars, because they don't work
* boolean or/and nodes might be swapped when they have no side effect, in case
of short boolean evaluation, firstcomplex is not called so this does not
hurt short boolean evaluation
* call x86 addordinal for non short boolean evaluated boolean nodes
as this results in better code
* when auto-inlining is used, do not require that inlining is explicitly turned on
* Z80: JR can be both conditional and uncoditional jump, just like JP
+ PXorPXor2PXor optimization
* Reworked the optimization of unused $parentfp for nested routines.
- Do not remove the $parentfp parameter as was done in the previous optimization approach. Instead when $parentfp is unused to the following:
- On the caller side: Omit passing the value for $parentfp for targets where tcgcallparanode.push_zero_sized_value_para=false (classic CPU targets).
Pass 0/nil as $parentfp for targets where tcgcallparanode.push_zero_sized_value_para=true;
- On the callee side: Prevent allocation of registers/resources for $parentfp.
- When possible keep $parentfp in a register.
- Set the pio_nested_access flag in tprocinfo.set_needs_parentfp() to properly handle deep nesting levels;
* Fixed the jvm target after
0045436.
* It is needed to mark $parentfp as used for all targets.
* Added the thlcgobj.a_load_undefined_cgpara() method to pass an undefined value as a parameter to a routine. The generic version passes the 0/nil value if the parameter's location is not a register.
* Use a_load_undefined_cgpara() to load values for unused parameters.
* exceptions are side effects which must be considered in boolean expressions
* patch by Karl-Michael Schindler to update the German help files, resolves
0037122
* Reg1ReadDependsOnReg2 moved to TAoptBaseCpu
* use Reg1ReadDependsOnReg2 in TAoptBaseCpu.RegModifiedByInstruction to handle properly Z80 subregisters
+ Z80: handle all instructions that modify registers, that are not an operand in TAoptBaseCpu.RegModifiedByInstruction
+ Z80: handle the flags register in TAoptBaseCpu.RegModifiedByInstruction
* Do not use the LOC_VOID location to indicate unused parameters.
* Added the tprocdef.parentfpsym property. Set parentfpsym.varstate to vs_read instead of using the pio_needs_parentfp flag.
* Replaced tcgcallparanode.push_zero_sized_value_para by tparamanager.has_strict_proc_signature.
* implemented a_load_undefined_cgpara for LLVM, fixes LLVM code generator
after the changes to optimize unused parentfp parameters
* replaced custom packed record with tmethod
* patch by Christo Crause: fix register search on xtensa, resolves
0037121
m68k: atari syscalls might also destroy D2 and A2
m68k: avoid more vlink warnings regarding changed section attributes, when the target system has no write-protected sections
* x86-64: adjust stack by push/pop if possible
* adapt optimizer to handle push/pop for stack alignment
* adapt test
* do not load unused parameters, as their localloc has not been set (and
there is no point in doing so if it were)
o fixes compilation of RTL with LLVM/AArch64
* compilation on i386 fixed
* re-activate copy_mm: using it instead of movs might reduce register pressure
* x86 has to use newalignment as well
+ x86: track use of full ymm registers and generate vzeroupper if needed
* create vpxor instead of pxor in avx mode
* factored out OptPass1VPXor
* improve copy_avx gencopy mode
* always use 1-byte section alignment for the rel internal obj writer
* the len parameter of TObjData.alloc changed to TObjSectionOfs
+ also write sections with no data in the .rel internal obj writer
+ enable the Z80 internal assembler
+ Z80: added the JRJP pseudo instruction
+ added JRJP to various instruction lists
* translate jrjp to jp in the sdcc-sdasz80 asm writer
* insert fwait after fcompp, resolves
0037136
Reorder and complete list of supported CPUs
+ Z80: implemented the JRJP pseudo instruction in the Z80 internal asm writer
* z80: use the JRJP pseudo instruction to generate shorter code (it is
translated to JR wherever possible, otherwise to JP)
* use const_align(sizeof(pint)) alignment instead of sizeof(pint) for various
compiler-generated structures, so they don't waste any extra alignment space
on 8-bit CPUs like the Z80 and the AVR
* ARM: (V)LDM do not load from the registers in the reg. set
+ started work on the Z80 internal linker
* ARM: get rid of more unneeded sxtb/h uxtb/h instructions
* ARM: factor out TARMAsmOptimizer.OptPass1And
+ implemented TRelObjInput.CanReadObjData
- removed the z80_internal_asm build mode, since it's now a feature enabled by default, not hidden behind an ifdef
* enable the Z80 internal linker (not working yet) if the compiler is compiled with the Z80_INTERNAL_LINKER define
+ added 'z80_internal_linker' build mode to the z80 lazarus project
* AArch64: enable TARMAsmOptimizer.OptPass1And
+ override TInternalLinkerZXSpectrum.InitSysInitUnitName
+ set cobjdata in TRelObjInput.create
+ set cobjdata in TIntelHexExeOutput.create;
+ create a linker script for the ZX Spectrum internal linker
+ override TInternalLinkerZXSpectrum.GetCode/Data/BssSize to avoid access violation error
* buffered text reading functions moved from being local to TRelObjInput.CanReadObjData
to being class members, so they can be used by ReadObjData as well
+ partial implementation of TRelObjInput.ReadObjData
+ parse the area records of REL files
* a nil node is also a constant pointer node
+ convert (v1=const1) and (v2=const2) into ((v1 xor const1) or (v2 xor const2))=0 if the expressions have no side effects
+ parse the REL symbol records
* TRelObjInput.ReadObjData: return success, if file was read correctly
* return the correct size for files in ar archive. This is required by the REL
reader, which reads files until the end of file
* set MaxMemPos to $FFFF in the Z80 internal linker
+ add .text, .data and .bss exe sections and define the entry point in the ZX Spectrum internal linker script
* group T and R records together and call a function (not implemented yet) to handle them in pairs
+ implemented reading of T and R records
* extended
0045555 to take care of chars as well
* renamed some REL sections to follow a similar naming convention
* avoid setting the oso_Data flag on bss sections
+ set IMAGEBASE in the Z80 internal linker script
* ImageBase changed to qword (same type as CurrMemPos) to avoid truncating to 8-bit on Z80
* ImageBase changed to qword to avoid 8-bit truncation in the internal linker map file
* avoid 8-bit truncation of the sizes in the internal linker map
+ implemented IHX writing in the Z80 internal linker
- removed the GetCode/Data/BssSize overrides in the ZX Spectrum internal linker,
since the default implementation, inherited from parent now works
+ implemented TIntelHexExeOutput.DoRelocationFixup
+ ZX Spectrum internal linker: invoke the ihx2tzx to postprocess the ihx file,
produced by the internal linker (in the future, the code of this utility may
be integrated into the compiler)
* changed the exe extension of ZX Spectrum to '.tzx'
+ enabled the ZX Spectrum internal linker
- removed the z80_internal_linker build mode from the lazarus project
+ allow specifying the program load address for the ZX Spectrum target via the -WB option
+ x86: optimziation MovMov2MovMov 2
+ add support for DEFB and DEFW directives to the internal assembler reader
* also handle single character register names (needed on Z80 for example)
* with ihx2tzx now also supporting binary output it makes sense to rename it to something more generic
+ add compiler support for the Z80 MSX-DOS target
* allow executable/library name to be changed for an intermediate file
* change exe extension for MSX-DOS from exe to com
+ add MSX-DOS to help text for -T
* regenerate msg{txt,idx}.inc after adding MSX-DOS to help text
* better rules if a 3 op mul operation is tried
+ add intrinsics for Z80 port IN/OUT
* include the Z80 specific intrinsic values
+ some basic stuff for mips64el
+ added the 'AREA' directive support to the Z80 inline assembler, that allows
you to define custom sections
+ support the OFFSET directive in the Z80 inline assembler reader
+ add the _BSSEND section after the _BSS section
* the len parameter of TObjData.writebytes changed to TObjSectionOfs to avoid 8-bit truncation on Z80
* use qword instead of aword for bsssize to avoid 8-bit truncation on Z80
* fixed a bug in the Z80 internal linker when reading symbol offsets from .rel files
+ optimize real operations with 0 and 1 if fast math is turned on
* optimize a/a and a-a if fast math is on
* swap fpu stack correctly when moving data into xmm registers
* ensure that the BSS section for MSX-DOS is correctly initialized to 0
* fix typo (no code changes)
* for adding procdefs to forwarddefs check for the specialization flag instead of whether it's a full specialization; fixes implicit finalization handlers on x86_64-win64 not being found
+ added tests
* Aarch: handle 0 in AndAnd2And and check if the resulting constant
is really a shifter constant, resolves
0037203
* slash and divn might have an exception as side effect
* write length/code page when writing the string type
* temporarily fix
0037034 by disabling the problematic optimization until the real cause is fixed
+ might_have_sideeffects checks also if the tempinitcode of a tempref node might have side effects
* better check for short boolean evaluation in firstcomplex
* fixed copy&paste error of
0045658
* Optimize parentfp when optimization level 1 and higher to be debugger friendly.
z80: vasm doesn't support the JRJP pseudo instruction, so change it to JP during write
* Fixed the parentfp optimization for some cases when nested procvars are used.
* Improved the parentfp optimization to properly handle cases when a nested routine calls other nested routines.
* Added optimization option cs_opt_unused_para. It is enabled for -O2 and higher. The parentfp optimization is tied to cs_opt_unused_para.
+ support z80 in the fpc launcher utility
* fix -Agas-darwin to say Aas-darwin for x86-64, and also add it for i386
(mantis
0037230)
* regenerated message files
o patch for Xtensa by Christo Crause, resolves
0037099
+ Added postfix parsing in tattreader.GetToken
- Removed all postfixed versions of OpCodes from the instruction list
+ Added all missing OpCodes from Xtensa ISA
* Changed branch OpCode to A_B, similar to ARM
+ Added missing branch condition flags BCI and BSI
* Updated existing compiler code that referred to the old postfixed instructions
+ Added prefix and postfix handling in TxtensaInstrWriter.WriteInstruction
* Updated TCPUAddNode.second_addfloat to specify .S postfix
* Updated tcpuunaryminusnode.second_float to specify .S postfix
+ Implemented prefix and postfix identification in txtensaattreader.is_asmopcode
* Adapted branch condition extraction to respect postfixes
* Changed itcpugas to call findreg_by_name_table from raatt.pas (same as issue
000037121, difficult to test these changes without including a fix for the register name search problem)
* Xtensa: MatchInstruction requires a postfix parameter
* Reworked tprocdef.is_implemented to fix a bug with the parentfp optimization. The bug was detected when using the llvm backend.
+ Added a test.
* limit the ZX Spectrum programs address space up to $FDFC, because the RTL now
installs an interrupt handler at $FDFD
+ Xtensa: patch by Christo Crause to add optional MAC16 registers, resolves
0037130
* fix typo (no code changes)
+ Xtensa: patch by Christo Crause: support call0 abi in init final code part of
0037242
* patch by Christo Crause: support call0 abi in entry/exit code, part of
0037242
* fix for Mantis
0037251: apply patches by Bi0T1N to implement the IsConstValue() intrinsic
+ added tests
* Xtensa: patch by Christo Crause: fix controller date for esp8266, part of
0037242
* Xtensa: patch by Christo Crause: add IDF_PATH variable, read from the appropriate environment variable, part of
0037242
* fix for Mantis
0037272: also allow the empty set for dynamic array parameters; Delphi probably started to allow that together with array constructors.
+ added tests
* reverted some stuff accidently committed in
0045704
* correctly handle sign/zero extensions for optimization "var3", resolves
0037254
* delay setting of pd_body and pd_implement till the header of a generic
procedure is parsed, resolves
0037261
* use the fpu on suitable x86 targets to copy extended values
* set mm register subreg properly when cleaning them with xor
* fix compilation with newer FPC
+ handle OS_128 in mm code
bump ppudump copyright year
* (modified) patch by Michael Ring from the mailing list to fix linking for arm-freertos
+ Xtensa: more cpu capabilites
+ Xtensa: set cpu for xtensa-linux as call window support is required
* fix abs() intrinsic optimisation, resolves
0037301
Fix overflow when value is high(int64) in OptPass1And method
* AAarch64: handle initializations of vector registers with zero properly
* properly calc new src register for OP_XOR
* patch by Christo Crause: fix volatile registers for call0 abi, resolves
0037317
Try to fix tarmunaryminusnode.pass_1
Only try to use softfpu functions when fputype is fpu_soft
tarmunaryminusnode.pass_1 must call inherited method for system_arm_wince
Do not use .hidden for systems_wince, as is done for systems_windows
* scalar operations should take single/double values and not full registers
* TAOptObj.MakeUnconditional: Set as internal error for MIPS cpu:
MIPS conditional instructions conntain the
computation of the condition itself, so
changing the instruction to unconditional
should never be done.
* TAOptObj.OptimizeConditionalJump: Return false early if
the conditional instruction has more than one operand.
* tcg.a_load_cgparaloc_ref: Always enable SHR instruction for mips/mipsel CPUs
This is normally only used on big-endian targets, to re-convert records
of size < OS_INT into values fitting inside the byte size of the record,
after it was left-shifted to comply with ABI stipulating it but be
writable as a full-size register into a OS_INT size memory.
Do not set value of stoploop to avoid infinite loop
Also check that HP1 is a jump instruction with more than one operand to exit early
Fix several warnings about uninitialized local variables
* Handle R_SUBMMWHOLE in reg_cgsize for R_MMREGISTER type
* Disable range and overflow checking inside is_continuous_mask function.
* generate soft float code for arm vfp units which have no double operation support
* completely disable records containing float fields in registers again, as
the code generator does not support subsetreg loads of floats
* enable putting records that contain a single field into records on all
targets (patch by J. Gareth Moreton, mantis
0037343)
* properly handle boolean64 xor boolean64 on i386
* revert part of
0044879: flock must use kernel_off_t: off_t breaks e.g. i386
+ patch by J. Gareth Moreton: SHL-centric peephole optimisations, resolves
0037389
Try to fix mipsel-android by making sure P does not point to a freed instruction
* revert part of
0045810 which was accidently committed
Avoid wrong overflow error when using -Criot options
Avoid overflow errors on z80 CPU by changing local variable type from aint to tcgint
* float operations can have an exception as a side effect, resolves
0037398
* Fixed the peephole optimization of conditional movs for mips.
z80: preserve system ID and linker ID for the Amstrad CPC
* Fixed indentations of the interference graph.
* Added register names to the interference graph.
* To check the size of a register(s) corresponding to a variable it is needed to use localloc.size instead of def_cgsize(vardef).
* Try to avoid spilling of an imm register if it contains a value loaded from an already spilled imm register. It likely leads to an endless loop and the register allocation fails.
This fixes the register allocation for i8086 when handling registers for very constrained instructions such as "mov ireg1,[ireg2+ireg3]".
Here ireg2 can be only BX or BP. So in most cases only BX is available. When ireg2 is spilled, its value must be loaded to BX only.
Coloring of the ireg which holds the spilled value must be as early as possible to be able to assign BX to this ireg.
This fix should also help register allocation for other constrained/old CPUs.
* i8086: Removed internal error, since global vars can be in registers if used only in pascalmain.
* i8086: Fixed referencing using BP and SP as base when FAR or HUGE memory model is used.
* i8086: Enabled the cs_opt_regvar optimization. It works fine now.
- removed no longer used -target $TARGET parameter (triplet is used instead)
+ optimize
mod for x86-64 as well
* In Delphi mode throw a conversion error when trying to typecast a pointer to a procdef when they use different memory models.
* Changed tsuperregisterworklist.get() to always return the last item from the list.
* Reversed sort order of simplifyworklist so nodes with most interferences will get their colors first.
Since degree of nodes in simplifyworklist before sorting is always
less than the number of usable registers this should not trigger spilling
and should lead to a better register allocation in some cases.
After these changes sysutils.o for i386-win32 is 80 bytes less. :)
* patch by J. Gareth Moreton: fix for incorrect alignment removal, resolves
0037420
* modified patch by J. Gareth Moreton: MovOpMov2Op/Lea2Add/Lea2Sub consolidation, resolves
0037422
* mips: Added support for unaligned load/store. It greatly improves performance and prevents bus errors on systems which do not emulate unaligned memory access.
* Aarch64: set register size correctly for AndStrb2Strb optimization, resolves
0037427
* Re-enabled safe generic jump optimizations for mips.
* Fixed TAOptObj.CollapseZeroDistJump to properly handle delay slots.
* patch by J. Gareth Moreton: Minor oversight in MovAnd2Mov 3 optimisation, resolves
0037442
+ simplify "x mod -1", resolves
0037449
* reject overloads if they only differ in the result types (as long as they aren't operator overloads)
+ added tests
* do not throw an internal error later on in case of a recursive call, if the declaration of the function was faulty, resolves
0037460
* do not throw an internal error if an errorneous type is passed to str, resolves
0037462
* Count the number of interferences with real registers.
* Do not coalesce registers 'u' and 'v' if 'u' is the last usable real register available for imaginary register 'n' which also interferences with 'v'.
This prevents endless spilling in some cases for constrained CPUs such as AVR. Resolves issue
0037421.
Also this reduces the number of spilled registers in some cases and even eliminates spilling completely for some simple routines for i386 and AVR.
* Added a debug output of the number of spilled registers for each routine. This allows to easily compare results after changes in spilling algorithms.
* allow overloads with same result type for external Java classes due to Java supporting covariant return types for interfaces
* replace explicit (sometimes incomplete) tests with calls to doshortbooleval()
* the c-style boolean evaluation of "and" is independent of short-circuit evaluation
(you always have to consider the complete values in case the first one is <> 0)
* Enhanced the debug output of spilling statistics. Now it includes efficiency of the spilling which is based on
weight and usage count of registers. Range 0-100%. Such statistics are very handy when you modify the register allocator.
* Count only usable real registers.
* Early during register allocation, spill registers which interfere with all usable real registers.
It is pointless to keep them for further processing. Also it may
cause endless spilling.
This can happen when compiling for very constrained CPUs such as
i8086 where indexed memory access instructions allow only
few registers as arguments and additionally the calling convention
provides no general purpose volatile registers.
* Removed the i8086 specific hack. Since
0046199 the register allocator is able to handle the problem code.
* For 8 and 16 bit CPUs preload the ref base and index to a separate temp register in the generic implementation of a_load64_reg_ref() and a_load64_ref_reg().
This reduces spilling and produces a better code.
* i8086: When a ref points to the 32-bit data, preload the ref base to a temp register to reduce spilling.
* fixed LLVM register allocator after
0046199
* fixed peephole optimizer replace lea by add even if the flags were in use
(patch by J. Gareth Moreton)
* fix for Mantis
0036775: apply patch by J. Gareth Moreton
+ added tests
Disable limitation of handling of negative shift values, can be enalbed again by setting LIMIT_NEG_SHIFTVALUES macro
* For 8/16 bit CPUs and TP mode, disable expansion to a larger integer type for subtract operations on unsigned integers. This is TP7 compatible.
* patch by J. Gareth Moreton: unifies internalerrors, resolves
0037471
* made internalerror unique
* reworked usage of tcgnotnode.handle_locjump
* reverted
0046220 as it is fixed now properly
- do not call firstpass in tinnode.pass_typecheck as it prevents further optimizations
* In assembly comments include all used registers by a variable for 8/16 bit CPUs.
* Do not add comments about unused varlocs.
* msdos: Include debug info only when it is enabled by options.
* Added virtual function TObjSection.GetAltName to be able to specify additional section name by descendants.
* OMF: Use the name of the first global symbol as an addition section name. This name is visible in the linker map file and helps tracking of section references.
* setelementn cannot be the root node of a cse domain, resolves
0037477
m68k: fixed a long standing issue, where FPU registers would be clamped to single precision during spilling
* insert type casts when creating new unaryminus nodes during simplification, resolves
0037508
* do not spill_replace if the register is used another time in the instruction
- no need to call add_move_instruction if data is moved between different register classes
* update version
- -Oodfa removed
* patch by J. Gareth Moreton: Long-range MOV + MOVS/Z optimisation, resolves
0037390
* attempt to correct bitpacked arrays on big-endian systems after
0043186. this fixed tparray13 test on m68k at least
* patch by Kai Burghardt to use https urls, resolves
0037522
* better complexity handling of mul, slash, div, mod
+ add option -FF to force the use of fpcres as RC compiler
Note: if we merge this to 3.2.x then we can switch to this by default once 3.2.2 is released
* make sure that the resource compiler related globals are reset
* regenerate msg*.inc files
+ add a constant that describes all internal COFF writers (be it PE/COFF or not)
* fix for Mantis
0037559: the adjustment of the section type should only be done for internal COFF writers
* Reverted accidentally committed files.
* patch by Christo Crause to make nostackframe with the windowed xtensa abi working, resolves
0037550
* Fixed nasm writer by adding a new line after the GLOBAL directive.
* 8086: Fixed calling of local routines with the near attribute in the 'far code' memory models.
* msdos: By default external routine names with the pascal calling convention must be all upper case. This is TP and TASM compatible.
* 8086: Do not force far calls in the TP mode by default. This is TP compatible. Other modes need forced far calls by default in order to compile non-TP code.
* do not try to unroll a loop if previously an error was thrown, resolves
0037475
* don't convert lea to add/inc/dec/sub if there's a symbol in the reference
o fixes make cycle on Darwin/i386
* when a function returns a value in a register, but normally that type
would never be put in that kind of register by the compiler, store
it to memory to avoid issues down the line
o fixes tcalext6 on darwin/i386
* do not apply range test optimization if the variable is a string being compared against a char constants, resolves
0037476
* 8086: enable cs_force_far_calls when m_nested_procvars is enabled.
* 8086: when the compiler mode switches to a non-TP mode, enable cs_force_far_calls.
* msdos: Force names of external routines to be all uppercase only in TP mode.
* execute the tempinitcode whent the tempcreate node gets processed rather
than when the first temprefnode to it gets processed. Solves the issue
the foreachnodestatic processes the tempinitcode when seeing the
tempcreatenode and ignores it when seeing temprefnodes, even though
it may actually be executed/generated for the temprefnode. It's
impossible to easily process it for the "correct" temprefnode
(since there may be multiple temprefnodes for the same tempcreatenode)
o fixes tarray12 for Darwin/i386 and Linux/i386
- reverted
0046457, accidentally committed (breaks -Oooptcse)
* RTTI: Offset of record fields is defined as SizeInt not ptruint.
+ AAarch64: FMovFMov2FMov optimization
* wlib: Explicitly specify the smallest possible record align to reduce the size of .a files.
+ Xtensa: L32IMov2L32I optimization
+ Xtensa: consider also floating point stores in TCpuAsmOptimizer.RegLoadedWithNewValue
* In the TP mode for 16-bit CPUs uint8+uint8 is extended to sint16+sint16. This is TP compatible.
* 8086: Fixed Ofs() for far routines.
resultdef of typeconvnode.typecheck_proc_to_procvar() is reused every time you get an address of a proc. So it is forbidden to change the far/near attribute of resultdef - it leads to mess during code generation.
Instead it is needed to use separate reusable resultdefs with new flags pc_far_address and pc_offset.
* fix for Mantis
0037579: mark the 'German' tokens with the characters they represent
* 8086: Fixed an internal error for cases like FarPtr2 := FarPointer($12345678) + int16;
* 8086: More fixes for Ofs() handling.
* Added on option to implement library based smartlinking of the dead stripable vectorized lists (e.g. resource strings index). By default smartlinking of such lists only supported when the section based smartlinking (tf_smartlink_sections) is enabled for a target.
* msdos: Implemented library based smartlinking of the dead stripable vectorized lists. It is enabled for the internal linker and wlink. These linkers sort sections by name by default.
* Allow library based smartlinking of indirect symbol entries.
* Corrected
0046481. Use both tcalo_new_section and tcalo_make_dead_strippable flags since only the default implementation implies a new section creation when tcalo_make_dead_strippable is specified.
* wlib: calculate the record size according to the number of files in the library.
* Xtensa: set abi correctly
* 8086: Fixed loading a 32-bit ref to a register in case the target register is used as the ref base or index.
* 8086: Also fixed loading a register to a 32-bit ref in case the source register is used as the ref base or index.
* do not throw an internal error on illegal assembler expressions, resolves
0037439
* msdos: Fixed section based smartlinking after my recent changes.
* 8086: Fixed very long section names when $HUGECODE is ON and section based smartlinking is used.
* Added a utility function TrimStrCRC32().
* When optimization is off always load unused parentfp to a local location to be debugger friendly.
* msdos: Fixed AV in the internal linker in some cases when code or data exceeds 64k.
* If parentfp is passed in the stack it can be skipped only if po_delphi_nested_cc is set for the routine.
x86: It is more optimal to push some register (NR_FRAME_POINTER_REG) instead of a constant value in a_load_undefined_cgpara().
* Added assembler comments about unused parameters.
* patch by Christo Crause, resolves
0037335
* ESP8266 support for t_freertos.pas
+ -Ff switch to be able to pass the IDF_PATH without using an evironment variable
* insert literals after the section start which belongs to the current procedure
* reset idfpath when globals are initialized (needed for the textmode IDE)
* cleanup ARM remainders
* locals can have 0 as offset, force a reference in this case
* Xtensa: needs no mul helper, all variants have the MULL instruction
* ait_varloc instructions are handled and removed by Trgobj.translate_registers() and never left for an assembler.
* fix for Mantis
0037616: apply patch by Kai Burghardt to complain about the correct type used by setjmp/longjmp
+ Xtensa: make use of muluh/mulsh instructions
* Xtensa: make use of divide extension if available
+ Xtensa: implemented TCPUAddNode.second_cmp64bit properly
* Xtensa: fixed tcg64fxtensa.a_op64_reg_reg_reg for unsigned operations
* ait_comment,ait_regalloc,ait_tempalloc,ait_varloc instructions produce only comments in the external assembler output. Moved handling of these instructions to TExternalAssembler.WriteComments().
This eliminates code duplication and improves maintainability.
* Xtensa: more fixes to tcg64fxtensa.a_op64_const_reg_reg and tcg64fxtensa.a_op64_reg_reg_reg
* Use TExternalAssembler.WriteComments() also by nasm and intel assembler writers.
* 8086: Use CX as a scratch register instead of BX.
* Xtensa: optimize some shifts by constants
* 8086: If a far procvar is called, it must be in a memory location. This fixes a hack to emulate CALL reg1:reg2.
* 8086: Fixed using far procvars in a near code memory model and vice versa.
* 8086: Do not destroy contents of the BX parameter when calling a procvar by ref with a base.
* 8086: Fixed register allocation failure after
0046559.
* 8086: Reverted
0046557. It must be implemented differently.
* 8086: Proper implementation of: If a far procvar is called, it must be in a memory location. This fixes a hack to emulate CALL reg1:reg2.
* never create a regular temp for inline parameters that can be modified by
the caller (mantis
0037465)a
o in theory, the regular checks for doing so should never trigger, but due
to compiler-generated nodes (such as calls to fpc_ansistr_unique), they
could. Internal address nodes can deal with taking the address of the
function result in this case.
+ Xtensa: use extui for and with constants
* Xtensa: tcpunotnode.second_boolean fixed
* emit the correct declaration for procdefs used to force a procname in LLVM
o fixes lazarus startup on macOS/AArch64 when compiled with the LLVM cg
* add Xcode-11.0 as LLVM target version versin
* Xtensa: fixed TCPUAddNode.second_cmpsmallset
Fix EXTDEBUG code: tai_comment requires use of strpnew function with constant string
Replace outdated cgop2string function by tcgsize2str function from cgbase unit to fix EXTDEBUG cycle on powerpc64le-linux
* Xtensa: force correct location into a register in tcpunotnode.second_boolean
* reverted 46417: if a assembler subroutine needs an entry instruction, it should be added explicitly
* Xtensa: several issues with parameter passing of the windowed api fixed
* Xtensa: some issues with large parameters fixed
* Xtensa: record alignment is upto 8 bytes done
* Xtensa: fix single<>single
+ Xtensa: implemented tcpuparamanager.ret_in_param according to API
* fixed passing of variant parameters
+ Xtensa: reused constant pool entries if possible
* Xtensa: various stack handling fixes
* better calculation of estimated stack frame size
* Xtensa: rewrote parameter handling
* Xtensa: aggregate types up to 16 bytes are returned in registers
* Xtensa: fix operand size and location handling in TCPUAddNode.second_cmp
* stack size estimation again improved
* Xtensa: set expectloc of not nodes correctly
* fix for Mantis
0037650: apply adjusted patch by Ryan Joseph do not range check the length of ShortStrings if their length parameter is based on a generic constant
+ added test
* Xtensa: arrays are always passed as by reference but still returned in up to 4 registers
* fix tw3930 after
0037927
o "unique" class (and interface) type aliases should actually not exist at
all except for overload resolution. All the rest (VMT, UUID, RTTI, ...)
should be taken from the aliased class/interface
o there is one Delphi-incompatibily left after this change, but it shouldn't
matter: tw8180 does not compile if you change the declaration to
"tcl=class(TInterfacedObject,XStr,iinterface)", while Kylix does compile
that. It doesn't really matter though, because in Kylix this actually
adds iinterface twice as implemented interface, so there is no point
in accepting this.
* prevent quadratic complexity in the size of the inheritance chain when
comparing objectdefs for equality
* Improved output of spilling statistics:
- Do not use count_uses, since weight already represents a usage count of a register.
- Do not count spills of registers with weight less than 100.
* Use the initial location of stack parameters as a spilling location if spilling is needed. This leads to the following optimizations:
- no spill temp is allocated;
- no load of a stack parameter to a spill temp;
- if a stack parameter is used only once do not preload it to a register. The parameter can be accessed directly in the stack if the target CPU supports this.
* Fixed
0046776: With -O3 do not "coalesce" spilled nodes if the initial location is set.
* Xtensa: tcgcpu.g_concatcopy uses OC_NE so the branch requires one instruction less
* Xtensa: tcpuunaryminusnode.second_float fixed for double
* Xtensa: tcgcpu.g_concatcopy makes use of loop extensions if available
* Xtensa-freeRTOS: fix linking against libc
* more ABI compliant parameter passing
* Xtensa: handle references with offset only properly
* Fixed the stack parameters optimization (
0046776) for big endian CPUs.
* improve call0 calling conventions
* Do not use stack parameter location for spilling if its size is less than the register size for all CPU targets except x86.
* Fixed
0046801 for the case of int64 params with a single paralocation.
* RiscV32: corrected tcpuparamanager.getcgtempparaloc, resolves
0037709
* cleanup
* Xtensa: taicpu.spilling_get_operation_type improved
* Xtensa: trgcpu.do_spill_op fixed
* cleanup
* Xtensa: stack size calculation for the call0 abi fixed
* Include stack location of spilled variables in the assembler output.
* Moved spilling of registers which have the initial memory location and are used only once to a stage after coalescing is done. This produces a better code.
* a classrefdef might also be created with a forwarddef, so handle that correctly
+ Xtensa: make use of ABS.S
+ extended test for abs(...) with single tests
* Reverted
0046836, since it does not work as expected for yet unknown reason.
+ introduce tcgobj.a_loadfpu_reg_intreg
+ make use of it in tcgtypeconvnode.second_nothing
+ Xtensa: implementation of a_tcgcpu.a_loadfpu_intreg_reg and tcgcpu.a_loadfpu_reg_intreg
* RiscV32 correctly set operands of div/mod operations, resolves
0037743
* patch by J. Gareth Moreton: introduce RemoveInstruction and make as much as possible use of RemoveCurrentP, resolves
0037399
* write a proper error message if types are read/written which are not supported in iso mode, resolves
0037763
* m68k: fix index register usage in memory references, when the index is 8 or 16 bit wide and unsigned
* fix for Mantis
0037221: apply adjusted patch by Ondrej Pokorny to allow the use of Copy() on open array parameters (the result will be a dynamic array)
+ added test
* fix for Mantis
0036909: apply patch by Ryan Joseph so that array constructors can be used for static arrays as well.
+ added test
* small formatting adjustments for the sake of consistency
* correctly handle static arrays with a lower index <> 0
+ added test
+ allow in ISO mode that { ... } and (* ... *) comments are paired, resolves at least partly
0037428
* don't print range check warnings when evaluating inlined explicit typecasts
* don't perform "(x=y) or (z=u)" -> "(x xor y) or (z xor u)" optimization
if z or u may raise exceptions (mantis
0037780)
* do not set nonlocal for inter-procedural labels, this is not needed, they use
the jmpbuf to reach the target
* MovzAnd2Movz* optimization improved
+ MovzAnd2And optimization introduced
* extended AndMovzToAnd to support more variants
* compilation on i386 fixed
* fix for Mantis
0037779: use init RTTI instead of full RTTI when copying an array
+ added test
Disable af_smartlink_sections option for Z80 vasm and z80asm assemblers, as it leads to errors
+ modified patch by J. Gareth Moreton: Aarch64: LDR/STR pairing optimisation, resolves
0037580
* better error message in case of illegal nodes for string constants, resolves
0034054
Avoid range check error in a_op_const_reg_reg method when compiled with -CriotR
* another error message changed into a better one
* do not copy unused paravarsyms
* x86: ImulMov2Imul optimization
* x86: apply OptPass1VOP also to vsqrts*
* xtensa-freertos: patch by Alfred for better tool search, resolves
0037308
* Xtensa: set is_jmp flag so branch optimization works
* xtensa-freertos: run python helpers only on non unix by directly calling python
+ xtensa: make use of float.s instruction
+ xtensa: make use of nsau to implement Bsr*
* patch (with little modification) by J. Gareth Moreton: refactor ARM/Aarch64 peephole optimizer, first part of
0037526
patch by J. Gareth Moreton: GetNextInstructionUsingReg drops out earlier, second part of
0037526
z80: cleaned up some tabs vs. spaces indentation mess in the vasm writer. no functional change.
z80: re-enabled af_smartlink_sections for vasm which is required for the vasm + vlink combo, partially reverting
0046916
z80: added handling of sections provided by the startup code to the vlink linker script. this fixes executable building, but the resulting executables still don't work at this point
+ evaluate typeinfo(
)=/<>typeinfo() at compile time, resolves 0030260
* use fld/fst on i386 to copy doubles
Add conversion from "$" to "." for i386-watcom target and avoid iteration if no char modification is wanted in ApplyAsmSymbolRestrictions function
Use ApplyAsmSymbolRestrictions function and limit label sie to 247 for watcom assembler
Rename pvmt internal type to lower_pvmt for i386-watcom as watcom assembler is not case sensitive
* Fix NaN for watcom assembler (C000h is considered as a label, use 0xC000 instead)
* Also use ApplyAsmSymbolRestrictions for label names (required for units using embedded '.'
* Add ':' after a label if there is hp^.next is not assigned
+ x86: FstpFld2Fst optimization (re-enabled for safe cases)
+ optimize comparisons of constant pointers
* set default processor for i386 to Pentium2
* AVR: MovMov2Mov 2 optimization
z80-zxspectrum: fix the the linking order in the bss section, so the startup code doesn't crash when linked with vlink
Treat metadata as data in agppcmpw.pas
+ support all XSAVE instructions, resolves
0037864
+ use pxor/vpxor to load 0.0
+ more pxor/vpxor optimizations
* inline more aggressively, if the ie for the initial change re-appears, it must be fixed differently
* don't do illegal type conversions on GetNextInstructionUsingReg results
* avx-512 has 32 mm registers
* load 0.0 by (V)XORPS/D instead of (V)PXOR in mm registers
* use (V)XORPS/D for unary minus
* use V* instructions if possible
* fix i386 compilation
* mm registers 16-31 are also volatile during a call
+ make use of avx-512 instructions vcvtuis2s* if possible
* improved (V)MOVA*(V)MOVA*2(V)MOVA* 2 optimization
* proper change information for avx-512 vcvt* instructions
* generate simplified code for unary minus when sse/avx is used
* is_signed does not check the ordtype but the ranges, so it cannot be used to
check for valid types for cvtsi2sd/s
* patch by Marģers to unify internal error numbers, resolves
0037888
powerpc: added support for 64bit explicit locations in legacy MorphOS syscalls. improved error handling of various corner cases or explicit paraloc handling
* turn the recently added 3357 warning into an error, to avoid another compiler IE later
* when setting up the symbol for the SEH data don't check whether it is global, instead check whether it's a function
* reset the stored symbol for SEH data once a new section is encountered
* use the name of the symbol instead of the name of the section as the later is always lowercased
* (slightly) modified (formatting, warning) patch by Jan Bruns to speed up overloading search, resolves
0036666
* naturally align threadvar lists/tables
o required for (future) Darwin arm64e target, and a good idea elsewhere too
(on constrained targets, it won't make a difference because the alignment
of pointers won't be > sizeof(longint))
* AArch64: added SIMD instructions (only plain ARMv8-A for now)
o added AArch64 regset parsing support in assembler reader, means that "{"
no longer starts comments there (like in the ARM assembler reader)
o added AArch64 indexed SIMD register support and removed old cg hacks
that worked around its absence
+ Add new LastCommonAsmOp constant to arm and aarch64 CPU targets.
* Uses this new constant to define TCommonAsmOps set type.
+ Use this constant in armgen/aoptarm MatchInstruction function,
to avoid a range check error when compiling with -CriotR with optimization.
* fix try_make_mul32to64() if it's called with a constant node on the
left (mantis
0037878)
o can happen if use_generic_mul32to64 returns false
* patch by J. Gareth Moreton to improve LEA/SHL -> LEA optimisation, resolves
0037954
* (slight modified) patch by J. Gareth Moreton to reduce number of assembler optimizer passes, resolves
0037959
* better complexity calculation of tvecnodes
* explicitly convert array indicies to pointer sized integers, so cse
can handle the conversion
* simplify tcgunaryminusnode.second_integer
+ remove type conversions also for unary operations if possible
* try_make_mul32to64: restore original node order if transformation failed
o this gets called by taddnode.pass_1, which caches the left/right
node types/resultdefs
* LLVM: ensure that the parameter types are processed of procdefs that are
declared when they get first called
o fixes compilation of several tests/test/tobjc* tests after
0046675
+ x86: MovxMov2Mov optimization
* patch by J. Gareth Moreton: minor refactor of reduced iterations of pass 1 of the assembler optimizer, resolves
0037972
* colored message output as requested in
0037331, so far linux only
Also look for function name of 'result' is not found in load_result_node
* patch by Jan Bruns to solve an issue with the new overloading selection code, resolves
0037969
+ inline subroutines with formal parameters as well
* directly copy the result of set set into the left side of an assignment
Add explicit longint typecast to avoid range check errors with unwindrec longword variable
Display xtensa specific options for ppcxtensa -h
* delphi has excessprecision turned on by default
* excess precision should not be applied to comp or currency
i386-go32v2 also does not support progbits, as other COFF targets
Disable use of cmov instructions in alignment patterns for some i386 targets (it prevents use of some emulators)
- remove unused trimbspace
+ added ansistring variants for some helpers
* use AnsiString for file names to overcome length limitations
m68k: add missing FINT and FINTRZ instructions to spilling_get_operation_type()
* reverted accidental change
m68k: change the stack push order in the register calling convention to left-to-right. This should fix parameter handling in nested procedures (tnest5)
* bump ppu version after
0047279. it changes the ABI (m68k only), so units are incompatible even if the format didn't change
+ patch by Anton Kavalenka to support coloured output on windows, resolves
0038025
* added "const" to some string parameters
* give an error when trying to define a macro/compiler variable with
an empty name
* changed TIDString and tsymentry.realname to TSymStr
o for TIDString: prevents shortstring -> ansistring conversions with
-dsymansistr when looking up symbols
o for realname: consistency with name
m68k: initial commit to add the Sinclair QL as a compiler target
* m68k: enabled vasm assembler support for the Sinclair QL, and added linking
* using ymm registers for copying data is always useful, regardless of alignment
* fix tcgx86.a_loadmm_reg_ref and tcgx86.a_loadmm_ref_reg for 64 OS_M512
* allow var alignment up to 64 bytes
+ i386 supports also avx-512
* i386 can use only 8 mm registers with avx-512
* also use avx copying for mod 4=0 memory blocks
* patch by J. Gareth Moreton: MOV/LDR/STR/MOV optimisations for ARM/AArch64, resolves
0037638
+ completed Ch_* information for VMOVD*
+ take care of vzeroupper in exit code optimizations
+ tx86addnode.second_opvector makes use of AVX instructions
* moved UseAVX from cgx86 to cpubase
+ UseAVX512
sinclairql: when linking with vlink, generate an unrelocated binary with appended relocation info, so the startup code can relocate it
* fix for Mantis
0038051: make Chr() a real intrinsics so that it can be used in type declarations as well
+ added test
* increase PPU version so that the change of Chr() to a full intrinsic will not lead to problems
* fixed type of size parameter passed to fpc_getmem() when translating
new(pointer) (mantis
0038054)
m68k: fix references like (An) to parse properly in the assembler reader
sinclairql: make sure the default CPU target is 68000 for the QL. also, some cleanups
Move explicit typecast to after check to avoid RTE when compiled with -CR
* use VPXORD in avx-512 mode as VPXOR does not work for the upper 16 registers
* compilation on i386 fixed
* regenerated msgidx/msgtxt after
0047376
* Arm Thumb does not support complex references including SP, resolves
0038056
Remove setting of USE_FAKE_SYSUTILS macro for MacOSClassic, as sysutils is now compiled for that OS
Use MPW linker variant also for m68k-macosclassic target
Avoid uninitialized variable warning with -O4 option
Merge: 06f5e293df 897322868b
-- Zusammenführen von
0047033 bis
0047401 in Ā».Ā«:
C compiler/i386/i386nop.inc
U compiler/i386/i386tab.inc
U compiler/i386/i386atts.inc
U compiler/i386/i386att.inc
C compiler/i8086/i8086nop.inc
U compiler/i8086/i8086tab.inc
U compiler/i8086/i8086atts.inc
U compiler/i8086/i8086att.inc
U compiler/x86/x86ins.dat
C compiler/x86/rax86.pas
U compiler/x86/aasmcpu.pas
U compiler/x86/cpubase.pas
U compiler/x86/agx86att.pas
U compiler/x86/itcpugas.pas
U compiler/x86/rax86att.pas
C compiler/x86_64/x8664nop.inc
U compiler/x86_64/x8664tab.inc
U compiler/x86_64/x8664ats.inc
U compiler/x86_64/x8664att.inc
U compiler/utils/mkx86ins.pp
U tests/utils/avx/asmtestgenerator.pas
U tests/utils/avx/avxopcodes.pas
-- Aufzeichnung der Informationen für Zusammenführung von
0047033 bis
0047401 in Ā».Ā«:
U .
Konfliktübersicht:
Textkonflikte: 4
Konfliktübersicht:
Textkonflikte: 4
* fixes for nasm writer, resolves
0038074
+ test
sinclairql: reduce default stack size to 8K
sinclairql: add a note about .bss sections and the binary size, no functional change
m68k: fixed parsing of absolute addresses in the assembler reader
m68k: fixed parsing of constants to absolute addresses
* simplified and fixed code of (v1=const1) and (v2=const2) optimization, resolves
0038066
sinclairql: the newline on this system is LF, not CRLF
sinclairql: following Frank Wille's advices, reworked the linker script to omit .bss section from the binary. this reduces a simple 'hello, world' size by ~5K. needs matching startup code.
Revert commit
0047257, Disable use of cmov instructions in alignment patterns for some i386 targets (it prevents use of some emulators)
Replace it by a new set of i386 targets, for which the default cpu is set to i80486 instead of pentium2
to avoid (for default configuration) use of CMOVxx or PREFETCHyyy instructions, not supported by some emulators.
* better writing of ordinal const. nodes
* correctly simplify tree transforms of (a+c1+c2) if a is a pointer, resolves
0037671
* Give access to CPU specific fields of tsettings record
in GENERIC_CPU mode, to be used by ppudump utility.
generic/cpuinfo.pas: Add tinstructionset, used for ARM cpu.
globals.pas: Put all CPU specific fields of tsettings record
inside a variant part when GENERIC_CPU is defined.
Also import llvm unit when GENERIC_CPU is defined.
+ utils/Makefile.fpc: Add -Fu../llvm option to compile ppudump,
as it now also needs llvm specific code decause of globals unit change.
bugfix gnu-assembler platform i386 vcvtsi2sd,vcvtsi2ss,vcvtusi2sd,vcvtusi2ss
bugfix gnu-assembler platform i386 vcvtsi2sd,vcvtsi2ss,vcvtusi2sd,vcvtusi2ss
bugfix gnu-assembler platform i386 vcvtsi2sd,vcvtsi2ss,vcvtusi2sd,vcvtusi2ss
bugfix gnu-assembler platform i386 vcvtsi2sd,vcvtsi2ss,vcvtusi2sd,vcvtusi2ss
Do not set USE_FAKE_SYSUTILS for MacOS anymore
Add separate cs_assemble_on_target tglobalswitch entry
+ options.pas: Add new option -sT, to do only the linking on target, by
opposition to the old -st option, which does
both assembling and linking on target.
msg/errore.msg: Add new -sT help message
modify -st help message, to explicitly say that both assembling and linking
scripts are prepared for target system.
* msgidx.txt, msgtxt.inc: Regenerated
In FindObjectFile check the assembly file if cs_assemble_on_target is in globlaswitches
Replace cs_link_on_target by cs_assemble_on_target in assemble unit
sinclairql: make sure the Sinclair QL defaults to vlink
+ optimization type converted (modulo) divisions as well by removing up/down converting but,
insert a test and separate code path for -1 if needed
* fits_in_mm_register takes care of avx(512) support
* fix spilling of avx(512) registers
* get_scalar_mm_op fixed for M256
+ implement prefetch intrinsic for aarch64
* set reasonable defaults for arm eabi
* patch by J. Gareth Moreton: fixes crash on ARM with -CriotR, resolves
0038116
+ Aarch64: call OptPass1FData for FMA instructions as well
+ Aarch64: implemented FMovFMov2FMov, not yet used
m68k: fix DB/DW/DD handling in inline assembler, update BuildConstant() method to current standards. issue reported/initial patch by Marcel Kilgus in QLForum.co.uk
* remove obsolete comment from rautils/ConcatConstant, issue reported/initial patch by Marcel Kilgus in QLForum.co.uk
sinclairql: use .exe as extension for executables instead of .bin, patch by Marcel Kilgus at qlforum.co.uk
Also accept s80bit real constants when FPC_SOFT_FPUX80 macro is defined
sinclairql: map file generation support with vlink, inspired by a patch posted by Marcel Kilgus in qlforum.co.uk
* backported vlink map file generation to other targets using vlink: Amiga, Atari and ZXSpectrum
+ Xtensa: make use of the LSX/SSX instructions
* Xtensa: cleanup of getreferencestring
+ added coloured compiler output support for OS/2 and DOS targets, platform-specific parts refactored to a standalone unit to remove the heap of ifdefs in unit comphook
sinclairql: added platform specific options to allow specifying executable metadata format
sinclairql: drop support for the BASIC loader, write Q-emuLator or XTcc compatible metadata to the executable instead. based on a patch by Marcel Kilgus in qlforum.co.uk
sinclairql: mark the qhdr metadata format as default in the help text
* when getting an llvm temporary recorddef, recurse into arrays rather than
treating them as opaque defs. This is required to ensure that the temporary
recorddef for all x86-64 function results are the same on the caller and
callee side, as we allocate new arrays when generating them
* pass lp64d to GNU AS for abi_riscv_hf to get the right ABI set
* .def must be set on linux else it might be that the created executable is
deleted after compilation
Allow easier disabling of $inline on, by using -dDISABLE_INLINE
Improve CRC_checksum testing code with -dDEBUG_UNIT_CRC_CHANGES -dTest_Double_checksum -dTest_Double_checksum_write
Add {$i fpcdefs.inc} to units that do not have that include
bugfix internal assembler-reader x86 opsize local var
bugfix internal assembler-reader x86 opsize local var
Fix compilation with DEBUG_PPU macro set
* do not include fpcdefs in the cepiktimer unit
+ factor out PostProcessELFExecutable
+ write executable section size on linux
* take care of po_noreturn in more cases
* Fix for Mantis
0038122: when a deref node is passed as a Self parameter for a type helper (which is a var parameter) we need to pass the non-derefentiated value so that the data it points to can be modified by the helper's method (this is Delphi compatible)
+ added tests
* Improve Test_Double_checksum with Test_Double_checksum_write CRC testing code.
Pass the three checksum arrays from ppufile to module owner,
to be able to check that the checksums computed at the time pf ppu writing
are compatible with the ones computed at interface level.
+ #QLvember work: stack frame optimization for m68k
* check if an invisible parameter for the result occupies parameter space
working on new testmethods (memref-operands)
working on new testmethods (memref-operands)
working on new testmethods memref operands
working on new testmethods memref operands
* allow an AT&T suffix for movabs
+ -Xa option: generate code which allows to use more than 2 GB of static data on 64 Bit targets
+ implemented support for x86-64
* more than 2 GB static data requires to use the --no-relax option on linux
+ range check enumeration array indicies, range checking is after all a safety mean
working on new testmethods (memref-operands)
working on new testmethods (memref-operands)
Add internalerror when V_Error level is used in Test_double_checksum code, only with TEST_CRC_ERROR macro set
Apply patch proposed by J. Gareth Moreton in:
bug report
000036882: [Feature] Class and record definition XML dump extension
These patches extend the node dump feature (enabled with DEBUG_NODE_XML)
so it also dumps class and record definitions to the XML file. They are contained within
tags.
Currently only fields and constants are dumped to the XML file. Methods, constant and variable definitions may be added later.
* dir_push might not flush pending switch changes but has to read the pending
record if needed
working on internal assembler-reader x86 opsize local var
working on internal assembler-reader x86 opsize local var
Fix i8086 compiler failure due to move of printnodeindention variable into verbose unit in commit
0047658
* Second patch xml-node-dump-defs.patch from J. Gareth Moreton from bug report 36882.
With same changes to ensure that xmllint find no errors in generated xml files.
+ add endsym to ConcatConstSymbol
Fix z80 compiler failure after change to ConcatConstSymbol in commit
0047668
working on new testmethods and bug-fixing size of (memref-operands | global and local variable
working on new testmethods and bug-fixing size of (memref-operands | global and local variable
* fix in
0047632 should be enabled for all targets as it is a stack tainting
parameter
bugfix internal assembler-reader x86 opsize local va
bugfix internal assembler-reader x86 opsize local va
working on new testmethods and bug-fixing size of (memref-operands | global and local variable
working on new testmethods and bug-fixing size of (memref-operands | global and local variable
* don't do x*x -> optimziation for xtensa as it causes a recursive call in sqr(...)
Raise internalerror inside RemoveCurentP is called with p=hp1, because it leads to using a class instance after it has been freed
Avoid internalerror in RemoveCurrentP for arm compiler
* cleanup merge overlefts
+ min/max intrinsics for internal use by the compiler
+ replace appropriate if statements by min/max intrinsics
+ support min/max intrinsic on xtensa
+ project file for PowerPC64LE
+ read 64-Bit ELF executable info correctly
* x86 change information updated
* (modified) patch by Christo Crause: ESP8266 doesn't support min/max instructions, resolves
0038175
* patch Christo Crause: Use LDS for 8 bit references, resolves
0038173
+ min/max support for x86
* quick fix for llvm compilation
* limit min/max optimization to fastmath for now, as the NaN handling is not working yet
working on internal assembler-reader x86 opsize local var
working on internal assembler-reader x86 opsize local var
* Adapted from patch node-dump-pass-1.patch submitted by J. Gareth Moreton from bug report 38156.
This patch extends the DEBUG_NODE_XML debug feature by also outputting,
to the *-node-dump.xml files, the node tree as it appears after the first pass,
since it often contains many more internal nodes like temporary allocations that may need
to be evaluated for debugging and development purposes, or node-level optimisation opportunities.
+ added explanation for min/max intrinsics
* prepared x86 implementation for proper NaN handling
Fix bug introduced in commit
0047709, by only calling node_complexity if first pass was already done (bug report 38183)
* handle min/max properly if it is applied to NaNs
* test extended
Fix pos field closing in XML node output after commit 47720
+ m68k: JSR, RTS to JMP optimization
m68k: in g_concatcopy, check the actual alignment of references being copied rather than always excluding word and dword sized direct copies on a 68000
cleanup bugfix internal assembler-reader x86 opsize local/global var
cleanup bugfix internal assembler-reader x86 opsize local/global var
amiga: fixed the recently added link map generation to work properly. needs recent vlink to work
* fix regression introduced with
0047625 for Mantis
0038122: when checking for a dereferentiation of the Self parameter subscript and vec nodes need to be kept
+ added test
* made optimization JSR, RTS to JMP more bullet proof, added comment
* m68k: MOVE, TST, Jxx/Sxx to MOVE, Jxx optimization
* Try to read command line exec name on linux, using argv[0], in order to be able
to use the symbolic link name instead of the real executable name.
This allows to use symbolic links to gppc386, named gppc1
to be able to launch ppc1 under gdb, as it is already possible
under OpenBSD (which returns the command line name via paramstr(0),
or under Windows if is used (generated by mklink).
+ Generate errors if compiler executable is not found, or if gdb binary
is not found.
* allow absolute variables with an address to be used as syscall base
* m68k: proper values for first_*_reg
+ m68k: LEA, MOVE(M) to MOVE(M) predecremented optimization and MOVE(M), LEA to MOVE(M) postincremented optimization
* call node_complexity correctly in order_parameters when sorting parameters
+ optimize if x>a then x:=a; into min(a,x);, similiar for max
* test extended
* min/max optimization on x86 can be applied now without fastmath as NaN is handled properly now
* x86: apply VOpVmov2VOp optimization to vmins*/vmaxs*
Fix ash_savefregp_x handling, as revealed by range check error
* improved change information
Fix compilation failure for avr compiler with -dDEBUG_NODE_XML, to fix bug report 38222
cleanup and add comments to div. vcvt.. opcodes
cleanup and add comments to div. vcvt.. opcodes
* apply doremoveinttypeconvs to unary minus and not on 8 and 16 bit targets as well
* do an unsigned division if one operand is unsigned an the other
one a constant in its range, resolves
0038180
* x86-64: correctly translate and with large constants in mod optimizations, resolves
0038164
* change def parameter of single_type() from var to out (part of patch by Blaise.ru)
* apply slightly adjusted patch by Blaise.ru which moves parsing of result types to a separate functions thus ensuring that File types can't be used for procedure variables (just like they already couldn't be used as a result type for normal functions)
+ added test
working on internal assembler-reader x86 opsize local/global var
working on internal assembler-reader x86 opsize local/global var
* Aarch64: fix 32 bit div operations with constant denominators, resolves
0038225
working on new testmethods and bug-fixing size of (memref-operands | global and local variable - append correct gas-suffix on any vcvt.. opcodes
working on new testmethods and bug-fixing size of (memref-operands | global and local variable - append correct gas-suffix on any vcvt.. opcodes
+ patch by J. Gareth Moreton: some new x86 assembler optimizations, resolves
0038130
* apply patch by Blaise.ru to enable the correct generation of names for classes/interfaces inside local symtables; these will be required for reference function types which are in fact interfaces and classes, this does not mean that ordinary classes can be declared inside functions
Note: no test as the functionality is not yet used
* fix the m68k cross-builds by disabling part of
0047824
external gas-assembler - handling special opcodes with multiple memref-size e.g. vfpclassps/pd - if operand-opsize < S_XMM =>> use memref-min-size
external gas-assembler - handling special opcodes with multiple memref-size e.g. vfpclassps/pd - if operand-opsize < S_XMM =>> use memref-min-size
Appply fix from Gareth Moreton in bug report 38247
* implemented UseAVX512 properly
+ make use of VREDUCE* for frac(...) if AVX512QD is a available
* Ch_ information for vreduce* fixed
* min/max optimization needs to check both operands of the if condition, even if no else-statement is passed, resolves
0038249
Fix compilation of i8086 compiler after commit
0047840
* lines with 255 chars a little bit long, reformated them
m68k: the LEA+MOVEM to MOVEM optimization is not feasible on a ColdFire
+ Xtensa: support large stack frames for the call0 abi
m68k: new CPU capability - the LINK instruction supports LONG displacements (68020+)
+ support got modifier on labels
* fixed llvm shadow symtable construction in case fields are reordered
(-Ooorderfields) and hence their offsets are no longer monotonically rising
* also fixed padding for variant bitpacked records in llvm shadow symtable
* generate more efficient code for trunc(currency), trunc(comp), and
round(comp) on platforms where currency and comp are handled using the FPU
o also fixes trunc(comp) and trunc(currency) compilation for x86 on LLVM
with -Oofastmath
* add missing removal of excess fpu precision typecasts for trunc/round
- revert
0047208
* properly fix the internalerror it hid: only replace the local symbols
migrated to the parentfpstruct right before generating debug information,
so that internally generated self/result loads during optimisation passes
don't get confused by the replacement absolutevarsyms (those are normally
never encountered during optimisation, as regular absolutevarsyms are
replaced during parsing)
* use new TSym.EscapedRealName property when creating new symbols with the
same name as existing symbols
* factored out the creation of loadnodes for special variables/parameters
+ $codealign directive accepts setting maxcrecord
external gas assembler: special handling for correct suffix in vfpclass-opcodes
external gas assembler: special handling for correct suffix in vfpclass-opcodes
* fix comment typo mentioned by Bart
internal assembler-reader x86 opsize local/global var - cleanup
internal assembler-reader x86 opsize local/global var - cleanup
working on internal assembler-reader x86 opsize local/global var
working on internal assembler-reader x86 opsize local/global var
* fixed error in load_fpu_location triggered by round() (fixes webtbs/tw32671
on i386 after
0047854)
+ implement align directive for records, resolves
0028927
* correctly handle inlined exits in dfa, resolves
0038259
internal assembler-reader x86 opsize local/global var - cleanup
internal assembler-reader x86 opsize local/global var - cleanup
* Fixed missing slash in fppkg.cfg when installed in the root
* do not check inlined exit nodes for unset results, resolves
0038259
* first part of fixing
0038267: do not bail out early during constant folding
if the constant is 1 or -1
* refactored constant folding code
* properly fold string+string const+string const., resolves
0038267
internal assembler-reader x86 (local/global var) - validate asm-opcode-attsuffix and memrefsize
internal assembler-reader x86 (local/global var) - validate asm-opcode-attsuffix and memrefsize
+ fold also (string const+(string const+string var))
* string tree folding code moved into level 2 opt. block
* instead of blindly consuming whatever comes next trigger an explicit error if the parsed expression does not match for "INDEX ordexpr" or "NAME strexpr"
+ added tests
* always add a generic dummy if it is a procsym
* ensure that the dummy symbol is registered if it's added due to a routine
* use a case statement instead of nested if-then statements
* also handle call nodes when determining the generic symbol for inline specializations
* when only a symbol name is provided to generate_specialization_phase1 allow a symbol table to be provided as well
* correctly handle the case should the generic dummy symbol be a procsym instead of a typesym
* Delphi does not allow a generic method to be overloaded by a non generic type of the same name (unlike for generic types and non generic routines); this is probably done to simplify the implementation of implicit specializations of generic methods so we do this as well. For this we change the dummy symbol for generic routines from a typesym to a procsym
+ added tests
Note: what Delphi /does/ allow however is to overload a generic routine with a generic type... go figure. :/ We currently don't allow that
* fix compilation on targets that use Stabs debug information: ignore generic dummy symbols with no procdefs for generating stabs data
+ added newly used opcodes to avx_opcode_only_op0_may_be_memref
-- Rückwärtiges Zusammenführen von
0047837 bis
0047033 in »ppcx64.lpi«:
U ppcx64.lpi
-- Aufzeichnung der Informationen für rückwärtiges Zusammenführen von
0047837 bis
0047033 in »ppcx64.lpi«:
G ppcx64.lpi
-- Entfernung der Zusammenführungsinformationen von »ppcx64.lpi«:
U ppcx64.lpi
-- Rückwärtiges Zusammenführen von
0047837 bis
0047033 in »ppcx64.lpi«:
U ppcx64.lpi
-- Aufzeichnung der Informationen für rückwärtiges Zusammenführen von
0047837 bis
0047033 in »ppcx64.lpi«:
G ppcx64.lpi
-- Entfernung der Zusammenführungsinformationen von »ppcx64.lpi«:
U ppcx64.lpi
* use str(...) instead of typinfo unit
* use str(...) instead of typinfo unit
+ patch by J. Gareth Moreton: Advanced MOVZX optimisations, resolves
0038294
* fix for Mantis
0038310: ignore procsyms that have no procdefs for checking overloads, or more precisely to stop checking for overloads; these are generic dummy symbols
+ added (simplified) tests
* weight currency->float conversions the same regardless if
the currency type is handled by the integer unit or the x87 fpu,
resolves
0038309
* have the generic dummy symbols for procsyms keep track of their overloaded generic procsyms so that they can be easily found (will be needed for implicit specializations)
* llvm: only set custom parameter alignments for byval parameters, the rest
is handled automatically by llvm (and since llvm 11.0 you get an error if
you specify an alignment for them anyway)
* throw a proper error if a contructur has a type parameter in delphi mode, resolves
0037217
+ AddLea2Lea optimization
* improved LeaLea2Lea
* patch by J. Gareth Moreton to resolve bug introduced in the first patch, resolves
0038294
* simplified code for JccAdd2SetccAdd optimization
* patch by J. Gareth Moreton to fix MovzxCmp2CmpMovzx, resolves
0038339
* clear up message that a global generic references a static symbol a bit
* regenerate msg*.inc files
* add parameter cleanup nodes to the call cleanup block (mantis
0038316)
* do not extend 8 bit return values to 32 bit when loading them into eax,
this is not required by the api, neither does e.g. clang it
cleanup + add internal error if all asmr_e_not_supported_combination_attsuffix_memrefsize_type are reported
cleanup + add internal error if all asmr_e_not_supported_combination_attsuffix_memrefsize_type are reported
* avoid widening of shl operations, this is not necessary for them either
+ support R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX
* patch by J. Gareth Moreton: refactor OptPass2Jcc, resolves
0038343
* simplify tx8664shlshrnode.pass_generate_code, it should not mess with the result type, this
is a matter of the type check pass
* x86: some fixes to enable 8 and 16 bit operations
* arm*: fix SxtbAndImm2Sxtb (now SxtbAndImm2Uxtb) optimization as proposed by Pierre and Gareth
* similiar fix to
0048167 for OptPass1SXTH
+ remove try ... finally statements if the finally block is empty
Fix clearing of single type register variable in initialize_regvars method for ARM cpu (with -Ooregvar)
* patch by J. Gareth Moreton: Unitialized result variable fix on non-x86 debug builds, resolves
0038371
Avoid inlining of real constant for m68k if type is not best precision
* arm/aarch64: patch by J. Gareth Moreton: fix register allocation information for Mov2None 2, should resolve
0038055
Reset paratargetdbg to dbg_none when handling -g- option, to really suppress debug information generation
* patch by J. Gareth Moreton: aarch64 EXTDEBUG fixes and extensions, resolves
0038383
* give a proper error if macros are too deeply nested
* Removed/ifdefed lots of unused variables.
* Corrected visibility of overridden methods.
* Commented out some unused (yet?) local variables.
* Fixed a wrong code caused by a typo. It has been revealed by a note about an unused var.
* Fixed
0044145. To test if a constant is declared it is needed to use {$if declared()} instead of {$if defined()}.
* Commented out the unneeded/unfinished code.
* Removed/ifdefed the assigned and unused variables.
* Removed more assigned but unused vars.
* Corrected method's visibility.
+ modified patch by Christo Crause: if the target support, the switch -Xu can be used to generate the executable as an uf2 file
* Removed in_x86mm_last (the duplicate no and unused) from the tinlinenumber enum.
* Fixed value of the LF_PAD13 enum element.
* do not output error numbers for options
Add cs_generate_uf2 entry into ppudump
+ write message number to docs
+ enclose arguments in text angles
* rgobj: ungetiftemp can't be used here since it frees only temps of the tt_normal type.
* compiler utils cannot depend on StrUtils
* use generic VFP type instead of VFP list prone to changes
* properly mangle interface wrapper names to avoid duplicate label errors, resolves
0038385
m68k: revert
0048224, the fix proposed in that patch was just hiding an underlying issue
* fix type conversion for array indicies if the ordinal ranges of the involved types do not overlap, resolves
0038413
* handle generic with ord call of sub-range and enumeration data excluding 0 correctly, resolves
0038412
* removed accidently committed printnode
* the size of the CIE_pointer in an FDE is always 32 bit
* allow sub/add nodes in constant pointer expressions, resolves
0034027
* create \index entries in the messages.inc for an index of message texts and numbers in the user manual
bugfix
000037785 cvtsi2sd,cvtsi2ss for platform i386
bugfix
000037785 cvtsi2sd,cvtsi2ss for platform i386
+ throw a warning in ISO mode if a constant string is assigned to a char and the sizes do not match, resolves
0038439
* do not initialize unncessary register allocators
* Fixed expectloc of local variables passed as a formal parameter. This issue is caught by cycling the compiler with -dEXTDEBUG. Yet the compiler can't cycle with EXTDEBUG due to other issues with wrong expectloc.
* more helpful message if an unknown field is accessed in the assembler reader, resolves
0038475
- armv5 never existed (without extension), removed
* do not mess with FPA registers if they are not available
* factored out tbasecgarm.init_mmregister_allocator
+ throw an error if hardware floating point operations are used in thumb(-1) mode, this is not supported
* arm: taicpu uses set instead of boolean to store instruction states
+ track if an instruction is a thumb instruction in taicpu
* forgotten part of last commit
* arm thumb1: several fixes for the internal assembler writer
* initialize current_settings as early as possible so cs_debugswitch is set correctly if needed
* ARM: NR_RETURN_ADDRESS_REG is R14
* arm thumb: generate proper cfi
* initial implementation of CFI support for arm (non-thumb)
* generate advance_loc records only if there was code/data since the last advance_loc entry
+ (safe) heuristics to use DW_CFA_advance_loc1 in CFI
+ generate initial cfi for aarch64
* more cfi support for aarch64
m68k: extend the the register to full size, when multiplied by an immediate in memory references. Patch based on the work of Pierre Muller.
* patch by Alfred to fix cutils.CompareVersionStrings, resolves
0038514
+ array defs. of open arrays are now marked by ado_OpenArray, so (internally!) zero sized array can be declared with 0..-1
* string constants have a size of 0, resolves
0038504
* correctly set the defowner of the exception symtable to the surrounding routine as suggested by Blaise.ru
+ add modeswitch for anonymous function and function references
* allow in-operator to be used on type parameters, resolves
0038497
* Darwin targets that don't support link order sym files can't smart link
vectorized sections
* attempt to fix bitpacked records with qwords in them (tw36156) when cross-compiling to big endian targets from x86. essentially the x86 shifting workarounds in the code already weren't covering all corner cases.
bugfix
000037785 cvtsi2ss and cvtsi2sd in x86_64 { att}
bugfix
000037785 cvtsi2ss and cvtsi2sd in x86_64 { att}
* correctly allocate edx for mulx, resolves
0038533
Apply patch proposed by J. Gareth Moreton in bug report
000038527
The patch reworks the LeaLea2Lea optimisation and hopefully fixes the bug (admittedly by adding a brand new optimisation!).
m68k: removed some helper function which was added, but in the end it never saw any use
m68k: adjusted some max alignment values for m68k-linux based on i386-linux, because the ELF loader on m68k should be able to provide the same alignments for globals
Patch by Gareth Moreton
* Fix lea optimizations which lead to more failures with -O3 and -O4 options.
- LeaLea2Lea now checks to see if the index register is in use.
- For both the base and index registers, RegUsedBetween is changed to
RegModifiedBetween, since just reading the register is harmless for the
optimisation (it finds additional optimisations in the RTL as a result).
- Because I saw the mis-optimisation with MOVZX that occurred (even
though it was due to the mis-optimisation of LEA instructions), I wrote
some extra code in OptPass2Movx as a safety measure to ensure this
doesn't happen (although no additional instances of it happening have
been noted so far - best be safe than sorry).
+ added b.cc/b.cs support to AArch64 assembler reader (mantis
0038485)
* applied patch by Pierre to fix make cycle -Cr
+ SETcc/Mov -> SETcc optimization
m68k-linux: revert maxCrecordalign to 2, as an experiment to fix some linking-against-C regressions since the alignment changes
* for setjmp based exception handling, get the type of the exception reason from the setjmp result
* fixed JVM stack height calculation after calls returning an
implicit pointer tpe
* the new constant string arraydefs are also implicit pointers types for JVM
* support Objective-C classes and protocols with -gw3 (mantis
0036250)
* fix LLVM after
0048828
* global gotos really use the return type of fpc_setjmp to test where we come from
+ apply excess precision also to unary minus nodes
* made excess precision really working
+ optimize (a and b) or (c and not(b)) into c xor ((c xor a) and b)
+ test
* sar*/ro* do not call location_force_reg if not needed
* do not omit location_force_reg on second operand of sar/ro* if
it is used to adapt the size of the operand
* patch by J. Gareth Moreton: MOV/SHR reference optimisation, resolves
0038560
* patch by J. Gareth Moreton: SubMov2LeaSub optimisation improvement, resolves
0038555
* patch by J. Gareth Moreton: take care of -Os for SubMov2*, part of
0038579
* do not generate mul instructions if the mul extension is not available
* do not apply the (a and b) or (c and not(b)) into c xor ((c xor a) and b) optimziation if short boolean evaluation is used, should resolve
0038576
* improved test
* improved last commit, better handling of boolean expressions
* last commit fixed, hopefully final fix
* Improve DEBUG_PPU code
* Move flog file closing from closefile method to destroy destructor.
* Fix write_data output into flog
* RiscV32: properly read references with record offsets and base register
+ RiscV32: sanity check in assembler writer
* unified RiscV32 and RiscV64 GAS readers
+ initial (and so far experimental) implementation of -ix to output -i in xml format for further automated processing
+ support for .dc.a directive
* read multiple section flags
* RiscV: basic CFI stuff fixed
* RiscV: if shared libraries are involved, we have to link always against the crt*S.o variants
+ RiscV: initial support of pic generation
* riscv64-linux: generate PIC for all units as it is required for shared libraries
Rough fix for riscv32 failure
* RiscV: unified itcpugas.pas
* RiscV: integer type conversions fixed
- cosmetics: superfluous newlines removed
* the TFPList.List property made protected in order to discourage using it
directly, as this circumvents range checking
Use uvalue field to get unsigned and avoid range check or overflow errors
Avoid invalid typecast error when using -CR option
+ introduced TFPList.IndexOfItem and TFPObjectList.IndexOfItem, which are like
IndexOf, but can also search backwards. The same method already exists in
FPC's classes unit.
* when parsing unions, set the uniondef reference to nil in
current_module.deflist after freeing the object to prevent dangling pointers
and use after free
+ patch by J. Gareth Moreton: AddMov2LeaAdd and AddMov2Lea optimizations, resolves
0038579
+ X86: JccMovJmpMov2MovSetcc optimization
* instead of registering all and then deleting non-propgetter/setter procdefs in
pdecvar.read_property_dec, don't register them by default, and then only
register them, if they are propgetter/setter. This prevents dangling pointers
in current_module.deflist and potential use-after-free bugs.
+ RiscV: initial OpAddi02Op implementation
* RiscV64: type conversion to 8 bit improved
* remove nf_write from the counter node when converting for loops into while loops if the counter is only read
* Dwarf: write variant fields only if the require features are present, resolves
0038651
* Add SAMD51P19A controller type. Unit generated by Michael Ring and slightly modified.
* patch by J. Gareth Moreton: Nothing (NOP) node optimisation, resolves
0038194
* copy and compare the typesym inside type nodes as well
* fix for Mantis
0038642: for enumerations with jumps Delphi behaves as follows:
- GetTypeKind returns tkEnumeration (FPC previously generated a compile error here)
- GetTypeInfo on a generic parameters returns Nil for such types (FPC previously generated a compile error here)
- GetTypeInfo otherwise generates a compile error (as before)
* the offset parameter of reference_reset* must be asizeint rather than
longint (mantis
0038636)
* allow also 8 byte string constants in assembler, resolves
0028640
* fixed assembling via pipe on Darwin
* fixed memory leak, introduced accidentally in
0048998
* cpubase.cgsize2subreg should handle all valid sizes, resolves
0038557
+ Xtensa: tcpuinlinenode.second_prefetch
+ some more change information entries added
Avoid keeping optimized out node in callcleanupblock.statements or callinitblock.statements
Use value $00000F00 instead of $F0000000 for IF_FPMASK, and adapt all floating point constants, to avoid IF_VFPv4 having the same value as IF_PASS2
* x86-64: we can spill replace 32 bit operations if the operation does not modify a register
+ enable colored output on darwin, resolves
0038693
* fix for Mantis
0037426: don't allow an instance function of a type helper to be used on the type instead of a concrete value
+ added test
* Windows on ARM64 adheres to the usual Aarch64 ABI, thus references need to be copied on the caller side as well
+ Aarch64: cpu_capabilities support
+ write controller unit wiht -ix as well
* Aarch64: the M1 is an ARM v8.4-a CPU
* Aarch64: cpu capabilites defines properly named
* Aarch64: enable defining cpu capabilites
* Aarch64: support LSE instructions
* fixes to deadstore optimization
* do not remove register deallocations/allocation pairs if the register is written
* Xtensa: fix crash in TCpuAsmOptimizer.RegLoadedWithNewValue
* allow procvars to not be registered right away
* set proctypeoption for procvars
* extend procvar_dec so that procvars don't have to be registered
+ Aarch64: create better code for not()
* don't override specified assembler on the command line when leaving
assembler files in case that specified assembler is already an
external one
* don't generate high-level CFI statements when the selected assembler
does not support them, even if the target normally uses them
o fixes assembling with -Aas-darwin for i386/arm/x86-64 (on OS
versions that used those)
* allow also CSUBSETREG in tx86inlinenode.second_IncludeExclude, resolves
0038733
* PowerPC: initial (and primitive) implemenation of TCpuAsmOptimizer.RegLoadedWithNewValue
Refactor code to avoid problems with -CR option
+ FreeBSD/AArch64 support (patch by Mikaƫl Urankar, mantis
0038441)
* fixed win32 testsuite regressions after
0049084
sinclairql: enable commandargs and exitcode features
* use up to 16 bytes alignment for the WASI target
+ common assembler optimizer base class for powerpc and powerpc64
* factored out TPPCAsmOptimizer.RegLoadedWithNewValue
- obsolete defines removed
- forgotten file, obsolete define removed, belongs to last commit
* Delphi-mode calling without parenthesis
Also avoid invalid typecast for RegLoadedWithNewValue method for mips, sparcgen and xtensa
m68k: cleaned up some ancient mess from cpunode.pas, no significant functional change, apart from unit inclusion order
m68k: on the Sinclair QL insert the main program's name into the object, so the RTL later can set it as default job name
+ optimized multiplication for "symmetric" bit patterns on arm
m68k: always use ELF objects with vasm for improved cross-compatibility with other tools and compilers
+ Aarch64: completed LSE support for all interlocked operations
* avoid leaving a dangling pointer in pparautl.proc_add_definition to prevent
use after free in different parts of the compiler
Add fForceUseForwardSlash to TLinkRes class, used for vlink linker on hosts using backslashes
* fix for Mantis
0038771: the owner of the procdef might be Nil in case of a specialization (that virtual can't be used on generics is caught later on)
+ added test
Add systems_openbsd to suppported_targets_x_smallr and modify GenerateExecutable in t_bsd unit accordingly
* moved a bunch of constants from dbgdwarf to dbgdwarfconst
* if left is a smaller type, then an extension operation for shr can be removed
m68k: added support to references like (a0,d0.w) in inline assembly, also fixed a bug, where sometimes the index register would have been randomly set as smaller than .l size, when the size wasn't specified
sinclairql: support the upcoming QL binary linking feature of vlink (still in development). it's behind an undocumented -WL switch now. also, reduce the amount of used dataspace by the size of the relocation table in the current linking mode
* patch by J. Gareth Moreton: AArch64 OptPass1Shift register tracking fault fix, resolves
0038691
* moved warning about suspicious comp assignment to type check pass, catches also
assignments of constants
Remove unused, obsolete -dBROWSERLOG option
* NDS: fix condition when to default to apptype arm9
Fix gotpcrel relocation for TESTQ x86_64 instruction
+ Aarch64: use frintz for int(...) instead of creating a helper call
+ Aarch64: directly inline code for frac(...)
* prevention of dangling pointers and use after free after free_unregistered_localsymtable_elements
* decrease macro nesting counter early when expanding empty macro
to avoid errors about too depth macro nesting, resolves
0038802
* patch by Christo Crause to fix
0038789: writing of linker commands should not depent in -s
Add -march=XXX option for aarch64 external assemblers
Add .force_thumb pseudo-directive support forarm reader
Avoid invalid typecast if hp is not an instruction
m68k: fixed a comment. no functional change
Avoid range check error inside genitem_thumb2 by changing local variable i type
Make sure nf_usercode_entry get transferred inside firstpass procedure
Set string length before calling move to avoid problems with global data analysis on systems using C library
* fix compilation of arm compiler on 32 bit hosts
Avoid warning with -O4 option
* avoid overflow during register allocation
Add several missing -AXXX options
Use as-clang as idtxt for as_aarch64_clang_gas_info
* patch by J. Gareth Moreton: AArch64 "magic division"
(replace division by constant with multiplication), part of
0038806
Also check *.pas and *.inc files inside sub-directories in msgused.pl
Add -TFreeBSD target OS option to -h output for aarch64 compiler ppc64
m68k: D2 is considered volatile on macosclassic
m68k-sinclairql: apply the same hack as for amiga and atari to avoid vlink section attribute warning
m68k: sinclair ql now requires vlink 0.16h or newer.
Avoid range/overflow error after commit
0049290
* fix finally block getting unconditionally removed if try-block is empty
(hasnocode(nil) always returns true). Regression from
0048174
* support arbitrary record regvars on AArch64: it has fairly complete support
for inserting/extracting bitfields (although the compiler doesn't use those
instructions yet in all possible cases, it seems)
* patch by J. Gareth Moreton: AArch64: Improved speed and efficiency with constant generation, resolves
0038837
* combine the Boolean parameters of read_proc and read_proc_dec into a set
* have read_body return the created procdef
* use tparse_proc_flags for parse_proc_head as well
* use tproc_parse_flags in parse_proc_dec_finish as well
+ initial support for anonymous functions, for now as essentially nested functions
Based on work by Blaise.ru
Destroy tfornode class loopiteration field if assigned
* (modified) patch by J. Gareth Moreton to unify ldr/str optimizations on Aarch64/ARM, part of
0038841
Avoid using UXT and SXT instructions on arm version below 6
* patch by J. Gareth Moreton, second part of
0038841
+ ARM: basic vasm support
+ initial support for ARMv2
* check for unassigned valuestr when writing ntbs eabi attributes
Try to fix handle of large stack size in xtensa gen_proc_entry/gen_proc_exit
* AVR: made avr_des intrinsic more usefull
sinclairql: enable weak linking support for the Sinclair QL
* patch by J. Gareth Moreton: x86 MOVZX/CMP optimisation, resolves
0038882
* fix building on i386 after
0049366
* first part of AVR assembler optimizer reword
* AVR: second part of assembler optimizer rework
sinclairql: make sure the end of bss (hence the bss size) is also aligned to two bytes
* patch by J. Gareth Moreton: Memory CMP optimisation, resolves
0038907
* patch by J. Gareth Moreton: TEST chain shortcutting, resolves
0038908
* patch by J. Gareth Moreton: Additional SETcc optimisations, resolves
0038767
* more fixes to support vasm on arm
* do not crash on empty eabi attribute strings
* more fixes for VASM for ARM
* patch by J. Gareth Moreton: x86 JccMovJmpMov2MovSetcc improvement, resolves
0038761
* keep track of symbols that are accessed from a nested/anonymous function that belong to a surrounding scope
* check whether an anonymous function can be assigned to a global, method or nested function variable
* the MovOpMov2Op optimization needs to take care of the second operand, should resolve
0038359
* check used registers properly for SETcc/TEST/Jcc -> Jcc, resolves
0038940
* prevent a range check error in TFPList.IndexOfItem when searching backwards in
an empty list and the compiler is compiled with range checking turned on
* Aarch64: apply OptPass1Data to CSEL as well
* set self to nil in current_module.deflist for registered defs in the
tstoreddef.destroy destructor, instead of doing it after each call to
x.owner.deletedef(x)
* patch from Alfred for setting source_cpu_string for the wasm32 platform
Fix duplicate source_cpu_string after last patch, by using cpuwasm32 instead of wasm32 conditional
* improvements to the prevention of dangling pointers in tmodule.deflist,
introduced in
0049417. Now it no longer depends on current_module, so it
handles the case when current_module changes between the time the tdef was
registered and the time it was freed. It also supports freeing the tmodule
before the defs, so the freeing order of the object is once again flexible.
* fixed typecast in tmodule.destroy after
0049426, since registered_in_module is introduced in tdef, not in tstoreddef
- removed the (deflist[i] is tdef) check from the tmodule destructor, since
only tdef descendants are added to the deflist and casting deflist entries to
tdef directly appears to be safe and is done in other parts of the compiler
* change fma cpu flag into an fpu flag
Fix check that third parameter of ADDI hp1 instruction is a constant
Add A_CALL to the list of instructions considered as a calljmp, even though it is a pseudo-instruction, fixes a long list of -O3 and -O4 testsuite failures
* aarch64-darwin supports unaligned memory access, confirmed by testing with clang 12
Add -march option to clang call for llvm target
Return -1 if size of file is smaller tham header size in tppufile.readheader method
Fix compilation for x86_64 llvm variant
* for variant dispatch calls, use the parameter name in source case, not upper case
* improved AndUtxh2And optimization
* ARM: split TCpuThumb2AsmOptimizer.PeepHoleOptPass1Cpu
* patch by J. Gareth Moreton: refactoring to standardise the "Peephole Optimization: " prefix on peephole debug messages, part of
0038975
+ patch by J. Gareth Moreton: New label debugging feature, resolves
0038980
* patch by Alfred to use new linker names for Android NDK >=22, resolves
0038987
* patch by J. Gareth Moreton: ARM - str/str -> stm optimisation, second part of
0038975
* optimization "Merging stores: STR/STR -> STM" cannot be carried out when generating thumb code
* use smaller alignment when generating thumb code
* do not generate exit code for arm (thumb and thumb-2) if a routine is marked as noreturn
+ Merge Add/Sub optimization
+ ARM: PushPop optimziation
activate 'compressed disp8*N' for VCVTQQ2PS xmmreg, xmmrm and VCVTTPD2UDQ xmmreg, xmmrm
activate 'compressed disp8*N' for VCVTQQ2PS xmmreg, xmmrm and VCVTTPD2UDQ xmmreg, xmmrm
activate 'compressed disp8*N' for VCVTQQ2PS xmmreg, xmmrm and VCVTTPD2UDQ xmmreg, xmmrm
activate 'compressed disp8*N' for VCVTQQ2PS xmmreg, xmmrm and VCVTTPD2UDQ xmmreg, xmmrm
* ARM (thumb): do not save registers in routines marked as noreturn
* ARM: fix for Merge Add/Sub optimization
+ stack pages need to be touched on aarch64-win64 as well
* r/esp cannot be used as index register
* throw an error if esp/rsp are used as index register
* allow char constant to be used for const string parameters in generic specializations, resolves
0039030
* patch by J. Gareth Moreton to fix faulty conditional jump logic, resolves
0038985
* DeepMovOpt requires that the target reg of the mov is not modified before hp2
+ SHXXMov2SHXX optimization
* patch by J. Gareth Moreton: improve MovAndTest2Test optimization, resolves
0039156
* patch by J. Gareth Moreton: x86: MovMovSar2MovCltd bug fix, resolves
0039180
* fix for Mantis
0026760: apply patch by Ondrej Pokorny to ensure that units referenced by an "in"-clause are recompiled when they have been changed
+ added test (though due to the nature of the bug it needs to be interactive)
* patch by J. Gareth Moreton: x86: RegLoadedWIthNewValue overhaul and bug fix, resolves
0039187
* patch by J. Gareth Moreton: CMP chain shortcutting, resolves
0039141
* might_have_sideeffects in gen_c_style_operator as proposed by runewalsh, resolves
0039206
* patch by J. Gareth Moreton: x86: Lea2Nop for stack pointer, resolves
gitlab 0039225
* further fix for Mants
gitlab 0026760: applied patch by Ondrej Pokorny to fix recompilation of units referenced with an "in" clause if no file extension is provided
+ added (interactive) test
* patch by J. Gareth Moreton: x86: Minor bitwise optimisations, resolves
gitlab 0039299
* Xtensa: unified DataMov2Data optimization
* Xtensa: optimize constant multiplications
* avr4 has mul instructions
* revert last commit, avr4 has no call/jmp
* remove mhs_exceptions in might_have_sideeffects call for C operators: it improves code
and shouldn't hurt as this is no regression in comparison with current 3.2.x
+ add modeswitch for anonymous functions
* ensure that nested functions of main program, main program finalization and unit initialization/finalization are generated
* consider Self parameters of nested functions as captured as well
* allow to ignore Self parameters; for this the parameter skipping needs to be repeated to correctly catch all cases
* implement assignment of anonymous functions to procedure or method variables if they either capture nothing or (in case of method variables) at most the Self variable
+ add function to check whether a def is an invokable function reference
* Prevent double release of a temp.
* It is still needed to release the temp allocated for the result of an assembler function if the result is not referenced. This fixes some EXTDEBUG warnings.
* optimize tests for a single bit "(a and one_bit_mask_const) = <> one_bit_mask_const" into "(a and one_bit_mask_const) <> = 0" to enable further CPU specific optimizations.
* x86: Added the "test $-1,%reg" condition to the MovAndTest2Test optimization.
* patch by J. Gareth Moreton: AND/CMP optimisation, resolves
gitlab 0039287
* Before
gitlab 0035961 (back in 2017) some simple assignment optimizations, such as "x:=x+y" to "inc(x,y)", were performed when -O2 in tassignmentnode.simplify. In
gitlab 0035961 these optimizations were moved to a separate pass which is enabled only when -O3 by cs_opt_use_load_modify_store. This separate pass can benefit from other optimization. But worse code is generated with -O2 since then.
This commit restores applying of simple assignment optimizations when -O2.
compiler/msg/errord*.msg: Update of German error messages
* Support for sleb128 and uleb128 constants in the NASM writer.
* Added sleb128tostr() and uleb128tostr() methods to TExternalAssembler.
* Use these methods in assembler writers instead of code duplication.
* Added support for the old Turbo Pascal INLINE(data/data/...) statement.
It is available only in the TP mode.
* TP compatibility: For retro CPUs always copy the function result to
the register(s) on function exit if assembler blocks are present.
* In TP-style INLINE, allowed the > modifier for global vars and relaxed range checks.
* sizeof(array) and length(array) must return sizeUint in case the array
size does not fit in sizeint. This fixes a range check error during
compilation on small CPU targets where allowed array size is 64K, but
sizeint is 32K max.
* fix change information for popcnt
* change information for round* fixed
* change information for round* fixed
+ Add support for -Adefault.
* Move help message for option -sT to the correct group of messages.
* Use shorter message to indicate switch to external asm.
* Adapted -sX messages because -sT doesn't force external assembler writer.
+ Add support for -Adefault.
* Move help message for option -sT to the correct group of messages.
* Use shorter message to indicate switch to external asm.
* Adapted -sX messages because -sT doesn't force external assembler writer.
+ Aarch64: FMovFMov2FMov 2 optimization
+ Aarch64: FMovFMov2FMov 2 optimization
* reverted wrongly committed file
* reverted wrongly committed file
* fix for
gitlab 0039310 by fixing various small issues in tabstractrecordsymtable.has_single_field:
- initialize the returned def to a safe default
- correctly reset the found symbol for each loop
- reset the result when descending into a record
+ added test
+ move often used floating point constants into registers
* generate a def. file only if really necessary
* we cannot do SSA during partial writes to arrays which span multiple registers, resolves
gitlab 0039325
* we cannot do SSA during partial writes to arrays which span multiple registers, resolves
gitlab 0039325
* move more node tree optimizations to tcgprocinfo.OptimizeNodeTree
* patch by J. Gareth Moreton: x86: SETcc/TEST/SETcc -> SETcc/SETcc optimisation, resolves
gitlab 0039271
Add 'treated as Error:' to compiler messages
* Avoid some wrong error messages after initial error
On x86_64-openbsd, cycling with -O3 option fails due to
a wrong warning about uninitialized zeros variable in
compilation of ogbase unit
ogbase.pas(2310,41) Warning: Local variable "zeros" does not seem to be initialized
ogbase.pas(2318,39) Error: Can't evaluate constant expression
The second message is due to the fact that simplify is not
called inside nadd unit if errorcount is non-zero.
By replacing errorcount<>0 by not codegenerror,
this message disappears.
* Added trgobj.remove_ai(), call it instead of code duplication.
No functional changes.
* Patch by J. Gareth "Kit" Moreton (issue
gitlab 0039343). x86 peephole
optimization of conditions which are always true or false.
* x86: ShlOp2Op optimization
* Use a register alias while handling reg deallocs in trgobj.instr_spill_register()
to be in sync with commit b96057ad.
* make ShlOp2Op optimization more fool proof
* Prevent spilling of spill-helper registers which contain the value of a
previously spilled register. These helper registers must never be spilled.
This fixes failures of the register allocator in rare corner cases.
+ for loop optimizations can be controller by a switch (-Oo(no)forloop)
* (modified) patch by J. Gareth Moreton: ARM/AArch64 Some short-range LDR/STR optimisations, last part of
gitlab 0038841
+ keep addresses of thread vars in registers if possible and likely an advantage
* x86: only add mm capable consts to register candidate list, this is better
than checking when they are assigned
* fix code for ARM FPA, just in case ...
* x86: Do not replace inc/dec with add/sub 1 because this code path is
executed only for the C_Z,C_NZ,C_E,C_NE conditions, so inc/dec can be
used.
* Fixed lack of the calculation code for the strength reduction optimization.
* Fixed a typo in the condition, though it seems this code path is not used now.
* Fixed the strength reduction optimization for loops containing 'continue'.
The compiler now cycles properly with -O3 -OoSTRENGTH.
* mark temps as deallocated
(cherry picked from commit 50452e5707b1d5f8590042ed55fc5f47bce33962)
* Fixed missing assignments with the strength reduction optimization.
* x86: Fixed attributes of the LEAVE instruction - it reads EBP.
This fixes crashes with -O3s in some cases due to an incorrect peephole
optimization.
Added correction to AllocRegBetween
+ added target flags for the different WebAssembly exception modes that I'm
planning to implement
* increased size of ttargetswitchinfo.define to fit the string added in my
previous commit
* fixed compilation of ppudump
+ added usage info to the compiler help screen for the WebAssembly
target-specific exception handling modes
+ added validation to ensure no more than one WebAssembly exception support
mode is enabled
+ set the NOEXCEPTIONS mode by default for the WebAssembly targets
+ support writing the new tai_tagtype directive in the asm output
* Reverted the accidentally committed debug code in 4a7a113a.
x86: MOV constant optimisation
* is_calljmp really means calls and jmp
* is_calljmpuncondret includes ret
* handle - more cleverly if SSE is used
* fix alignment issues with - when using SSE
+ started the wasmbase unit (similar to elfbase and omfbase)
+ implemented TWasmObjData.sectionname
+ write the wasm binary module header and version
* fixed TWasmObjData.sectionname_gas
+ enabled the WASM32_INTERNALASM define when compiling with the lazarus project file
+ write some debug info to the console in the wasm obj writer
+ added TWasmObjSection class
+ introduced TWasmObjSection.IsCode and .IsData
+ count the number of segments and assign segment indices to the wasm sections
+ start writing the wasm sections. The DataCount section is the first section to be implemented.
* simplify real expressions involving unary minus
+ test
+ create the data section and the first entry of the import section
+ add the __stack_pointer global import
+ added the indirect function table to the imports section
+ debug print the obj symbols to the console
* fixed crash when writing a binary wasm module with a .bss section
+ print more symbol properties to the console
+ added the TWasmRelocationType enum
+ added the TWasmLinkingSubsectionType enum
+ more unary minus optimizations
* test extended
+ more unary minus optimizations
* test extended
Expanding division to 64-bit and tests
* some fixes for expectloc
+ added function name to functype hashlist in the wasm objdata class
+ apply unary minus optimizations also to /
* test extended
o manually applied merge request 46 by J. Gareth "Kit" Moreton:
+ x86_64: XMM-based block move optimisation
* set expectloc properly for x87 on x86
* fixed the writing of the external functions in the import table
* store the funcname to functype index in a TFPHashObjectList, instead of
TFPHashList with the index converted to pointer, which was a hack and didn't
allow adding more fields, which we would need to do for e.g. import_module
and import_name
+ added method TWasmObjData.AddOrCreateObjSymbolExtraData
+ handle the import_module and import_name directives in the internal
assembler and store them as obj symbol extra data
+ handle tai_local in the internal asm writer and store the locals in the
wasm obj extra symbol data object
obcpas: fix categories implementing protocols
Allocate the ImplementedInterfaces array for them and save to/load from ppu
Solves
gitlab 0039375
+ generate and write the functions table in the wasm binary module,
produced by the internal obj writer
+ write the code section (still, without the actual function code, but with
the correct locals)
* replaced TWasmObjData(Data) with FData in TWasmObjOutput.writeData
+ write the actual function code in the code section
+ partial implementation of emitting RELOC_FUNCTION_INDEX_LEB relocations
+ add relocation objects for the RELOC_FUNCTION_INDEX_LEB relocation to
the relocation list. They are not written to the object file, yet.
+ added enums for the wasm symbol type and constnats for the bitflags
+ write the linking section (empty for now)
Revert " * patch by J. Gareth Moreton: Nothing (NOP) node optimisation, resolves
gitlab 0038194"
This reverts commit c2ff85ac5ba307d7cc10cae7ee17d479c83c9119.
That change duplicates the logic of tstatementnode.simplify in
tblocknode.simpify in a very complex way, and in case of issue
gitlab 0039336 results
in adding a non-tstatementnode in a tblocknode, which is illegal. If
tstatementnode.simplify cannot catch all cases, then that one should
preferably be improved instead (and if not possible, we can look into
catching those edge cases in tblocknode.simplify rather than duplicating
everything).
Resolves issue
gitlab 0039336
* Aarch64: taicpu.spilling_get_operation_type with new instructions extended
+ write the externals to the symbol table
+ write the non-external functions to the symbol table as well
+ also write the data symbols to the symbol table
+ write the segment info (names and alignment) to the linking custom section
+ write the relocation tables for the code and data sections (empty for now)
+ fully implemented the RELOC_FUNCTION_INDEX_LEB relocations
+ introduced TObjData.SymbolPairDefine, to allow custom handling of symbol
pairs in the internal object writer
+ support tai_symbolpair in the wasm internal obj writer, so that the
PASCALMAIN alias of main can be created
+ support generating R_WASM_TABLE_INDEX_I32 relocations
+ support writing RELOC_FUNCTION_INDEX_LEB relocations to non-external functions
+ support writing imports from a different module in the wasm binary object writer
+ support writing R_WASM_MEMORY_ADDR_I32 relocations
+ add threadvar symbols to the symbol table
* generate an internal error if an attempt is made to emit a
R_WASM_MEMORY_ADDR_LEB relocation, that points to code, instead of
data
+ re-added accidently removed internal error
* made the constructor of TObjSymbol virtual, so it can be overriden
* fixed bug in the code, generated for the RELOC_FUNCTION_INDEX_LEB
relocation
+ fixed the addend in the relocations that point to data
Bug fix to XMM block move optimisation
Changed get_volatile_registers_mm to not return XMM16 to XMM31 when not under AVX512
- removed unused constructor of tai_impexp, as well as unused member variable extmodule
* tai_impexp renamed tai_export_name
* ait_importexport renamed ait_export_name
* simplified and integrated the WriteImportExport procedure into the case
statement. Use similar statements to write the asm code for the export_name,
like we use for the import_name directive.
+ generate the export section in the wasm internal obj writer
- removed debug writelns from the wasm internal object writer
+ generate funcdef for external procs, that don't have an import dll
+ enable the WebAssembly internal assembler and object writer
* use objsym.size to determine the code size of the function (instead of
writing until the end of the section) in the wasm internal object writer.
This removes the extra padding of 'unreachable' instructions at the end of
each function (which are zeroes, added for alignment - they are harmless,
but are unnecessary and cause a slight increase of the size of the
resulting binaries), after the final 'return' instruction of the function.
* use an incrementing counter variable to determine the numbers for the code
and data section, so they can be used in the relocation section, without
hardcoding them as constants. This will automatically adjust the numbers
when we add more sections, or when we make writing some of the sections
optional.
* omit writing the export section if there are no exported functions from
the module. This reduces object file size slightly for modules without
exports.
+ support the 'try' instruction in the wasm internal assembler
+ implemented the 'delegate' and the 'rethrow' instructions in the wasm internal assembler
* emit a tai_tagtype for __FPC_exception instead of hardcoding the asm output
directly when wasm native exceptions are enabled
* introduced the tai_globaltype asm directive, use that to declare the stack
pointer global symbol
+ introduced the AT_WASM_GLOBAL asm symbol type
* track wasm global types in the internal object writer
+ proper support for WASM globals in the internal object writer - emit
relocations, generate a Global section, if they are declared in the object
file, etc.
* combined TWasmObjSymbol.ImportIndex and .FuncIndex into just .FuncIndex,
because there's no point in having them separate, and the name ImportIndex
is misleading, as there are multiple import indices (they are separate for
functions, globals, tables, memories, etc.)
* the data section is now only written by the internal wasm object writer, when
there are data segments in the module
+ also support immutable wasm globals in the wasm assembler writer (both internal and external)
+ introduced the FPC_EXCEPTION_TAG_SYM string constant
+ introduced the AT_WASM_EXCEPTION_TAG asm symbol type, use that for specifying
the parameter to the 'throw' and 'catch' instructions
+ added support for exception tags and for the 'throw' and 'catch' instructions
in the wasm internal assembler and object writer
* fill exceptstate variables and update flowcontrol in
twasmexceptionstatehandler_nativeexceptions.new_exception
- removed the TODO comment, generated in the asm output by
twasmexceptionstatehandler_nativeexceptions.free_exception
+ support in_wasm32_throw_fpcexception in twasminlinenode.pass_typecheck_cpu
* emit a weak symbol for the exception tag, since that's what the LLVM linker
wants to treat them as shared between .o files
* updated ppudump with the new asm symbol types and binding types
* fixes to the try..finally code generation in wasm native exceptions mode
- get rid of fpc_PushExceptAddr and fpc_PopAddrStack entirely, when compiling in
wasm native exceptions mode - these helper routines aren't necessary in this
mode
* decblock moved after end_try, instead of after catch
+ initial implementation of try..except..end in wasm native exceptions mode.
The 'on' statements are not implemented yet.
+ override the 'on' node for WebAssembly
* x86_64-linux doesn't need .data.rel.ro either
+ implemented the 'on' node for WebAssembly in native exceptions mode
+ generate functype directives for all functions in all used units, regardless
of whether they have paraloc info created. This fixes linking of WebAssembly
programs that declare their own classes, because that causes the compiler to
generate a VMT, containing references to virtual methods, and these don't
necessarily have paraloc info (if they're not called from within the program)
* the fpc_Catches result test code was inverted
+ implemented sqrt via the f32.sqrt and f64.sqrt instructions
* fixed opcode generation for the f32.const in the WebAssembly internal asm
+ implemented abs(real) for WebAssembly via the f32.abs and f64.abs instructions
+ implemented int(real) for WebAssembly via the f32.trunc and f64.trunc instructions
* fixed output of 32-bit floating point constants in the llvm-mc asm output
+ implemented trunc(real) for WebAssembly via the i64.trunc_f32_s and i64.trunc_f64_s instructions
+ implemented round(real) for WebAssembly via the fXX.nearest and i64.trunc_fXX_s instructions
x86_64: Fix to tw8573 overflow bug under -Cg option
* properly search in GetMMRegisterBetween and GetIntRegisterBetween for usable
volatile registers (low() .. high(
and not only the included ones)
* fixed code generation for 'boolean64 and/or boolean64' for WebAssembly
* fixed WebAssembly code generation for 'if boolean64 then ... else ...'
* int64/boolean64 fix in twasmtypeconvnode.second_int_to_bool
* fixed 'not(boolean64)' for WebAssembly
* fixed second_int_to_bool for cbool types for WebAssembly
* another WebAssembly cbool fix in twasmtypeconvnode.second_int_to_bool
* fixed WebAssembly cbool support for OP_NOT
* fixed WebAssembly code generation for not(cbool64)
* modified (cosmetics) patch by Rika: replace DJB2 with MurmurHash3, resolves
gitlab 0039377
+ Aarch64: AndCmpB.E/NE2Tbnz/Tbz optimization
+ Aarch64: Ldr
Mov2Ldr optimization
x86: Missed logic with CMP and MOV optimisations
+ added the memory.copy and memory.fill WebAssembly instructions
+ added inline numbers for a memory.copy and a memory.fill intrinsic
+ implemented FillChar for WebAssembly via the memory.fill instruction
+ implemented move() for WebAssembly via the memory.copy instruction
* fixed OS_S8 to OS_16 conversion for WebAssembly. This fixes test/cg/tcnvint6
+ enabled compilation of the fpintres unit for the WASI target and enabled tf_has_winlike_resources for the target
+ added system_wasm32_embedded to systems_embedded
+ use the aasmdef unit in wasm32/cpunode.pas
- don't set casmdata in wasm32/aasmcpu.pas, so that the aasmdef unit can override it
* fixed WebAssembly method pointer assignment
+ workaround for WebAssembly treating the stack parameter of the store and load
instructions as unsigned. This caused an 'out of bounds memory access' trap
when accessing arrays with negative offset index, e.g. in test/cg/tvec.pp
+ implemented the <= operator for smallsets for WebAssembly
Fix bitpacking 62/63 bit fields on 64 bit targets
As reported on the lazarus forum:
* https://forum.lazarus.freepascal.org/index.php?topic=56341.new
* https://forum.lazarus.freepascal.org/index.php/topic,56339.msg418608/topicseen.html
Also optimized nextpowerof2 in the compiler
+ support equality comparison of smallsets on the Z80
+ support the <= and >= operators for smallsets on the Z80
* define DEBUG_AOPTCPU if EXTDEBUG is used
Fixed bug where hp1 object was used after being freed
Typed constants: no internalerror on failure
Don't check whether the expression queue is empty in the destructor in case
there was an error. Also improved error messages (constant expression instead
of variable expression expected).
Resolves
gitlab 0039393
+ x86: MovOp2Op optimization
+ introduced WebAssembly branchful exceptions
+ increase string type to avoid const string truncation
+ fixed compilation of ppudump
- removed msg2inc. Stupid git added it without my consent.
AArch64 popt: don't replace registers with X/WZR
Most arithmetic/logica instructions don't support X/WZR as operand (since
you should use movk with the calculated constant in that case)
Resolves
gitlab 0039372
Avoid range check error in TCpuAsmOptimizer.OptPostAnd method
* bail out early in MatchInstruction
* cloned the WebAssembly native exceptions code generation and rtl support into
the branchful exceptions (which will be modified later, but we're using this
as their starting point, because we can get a snapshot built, without compiler
internal errors)
- don't generate any WebAssembly native exception handling instructions, nor
relocations, when compiling in branchful exceptions mode. This produces a
currently not working, but accepted by wasmtime binary (otherwise, it
complains it doesn't support exceptions and refuses to try to run it).
+ introduced raiseBr, similar to exitBr, but will point to the current
innermost exception handler, if there is such a handler in the current
procedure, otherwise it will be the same as exitBr.
+ added comment that states that raiseBr is only used in branchful exceptions mode
+ insert exception flag check and branch after each function call, when
compiling in WebAssembly branchful exceptions mode
+ implemented try..finally in branchful exceptions mode
+ initial implementation of try..except in branchful exceptions mode
+ implemented the 'on' node code generation (try except 'on' ...) for the
branchful exceptions mode
+ call g_checkexceptions after calls to fpc_reraise and fpc_raise_nested in
branchful exceptions mode
* x86: Refactored CMOV optimisations and permitted the use of constants in some cases.
* use 'br_if' instead of 'if br end_if' sequence in the code, generated by
thlcgwasm.g_checkexceptions
+ support exception object cleanup, when 'exit', 'break' or 'continue' is used
in the except 'on' statements, in branchful WebAssembly exceptions mode
+ exception cleanup when break, continue or exit is used inside a
try .. except 'on' block, in WebAssembly native exceptions mode
Expanded MM block move to include YMM registers under AVX
+ proper exception cleanup for try except blocks that use exit, break or
continue in WebAssembly branchful exceptions mode
+ proper exception object cleanup when using break, continue or exit in try
except blocks in WebAssembly native exceptions mode
- removed duplicated assignment
* twasmexceptionstatehandler_nativeexceptions.handle_nested_exception and
twasmexceptionstatehandler_bfexceptions.handle_nested_exception should not be
called, so now they cause an internal error
* thlcgwasm.g_checkexceptions renamed .g_maybe_checkforexceptions, added also as
an empty virtual method in thlcgobj and modified the WebAssembly
implementation, so that it can be called from any exceptions mode (so it
emits no code in exception modes that don't require it, instead of generating
an internal error). This will allow .g_maybe_checkforexceptions to be called
from the generic parts of the code generator, after calls to systemprocs that
could raise an exceptions.
+ added call to g_maybe_checkforexceptions after generating call to fpc_iocheck
* partially applied patch by J. Gareth "Kit" Moreton to inline parts of cclasses, resolves
gitlab 0039344
* use source register as second register in VCVTSD2SS and VCVTSS2SD, this should break
dependency chains better and resolves partially
gitlab 0039360
* Optimized evaluation of the condition.
* Strength reduction optimization: - Use a temp for complex loop start values to prevent double evaluation.
- For slow CPUs perform the optimization for all sizes of array elements.
* generate VMOVAPS for (V)Cvtss2CvtSd(V)Cvtsd2ss optimization, resolves
gitlab 0039360
+ added the current WebAssembly exceptions mode to the .ppu module flags and
perform a check to ensure all units are compiled in the same exceptions mode
as the main program
* another location to use source register as second register in VCVTSD2SS and VCVTSS2SD
to break dependency chains, hopefully final fix for
gitlab 0039360
+ support of SHA extension in the internal assembler
Better handling of zeroing upper parts of registers
Better handling of zeroing upper parts of registers
xor optimisation now doesn't check to see if the REX prefix will actually be removed, as it's beneficial for speed reasons to only use the 32-bit register when zeroing the whole thing
o based on a patch by Rika, resolves
gitlab 0039401:
* use Base64 (62=_, 63=$) encoded FNV hash (instead of CR-32) to shorted identifiers
* renamed fpccrc to fpchash
+ test
* fix x86 compilation after my last commit
* by default, DEBUG_AOPTCPU is only enabled if the compiler is compiled with -dEXTDEBUG
+ being able to define change information for xmm0
* corrected change information for SHA256RNDS2
* patch by Dean Mustakino to avoid generation of debug info for generics, resolves
gitlab 0038827
+ test
* add no internal flag when folding constants in taddnode.simplify, resolves
gitlab 0039308
+ pass 64-bit structures by address in WebAssembly for compatibility with LLVM's C ABI
* Removed unused tlocation.registers[].
* itcpugas unit for Z80 providing gas_regname to fix compilation with -dDEBUG_NODE_XML
* C ABI fixes for the passing of records in WebAssembly
* fixed formatting in defToWasmBasic
+ added support for the handling of singleton record and array types in
defToWasmBasic
* fixed passing of singleton record parameters, containing a float in WebAssembly
+ support cdecl and stdcall on the WebAssembly target. They are essentially the
same, the only difference is that cdecl creates an unmangled alias
* replaced the 'if br end_if' sequence with the 'br_if' instruction, when
generating WebAssembly code for try..finally blocks (in all exception modes)
+ extend assembler optimization MovxMov2Mov to MovxOp2Op
* merge request 75 by J. Gareth "Kit" Moreton manually applied:
This merge request makes a number of improvements to the DeepMOVOpt method and supporting functions:
* ReplaceRegisterInInstruction now replaces registers in references that are written to
(since the registers themselves won't change)
* RegModifiedByInstruction will no longer return True for a register that appears in a reference
that's written to (for the same reason as above) - special operations like MOVSS
(the 0-operand version) aren't affected.
* DeepMOVOpt returning True will now always set the Result of OptPass1MOV to True even though p
wasn't directly modified, since this often caused missed optimisations.
* Some of the speed-ups in the patch from
gitlab 0032916 have also been applied in order to make
the general DeepMOVOpt run faster, notably it tries to avoid calling UpdateUsedRegs where possible.
* manually merged merge request 69 by J. Gareth "Kit" Moreton:
x86: CMP/MOV refactoring and expansion
This merge request refactors the SwapMovCmp routine, and calls to it, to be more self-contained,
having the preliminary checks built-in to ensure that moving the MOV instruction is
actually a sound idea, while also making it more general-purpose so it can handle instructions
that are not MOV operations. This feature is primarily for future expansion,
but also cleans up the code for the x86 peephole optimizer.
* patch by Sergey Larin: Reducing and aligning the size of TAnsiRec, TUnicodeRec for CPU64, resolves
gitlab 0038018:
For CPU64, the size of record TAnsiRec and TUnicodeRec is 16 bytes instead of 24.
Which is very good also because of the alignment. when allocating memory, the address
of the first character of the string will be aligned on the 16-byte boundary.
At the same time, the useless Dummy field, which is needed in CPU64 for exactly alignment, has been removed.
For CPU32 (and CPU16), the record size has not changed, so procedures such as
fpc_AnsiStr_Decr_Ref, implemented in assembler (see i386, arm), remained working correctly.
* tests adapted
+ support reading of .p2align with op code and/or max. bytes in the gas assembler reader
+ test
+ introduced the use of asm labels for WebAssembly. Resolve them in
tcpuprocinfo.postprocess_code. Use them when generating code for the
'continue' label jumps.
+ use WebAssembly asm labels for the code generation of 'break' statements as well
* fixed some more warnings
* use WebAssembly asm labels for generating code for the 'exit' statement
* leave unresolved branches in the asm output, when the compiler is compiled with -dEXTDEBUG
* if a label cannot be associated with the previous block instruction, try
matching it with the next instruction
+ wrap block nodes with exit in a_block..a_end_block instructions. This fixes
'exit' in inlined procedures on the WebAssembly target.
* moved the 'end_block' WebAssembly instruction before the 'exit' label right
before the procedure finalization code. This fixes compilation errors in
procedures with implicit finalization code (e.g. for ansistring local vars,
etc).
* match the label to the wider block, if it is adjacent to both the brevious
and the next instruction
internalerror if the section we're about to keep has no exesection assigned
* use WebAssembly asm labels for the raise branch instruction in branchful
exceptions mode
+ added sanity check when resolving labels to ensure we don't get any jumps with
negative nesting depth
* moved the default procedure CurrRaiseLabel to the end of the procedure, not
at the exit label. This fixes problems when using units with finalization
code that contain classes with class destructors in branchful WebAssembly
exceptions mode.
Bug fix to MovMov2Mov 6 optimisation exposed by 4012c3dbd47f661805bb7a831c6c687807ede3b4 (and miscellaneous code refactors)
* WebAssembly code generation for 'case' nodes changed to use labels
- removed thlcgwasm.incblock, .decblock and br_blocks, as branching is now done
entirely with labels
+ TDFABuilder.redodfainfo
* keep track of the block stack, when resolving labels and check whether the
blocks match (i.e. block..end_block, if..end_if, loop..end_loop, try..end_try)
+ added 'else' tracking for the if..end_if blocks
* TX86AsmOptimizer.OptPass1MOVXX takes care of volatility
* improved TX86AsmOptimizer.OptPass1MOVXX
+ print full file path if -vb is passed even if no line number is known, resolves
gitlab 0039419
Improved ADD and SUB optimisations for LEA instructions
* Better coalescing with real registers. This improves setting of parameters
in registers.
* Removed superfluous condition in trgobj.enable_moves().
* Fixed flags checking in trgobj.adjacent_ok().
* Added assembler comments about coalescing when DEBUG_SPILLCOALESCE is defined.
Fixed some range check problems
* correctly read the region label in $region directives, resolves
gitlab 0039395
Fixed OptPass2Lea not honouring symbols
+ write code and data size for Mach-O files if possible
* cleanup of 2.7.0 defines
+ fold real constants c1,c2 for v+c1+c2 or c1+(c2+v) (+ being either + or *) as well if fastmath is enabled
Record variant discriminators: check types
* AArch64: TCpuAsmOptimizer.RegLoadedWithNewValue: check if p.ops=0
* Corrected calculation of spilling efficiency.
optcse: fix wrong typecast
* Write interference graphs to the unit output directory.
* Removed unused and confusing tnode.parent and tnode.concattolist().
* Removed obsolete OLDREGVARS ifdefs.
* Corrected setting of the flag.
* tcgaarch64.g_concatcopy calls tcgaarch64.g_concatcopy_move only if the current subroutine has pi_do_call set
* fixed copy loop in tcgaarch64.g_concatcopy if ldp/stp is used: fixed increment calculation and fixed tail length calculation
* improved heurisics when thread var addresses or float constants are put in registers
* corrected accidently made changs in 01a449c8, resolves
gitlab 0039424
+ ARM: started on vfpv5 support
+ fp-armv8 fpu type added
* tcgsizep2size now supports all tcgsize values
* Fixed node coalescing with real registers.
+ be able to add single cpu capabilites by the command line
+ AArch64: SHA2 capability
+ more Aarch64 cpu capability flags added
* fix (V)Cvtss2CvtSd(V)Cvtsd2ss2* optmizations for non-avx code, resolves
gitlab 0039416
* my last commit hopefully fixed
+ Aarch64: read register sets with ranges properly
+ tests
* when converting a*a into sqr(a), set the result type correctly
* removefloatupcasts takes care of cs_excessprecision, resolves
gitlab 0039012
Explicitly disable overflow for offset propagation optimization
* patch by Rika to pass some strings by reference, resolves
gitlab 0039338
* patch by Don Siders: Fixes spelling, grammar errors in source and compiler messages, resolves
gitlab 0039434
llvm: version 12.0 support
x86: new optimisation to change add/sub 128,(dest) to sub/add -128,(dest) to reduce binary size
Add -WP option so that IDF version can be passed in - stored in globals.idf_version. The version is checked in t_freertos.pas and for esp-idf version 4.3.x an extra link file is added, also running ldgen.py is skipped as that seems unused.
* inputfilepath might not be empty
+ draft for esp-idf version specific rtl unit which contains the necessery linklib statements
* correct idf version check
* better code and data size info for FreeRTOS
The linklib list for esp-idf v4.2 is also needed for v4.3
Place IDF related files in executable output folder.
Remove unused $OUTPUT substtution and empty check of outputexedir.
- Bug fix to new ADD/SUB optimisation where conditions are concerned
- Register allocation fixes for overflow checks
Bug fixes to magic division and vectorcall code that trigger -CriotR checks
* cleanup of VER3_0 defines
+ Aaarch64: support adr instructions with local labels in the assembler reader
+ throw an error if an illegal instruction extension is passed as command line option
+ more AArch64 extensions
* x86-64 can handle overflows in 64 bit multiplications directly, part of resolving
gitlab 0039450
* fix conditional statement as pointed out by Sergey Larin
* last commit was not correct, fixed
Keep esp32 and esp8266 version specific tweaks separate.
Extract linker script generation as separate method. Check if esp linker scripts can be found in library paths, if not then generate scritps.
* Added Tmoveins.id to be used for sorting and searching in Tmovelist, to
produce the consistent order of elements.
This fixes occasional differences in the register allocation caused by
the address space randomization. When ASLR is in effect, the previous
approach to sort elements by their memory addresses can't guarantee the
consistent elements order for each compilation of the same source code.
* Use longint for Tmoveins.id instead of word to prevent overflow in extreme cases.
Add output path to kconfig source file location parameters.
Always call DoExec to generate linker scripts. Even if cs_link_nolink is set, the ldgen scipt needs to be called in the generated ppas script.
Change declaration of DynLinkStr local variable of MakeExecutable method to ansitring to avoid short string overflows
Fixes to ADD/SUB 128 optimisation that didn't check flags properly, and also handling ADC/SBB properly
+ - can be used to remove options from a cpu capability switch
Fixed Unreachable code warning when building on a 32-bit platform with DEBUG_NODE_XML
* fixes excluding of cpu capabilities
New MovxMovxOp2OpMovx optimisation
* generate no exit code at all on x86-64 if the subroutine is compiled with po_noreturn
Bolder OptPass2Movx optimisations, including a simplification fix
New Movz ###,%ecx, shift/rotate %cl,... optimisation
* compilation of x86_64-win64 fixed
MovZX->MovSX optimisation
Improved handling of signed sequences in OptPass2Movx
Massive overhaul to OptPass2Movx to favour operand shrinkage
New MovxAndTest2Test optimisation to mirror the regular MovAndTest2Test optimisation
Added missing MOVSXD check to PostPeepHoleOptsCpu
+ store references to global variables in registers if benefical (currrently used for aarch64 only)
* Increased the bounds of TBooleanArray to prevent a range check error while linking Lazarus.
* Prevent a range check error in case of big unsigned values.
* Fixed random AVs when targeting the AVX FPU.
x86: New TEST optimisations
Safety checks on TEST removals and better FLAG tracking
* fix m68k IE after e9acd759, patch by Yuriy Sydorov
New optimisation that merges small constants written to the stack
Fixed bug in new TEST optimisation where a FLAGS check always returned "in use"
* make tgobj.pas less verbose in extdebug mode, use separate define DEBUG_FREETEMP for the really
verbose stuff
Removed incorrect logic in TEST optimisation
+ in_min/max_single/double support for aarch64
* ARMv7A / A64: Constant writes to memory merged to larger forms where possible
+ in_min/max_dword/longint support for aarch64
* compilation with i386 fixed
Overflow bug fixes to MovZX/SX optimisations when CMP instructions are encountered.
Fixed MovxOp2Op failing on i386 due to lack of register check
* TX86AsmOptimizer.OptPass1MOVXX should search only over other instructions if it works with registers only
* patch by Rika: improve ctuils.newalign/align, part of
gitlab 0039496
x86: New double CMP optimisation to remove a branch
i386: Correction to GetIntRegisterBetween to ensure we only get 8-bit registers that we can actually encode
x86: Additions to OptPass2Movx to better synergise with new CMP optimisation under -O2
Refactoring of OptPass2Movx to remove goto
Fixed bug in MovxMovx2Movx optimisation that would specify a 64-bit destination instead of 32-bit one
* patch by Rika: another improvement of cutils.newalignment, part of
gitlab 0039496
Procedure-saved registers are now recorded for peephole optimizers to use
JccAdd2SetccAdd modified to make use of GetIntRegisterBetween
* use an anonymous symbol for the record operator table as its typing is different for each incarnation anyway
* Amiga-likes: set some sensible heapsize defaults, for OSHeap support
MOV/CMP optimisation is now in both Pass 1 and Pass 2 to catch more
eventualities
* allow %... for binary constants in delphi mode, resolves
gitlab 0039503
+ modeswitch UNDERSCOREISSEPERATOR, active by default in delphi modes:
support _ as seperator in numbers, it is ignored while reading them, resolves
gitlab 0039504
Additional copyright header
Debugging code in AllocRegBetween is now safer and more accurate, and p2 can no longer be nil
* (modified) patch by Rika: optutils.SetNodeSucessors improvement, resolves
gitlab 0039509
* compilation with -Oodfa fixed
PostPeepholeOptTestOr now removes TEST when dealing with POPCNT and LZCNT
Use different library link lists for esp8266-rtos-sdk v3.3 and v3.4.
Avoid range check error inside tcgcasenode.pass_generate_code method
Ignore NR_DEFAULTFLAGS for ait_regalloc, because there is no default flags for JVM
New backward MOV optimisation
Add help message for xtensa-freertos -WP option
* apply patch by Blaise.ru:
- avoid creation of a dummy typesym just to call parse_var_proc_directives() by introducing a new parse_proctype_directives() that takes a tprocvardef instead of a symbol like the former does
- have parse_var_proc_directives() call parse_proctype_directives() to avoid duplicated code
* apply patch by Blaise.ru:
- all call sites of parse_var_proc_directives() have the tprocvardef easily available, so use parse_proctype_directives() directly
- remove the now no longer required parse_var_proc_directives()
* apply patch by Blaise.ru: parse_object_proc_directives() and parse_object_record_directives() should only be called with procdefs, so change the parameter from tabstractprocdef to tprocdef to make this explicit
* apply part of patch by Blaise.ru: check only once whether writable consts are enabled or not by determining the type of the assembly list earlier (it's only not needed in an error case anyway)
* apply part of patch by Blaise.ru: reduce code duplication when parsing anonymous procvar types
- apply patch by Blaise.ru: pdflags are no longer required in generate_specialization_phase2() after parse_proc_directives() was done, so remove its unused modification after that call
* throw an error if raise is called in a noreturn subroutine outside of any exception frame, resolves
gitlab 0039514
* apply patch by Blaise.ru: reject assignments of instance methods, accessed via a type, to method pointers
+ add tests
* apply patch by Blaise.ru: avoid internal error when assigning class methods, accessed via a class reference type, to incompatible procvars
+ added tests
* apply patch by Blaise.ru: proper code generation for assigning class non-static methods, accessed via a class reference type, to method pointers
+ added test
* x86: Fixes to GetInt/MMRegisterBetween assignments
Turn TCallCandidates into an object, make it create FIgnoredCandidateProcs on demand, and outline such adding on demand into dedicated TFPList.AddOnDemand.
* New UpdateUsedRegsBetween utility subroutine
* x86: OptPass1_V_MOVAP now uses GetNextInstructionUsingReg and UpdateUsedRegsBetween
Fixed Internal Error 2020120501 number clash
+ apply patch by Blaise.ru: allow initialisation of method pointers with class methods (when class types are
known at compile time)
* adjust error message when a method pointer isn't suitable
+ add tests
* regenerate msg{idx,txt}.inc after message change in last commit
Use '.rodata' for read-only data section for aarch64 CPU
New MOV optimisation that helps reduce instruction count and memory accesses
+ add method ResetSourceLines to TExternalAssembler to reset already written lines
* reset written source lines once a section is encountered
Remove fall-through logic and separate idf_version checks of esp32 and esp8266. Also warn if idf_version is below the supported range.
+ DestSize parameter for fpc_Val_UInt functions
Refactoring procedures in aoptx86 to gain speed boosts
Merge foreachnodes into one version that uses a context object.
Add a bound parameter to node_count(_weighted).
Allocate THashSet item and its key together when FOwnKeys=true.
Get rid of some global variables.
Fixed and refactored MOVX optimisation that occasionally caused crashes on i386 platforms
Correct linker script for aarch64-embedded
Start address was wrong, should be 0x80000, not 0x8000
* extract a symbol or def from its previous owner if that owner has OwnsObjects set to true
+ provide a tsym based variant of ChangeOwnerAndName
* a function also captures other nested functions when these are called
* generate a better name if the procdef is an anonymous one
+ add method register_implemented_interface to tobjectdef which registers an implemented interface and - if desired - also initializes the GUID related fields of the objectdef
* use that method in all locations outside symdef that add add an implemented interface
Based on work by Blaise.ru
Add link unit for esp-idf v4.1. Version checks to allow for different patch levels in idf_version.
GenerateDefaultLinkerScripts should set out_ld_filename.
esp32.rom.api.ld was only introduced in esp-idf v4.3. Remove invalid linker search path.
* High() and Length() for dynamic arrays deal with sizesinttype instead of ossinttype (on AVR the former is 16-bit while the later is 8-bit thus this is an important distinction)
+ MovapXComisX2ComisX2 optimization
+ add constants for the Invoke symbol of a function reference interface (both for declaring and finding it)
+ add utility function to retrieve the invoke procdef of a function reference interface
Refactoring and bug fix in OptPass2Movx that could cause incorrect
values in overflow conditions
* Aarch64: operations affect always the full 64 bit register, so
TCpuAsmOptimizer.RegLoadedWithNewValue can use SuperRegistersEq
+ Aarch64: SxthSxtw2Sxth optimization
* Pass 2 can now be run multiple times when
under -O3 and above.
Added correct flag tracking for JccMov2CMov optimisations
* change cgsize2subreg and reg_cgsize on Z80 to behave more like they do on AVR; this fixes compilation of Z80 now that the array and string length fields are indeed of type SizeSInt instead of OSSInt
* move the handling of the symbol found in factor_read_id to a separate function
* ensure that an expression that involves an overloaded generic in mode Delphi isn't handled as a specialization if it shouldn't be
+ added tests
* ensure that result of factor_handle_sym is initialized
* check also for 64 bit registers in TX86AsmOptimizer.RegModifiedByInstruction
Fix linker commandline for m68k-atari
CMOV now modifies rather than writes to the destination register so RegUsedAfterInstruction behaves properly
Fix linker script for atari/gnu ld
* m68k-sinclairql: fix the inclusion of the target proper
+ fix support for 8-byte records, held in a register pair on the WebAssembly target. This fixes
gitlab 0039524
* adjust parse_proctype_directives so that it can handle a function reference as well
+ m68k-atari: fixed bogus TOS program flags passed to VLink. added -WF argument to allow the user to specify their own flags if needed
* regenerated message includes
* m68k-atari: make the Atari target use 68000 CPU as default
* m68k-atari: make the Atari target always default to VLink, even for crosscompilers
* m68k-atari: make vasm the default assembler. also don't claim we have an internal linker
Fixed registers in references not being tracked properly in MovMovXX2MovXX 1 optimisation
Add internalerror if ogwasm tries to write unset Func/Global or TagIndex of TWasmObjSymbol
* when adding WebAssembly object info, traverse through current_module.used_units,
as well as the usedunits global. This resolves
gitlab 0039543
Optimized the comparison of a widestring variable with ''
Fixed optimization `Length(W)=0` -> `(Pointer(W)=nil) or (PLongword(Pointer(W)-4)^=0)` for WideString
* name of result variable of anonymous functions can be changed (and must be in modes without modeswitch Result)
* extend parse_proctype_directives to handle proc(var)defs as well as invokables
* adjust handle_calling_convention so that it can be used with both proc(var)defs and invokables
* correctly handle directives for anonymous functions
Allow WideChar const to UTF8String const conversion
* handle result type of unsigned ordinal operations in ISO/Extpas mode similiar to TP, solves
gitlab 0037875
* Removed unused parameter
* Section-offsets have 64 bits in the Dwarf-64 format
Update build and link requirements for esp-idf v4.4. Refactor the version dependent linker fragments list into an array of version specific array of strings for easier updating in future.
Improved JccMov1JmpMov0Jmp -> SETcc optimisation
* declare the type symbol of an internal def as sp_internal
+ add a constructor for trecorddef to declare an internal record type as part of a specific other type
Based on code by Blaise.ru
* make the VMT symbol and type def of the corresponding class or object instead of having them be global
* bump PPU version to avoid potential compilation errors due to this
Based on code by Blaise.ru
atari: pass tos exe flags also to ld
atari: add -Wt option to allow specifying the executable format
This is useful to create aoutmint format binaries using vlink,
which have a symbol table that has no limit for the name length.
* mips64el compiler can be compiled
mips64 define must also set mips
Also set mipseb or mipsel macro for 64-bit mips CPU
Add default macros inoptions unit for mips64 and mips64el CPUs
Add use of SD instruction in tcgmips.a_load_reg_ref method
* move checking for a def in the hierarchy to a separate nested function and use it to check the hierarchy of the current def being specialized as well
* check hierarchy of the current generic or specialization def independant of whether it's a record- or objectdef
+ add a field to denote that a symbol (mainly local and parameter ones) was captured through another symbol
* don't check for a duplicate internal symbol in inherited symtables
* set the type symbol of the procvar while it is parsed so that a function reference can have itself as part of the parameters or the return type
* set the flag that the symtable contains a generic at the end of the corresponding block of types_dec() to ensure that the owner is assigned correctly
+ add function funcref_equal to check whether two function references are considered equal enough to be assignable
* consider invokables as related when they're equal
* correctly handle calling convention for function references
* protected symbols are visible for defs declared in a local symtable as well
+ some basic stuff for MIPS64
* register MIPS64 targets properly
+ add utility function to retrieve a file position of a usage of a type symbol from a type's definition
* an internal definition in a specialization might not have a genericdef
* if a symbol is not part of a symtable then assume it's from the current module
+ add an error message for when a symbol can't be captured
* regenerate msg{idx,txt}.inc
+ add necessary core functions and functionality to implement capturing of variables
Based on code by Blaise.ru
* do not insert the $result symbol again when the VMT for the capturer is built
+ add function to check whether a procdef can be converted to a function reference
* two function references are equal to each other as long as their signatures match
+ implement necessary functionality in tcgprocinfo to initialize and populate the capturer
Based on code by Blaise.ru
+ startup code skeleton for MIPS64
* aros64: recent developments hanged the library call ABI, lets try to follow it (aros64 is experimental)
* also handle function references when a generic one had been parsed
+ add flag to denote an object def as a function reference
+ add support for parsing function references
* revert accidently committed code
+ add flag to denote that an objectdef is invokable, thus can be used like a function variable
+ add utility function to check whether an objectdef is an invokable one
* if an interface is declared inherit the invokable flag from the parent interface
* sorted defines in the compiler: mips64 is defined on all 64 Bit mips platforms, mips64el for little endian, misp64eb for big endian
Fixed bug on x86 platforms where the stack pointer was not allocated if it was different to the frame pointer
* m68k: do not generate unnecessary unaligned load sequences for byte loads into registers, this fixes tcnvint1 test on plain 68000
* m68k: don't attempt to copy less than 1 byte in g_concatcopy, this fixes tdfa7.pp on 68000 and removes some superfluous address processing on 68020+ in the same test
* Some streamlining in x86's OptPass1LEA routine now that the stack
pointer is properly tracked, which also permits some deeper
optimisations on -O1 and -O2 virtually for free.
+ add utility function to check whether an invokable can be invoked without explicit parameters
* MIPS64 can
* MIPS64 does not need separate 64 bit code path for ordinals
+ add a new tproccopytyp pc_normal_no_paras to copy an abstractprocdef without its parameters (useful if the parameters themselves will be reused and the original def otherwise deleted)
* do not copy parameters onto the stack using FPU registers if the type is
actually handled by the MM unit, resolves
gitlab 0039567
+ emit an error message if the ihxutil is not found when compiling an ZX Spectrum executable with the internal linker
+ emit a 'tried' message (fpc -vt) when using ihxutil for ZX Spectrum
* m68k-atari: override the exeext globally, not just at the final step of the linking. this fixes 'Linking .ttp' messages, when in fact .prg gets generated
Resolve address of a symbol defined as absolute of another symbol, in assembler code.
Fix compilation of mips64 compiler by simple use of 'make mips64'
Fix loading of 64-bit constant into register for 64-bit mips CPU
Fix invalid typecast by postponing sym change to after address resolution in 44094dba
* Local speedup in OptPass1LEA that avoids expensive calls if p and
hp1 are adjacent.
* if an invokable that isn't a function reference is followed by a point in a mode that doesn't use TP/Delphi style calling without parameters then don't call it like is done with normal procvars
- removed spurious comment
* use 'with' in tlinkerwasi.SetDefaultInfo
* set and use ExeCmd instead of DllCmd when making an WASI executable
* some fixes to the WASI library compilation (not ready, yet)
+ added separate startup code for libraries, that declares _initialize, instead of _start
- removed --allow-undefined linker option when compiling a WASI library
- removed commented out code for executing WASI dllcmd[2]
- don't pass --export-dynamic to the linker when linking a library for the WASI target
* x86: Improvements to JccMov2CMov to catch Jcc @Lbl; ; JMP @Lbl
* hopefully final fix for absolute references to absolute symbols
- don't write the wasm-ld command line to the screen when linking a WASM
library. The command line, passed to the linker is dumped when compiling with
-vv anyway.
* move determine_generic_def out from pdecl.types_dec to pgenutil
* extract the code to parse a forward declaration out from types_dec into its own function parse_forward_declaration
+ add ability to strictly compare defs with generic constraints (this is needed for declarations, while for normal code we're rather relaxed)
+ add a method to retrieve a copy of a specialization context
+ add support for forward declarations of generic classes and interfaces (any implicit pointer type really); fixes
gitlab 0034128
* fix typos in comments, no code changes
* just copy value parameters to a temp. when inlining instead of
using (@...)^ constructs, resolves
gitlab 0039590
Add section directive for subroutines for embedded and freertos systems.
* throw an internal error if the reference of lea contains a segment register
* powerpc-morphos: add support for linker map file generation, some code cleanups
help text: vlink is no longer default on MorphOS for a while now, remove from help text, add Atari and Sinclair QL where it is the default
* regenerated message files
* reorder string expressions with parentheses so fpc_*_concat_multi can be used efficiently, resolved
gitlab 0039479
Move member variable "section" to tprocdef. Type of "section" to agree with symansistr define.
* throw error properly if a target does not support sections
* z80-msxdos: cleaned up some msdos leftovers in i_msxdos. no functional changes.
* x86: Fix to MOV/CMP register deallocation positioning
* x86: RegModifiedByInstruction and RegInInstruction
are now more accurate for (I)MUL and (I)DIV.
* var, type, threadvar, const sections require also in classes etc. at least one declaration, resolves
gitlab 0039599
* building for LLVM fixed
* do not throw an internal error in case of a misplaced string, resolves
gitlab 0039609
* m68k: allow vasm to be used for system_m68k_embedded target, simplify some code
* z80-amstradcpc: add some initial files for the target (mostly just the clone of ZX Spectrum files for now)
* prevent that a absolute symbol references itself, resolves
gitlab 0039604
* m68k: fix an endless syntax error loop in the assembler reader
* regenerated message files after adding the z80-amstradcpc target files
* cleanup: cs_opt_loopunroll is a generic optimization for a long time already
* z80-amstradcpc: fixed target naming mess, so -Tamstradcpc works now, also fixed the help text
* regenerated message files after CPC naming fix
* fix MovapXComisX2ComisX2 optimization
* m68k: disable the frame pointer optimization on subarchs that don't support long displacements for now, until the shortcomings of the cg can be addressed
* m68k: spilling read, write, and replace is now bound to CPU capabilities instead of CPU family. This probably fixes some issues on 68000, where spilling replacement was not respecting CPU displacement handling boundaries, leading to assembler errors.
Extra code generation options for shift with compile time constant.
* fix change information for a lot of MMX instructions
* m68k: fixed the register save/restore for larger than 32K stackframes on subarchs which has no long displacement, to not trash register A0
* more change information fixed
* more change information updates
* m68k: make sure right is in an address register for muln,addn,orn,xorn, before calling the low level cg
* more change information updated
* change information updates
* fixed SSSE3 change information
* change information for SSE4.1 instructions
* change information for SSE 4.2 instructions
* AES instruction change information fixed
* few more updated change information entries
* continued to update change information
m68k: utilize cg.a_loadaddr_ref_cgpara in hlcgcpu, as m68k has an instruction for loading addresses directly to the stack (PEA), and the default implementation of hlcg.a_loadaddr_ref_cgpara doesn't use that code path
Revert "m68k: utilize cg.a_loadaddr_ref_cgpara in hlcgcpu" for now, turns out it's not needed
* continued to update change information
* another change information update
* more change information
* finished change information for AVX1 instructions
* completed change information for AVX-2
* change information for AVX-512 mask register instructions
* started with change information for AVX-512
* extend tabstractprocdef.getcopyas by a parameter to control whether the copy should be registered or not
* rework tprocsym.Find_procdef_byprocvardef so that its implementation can be used in a more generic manner
+ add method tprocsym.Find_procdef_by_funcrefdef to find a procdef that's compatible with the specified function reference
* make tprocinfo.addnestedproc public so that it can be used to add generated functions
* do not throw an error if syscall is used with a syntax not applicable for the current
target, resolves
gitlab 0039640
* fix
gitlab 0035261: apply slightly adjusted changes by Ryan Joseph to implement support for implicit generic function specializations
The main adjustments were as follows:
- fixing coding style and identation
- fixing some typos
- using a better name for the property in tcallcandidates which holds the symbols created for anonymous parameter values
* probably check type for int_to_real instruction selection
Symbolic constants: don't range check on use
If these constants are defined with an explicit type, they are already
truncated/checked at that point. If we range check them again on use, we
may get errors because at that point there is no explicit type cast
any more.
* [x86] Added new RefsMightOverlap method and implemented it into the XMM memory move optimisations to catch memory overlaps; fixes bug i39627
Symbolic constants: don't range check on in use in typed constants
Same as 3da54dcf9f, but this type when used in type constant definitions
like record fiels
AArch64 asm reader: add support for fpcmp(e) conditions
Resolves
gitlab 0039643
* i386: make also use of VCVTUSI2S* instruction if possible
* x86: m128 etc. are now vector arrays (giving correct memory alignment) and "use_vectorfpu" will return True for these types
m68k: opcode table updates based on vasm 1.9 (used with permission)
* factored out tx86typeconvnode.int_to_real_mm_location
* do not crash in case of too many $push directives, resolves
gitlab 0039652
LLVM: enable DWARF debug info generation
LLVM: data location debug info support
This was added to LLVM for Fortran arrays, but can also be used for Pascal
dynamic arrays
LLVM: support for attaching metadata to instructions
agllvm: remove useless code
LLVM: factor out writing operands in agllvm
Check mf_symansistr is compatible with current compiler mode and issue a message before failing PPU loading
* Compiler error is now thrown if record alignment is not a power of 2 or is greater than 64.
+ recurse into multiple subscription nodes when calculating contant @... expressions, resolves
gitlab 0039665
* disallow offsetof trick for types involving implicit dereferences, resolves
gitlab 0039667 partially
* x86: New CMP optimisation that mimics some of the CMOV optimisations and removes unnecessary conditions.
* Removed foolish inline from StripLabelFast
agllvm: support for writing specialised metadata nodes
tnodeuitls: merge GenerateObjCImageInfo into InsertObjectInfo
LLVM needs to insert the Objective-C image info into the general object info
metadata. This way we don't need to store a reference to that metadata so
as to add extra data to it later (tnodeutils is never instantiated, it only
contains class methods)
LLVM: assign procdef.procstarttai, like in the regular code generator
* x86: Introduced TrySwapMovOp method, and redesigned TrySwapMovCmp
to use it while also trying to move one more instruction back
* x86: New jump/label tracking in CrossJump optimisations
tfileposinfo: separate types for the fields
Allows other units to declare variables of the appropriate type when storing
those values separately
* x86_64: do not use copy_mm in g_concatcopy for 8 byte sized copies
+ add method to find a procinfo for a nested function by the corresponding procdef
* x86: Changed the names of temporary register
stores in OptPass1MOV for reasons of clarity,
and other minor optimisations.
* x86: Extension to CanBeCMOV that permits a potentially unsafe reference if it appears in the previous comparison
* use MOVDQA instead of MOVQ in spilling_create_store
* call OptPass1_V_MOVAP for MOVDQA
* call OptPass1_V_MOVAP for MOVDQA on i386
* x86: Fixed bugs in and refactored and renamed
DoSubAddOpt optimisation method
Typed const builder: store tsym
Useful for LLVM debug info generation
llvmdbg: initial version based on dbgdwarf
Line information is mostly functional, type information not yet (except
for basic procdef info, as that's required for line info)
+ fold "a shl n1 shl n2" and "a shr n1 shr n2" into "a shl (n1+n2)" and "a shr (n1+n2)", resolves
gitlab 0039629
dbgllvm: remove restriction to only write struct procdef in context of struct
Does not make a difference for LLVM since all debug info for procdefs is
assigned to the definition instructions for the procdef anyway, and avoids
issues when only generating line info (in that case the structs will never
be processed, but we still have to generate the basic debug info for their
procdefs to provide a scope for their line info)
Use a set instead of boolean arguments to TCallCandidates.
Outline freeing TFPList with disposing its items into TFPList.FreeAndNilDisposing.
* only abort due to a missing overload directive if there indeed was any procdef found (due to implicit specializations there might be none), fixes compilation of tests webtbs/tw38310b and webtbs/tw38310c
* move handling of a dummy symbol (mainly either resolving it or generating a suitable error) inside single_type to a nested function as the same code is used multiple times
* fix
gitlab 0039673: also resolve the dummy symbol in case this isn't a reuse of the current generic's name
+ added test
* fix
gitlab 0039679 and fix
gitlab 0039680: for implicit specializations a parameter used in a call might also inherit in some depth from a specialization used as parameter type
+ added tests
* the index of the generic type parameter is not the same index of the paras list
+ added test
* a function can't be used to implicitely specialize a specialized procedure variable parameter and vice versa
+ added test
* fix
gitlab 0039681: also handle the result type of a specialized procvar when checking for a possible implicit specialization
+ added test
* fix
gitlab 0039675: consider the symbols for unnamed parameters as used so that there won't be unnecessary hints about them
+ added test
* x86: Improvement to CMP/JE/CMP/@Lbl/SETE ->
CMP/SETE/CMP/SETE/OR optimisation to reduce
pass counts (and work better with improved
FLAGS register allocation).
* use a single if-condition for both check_hints and addsymref
* in case of an implicit specialization ensure that the symbol of the generic is indeed considered as used once the final implicit specialization has been picked
+ added test
* x86: Improved TrySwapMovCmp to insert before
the FLAGS register is allocated.
* AVR: fix TCpuAsmOptimizer.InstructionLoadsFromReg for MOVW
* simplify code for MovMov2Movw optimization
* AVR: moved MovMov2Movw optimization into pass2 as it might prevent other optimizations
* Fixed bug in register preservation tracking
LLVM lineinfo: fix nolineinfo generation
LLVM requires line info metadata for all call instructions that may potentially
be inlined. So attach one to all call instructions in nolineinfo regions, but
set their line number to 0 (same as what clang does)
llvmtype: ensure all processed defs get recorded
This is necessary so they get reset as well, as they may be reprocessed while
compiling other units (both by llvmtype and dbgllvm)
llvmdbg: add declaration for all DISPFlags
dbgllvm: create dummy line info for instructions that shouldn't have any
Use line 0 for that, like clang does
dbgllvm: handle array of const (stub)
dbgllvm: handle empty spFlags
llvm metadata: use cardinal instead of tsuperregister for unnamed metadata numbers
We're not putting these into registers, so no need to limit ourselves
dbgllvm: fix infinite loop when writing multi-dimensional array info
cutils: also use minalign, when varalign equals it, not only when varalign is less than it (21 years old bug?)
LLVM: fix fileinfo of temp allocations
dbgllvm: fix crash when generating debug info for procdef of imported struct
dbgllvm: fix crash for files without procedures/functions
dbgllvm: add scopeLine attribute for function debug info
Ensures that breaking on the function correctly sets the breakpoint on the
first source line of the function (rather than potentially in the prologue
without line information)
* allow 32 byte alignment of constants and variables on aarch64-darwin
+ AVR: helpers take care of ADIW
* AVR: use adiw to create spilling constants if possible
* AVR: insert allocations for registers used by spilling so the assembler optimizer does not remove spilling code
llvm metadata: counter per unit rather than globally
Results in less high numbers, and reproducible results when partially
rebuilding
llvmdbg: diflags/dispflags fixes
Fix MainSubprogram flag for older LLVM versions, as it was a plain flag rather
than a subprogram flag there.
Added visibility flags for procdefs (public/private/protected)
Write flags as enum rather than integer to avoid issues with changing values
across different LLVM versions
Fix generation of default linker script for esp-idf v4.4
+ AVR: track flag usage
+ AVR: take care of allocated flags when spilling
* AVR: trgcpu.do_spill_read might also use ADIW
* Bug fix that prevents downsizing of
"(x div y) and z" when "x div y" is 64-bit and
z is 32-bit or less. Fixes i39646
Rename tsymtable.insert and delete methods to insertsym ands deletesym
* x86: Bug fix where aoc_ForceNewIteration was
checked in the wrong pass.
* AVR: trgcpu.do_spill_read must load ofs
* Corrected label reference counts caused by TAsmLabel.GetName incrementing refs
* set minimum compiler to compile the compiler to 3.2.0
SymAnsiStr: fix "make all" and webtbs/tw39661*
Fixes compilation with LLVM backend
TSymStr: more consistent usage
* x86_64-linux and i386-linux align variables and constants up to 64 byte boundaries
PPU version: bump
fcaea210758 changed name mangling
* arm-linux: set max. alignment for constants and variables to 32 byte boundaries
Fix for variables longer than 127 chars
* set max. variable and constant alignment for win32 and win64 to 64 byte boundaries
LLVM debug info: LLVM 7.0 support
Also defined some llvm flags in a negative way so they can be removed from
later versions rather than added
* Fix to bug that would reset nf_write flag on tempref nodes in assignments
Use round to convert float constant into s64comp type for LLVM compiler as is done in general case
* simplifications by Rika (*2 loops => shl/Bsr), resolves
gitlab 0039717
aasmtai: added tai_string.Create(ansistring)
Also prevent range check errors for empty strings
LLVM metadata: specialised metadata fleshing out
+ added the atomic memory access WebAssembly instructions from the threading proposal for WebAssembly
+ enable the atomics extension on the llvm-mc command line (extension appears
to be recognized since LLVM 8.0, so it should be safe to always enable this
from the llvm-mc command line)
* patch by Rike: Use reverse_longword instead of manually reversing longword, resolves
gitlab 0039720
+ added intrinsic (for RTL internal use) that emits the WebAssembly atomic.fence instruction
+ support the atomic.fence instruction in the WebAssembly internal object writer
llvmdbg: disable open array data location
Since we don't generate full debug info for parameters yet, this internalerrors
llvmdbg: remove some commented dbgdwarf code
Also adjusted some hashtable sizes
Fix syntax error for isLocal field for function/procedure type LLVM debug information
Use '.L' as labelprefix for LLVM compiler variant
+ Aarch64: MovOp2AddUtxw optimization
LLVM: separate as_clang_llvm_darwin
The Darwin local label prefix ('L') is different from that on most other
platforms ('.L). While LLVM generally handles that for us, for inline
assembly it's still FPC's job to adhere to the target conventions.
Only use Win64 vectorcall special case if calling convention is vectorcall.
* a64: Fix where hp1's was assumed to be an instruction and not actually checked
* a64: New movz reg,#0 -> mov reg,xzr (or wzr) optimisation
* more readable fix for the missing ait_instruction check
* arm/a64: New sbfx/ubfx -> mov optimisation
* a64: Updated debug messages to follow standard.
Call increfs manually to avoid removal of stabs debug related labels
* increase default dwarf version for linux targets where current distributions exist
Do not alloc/dealloc NR_DEFAULTFLAGS for wasm32, as it is NR_NO
* implement necessary conversion functionality for anonymous procdefs to function reference interfaces including capturing of variables
* Streamlined label referencing
* better constant propation for inline nodes
+ added instrinsic support for the all the 2-parameter read-modify-write
WebAssembly atomic operations (add, sub, and, or, xor, xchg). Note that they
are not implemented in the internal assembler, yet.
+ added intrinsic support for the WebAssembly cmpxchg atomic operations as well
Add missing reference increases for ait_jvar labels
* if a for loop does not change a variable, we can propate it if it is a constant, resolves
gitlab 0039726
+ support the new WebAssembly threads and atomics instructions in the internal assembler
+ support intrinsics for the WebAssembly memory.atomic.wait32 and memory.atomic.wait64 instructions
+ support intrinsic for the memory.atomic.notify WebAssembly instruction
+ add a new symoption for symbols created for nameless types during implicit function specialization so that they can be recognized
* if the symbol belongs to the current def also consider it a specialization if it's a nameless type symbol from an implicit function specialization as their owner gets changed to the function itself
agllvm: fix writing metadata operands for variable declarations
llvm metadata: add DIGlobalVariableExpression enum
Only documented as of LLVM 9.0, but existed already in 7.0.
Also fixed DIGlobalVariable not being marked as unique
llvmdbg: handle nil in more places
"void" is represented as "null" in LLVM debug information, which we represent
by nil
llvmdbg: build hashtable to lookup llvmdecl belonging to a global variable
We need to attach the debug info to it
llvmdbg: fix missing initialisation when there are no procedures
llvmdbg: emit debug information for global variables
llvmdbg: emit uppercase symbol names unless C++-style debug info is selected
Otherwise gdb won't find the symbols unless you use the exact case
* more robust code for constant propagation in for loops
llvm: replaced boolean fields in tllvmcallpara with a set
* continue const. propagation after a for loop when possible
llvm: changed llvm_metadatatype from untyped pointer to undefineddef
That matches its meaning better, as it should not result in type conversions.
E.g. some kinds of metadata parameters expect a "type register" parameter such
as "metadata i32* %reg.3"
- remove duplicate paraprintnodetree to ensure that there the right paraprintnodetree is used (namely the one from globals)
* ensure insert_self_and_vmt_para can deal with a preexisting self symbol as long as it has the expected type
* patch by Pierre, which fixes WebAssembly code generation for signed div/mod with overflow checking
* WebAssembly code generation fix in thlcgwasm.a_op_reg_reg_reg_checkoverflow, based on patch by Pierre (but simplified, to use a single block)
* fixed WebAssembly code generation in thlcgwasm.g_overflowCheck_loc (patch by Pierre)
* replaced several internal errors, related to the WebAssembly labels
resolution with more meaningful error messages, in order to ease the
debugging of the compiler. Based on patch by Pierre.
+ reserved inline numbers for the WebAssembly atomic loads and stores
+ implemented WebAssembly atomic load intrinsics
+ added WebAssembly atomic store intrinsics
* implement assignment of procedure and method variables and routines (global, instance and nested) to function references
Add help for -Aomf option for wasm32 CPU and new message for ogwasm binary writer
Avoid some range check error and convert internalerror into error messages
tllvmcallpara: turned into object and added convenience methods
* the WebAssembly internal assembler renamed WASM (previously it was OMF, which was the ID of the MS-DOS .obj writer, which I forgot to rename)
* fixed the message in the previous commit
TCGParaLocation: remove alignment gap
+ support different versions of llvm-mc (version 10 seems to be the earliest that works)
* correctly handle directives for function references
+ added "(experimental)" to the compiler help screen for the WebAssembly compiler options that are still unstable/experimental
* compilation with -O3 fixed
Fix cycling with -CR option
* fix
gitlab 0039736: ensure that the capturer object and any converted function reference interface are considered used
+ added test
* fix compilation with DEBUG_NODE_XML defined
Avoid invalid typecast to tabstractvarsym
agllvm: support nested constants in parameters
Needed for metadata support
agllvm: support specialised metadata with field names
Necessary for DIExpression
tllvmcallpara: record whether it's passed to metadata
Sometimes we need the def to store a the original def of the passed parameter,
e.g. for the first argument to llvm.dbg.addr
hlcgobj: new getlocal and recordnewsymloc methods
Call hlcg.getlocal instead of tg.getlocal when used for actual parameters/local
variables. Has an extra tsym parameter, which will enable the LLVM backend to
insert debug information.
Call hlcg.recordnewsymloc when the location of a (local/para) symbol changes,
so debug info tracking can be updated (only done for LLVM currently)
+ enable the ROL/ROR instructions for WebAssembly
+ implemented popcnt via the popcnt instruction in WebAssembly
* Risc-V: return with mret from interrupt handlers, resolves
gitlab 0039737
+ added the memory.init and data.drop instructions
+ added the WebAssembly reference instructions ref.null, ref.is_null and ref.func
+ added the WebAssembly table instructions
+ added the WebAssembly reference and vector types to TWasmBasicType
+ support all the new types in encode_wasm_basic_type
+ added the 'wasmthreads' target switch (enabled via -CTwasmthreads)
* fixed compilation of ppudump
+ added a 'producers' custom section to WebAssembly object modules, containing the FPC version
+ produce a target_features section when compiling with -CTwasmthreads
ngtcon: fix def of emitted vmt in procedure of object typed constants
Fixes compilation of tests/test/tprocvar17 with the LLVM backend, and probably
some other tests as well
rautils: don't interpret ".L3" as potentially meaning "unitx.identifier"
Fixes compilation of webtbs/tw10641.pp with a compiler compiled with
range checking
taddnode.cmp_of_disjunct_ranges: fortify in case of programs with errors
Fixes compilation of webtbf/tw3116 with a compiler compiled with -Cr
+ support the memory.init and the data.drop instructions in the internal asm writer for WebAssembly
+ added the WebAssembly saturating truncation instructions to the internal assembler
* pass the option to create shared, imported memory to the linker, in case the module is compiled with -CTwasmthreads
Note that this breaks running programs compiled with -CTwasmthreads with "wasmtime run --wasm-features threads", but
there's not much we can do about that, since shared memory is required for threading, and wasmtime still doesn't
support it.
* the stack pointer on Risc-V points always at the last used position, resolves
gitlab 0039739
* pseudo instructions for flag handling
* standard Risc-V pseudo instructions for Risc-V 32 completed
* unified Risc-V 32 and 64 cpubase.pas
+ completed Risc-V 64 pseudo instructions
* typo fixed
llvm: support for adding/subtracting constants to pointers in typed constants
Fixes webtbs/tw34027 for llvm
do_set: immediately exit in case of range error
Prevents run time error in case of a compiler compiled with range checks
enabled (webtbf/tw10890a)
tarraydef.elecount: fix overflow detection
It did not trigger in case of an array[0..high(asizeint)]. Fixes compilation
of webtbs/tw9039[ab] with a compiler built with range checking enabled.
llvmdbg: fix overflows for aggregates > 2^61 bytes
LLVM does not support aggregates larger than that at all, because internally
it stores all sizes in bits in an uint64. Their rationale for not having
special support for that is that there is no hardware with full 64 bit VM
address space anyway. So truncate our size emissions in debug info also to
that.
read_record_fields: fix overflows of variant record size variables
Could happen in case of > 32 bit variant parts, or variant parts at offsets
> 32 bit offsets.
Fixes webtbs/tw9039c with a compiler compiled with -Cr
* set the correct symtable level for the invoke procdef
* ensure that the VMT for the function reference interface is generated correctly, but for this the invokedef needs to be copied without hidden parameters (and handle_calling_convention will be done by the VMT builder as well)
function references: make names of interface methods valid Pascal identifiers
On high level targets, and on PowerPC/PowerPC64, interface method thunks are
implemented using internally-generated Pascal wrappers, so the method names
need to be valid Pascal identifiers.
Additionally, that wrapper code uses the procsym's realname, so also
update the realname field when changing the name of anonymous methods.
* unified Risc-V 32 and 64 register data file
+ "rescued" mkrvreg.pp from old svn data
* fix
gitlab 0039745: the conversion from ordinals to pointer types in mode Delphi is not allowed for a void type (happens when using a typecast to convert a method without parameters to a function reference)
+ added test
Fix compilation of sparc compiler with -dDEBUG_ALL_OPT
Also add a comment when a label has been optimized out when compiled DEBUG_LABEL
Manually increase refs of newly created labelsymbol in insertpcrelativedata
Add several increfs to avoid troubles on AIX target OS
+ added Risc-V register information file generation to the compiler Makefile
* more stringent naming of register file information for Risc-V
* make proc_to_funcref_conv publicly available
+ add an error message that a nested function variable can not be assigned to a function reference
* regenerate msg{idx,txt}.inc
* ensure that a nested function variable can not be assigned to a function reference
* the check for nested procvars is now done during the conversion in capturer_add_procvar_or_proc so loosen the check in proc_to_funcref_equal_internal
* fix
gitlab 0039740: consider a conversion of a procedure or procedure variable to a function reference as a bit more expensive than otherwise
+ added test
* fix
gitlab 0039742: when assigning a function to a function reference it's not the function itself that needs to be checked to be captureable, but instead what it captures (this applies for both the non-generic and the generic case)
+ added tests
Disable finalisation code fro LLVM compiler to avoid interface finalisation troubles
Fix compliation error with -Oodfa option as reported by Gareth
+ forgotten pseudo-instructions added
* zero is a valid Risc-V register alias
* "fast lane" code and comment fixed
Fix compilation of 32-bit powerpc compiler
llvm: version 13.0 support
* Risc-V: allow also register aliases in register modification lists after asm blocks, last part to resolve
gitlab 0039738
llvm: added support for newer Xcode toolchains
Based on https://en.wikipedia.org/wiki/Xcode#Xcode_11.x_-_13.x_(since_SwiftUI_framework)_2
LLVM: list supported LLVM/Xcode versions
Use the -i or -il command line parameter
llvm: version 14.0 support
llvminfo: fix copy/paste error in llvm 14 comment
Spotted by @Alexey-T1
dbgllvm: rename hastable for staticvarsym declarations
llvmdbg: support for generating debug information for local/para varsyms
Note that not all symbols are covered yet, because absolutevarsyms are not
yet supported and those are e.g. used for function result aliases.
Additionally, not all types are fully supported yet.
* patch by Rika: improve EncodeUleb128/EncodeSleb128, part of
gitlab 0039750
llvm: removed Xcode 10.0/10.1 as supported versions
These already did not work because they predate clang 7
parentfpstruct: don't add vo_is_firstfield to first field of record
That flag is only for the first field of variant parts of records
objcdef: remove duplicate variant start check
aasmllvmmetadata: remove leftover unused type
dbgllvm: support for record field debug information
Try to fix real constant problems for llvm compiler
dbgllvm: added appenddef_struct_named
Factored out of appenddef_record_named for reuse by objectdefs.
Also moved responsibility of adding the struct dinode to the asmlist
to the caller, as the name of this method does not imply it will do
that.
dbgllvm: remove tmembercallbackinfo
Leftover from dbgdwarf, not used here
dbgllvm: skip static fields when writing struct fields
These are not part of the struct instances
dbgllvm: struct_metadef fixes
It will be used to hold a reference to the underlying structure of a class,
whose type is represented as a pointer to a DW_TAG_class_type for compatibility
with the debug information generated by the FPC backend (otherwise we could
instead just add a deref expression to all variables of such a type)
dbgllvm: support for tobjectdef debug information
Classes, objects, interfaces, Objective-C classes, ...
dbgllvm: emit all symbolic constants as enum values/strings
Easier to read in the .ll files, and avoids potential mismatches with their
value in LLVM (in case it changes across LLVM versions)
Fix compilation of arm compiler with LLVM=1
Fix oversized type size constant
Avoid Invalid typecast error when using -CR option by using tabstractrecordsymtable type for record or object symtable
dbgllvm: removed some commented-out declarations
* patch by Rika: Replace some instances of manual work with endianness with cryptic oneliners, resolves
gitlab 0039719
defutil: new is_address() helper
Returns whether a def represents an address
nllvmadd: fix not always forcing pointer constants in registers
There could have been a typeconversion around the pointerconstn/niln.
This was hidden because llvmtype fixed it up later, but with opaque
pointers it showed up again.
* a few more MISP64 fixes
agllvm: missing space between type and tai operand
llvm: support for opaque pointers
Will be the default starting with LLVM 15, and required with LLVM 16.
Tested with LLVM 14 and '-mllvm -opaque-pointers'. See
https://releases.llvm.org/14.0.0/docs/OpaquePointers.html for more
information.
llvm: use formaldef rather than undefineddef for llvm_metadata
Better matches the intent, and fixes compilation issues on AArch64
+ RiscV32: patch by kupferstecher: compiler support of CH32V30*, part of
gitlab 0039777
arm paramanager: always create at least one paraloc
Even for parameters of 0 bytes. Matches behaviour on other targets.
* use a TCmdStr as parameter for SetVerbosity as it gets passed a TCmdStr in the option handling, thus may contain a parameter value (especially -vmXXX) larger than 255 characters
+ add a AnsiString based overload of GetToken
* change ChangeMessageVerbosity from String to AnsiString as long parameters might be passed to it
llvmpara: don't crash if a parameter has no paralocs
* don't load the controller unit if the currently compiled unit *is* the controller unit (which might happen if one compiles the controller unit as part of a program)
* do not throw messages on potentially uninitialized internal symbols, resolves
gitlab 0039744
Put systems_bsd into systems_weak_linking to fix heaptrc compilation failure for netbsd and dragonfly target OS introduced by commit ae346a87
llvmdbg: fixed variant fields
They have to be members with a union type, rather than union types
themselves.
* optimize a-const1-const2 when const1 and const2 are real constants and fast math is on, part of fixing
gitlab 0039782
darwin: also run dsymutil for DWARF 4
x86-64: keep tcgpara vardef the same as the para's real def
Only override the paraloc's vardef if necessary. This fixes compilation of
tests/test/cg/tvectorcall*.pp for LLVM
x86-64: properly set parameter alignment if not default
* get rid of cs_opt_none
* $O+ sets cs_opt_level2 instead of cs_opt_none which made no sense
* do not use Dwarf-4 yet as it is too little tested and has no benefits
* remove accidently commited writeln
Support arrays and classes in compile-time OffsetOf.
* WebAssembly exceptions fix: fixed raise without parameters in except..end
blocks in WebAssembly native and branchful exceptions mode. Fixes
gitlab 0039752
+ added check whether PPU and program are compiled in the same WebAssembly
exceptions mode (either both are turned on, or both are turned off)
* Don't call secondpass(left) in twasmtypeconvnode.second_int_to_real, this fixes bug
gitlab 0039735.
+ WebAssembly: use the 64-bit div instruction, instead of an RTL helper for 64-bit division
* fixed WebAssembly code generation for integer unary minus with overflow checking
+ generate exception checks after calls to fpc_overflow class in WebAssembly
branchful exceptions mode, because fpc_overflow can raise an exception in case
unit SysUtils is included.
+ make use of the unsigned remainder instructions in WebAssembly (i32.rem_s, i64.rem_u)
* fix
gitlab 0039795: when extracting make_prettystring it was forgotten to also append the const part of the name to the specialize name
Simplify SanitiseXMLString.
* do not throw an internal error if slice is used on dyn. array paramters, resolves
gitlab 0039806
* Fixed infinite loop when CONSTPROP is enabled
but USELOADMODIFYSTORE is not.
riscv32: Fix potential FP proc_exit bug
* do not optimize away +0.0 if no fastmath is passed as -0.0+(+0.0)=+0.0
* x86: MovAndTest2Test optimisation now accepts a smaller sub-regiser on the TEST instruction
cresstr: fix length specified for resource strings to typed const builder
Copy/paste error
* allow type parameters in variant parts of records as we do not now
what type is used during specialization, resolves
gitlab 0039805
* x86: Shrink TEST instruction on MovAndTest2Test
where possible.
set Tag_ABI_VFP_args to 1 only if the hard float abi is used, should resolve
gitlab 0039817
* convert a+/-const1-/const2 in into a+/-(-const1)+(-const2) to enable further optimizations, resolves
gitlab 0039782
riscv: Merge stack code, fix interrupted code
- Stack pointer is kept below register save area. This ensures that
registers are not overwritten by interrupt handlers.
- RV32 and 64 code is merged to base class.
__fpc_valgrind symbol: use correct size when inserting definition
x86 BuildInsTabMemRefSizeInfoCache: don't read past end of instab
Add cntfrq_el0 and cntpct_el0 AArch64 registers
tstringconstnode.changestringtype: fix buffer overrun
Found by asan
* handle absolute on strings correctly for dwarf debug info, resolves
gitlab 0039816
ttai_typedconstbuilder: do not remove tcalo_vectorized_dead_strip_item
This was done because originally getting the finalized asmlist happend
through a single proc that either called the vectorized version or the
regular version depending on the presence of tcalo_vectorized_* flags.
Nowadays, calling either get_final_asmlist_vectorized_dead_strip or
get_final_asmlist happens directly as needed.
This flag will be used by the LLVM asmwriter to add appropriate
address sanitizer information.
LLVM backend: address sanitizer support
Activate with -Clfsanitize=address. Only tested on Darwin/x86-64 for now.
agllvm: fix writing strings in metadata arrays
They were interpreted as part of larger strings
llvm: fix reading past end of data for some parameter references
Fixes false positives when using address sanitizer
* a64: New conditional branch to CSET peephole optimisation
* a64: Porting of MatchOperand function from x86 that takes integer parameter
Adding AArch64 CurrentEL register
CurrentEL is used to determine the current "exception level" in the CPU.
It has four possible results:
0b00 - EL0 - Application
0b01 - EL1 - Rich OS
0b10 - EL2 - Hypervisor
0b11 - EL3 - Firmware
https://developer.arm.com/documentation/ddi0595/2020-12/AArch64-Registers/CurrentEL--Current-Exception-Level
https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels
* Reference counts are now properly incremented on duplicated taicpu objects
LLVM address sanitizer: add asan library and rpath on Darwin
Also verified that "make all" works with asan on macOS/AArch64
* Always generate CFI-information. During linking it can be omitted when
no debug-information is requested. On Linux this needed a change in the
linker-script. On Windows it already works as desired. Other targets
may need some adjustments as well.
* arm: Symbol reference counts are corrected when PC-relative data is inserted
* arm: Labels to constants are now data labels and not jump labels
x86: Direct assignment instructions are no longer checked prior to calling CheckJumpMovTransferOpt, instead relying on the callee to do the heavy lifting (also fixed -Os bug)
* correctly truncate rtti symbol names of enumeration types, resolves
gitlab 0039829
* x86: Fixed bug in "Mov0LblCmp0Je -> Mov0JmpLblCmp0Je" optimisation
where the reference count was increased twice.
+ support writing of 32-bit and 64-bit relocations in the REL object writer
for Z80. This fixes DWARF debug output and makes it behave consistently with
the Z80 external assembler writer.
* patch by rika: simplify tscannerfile.readstring, resolves
gitlab 0039835
+ added the WASM_SYM_TLS symbol flag constant
+ added WASM segment flag constants
+ set the TLS flag for threadvar sections when WASM threads are enabled
+ prefix the threadvar sections with '.tbss' when WASM multithreading is enabled
+ WebAssembly multithreading: also declare threadvar sections as TLS and prefix their name with '.tbss' when using the external assembler
+ introduced trefaddr.addr_got_tls, to be used for generating WebAssembly threadvar access, when WASM multithreading is turned on
+ generate proper WebAssembly threadvar access when multithreading is turned on
+ declare the three magic global variables (__tls_size, __tls_align, __tls_base), created by the linker, when WebAssembly multithreading is enabled
+ added WebAssembly intrinsics for reading __tls_size, __tls_align and __tls_base
+ add the "-m wasm32" parameter to the linker, when linking for the WASI
target. No idea if it does anything, but is passed to the linker by the
official WASI SDK, so it shouldn't hurt.
* set the default stack size for the WASI platform to 65536 bytes (this is the
default, used by the linker)
+ allow changing the stack size for the WASI platform
* stack alignment on the WASI platform is 16 bytes
* set the stack size to 64kb and stack align to 16 bytes for the wasm32-embedded target
+ allow setting the stack size for the wasm32-embedded target
+ pass '-m wasm32' to the linker, when compiling for the wasm32-embedded target
+ allow creating a linker map file, when compiling for the wasm32-embedded target
* use current_module.sharedlibfilename instead of current_module.exefilename, when linking a library for the wasm32-embedded target
+ allow specifying custom extra linker options for the wasm32-embedded target
+ allow specifying custom extra linker options for the wasm32-wasi target
- removed debug writeln when calling the linker for the wasm32-embedded target
+ show a "linking" message before invoking the linker for the wasm32-embedded target
* fix
gitlab 0039826: correctly handle function references that are part of generics/specializations, but are not generics/specializations themselves
+ added test
* apply the same alignment parameters to wasm32-embedded as wasm32-wasi
- disable the cs_opt_nodecse optimization from the -O2 for the WebAssembly target, because it causes a crash, when compiling the classes unit
+ added custom section descriptions for DWARF debug info for the WebAssembly object writer (not actually emitted, yet)
+ introduced TWasmObjSection.IsDebug
* fixed crashes with the WebAssembly internal object writer, when debug info is enabled. The debug info itself is not yet written to the file, though.
+ write the actual DWARF debug sections in the WebAssembly object writer. The relocations aren't ready, yet, though.
+ emit WASM DWARF debug info relocations
+ implemented the R_WASM_FUNCTION_OFFSET_I32 relocation in the WebAssembly object writer
+ always (even when multithreading is off) create a "target features" section
in the WebAssembly object writer, since we still require some (very commonly
supported) extensions, even without multithreading
* don't write R_WASM_TABLE_INDEX_I32 relocations, always use R_WASM_FUNCTION_OFFSET_I32 in debug sections
* workaround crash when generating WebAssembly DWARF debug info for threadvars, while multithreading is turned off
llvm: move asan library linking support to texternallinker
This way other platforms besides Darwin can also use it.
* an attempt to fix WebAssembly debug info section relocations
+ support RV32E Extension
* RiscV: generate mret only for FreeRTOS and Embedded
* RiscV: pass the same default directories to the linker as on other architectures
* Riscv32 and Riscv64 on linux: enable safecall support
llvm: support for getting the llvm rtl (rt) architecture name
This is the name used as part of the llvm rt libraries, like
asan (address sanitizer)
llvm: generalised sanitizer linking support
Also enabled automatic detection of sanitizer library + setting rpath to Linux
Fix compilation with -Oodfa
ARM: fixed compiler compilation after 75c16b612660
+ allow the 'section' directive for the WebAssembly platforms
+ introduced tcpustaticvarsym.is_wasm_global
* don't reserve bss data for wasm global vars
+ introduced methods for converting WebAssembly global var types from a Pascal type to TWasmBasicType
+ declare user-defined wasm globals in the llvm-mc assembly output
* WebAssembly high level code generator: use the global.get and global.set
instructions to access references to symbols of type AT_WASM_GLOBAL
* x86: Bug fix where a tai type was assumed and could sometimes trigger an invalid typecast under -CriotR
variable trashing: don't trash internal syms
Since they're managed by the code generator, they should always be valid.
parentfpstruct: explicitly trash before initialising
It's an internal sym, but it contains user data. Together with the previous
commit resolves
gitlab 0039845
* x86: Fixed minor logic bug in aoc_ForceNewIteration check where UpdateUsedRegs was called at the wrong time.
* x86: Corrected some incorrect uses of RemoveCurrentP in OptPass1_V_MOVAP.
* x86: Refactor of a DeepMOVOpt call to make use of a while loop and aoc_ForceNewIteration to increase compiler speed and efficiency.
+ VPXorVMov2Mov optimization
llvm: correctly write aliases when using opaque pointers
llvm: llvm/clang 15.0 support
* fix
gitlab 0039849: it's an error when the file (or string) parameter of a Read*/Write* is followed by a ":"
+ added test
* do not warn on anonymous functions without captured variables about being not used, resolves
gitlab 0039853
* x86: Fixed bug where redirected jump has its condition changed (fixes i39851)
* x86: Reference count fix in CMP/Jcc and TEST/Jcc redirect optimisations
+ VPXor2VPXor optimization
* x86: Correct fileinfo and some refactoring for imul2leashl optimisation
* x86: Correct fileinfo and some refactoring for OptPass1LEA
* x86: Correct fileinfo and some refactoring for OptPass1SHLSAL
* x86: Correct fileinfo and some refactoring for OptPass1CMP
* x86: Correct fileinfo for OptPass2MOV
* x86: Correct fileinfo for PostPeepholeOptCall
+ support declaring wasm globals in the WebAssembly internal object writer
+ forgotten comments for new optimizations
Update errord*.msg
new messages and other changes in errore.msg have been translated or ported to the German message files.
* captured variables cannot be in registers typically
* wasm32 obj writer: writing the debug section symbols to the symbol table moved before the writing of the debug sections themselves
* wasm32 obj writer: moved the writing of the data sections ahead
* wasm32 obj writer: determine the section number for the datacount, code, data and debug sections ahead of time (before writing the sections)
* wasm32 obj writer: do the relocations before writing the code, data and debug sections
* wasm32 obj writer: use Data.ObjSectionList.Find to find the debug section by name in MaybeWriteDebugSection
* use simpler FMOV instead of UMOV
+ introduced TWasmCustomDebugSectionType
* use WasmCustomSectionName to obtain the debug section names in MaybeWriteDebugSection and MaybeAddDebugSectionToSymbolTable
+ handle LOC_FLAGS in thlcgobj.location_force_mem, resolves
gitlab 0039292
* fix
gitlab 0039860: even if the block type is not correct for the specialization of a generic routine continue to specialize it to not trigger e.g. an internal error
+ added tests
* extract generating the specialization from a specialize node into a separate function
* try to specialize a specialize node if it's followed by a < in a non-code section so that we might get better error messages
* the clause for converting the captured symbols of a nested function must not be entered by an anonymous function
* fix
gitlab 0039858: correctly keep track of symbols that need to be captured into the capturer
+ added test
* Fixed internal error number clash (2021102610)
Mark .noinit section with nobits flag.
* x86: New SHR-based optimisations
* improved FstpFld2 optimization
* x86: New "shr %cl; shr x" swap optimisation
+ some debug messages added
* cosmetics
do not publish enums with jumps
do not publish enums with jumps - keep error on static properties
* x86: Fixed bug where the magic number of an integer division wasn't fully sign-extended, causing incorrect logic within the compiler.
* Converted assertion into an internal error
* x86: New MovShr/Sar2Movx optimisation
* patch by Rika: This speeds up DefaultReplacements by a lot (order of magnitude or so), resolves
gitlab 0039722
* x86: Improved unsigned integer division for when BMI2 is available.
Revert " * patch by Rika: This speeds up DefaultReplacements by a lot (order of magnitude or so), resolves
gitlab 0039722"
This reverts commit a2d7503f714ee8ff856efd8d17548fbab928f0ec.
Reason: breaks replacements in config file parsing.
* apply default replacements also to defines set by -d:
- -d with $ is not possible so this should not break any existing compiler call
- this fixes also the strange error message "Error: malformed parameter: -dlinux"
when e.g. -d$FPCOS is passed as the default replacements are applied to the
error message
* x86: 64-bit integer division reciprocal algorithm uses IMUL
with an immediate for the modulus version where possible
* handle also simulated flags in tmipselnotnode.second_boolean, resolves
gitlab 0039877
m68k: use CPU capabilities at places instead of hardwiring cpu_coldfire
m68k: disable an A_MOVE in the spilling code in an effort to finally try to unbreak paszlib
m68k: add a CPU capability to signal the CPU has no 48 bit encodiing limits
* fix
gitlab 0039876: correctly Read(Str) enum types which have a size smaller than 4 Byte
+ added tests
* fix
gitlab 0039857: don't trash symbols marked as vo_is_internal
+ added test
* fix
gitlab 0039875: when a WideString constant is used to initialize a PChar the constant needs to be converted to the current code page
+ added test
* improves node complexity calculations
powerpc-morphos: enable 'section' keyword support, and force the startup code to be in the .text section, to fix linking external objects with unnamed sections on this platform
* don't switch a+/-/sqr(b) into an fma statement if b is too complex
* x86: EDX is now deallocated before MULX instructions in the "magic div" algorithm so it can be used as the destination
* correctly convert a single WideChar to a PChar constant with the correct code page
+ added test
+ MovzMovz2Movz optimization
m68k: fixed the capabilities flags inverted logic issues committed in 7d23c2e9
+ AArchz64: TCpuAsmOptimizer.OptPass1SXTW
* fix for TCpuAsmOptimizer.OptPass1SXTW
* refactor TCpuAsmOptimizer.OptPass1SXTW
+ Aarch64: SxtwOp2Op optimization
* refactoring
* cosmetics
* factor out GetNextInstructionUsingReg calls in TARMAsmOptimizer.OptPass1*XT*
+ ARM/Aarch64: *xt*Op2Op optimizations
* building of arm compiler fixed
* AArch64: extended SxtwMov2Data to CMP and CMN
* factor out TARMAsmOptimizer.USxtOp2Op
* use the bts instruction on x86 if possible, the reg,reg variant is better than a mov/shl/or sequence
* apply OptPass1Data to neg as well
* x86: Added BEXTR and BZHI to special spilling rules since they follow the same format as SHRX etc.
* x86: Added SARX to BMI2 code generator
* x86: Made a check for BMI2 more explicit in the integer division code generator
vector support: check supported type during parsing already
Avoids internalerrors at the code generation stage when using an unsupported
type
vector support: use vector result types
Set the result of a vector add node to a vector type.
Ensure that that these vector types are still asignment-compatible with
regular array types (may want to change this when we expose vector types),
and don't remove type conversions from vector types to array types (so the
code generator pass can still rely on the resultdef being a vector type)
High level codegen: set MM register type for vectors
LLVM: support for -Sv (manual vector usage)
Override register type for vectors to "integer registers" because we don't
use mmregister on LLVM (they're all virtual, so it doesn't matter)
* Seems not all was committed
Darwin version comparisons: factored out into object
Use numeric instead of string comparisons
objc: use compile-time macOS version checks
Use "modern" APIs for calling inherited messages when targeting Mac OS X 10.6
or later
objc: stop generating coalesced sections
When targeting >= Mac OS X 10.6, don't generate coalesced sections anymore
because they are deprecated. Resolves
gitlab 0039818
Overload selection: call procvars if result is compatible with parameter
Previously we only autmatically called procvars without parameters in TP/Delphi
modes if their result type was equal to the parameter type to which they were
passed. Resolves
gitlab 0039748.
symcreat: support for scanner/parser escape sequences
Support escape sequences when parsing internally generated code. Used for now
to force interpreting certain identifiers as unit/namespace identifiers.
* allocate registers correctly for method pointers on 16 bit address cpus, resolves
gitlab 0039603
* i8086 compiler fixed after 9848349610219cd0d2dadc67b112fb09a8317e91
* hopefully final fix after 9848349610219cd0d2dadc67b112fb09a8317e91
* fix
gitlab 0039903: correctly parse anonymous function references in records (and classes/objects)
+ added test
* check whether the hdef is still a procvardef before accessing it as such
* handle_calling_convention is only needed for a function reference used in a record/class/object when it's an anonymous one
* fix
gitlab 0039902: correctly handle assignment of procvars to properties with a field write accessor
+ added adjusted/extended test
* fix
gitlab 0039902: in case of mode ObjFPC function pointers passed to parameters need to be checked for the correct procdef as well
+ added adjusted/extended test
Missing file from b26703feaa9
* patch by Rika: Use linear file list in FInput.TInputFileManager instead of linked, resolves
gitlab 0039880
* mark units compiled with cs_compilesystem with a corresponding flag
* fix
gitlab 0039907: only load system class types from units that are marked as a System unit
+ added test
x86: Deeper insight in OptPass2ADD and OptPass2SUB to produce more efficient code
* end of an include file works like a new line with regard to single line (//) comments, resolves
gitlab 0039912
* fix
gitlab 0039898: when a loadnode is captured ensure that its nf_load_procvar flag is applied to the subscript node as well
+ added tests
Change is_macro to return true for A_JAL if in pic mode
Add name of unit for return type if not from current module in tprocdef.customprocname
Fix loading of ObjC protocol type after c8fee69345
That type lives in the objcbase unit, not in the system unit
Resolves
gitlab 0039914
* cleanup captured symbols when moving them from the nested function to the new method
* when generating the call to the extracted function reference inside the nested routine we need to use the parameters of the nested function and not those of the newly created procdef (fixes some of the test case failures with -O2)
* propertly check equality with the for-counter when propagating constants, resolves
gitlab 0039915
* apply ShlOp2Shl optimization also to floating point operations
* look ahead for ShlOp2Op optimization
* use append_object_struct also for dwarf-3 when creating dwarf debug info for objects, resolves
gitlab 0039920
* small correction to linker script
* improve dwarf cfi on avr
* cfi for avr needs 32 bit pc begin and range
+ add utility function to retrieve a signed integer def for a given integer def
+ add message in case an ordinal or pointer expression is expected (e.g. for the atomic intrinsics)
* set the maximum alignment values for constants and variables to 64 on aarch64-linux
* fix for commit a91e5478, mixed localalignmax and constalignmax
* patch by Rika: Optimize some compiler/CFileUtl.pas functions for returning unchanged strings, resolves
gitlab 0039882
* $P/$OpenStrings is supposed to be a local switch, so change that accordingly
+ added tests
* change PPU version as the change regarding $P/$OpenStrings affects the token buffers of generics (which contains the current settings)
* enable OpenStrings by default in mode Delphi
+ added test
cs_opt_consts: disable when non-local gotos are active
This optimisation can insert code after the call to fpc_setjmp, resulting in
it not getting executed after a longjmp. Fixes tmacnonlocalgoto on AArch64
with -O2 or higher.
* fix copy/paste typo in comments
* optimize shortstring concatenations if they're on the right side of an assignment to directly use the left side instead of a temporary
* use AllocRegbetween in TARMAsmOptimizer.RemoveSuperfluousMove, resolves
gitlab 0039921
* TDebugInfoDwarf3.appenddef_object should not write an extra finish_entry for objects and C++ classes
* the right side of a concatenation of multiple ShortString values can directly pass any String[x] to the utility routine, because only the Length() is used, not High() and nothing is modified (also typed pointers must not be used for them); this allows for better code generation for strings with a maximum length < 255
cgbase: make first parameter of supregset_reset "out"
rgobj: reduce compilation time of programs with long movelists
Reduces compilation time of webtbs/tw2242 for AArch64 with -O2 from
15 minutes to 10 seconds on my system.
from 15 minutes to 10 seconds
Darwin: don't try to print size statistics if the binary wasn't linked
* x86: Bug fix where improved AddMov2Mov optimisation didn't
check to see if the other register was modified in between
* x86: Improvement to bug fix so an optimisation can still be made even if the other register is in use
* x86: Bug fix where "mov $0,%reg" was inserted on the wrong side of a SETcc instruction
* x86: Fixed mistake in var9 optimisation under -Os; "andl $255,%eax" is not
smaller than "movzbl %al,%eax" because the immediate is sign-extended,
not zero-extended, so $255 will be stored as a 32-bit value.
* fixes tcg64frv.a_op64_const_reg_reg based on the analysis of Bart B, resolves
gitlab 0039953
* x86: ConvertJumpToRET now sets the condition to C_None
* if a pointer_to_array type conversion is applied to a variable, it is not written, resolves
gitlab 0039957
riscv32: Fix 64bit comparisons
- Code taken from MIPS backend
- Removed some unused code generated for RV32 64bit integer ops
* properly reset nf_write/nf_modify flags for min/max inline nodes, needed by dead store optimization, resolves
gitlab 0039958
* factored out nutils.node_reset_pass1_write
+ added WASI multithreading helper for setting the stack pointer for the linear stack
* a_load_subsetreg_reg will no longer generate an AND instruction if it isn't necessary
* x86: Modification to PostPeepholeOptShr to skip over MOV instructions if they don't modify the current register
* make the hidden high parameter for short strings a byte for 8 bit CPUs
Fix incorrect dwarf entry count. Issue
gitlab 0039928 introduced in 1b6982107f1ac4b4111e37be0a3649d155a2bc1e
* x86: The code generator will now attempt manipulate "x and (not y)" (where x and y are ordinals) to use ANDN.
- remove unused consume_generic_interface; it has been superseded by handle_generic_interface in 17a0ac7fc03
* x86: Extended FuncMov2Func optimisation to handle 1, 3 and 4-operand functions
+ print optinfo pointer if set
* check if optinfo is assigned before using it, resolves
gitlab 0039913
* x86: FuncMov2Func moved to separate method and also called by OptPass2MOV.
* x86: Changed BMI2 check to BMI1 for ordinal ANDN optimisation
* x86: CheckJumpMovTransferOpt now also copies over register deallocations to allow better optimisations
+ apply OpTest/Or2Op optimization to ANDN as well
+ DebugMsg for OpTest/Or2Op added
* x86: PostPeepholeOptTestOr has different debug messages for each found instruction, and also tests for BEXTR and BZHI.
* fix life information propagation for while loops, resolves
gitlab 0039971
* warnings/errors fixed which are caused by the new life information propagation
+ test
* more warnings after last commit fixed
Fix internalerror generated with riscv32 compiler.
Fix
Compiling ./fcl-passrc/src/pscanner.pp
pscanner.pp(2512,40) Fatal: Internal error 2006010801
error generated for riscv32-linux target after commit #c83e6c34
by correcting expectloc for riscv32 for 64-bit comparisons.
Add a small test.
* x86: Updated Mov0LblCmp0Jne optimisation to work when alignment hints appear before the label
* more debug messages
* better exit codes for test
* x86: FuncMov2Func now has code to remove "mov %reg,%reg" (since it doesn't get removed in Pass 2).
* generate the generic name for a specialization of a generic interface alias in the same way as for specializations in general
* fix
gitlab 0029859: ensure that it's correctly passed down into generate_specialization whether a unit name was provided for the specialization and if so search the generic only in that unit
+ added tests
* ensure that hmodule is initialized correctly
RTTI: don't generate full RTTI for internal types
These are types created by the code generator for internal purposes, and hence
are never queried by user code
AArch64: X18 is not a volatile register
It may be unused on some platforms, but in general it's reserved for OS library
usage (usually related to TLS)
Darwin: fix mac0S 11.0 version string
Prevents LLVM warnings
systems_iphonesym -> systems_iphonesim
It's a simulator, not a symbolator
Darwin: really fix -Xg for DWARF4
+ MovSubCmp2MovSub optimization
Linux: don't discard CFI when using it for exceptions
Allow cycle to finish successfully with -dEXTDEBUG without ALLOW_WARNINGS=1
* fix FindUnitSymtable for exception symtables, resolves
gitlab 0024801 and
gitlab 0039974
* more consistent naming of exceptsymtable enumeration symbol
* stop generation of typed array constants if the size does not match, resolves
gitlab 0039980
* x86: Added new emit_reg_ref_reg routine and related methods to support BMI2 instructions
* x86: The code generator will now attempt to manipulate "x and ((1 shl y) - 1)" to use BZHI
* x86: "x and ((1 shl y) - 1)" to BZHI adapted for in_and_assign_x_y
* dead store elimnation should not remove statements which can cause an exception
* run dead store elimination multiple times if needed
* changed of do_optdeadstoreelim must be passed by reference as noted by Alexey Torgashin
dwarf-eh: don't emit header if there's no data to emit
Fix the ~ is NOR rather than NOT
Fix the edge of first_imaginary in move op
Add loongarch64 architecture support to compiler
Add loongarch64 linux support to compiler
add loongarch64 linux rtl support
* generate correct dfa for subroutines declared as safecall
llvmdbg: fixes for method debug info
Mark "self" parameter as artificial
Add methods to the scope of the class/record rather than to the file scope
Add the vmt field, strip the "($)hidden" prefix from its name, and emit its
real type
* check if a target really supports safecall before calling load_safecallresult_node
* ensure that newly created tloadparentfpnodes have a valid resultdef as they might be created in situation where the loadnode itself is no longer typechecked
* fix
gitlab 0039981: retrieve the symbol that returns the desired procdef/procvardef not maybe the Self or something else as we need that symbol to differentiate the procdefs
+ added test
+ mark the def for a capturer class with a corresponding object option
* ensure that the correct overload is picked for function reference parameters
+ added tests
* fix
gitlab 0039978: ensure that Self is captured when a method of the current class is captured into a function reference
+ added test
* fix
gitlab 0039977: allow a capturer to access any method independant of visibility as the visibility checks are supposed to have been done before the captured symbol was converted
+ added test
* only i386 uses same special fastcall calling convention
* x86: New TEST->BT peephole optimisation
* x86: New OR->BTS peephole optimisation
* x86: New AND(NOT X)->BTR peephole optimisation
llvmdbg: remove unnecessary typedef intermediates
* fix crash in debug output in TX86AsmOptimizer.DoArithCombineOpt for DEC/INC $reg
* x86: CMOV optimisations now check optimizecputype rather than cputype
* x86: LeaLea2Lea now handles cases where the second LEA instruction
has a second register in the reference.
* x86: The LEA/LEA optimisations can now work with a different
destination register and the intermediate register still in
use.
* x86: New CPU feature flags in cpuinfo units
x86: MovMovMov2XChg optimisation now makes use of the CPUX86_HAS_FAST_XCHG flag
Avoidd to use hp1 after calling RemoveInstruction, as the VMT is invalidated
* x86: Converted BTR and BTS tests to use a new utility function to check if BTx instructions are acceptable to use
* x86: New XOR->BTC peephole optimisation
* x86: Zen processors now marked with CPUX86_HAS_FAST_BT_MEM flag
* x86: Flags that relate to optimization hints rather than features have been moved to a separate set
* calculate life info for if nodes correctly if the then branch is empty, resolves
gitlab 0039992
* x86: Refactored SetCC optimisations to better
spot label clusters and alignment hints.
* x86: New RET/lbl/RET optimisation
* x86: TEST and CMP optimisations now perform jump optimisations prematurely to remove unnecessary TEST/CMPs
* propagate life info properly
* x86: Extension to Cmp1Jl2Cmp0Jle to catch inverted variant
* CollapseZeroDistJump no longer updates registers or strips dead labels, instead just setting p to p.Next
+ FstpFldFstp2Fstp optimization
* further look ahead for temp. deallocation for FstpFldFstp2Fstp and FstpFld2
+ ShlShl2Shl optimization
* x86-64: movl/movq -> movl/movl zero-extension optimisation
* x86-64: Extended the movl/movq optimisation to cover more distance
* convert n-n mod const into n div const*const, resolves
gitlab 0039615
* x86: Addition of AMD CPUs: Bobcat, Jaguar, Piledriver, Excavator, Zen2 and Zen3 (and supporting flags)
* x86: Added FMA as an FPU target distinct from AVX and AVX2 (the latter of which has a new FPUX86_HAS_AVX2 flag)
Use correct class typecast for commit ba4cee279b
Fix compilation failure of RTL with -Co option for x86_64-linux target
* New 'do not execute' flag for notes and respective internal error triggering
* x86: 'and not' optimisation now sets the NOT node to 'do not execute' as it is skipped over
* x86: BZHI optimisation now sets the subtract and shift nodes to 'do not execute' as they are skipped over.
* create muln with create instead of create_internal when converting "n - n mod const)" so pass1 works properly, resolves
gitlab 0040004
* TAddNode.Simplify now uses pruning methods
* New node pruning methods
* More complex uses of the pruning methods in TAddNode.Simplify
* x86: Fixed movzwl/movzbl bug in OptPass2Movx (resolves i40003)
* use bzhi only (if at all) for in_and_assign_x_y and not other in_*_x_y operations, resolves
gitlab 0040016
LLVM: fix variant records when alignment of first part is not the highest
Resolves
gitlab 0040015
* In TAddNode.Simplify, commutative operations now ensure integer constant operands go on the right for simplicity
* Dead code in TAddNode.Simplify has been stripped
* as long as the type passed into a TypeInfo() is not an undefined or error def the resulting value will always be constant at compile time, so it can be compared to another then no matter if typenode or not
+ added tests
Set current_filepos in Internal assembler class also if DEBUG macro is set
+ more change information fixed
AArch64 cgcpu: add missing brackets around and/or expression
* New is_cyclic function to detect if def references itself - fixes
gitlab 0040010
* continued to fix change information
* Refactor of is_cyclic to use a linked list on the stack instead of a dynamic array
LLVM: us paraloc def instead of para def for byval
We also use the paraloc instead of the para to write the def
LLVM: add Xcode 14.0 support (-ClvXcode-14.0)
* another change information update
* Adjustment to TBLockNode.pass_1 to actually strip nothing nodes
Darwin/AArch64: adjust alignment info of custom-aligned paralocs
Resolves
gitlab 0040019
Use bitpacked indices in TViHashList.
Do not set usesectionprogbits and usesectionflags to true for solaris assembler
* Fix testing of A_JCC and A_SETCC, add A_CMOVCC
* Add $PIC for i386 and x86_64 solaris assemblers
Refuse A_Jcc, A_SETcc, and A_CMOVcc without condition
* Implement -t and -x options
* Fix spurious warning of already specified -t
* If no subtarget file found, error out instead of hint/warn
* Globals needs subtarget for macro substitution
* New intrinsiccode field for TCallNode to track transmutation from TInlineNode
* tinlinenode.handle_str now uses the new intrinsiccode field for TCallNode
* A call node's original parameter ordering can now be remembered, and a method introduced to access this
* TCallNode.simplify method introduced to convert Str with a constant into a direct string assignment
* get rid os some warnings
* Delegate darwin ifdef out of program flow, towards const, for clarity
* Define char as AnsiChar
* properly transform a+const1-const2 into a+const1+(-const2), resolves
gitlab 0040041
* improve module local data accesses by avoiding a got read
m68k: updated instruction tables to match vasm release 1.9a
m68k: add some initial CPU-specifc boilerplate for an internal ELF writer
* Allow widechar sets, reduce to ansichar set
* Do not insert widechar -> ansichar conversion node in const declaration
* Allow array constructor to contain widechars in mode unicodestring.
* Do not insert a widestring <-> ansistring conversion node when checking for (un)equal empty string.
* fix
gitlab 0040061: the Self of types that aren't implicit pointers (recods, TP-style objects, primitive types (for helpers)) needs to be stored as a Pointer in the Capturer so that modifications are correctly visible
+ added tests
* fix
gitlab 0040060: ensure that Self is not added for anonymous functions that are part of a static class method
+ added test
* a callnode for an anonymous function can have its procdefinition fixed, thus avoid the need to check for overloads
* don't free the old, captured Self symbol as that does not belong to the anonymous function
* when assigning an anonymous function to a method pointer move the function to the normal function level to avoid potential problems when accessing other variables
* fix
gitlab 0040062: ensure that Self is only added to anonymous functions when dealing with method pointers
+ added test
* do not throw an internal error on typed constants with wrong element count, resolves
gitlab 0040066
* ensure that all hidden parameter symbols are removed when adding an anonymous function to a capturer (they'll be added again later on)
* also skip high parameters when pc_normal_no_hidden is given to tprocdef.getcopyas
* fix
gitlab 0040031: with support for inline specializations it no longer makes sense to make the parameter symtable of a procedure variable type readonly as there *are* defs that are added to it
+ add adjusted test
- remove no longer required readonly functionality from tparasymtable
symcreat: add hidden high parameters in create_procdef_alias
No longer happens automatically for pc_bareproc procdef copies
llvm:a fix opaque ptr IR for Objective-C protocol
Also for interfacecom functions and properties. Fixes test/tobjc9 and
test/tobjc9b with LLVM 15.0+
thlcgobj.g_undefined_ok: new method
Specify that a register's contents may be undefined because of previous
operations (e.g. shifting by more bits than the register has, whose result
depends on the target architecture), but that the code generator will
later on ensure that if this is the case, that result will be overwritten/
masked.
LLVM: override thlcgobj.g_undefined_ok
Uses the freeze instruction available in LLVM 10.0+. If we don't freeze undef/
poison values before using them in a calculation (even if that calculation is
something like "and 0", which masks the result completely), the result will
still be undef/poison and will keep propagating.
tcginnode.pass_generate_code: use tlhcgobj.g_undefined_ok
Also override the code that uses this for LLVM with a variant that does not
need it for LLVM versions that do not support the freeze instruction.
m68k: added a helper function to check if a register is an FPU register
Avoid generation of invalid 'cb(n)z sp,label' instruction
Implicit specialisation: use regular array parameters for array constructors
Fixes compilation of test/timpfuncspez5 with LLVM and debug info, as the LLVM
debug info writer internalerror's when you try to generate debug info for
an array constructor (since those types should never appear as parameter/
variable types).
Replace them with reusable regular array types, so that multiple invocations
of the same generic function with array constructors of the same type and
number of elements are collapsed into the same specialisation
macOS: set max var/constalign to 64
For all non-ppc(64) targets. Fixes test/talignrec1.
* Forbid use of string alias in system unit
* Check that system unit is actually loaded before using it to search for system symbols
(cherry picked from commit 9e5ee68887dcb8acf66caf873bc5cfc58fb25316)
* Add is_systemunit_unicode function (cchartype suymbol)
* add uachar loading for unicode rtl
m68k: more boiler plate and refactor for a future internal assembler
LLVM: remove use of getelementptr in make_simple_ref_ptr
We cannot safely infer whether it needs to be indirect or not there,
it should be done at a higher level if appropriate.
m68k: removed the unused S_IQ opsize
m68k: more work on instruction validation for the internal assembler
Add sign extension to 32-bit for unaligned OS_8 and OS_16 types (to try to solve
gitlab 0040102)
Only signed extension is needed
* avoid internal error in case of an illegal generic declaration
* undid accidentely activated define
* do not warn on lea e/rsp with negative address offset, part of
gitlab 0040113
+ tests
* i386: Bug fix where EBP was marked as preserved when it wasn't, causing faulty optimisations
* x86_64: warn only on negative offsets if rsp is involed, second part of
gitlab 0040113
+ tests
Darwin: support -Xg for DWARFv4
+ support procvar[] in tp/mac procvar mode if the procvar returns an array type
* compile float*2 as float+float if possible as proposed by Rika, resolves
gitlab 0040116
LLVM: workaround to fix make all
* mark constant symbols used in preprocessor expressions as used, resolves
gitlab 0040108
* compilation after merge fixed
+ add utility function to retrieve the char type def from a stringlike def
* use new chartype_for_stringlike function to retrieve the char type for a stringlike def instead of casting to a stringdef
* get_stringconst should handle widestring correctly: library & import names are unicodestring constants in unicode rtl
* Unicode resource strings
* initial preparations for riscv32-freertos
+ first work for esp32-c3 support
* transform a/a only into 1 if fastmath is on
* more riscv32-freertos-esp32c3 stuff added
m68k: add tables to convert from some stub opcodes + condition into real opcodes. Use them in the external assembler writer for now. Later the internal assembler will need these tables too.
m68k: do not generate LEA instructions with explicitly specified size. only long is possible anyway.
* SetString needs correctly typed argument
* x86: Fixed bad register tracking in OptPass2JMP
* x86: More accurate register tracking in CheckJumpMovTransferOpt
* x86: Registers are now allocated properly during a FuncMov2Func
optimisation
* x86: Converted bit-test optimisations to use
debug_hexstr so comments aren't truncated
(and put $ before BTx values)
* x86: New debug_hexstr instruction to help produce concise debug comments
JVM: add typesym for anonymous record typed constants
Fixes compilation of system unit with JVM compiler after b38d13577f943
* patch by Jinyang He to fix building loongarch64 with -Oodfa/-O4
* enable to check the existing of environment variables in config files
+ completed identifiers for RiscV ABIs
* set fpu type correctly for riscv32-freertos
riscv32-freertos:
* unit name fixed
* linker script fixed
* assembler supports dwarf
* don't not generate non-constant leb128 entriesm for riscv32-freertos
* set FPU type properly for riscv32-freertos
* call esptool.py properly on Darwin
+ exec_e_cant_call_linker shows now the error message
Add support for -Ploongarch64 option
* x86: Some refactoring to use aoc_ForceNewIteration instead of manually advancing p
Aslo check that live_end is assigned before refering to it
* x86: TEST/Jcc/TEST optimisations can now look beyond the next instruction under -O3
* x86: JccMovJmpMov2CMovCMov will no longer move
MOV instructions (fixes i40122)
* x86: PostPeepholeOptCmp and PostPeepholeOptTestOr
now do a final attempt of TrySwapMovCmp to
clean up Pass 2 optimisations
* also count the use of enum syms in preprocessor expressions correctly
* post/pre inc/decrement references modify obviously the base register on avr, resolves
gitlab 0040153
* completed post/pre inc/decrement addressing mode instructions in TAoptBaseCpu.RegModifiedByInstruction
* patch by ccrause: do not load .fpc* sections into avr microcontroller to save space, resolves
gitlab 0040160
* patch by ccrause: fixes another .fpc* section problem for AVR, resolves
gitlab 0040162
* x86: Fixed oversight in RegModifiedByInstruction not checking W0, W1 and WU-type flags
* fix compilation with -dEXTDEBUG
* Speed optimisations for peephole register tracking functions
* check if a linker with the postfix .bfd exists, if yes, use it, resolves
gitlab 0040175
* fix (hopefully) build without an ld.bfd variant
x86: Some oversights fixed where another iteration of pass 1 wasn't performed when it should have been
+ x86: AND/CMP -> CMP optimiziation
* fixed comment
* shortened code
* FindRegAllocBackward will now return nil if it hits a dealloc for the register first
* Allow hidden units to be found when replaying generic
* Allow System.Variants (Delphi-compatible name) to be found when inserting variants unit
* Do not crash when module pointer is nil
(cherry picked from commit e6f71b6accd4949b8dec86fdd93d27e0c109732b)
* second mul might get called with a zero operand if the other has a side effect,
handle this correctly in ti386addnode.second_mul64bit, resolves
gitlab 0040182
+ riscv32-freertos: first version of TlinkerFreeRTOS.GenerateDefaultLinkerScripts
* compilation fixed with -Oodfa
* ensure that a procvar (especially a "REFERENCE TO") begins either with FUNCTION or PROCEDURE
+ added test
* PopCount takes care only of the bit pattern, so take the uvalue to avoid an internal error, resolves
gitlab 0040190
WPO: also consider NewInstance to detect class instancing
Resolves
gitlab 0040200
LLVM: don't use type names in ctor/dtor arrays
Workaround for https://github.com/llvm/llvm-project/issues/56809
LLVM: LLVM 16 support
No changes compared to LLVM 15 that affect us
LLVM: cleaned up some comments
* also initalize default helper variables of initialization sections, resolves
gitlab 0040183
+ support FILEEXISTS(...) in preprocessor expressions, resolves
gitlab 0039527
+ tests
* tscannerfile.readpreproc sets preproc_pattern correctly for quoted strings
Optimize {$DEFINE x := y} and refactor tmacro.buftext.
Report correct error positions inside macros (at least more often).
* write types declared in the interface section with a DW_AT_external tag, should resolve
gitlab 0040210
* revert use of DW_AT_external for types as this is not covered by the dwarf standard
WPO: fix dead code detection, and handle procvars
Extend dead code detection to not only look for the main mangled name, but also
for any aliases before deciding that a routine has been dead-stripped.
Assume objects/classes can also be constructed if the address of one of their
constructors or of the TObject.NewInstance class method has been taken.
Resolves
gitlab 0040204
* patch by Rika: Shorten cutils.compareansistrings, resolves
gitlab 0040213
* patch by Rika: Use Index* for pointer lists, resolves
gitlab 0040218
* do not replace index registers with esp/rsp, resolves
gitlab 0040223
Do not always set DEBUG_AOPTCPU
* wasm32: generate module info by traversing through current_module and its
used_units list recursively. This should fix
gitlab 0040229
* use a TFPList, instead of a dynamic array in twasmnodeutils.InsertObjectInfo.
No functional changes.
* some error messages use nicer symbol names
Add tf_use_psabieh for LLVM for x86_64-iphonesim, aarch64-ios and aarch64-iphonesim targets
* patch by Rika: Fix and possible simplification of SanitiseXMLString, part of
gitlab 0039800
Use systems_darwin set for supported targets for as_clang_llvm_darwin
RP2040 support based on modification by Michael Ring (https://github.com/michael-ring/freepascal).
Specify endianess and abi when calling xtensa linker
Add -EB or -EL paramter to xtensa assembler call (Warning: this requires a patched 2.40 release\!)
* Fixed bug in "JccMovJmpMov2CMovCMov" optimisation where it didn't track registers in references getting changed
Add missing swaping in case of different endianess of stab entry inside TInternalAssembler.WriteStab
Fix for tentryfile.getreal with FPC_SOFT_FPUX80, putreal still needs the same change
Restrict previous change to compilers that do not have 10-byte extended type
Use GetExceptionMask/SetExceptionMask to avoid floating point exception inside FPC_SOFT_FFPUX80 code
* Use correct sizeof to check if entry size is large enough
Only modify softfloat_exception_mask, as this is not handled equally for all CPUs with GetEXceptionMask/SetExceptionMask
Set defdynlinker depending on selected ABI for riscv32 and riscv64
* More efficient if-statement construction in tmoddivnode.simplify
* Code that checks for divisions against -1 is now not inserted if
it's not necessary (e.g. no downsizing)
Restore start section at end of assembler block inside z80 asm reader
* Refactor processorname -> suffix name for clarity of flow
Refactor initialization of binary and processor name for clarity of flow
Refactor check for -PB and -PP for clarity of flow
* Refactor: Rename some variables for clarity
* Refactor: add utility routine to handle command-line changes
* loongarch64 architecture reinstated
Add new test code to verify that tentfile.buf limits are not overpassed
Use clang instead of as for AsBinStr for aarch64-win64 target
* clearified message is mentioned in documentation issue 39349
Add '-b pei_aarch64' option for aarch64-win64 system
Add -Awin64-as option for aarch64 compiler for win64 target
Disable -EB/-EL passing for freertos OS as the corresponding released binutils do not support this option
Try to fix linker script for aarch64-win64
* Add option to allow emitting comments in RTTI info
* Emit comments in RTTI info for classes/interfaces
* Define RTTI directive parameters
+ Implement support for parsing sets in preprocessor directives
* Implement parsing of RTTI directive
* Introduce RTTI options in symbol definition
* Apply RTTI directive status to symbol
* Allow RTTI directive also before uses clauses
* Write extended RTTI info
* Dump extended RTTI info from PPU
* Implement -t options for fpc executable
* Remove some debugging statements
* Refactor processorname -> suffix name for clarity of flow
* Refactor initialization of binary and processor name for clarity of flow
* Rename variables for clarity
* subroutine to simplify command-line handling
* Limited subtarget config file parsing to detect -V
* Specifying multiple -V should not give an error but warn, as for -T or -t
+ introduced [hl]cg.a_label_pascal_goto_target. It is similar to [hl]cg.a_label
and is called by the code generator, when the label generated is the result of
a Pascal label.
+ added wasm32-specific flag tai_label.is_pascal_goto_target
+ added the wasmfuncref directive for procvars. Not actually implemented, just
parsed.
* ppudump compilation fixed
+ handle wasm funcrefs in tgcpu.defToWasmBasic
* added support and simplified the handling of results in create_functype_common for reference types
+ also support funcref parameters in create_functype_common
+ introduced flag is_wasm_externref to tcpupointerdef for wasm32. This is to be
used for declaring WebAssembly externref reference types.
+ magically insert a void externref type in the System unit, called WasmExternRef
+ support externref in defToWasmBasic
+ handle externref parameters in create_functype_common
+ introduced is_wasm_funcref(tdef) helper
+ introduced is_wasm_externref(tdef) helper
+ introduced the is_wasm_reference_type(tdef) helper
Add new substitute_env_variables parameter for DefaultReplacements function (with default true value)
Disable substitution by environment variables in message comment related functions
* the a_ref_null instruction split into two subinstructions - a_ref_null_externref and a_ref_null_funcref
+ enable the reference types extension in llvm-mc via a command line option
* fixed the textual representation of the ref.null instruction for llvm-mc
+ implemented WebAssembly code generator support for funcref and externref data
types, using new register types R_FUNCREFREGISTER and R_EXTERNREFREGISTER
+ WebAssembly internal asm support for the ref.null instruction
+ WebAssembly internal assembler support for the ref.is_null instruction
+ disallow taking the address of WebAssembly externref type
* check for codegenerror in twasmaddrnode.pass_typecheck and exit early, to avoid crashes
+ also check for assigned(left) after calling inherited in twasmaddrnode.pass_typecheck, to avoid another crash
* disallow conversion between regular pointers and WasmExternRef
- removed redundant semicolon
+ support using nil constants for setting values of WebAssembly reference types (funcref and externref)
+ support nil comparison of WebAssembly reference types (externref and funcref)
* disallow WebAssembly reference types to be declared as var, constref or out parameters
* disallow passing WebAssembly reference types as untyped var/constref/const parameters
* fixed bug, introduced in 6ff566350cbc2ecf8615cae6cc6792939a288ec8, due to
missing parenthesis
* fixed another crash, introduced in 6ff566350cbc2ecf8615cae6cc6792939a288ec8
* fixed crash in twasmcallnode.pass_typecheck when there is no procdefinition (for generic methods)
* use tcallparanode.parasym to find the tparavarsym in twasmcallnode.pass_typecheck
+ support WebAssembly reference types as WebAssembly globals
+ support externref and funcref WebAssembly globals in the internal object writer
+ added parser support for the 'suspending' directive
* ppudump compilation fixed
+ initial attempt (not fully working, yet) at implementing WebAssembly suspending externals
* fixed compilation with -Sew
* fixed creating suspended wrappers for functions without parameters
Handle the specific NaN pattern of mips floating-point unit
+ initial implementation of WebAssembly promising exports
* fixed generating wrappers for suspending functions that return something, other than double
+ comments for tsk_wasm_suspending and tsk_wasm_promising
+ comment for the po_wasm_suspending value
+ support 'suspending last' externals as well
+ also allow declaring an external as 'suspending first'
* eo_promising renamed eo_promising_first
* assert that any exported promising function is not synthetic
+ introduced tcpuprocdef.add_promising_export
+ introduced implement_wasm_promising_wrapper
+ added last:boolean parameter to implement_wasm_promising_wrapper
+ added 'last' or 'first' to the internal promising wrapper name
Set defualt riscv32 linux abi to abi_riscv_ipl32
Set defualt riscv32 linux abi to abi_riscv_ipl32
Fix fullcycle compilation error due to -Sew option
Add 'else' branch to 'case' keyword construct
for the setting of ABI in riscv32 assembler call.
Do the same for riscv64 assembler call.
Set default abi for riscv 32/64 embedded
* tcpuprocdef.promising_export_name renamed promising_first_export_name
+ support 'promising last' exports
+ print an error message, in case 'promising' exports are used on non-WebAssembly platform
* ensure that the functions that insert the hidden parameters (function result, open array high parameters, etc.) are idempotent
* revert 430bcac389c29a5ceca7759cfca69454aa31abf9 as with the change that the functions to insert hidden parameters are idempotent this is no longer required and also wrong as uses of the deleted symbols aside from Self and the framepointer would be left dangling
* fix
gitlab 0040221: don't allow a conversion from an anonymous function to a procvar type if compare_defs_ext already rejected them
+ added tests
Added generic WCH32Vx RISC-V processor types using memory size suffixes
Modified low-level startup code for RISCV32 embedded microcontrollers to
allow user code override of reset handlers for non-power-up reset events
as well as enabling user code override handlers for all 255 possible
interrupt vectors.
Separated out the low-level startup memory init into a callable procedure
to allow users that have caught reset events to init memory again if needed.
Signed-off-by: Interferon
* tsk_wasm_suspending renamed tsk_wasm_suspending_first
+ print a proper error message if a suspending external is used on a non-WebAssembly platform
* fixed erroneously duplicated code from previous commit
+ added mutable globals to the target switches section
There is code in the register allocator to restrict register allocation to the
first 16 registers in RISC-V RVE and RVEC modes. However, there was still
code in tcpuparamanager.create_paraloc_info_intern that allowed the allocation
of up to register X17 in RVE and RVEC modes. Modified this function to
take the processor mode into account and restrict it to X0..X15 in RVE and RVEC modes.
Also put conditional code in setjump.inc assembler code to only set the first
16 registers in RVE and RVEC modes.
The entire embedded-riscv32 RTL can now compile successfuly in RVEC mode.
* Split out option parsing in one routine per letter
* Make use of copy() without count when rest of string is needed
* Fix compilation for ARM
+ comments for the new error messages
* bump CurrentPPULongVersion
+ disallow WebAssembly reference types in records, objects and classes
+ added comment for the new error message
+ disallow using sizeof() and bitsizeof() on WebAssembly reference types
- rm commented out debug writeln left over from previous commit
Omit FPC_INIT_FUNC_TABLE generation if no unit initialization is registered for current project.
* for unique type aliases keep track of the original def
* increase PPU version
* a type helper that inherits from another type helper may extend a unique type helper of the parent's extended type (thus allowing to make the type helper of the original type available for the aliased type)
+ added tests
* don't insert anonymous functions into a withsymtable
+ added test
* fix
gitlab 0040142 and
gitlab 0040324: don't alias the function name to the $result variable for anonymous functions unless an explicit result name is provided
+ added tests
* fix
gitlab 0040332: apply patch by Rika to avoid a crash when an overload can't be picked outside of a function (e.g. when using intrinsics inside constants)
+ added test
* in case there hasn't been an error generated with an invalid attribute declaration then print at least "illegal expression" error
+ add a tcallnodeflag value that prohibits the tcallnode.pass_typecheck to return a procvar in case of a call without parameters with a found symbol, but no suitable procdef
* fix
gitlab 0040095: when searching a suitable constructor for the custom attribute don't allow the return of a procvar which can happen in Mac/TP procvar modes (like Delphi)
+ added test
* fix
gitlab 0039447: when checking whether the parameters are valid for pointer arithmetic check the *correct* parameter for being valid pointer-like type (I'd say that this was a copy&paste mistake...)
+ added test
* fixed ppudump for WebAssembly after the JS Promise Integration branch merge
* Generate hidden class to be used for TVirtualInterface (wasm only)
Add -Tlinux for loongarch64 compiler
Introduce -XLL option for link using ld.lld linker
* Restore -aR, lost in refactoring
* Lowercase subtarget file, as done in compiler
git ignore msg2inc binary
Regenerate msgidx.inc and msgtxt.inc files
* change TCachedSearchRec.Attr to longint as TCachedDirectoryEntry.Attr is also a longint, resolves
gitlab 0040343
Switch from functions for the Atomic*-family to intrinsics
* Additional fields/enums for invoke helper
* Mark method for invoke helper
Create invoke helper if requested and reference it in RTTI
Handle unaligned copy in TCGSparcGen.g_concatcopy method
* Handle some options required by android, nasm and darwin assemblers
* Shorter form of copy, remark by Alexey Torgashin
* x86: Fixed bug where OptPass2Jcc CMOV optimisation sometimes
put the wrong-sized register into an operand (fixes i40307)
* x86: Revamped OptPass2Jcc CMOV code to shrink and reuse registers as much as possible
* x86: Fixed bug with BT optimisation where operand
sizes bigger than the register word size caused
incorrect code generation (fixes
gitlab 0040358)
Attempt to get ogcoff to work on CPU with opposite endianness
Add missing TPECoffExpDir variantr of MaybeSwap procedure
Cleanup TLinkerLinux.SetDefaultInfo method in t_linux unit
Add x86_64-openbsd to LLVM supported list
* x86: Fixed bug in TEST/JNE/TEST/JNE optimisation that caused bad code to be generated under -O3
* Improvement to TEST/JNE/TEST/JNE code to be more accurate where register deallocations are concerned
Update errore.msg
Someminor corrections, found when translating to german.
LLVM: only add sret attribute for first parameter on caller side
We already did this when generating the definitions, but not yet
when generating the calls
LLVM: LLVM 17.0 support
No changes in IR (that affect us) since LLVM 16.0
* fix parameter alignment on x86_64 when more than 6 parameters are involved (aka the stack is used)
+ added test
[AVR] Add command line options to selectively remove portions of the RTL startup code.
Fix syntax errors in make fullcycle
Add unit specifiers for tlsdirectory fields: they need to be PUInt from globtype unit
Applied fix for binutils 2.41 for loongarch64 suggested by Jinyang He
https://gitlab.com/MQ-mengqing/source/-/commit/32fa3e9eb1a31fa6c4262623dbe432919f66419c
with modifications reported in comments.
volatile: allow for assignments
* factor out subreg2opsize
default values: store as staticvarsyms in staticsymtable
Previously, they were stored as localvarsyms in either the localsymtable
(for procedures/functions) or as localvarsyms in the staticsymtable (for
init/fini code of units/main programs). The latter was a hack (staticsymtables
normally cannot contain localvarsyms) and caused the temp allocator to also
allocate them as a local in fini code even if the default was only in the init
code.
The new approach ensures at most one copy gets allocated per unit, it doesn't
require explicit initialisation (since staticvarsyms are in bss -> zeroed by
default), gets rid of the localvarsyms in staticsymtables, and as a bonus
solves an issue with inconsistent LLVM debug information for the localvarsym
in init/fini code (since the staticsymtable is shared between the init and
fini code, so was the local, and therefore we generated debug info stating
it was defined in the fini code but within the scope of the init code).
Resolves
gitlab 0040395
default value: fix issue with inlining
Ensure the mangled name is always the same
Resolves
gitlab 0040404
default(): fix webtbf/tw37303 after previous changes
* x86: Fixed bug where incorrect SSE/AVX peephole optimisations were performed under -O3 in some situations.
* Added missing register allocations to SSE/AVX optimisations
default(): fix in generics for non-procvars after 1be741681648
Block added in the wrong place :|
Resolves
gitlab 0040409
read user-defined compiler messages in source codepage
Add main inputfilename for V_Parallel option to allow easier debugging of parallel compilation issues
* fix
gitlab 0040381: also check for hints when parsing the parameters of a routine (including open array parameters) or the result type of a function
+ added tests
* fix
gitlab 0040390: implement support for handling parameter names (including __SELF and __HIGH(
)) that resolve directly to registers
+ added tests
Add globals to implementation _USES clause to prepare move of V_XXX constants to globals unit
Avoid double definition of V_XXX constants by moving them to globals unit
Add new V_Parallel constant
Add -vj option in options unit to set V_Parallel
Add mainsourcefile to all messages when V_Parallel verbosity option is set
Flatten out -vX options in help message to make changes easier
Add -vj option in help message
Regenerate msg*.inc files after adding -vj option description
Compile ālength(string or array) = 0ā as āpointer(string or array) = nilā without further check, unless really required.
Also handle length <> 0, > 0, < 0, >= 0, <= 0, assuming lengths are never negative.
Change V_Parallel so that V_All doesn't contain V_Parallel, only explicit -vj will add main source file information
default parameter values: fix crash
Fix crash when declaring default parameter values while current_procinfo
is not yet valid
resolves
gitlab 0040413
Use PID to generate unique GDB script names
Limit this to cases when -vj or -vJ option is
used to call the compiler, which adds a PID prefix
to all compiler output.
This feature is useful to debug parallel make issues.
Cast properly to avoid range error
LLVM: fix double init/fini of local managed variables accessed from nested functions
resolves
gitlab 0040392
Change loongarch64 default dynamic linker directory according to gcc
* throw an error if instructions which needs an operand size is used with one operand being a reference without size
Rename fields of tspillregsinfo record to avoid having same field names as treginfo record
Try to fix crash in loongarch64 compiler
loongarch64 compiler has a specific routine,
called fixupref that generates some instructions that are
stored into a tasmlist given as an input parameter.
This function returns a boolean,
if the return value is false, the populated list gets
sometimes discarded.
This can lead to a later crash, because the unused
and freed instructions might have been stored
in live and live_end fields of the reginfo record
used inside rgobj unit.
The fix checks if any of the to be discarded instructions
has been stored inside reginfo records,
and resets the field in that case.
The fix might need to be more general,
because other parts of the compiler,
like all optimization code, also remove
instructions...
Fixing trying to consume ID for anonymous switch field
* 3-operand LEA instructions are now expanded if the latency could cause slowdown
* New "fast 3-component LEA hint" and "Icelake" CPU options
+ introduced classes for WebAssembly structured form of instructions
+ added code for converting wasm asmlists to structured lists (i.e. lists, using the new wasm structured instructions classes)
* fixed bug in wasm_convert_to_structured_asmlist
* fixed more bugs in the wasm structured asmlist construction
* set typ of wasm structured instructions to ait_wasm_structured_instruction
+ for debug purposes print wasm structured instructions in the llvm-mc assembler output
* shorten the string for ait_wasm_structured_instruction in taitypestr to fit in string[24]
* constructors made public to avoid warnings
+ added else to case statement, avoid the warning, produce an internal error in this unexpected case
+ added else to case statement to avoid warning
+ added compiler internal error when encountering certain unexpected wasm instructions (indicating improper nesting)
+ more consistency checks for unexpected instructions when converting to wasm structured instruction form
+ also debug print structured try..catch and try..delegate blocks
+ also check for unexpected delegate instructions when converting to wasm structured form
+ fix for the conversion of try..catch blocks to structured form
Add Exception backtrace when compiled with -dDUMP_EXCEPTION_BACKTRACE
* correctly name nested enum type debug symbols, resolves
gitlab 0040462
Attempt to fix tcalext3 big-endian powerpc64 failure
+ introduced map_structured_asmlist
+ introduced twasmstruc_stack
+ added a block stack parameter to TAsmMapFunc
+ added code for creating labels, associated with blocks and converting branch with consts to the corresponding block's label
+ in case of unresolved labels, call resolve_labels_complex, which will eventually implement the stackifier algorithm. Currently, it converts the asmlist to structured.
+ always call resolve_labels_complex, if DEBUG_WASM_GOTO is defined.
+ define DEBUG_WASM_GOTO in ppcwasm32.lpi (but not in the makefiles)
+ added ait_wasm_structured_instruction to the SkipLineInfo set
* moved the code that converts branch numbers to labels in the cpupi unit and call it from resolve_labels_complex
* fixed hang in map_structured_asmlist_inner
* fixed crash in map_structured_asmlist_inner, when the TAsmList parameter is nil
+ convert wasm structured list to flat list
+ added method tai_wasmstruc_if.ConvertToBrIf
+ added support for params and results in tai_wasmstruc_if.ConvertToBrIf
* ARM: Fixed issue where some offsets of ADR assembly instructions
were incorrectly encoded by the internal assembler
+ added and implemented tcpuprocinfo.AllocWasmLocal
* Local var templist renamed localslist. No functional changes.
* moved the preparation of the locals asm list in tcpuprocinfo.postprocess_code to a local subroutine
* moved the insertion of the wasm locals asmlist to a local subroutine
* insert the wasm locals asm list after resolve_labels_complex, since it will (in the future) be able to allocate more locals, in order to resolve the branches and goto
* set the last=true property of the last tai_local in the locals list in the
beginning of insert_localslist, instead of in the end of prepare_locals
+ support mapping of structured instructions also in map_structured_asmlist_inner
* convert if structured instructions to br_if + labels
+ added amfrtDeleteAi, support deleting instructions in map_structured_asmlist_inner
* convert loop..end_loop blocks to flat list + branch instruction
* strip block instructions
+ add the extra allocated locals before inserting the locals list in wasm32 tcpuprocinfo.postprocess_code
* a64: Fixed bug where BIC instructions were treated as having 2 operands rather than 3
* a64: Corrected supported shifter/extender mnemonics for arithmetic/logical instructions
* fix
gitlab 0040451: load the assembly symbol into a separate operand so that an offset already contained in oper isn't discarded + added test
* fix
gitlab 0040410: allow specialization of a procdef also inside exception handlers + added test
* the unit name has already been uppercased for the search, so no need to uppercase it again for the message output
* a64: Renamed OptPostCMP/And to PostPeepholeOptCMP/AND for internal consistency
+ added label resolution via state machine
* fixes to the mangling of the entry and exit code during the state machine label resolution
* fixed branch ordering in resolve_labels_via_state_machine
+ allow jumps to goto targets
* support local.get/set/tee with a const parameter in the wasm internal assembler writer
* temporary workaround for the is_pascal_goto_target check not working properly in a_jmp_always
* fixed a div by zero error, when compiling a wasi-hosted compiler
* fixed the label resolution for asmlists with WebAssembly native exceptions
* arm/a64: New AND/CMP -> TST or ANDS optimisation
* refactor: wasm_convert_to_flat_asmlist and wasm_convert_to_structured_asmlist now accept a single var parameter
* fixed and enabled the is_pascal_goto_target check
* refactored thlcgwasm.a_jmp_always. No functional changes.
* arm/a64: Added new TST post-peephole optimisation to replace previous AND/CMP/B(c) optimisation
+ introduced thlcgobj.a_jmp_always_pascal_goto - same as .a_jmp_always, but generated by a pascal goto statement
* refactored the taicpu_wasm_structured_instruction descendants to use a wstyp enum variable, instead of using the 'is' operator to determine the class type
+ check whether all br instructions, generated by goto point to a pascal goto label
Fix possible overflow in riscv32 compiler
* New "TryRemoveRegAlloc" optimisation utility
* x86: Fixed bug in "LeaLea2Lea 2" optimisation where final offset was calculated incorrectly
Change AVOID_OVERFLOW to avoid warning about inequality being always true
* arm/a64: New "OptPass2TST" routine to catch "TST; B.c; AND -> ANDS; B.c" optimisation
* x86: Fixed inefficiency in the long-range MOV optimisations
* x86: Factored out the MovMov2MovMov 2 optimisation to
catch an inefficiency in the "Deep MOV" optimisations
* Enable function references and anonymous functions in Delphi mode
* Label and align optimisation is now only done in the post-peephole
stage rather than passes 1 and 2.
Change internal linker in cross-endian message.
Change message level from error to warning,
in order to allow to work on full support of
cross-endian internal assemblers and linkers.
* SkipInstr now includes ait_align
* Search config file in same directory as actual compiler binary
+ added methods for writing ints with specific endianess in TObjData
* some fixes for the x86 assembler writer, when running on a big-endian hosted platform
* UpdateUsedRegsAndOptimize improved to clear aligns that don't have
any live labels after them, and to better handle non-jump labels.
+ introduced methods for writing endian-specific integers to TObjSection
* big endian fix in TOmfObjData.writeReloc
* use NtoLE instead of LEtoN in OMF DoRelocationFixup when converting from native to little endian. No functional changes, just better readability.
* write pretty symbol name of a generic is not found during specialization
* x86: CMOV block optimisation overhauled
LLVM: fix currency parameters passed on the stack on x86-64
Resolves
gitlab 0040496
* a64: Node parser now attempts to directly create BIC, ORN and EON instructions
* Fixed internal error number clash (2022102110)
* Avoid access violation, use internalerror instead. See also issue
gitlab 0040502
* Refer to bugreport for internal error 20231102
Check that tai returned by GetNextInstruction is really a taicpu object before using an explicit typecast
Use faster check for type of tai object
Fix handling of ST_LOADMESSAGES token
* fix
gitlab 0040500: do a for-in on a string variable using low(strvar) to high(strvar) so that zero based strings are handled correctly
+ added test
* fix
gitlab 0040504: always provide the global enum symbol for anonymous enum types (e.g. as part of a set)
+ added test
* x86: Additional TEST/CMP optimisations to optimise CMOV blocks
that aren't optimal due to register pressure
* x86: PostPeepholeOptMov attempts to convert mov $0,%reg to
xor %reg,%reg and mov $-1,%reg to or $-1,%reg under
-Os even if the flags are in use by looking ahead.
* Allow to disable 8.3 filename search
Fix for trunk arm STM optimize bug
* check for *-1 multiplications after folding, resolves
gitlab 0040448
* a64: New CSEL block optimisations ported over from x86 CMOV block optimisations
+ added TWasmObjInput class. To be used in the WASM internal linker. Not doing anything, yet.
+ implemented TWasmObjInput.CanReadObjData: checks for WASM header and version
+ started implementing TWasmObjInput.ReadObjData
* Properly zero-terminate ansistring when calling unicode2ascii
+ added TInternalLinkerWasi class (not fully implemented, yet)
+ added TWasmExeOutput class (not implemented, yet)
m68k: initial compiler changes for Human68k (Sharp X68000) support
tabs to spaces cosmetics. no functional change
* patch by lagprogramming: Improvement of function SetCompileModeSwitch, resolves
gitlab 0040525
Add missing token buffer index update for ST_LOADMESSAGES handling
Improve token buffer size checks.
* For settings comparison: call CompareByte only on copy_size.
* For mesgnb: verify that there is enough memory space
in rest of tokenbuf to hold the number of messages.
+ Add a check that tbi is not greater than tokenbufsize.
human68k: this system has internal sysinit
human68k: ppudump typo/build fix
human68k: regenerated Makefiles
human68k: fix xecutable generation
m68k: basic DOS syscall generation for human68k
Call FindUtil for ld or nlmconv utils at linking stage, not before
* arm: Fixed "RegInInstruction" and "RegModifiedByInstruction" not handling the flags properly
AVR optimization LdsMov2Lds
* arm: "OpCmp2OpS" moved to Pass 2 so it doesn't conflict with AND; CMP -> TST optimisation
* arm/a64: "OptPass2AND" and "OptPass2CMP" adapted to remove vestigial CMP and TST instructions
nested procvars: support assignments when switch not active
Support assigning one nested procvar to another even when the nestedprocvars
modeswitch is not active. This can happen when the type was declared in a
different unit that was compiled with this modeswitch, or in internally
generated wrapper code (which uses "pure" objfpc mode)
* a64: SkipAligns calls removed.
* x86: SkipAligns calls removed.
* SkipAligns method removed
* SkipLabels now handles alignment fields correctly
* x86: Safety check, since after calling DoJumpOptimizations, the input may no longer be the same tai
* GetFinalDestination now calls SkipLabels on an alignment field
* x86: Fixed inefficiencies revealed in "TEST/JNE/TEST/JNE"
optimisations after SkipAligns cull.
A variant "TEST/JNE/TEST/JE/@Lbl" optimisation now exists to
accommodate for an intermediate jump optimisation that prevents
the original optimisation from working if performed first.
Move test to end of possible conversion and add check_valid_var boolean variable
Fix usage of GNU assembler for i386-nativent target
m68k: do not generate argument popping for a noreturn call
regenerated msg*.inc files for the compiler after human68k merge
m68k: have the targets in alphabetical order in the help text
Add human68k OS to list of supported OSes for m68k GNU assembler
Improve GNU linker call for m68k-human68k target
+ Add '-b xfile' option
+ Add '-m human68kxfile' option
+ Add $GCSECTIONS and set GCSectionStr for GNU linker
trealconstnode.printnodedata: fix currency values getting written to stdout
* fix output position of deprecated hint for certain cases where it was wrong, resolves
gitlab 0040534
human68k: set default stack size to 16KiB
human68k: more work on getting tinyheap right. still doesn't seem to work, sadly, so still disabled
LLVM: only round currency values when storing them back to memory
Resolves
gitlab 0040550
LLVM: recognise Xcode-15 as LLVM codegen target
LLVM: use llvm.dbg.declare instead of llvm.dbg.addr for variable declarations
Even though it's supposedly deprecated, clang also still uses it and without
the declaration ranges of local variables are sometimes cut off
* Node dumps now output the convention if it's not pocall_default
* do str(...) optimization only in level 3+ mode
m68k: fix the assembler reader to bail out earlier on a failed parsing of a constant expression
+ added ld_int_wasi constant. Register the WASI internal linker.
* enable the WASM internal linker, in case the compiler is compiled with the ENABLE_WASM_INTERNAL_LINKER define
* override and implement TInternalLinkerWasi.InitSysInitUnitName
* set CObjData in the TWasmExeOutput constructor
* override GetCodeSize, GetDataSize and GetBssSize in TInternalLinkerWasi to avoid crash
* write a WebAssembly header in TWasmExeOutput.writeData
* implementation of TInternalLinkerWasi.DefaultLinkScript. Create a script that reads all the object files.
+ added functions for reading the different types of Wasm object sections
+ introduced decode_wasm_basic_type function
+ Wasm internal linker, object reader: implemented parsing of the type section
+ input error message in case the type section size is unexpected/wrong
+ import section duplicate check
+ added const sets for the WebAssembly reference, numeric and vector types
+ WebAssembly object reader: implemented parsing of the import section
+ function section duplicate check
+ read the functions count from the functions section
+ parse the rest of the function section
+ parse the data count section
+ introduced ReadUleb32 to avoid code repetition of the >high(uint32) checks
* use ReadUleb32 in more places
* the ReadUleb, ReadUleb32 and ReadName methods moved to be local functions inside TWasmObjInput.ReadObjData.ReadSection
- removed the TObjectReader parameter from ReadUleb, ReadUleb32 and ReadName
+ added section bounds checking to the read function, used inside TWasmObjInput.ReadObjData.ReadSection
- removed the repeated section bounds check in the section parsing code,
because now all reads go through the read function, which does section bounds
checking on every read
+ added code section duplicate check in wasm object reader
+ read the code entries count from the code section
+ started parsing of custom sections - known custom sections are dispatched to
a specialized parsing function for each of them, while unknown custom sections
(currently the ones, not produced by FPC) produce an error
+ parse and check the version of the 'linking' section
+ parse the linking custom section by splitting it into subsections and call subfunctions (dummy for now) for each subsection
* the 'linking' section is a section, not a subsection. Fix error messages.
* set FReader and InputFileName in the beginning of TWasmObjInput.ReadObjData
+ parse the WASM_SEGMENT_INFO subsection
+ check for duplicated WASM_SEGMENT_INFO subsections
+ added DataSegments dynarray of record, that will store data segment info
+ check for duplicated data sections
+ read the data count from the data section. Set size of the DataSegments
array, if the data count section hasn't been encountered. Compare the count
with the value from the data count section, in case the data count section
has been encountered, and issue an error, if they differ.
* check that the data count section preceeds the data section and report an error otherwise
+ parse the data section in the wasm object reader
+ verify the segment count when parsing the WASM_SEGMENT_INFO subsection
* moved local vars to avoid bug
* moved another local var to avoid bug
* fill the data in the DataSegments array when parsing the WASM_SEGMENT_INFO subsection
+ read the section content in the wasm object reader
+ check for memory index other than 0 in the wasm object reader and report an error, since that is not supported
+ check and report an error if a passive data segment is encountered by the wasm object reader
* attempt to avoid warning, treated as error, causing CI failure
+ symbol table subsection duplicate check
+ implemented parsing of the symbol table in the wasm object reader
+ wasm object reader: store the symbol table in a dynamic array, so it can be processed later
+ check bounds for SymIndex of SYMTAB_DATA symbols
+ create data symbols in the wasm object reader
+ support local binding when reading data symbols in the internal wasm object reader
+ wasm obj reader: store the parsed import data from the import section in local arrays and structures
+ store in the FuncTypes array the func types, parsed in the function section
+ wasm object reader: range check the symbol indices of SYMTAB_FUNCTION entries
+ partially implemented the creation of symbols for SYMTAB_FUNCTION entries
+ include mod name in symbols
* The "Val" intrinsic is now simplified for string constants akin to a
pure function.
* Fixed bug where a call node's intrinsic code
wasn't copied over during "DoGetCopy"
* Fixed bug where the original index of a call
para wasn't copied over during "DoGetCopy"
+ wasm object reader: implemented parsing of the global section
+ fully implemented reading the code section
+ check the code entries count in the wasm object reader
+ wasm object reader: create code sections and symbols
+ parse the export table in the wasm internal object reader
+ add oso_keep flag to the code sections that contain an export
+ create exe sections in the wasi internal linker script
+ auto add oso_data and oso_sparse_data when creating a .bss segment on the wasm target
* set MaxMemPos in the wasm internal linker
+ started implementing the reading of relocation sections in the wasm object reader
+ implemented parsing of the relocation section
+ check for supported relocation types, report an error if an unsupported type is found
+ keep track of section indexes. Save the code and data section indexes.
* disallow (for now) relocations for sections other than the code and data sections
+ store the parsed relocation table in an array
+ find the code and data segment of each relocation
+ create relocation objects for R_WASM_FUNCTION_INDEX_LEB relocations in the wasm object reader
+ create relocation objects for R_WASM_TABLE_INDEX_SLEB relocations in the wasm object reader
+ create relocation objects for R_WASM_TABLE_INDEX_I32 relocations in the wasm object reader
+ create relocation objects for R_WASM_MEMORY_ADDR_LEB relocations in the wasm object reader
+ create relocation objects for R_WASM_MEMORY_ADDR_SLEB relocations in the wasm object reader
+ create relocation objects for R_WASM_MEMORY_ADDR_I32 relocations in the wasm object reader
+ create relocation objects for R_WASM_TYPE_INDEX_LEB relocations in the wasm object reader
+ create relocation objects for R_WASM_FUNCTION_OFFSET_I32 relocations in the wasm object reader
* also keep track of captured def (necessary when functions are captured)
* correctly handle managed function results when converting a global or nested function to a function reference
+ added test
* the adjusted nested function needs to access the parent function for the capturer
* only walk the node tree if there are indeed captured symbols to convert
* ensure that nested functions that are assigned to function pointers are considered as captured as well
* keep track which nested function definition the new method has been converted from
* allow a nested function that calls itself can be converted to a function reference
+ added test
LLVM: enforce line information for invoke instructions
Like with call instructions, when generating debug information LLVM requires
line information for invoke instructions that may be inline
+ Extracted the func list maintenance functionality from the WebAssembly object
writer to a new TWasmFuncTypeTable class. This will allow for it to be reused
in the WebAssembly exe writer as well.
* TWasmFuncTypeTable.AddFuncType renamed .AddOrGetFuncType
Try to compute correct page size for wlib call
- removed TWasmObjData.AddFuncType, instead call directly [F]FuncTypes.AddOrGetFuncType
+ initialize TWasmObjData.FFuncTypes in TWasmObjData's constructor
+ added a TWasmFuncTypeTable instance to TWasmExeOutput
* SymbolTable.ObjSym type changed from TObjSymbol to TWasmObjSymbol
+ WebAssembly object reader: create symbols for imports that have the
WASM_SYM_EXPLICIT_NAME flag set. Save the import module and name info inside
a new field TWasmObjSymbol.LinkingData.
+ implemented TWasmExeOutput.GenerateLibraryImports
+ process the module imports and write them to the map file in TWasmExeOutput.AfterUnusedSectionRemoval
+ store the functype in TWasmObjSymbolLinkingData
+ added TWasmFuncType.ToString implementation
+ also write the functype of imported functions in the linker map file
+ WebAssembly internal linker, exe writer: keep track of exe import functions. Add and fill TWasmObjSymbolLinkingData.ExeFunctionIndex
+ added a section array to the wasm exe writer
* converted some helper methods from TWasmObjOutput to global functions, so they can be reused in the exe writer
+ added and implemented TWasmExeOutput.WriteWasmSection
+ initialize TWasmExeOutput.FWasmSections
* WriteWasmBasicType and WriteWasmResultType converted to global functions to allow reuse in the exe writer
* writing of the type wasm object section extracted to a method TWasmFuncTypeTable.WriteTo, so it can be reused in the exe writer
+ generate and write the Type section in the WebAssembly internal exe writer
+ generate the import section in the wasm exe writer
+ WebAssembly exe writer: write the code section
* set TWasmObjSection.MainFuncSymbol in the wasm object reader
* extracted the import preparation to a separate method TWasmExeOutput.PrepareImports
+ write the type indexes correctly
+ added check for the ExeFunctionIndex inside WriteCodeSegments
+ fill the memory section in the wasm exe writer
+ partial implementation of RELOC_FUNCTION_INDEX_LEB relocations in the wasm internal linker
+ write the import function indexes in the linker map file
+ wasm internal linker: write the functions, defined in the current module in the linker map file
* wasm internal linker: use the main symbol (without WASM_SYM_EXPLICIT_NAME,
i.e. not an alias) to define code section names in the wasm object reader.
For example, the section for the INITHEAP function is now called:
.text.n_SYSTEM_$$_INITHEAP
instead of
.text.n__FPC_InitHeap
(which is based on an explicit alias for the function - '_FPC_InitHeap')
+ report an error in case a wasm object file has a code section, without a main symbol
* only set MainFuncSymbol of code sections to the main (non-alias) symbol
+ wasm internal linker: fill ExeFunctionIndex of alias code symbols as well
* produce an internal error, instead of a warning in case of RELOC_FUNCTION_INDEX_LEB pointing to a function with missing ExeFunctionIndex
* refactor: invert if condition and else statement (reducing the nesting level), because then terminates the function. No functional changes.
+ implemented RELOC_TYPE_INDEX_LEB relocations in the wasm internal linker
* wasm internal linker: start the data section at offset 0, as WebAssembly is a Harvard architecture.
+ webassembly internal linker: create separate exe sections for .rodata and .bss
+ WASI internal linker: implemented GetCodeSize, GetDataSize and GetBssSize.
+ write the data section in the wasm internal linker exe writer
+ implemented R_WASM_MEMORY_ADDR_I32 relocations in the wasm internal linker
+ implement R_WASM_TABLE_INDEX_I32 relocations in the wasm internal linker
+ create the Table and Elem sections in the wasm exe writer
+ implemented R_WASM_MEMORY_ADDR_LEB relocations in the wasm internal linker
+ implemented R_WASM_MEMORY_ADDR_SLEB and R_WASM_TABLE_INDEX_SLEB relocations in the wasm internal linker
* wasm internal linker: produce an error if an R_WASM_SECTION_OFFSET_I32 or an
R_WASM_TAG_INDEX_LEB relocations is encountered - these aren't implemented,
and are not required for 'hello, world', so will be done later.
+ wasm internal object reader: process SYMTAB_GLOBAL import entries
+ wasm internal linker: internally define the '__stack_pointer' global symbol
+ also define non-imported SYMTAB_GLOBAL symbols in the wasm internal object reader
+ create relocations for R_WASM_GLOBAL_INDEX_LEB entires in the wasm object reader
* define the __stack_pointer symbol in a different way, so it doesn't crash during linking
* use SizeInt instead of PtrInt for the stack area size (this both matches the declaration in TypInfo as well as enough on 16-bit targets like i8086)
+ wasm internal obj reader: add globals to a '.wasm_globals' object section
* set the size of AT_WASM_GLOBAL symbols to 1
+ wasm internal linker: put all wasm global symbols in separate sections,
called .wasm_globals.n_XXX. This allows section-based smartlinking to work on
global symbols.
* more clean variable initialization
+ implemented R_WASM_GLOBAL_INDEX_LEB relocations in the wasm internal linker
+ generate the global section in the wasm internal linker exe writer
+ write export section in the wasm internal linker exe writer, only the memory is exported for now
+ wasm internal linker: write the exported functions to the export section in the exe writer
* fixed bug in the application of RELOC_GLOBAL_INDEX_LEB fixups in the wasm internal exe writer
+ allocate stack and set the initial value for the stack pointer in the wasm internal exe writer
* start the data at offset 1024 instead of 0, just like the LLVM linker
* wasm internal linker: start the .text section at mempos 0
* wasm internal exe writer: set mempos for code sections to the offset within
the code section. This does not affect the .wasm binary generation, only the
linker map file.
+ added check for whether R_WASM_TABLE_INDEX_I32 relocations always point to a function symbol in the wasm internal object reader
Fix wrong explicit typecast of srsym variable (caught by -CR option)
Add emulation_opt settings for all four mips CPUs
+ fill the correct minimal number of memory pages required in the wasm internal linker
+ increased the default stack size of the WASI platform from 64 KB to 8 MB (like in i386-linux)
+ read debug sections in the wasm internal object reader
* ignore relocation sections for custom sections for now (will be done later), so that we can proceed with the debug info generation in a later phase
+ wasm object reader: allow other sections to be created before the first code section
+ add the debug sections in the WASI internal linker script file
Add string constant values to stringconstn nodes in parse tree output
LLVM: fix missing line debug info for some invokes in specialised functions
Required when the code can be inlined. Fixes compilation with debug info of
system.messaging.pp
Extended RTTI: optimise fetching VMT index
Extended RTTI: fix use of wrong def for the methods table
Fixes LLVM compilation
* increase PPU version due to Extended RTTI related changes
* for some reason my ppu.pas had a version of 18, instead of 20... so now the correct version m(
Add struct field names to subscriptn nodes in parse tree output
+ write debug sections in the wasm internal exe writer
+ wasm internal object reader: pass a TWasmCustomDebugSectionType parameter to ReadDebugSection
+ wasm internal object reader: also read the '.debug_frame' and '.debug_str' sections
+ wasm internal object reader: record section indices for debug sections. Check for duplicated debug sections.
+ wasm internal object reader: support relocations for debug sections
+ support R_WASM_SECTION_OFFSET_I32 relocations in the wasm internal object reader
* wasm internal object reader: validation of the RelocIndex range moved to a single place - in ReadRelocationSection
* wasm internal object reader: removed the warnings in case of missing symbol (this will now create an internal error, instead)
* refactor: changed the type RelocationTable.RelocType to avoid type casts. No functional changes.
* refactor: changed the type of SymbolTable.SymKind to TWasmSymbolType, to avoid type casts. No functional changes.
+ wasm internal object reader: validate that relocations that should point to a SYMTAB_FUNCTION entry, actually point to such entry
+ wasm internal object reader: added range check to the reader of the SymKind field
+ wasm internal object reader: check that relocations that should point to a SYMTAB_DATA symbol, actually point to such symbol
+ wasm internal object reader: check that R_WASM_GLOBAL_INDEX_LEB point to a SYMTAB_GLOBAL symbol
* wasm internal linker: perform R_WASM_SECTION_OFFSET_I32 relocations
* wasm internal linker: set mempos of debug sections to 0
- wasm internal object reader: removed redundant check for R_WASM_TABLE_INDEX_I32 pointing to a SYMTAB_FUNCTION entry (we now do this check earlier)
+ wasm internal linker: implemented R_WASM_FUNCTION_OFFSET_I32 relocations
+ WASI internal linker: add all object sections, starting with '.bss' to the .bss section
+ WASI internal linker: also add .debug_frame and .debug_str sections to the output binary
+ WASI internal linker: simplify linker script generation for the .text, .rodata, .data and .bss sections via the use of ScriptAddGenericSections
* wasm internal linker: fixed the relocation of imported function symbol aliases
* wasm internal linker: skip the element section when reading object files. This fixes linking with object modules, produced by the external assembler.
+ wasm internal object reader: parse the tag section
+ wasm internal object reader: read tag imports
+ wasm internal object reader: store the tags from the tag section in the TagTypes array
+ wasm internal object reader: bounds check the tag type index against the types table
+ wasm internal object reader: read tags from the export section
+ wasm internal object reader: range check event symbols against the tag index space (imports + tag section)
+ wasm internal object reader: create symbols for SYMTAB_EVENT entries in the symbol table
* wasm internal object reader: validate that R_WASM_TAG_INDEX_LEB relocations point to a SYMTAB_EVENT symbol
* wasm internal object reader: convert R_WASM_TAG_INDEX_LEB relocations to relocation objects
* wasm internal linker: treat exception symbols as AB_COMMON
+ WASI internal linker: added the .wasm_tags exe section to the linker script
* wasm internal object reader: handle tag symbol flags properly (support weak and local symbols)
* wasm internal linker: set mempos of the .wasm_tags (and .wasm_globals) section to 0
+ wasm internal linker: create the tag section (if not empty)
+ wasm internal linker: implemented RELOC_TAG_INDEX_LEB relocations
* wasm internal linker: produce an internal error on unknown relocations
+ enable the WASI internal linker
* fixed internal linker crash if no tags are defined (i.e. no WASM native exceptions used)
LLVM: remove flags used to support older LLVM versions
* search using the real package name instead of the uppercased one so that an as-is cased package will be found as well
* range checking is already performed in pass_typecheck
* ensure that the legacy method table has the correct alignment on platforms that require it (e.g. SPARC64)
* Fix missing escape for dollar sign
+ generate DWARF debug info for WebAssembly locals
do not display the changing assembler note, if the internal and the external assemblers are the same, or there's no internal assembler defined
tabs to spaces cosmetics, no functional change
m68k: add more cases, where TST instructions can beoptimized away, because the previous instruction already sets all the required flags
m68k: refactored the optimizer to avoid direct asml management where possible, and use standard functions instead
* fixed bug that caused 'c in ['a'..'z']' to fail on the WebAssembly target, when code is compiled with {$packset 1}
Avoid range check error in AddNormalStringDef
* Vectors of string constants are now simplified into ordinal constants
Issue internal error in def type is errordef
- removed the ENABLE_WASM_INTERNAL_LINKER define from the .lpi file
- removed the DEBUG_WASM_GOTO define from the .lpi file
* Fixed issue where Val shortcutting would not compile under 32-bit systems
* several issues with the in_val_x optimization fixed
* print the whole symbol name for hint messages
* fixed bug in the handling of WebAssembly goto
+ support for .debug_loc and .debuc_loclist sections
+ added a zero/unitialized/unknown value to TWasmBasicType: wbt_Unknown
+ introduced TWasmValueStack for tracking the state of the WebAssembly stack. Not used, yet, but will be in the future.
Add MaybeSwap for coffsectionrec records (needed for cross-endian compilation)
Also swap word/dword in case of cross-endian compilation
* fix compilation on 32 bit hosts
* last commit was not complete, fixed
Use writeUInt32LE/writeUInt16LE method to write multi-byte integer in importlib method in t_win unit (as all supported CPUs are little endian)
+ added TWasmControlStack and frame. Not used, yet. Will be used in the future
for WebAssembly stack tracking and validation.
* inverted the indices of TWasmValueStack, so that item 0 is top of stack
* fix
gitlab 0040593: don't check for a static method when assigning a methodpointer to a function reference
+ added test
- the setter for tloadnode.procdef is not used, so remove it so that that tloadnode.setprocdef can be extended
* fix
gitlab 0040594: when assigning a nested function to a function reference don't check for the nested procvars parameter, because nested functions can be treated like anonymous functions here
+ added test
* disable OptPass2Test and OptPass2CMP for now as it seems to result in buggy code
* Added field to identify blocknodes that wrap entire subroutines
Fix writing of low qword of floatx80 real type into 10-byte array on big endian systems
* Fix writing of 'comp' type depending on FPC_COMP_IS_INT64 macro.
* Fix writing of floatx80 on systems with gaps due to alignment requirements.
* Add internal_endian field to tppudumpfile class
* Check that this new field is indeed set, once only, by
header flags.
* Use this flag to extract high and low parts of floatx80
record for soft floatx80 support.
Use reverse_byte to write constant sets in cross-endian configuration
Add writeInt8/writeUInt8 methods to fix some cross-endian generation issues
Use writeint8/writeuint8 methods to avoid cross-endian issues
Support cross-endian compilation for telfobjdata.writereloc method
* Fixed issue where OptPass2CMP and OptPass2TEST didn't drop out on labels etc.
* Fix writereloc for cross-endian compilation
* Fixed issue where TryCmpCMovOpts produced bad
code if the last MOV got moved.
* New Boolean "SetAndTest" utility function
* x86: New "STC/CLC; MOV" peephole optimisation
* inserting $result into the symtables should never trigger a duplicate symbol error, resolves
gitlab 0040608
Swap real constant in internal assembler
* x86: New "Jcc; CLC/STC; .Lbl" optimisation
* Fixed internal error 2022041701 number clash (LLVM changed to 2022041730)
* x86: Separated out Jcc; STC/CLC optimisation and added additional peephole optimisations
* x86: Additional STC/CLC; J(N)C deterministic jump optimisation
* x86: STC/CLC optimisations can now handle multiple Jcc instructions
* x86: New "aoc_DoPass2JccOpts" option to catch branch and
STC/CLC optimisations that only manifest in Pass 2
Avoid 'false' warning: Local variable "gap_index" does not seem to be initialized on cycle with -O3 option
* DRY Refactoring: introduce discardppu
* Refactory: remove current_module use from top-level parsing
* Move implementation part to separate routine so we can split tasks later
* Move interface parsing part to separate routine so we can split tasks later
* Split parsing from post-processing, code generation and linking
* Move program/library header parsing to separate routines
* Remove commented variables
* split module creation from parsing start
+ more CPU and FPU flags added
* TWasmControlFrame changed to a record
+ implemented methods in TWasmControlStack: Push, Pop, GetItems, SetItems
+ implemented TWasmValueStack.GetCount
+ implemented TWasmControlStack.GetCount
+ implemented TWasmValidationStacks.PopVal
+ introduced TWasmBasicTypeList
+ introduced TWasmValidationStacks.PopVal(expect)
+ introduced TWasmValidationStacks.PushVals
+ introduced TWasmValidationStacks.PopVals
+ introduced TWasmValidationStacks.PushCtrl
+ introduced TWasmValidationStacks.PopCtrl
+ introduced TWasmValidationStacks.label_types
+ introduced TWasmValidationStacks.Unreachable
* replace/restore_scanner use var in state to make sure the correct scanner is freed
* Make current_scanner a function/procedure to better control lifetime
* use set_current_scanner, add mainscanner
* Remove use of current_module
save/restore state when loading other modules.
+ introduce x86-64 microarchitecture levels for cpu and fpu flags
* Remove freeold from set_current_scanner
* Make tglobalstat a class
* Remove loaded_from in tmodule. The same unit can be loaded from different places
* Split load_ppu for clarity
* Check whether call to deref(impl) is needed during re-resolve (indexes may be -1 if not yet built)
* Introduce task (Single main-level task at the moment, no change in behaviour).
* fixed some issues with the x86-64 instruction versions
* use more of the constants
* fix
gitlab 0040618: apply adjusted patch by ŠŠ²Š³ŠµŠ½ŠøŠ¹ Давин (@jack128a) so that a non-load case expression is loaded into a temp first when converting a single range branch into an if-clause
+ added test
* fix typos in comment, no code changes
* decide more sophisticately if a temp. var is needed for fixing
gitlab 0040618
* extend LeaCallLeaRet2Jmp optimization to work on windows
+ also add x86-64 as cpu type (gcc compatibility)
+ implemented TWasmValidationStacks.Validate for many (but not all, yet) instructions
* x86: Replaced CPU features array with "cpu_x86_64_v1_flags" where possible
* x86: Fixed CPU feature flags for AMD Jaguar and Piledriver
* comment fixed, hint by Maxim Ganetsky
* Introduce state variables, used to construct list of used units
* Return first waiting in usedunitsloaded
* generate init_final table from actual uses clauses
+ implemented support for the local.get, local.set and local.tee instructions in TWasmValidationStacks.Validate
* protect against comparisons of nested types of generics and specializations
* use iscurrentunit only when there isn't a suitable def that the moduleid of the symtables can be compared to
* fix
gitlab 0040621: when checking for visibility of members then always use the genericdefs for specializations for correct scoping
+ added test
* clean up of arrayconstructor_to_set, the stringdef case didn't work for years and is not tested, so it probably is not supposed to be there at all
* complain about turned off support of c style operators only in the parser,
so error recovery is better
* x86-64: Typo fixed in FPU type string array
Avoid wrong typecast by adding check that p1 is an instuction before casting it to taicpu
* Framework for more complex block node simplification
Follow sdas documentation for .ascii limitations by using only printable chars and .byte for others
* New block node optimisation that attempts to
flatten nested blocks (makes labels and later
optimisation more efficient).
+ when calling FPC_THROWFPUEXCEPTION in a sub routine, pi_do_call must be set, fixed for aarch64
+ function needs_check_for_fpu_exceptions to unify fpu exception handling
* Handle finish state separately
* Introduce constwresourcestring - in unicode mode, resource strings are unicode strings, and must be streamed differently
+ set pi_do_call on xtensa as well if we check for fpu exceptions
* cosmetics
* Only perform the block flattening if "forinline" is true or under -O2 and above
+ lazarus project for a loongarch64 compiler
+ set pi_do_call on loongarch64 as well if we check for fpu exceptions
* fix
gitlab 0040634: correctly check visibility for child classes in case of a mixture of specializations and non-specializations
+ added test
* x86: Minor efficiency gains in OptPass1CMP
+ set pi_do_call on RiscV as well if we check for fpu exceptions
* x86: Fixed "Cmp1Jl2Cmp0Jle" and "CmpJe2NegJo" optimisations
being applied incorrectly if another jump follows
* Fix compilation with DEBUG_NODE_XML
* x86: Fixed error in "LeaLea2Lea 1" optimisation
not properly accounting for the first LEA
instruction having a repeated register
+ set pi_do_call on ARM as well if we check for fpu exceptions
* move the checks for strict private and protected into their own nested functions
* use check_strict_private and check_strict_protected in their respective non-strict checks to avoid code duplication
- remove no longer required check as that is now handled by check_strict_private (not to mention that the check had been placed incorrectly anyway...)
* fix
gitlab 0040634 the 2nd: a (strict) protected symbol in a parent class of the owner is supposed to be visible
+ added test
Restrict use of A_MOVE to ufromsize and utosize = OS_INT. (contributed by Jinyang He)
Fix issue
gitlab 0040648
* Fix latex error due to unescaped dollar
* generate specializations only of no error happened so far to prevent further (internal)errors, resolves
gitlab 0040646
Avoid warning about unintialized 'ba' variable
* improve pretty printing of symbols
WPO: handle classes defined in localsymtables
Can happen since the support for anonymous methods
Set ba variable upfront to avoid warning treated as error
+ thlcgobj.location_force_mem now supports LOC_JUMP as well, resolves
gitlab 0040650
* Add Logging of tasks under define
* Properly handle finish state
* allow type = type ... ; syntax only for previously declared types, avoids also internal error for
gitlab 0040566
* fix
gitlab 0040655: apply changes to packrecords, packenum and setalloc using the recordpending*() functions so that they are applied correctly in case of them being used directly after a {$POP}{$PUSH} sequence
+ added test
* Fixed signature of insert_init_final_table
* patch by Rika: Fold repetitive scandir.pas cases, resolves
gitlab 0040660
* don't throw an internalerror in case of an illegal assignment to an open array, resolves
gitlab 0040662
* Force VMT at first position in system.tobject
* ensure that "type SomeName = type reference" is still allowed when function references are disabled
+ added test
Also reset check_valid_var after calling var_para_allowed
Be sure not to add a symbol with empty name as an alias for function return variable
* x86: "StcClcSet(c)2Mov" optimisation now checks to see if the destination register is in use
* fixed fpu_x86_64_v4_flags
+ support a_call_indirect in TWasmValidationStacks.Validate
+ added a second TWasmFuncType parameter to the CALL WebAssembly instruction. It
is not part of the WebAssembly syntax and binary encoding, but it helps
WebAssembly stack tracking and validation.
+ support the CALL instruction in TWasmValidationStacks.Validate
+ introduced TAsmData.RefAsmSymbolByClass - similar to RefAsmSymbol, but allows
to create a subclass of TAsmSymbol even in the case of external symbol.
+ introduced TAsmData.WeakRefAsmSymbolByClass
+ introduced TWasmGlobalAsmSymbol subclass of TAsmSymbol. Use it for all
AT_WASM_GLOBAL symbols. This allows in the future to add extra data to the
TWasmGlobalAsmSymbol, such as the WebAssembly global type, which will aid in
WebAssembly validation and stack tracking.
+ added the WasmBasicType to TWasmGlobalAsmSymbol. This will help WebAssembly
validation and stack tracking.
* Create and correctly typed variable for fieldsym instead of using typecasts
+ support the global.get and global.set instructions in TWasmValidationStacks.Validate
+ support if,block,loop,else,end_if,end_block,end_loop in TWasmValidationStacks.Validate
+ support the BR and BR_IF instructions in TWasmValidationStacks.Validate
* Allow use of attributes on fields and properties in records and classes
+ perform WebAssembly validation, if the compiler is compiled with the
DEBUG_WASM_VALIDATION defined
Take care about endianess in arm eabi attribute section
Take care about endianess in arm instruction binary code generator
Add ogmacho unit loading unless NOOGMACHO macro is defined
* fixed bug in thlcgwasm.a_op_reg_reg_reg_checkoverflow that used to generate
code that fails WebAssembly validation
+ support the native exception instructions in TWasmValidationStacks.Validate
* stack checking is actually 'S'
* arm/a64: Fixed bug where shifter operand was not preserved in AND/CMP -> TST optimisation
* Add codeaddress to extended RTTI for static methods
* Attributes must be assigned only to elements before the first colon
* Flags specific to TVecNode have been moved to their own field
* Clarity over blocknode and VMT flags. nf_usercode_entry doesn't need to be cascaded in "firstpass" as TBlockNode.Simplify already does this
* Flags specific to TAddNode have been moved to their own field
* Flags specific to TModDivNode have been moved to their own field
* Flags specific to TAsmNode have been moved to their own field
* Flags specific to TAssignmentNode have been moved to their own field
* Flags specific to TArrayConstructorNode have been moved to their own field
* Flags specific to TDerefNode have been moved to their own field
* Flags specific to TInlineNode have been moved to their own field
* Reduced the number of expensive calls to "GetUserCode" in DFA
* Atributes for class/record methods
* increase ppu long version as the format changed
* nf_pass1_done, nf_error, nf_processing and nf_do_not_execute
have been moved to a new "transientflags" node field that
isn't stored in PPU files
* patch by Rika: Donāt pretend optinfo^.index can be aword(ā1), resolves
gitlab 0040405
* arm/a64: Bug fix where instructions optimised into "mov r0,r0"
could leave registers undefined in some circumstances
* Indentation and casing changes
* patch by Sergey Larin: Compile dynarr := nil (and, preferably, SetLength(dynarr, 0)) as fpc_dynarray_clear, resolves
gitlab 0040309
* a64: Several secondary peephole optimizations that clean up CSEL instructions
* fix compilation with 3.2.2 rtl
* fix building of llvm compiler after node flag refactoring
Fix post_load_or_compile tppumodule method for SHORT_ON_FILE_HANDLES code by adding from_module parameter
Fixes compilation of text mode IDE for go32v2 target.
Fix compilation with -dEXTDEBUG
Fix compilation with -dDEBUG_DEVIRT
* Initialize firstwaiting, after remark by Pierre
* optimize also -(x+1) and -(1+x) into not(x)
* Handle rename of module during parsing, rebuild hash list. Fixes broken test tb0406.pas
* Fix tgeneric91, need to postpone some additional generic procedures
* x86: CMOVcc/Jcc pairs are now changed to MOV/Jcc if the register is not used if the jump doesn't branch
* x86: Improvement to CMOVcc/Jcc optimisation that attempts to remove temporary registers storing constants
* x86: Additional optimisation in OptPass2MOV to help with sub-optimal MOV/CMP/MOV triplets (and a minor refactor).
* Only consume semicolon after uses clause when units have been connected. Fixes remaining failing tests
* set packenum and setalloc to defined values when changing mode, resolves
gitlab 0040056
* transform -1-x into not(x)
* optimize additions of empty sets away if possible, part of
gitlab 0040384
* x86: New Op/TEST optimisation that rearranges register usage for the most efficient execution
Be sure not to consume semicolon after _USES twice
* Added missing "override" directive for XML node dump routine on TDerefNode
* Adjustment to "(v>=x) and (v<=y)" so it also optimises its inverse: "(vy)"
* Added support for 64-bit min/max intrinsics
* a64: Fixed bug where unsigned min/max inlines used a signed comparison
* x86: Min/max intrinsic support
* x86: Added new OptPass1CMOVcc peephole optimisation routine to dust up min/max code
* i8086: Local variables unused in "second_AndOrXorShiftRot_assign" on i8086 are now not defined on this platform
* overflow check abs(...) for x86
* Min/max intrinsics now simplify deterministic results
* more overflow checking for abs(...)
* overflow checking for ti386inlinenode.second_abs_long
FFix compilation of compiler with -dTest_Double_checksum
* use destination location instead of a temp when constructing sets, resolves
gitlab 0040384
+ optimize s:=s+[e] into include(s,e)
* a64: New B -> RET peephole optimisation
* write correct type name in error message
Ensure register to be eliminated is de-allocated before applying optimization LdsMov2Lds.
* AArch64: avoid false overflow error in case of -2^63+0
* AArch64: overflow checking for abs
* tabs adapted: also abs(longint) must overflow check on 64 bit platforms
* avoid to generate bts/r with memory operand
+ thlcgx86.a_bit_set_reg_reg
* thlcgobj.a_load_regconst_subsetref_intern uses a_bit_set_reg_reg if applicable
Fix generation of i8086 CPU code, as BTR/BTS instructions require at least 386 CPU
* proper fix for 9056ab80257b71fb8bcdf90be2f71e2fbbf912b9
Add $EMUL also for sparc CPU GNU linker call on solaris OS
Add -32/-64 for sparc GNU assembler calls
* use bit_set_reg_reg also to clear single bits in thlcgobj.a_load_regconst_subsetref_intern
* Fix access violation: module can be reset while loading dependent units. Fixes issue
gitlab 0040705
* avoid CMPs with constants outside the range of signed 32 bit values
* fix simplication of max(double,double) with both values being constants
* fix i386 building after fb3c4ff75be75c367f4f4d505563475ef7accdb5
* compilation with -dEXTDEBUG fixed
+ 8086: overflow checking for abs()
+ arm: internal abs()
+ arm: overflow checking for abs(...)
+ generic implementation of abs()
* overflow checking for generic abs()
* fix overflow checking on arm for 64 bit signed numbers
* arm uses generic abs()
* all CPUs use now internal abs() so overflow checking is possible
+ added overflow checking to generic abs()
* i386 uses generic x86 abs(long/int64) code now
* compilation on 64 bit targets fixed
+ abs(long/int64): overflow checking for xtensa implemented
* don't remove align directives before case jump tables (they have the type alt_addr)
+ comment to explain last commit
Fixed missing section for Raspberry Pi Pico
* fix min/max intrinsics on x86_64 for non constant/reference/register locations, resolves
gitlab 0040721
* sparc: overflow support for 64 bit operations
+ avr: overflow checking for abs, together with the other recent abs-related commits, resolves
gitlab 0040694
* another fix for min/max intrinsics on x86_64 for non constant/reference/register locations, resolves
gitlab 0040724
Increase default stack size to 8Mb for i386 and sparc solaris systems
Use correct check for unsigned size in a_op64_{const/reg}_reg_reg_checkoverflow methods
* arm / a64: Extended the AND; CMP -> ANDS family of optimisations to catch BIC as well as AND
* a64: ARMv8.7 through ARMv8.9 have been added as AArch64 CPU types, along with support for the CSSC extension.
* a64: Added DOTPROD and PAUTH support flags to relevant instruction sets (v8.4+ and v8.3+ respectively)
* a64: Added "ABS" and "CTZ" mnemonics (CSSC instructions)
* fix internalerror 200502052 with certain min/max optimizations on x86-64, resolves
gitlab 0040730
+ introduced cgbase.topcg2str and topcmp2str for converting TOpCg and TOpCmp to strings (useful for debug logging, etc)
* second_abs: don't supply a separate 64 bit code path for high level cpu targets
* ensure that left and right have a result type set in tx86addnode.pass_1, resolves
gitlab 0040727
* fix
gitlab 0040708: when creating the sub-arraydefs for comma separated arrays, ensure that the new sub array also has the generic related information set up correctly
+ added test
* check that the corresponding genericdef of the adjusted def is indeed valid
* extend read_anon_type() so that it can take a genericdef as well
* fix
gitlab 0040721: correctly set up the generic defs when parsing fields, especially important when dealing with anonymous fields
+ added tests
* Fix
gitlab 0040716: only add helpers if the type doesn't belong to the current object/class/record hierarchy
+ added test
* fix
gitlab 0040725: pass along whole array constructor to the Insert() so that it's converted with the correct checks
+ added test
+ propagate pointer constants
+ also fold nil nodes when used as pointer constants
* run constant propagation multiple times if needed and if slow optimizations are turned on
+ propagate also widechar/pointer constants
+ fold also constant pointer operations on nil nodes
+ fold also divisons involving pointer constants (those nodes are internally generated only)
- AND and DeepMovOpt optimisations upgraded.
- OR and extension optimisations upgraded.
- Const and ref merge optimisations upgraded.
Fix compilation of i8086/n8086add.pas unit after introduction of get_int_value function
* x86-64: Bug fix where RIP-relative references were made absolute in minmax optimisations by mistake.
* optimize x < length(arr) and x >= length(arr) as proposed in
gitlab 0040292
- 32-to-64-bit zero extension optimisations upgraded.
* x86: New reference support methods to detect modification
- Mov2Nop 5a and Mov2Nop 5b optimisations upgraded.
* x86: CheckMovMov2MovMov2 now sets "Force New Iteration" if it optimises
- MovLea2Add optimisation upgraded.
- MovOp2Op optimisation upgraded.
* optimize x >= length(...) also if the operands are swapped
* x86: Bug fix in OptPass1MOV long-range optimisations where
the wrong register was checked to see if had changed.
* do not limit the number of interfaces per class, resolves
gitlab 0040268
* workaround unsupported -march=...+pauth for some assembler/clang versions
* avoid range check error in TVMTBuilder.intf_optimize_vtbls by early bailing out if a class has no interfaces
* allow swapping of operands for three operand instructions if they are commutative
* i386: Fixed issue where the peephole optimizer entered an infinite loop when building for CPUs older than Pentium II
* disable (type ...), it did never work and there are not test, resolves
gitlab 0040562
* ensure that Insert() of a single element into a dynamic array is typechecked in a way that the user is notified of errors
+ added test
* revert the changes from b0d61558e38f7e9ceb3918dbbaab13bc49496320, as 61397d40ae0c43083844e850d87c60ba74b34d28 fixes it more correctly
* (hopefully) more consistent message when the compiler is stopped during showing the help screen, resolves
gitlab 0039455
* accidently committed debug statement removed
* more debug statments removed
* Calling "internalstatements" now sets the "bnf_strippable" flag on the result
* do_optconstpropagate and do_optdeadstoreelim now set their
"changed" parameter properly and is now an out type.
* Optimisations on calls to said functions
* x86: The ADD/SUB peephole optimisations that combine adjacent operations are now much more careful about the flags
* x86: Arithmetic combination optimisations are now much more careful about the flags being in use
* genlinearlist and genlinearcmplist for case blocks now allocate the flags properly
Force usage of ld.lld for x86_64-openbsd system, because ld.bfd generates invalid executable which SIGSEGV at exit
Do not set USEINLINE macro if DISABLE_INLINE macro is set
* x86: Improved "Test2Bt" peephole optimisation
* Block nodes are now marked as strippable when created from "begin" statements
* Bug fix where copied block nodes didn't inherit the original's flags
* Inc/Dec nodes converted to Add/Sub now remove
the "nf_modify" flag from the destination so
constant propagation works more efficiently.
* Correct location of new error message
* Replace object with record where possible
* Blocks of statements are now pruned (within reason) if a raise, exit, break, continue or goto node is found
* Fix creating thunk class when inherited interfaces are used
* hlgcodegen needed when creating module info (fixes AV)
* remove do_compile, clearer flow when loading ppu/pas files
* Wasm: generator for invoke helper now handles overloaded methods in interfaces
* Emit better error when not able to load auto units
+ store pic references in registers if possible
+ do do_consttovar optimization on i386 as well
* allow sp_generic_dummysym for procsyms even if there are no generic overloads
* fix
gitlab 0040764: declare procsyms of a class/object also as sp_generic_dummysym if a symbol in a parent class has it set so that the parser will treat it as a potential generic
+ added test
m68k-palmos: do not try to write section attributes, they're not really useful, and lead to assembler warnings
+ enable cs_opt_consts on arm as well
+ cs_opt_consts for sparc
* Added new node utility function to search for nodes of a specific type in a node tree
* Node-stripping optimisation in "TBlockNode.simplify" now uses "has_child_of_type" to determine stop point
* "no_exit_statement_in_block" replaced with "not has_child_of_type(..., [exitn])"
* "checkcontinue" replaced with "has_child_of_type(..., [continuen])"
* proper alignment information for constant addresses stored in registers
Make use of CPUX86_HINT_BSX_DEST_UNCHANGED_ON_ZF_1 in Bsf*/Bsr*.
+ cs_opt_consts for sparc64
Simplify constexp.pas and fix certain edge cases.
High(uint64) - 2 - High(uint64) now gives correct ā2.
* arm / a64: Factored out common conditional checks in "OptPass1UXTB",
"OptPass1SXTB", "OptPass1UXTH" and "OptPass1SXTH" to
improve performance.
* arm / a64: New optimisation for removing the number of necessary S/UXTB/H instructions
Do not set default target to system_sparc64_solaris on solaris OS for sparc64 compiler as this target is not yet supported
* throw an error if varargs is used without appropriate calling conventions, resolves
gitlab 0040342
* unified g_concatcopy_move
+ CPUX86_HINT_FAST_SHORT_REP_MOVS
* use FPC_MOVE instead of rep movs if possible, partially fixes
gitlab 0040785
Extend riscv32-freertos functionality for esp32c3
Fix exclusion of ogelf unit using $ifndef NOOGELF
Add -WP option to help for ppcrossrv32
Add insert_init_final_table method
* reorganize Tcgx86.g_concatcopy
Group linker scripts and search paths
Add support for esp-idf v4.4
* handle complexer references in tcg8086.a_loadaddr_ref_cgpara properly
Move .data with fpc specific information to outside normal memory range.
Do not pass esp32c3.rom.newlib-time.ld to the linker, it causes the ROM version of _isatty_r to be linked instead of the newlib library version.
* factor out tcgx86.getcopymode
* x86: Minor change to lineinfo in "MovAdd2Lea" so debugging is more logical
* oc_blue properly named as noted by Don Siders
* Stripped down and refactored TAsmNode XML node dumps
for better platform-specific implementations.
+ CPUX86_HINT_BSX_DEST_UNCHANGED_ON_ZF_1
m68k: also allow TST from before Sxx instructions with explicit .b size to be optimized away
m68k: try to fold two consecutive AND instructions into one. This usually happens when a zero extension is followed by another AND.
m68k-palmos: further fixes to assembly section. also actually use aout, as we have aout binutils for palmos
Initial support for esp32-c6-s2-s3. Support for idf versions 5.0.6 and 5.2.1
+ check for tf_init_final_units_by_calls in trv32nodeutils.insert_init_final_table
+ do do_consttovar on RiscV
* do no generated debug comment in assembler output of RiscV if not requested
* a64: win64 implementation of jump table now
uses 64-bit absolute references.
* x86: Reimplemented TAsmNode XML dumping using new framework
* arm / a64: TAsmNode debugging info is now output for ARM and AArch64
Make idfpath and idf_version macros available as replacement vars in fpc.cfg
Add -Ff to firstpass options
* patch by Marģers: patch to enable ENTER asm instruction
+ test
* patch by Marģers
- Rename 3DNow instruction (fixed long lasting typo in mnemonic). PMULHRWA --> PMULHRW
- Add vpclmullqlqdq, vpclmulhqlqdq, vpclmullqhqdq, vpclmulhqhqdq.
- Fix "typo" for SHA1MSG2
* patch by Marģers to bump version
* correct change information for some instructions where the change
information cannot be modelled in x86ins.dat
* forgotten part of last commit
+ set CPUX86_HINT_BSX_DEST_UNCHANGED_ON_ZF_1 for suitable CPUs
+ more change information
* missing AVX-2 change information fixed
* fix
gitlab 0040563: apply slightly adjusted patch by byte bites to use fixed range of 1..Length(str) for for-in loops iterating over ShortStrings
+ added test
* load 2 on x86 stack by fld1/fadd, if pic code is generated. It is more efficient as two memory accesses are saved.
* fold the MIPS tabitype into tabi as the former wasn't really used or hooked up anyway; this way the ABI can be set using -Ca
* also optimize loading of -1.0
* use fld1/fchs regardless of pic
* allow the COMDAT selection to be 0 in which case we'll simply assume that we don't have a COMDAT section (but we'll nevertheless look up a potentially associative section)
* the COMDAT record contains the section number which is off-by-one to the section index
* move setup of secrec outside of the if-statement as it's the same for both cases
* exact-match COMDAT sections are already supported since tdynamicarray.equal() has been implemented a couple of yours ago, so allow them
* small fix of change information
Remove compiler/msgtxt.inc and compiler/msgidx.inc from tracked file list
Add missing information about -T option for embedded and iphonesim target OS for aarch64 compiler help using -h option
Respect alphabetical order in -T listing for aarch64 compiler
+ more change information
Avoid unnecessary call when length(s) is zero, which avoids range check error
* don't throw an internal error if a procedure is passed to a const formal parameter, resolves
gitlab 0040817
* bail out early in tcgaarch64.make_simple_ref if possible
* Properly reset state when (re)compiling, by Artem Izmaylov. Fixes issue
gitlab 0040825
* (lsighly, added safety check) patch by ŠŠ²Š³ŠµŠ½ŠøŠ¹ Давин, resolves
gitlab 0040784
+ initial compiler support for WebAssembly resources. Requires WebAssembly
support in the fpcres utility, which is not implemented, yet.
* changed the resource object extension for the WASI platform to .or (similar to Linux)
+ WASI internal linker: add the 'fpc.resources' and 'fpc.reshandles' sections as well
+ wasi internal linker: also write the fpc.resources section to the file
+ wasm internal linker optimization: write only the non-empty data sections to
the resulting .wasm file (the 'fpc.resources' section specifically can be
empty, if the binary doesn't use resources)
+ wasm internal linker: count the 'fpc.resources' section towards the binary
data size
+ wasm internal linker: count the 'fpc.reshandles' section towards the bss size
of the binary
* split the sections strings into groups and add comments about the importance
of the section order and grouping. No functional changes.
* wasi internal linker: fixed crashes introduced by previous commit in
GetDataSize and GetBssSize
* fixed another crash in the wasi internal linker, caused by missing resource section
* change information updates
* more change information updates
* Properly release procdefs. Patch by Evgenij Savin, fixes issue
gitlab 0040844
+ add missing instructions
* x86-64: Workaround to permit CPU types in command line with dashes in names (e.g. X86-64-V3)
* ensure register size is set properly by AndSxt2And
+ introduced WebAssembly helper is_atomic_op
* fail with an internal compiler error in case an atomic WebAssembly instruction
is generated, while WebAssembly multithreading is disabled
* TARMAsmOptimizer.USxtOp2Op sets register size if needed
const array - reducing unnecessary data copying
Immediately set the capacity
Immediately set the capacity
* set operand size properly for STX*
Partial revert "Immediately set the capacity"
(capacity assignments of type TFPHashObjectList)
+ started working on a WebAssembly inline assembler reader. Not ready, yet, just
includes a basic tokenizer for now.
* fixed some WebAssembly instruction names in the wasm_op2str array
* Patch by Evgenii Savin to avoid IE 2010021502 when calling generic from other generic. Fixes issue
gitlab 0040770
+ WebAssembly inline assembler instruction parsing work in progress
+ added else clause to silence warning, treated as error in CI
Use IndexQWord_SSE41 directly if -Cp RTL compiled with supports SSE 4.1.
* Do not free used units during reset, they can be in use during load cycle. Fixes issue
gitlab 0040852
+ parse the instructions with integer parameter i32.const and i64.const in twasmreader.HandlePlainInstruction
* changed twasmreader.HandlePlainInstruction to return an instruction
* Need IFDEF, compiler stops "with unreachable code"
+ support the f32.const and f64.const instructions in twasmreader.HandlePlainInstruction
+ recognize the memory access instructions with an optional memarg operand (not
parsed, yet) in twasmreader.HandlePlainInstruction
+ handle the local and global variable instructions with a constant integer
parameter in twasmreader.HandlePlainInstruction
+ insert plain instructions and parse nested instructions in twasmreader.HandleFoldedInstruction
+ call ConcatInstruction for plain instructions in twasmreader.HandleInstruction
* started implementing twasmreader.HandleBlockInstruction
+ actually enable the parsing of WebAssembly inline asm instructions
+ set result.ops in twasmreader.HandlePlainInstruction
+ respect the nostackframe directive in WebAssembly inline asm routines
* don't do anything in postprocess_code for WebAssembly inline asm routines
* don't create block..end_block around WebAssembly inline asm routines
* make warning on unsupported esp-idf version a warning string so it can be translated
* Do not generate RTTI for generic methods (delphi compatible)
* Inherit extended RTTI settings from parent object
* handle adress registers properly in tcg64f68k.a_op64_reg_ref
* write dependent rtti for non-published in case of extended RTTI
* WebAssembly temp gen: introduced localsfirsttemp and localslasttemp, use these
for the locals temps indices, instead of firsttemp and lasttemp, which refer
to the temps on the linear stack
+ support OPR_FLOATCONSTANT in TInstruction.ConcatInstruction
+ allow referencing '$__stack_pointer' in WebAssembly inline asm as argument to
the global.get and global.set instructions. This will be used in the future to
implement the thread start routine in inline asm.
* Do not try to export symbol if an error occurred, avoid internal error. Fixes issue
gitlab 0040858
+ support the call instruction in the WebAssembly inline asm
* fixed the WebAssembly inline asm call instruction with the internal assembler writer
* fixed WebAssembly inline asm parsing bug for the global.get/global.set ID instruction
- removed debug printing from the WebAssembly inline assembler reader
+ support the atomic instructions in the WebAssembly inline asm reader
+ allow referencing TLS_SIZE_SYM, TLS_ALIGN_SYM and TLS_BASE_SYM from WebAssembly inline asm
* Some minor rewordings as per 39349
* x86: Fixed an issue where invalid typecast errors would be raised in the peephole optimizer under -CriotR
* Do not include class and array properties in RTTI
+ riscv32: trv32shlshrnode.second_64bit
+ apply OptPass1OP also to SRL/SLL
* fix commit
+ S*LI x,x,0 to nop optimization
compiles cube.pas example
* better zero extension for Risc-V32
* apply OptPass1OP to more instructions
+ Risc-V 32: optimize QWord(1) shl ...
DynArrays works
because of InitHeap3, malloc3 and free3 functions from the psy-q-sdk
+ Risc-V 32: apply OptPass1OP also on ADD
* Risc-V: use OptPass1OP more
Remap .data with fpc specific information to outside normal memory range.
* factor out TRVCpuAsmOptimizer.OptPass1Add
+ show a message and automatically switch to external linking if WebAssembly multithreading is enabled
* WebAssembly: allow specifying the initial and max memory size via the $M
directive
+ Risc-V 32: tcpuparamanager.get_saved_registers_fpu
* WebAssembly threads: use the stack size, specified for the main thread (via
the $M directive, or the '-Cs' compiler option) as the default stack size for
other spawned threads
+ Risc-V 32: tcpuparamanager.get_saved_registers_int
+ Risc-V: apply OptPass1OP to more operations
+ WASI: enable the generic stack checking
+ Risc-V 64: tcpuparamanager.get_saved_registers_int and tcpuparamanager.get_saved_registers_fpu
* Risc-V 32 has also a GC variant
+ enable WebAssembly threads with the internal linker (which still doesn't work
with threads) if FPC is compiled with the FPC_WASM_THREADS_INTERNAL_LINKER
define
+ enable FPC_WASM_THREADS_INTERNAL_LINKER (not stable, yet) in ppcwasm32.lpi
* WebAssembly threads internal linker: fix validation of R_WASM_GLOBAL_INDEX_LEB relocations in modules that support threads
* WebAssembly threads internal linker: declare the __tls_base, __tls_size and
__tls_align symbols in the internal linker script if threads are enabled
* WebAssembly threads internal linker: declare the symbol __wasm_init_tls in the
.text section (function will be generated later by the linker)
* WebAssembly threads internal linker: add the .tbss section to the linker
script in case threads are enabled
+ WebAssembly threads internal linker: create the __wasm_init_tls symbol's
special WebAssembly properties, such as FuncType
+ WebAssembly threads internal linker: debug print threadvar relocations,
instead of stopping with an internal error
* WebAssembly threads internal linker: mark the __tls_base, __tls_size and __tls_align symbols as WebAssembly globals
* WebAssembly threads internal linker: import WASM_SYM_TLS symbols as AT_TLS, instead of AT_DATA
* improve Risv-V optimizer
* WebAssembly threads internal linker: set MemPos for data sections correctly
when threads are enabled (take into account that the first data section with
threads enabled is .tbss, instead of .rodata)
+ WebAssembly threads internal linker: create a global symbol for all AT_TLS data symbols
* WebAssembly threads internal linker: set objsection properly for global
symbols, created for AT_TLS entries
* WebAssembly threads internal linker: create double relocation entries for
AT_TLS entries: one points to the AT_TLS entry (the data segment), the other
points to the WebAssembly global, holding that address. This causes the
smartlinking optimization to keep both the AT_TLS entry in the data segment,
as well as the WebAssembly global.
* WebAssembly threads internal linker: ignore RELOC_GLOBAL_INDEX_LEB
relocations, pointing to AT_TLS entries, because the actual relocation is done
by another relocation, overlaid on top of this one, pointing to a WebAssembly
global. The reason we use two relocations, is to cause the smartlinker to keep
both the AT_TLS symbol, thus reserving data space in linear memory for the
threadvar, as well as the WebAssembly global variable, used for holding the
address of the threadvar.
+ WebAssembly threads internal linker: introduced TWasmExeOutput.GenerateCode_InitTls (not ready, yet, just writes some dummy data)
* WebAssembly threads internal linker: set the global type of threadvar globals to wbt_i32
* WebAssembly threads internal linker: set MainFuncSymbol of the section of threadvar globals
* WebAssembly threads internal linker: starting working on TWasmExeOutput.SetThreadVarGlobalsInitValues
* WebAssembly threads: don't do anything in TWasmExeOutput.SetThreadVarGlobalsInitValues
and TWasmExeOutput.GenerateCode_InitTls if threads are disabled
* WebAssembly threads internal linker: introduced TWasmObjSymbol.TlsDataSym
* WebAssembly threads internal linker: set initial values for threadvar globals
* WebAssembly threads internal linker: implemented the actual code generation in TWasmExeOutput.GenerateCode_InitTls
* WebAssembly threads internal linker: set threadvar globals as mutable
* WebAssembly threads internal linker: set initial values for __tls_size, __tls_align and __tls_base
* WebAssembly threads internal linker: use imported and shared memory if multithreading is enabled
* WebAssembly threads internal linker: create a startup function for
initializing shared memory (dummy for now)
+ WebAssembly threads internal linker: partial implementation of TWasmExeOutput.GenerateCode_InitSharedMemory
* WebAssembly threads internal linker: generate passive data segments, when multithreading is on
* WebAssembly internal linker: moved the DataSections const array from local to
the method writeData to local to the class. No functional changes.
* WebAssembly threads internal linker: implement memory initialization in TWasmExeOutput.GenerateCode_InitSharedMemory
* WebAssembly threads internal linker: generate data.drop instructions in
TWasmExeOutput.GenerateCode_InitSharedMemory. This drops the passive memory
segments, after the memory has been initialized.
* WebAssembly threads internal linker: use WriteUleb instead of WriteUleb5 in
TWasmExeOutput.GenerateCode_InitTls and TWasmExeOutput.GenerateCode_InitSharedMemory.
This generates equivalent, but shorter code.
* WebAssembly threads internal linker: micro optimization in
TWasmExeOutput.GenerateCode_InitTls - skip generating instructions that add
zero
* WebAssembly threads internal linker: use signed LEB when needed in TWasmExeOutput.GenerateCode_InitTls and TWasmExeOutput.GenerateCode_InitSharedMemory
+ enable the WebAssembly internal linker with multithreading
* WebAssembly internal linker: add the .tbss section size to the result of GetBssSize
* WebAssembly internal linker: reduced exe section alignment to 16 bytes
+ Risc-V: instructions of B extension
+ Risc-V: make use of zext.h if available
+ WebAssembly internal linker: take into account the min heap size (specified
with the $M directive), when determining FMinMemoryPages
* WebAssembly internal linker: the PageSize constant, which was repeated twice,
moved to the class level and renamed WasmPageSize. No functional changes.
* Risc-V: make use of sext.h instruction if available
Fix compilation with -dDEBUG_PPU
Rename conditional: INTFPPU => DEBUG_GENERATE_INTERFACE_PPU
* corrected alignment for Risc-V on Linux
* FCVT.W.D returns only a 32 bit int
* get rid of WebAssembly constant DefaultMaxMemoryForThreads, because it was
repeated twice. Instead, set maxheapsize correctly with the default value in
init_parser.
* increased the default max memory for WebAssembly threads to 256 MiB
* WebAssembly threads default maxheapsize constant changed to more readable form - 256*1024*1024 instead of 268435456
* generic second_addordinal can handle swapped nodes
* WebAssembly internal linker: allow specifying the max memory size also for
binaries that don't use threads and shared memory. Unlike the shared memory
case, in this case the max memory limit is optional.
+ introduced method tscannerfile.readval64, similar to readval, but returns an int64
+ WebAssembly: allow specifying heapsize and maxheapsize larger than 2GiB
(WebAssembly has a 32-bit address space, so there's still a 4GiB limit)
* ignore the '-gl' parameter on WebAssembly, since it's impossible to implement
this feature on this target. WebAssembly is a Harvard architecture and allows
no way for inspecting code addresses in stack traces from within the program
itself. Maybe a future extension to the WebAssembly spec would allow that, but
currently, it's not possible. The '-gl' option is ignored (producing only a
warning, instead of a fatal error), because not having line info should not be
fatal for most programs. It also reduces the number of test failures, since
many tests compile with '-gl', but don't actually require the line info, it's
just there for debugging purposes.
* throw an error in iso/extended pascal mode if enum types are passed to writeln, resolves
gitlab 0040896
* fix bug in thlcgwasm.a_op_reg_reg_reg_checkoverflow when either src1 or src2
is the same as dst
* WebAssembly: fixed overflow checking for unsigned subtraction
* WebAssembly: changed the generated code in a_op_reg_reg_reg_checkoverflow to
avoid using a label
+ WebAssembly: check for exceptions after call of fpc_rangeerror in branchful
exceptions mode. This fixes catching of ERangeError exceptions when using
SysUtils and runtime errors are converted to exceptions.
- disallow enabling regvars for WebAssembly, because it's not supported, yet
* WebAssembly: fixed crash when attempting to generate a functype directive for
a generic function
* estimate complexity of ordconst node better on RiscV
+ AArch64: apply OptPass1FData also to FCSEL
* armv7 should a synonyme for arm7a
+ apply OptPass1FData on FRINT*
Remove the rest of the VER3_0 conditionals.
Exclude AW flags for sec_fpc data for embedded and freertos targets.
+ WebAssembly external asm writer: workaround for the 'missing functype' error,
produced by LLVM-MC versions 13 and above
+ pass '--no-type-check' to llvm-mc-13, because its type checking is broken
+ add explicit support for LLVM-MC versions 15..18
* WebAssembly code generator: don't emit a return instruction at the end of the
function, because it's redundant
+ disable the WebAssembly type checker for all LLVM-MC versions since version 13
+ emit a size directive for the internal dynarray const label. This fixes
WebAssembly dynarray consts with the llvm-mc external asm.
- don't generate .size directives for function symbols on WebAssembly, to avoid
warnings from the external assembler
+ indicate which LLVM-MC versions are broken in the compiler help screen
- WebAssembly internal object writer is no longer experimental
* WebAssembly wabt assembler id as_wasm32_wabt renamed as_wasm32_wasa
* WebAssembly WABT assembler ID changed to WASA
* as_wasm_wabt_info renamed as_wasm_wasa_info
* TWabtTextAssembler class renamed TWasaTextAssembler
* unit agwat renamed agwasa
* renamed the wabt assembler to wasa in the compiler help screen as well
+ added an optional nil pointer checking for WebAssembly (similar to
PowerPC-AIX), that can be activated via the -CN option
+ added -CN to the help screen of the WebAssembly compiler as well
+ added several missing targets to the help screen for the -P compiler option
* WebAssembly internal object writer: generate the symbol table after the
section numbers have been calculated. This is preparation for exporting
symbols from debug sections, which will be implemented in the future. No
functional changes.
+ WebAssembly object writer: record the custom section index for debug sections
in a new field TWasmObjSection.CustomSectionIdx
+ WebAssembly internal assembler and linker: support exporting symbols from
debug sections, via a FPC-specific extension. Unfortunately, this is not
supported by the LLVM external assembler and linker.
* fix warning (second attempt :) )
* Added missing i386-win32 target selection
* More efficient condition checks for "tnodeutils.has_init_list"
"tnodeutils.has_init_list" is now static
* generate debuginfo for WebAssembly threadvars like for normal vars, when
WebAssembly threads are turned off
+ WebAssembly DWARF debug info: generate DW_AT_frame_base entries for functions
+ WebAssembly internal linker: support data relocations to threadvars, resolve
them as relative values to the beginning of the TLS section. Will be used for
generating debug info for threadvars.
+ support writing R_WASM_GLOBAL_INDEX_I32 relocations in the WebAssembly internal object writer
+ generate proper reference to the TLS_BASE_SYM global in the WebAssembly debug info for threadvars
+ WebAssembly internal linker: support the R_WASM_GLOBAL_INDEX_I32 relocation,
used for threadvar debug info, among another possible uses.
+ more relocation types added to the enum TWasmRelocationType
* create a TWasmGlobalAsmSymbol instead of TAsmSymbol when generating debug info
for thread vars. This fixes a memory corruption error, when later the compiler
tries to access the extra fields in TWasmGlobalAsmSymbol for the '__tls_base'
symbol.
* fixed blocksize when generating debug info for WebAssembly threadvars
* fix the final entry size in the .debug_aranges table on platforms where the
ALU size differs from the address size (such as WebAssembly 32-bit)
* set procalign and loopalign to 0 for WebAssembly - code alignment is unnecessary, as this is a VM.
* WebAssembly internal object writer: fixed helper function SlebSize()
+ WebAssembly internal object writer: added safety check for catching bugs,
caused by instruction size changes between Pass1 and Pass2
* fix generation of addend for R_WASM_FUNCTION_OFFSET_I32 relocations. This
improves code address accuracy for WebAssembly debug line info information.
* WebAssembly: generate the final bashB opcode of a function via the
end_function instruction, instead of adding it magically in the object writer.
This makes the WebAssembly debug line info more accurate, covering the
end_function instruction as well.
Set DynamicLinker for FreeBSD systems
* use also an FNV hash to shorten interface wrapper names
* use proper value for Fnv64 initialization
* PPU version increased
+ AVR: dummy thlcgcpu.g_intf_wrapper implementation
- WebAssembly: removed tai_local.name, because we don't use it
* WebAssembly: refactored tai_local, so that it is a single directive,
containing multiple locals, instead of creating multiple tai_local directives,
each containing a single local. No functional changes.
* TWasmObjData.DeclareLocal renamed DeclareLocals. No functional changes.
+ WebAssembly: insert a tai_local directive also for assembler functions
* WebAssembly internal assembler writer: generate the function locals header
when assembling the tai_local directive, instead of injecting them manually in
TWasmObjOutput.WriteFunctionCode. This makes function code offsets correct
and avoids the need to manually adjust relocation fixups by adding the locals
header size. It also fixes relative relocations, used in DWARF debug line
info.
+ introduced LINE_RANGE constant in the DWARF debug info generation unit
WebAssembly debug info: use different LINE_BASE and LINE_RANGE on WebAssembly to
improve compatibility with WasmTime's debugger support
* WebAssembly internal linker: don't remove unused code sections if smartlinking
is turned off. This is needed for debugging, because FPC doesn't support debug
info with smartlinking on most platforms, and that includes WebAssembly.
* WebAssembly internal linker: also don't remove unused data sections if
smartlinking is turned off.
* WebAssembly debug info: make wasmtime happy by not emitting line info end
sequences for procedures that lack any debug lines emitted previously
* make UpdateFnv64 closer to the original algorithm as proposed by Gareth
Handle cross-endian case inside TCoffObjData.writereloc method
* revert check for boolean type when handling LOC_FLAG in tcgassignmentnode.pass_generate_code. This makes pas boolean the default,
resolves
gitlab 0040908
+ WebAssembly internal linker: create a name custom section to help debugging
- WebAssembly code generator: removed the g_fingerprint hack, that added 4
useless i64 constants on the stack with random numbers and then drop them. It
was used for primitive debugging, since previously it wasn't possible to
identify the function name. Now we can produce DWARF debug info, as well as a
"names" custom section to give each function a name and most WebAssembly
environments support at least one of the two mechanisms. Therefore the
g_fingerprint hack is no longer necessary.
Handle floatx80 records with gaps also in InternalAssembler
* handle except blocks as normal code block with regard to specialization of generics, resolves
gitlab 0040890
+ added extra values to TWasmNameSubsectionType from the extended name section
proposal and the gc proposal
+ introduced private type TCustomSectionNameMapEntry to class TWasmExeOutput
+ introduced private type TCustomSectionNameMap to class TWasmExeOutput
+ introduced method TWasmExeOutput.AddToNameMap
+ introduced method TWasmExeOutput.AddToGlobalNameMap
+ introduced local method WriteNameMap for writing name maps in the WebAssembly name custom section
+ WebAssembly interal linker: add global names to the name custom section
* WebAssembly internal linker: add the data segment names to the name section
* properly unlink unused type symbols from their defs to avoid
internal errors when generating debug info, resolves
gitlab 0040886
+ add tag names to the WebAssembly name section
* WebAssembly internal linker: refactor writing the name custom section - group
generating subsection data with the actual writing of the subsection data
* WebAssembly internal linker: only generate the tag name subsection if there
are any tags in the module
- removed obsolete define FPC_WASM_THREADS_INTERNAL_LINKER from ppcwasm32.lpi
+ add optimizer units (empty for now) for the WebAssembly target
+ include unit aoptcpu in wasm32/cputarg.pas
* RiscV64: better code generation to clear upper 32 bit of a register
Fix 2nd compilation in Textmode IDE
if not ps1 setup FPU defines
resolveReadAfterWrite moved to aasmcpu.pas
* RiscV: fix AndiAndi2Andi optimization
+ RiscV: AndiAddwi02Andi optimization
if taicpu(p).opcode in [....] beautiy fix
thx god You seen it! (reverse)
hlcgcpu.pas: uses unit systems + t_ps1.pas: correct Message3
check if next instruction exists
* fix RiscV32 compilation
* RiscV64: don't use addiw for OS_32 to OS_32 type conversions obviously
case statiment insteed of ifs
set_source_info behind defines
Fix display of 80bit floats in cross-endian case
psy-q-sdk lib duplicate named *.o files excluded from link
* FSRM works only with movsb
* fix alphabetical sorting of targets in comment
* MIPS code generator: don't put floating point results in FPU registers for
function results, if the SoftFPU is enabled
* MIPS code gen: don't use FPU registers for function parameters in case SoftFPU
is enabled
+ added fpu_libgcc to MIPS
+ define cpufpemu for MIPS in order to enable (optionally) FPU emulation
+ enable SoftFPU by default for the PS1 target
* MIPS: don't generate FPU code for abs(real), sqr(real) and sqrt(real) in case
FPU emulation is enabled
* MIPS: don't generate FPU code for int to real conversion when FPU emulation is enabled
+ RiscV: Addi0Op2Op optimization
Add -msoft-float or -mhard-float option to GNU assembler calls
* RiscV: extend Addi0Op2Op
* Addi0Op2Op has to consider both operands
switch all optimizations off
link all the sdk bindings .o files
removed InitSysInitUnitName
optimizecputype back to cpu_mips1
+ first batch of instructions added for Addi0Op2Op
Fixing bug where in const init no typecheck for symbol was performed
* improve RiscV assembler optimizer
Rename function to reset_all_default_types
* reduced the default stack size for PS1 to 256KB
+ PS1: initialize StackLength and StackBottom
+ PS1: allow creating a linker map file with the -Xm option
+ PS1: show linking message
+ RiscV: FOp.sFsgnj.s02FOp.s optimization
* generalize FOpFsgnj02FOp optimization
* PS1 target name in help screen changed to PlayStation 1
* apply OptPass1FOP to more opcodes
* do not generate lea with 16 bit references on x86-64, resolves
gitlab 0040936
* accidentally committed with a set debug define
* partial fix
gitlab 0040934: don't remove the DEF file if cs_link_deffile is set (thus if the user explicitly wants the file)
* partial fix
gitlab 0040934: enable def file generation if only -D is provided as argument (as the help suggests and which also makes sense if -Dd is not set as then a default description is used)
* add procsyms from exports also to deffile if user explicitly asked for one
* ensure that Default() symbols that use management operators are properly initalized/finalized
+ added test
Adding for-in loop iteration over slices
* extend use of OptPass1FOP
* load 64 bit constants through a register into memory to avoid store-forwarding stalls, resolves
gitlab 0040945
* apply OptPass1FOP to FCVT.*.*
* Generate correct type name for procedural type arguments in thunk class
* patch by lag programming: Code cleanup at function TAOptBase.RegInInstruction, resolves
gitlab 0040952
* ignore the -gl parameter (and print a warning) on the embedded targets
Force shortcut boolean evaluation when rewriting length(Windows widestring) = 0.
* fix
gitlab 0040259: global managed records with Initialize operator need to be initialized no matter if they are referenced in the current unit or not.
+ added test
* MIPS64: make use of DMTC1 instruction
+ enable strength reduction for -O3, probably an oversight for years that it was not included in -O3
* do not set the addr taken flag for nodes to passed to const/var/out parameters, if
the code of the callee is known and within the callee no address of the parameters
is taken
+ print all sub nodes of call nodes
* properly process all child nodes of call nodes in foreachnode, resolves
gitlab 0040957
+ add printing of all fields of tcallnode in TCallNode.XMLPrintNodeData as well
* mark symbols used in conditional compiling expressions using sizeof, resolves
gitlab 0040955
+ more fixes to mark symbols used by preprocessor expressions properly
+ made MarkSymbolAsUsed more fail safe
+ tests
Remove unneeded, and possibly wrong typecast to fix cycle with -CR option
* patch by lag programming to replace bitcnt by popcnt, resolves
gitlab 0040962
* set ra_addr_taken for addr. param only if really needed
* get rid of the hack that tlabelnode inherits from tunarynode and stores a statement in left, resolves
gitlab 0040964
* compilation fixed
* cosmetics: trailing spaces removed
Use TFPList.FreeAndNilDisposing in four more places.
Align htypechk.pas:is_better_candidate to the left edge of the screen.
* properly reject function calls as target of absolute, resolves
gitlab 0040977
* better error message on invalid expressions for absolute
Fixing a bug where an empty postfix for enum was allowed
Implementing `TImplementedInterface.getcopy` to allow copying of interfaced objectcs
It's probably not fully correct(see comment about procdef copy) but
seems good enough ĀÆ\_(ć)_/ĀÆ
* do not eat the semicolon after an absolute expression to a symbol, noted in
gitlab 0040978
Adding support for indexed properties in extended RTTI
+ added a missing 'br 1' instruction in the code, generated by
GenerateCode_InitSharedMemory. This should fix the loading error in browsers,
when using multithreading.
* generate fmrx instruction only if the cpu has the vfp extension, resolves
gitlab 0040985
Postponing building of VMT until inheritance chain is specialized
This commit does 3 changes:
1. Introduce new option `oo_inherits_not_specialized` indicating if
somewhere in the inheritance chain of an object there is a non
specialized generic parameter
2. Avoid building the VMT for an object which has a generic parameter in
the inheritance chain (fixes
gitlab 0040983)
3. When no vmt is build `insert_struct_hidden_paras` usually called as
part of `build_vmt` will be called seperately to add missing
parameters
Use āset of (op_unary, op_binary)ā to check for supported operator overloads.
* avoid code duplication :)
Remove conditionals that rely on not defined(FPC_HAS_CPSTRING).
Remove unused cutils functions.
* fix
gitlab 0040993: "inherit" the default RTTI options of a non-System unit from TObject as that picks up whatever had been declared in the System unit
* Attributes for methods. Fixes issue 41001
* fix
gitlab 0039407: multi variable initialization is not allowed in any mode, so don't say it's only not allowed in Delphi mode
* pass all const record parameters on aarch64-win64 as references due to the habit of passing records as pointers by using the const modifier in the Windows unit
* fix encoding of ash_savereg and ash_savereg_x
* on aarch64-win64 do the assignment of the exception frame pointer only after the SEH prologue has been done as there is no SEH directive for assigning a register to FP
* on aarch64-win64 we need to restore the stack by first increasing the stackpointer and then restoring FP to match the code from the prologue
* patch by Rika to fix position reporting in macro redefintions, resolves
gitlab 0040082
* don't generate pdata and xdata if there is neither a relevant prologue nor a handler
* when removing the STP FP,LR and MOV FP,SP instructions, also remove the corresponding SEH directives if available
clearing the bss section on startup
this allows smart linking
* Fixed bug in "node_complexity" where a TLabelNode was put through an invalid typecast.
* don't restore SP if we hadn't stored it originally
* also restore SP on aarch64-win64 if registers had been stored
* fix encoding for save_freg_x
* Avoid calling copy operator when moving data from temporary objects
When a function returns a managed record, a new temporary object is
created for the result, which is then copied to the real destination.
For managed records with a deep copy implementation, this can create
immense overhead. So instead this introduces a move, which basically
consists of
```pascal
procedure Move(var src, dst);
begin
Finalize(dst); // Finalize existing data
Move(src,dst,sizeof(dst)); // Shallow copy
Initialize(src); // Clear source
```
* nld.pas: use MOVE when assigning the function result from the
temporary return object
* rtl/inc/systemh.pas: Adding new macro to mark new RTTI version with MOVE
operation
* rtl/inc/compproc.inc, rtl/inc/rtti.inc: Adding new move mechanism when
indicated by the compiler.
+ RiscV64: apply OptPass1OP also to addiw
Adding static properties to extended RTTI
* don't mess with boolean and/or operations in mixed short/full evaluated expressions, resolves
gitlab 0041012
Specialized fpc_copy_with_move_semantics for destructive copies.
+ more RiscV extensions
* make use of F and D extension flags
Update errore.msg
typo fix and correct position of 11068
Update errord*.msg
new messages and other changes in errore.msg have been translated or ported to the German message files.
* RiscV: more reliable use_fma
* correctly calculate the number of labels of a c boolean in case statemnts, resolves
gitlab 0041025
* adjust comments to better match the situation with aarch64-win64 added to the mix
* ensure that the section with the case-labels is 8-Byte aligned
* on aarch64-win64 the case-labels are a list of 8-Byte aligned 8āByte values, so adjust the alignment to avoid 2 32-bit loads
* use a static data label for the case-label table on aarch64-win64 to avoid the linker discarding it
* revert for loops also if the upper limit is non-constant
* Add missing methods to thunk class for parent interfaces without RTTI
* Allow to parse internal symbol names generated for generics.
* properly take care of tempinitcode when calculating def./use. sums of tempcreate nodes
* avoid that types of limits of reverted loops are widened
* less strict condition when a loop decrement can be moved to the end of a loop to increase code quality
* better code for ... downto 1 for-loops
Allow to use ld64.lld if -XLL option is used
* don't see illegal calling conventions for procedure variables, resolves
gitlab 0041041
* draft of improving Addi0Op2Op
cmpxchg16b instruction uses no size suffix in ATT syntax
+ zen5 architecture for completeness
* inline nodes can specify whether their result needs to be used
+ add support for Delphi-compatible atomic intrinsics
* set types of start value calculation correctly when doing strength reduction, resolves
gitlab 0041054
* fix
gitlab 0041062: correctly handle atomic intrinsics inside generics
+ added test
* ensure that any Boolean type can be used for the Succeeded parameter and that there are no unitialized warnings
+ added test
* apply Addi0Op2Op to more operations
* skeleton to unify the RiscV paramgr
* first routines unified
* more RiscV paramgr unification
* Correctly handle missing extensions for dotted include file names. Fixes issue
gitlab 0041064
* more RiscV paramgr unification
* continued unification of RiscV paramgr
* major parts of the RiscV paramgr unified, improves code generation and less failures in RiscV32 regression tests
* partly revert 8cd6606970c8fedda95a3411d684dbd57379b46d, resolves
gitlab 0041052
(cherry picked from commit 854d4e6f4a5b53040160f8921d0089167f6b00be)
* formatting
+ test for issue
gitlab 0041066 which was already resolved previously
* fpu type must be fpu_soft if the cpu is rv32ima
* RiscV: emit an error if fpu_fd is used on a cpu without f and d extensions
* RiscV: floating point registers are saved only for hard float ABIs
+ RiscV: vector registers
Do not add abi-call0 to linker options for esp8266
+ write .option pic directive if needed
* make use of LA pseudo-instruction
+ apply OptPass1OP to LA as well
* fix
gitlab 0041072: proc_to_procvar_equal_internal() might be passed a procvar in case of "procvar := @
", reject that as incompatible
+ added test
* RiscV: unify push_addr_param
* fix
gitlab 0041074: adjust conversion level of class/interface to pointer and class to interface conversions so that sub class to class conversions take precedence
+ added tests
* fix
gitlab 0041063: don't add classrefdefs or objectdefs to the WPOInfo if they are declared locally (e.g. capturer instances)
+ added test
* RiscV: push_addr_param unified
* fix
gitlab 0041007: only unlink typesyms from their typedefs when releasing an unused implicit specialization if the typesym was created for the implicit specialization
+ added test
Remove one of two CPULLVM define macro
def_system_macro -> undef_system_macro (fix oversight as if then block is equal to else block)
* keep track of the current specialization state of the current module
* keep track of the current generic def in the specialization state
+ add utility function to check whether a generic belongs to the currently parsed generic even if it's further up in the specialization stack
* when parsing generic parameter types allow the use of generics that are part of the current specialization stack (this can be the case if a generic is used inside itself as a type parameter for a specialization)
+ added tests
* fix
gitlab 0040653: don't allow the use of a class during its declaration as parent for a nested class (Delphi compatible)
+ added test
* apply OptPass1OP to SLT/SLTU as well
* reset oo_is_forward object option for external classes after parsing the parent classes
* RiscV: write also nopic directive
* use dispose() instead of freemem() for consistency with the allocation of pmessagestaterecord
* ensure that flushpendingswitchesstate had been called before the start of replaying tokens
* apply message state to the pending state so that they are applied at the correct moment
* when restoring the state after parsing the last token of the token buffer append the message state to the pending state so that they are reapplied at the correct time
* tai_eabi_attribute -> tai_attribute so it can be used by other architectures
* write basic attributes for riscvXX-linux
+ add method to TMessage to check whether a message is valid
* don't use tmessage.setverbosity() to check whether the message is valid as it should only be applied when the switches are flushed, so use the new tmessage.valid() instead
* ensure that current_settings.pmessage is reset when doing a replay and when loading the current message state from the token stream
* also (re)store the pending state when replaying a token stream
* reset the message state only inside flushpendingswitchesstate(), not during $POP itself
* store the current verbosity as part of the settings so that they're stored as part of a generic token stream as well
* ensure that only the newest message state is applied
* don't use $MINSTACKSIZE and $MAXSTACKSIZE on non-Windows instead of disabling the warning
WPO: don't crash on TP-style objects with only abstract virtual methods
* fix trvinlinenode.second_fma
Extended RTTI: generate RTTI for Objective-C fields like for generic pointers
Resolves
gitlab 0041034
+ as-macos for using as from Retro68
* fix
gitlab 0040876: correctly check for generic constant parameters without concrete value
+ added test
* better checking of valid addr_no
* write sections/section names correctly for as-macos
* MacOS Classic uses apparently very similiar mechanisms for the TOC as powerpc-aix
* .toc sections do not need a .csect on powerpc-macosclassic
* write " as octal number as well in assembler output, it is more compatible
* fix
gitlab 0038122 in a more correct way than previously done: instead of adjusting the methodpointer node when it's a deref node adjust what value is stored in a temp if a call node is encountered: store the pointer value, not the pointed to value to avoid the reference getting lost
+ added test (note: the test fails at least on x86_64-win64 due to some different reason :/ )
* RiscV64: optimize 32 bit shift instructions as well
* cleanup merge artefacts
* if an outer capturer is required then that outer capturer must not be optimized into a register (fixes compilation with -Ooregvar enabled (e.g. in -O3))
* use HAS_MINMAX_INTRINSICS define
+ random bits for quad support on RiscV
* apply OptPass1FOP to FMIN/FMAX as well
+ min/max optimization support for RiscV
+ OptPass1FSGNJ optimization
* Better fix for atomic operations on wasm
Avoid wrong typecast by checking explictly that hp1 is indeed an instruction
+ add missing cpu64bit defines for consistency
cpuNbitalu is not the correct type for fpc_atomic_cmp_xchg_alu on webassembly
+ RiscV: make use of the fneg.* instruction
Fix compilation of riscv32 compiler
* fix compiling binaries on JVM: the entries list contains pinitfinalentry values, not tused_unit
* missing Copyright year update
+ RiscV: make use of the fl* rd,symbol,rd pseudoinstruction
+ RiscV: make use of the fmv.w.x/fmv.d.x instruction to load 0.0
* factor out TRVCpuAsmOptimizer.OptPass1Sub
* remove accidently committed debug statement
* RiscV: check for cpu capabilities before using fmv for loading zero
Check that index value is not below lower bound in TMessage.Valid method
* reformat statement for better readability
* don't cast the succeeded node succn to a tcallparanode (it's usually a tloadnode or something similar instead)
* change some getglobaldatalabel into getlocaldatalabel to simplify code if pic is used
* factor out TRVCpuAsmOptimizer.OptPass1SLTx
* fix
gitlab 0040979: don't recurse further into the nested hierarchy for code generation if the function is generic
+ added test
LoongArch: Always emit la.got for global symbol
+ RiscV: write arch attribute
* factor out TRVCpuAsmOptimizer.OptPass1SLTI
+ WebAssembly internal linker: rewrite the fpc_wasm_invoke_helper function in the linker, so that it becomes functional
+ RiscV: support ZMMUL extension
* fixed WebAssembly code generator internal error when passing real constants as
constref parameters. Also fixes test webtbs/tw41011
* properly write RV32E/RV64E architecture tags
* WebAssembly codegen: fixed access to absolute variables, pointing to just a constant address, e.g. var a: longint absolute 5;
* WebAssembly: also handle dup=true in thlcgwasm.prepare_stack_for_ref for absolute address refs
+ added ref2string debug helper function to the WebAssembly code generator
* WebAssembly codegen: enable -CN nil pointer checks in more places: a_cmp_const_ref_stack, a_cmp_ref_reg_stack and a_cmp_reg_ref_stack
* override tcpuparamanager.has_strict_proc_signature and return true for WebAssembly
* check for 64 bit registers in TX86AsmOptimizer.RegReadByInstruction as well for sanity reasons
* SubLea2Lea has to check both times for equal super registers, resolves the second part of
gitlab 0041126
Symbol browser information collection improvements
Symbol browser consolidate units
* Allow to process .fmx files just as .lfm/.dfm files
Change CompareChar uses inside compiler/RTL to CompareByte.
+ a_bit_scan_reg_reg gets a flag if src cannot be zero: this simplifies the generated code
+ function node_not_zero and make use of it
Make use of not_zero in x86 bitscans.
* extend node_not_zero and make more use of it
+ extend node_not_zero to take range types into account
+ aarch64: if no FPC_DIVBYZERO call is needed, div nodes do not generate calls
* apply OptPass1Data to UDIV/SDIV as well
* node_not_zero can be apply to int->int conversion only if no data is cut off
+ apply OptPass1Data to variable shifting/rotating operations as well
* WebAssembly: optimized the number of nested blocks inside the invoke helper
* WebAssembly: impose a limit on the br_table instruction length, when generating the invoke helper
* WebAssembly: micro optimization in the invoke helper - omit the last 'return' instruction
Symbol browser information collection improvements part 2
Disable high(taitype)<=31 check for LLVM compiler
* allow absolutes on open arrays (use of this is doubtful though), resolves
gitlab 0041147
* Fields used in local records in for-loops are now promoted
into registers via temprefs if register pressure permits.
* make use of not_zero in tbasecgarm.a_bit_scan_reg_reg
* WebAssembly internal linker: invoke helper code generation moved earlier,
before the relocation fixups are applied. This should make the DWARF debug
line info correct again. Also, the offsets in the linker map file should be
correct now, as well.
+ WebAssembly internal linker: add the contents of the type section to the map file
+ WebAssembly internal linker: write the indirect function table to the linker map file
* x86_64: Extension to MovMov2Mov optimisations to allow more MOVL to MOVQ zero-extensions
+ x86: proper flag (de)alloc in a_bit_scan
* RiscV: fixing spilling_get_operation_tpye for LI
* improve complexity calculation for tempref nodes
+ WebAssembly internal linker: write the contents of the memory section to the linker map file
+ WebAssembly internal linker: write the export section to the linker map file
+ WebAssembly internal linker: write the import section in the linker map file
* WebAssembly internal linker: write the memory section before the export section, so it appears in a more logical order in the map file
+ WebAssembly internal linker: write the global section in the linker map file
* fixed warning after previous commit
* WebAssembly internal linker: refactored the writing of the memory section and
the memory import section: introduced a TWasmMemoryType record, and structures
for holding the memory entries in the import and memory sections, instead of
writing them in an ad hoc manner. The memory information in the linker map
file is now also a little more detailed.
* RiscV: play safe in taicpu.spilling_get_operation_type
m68k: new CPU capability - the TST instruction supports address registers (68020+ and CF)
m68k: do not try to optimize CMP #0,Ax to TST Ax, if the CPU doesn't support it
m68k: refactor - use the new CPUM68K_HAS_TSTAREG capability where applicable
* RiscV: fix AddiAddi2Addi optimization
* RiscV64: make use of zext.w instruction if available
* RiscV: handle more instructions in taicpu.spilling_get_operation_type
* fix typo
* properly pass zba, zbb, zbs to march
Fix ld.lld options for i386-freebsd target
Disable limitation of nonlocal setting for LLVM compiler
* RiscV64: make use of sext.h instruction
* x86: Fixed bug in "MovMovMov2MovMovMov" optimisation where a register wasn't properly tracked
* WebAssembly: fixed type conversion from pointer to qword (fixes bug
gitlab 0041092)
* WebAssembly goto support: skip unused labels in resolve_labels_via_state_machine. Fixes
gitlab 0041093
+ RiscV32: use sext.b if available
* most of tcgcallparanode.secondcallparan's code was moved into two new methods:
secondcallparan_do_secondpass and secondcallparan_after_secondpass. These are
protected methods, meant to be called in secondcallparan's descendants, to
provide alternative parameter handling algorithms (needed for WebAssembly). No
functional changes.
* On WebAssembly, when calling a function, first generate code for evaluating
all the parameters, and only after that, push them on the stack. This avoids
problems with our 'goto' support.
* fixed WebAssembly goto in case statement crash with internal error 2021011801
+ WebAssembly: added support for using saturating (non-trapping) float-to-int conversion instructions via the new target switch SATURATINGFLOATINGTOINT
* the FPC_WASM_SATURATING_FLOAT_TO_INT_CONVERSIONS define shortened to FPC_WASM_SATURATING_FLOAT_TO_INT
* increased the max string length of ttargetswitchinfo.define in order to fit the new define
* fix compilation of ppudump
+ define EOL_ONE_CHAR for the WASI platform
* x86: Fixed bug where flags register wasn't tracked during
long-range "AddMov2LeaAdd" and "SubMov2LeaSub" optimisations
* x86: Refactoring register update code in "OptPass2ADD" and "OptPass2SUB"
* x86: "OptPass2ADD" and "OptPass2SUB" now force another iteration if "OptPass2MOV" returned True
* x86: Fixed bug where "aoc_ForceNewIteration" wouldn't update the registers properly in some circumstances
* x86: Fixed oversight in LeaLea2LeaLea optimisations where bad code is
generated if the intermediate register appears in the first reference
* system_wasm32_wasi renamed system_wasm32_wasip1
* the name string of the WASI target changed from 'The WebAssembly System Interface (WASI)' to 'The WebAssembly System Interface Preview 1 (WASI 0.1)'
* system_wasm32_wasi_info renamed system_wasm32_wasip1_info
+ add WASI as extra define for the wasip1 target
* ifdef on wasip1 when setting the source OS info to wasip1
* wasi renamed wasip1 in the compiler help screen
+ compiler support for a new target: wasip1threads
* fixed compilation of ppudump
* WASI renamed WASIp1 in ppudump
* increased string size of tsysteminfo.shortname in order to fit 'wasip1threads'
+ register the wasip1threads target in the compiler
* Invoke helper also needs generic ids
+ added system_wasm32_wasip1threads to systems_wasm
* factor out TRVCpuAsmOptimizer.OptPass1Andi
+ added system_wasm32_wasip1threads to systems_internal_sysinit
+ also handle system_wasm32_wasip1threads in the compiler anywhere system_wasm32_wasip1 is handled
+ added tf_no_pic_supported to the WASI platforms
* avoid that not explicitly as vectors marked arrays end up in registers where they are handled not properly
* factor out TRVCpuAsmOptimizer.OptPass1SLTIU
* another ; after then removed, hopefully finally resolves
gitlab 0041171
* wasip1threads needs 14 characters
* Enlarge target os/full variable for wasip1threads
Add/actualize CPUX86_HAS_SSSE3.
* factor out TRVCpuAsmOptimizer.OptPass1SxxI
+ write more information ttypeconvnodes
* Fixed internal error 200411013 when typecasting and dereferencing nil into an array
+ RiscV: SltiuAndi2Sltiu optimization
Enable -Aas-clang for unix and embedded targets for aarch64 compiler
* fix SltiuAndi2Sltiu optimization
* make TRVCpuAsmOptimizer.OptPass1SLTIU look further ahead
+ SltiAndi2Slti optimization
* Define for mormot memory manager. Speeds up by 66%
+ added new target to the compiler: wasm32-wasip2. Not working, yet.
* removed tf_under_development from the wasip1 and wasip1threads targets, since they're now relatively stable (unlike wasip2)
+ added wasip2 to the compiler help screen (marked as experimental)
* enclose {$define DEBUG_AOPTCPU} in {$ifdef EXTDEBUG}
* Remove MMM after discussion on core
* some RiscV optimizer improvements and fixes
- disable Slti0B2B as well
* Create proper unicode string for single char if in unicode rtl
* Change pchar to dynamic array of ansichar
* Replace labeltable with dynamic array
* Use new instead of getmem
* Use dynamic array instead of pointer for character map
* Use dyn array for bitset
* Allow to write tbytedynarray
* user dyn array for Superregister
* Dyn array for interference bitmap
* Use dynamic arrays instead of getmem for spill temp
* Use dynamic arrays for compiler messages
* use dynamic arrays instead of getmem for resource strings
* Use dyn array for input buffer
* source linebuf as dyn array
* Use dyn array of byte for CRC buffer
* Use dyn array of boolean for isHandled
* Convert shstrtab to dyn array of ansichar
* Convert strtab to dyn array of ansichar
* Convert symversions to dyn array of word
convert lfnstrs to array of ansichar
* Dyn array for ReadArchive variables
* Use new and dispose for asmmodeinfos
* Dyn ansichar array for fcoffstrs
* Dyn array for FSecTbl and FSymTbl
* Fix range check error (len=0)
* Change buffer to dyn array
* allow type casted pointer constants being used as arrays which address can be takes, resolves
gitlab 0041177
* Use dyn array of char for macro contents
* Change pointer-to-array of deref to dynamic array
+ RiscV: FcmpAndi2Fcmp optimization
* Make compilerwidestring a class using dyn array, rework tstringconstnode: value_str -> valueas, valuews
* Undo changes to lpi files, committed by accident
* Do not enable new debug define
Fix range check error inside tsuperregisterworklist.addnodup method
Avoid range error in tbitset.clear method
* Call free instead of destroy
* Do not set strval for unicode strings in tc_emit_stringdef
* Print unit name, flush output in status messages
* simple clean ups after dyn. array conversion
tai_aggregatetypedconst.add_to_string: fix off-by-one errors
LLVM: fix compilation after rgobj dynarray changes
+ RiscV: handle rol(w) in the assembler optimizer
* Correct allocation size for IsHandled, index is 1-based
Fix emit_ansistr_const: its input is not guaranteed to be #0-terminated
Also cleaned up all memory leaks where pchars were allocated, but never freed.
Before the change to dynamic arrays, these pchars were kept in the tai_string,
but now they got copied. Changed the tai_string constructor to support adding
a terminating #0, so we don't need to create intermediates just for that.
tai_string: remove useless #0 terminators
The string data in the array alrady includes any necessary #0 terminators
and the length of the array contains the length of the data, so there is
no need to add an additional #0 terminator
+ RiscV: handle ror(i)(w) in the assembler optimizer
Avoid range check error in TObjData.writebytes overloads using dynamic arrays
+ RiscV: ROL/ROR code generation support
+ RiscV: flags for crypotography extensions
+ RiscV has internal rol/r support
* fix rol/ror instruction usage and spilling on RiscV
* more aggressive cse on thread vars
* patch by Pierre to fix spilling and jump handling of pseudo-instructions
Handle ADR LDM and STM arm instructions
in taicpu.spilling_get_operation_type method
* x86: Fixed bug and refactored optimisations where SHR instructions were
merged incorrectly when a condition appears between them
* x86_64: Bug fix in "PrePeepholeOptSxx" where shifts greater than or equal to 32 weren't handled correctly
* use for threadvars on RiscV always the size optimization code path as loading addresses is expensive
* Fixed oversight in TStringConstNode that stopped it building under DEBUG_NODE_XML
* align stack to 16 bytes on RiscV32 as required by the ABI
* align stack to 16 bytes on riscv32-embedded as well
Regenerate all Makefile's after: Change resource string extension variable RSTEXT to '.rsj'
* constref does not mean that a variable is written, resolves
gitlab 0041206
* Avoid access violation. Use internal error instead
* Use linear mechanism to check whether function types were emitted
Return NaN from sin/cos(±ā/NaN).
* don't do MovOpMov2MovOp optimization reducing bit width of the operation if symbols are involved, resolves
gitlab 0040269
* Dwarf: write enum symbol constants with the size of the enum, as proposed in
gitlab 0041021
* Dwarf 3+: write always a type for enums
* Determine publishable property type only when specializing a generic
* x86_64: More support for transferring directly between MM and int registers
* x86: New peephole optimisation for improving newly inserted (V)MOVD/(V)MOVQ instructions
* x86_64: "a_loadmm_intreg_reg" and "a_loadmm_reg_intreg" now use VMOVD/Q if AVX is selected
Avoid out of range access to instab array
* throw an error if a second forward type declaration is found at the place of this second
declaration, resolves
gitlab 0041150
* unify internalerror
* Aarch64: handle ASRV in taicpu.spilling_get_operation_type
Check that sizeof(tppuheader) was indeed read in ReadHeader method
Use same order in writeppu and getppucrc to get same output in debug files
Check index of CRC tables for Test_double_checksum_write code
Add information about different CPU or OS in CheckHeader local function of tppumodule.openppu method
Give integer value of not found ppufile.header.common.target in CheckHeader
Add all CRC values into .INT and .IMP files
Fix usage of DEBUG_GENERATE_INTERFACE_PPU together with Test_Double_checksum conditional
* Reduce object size, use ansistring. Results in faster compilation, less memory usage
* arm/a64: Be more careful about hp1 and p_second being null in "TryConstMerge"
* Reduce memory usage of tspecializationcontext
Other improvements and fixes for PPU debug code
Prepare for long GFNI instructions.
Add x86 instruction sets SHA512, SM3, GFNI. Pseudo-ops for VCMP*, VPCMP*.
Fix error in substitution character for commit d79db82ca2
Avoid calling compareword with maxi=0, as this generates an dynamic index range error when comiled with -CriotR option
Fix previous commit 105382b8 by setting Temp to zero if maxi is zero
* Stopped Internal Error 2013032603 from triggering if a non-numeric ordinal type is passed into "Str"
* Str returns a nicer error (and corrects the position) if a non-ordinal type is passed into it
* Specify that an integer expression was expected for inline constant simplification routines
* Replaced Illegal Expression error with Internal Error for
"getaddsub_for_incdec" since it should never logically reach this point
* Replaced impossible-to-reach errors in case blocks with internal errors in "texprvalue.evaluate"
Instruction flags for SM3, SM4
Add x86 instructions of SM4, VP2INTERSECT.
* avoid to call a_loadmm_reg_intreg for mm registers larger than the int registers, resolves
gitlab 0041252
Ensure that real constant put into rodata also get a end symbol to generate .size directive (required at least by llvm-mc-16 for wasm32 compiler)
Avoid adding size if tf_needs_symbol_size is not in target_info.flags
Discard ait_symbol_end if tai_symbol_end(hp).sym.is_used is false
* store lower set bound in a setdef
Fix failure in ppudump after 5462dd38
+ Handle new SetLow PPU field of TSetDef
Introduced 16 bit broadcast functionality.
Distinct destination and source registers.
Add x86 instruction sets FP16, BF16, 4VNNIW, 4FMAPS. Small updates.
Error message about distinct destination and source registers.
* Small refactor for easier debugging
* Flush output in case of redir
* Propagate delphi mode when scanning generated code for wasm (specially generic specialization)
* x86: Fixed oversight in OptPass2Movx where a "movzwl/movzbl"
duplet didn't consider a different destination register
Modify is_inlimit function to use setlow instead of setbase field
Use setlow field of tsetdef class to generate new set typedef in set add node
* x86: Fixed bug where XMM7 wasn't used by the register allocator
+ comments to explain difference between setbase and setlow
* avoid warning on unintialized variable
Remove llvm-mc-10 support in agllvmmc unit
Remove option -Allvm-mc-10 for wasm32 compiler
* x86: "MovMov2Mov 1" now removes the first instruction if the intermediate register is not in use afterwards.
Allow more than 255 registers.
Support for ymmreg_sae, ymmreg_er.
Support ModRM 11:rrr:000. Only for TILEZERO.
Instruction match tests supported register numbers. Thx to VMPSADBW.
Add x86 instruction set AVX102.
Add x86 instruction set AVX102 for targets i386 and i8086.
Generalize asm error message for distinct registers.
Add new warning about variable with excessive align specification
Accept aign larger than varalignmax but issue a warning
Add new message about local variable with excessive alignment
Add tsym parameter to ttgobj.getlocal method.
* tgobj.pas: Change virtula method getlocal to
add tsym paramter to allow for bettter warning when
required alignment is more than localalignmax.
* hlcgobj.pas: Adapt thlcgobj.getlocal method to new ttgobj.getlocal
* ncgflw.pas: Add exceptvarsym as new parameter to getlocal methos
* jvm/tgcpu.pas: Adapt to added parameter for overloaded virtual method
* wasm32/tgcpu.pas: Same.
* llvm/tgllvm.pas: Same.
Downgrade warning to note for scanner_w_local_alignment_large_than_max (fixes cycle for i386-linux taeget)
Do not set alignment above varalignmax, as this breaks msdos/win16 targets
Also downgrade alignment warning about variables to a note
* Remove underscores from tex code
* x86: New post-peephole optimisation that converts 32-bit registers
in a LEA reference to 64-bit if the destination is 32-bit
* x86: Refactored and optimised "PostPeepholeOptLea"
* throw proper error if no suitable NewInstance method is found, resolves
gitlab 0041274
LLVM: always added related high parameters to parentfpstruct
Sometimes the high parameter is only first accessed during the first
pass, while we already need to know everything that will go into the
parentfpstruct during the typechecking pass.
resolves
gitlab 0041282
LLVM: don't do anything for -OoUSELOADMODIFYSTORE
LLVM itself can do this itself already, and the FPC transformations
apparently don't respect the types so they generate invalid LLVM IR
* x86: New MOV/AND peephole optimisation and more efficient optimisation searching in "OptPass1MOV"
Add new messages about win16 memory models
Check memory model for i8086-win16 system use large memory model by default
x86: Fixed syntax error when DEBUG_REGISTERLIFE is enabled
* Improved register allocator and fixed bug where a call to "is_same_reg_move" would leave behind dangling pointers
* x86: MOV/AND optimisations now check for the flags being in use
* allow absolute on array of const parameters, resolves
gitlab 0041292
Add counter for tissurrogatepair2 test
* x86: Minor refactoring of "VmovdqxVmovdqxVmovdqxVmovdqx2VmovdqyVmovdqy" optimisations to avoid requirement of AVX2
* x86: AND %reg,%reg removal is now more thorough under -O3.
* x86_64: Deep MOV optimisation extended to attempt to replace registers after
MOV %reg1d,%reg2d; AND %reg1d,%reg1d pair.
* Fixed bug where a TCallParaNode's "originalindex" defaulted to the wrong value when loading from PPU
* Added missing "ait_tempalloc" to 7a4dbdc5 commit
* x86_64: Moved "MovlMovq2MovlMovl 1" optimisation to pass 2 (fixes
gitlab 0041317)
* Removed random call to "printnode" at internal error 2011010418
* don't crash on external generic subroutines, resolves
gitlab 0041330
* Delphi-style multiline strings
* Enable multiline strings by default for objfpc/delphi
* initialize all variables
* formatting
* triple-quoted string needs to be ended by triple-quoted string.
Fix error in test inside AddChar local procedures
* Additional fix for cornercase backtick
* Correctly initialize/finalize had_multiline_string, fixes issue
gitlab 0041359
* fix
gitlab 0041254: move setting up the relationship between current_structdef and its type symbol for records from parse_record_members() to record_dec() so that its also applied for non-advanced records (other code still ensures that the record type itself can't be used inappropriately)
+ added test
* we don't want N-commas for the name of a generic, but N-1 (as the comment suggests)
Update German translations of error message files.
* users can use the internalproc directive in their code, so throw a proper error if the supplied number is not known, resolves
gitlab 0041310
* strange oversight fixed that tcgassignmentnode.pass_generate_code doesn't handle a certain
combination of locations, resolves
gitlab 0041366
* allow generic parameters to be used as array limits, resolves
gitlab 0041358
at90usb8u2 and atmega8u2 should use rjmp/rcall because of small flash size.
* make thread var count size CPU dependent
+ implement while i>0 do ... dec(i); to if i>0 then repeat ... dec(i) until i=0; as proposed by Rika in m
gitlab 001122
* fix and simplify twhilerepeatnode.internalsimplify
* Debug: Register read/write information is now clearer under "DEBUG_INSTRUCTIONREGISTERDEPENDENCIES"
+ implement while (simple expr.) do ... to if (simple expr.) then repeat ... until not(simple expr.); optimization as proposed by Rika
* fix tx64tryfinallynode.dogetcopy
* x86-64: Fixed bug where the wrong operand was checked for the "Mov2Nop 8" peephole optimisation (fixes i41367)
* x86-64: Efficiency boost for "MovlMovq2MovlMovl 1" / "Mov2Nop 8" optimisation
Add missing firstpass as suggested by rasberryrabbit, and fix formatting issues
* Refactored the internal "TryMovArith2Lea" in OptPass2MOV to be more self-contained
* Under -O3, "MovlMovq2MovlMovl" is now deferred to produce better optimisations overall
* x86: "NotFirstIteration" is now configured for Pass 2 of the peephole optimizer
Support āinā in node_complexity.
* x86: Fixed optimisation where OptPass2Movx didn't search ahead properly for shift/rotate instructions
* x86: Corrected placement of ECX deallocation for shift/rotate instructions
* x86-64: Improved shift/rotate code generation, taking advantage of byte-sized registers being available for all
* i386: New peephole optimisation to help shrink MOV instructions used to write to %cl for shift/rotate
* Fixed inefficiency in register allocator where resized registers weren't considered
Add atxmega, AVR-Dx and AVR-Ex controllers.
Copy x86_64-win64 specific code of tx64tryfinallynode.pass_generate_code over to taarch64tryfinallynode.pass_generate_code
* Improved shift-to-rotate node optimisation to reduce code size and permit the use of a variable index
Remove nonexistent controller.
compiler: tmodulestate comments and removed unused ms_error
compiler: re-added ms_moduleerror, small optimization
compiler: added module state ms_compiled_waitcrc and delay writing ppu until all used unit crcs are computed
compiler: wait for crc: clean up waitingforunit, processqueue: stop endless loop
* Added new "SetAndPassThrough" support function to set an integer variable in a condition
* x86: New "GetRMReadIndex" function to detect where
input registers can be replaced with references for the
"MovOp2Op" optimisation, which is now wider reaching
Introduce CPU_BC_HAS_SIZE_LIMIT to limit acceptable range when looking for unconditional jump label, to remain eligible for exchange with conditional jump
working register name mapping
Update esp32c3 for esp-idf v5.5
* x86: New "Not/And -> Andn/Not" peephole optimisation
* x86: Added new post-peephole optimisations to convert BMI2 shift/rotate instructions to their smaller traditional versions if possible
* x86: Convert isolated "(1 shl y) - 1" to BZHI, not just "x and ((1 shl y) - 1)"
* compilation with -dextdebug fixed
Fix error about unset result in TDebugInfoLLVM.getabstractprocdeftypes method
optloop.pas: move global variables to a context object.
* spelling
* check against current_settings.cputype
Fix LLVM cycle with -O4 option.
symsym.pas: add tabsoloutevarsym.reftyp method
which returns the typ of the absolute refered variable.
procdeutils.pas: add acceptable_typ function
to avoid cycle failure for LLVM with -O4 option
due to internal error in get_capturer function.
m68k: fix indentation, no functional change
m68k: add support for OP_ROL/OP_ROR to a_op_reg_reg. this fixes m68k builds after 0af3f2a9
m68k: allow the optimizer to fold of two differently sized ANDs, but use the larger size in the resulting instruction
m68k: fix typos in 6a82ca8a - caused by blind refactor before committing
m68k: on CF, sign_extend the clone register not the original dst for rotate/shift ops
Set unititialized local boolean variables to false to avoid random behavior
scanner: actually use the result of readquotedstring as cpattern. this fixes the fileexists() preprocessor directive, broken since 2c1fa9e9
scanner: please do not try to byte swap a byte. not even on big endian.
msg: fixed typos in the description of improperly indented multi-line strings error
* generating a linear sub list makes no sense for RiscV
Test local fix for powerpc out of reach conditional jump
+ define FPC_ABI_WIN64 for systems that use the Win64 ABI (currently it's only x86_64-win64, but there are also x86_64-nativent and x86_64-uefi as potential targets)
* fix AndiSb2Sb optimization
compiler: when stuck with waiting queue, write items, issue
gitlab 0041386
* fixed a few issues with last merge
compiler: when queue is stuck, write state of waiting for, issue
gitlab 0041386
* handle more inline operations in node_complexity
* reduce register usage in tcgmoddivnode.pass_generate_code
* emit_div/mod_reg_reg_reg takes now three operands
Reenable conditional jump optimization for powerpc CPUs using CPU_BC_HAS_SIZE_LIMIT code
m68k: do not allow the members of the register pair in division/remainder instructions be the same register
ncgmat: fix location for constant divisions-by-power-of-two after a291347d
add bare-metal to makefile.fpc
Make Zicsr and Zifencei explicitly part of subarch name since it is not included in the base ISA 20191213
moved __bss_start__ to .sbss section
* WebAssembly internal linker: fixed bug, when reading very large (in absolute
value) signed negative LEB128 numbers (encoded as 10 bytes). It is very
unlikely for this to have presented a problem in practice on the 32-bit
WebAssembly platforms, since reading signed LEB numbers is only used for
reading the initial value of WebAssembly globals in external modules, and the
affected values are unlikely, but it is still bug, which is why I'm fixing it.
* added 'legacy' to comment before the WebAssembly exceptions instructions, because they've been declared 'legacy' now
* WebAssembly: a_try instruction renamed a_legacy_try
* WebAssembly: a_catch instruction renamed a_legacy_catch
* WebAssembly: a_catch_all instruction renamed a_legacy_catch_all
* WebAssembly: a_delegate instruction renamed a_legacy_delegate
* WebAssembly: a_throw instruction renamed a_legacy_throw
* WebAssembly: a_rethrow instruction renamed a_legacy_rethrow
* WebAssembly: a_end_try instruction renamed a_end_legacy_try
+ added instructions for the new WebAssembly exception handling with exnref
* ts_wasm_native_exceptions renamed ts_wasm_native_legacy_exceptions
* updated comment and URL for the WebAssembly legacy exceptions proposal
* removed the JSEXCEPTIONS WebAssembly exceptions mode. It was never completed
and was made obsolete by the other exceptions modes, so it's unlikely it will
ever be implemented.
* fixed compilation of ppudump
+ added target switch ts_wasm_native_exnref_exceptions for the future implementation of WebAssembly 'exceptions with exnref' support
+ also create the FPC_EXCEPTION_TAG_SYM for exnref exceptions (the exception tag is the same, like in the legacy exceptions proposal)
+ avr: LddMov2Ldd optimization
* twasmraisenode.pass_1_native_exceptions renamed .pass_1_native_legacy_exceptions
* twasmtryexceptnode.pass_generate_code_native_exceptions renamed .pass_generate_code_native_legacy_exceptions
* twasmtryfinallynode.pass_generate_code_native_exceptions renamed .pass_generate_code_native_legacy_exceptions
* twasmonnode.pass_generate_code_native_exceptions renamed .pass_generate_code_native_legacy_exceptions
+ support the end_try_table instruction in the internal WebAssembly assembler writer
+ support the throw instruction in the internal WebAssembly assembler writer
+ support the throw_ref instruction in the internal WebAssembly assembler writer
Add debugging of changed nodes inside opttail unit with DEBUG_OPTTAIL
Add DEBUG_OPTTAIL to list of defined conditionals if DEBUG_ALL_OPT is set
Add separate function printfileinfo
+ RiscV: CPU type rv32imaf added
* ttgobj.isstartoftemp now returns false in case it finds that the temp has been
freed. This prevents a compiler crash in tcgassignmentnode.maybechangetemp
when compiling packages/fcl-json/tests/testjson with -O2 on WebAssembly.
* fixed WebAssembly signed overflow check for the subtraction operation
+ RiscV: CPU type rv32imafc added
* fixed WebAssembly overflow checking for 64-bit multiplication
+ support all subset locations in twasmaddnode.second_generic_compare. This improves support for bitpacked records and arrays in WebAssembly.
* bitpacked record/array fixes for platforms with 64-bit ALU and 32-bit address space (WebAssembly, JVM)
Allow cross-OS compilation of LLVM compiler
* fix tstoreddef.is_fpuregable for RiscV
* forgotten part of commit
* RiscV64: default CPU type now rv64imafdc
* RiscV: get rid of ambiguous abi type abi_riscv_hf
* RiscV: rewrote CPU and FPU type checking in options.pas
Fix compilation of loongarch64 compiler, by removing reference to a riscv ABI abi_riscv_hf that was removed
Fix tentryfile.getrealsize soft fpux80 code
* Allow to specify message when calling internal error
* Provide more info when certain internal errors occur
* fixed compilation of loongarch compiler
* proper declaration of ABIs
* RiscV: ABI naming compliant with official docs
* compilation (hopefully) fixed
* internal object writer: the 'section too large' check should be disabled for platforms with 64-bit address size, not for 64-bit ALU size
+ WebAssembly internal linker: added check for relocations increasing section
data's size. The check is behind ifdef EXTDEBUG_WASM, because it slows down
compilation.
+ override TObjRelocation.ToString, to help with debugging
+ override TWasmObjRelocation.ToString, to dump the extra fields in the descendant
+ override TObjSection.ToString to help with debugging
+ override TObjSymbol.ToString to aid in debugging
* small fixes for RiscV ABI regarding floating point registers
* fix CPU checks in tstoreddef.is_fpuregable
Fix unaligned memory read inside x80 fpu type getrealsize method
+ { optimze @
=/<>@
* get rid of superfluous code
* better reuse the initial resulttype when optimizing constant =/<>
+ implemented code generation for WebAssembly exnref exceptions by copying the
code generation from the legacy exceptions. This is to make stuff compile in
the exnref exceptions mode. After that, the code will be adapted to use the
new try_table instruction.
* twasmexceptionstatehandler_nativeexceptions renamed twasmexceptionstatehandler_nativelegacyexceptions. No functional changes.
+ added twasmexceptionstatehandler_nativeexnrefexceptions - currently a copy of twasmexceptionstatehandler_nativelegacyexceptions. Will be updated for exnref exceptions later.
* the FPC_WASM_NATIVE_EXCEPTIONS define renamed FPC_WASM_LEGACY_EXCEPTIONS
+ support try_table/end_try_table in tcpuprocinfo.postprocess_code.resolve_labels_pass1
* proper llvm-mc name for the end_try_table instruction
+ added a try_table_catch_clauses assembler list field to WebAssembly's taicpu, to hold the catch clause list parameter to the try_table instruction
* in taicpu.op_XXX call create(op) instead of inherited create(op), because we want to call our overriden constructor
+ support writing the catch clauses in the LLVM-MC assembler output for the try_table instruction
* use the new WebAssembly exception handling instruction try_table for try..finally blocks
* Aarch64: don't emit illegal shifter operands, resolves
gitlab 0041424
+ support writing the try_table instruction in the internal assembler writer
+ handle a_end_try_table in the labels resolution in resolve_labels_pass1
* make the newly added internal error numbers unique
+ support try_table in resolve_labels_pass2
+ introduced taicpu.op_catch
* use taicpu.op_catch to construct the try_table instruction more easily. No functional changes.
+ use the new try_table instruction for try..except code generation in exnref exceptions mode
* use a_throw instead of a_legacy_throw in exnref exceptions mode
+ use the new try_table instruction in exnref exceptions mode for 'on' except nodes
* use a_throw instead of a_legacy_throw in twasminlinenode.second_throw_fpcexception, unless legacy exceptions mode is selected
* bug fixes to the try..finally exnref exceptions code generation
* fix in exnref exceptions generation code for 'on' nodes
* aitws_try_delegate renamed aitws_legacy_try_delegate
* aitws_try_catch renamed aitws_legacy_try_catch
* tai_wasmstruc_try renamed tai_wasmstruc_legacy_try
* tai_wasmstruc_try_delegate renamed tai_wasmstruc_legacy_try_delegate
* tai_wasmstruc_try_catch renamed tai_wasmstruc_legacy_try_catch
+ implemented tai_wasmstruc_try_table - structured version ot the try_table instruction, used in goto label resolution
+ support a_catch,a_catch_ref,a_catch_all and a_catch_all_ref in tcpuprocinfo.ConvertBranchTargetNumbersToLabels
+ introduced taiwstype.aitws_try_table
+ support try_table blocks in resolve_labels_of_asmlist_with_try_blocks_recursive
+ handle try_table in resolve_labels_via_state_machine
* fixed tai_wasmstruc_try_table.create_from to stop on a_end_try_table, instead of a_end_block
* fixed check in resolve_labels_via_state_machine
* fixed try_table bug in resolve_labels_via_state_machine
* Changed the WebAssembly exception mode switches:
-CTwasmexceptions becomes -CTlegacyexceptions
-CTexnrefexceptions becomes -CTwasmexceptions
In other words, -CTwasmexceptions now selects the newer exnref exceptions
proposal, while the previous exceptions mode (which retains compatibility with
earlier browser versions) is still available as -CTlegacyexceptions.
* changed the default WebAssembly exceptions mode from 'no exceptions' to
'branchful exceptions'. Rationale: modern Free Pascal code relies on working
exceptions support, so it's better to offer a slower, but more compatible
option by default.
* fix ABIs used by RiscV64
* more bitpacked fixes for 64-bit ALU, 32-bit address space
* WebAssembly: stop with internal error in case the code generator is requested to a binary operation with two different sized registers
* 64-bit ALU, 32-bit address space fixes in thlcgobj.a_load_reg_subsetref
* 64-bit ALU, 32-bit address space fixes in tcgvecnode.update_reference_reg_packed
* converted tcgvecnode.update_reference_reg_packed to use the high level code generator when the ALU and address sizes are different, like on WebAssembly
* another 64-bit ALU, 32-bit address fix in tcgvecnode.update_reference_reg_packed
* fix bug in thlcgwasm.a_load_reg_reg when fromsize is a 32-bit pointer and tosize is 64-bit
Change do_internalerror into do_internalerrorex to avoid warning when TEST_CRC_ERROR macro is set
List all VMT entry with same name as method generating no overload error
* do not copy the full while loop body when converting while loops into if/repeat loops to avoid
the hazzle of copying labels, resolves
gitlab 0041440
* fixed bug with LOC_SUBSETREG/LOC_CSUBSETREG/LOC_SUBSETREF/LOC_CSUBSETREF in thlcgwasm.a_cmp_ref_loc_stack
* fix for 64-bit ALU/32-bit address space targets in thlcgobj.get_bit_reg_ref_sref
+ introduced optimize_op_const method to the high level code generator, similar to the low level code generator
+ use optimize_op_const in thlcgwasm.a_op_const_reg_reg
+ use optimize_op_const in thlcgwasm.a_op_const_ref
+ optimization in thlcgwasm.a_load_reg_reg: don't emit any instructions when moving the same size from a register to itself
* optimization in thlcgwasm.resize_stack_int_val to avoid some redundant conversions
+ use optimize_op_const in thlcgwasm.a_op_const_stack as well
* disable DEBUG_NORMALIZE
Fix for bug report 41443:
Also register procsym of procedure definition if assigned
Add explicit error for unregistered definition or symbol,
for which registering should have been done.
Add tw41443.pp and unit files uw41443*.pp to check bug fix.
* extend add_generic_dummysym so that an explicit name can be provided in case the symbol does not yet have one set
* when declaring a generic type ensure that the newly added dummy symbol correctly resolves to potential symbols from another unit
+ added tests
+ add an explicit function to compare two return types of a function or operator (in contrast to compare_defs it also treats two undefined defs as different if they aren't the exactly same)
* use new compare_rettype() to compare the return types of functions to decide whether they can be added as overloads so that operator overloads that have (different) generic types as return values are treated as different
+ added tests
* revert 95ad8f16 as Delphi does in fact *not* compile such code, but *does* compile {$REGION 'Foobar} (mind the missing ' at the end!)
* adjusted test
gitlab 0039395 which now fails
+ added test for correct behavior
* RiscV32: load 64 bit parameters more efficently
+ tcg64frv.a_load64_reg_ref
[AVR] Add device information in .note.gnu.avr.deviceinfo section.
Remove extra dot from ..ARM.attributes section name.
+ RiscV 32: first implementation of overflow checking
* Delphi allows comparisons (>, >=, < and <=, but not = or <>) for different pointer types if POINTERMATH is enabled either for the involved code or for both involved pointer types
+ added tests
* also store and restore the optoken when specializing to avoid potential issues when checking for compatible operator overloads
+ added test
* when checking for the + overload then *both* sides need to be dynamic arrays
+ added test
* handle Delphi's $DEFINITIONINFO and $YD like $REFERENCEINFO as the unsupported $Y switch
+ added test
* started to fix RiscV 64
* when searching for an assignment operator to a typed pointer type then also search for an assignment operator to an untyped pointer if nothing suitable was found
+ added test
* RiscV 32: range check also signed divisions
Fix typo, as suggested in issue 41465
* RiscV 32: overflow checking for unary minus
* fix
gitlab 0041458: when registering the procdef ensure that it's owner is set to the same symtable as the procsym's owner
+ added test
- remove internal error 20231102 and the associated define SKIP_INTERNAL20231102 as I've now found an example that would trigger the internal error, but shouldn't fail
+ added test
* improvement and fixes to RiscV 32 overflow checking code
* compilation of all target cpus fixed
Add new utility function vgppcx64
This works like gppc386 but for 'valgrind' instead of 'gdb'.
Use sysutils.ExecuteProcess to avoid truncation to 255 chars inside Dos.Exec
valgrind args must be passed before compiler executable
Avoid leaking localnamespacelist field of TPPUModule class
* use the pretty symbol name when generating the name for a "class of" type
* also pass in the symbol parsed on the right side of "as" and "is" to generate_inline_specialization() which means that gensym can now be considered non-Nil
* always forward the symbol to generate_specialization_phase1() in handle_specialize_inline_specialization()
* adjust generate_specialization() so that it always takes a symbol name and its symtable
* compilation with -Oodfa fixed
* unified RiscV32 and RiscV64 overflow checking code
Read verbosity field added in commit 558a7ef1edf
* overleft formatting issue
Dispose of removed task in ttask_handler.processqueue
Avoid memory leak on macrosymtablestack
Avoid memory leak in genconstsymtree
Add VALGRIND_FPC environment variable
+ add method to reset a procdef after its been converted to another kind of procdef
* ensure that the nested procdef's internal fields are properly reset when its adjusted
+ added test
* Aarch64: allow differently size arangement specifiers, resolves
gitlab 0041468
Try to fix conditional out of range problem.
+ Add TAOptObj.GetInstructionDistance method.
* Use it inside TAOptObj.OptimizeConditionalJump method
to disable optimization if label is too far away
from conditional jump instruction.
Currently only active for powerpc and powerpc64 CPUs.
+ RiscV: first set of Zfa instructions
+ completed Zfa instructions
* properly handle pointer consts in texprvalue.destroy, resolves
gitlab 0041487
* patch by rasberryrabbit to solve another internal error reported in
gitlab 0041487
* stabs is getting removed from gdb, so make dwarf the default debugging format for most
linux targets excepts ones not really supported anymore. resolves
gitlab 0041474
* fix trvinlinenode.second_fma
* avoid illegal type case for in_ro*_*
* patch by rasberryrabbit: Preventing release register for lealea2lealea optimization. This patch doesn't skip lealea2lealea optimization, resolves
gitlab 0041466
Add explicitalignment field to record symtable and getlocal method
Fix duplicate error number failure of msg2inc
Add support for FreeBSD/PowerPC64
Update logic for address check
Add missing brackets in logic for address check.
Check that Ausable does not contain the same register twice
Add -XlS option for wasm32
Add braces for TOC/GOT logic.
Avoid double RS_R15 which was generating wrong value for usable_reg_count
Add some explanation about different register ranges
+ missing mips targets added
* couple of fixes and improvements
* factor out trvrealconstnode.is_real_constant
+ RiscV: support for real constants in assembler
* missing part of fpc_x86_pause support
+ support for fpc_aarch64_yield and fpc_arm_yield
+ intrinsics unit for aarch64 and arm
* ensure ccpuinnr.inc is found
* RiscV: check if the currently selected instruction set supports pause
First try to find compiler in same directory for vppc64
* RiscV: factor out some common stuff into cpuinfo.inc
Update code to fix test compilation errors.
* RiscV: write top_realconst properly
* initialize global and static symtables using the real module name (it will be uppercased for the name anyway)
* fix 41526: use the pretty type name for the RTTI name
+ added test
* fix
gitlab 0041506: check against the correct symtable type (namely static instead of record)
+ added tests
* also allow Delphi-style specializations when parsing nested types
* allow specializations when parsing nested types
* when specializing a generic also push symtables of structured owners
* when checking whether the last parameter is an array of const then first check whether there is a parameter at all
* fix 41504: to support calling varargs functions with no declared arguments at all allow currpara and def_to to be Nil while iterating through the parameters
+ added test
Fix tcgloongarch64.fixref method
Add second out parameter tmpreg2, to handle possible need for a second register allocation.
Be sure to only allocate a second temporary register only when needed.
* ARM: CPUARM_HAS_MP_INSTRUCTIONS
Support explicit casts for floating point types in mode Delphi, issue
gitlab 0041533
Disallow published array properties in mode Delphi
* fix
gitlab 0041504: don't create synthetic methods for an objectdef that's a unique alias as that will use the original VMT and thus lead to duplicate assembly labels
+ added test
* encode yield as hex code so the assembler will accept it regardless of the selected CPU type
* Add unit name to unit init table
Update FreeBSD/PowerPC64 context mappings.
compiler: set to nil after free
compiler: set to nil after free
compiler: set to nil after free
compiler: set to nil after free
compiler: set to nil after free
compiler: set to nil after free
compiler: set to nil after free
compiler: set to nil after free
compiler: set nil after free
compiler: fixed compile on linux
Fix error in register allocation inside fixref method
compiler: set nil after free
* Revamped local record optimisation to use an all-encompassing scoring system
+ handle also optimizer switches by $push/$pop
+ support of proper unordered floating point comparisons
* RiscV: do only proper unordered comparisons if no fast math is done
* Correct check on published array properties
compiler: loadunits: fixed isLoaded
* make ccpuinnr.inc available for 32 bit PowerPC as well
Fix powerpc64 compiler after in_ppc_yield introduction
Do not ignore .inc and .pas files in compiler/ppcgen directory
Add compiler/ppcgen/ccpuinnr.inc which should not be ignored...
+ add a few power architectures so we can check for yield support
Compiler message typo fixes.
* use a yield mnemonic on power7+
* use yield on PowerPC64 only
Update freebsd/powerpc64 startup files
Fix taicpu.op_reg_reg_sym_ofs and taicpu.op_reg_bool_reg_const methods with wrong indexes (thanks to Curtis Hamilton)
* throw an error if sizeof in the scanner is applied to a type having no defined size
* Allow to ask pretty format when giving full hierarchy name
Fix LLVM compiler compilation after change of fullownerhierarchyname parameters in commit d57974dde70
* po_has_mangledname is set anyway at the end of tprocdef.setmangledname(), so don't set it twice unnecessarily for the JVM target
* when generating the mangled parameter names, if the vardef is not defined then trigger an internal error
* don't check for local forwards being resolved for specialization procdefs
* if a generic parameter is local to the current procdef then use the local symtable for the specialization
+ added test
* hidden symbols must be global on the object level, so generate them as global on platforms that do not support hidden symbols
* don't use pointer after free
* ensure the test tests the right thing and not the error message on missing -Sg
* indexed interface properties are allowed
* fixed previous messy commit: indexed interface properties are allowed in delphi mode (still not in objfpc mode)
* avoid range check error for compile time val evaluation
* set names of record defs (and objects) correctly after copying them, resolves
gitlab 0041565
* make SYSTEM_HAS_FEATURE_MONITOR a compiler based feature so programs can depend on it
* fix test
* darwin targets should have also monitor support
Skip note "variable has align directive larger than system maximum alignment" for systems with maxalignvar=1
Do not disable monitor feature for Android OS, but disable it for win16 OS
Fix powerpc64 a_load_subsetreg_reg when tosize definition is smaller in bit number than sreg sub-register
Fix go32v2 target by adding tf_supports_hidden_symbols flag and do nothing for hidden symbols
morphos: enable support for hidden symbols as recent binutils is available
* reverted changes after copyright year update gone wrong
* forgotten file committed
Symbol browser information collection improvements part 3.
+ Show type and variable for absolute variables.
+ Properties show read and write function (or field).
+ Self referencing symbol detection. Avoid infinite loops.
compiler: consistent indent, missing semicolon
compiler: fixed loadppu to reload ppu when a circular dependency changed, see bug41457
Avoid to have defined two memory models at the same time for cpu i8086.
* patch by Anton Kavalenka: Use colored compiler messages on FreeBSD ansi-capable terminals, resolves
gitlab 0041582
Declare MaybeSwap in ogcoff interface part to allow use in t_win unit in PostProcessExecutable
compiler: ctask: schedule modules to write ppus asap
+ optimize nil - val into - val
Add -Tfreebsd to help for powerpc64 compiler after MR 1211
Check all existing riscv ABI
powerpc: fix 32bit PowerPC build after FreeBSD/PPC64 merge
Fix compiltion of powerpc compiler
Remove use of _CALL_ELF which is not correct inside compiler
This solve cross-endian compilation for powerpc64-linux target
Set StackSize to 8Mb for all x86_64 BSD variants
Avoid range check error inside ppudump.
Change the type of all fields set by a call
to getasizeint or getaint to int64 to avoid range check errors
* convert pointer(0) into a niln
* allow nil for constants of procedure variables
Set little endian as default endianess for powerpc64-freebsd only on little endiannative powerpc64-freebsd machine
Set little endian as default endianess for powerpc64-freebsd
Simplify code setting default endianess for powerpc64_freebsd target
compiler: fixed ctask scheduler using dependent units
* remove unclear test (ni regression in any test) in taddnode.pass_typecheck_internal to resolve
gitlab 0041595
Allow to compile tiny memory model for i8086. Bypass internal error.
compiler: load_usedunits must stop on ms_compiling_wait* too
moved gte_command() into CPU specific intrinsics code
Regenerate Makefile after: Allow cross-OS compilation of LLVM compiler
- don't pre-allocate 32 Byte of stack for the finalization proc, that's a remnant from x86_64-win64 for the shadow space
* adjust stored flow control flags like is done on x86_64-win64 for proper label generation in specific situations
* align exception handling on aarch64-win64 more with the one on x86_64-win64 by not creating a *copy* of the finalization code, but by *extracting* it
* introduce and use support_rodata define in the compiler
* handle rodata correctly in the binary elf writer
Consider also enumeration defs to fix wrong typecasting in commit 35d9f304
remove commented out debug code
* sanitize pass1 flag reseting, resolves infinite inline recursion, resolves
gitlab 0041616
Allocate TCMOVTracking on the stack.
moved intristic behind defines
+ factor out a cdynset unit
* move pattern variables into tscannerfile
[AVR] Add support for compact vector table generation
* make inlinelevel a member field of tcallnode
* storing pattern is not needed anymore as it is part of tscannerfile now
* currentmodulestate needs same size as ModuleStateStr. Fixes issue
gitlab 0041618
compiler: started alternative scheduler, also scheduling ppu files
* current_commentstyle converted from a global variable to a field inside the tscannerfile class
- removed the 'full' parameter from the save_global_state and restore_global_state functions
- removed the 'savefull' parameter from tglobalstate.create
- removed parameter 'full' from method tglobalstate.save
compiler: unified variable names, debug indirect_crc
- removed parameter 'full' from method tglobalstate.restore
compiler: fixed ctask ppu scheduler waitforcrc, verbose show linenumbers: show mem used after ppu write
* first prototype (compiles rtl and works with simple example) to factor out inlining in optcall.do_optinline
+ actual code doing the work
* parameter of tscannerfile.illegal_char renamed from 'c' to 'ch'
* the global variable 'c' moved inside tscannerfile
* move check_inlining back at its initial location for now
* the global variable 'token' moved inside tscannerfile
compiler: ctask scheduler loads ppu files, fixed cycle check, fixed -Ur
compiler: fixed ctask reload result
* fixed compilation of the JVM compiler after the previous commit
compiler: fixed fppu result
* fixed compilation of the i8086 compiler
* fixed compilation of the RISCV compiler
* the global variable 'idtoken' moved inside tscannerfile
* fixed i8086 compilation
* fixed RISCV compilation
- removed old_token from tscannerstate, because that is now part of tscannerfile
- removed old_c from tscannerstate, because that is now part of tscannerfile
- removed old_orgpattern from tscannerstate, because that is now part of tscannerfile
- removed old_idtoken from tscannerstate, because that is now part of tscannerfile
* debug statement removed
* handle mm register in tcgcallnode.handle_return_value;
* fixed compilation with -dPREPROCWRITE
compiler: faster cyrcle check, ctask cycle check now uses cancontinue, better debug scheduler
* fix
gitlab 0041625: fix compilation of the i386 compiler after f5cec4db
* do not run pass_1 if we can simplify the call node
compiler: fixed ctask hash, do_reload cycle and comment style
* fix conditions and restored note if no inlining happens
* check for inlining before temps. for parameters are inserted
* run another simplify pass after inlining for better code
* handle mm registers in tcgcallnode.handle_return_value as well
Don't add in list duplicate dependent units.
* debugging writeln removed
compiler: ctask uses scc - strongly connected components to find cycles and mark finished modules, fixed reload of unitimportsyms, wait for whole scc before writeppu or finish loading ppu
Set application extension regardless (target MSDOS, cpu i8086).
* Bug fix in "OptPass1STCCLC" where a change in destination label wasn't tracked properly. Fixes
gitlab 0041611.
compiler: fixed delay specialization when ppu symbols not yet resolved
compiler: fixed uninitialized result
compiler: clean up ifdefs
compiler: fixed debug_ctask
compiler: replaced unit_index with moduleid
compiler: ctask queue order has no effect, no need to reorder
compiler: buildderef support reload, from rasberryrabbit
compiler: using an array to map moduleid to tmodule
compiler: tglobalstate: restore references to globalsymtable and globalmacrosymtable
compiler: tglobalstate: do not save state for ppus
compiler: tglobalstate: do not save state for ppus
compiler: fixed save/restore state by recompiling outside in ctask
compiler: crc includes inlininginfo
compiler: crc generics implementation
compiler: simplified recompile calls
compiler: ctask replaced hash and support module name clash
compiler: fixed module cycle test
compiler: fixed invalid cycle test
compiler: fixed loading rtl units after parsing program
compiler: clear state after reloadig a module
compiler: fixed compile fpcp
compiler: fixed finishing loading auto loaded units
compiler: allow recompiling a pas unit with -Ur, added ifndef EnableUrCRC for checking crc of -Ur units
compiler: simplified canreload, more information about -Ur crc fails, ctask: clear whole state
compiler: reduced unneeded tasks, clear program used_units before freeing modules, remove obsolete events
compiler: continueloadppu: restore and save settings
* x86: Fixed bug that caused access violations on -Os due to unaligned SSE constants
compiler: do not clear current_settings during task switches
Make document generations for the compiler work again
compiler: fixed -Ur recompile
compiler: ppu modules now save/restore full state except for symstacks
compiler: call parsing_done only once
Rewind more carefully used and dependent units.
Add description for gppc386 and vppcx64 utilities
compiler: do not save pmessage state for ppu modules
compiler: fixed calling parsing_done for non ppu modules, simplified setting ms_processed
compiler: flush pending messages before compiling first module, reset messages before loading used units, so they dont store callers pmessage
compiler: call end_of_parsing after do_extractsymbolinfo
* a64: Added node-level (x and const) = 0 optimisation to directly generate TST instructions
* a64: New TST; CSET -> AND peephole optimisation
compiler: ifdef for hard fail if Ur ppu is recompiled
+ redo parameter ordering after inlining a call
* save the correct blocktype field in tnode.ppuwrite
compiler: fixed checking all used units even indirect before setting ms_compiled
Correctly update statements inside tbblocknode.pass_1 method
compiler: fixed error on system.ppu not found, better debug on invalid reload
compiler: Add only when inlinecleanupblock has actual content, fixing issue
gitlab 0041655
Ensure that GDB helper functions dprintnode and dprintfileinfo are inserted into compiler executable
Ensure that GDB helper functions dprintnode and dprintfileinfo are inserted into compiler executable
compiler: fixed scc_tree_crc_wait
compiler: made scc_tree_crc_wait nil for self
compiler: fixed waiting of a recompiled unit so ppus can check crc, added ifdefed heavy checks
compiler: copy scc_tree_unfinished and other_scc_unfinished to all scc nodes
compiler: fixed dependent_module_crc_mismatch checking if crc valid
compiler: fixed ppuloadcancontinue returning scc_tree_crc_wait
Avoid dangling tcallparanode.callnode field
* Store callnode internally as _callnode field.
+ Add getcallnode and setcallnode methods
which check validity of _callnode.
+ Add callnode property using getcallnode and setcallnode.
+ Ensure that _callnode field is reset when
a tcallparanode parent is changed.
* Corrected "RegLoadedWIthNewValue" for arm and AArch64 so it
doesn't include instructions that also read from the register.
- removed unused global variable fmodule.compiled_module
+ also save and restore tsettings.asmcputype in tscannerfile.tokenwritesettings and tscannerfile.tokenreadsettings
* Overridden "RegEndOfLife" for arm and AArch64 to account for
change of behaviour with "RegLoadedWithNewValue"
* i386: Fixed bug with "MovOp2MovOp 1" and "MovxOp2Op 1" optimisations and non-existent 8-bit registers (fixes
gitlab 0041698)
llvm: initialise overflow location if no overflow check needed
No test, already tested by tabs.pp
resolves
gitlab 0041695
llvm: initialise overflow location if no overflow check needed
No test, already tested by tabs.pp
resolves
gitlab 0041695
Handle empty record as function result type
Handle empty record as function result type
Reject non-lvalue argument to Volatile/Aligned/Unaligned (
gitlab 0041693)
* Corrected "tcallnode.handle_compilerproc" for "in_str_x_string" where
optional parameter was treated as an encoding setting rather than the
maximum output length of the destination
* handle LOC_FPUREGISTER in tcgcallnode.handle_return_value
Handle all funcretnode.location.loc types when loc=LOC_REFERENCE in tcgcallnode.handle_return_value
* fix tcgcallnode.handle_return_value as proposed by Pierre
* Constant propagation now re-evaluates the call node if its parameters were changed
compiler: loadppu: restore current module
compiler: loadppu: restore current module
Add help line missing for '-Aomf' option for i8086 compiler
* rename OptimizeNodeTree to make it clear that it does not optimize nodes only
Resource strings: fix compiler types for unicode versions
Resolves
gitlab 0041709
Resource strings: fix warnings in compiler code after c8cf3ca2
Force linkage of shared libc for dragonfly libraries
Re-init varargs `paraloc` in `redoalinaparams` (
gitlab 0041703)
`redoalinaparams` calls `order_parameters` on all call nodes after
inlining, but varargs paraloc may have been invalidated by
`init_paraloc_info` calls triggered during the inlining pass.
Requires building the compiler with `-dFPC_SOFT_FPUX80`.
* fixed crash on systems with memory protection, due to the compiler writing to the arraytokeninfo array (indirectly via pointer) in unit tokens
* ppudump compilation fix
* fixed compilation of unit ppheap
* unit browcol compilation fix
Allow -Aas-clang option fro x86_64-dragonfly target
Call InitSysInitUnitName again in MakeExecutable and MakeSharedLibrary to update prtobj if needed
Add /usr/local/lib to default library path list for DragonFly OS
build+fix: Correctly reate html/
* fix compilation with DEBUG_NORMALIZE
Fix `normalize()` IE 200108231 under `-O3 -OoDEADSTORE` (
gitlab 0041682)
Four bugs in the `blockn` extraction path in `searchblock()`,
all gated on dead-store elimination:
- void-result extraction
- tempref to a temp deleted in the same block (the reported IE)
- splice order leaving `tempdelete` before use
- missing `pass_1` on the fresh `tempcreate`
Add missing record field for explicit alignment
Add ppo_default_is_set and ppo_default_is_single
to be able to correctly treat default properties
which are sets or singles
Check that, in the optimization CMP/Jcc/@Lbl/CMP/Jcc -> CMP/Jcc, redirecting first jump
both CMP instructions are of the same size.
Fixes
gitlab 0041743.
Avoid Try/Except inside printfileinfo procedure
Add check about equal instruction size
dwarf: clean up, don't write empty child sections (DW_TAG_variant without member / DW_TAG_interface_type without inheritance)
indentation for aasmcpu.pas
indentation for aasmcpu.pas again
sorry forgot this
intristic code moved to mpis/ccpuinnr.inc
removed define in ncpuinln.pas
intristic moved from MIPSEL to MIPS
Indentation in aasmcpu.pas
newline in ncpuinln.pas removed
Bump CurrentPPULongVersion to 31 for single/set default properties PPU handling
* Add TModule.ByteSizeOfPppuReal field.
+ Add tentryfile.getrealbytesize method
to computed the correct value.
+ Load/Store this field into PPU extraheader
+ Increment LongPPUVersion
+ Use this field inside ppudump
- Remove ppudump local function CpuRealByteSize
rendered unless by addition of this new field.
+ Give better error message if LongVersion is
different from expected version.
Fix variable name error in last commit
Fix default single reading for cross-configuration
* x86: Fixed minor register tracking issue with "LeaMov2Lea" peephole optimisation
* x86: Fixed bug in "LeaOp2Op" peephole optimisation where the registers
in the reference weren't properly tracked (fixes
gitlab 0041746)
Try to handle compile type range check correctly inside ncgmem unit
* "in_str_x_string" handling now generates more efficient code for single-digit constants
Generate CFI for DWARF versions 4 and 5
Lift procedure parameter count limit to 32k.
Chage type of fullprocname to AnsiString.
To linkunitofiles add clean object file name without paths. Fixes issue
gitlab 0040602.
* added proper object format for assembling with nasm for target os2 (requires nasm version supporting 32-bit OS/2 object files)
Add DEBUG_JUMP to list of macros set when DEBUG_ALL_OPT is used
Exclude register allocation to local absolute variable using different register types (fixes
gitlab 0041446)
PS1: Insert a nop after MFC2 instruction if needed
Fix local variable type currparanr, to avoid range check error when compiling tcalfunc9 after commit 98af4c2b
Avoid accessing SIGSEGV for webtbf/tw39604.pp after commit 693a0e2b
(inactive) Revisions in this set d65737393352eabc8aff52f9c7b6545d09c578c8,eab079c7bd9d93bc3f02309e9ada641a7c43c60d,f82cc96cb939da4edee6680f28b0331ddc490b20,971d7baa8a050489fe3f45db09669076d2c61b4b,49edb0b60641bd52de8dddb80b687197c35b6f1e,314d3579fc29303cbeed06286e951ae31a2ed556,5d97ff43fa4b34f88279ef6e944fd1874cfa5c0e,7822a90e209cc3f1cf74c0eedd100b2ae0f4b523,289fdc72c5e692069d120e45031bee68b3ca3f20,be54d40660a006800d6e55c8cf5f0cc5d48aa84b,5e05630713d4bd9fb63ed493dcea80aa83027135,1ed9054bb9e2e228524c475cbf10d389e5d09967,a685e2aa5a9a37bc09efe484f9f2e2c825b46a3b,8e58bbea61d4288547dd5ef7aedc06b7651e0673,00fc962ca310f7bc56a3962918a83fb68a7f8459,04a56e2900f80fd62e34223b3b5bc72e74c77b7d,87d4c189927636dd8bff5bb0275ff998347ab0fc,7cb2e5a180df00eb8b5b18fa24a12564ea1bfa09,3681dbf0c9c365a1123509564040a0aeb9d3a306,a43f1bc1d0fcc3518412feb61019d124ff170f58,7878a7b390e07d0ea5000510a9634181afbed6cb,b0003f71dda8388ad74292edb82ba401296fc106,89d98d9bf1a1e0268d68c3cd436c53e30b4cbd2f,916810db415fd9e4b7546c91c0a76492f3934562,01628263bb22eac246034a75f0e7a24b50ce5951,56447ec169ae8dc87931a296ae799bb306cd293c,ab8097c06307d2df5a98b35a10bee94f764abc38
* patch by J. Gareth Moreton which avoids that the optimizer causes reads of invalid memory, resolves
0035187
* fixed cbool "and" with full boolean evaluation, and cbool "xor"
(mantis
0035272)
Check that inserttypeconv really change node type to ttypeconvnode before setting convtype field (should fix taddbool.pp bytebool failure on powerpc)
* patch by Cyrax: Quote path - which is passed to Windres or alike program, resolves
0036526
* AVR: fix TAoptBaseCpu.RegModifiedByInstruction, resolves
0039623
* avr3 and avr31 should also have a movw instruction
Increase reference count of jump label, fixes
0039784
[AVR] Include bootloader starting address and max size where relevant.
Also add boot information to board aliases.
* fix the internal error of
0040639; however as the test code in question will only compile correctly with the next commit no test is added yet
+ avrsim6 controller type
* set proper expectloc for dyn. array comparisons, resolves
0040947
+ fix
0040963: print suitable messages for local unit, include, library and object paths if -vt is given
+ added test
* properly calculate the size of enumeration types having negative elements and a max. value exceeding the upper bound of
the elsewhere matching signed type, resolves
0041019
Every compile gets actual current directory (fix for Textmode IDE)
Browser information for generic records
Symbol browser fix object tree for 64bit procesors
Change branch and jump destinations to byte based distances.
* better error reporting
* indentation
Check rjmp destination range.
Add more tinyAVR 2 controllers.
* avr: optimized code generation for ... xor constant
Fix for bug report 41460.
Solve internal error 2008030101 for constant pointer difference in {$T-} mode
* properly update copyright year
Recreate "arraydefs" to be able to get variable size information for some variables.
Revisions in bigsets in this set 500e29e5e2c9b1ae310bd2193c493a221e55972c,433050a2c41069ba5dd519058e47166aba1adfc5,65ef6f1f3726680eaecc2ae24a2da30ee249c54a,271ba59cf1c1780d8c0b120dff107c42bcfe1e02,53e5a4a03a6f802a5ee2217d326eb4f5af87bc5c,b407b67ca1afef62a10c9bcd06539b480250d580,21593942a16d2788103501ee1e2921fef90cedba,4da4c96349d205cf99a8aff0618315904f451935,ad2ac98858f5c422ddf016b4941a503090b73792,2f28c5596ff22f288c64a297c30b7d33a7efe284,783bbb66f9324152ba2f2914c8a2a9a1884c37e4,bb1b1bc70558bed46b5b10b03777312fb204dbbc,6b3739f26cfd6f3f4f11e7a101178d2e7130ad72,3d536547eb124b203dbd3668a56c6fb0ee4eaad2