Security Research
CVE-2023-51766 SMTP Smuggling Recap: Where Exim's End-of-Data Interpretation Breaks
Thinking
2024-02-15
6 min read
Research Dossier
#Vulnerability Analysis#Code Audit#Network Attack
Exim before 4.97.1 delegates the decision of “when DATA ends” to whatever bytes the SMTP client carries — effectively outsourcing the trust boundary to the peer. As long as the outbound passes <LF>.<CR><LF> and the inbound accepts it as the end marker, attackers can smuggle arbitrary SMTP commands into the same session.
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a4d4b6d4ade7253d06d61bf923572a6b8c253d117e8b63642be9ad8c68eaee7d4a02592bcdbd3155abcc6a953135deec61ed6729ad92ae056a76758bfc9dbe3a6985cd89376d1d11f0321ad5bb4a1f7d95102ca8b070438bade670e9dba0cf0c6b7e8425a3828712b40e116f1df14ece5f0a8b28954f3294835ded227034d84193a3d3f12a42baa2e583c953d5a659097529521422ae43af5630fb018ae2e995688f2e3fa87ba6445a3c62117069d0137500d36a45143c97374dcaf0c2222ee0a7e34b05922dc5adc43ffe699ed48dffeb71abc1c1db5d5f93f024a154203fb67736e2dc05925f1da64e313c57452b4731a0eae5ecba61eec3c058619292e73f0a0e9b46e5c23ece6900bcf914a3bbfb4ce114d1722a75adbe658b503ae596f80a1cddc53fa2dc0ca97abc17f124fbf2196cd467fc04c4f1a5ddadb5bca594e0c2c474095f478d8bfa161383c98703ddbf6c272aa48f07de31fdd7bf20147074e3e37f0dc5d09a5ec4361ebbabb22e756031c39424c3bfa17348aae14bda32445deccbd62d4804ffe1ffda5c0e67367225cfbe8b362efe38d8aaf7557b56371a1c8682dced599a7ba75c5fd3df50478a2263956a7228dbb54312bdcce9251c4d0df299c3d9bad8b1058a3fdb4b3719d202e1ab282925a6a886aeb5d00a6e60d66205cfccb729d710dfa81eca2980b1db108d9f136663138481f0da94055979c74bf231849767ebbd578c58ba01c2d5f951892864f34901e2e23db9aef6614031f5714dc4581d28f807011962d08a4cbf7c7e2a6b135c5a0f4137f0e1b946f8ae64189f5879ec7291febea9058cca7f8a7bf511b19baef55aa8dae5ca49e1b7592809038c716b0808d039043bbefd7ab4f51cca6e55904ad7dec0210b6d0270996839121627a0b38cf176258bdfcd84241219407ad1954d4c35b8747db796493c32ad05b580aeb34df229c195faa3aa12c274f11d73af7e1f8c7c8e029698ddda05427a166db75deadcd56797889a17eb994477136add1c432d38e88f941223361e4fc951496f12452f42a993fa9d5b665f5bcc612995d38456ced97f7a90ded40cccb9e9630cb12052ac76637cfa3a04dc2ae0cde0b9d6a013479cb395396fa0fc5e608d92871b3b379d110f6b8ff5a6e56a737de863d1639cb2e8ba77c2a3222907a5320c019dbb561ba6de8e11316be6c17c71095d97c039ece8489f7c18371524f51f9fad10119abd80aa293cfdc1260e0d767486adad217fe8c2b343661a1cf79a0f0c1f6d0f166b71000a19192537b27b93917c269ab0811fbf1fe9177c9e5f2ed148d5e28faaf906407ac6fea214c7c83d5e0bc7002725ed4cd0682e2006620b7bd1e14c12887ff03e1016580d8eaba81d4b42fc61c85304992fbd34c2c8c5e4c6346240d2739ea98520057c3ef5ee82513f56f437648a229445837a0fe4093a5e0787c35f33aede2cf0daed91c8f7c512e92d57f709c1a8df6958fee053295d655c01d8ce8e3e3fc31a05a48e4d0da2e8b45bf33cd12822e3e60036a60b0d0c84665118987c72b49925738e63761c631aeb847f0a9b779a6831fa887c1cf9b959c52eea99b9aa7adcc3b83b1b1d3d3f9c9d489e82f2327565610241d15983890547d76c6958a6a4e0618299a63bc1d373e7bf07f838b2aa47894edf1e2eceddf55ad6a4b74e419bdd71a6f3a8a28449f5507f88ee73a220f8d8d5da4b24ea491cece83c56964baa6bdace58b14ea441f4741a118c8a407959220c296fa66821af07e16c8528e2e1293b1ccebddaa8136f536d5df0160721e38b3f9aef5145fd93eda9a6c581c183c313cdd2f03218e7b5259eeb355331c43295dd1a12af45a6556ef807efa36b9b143b677a97e0d453b5265f5613634520d6ae43356ab04631116264bbffa9406d632264d05f8d7041a21fa3b6041f5000ad298792ce1dcca1185d8fc785c56f4bfd3ad6c28fd2b7e8075794208ac97548bc81962c983c3e58a5344e64f203fc378b083362d77620a79fd6e04596c50a1d1afee5c1e0a39a36917488285a8a920e3aca0074a46582f798707d0c62e4192f0c5f333dd4e099684b48784d36122cbfeb3a0266188f919c2b8d2834611ca32233bbce5625ed2c692745bc7a6f7774d2e3fbe863105dd31f1bd1ac3239121c0e16ee7e023dcb02d914b2a30994255808c58506d82935b2c59dc2ba49fef684ee00f05c66e010292682076c75b34e47ce89a1ea047cd4a494edebe9a608a47388d3ccb4c675de2ff1c4b7fa09a9716d71df4c2090855a492266689a15e92614e1ee2d7ef18d8ca149512e4ac1609ef559393b181251b6fe5321e5e73bfdf5378e2b1e587952a141a9f572a30f9f2ff4a6ab6fa0048be1645f7e640dc4d54e20caa4f52cdb9ab40137e0ffc0eb3d5657e411a580d48044b6babb1dce28c8c0b2fc2b0435a98f515b492d1092efd2ec8a2e948875de729284cb47df73fa18405ddb32acd932711e9b958377f552477964378a74a1316f16892b130e01e25ec86f6004fecfb25cd4031e32ec576b4232b6e8742fda6c7edb2259259ca6cbb2943f489318d152b4758d848714af5ad36c136709b60cb080e07093f719309bfda5675af8ef33c9d9d0cd096e0be91bdd1c78c4280e57687f30a280bd967ee8aa687ad0eb2e92cb475eff8d66905e1ca9b8b85c518ededce7f1fa5a9a26294825127efd9325fe4dc66abc4400a33ec2e22b86dbccc7eb0b6be6ca146d87f74161260a9f6e3e2b24a9ff14313abde890bcc52301c607908043e250fb1ef55846701219a7452ba7ba1681f80313e59b8d5cfea39648f6e9000c3f71a65040e846d804ebe5032516d2aabfb0f4a60918907b6e1e8f3361f91e7c4933a5a0717a019a5042b566bc8c48c575f91bd70dd19c16c2743ace220a6ebe05b0e4e955cad45f0d923142f2dea153f871825dc375a3167ad54f04c6e245aafaf2570c59ad1d5cde21479dd12492a06498a7353f3d8eefc5747812f54ce6b33656d7cb4f0b3904585db8bf8fb04b111903dd447dac3f8012914c7baad4e3d83575faa825df05234d53795008435e1de1f6864cb3d61c8cca6c8526f844bb0cba9b6ef7bc82dd6b6c335c4bec5e66089bedc21d7ac59b39cd7286cf9000fb21c52c5185b96b148dd3c4217ed51f84622c46c6271c223a27efcf89536dd18aaf751ede48ba146f7462e3d32dcc0ea299eec60f508a93106c6d6e409bffcb042d8ff92c4ed44e2f4651f8818bfe556c705aed167541c6197b88a9ee6a44d2fc56f810a47e02791ef135ae324a234b82bb607cb628776f2e981b1ad895dc62c77eba31e3a3f06e67cd050050f3cc135de892cf95363b0414d118e3f52439cc836bda192f47ec1f2d6b1c65620a2c2f01e5113e86b80446ada7ac9ee18ef8fa445c2e3d6e75aaf4ee4c62229949ccb1bf2bd87d2e5eeb5d644e2c69b8d3b58bc6508418fea7a94ce0c2917dc13106ee985449c5c1cf7676e809b2d9b7817ee00150f647ca72b170a62c32d52333c2d5fcb32c6f208b3dc683d50a911ccc958572375e70a64a10f35cfd486d8d803c9f756c665691da312544d2debccb3c4c6b69f1e1c916eef184e7bf8c63d15abecfd67c3cd818b5855ee080968ee853a5f31fddab2c1ac7adc1e296d78d2b5d963d60ae64aca9ac1c2c00f3ae2e00d694f9ad443430c2c1cbbc20492937f64045407c7cf560872bc08adbc1006a687de0eb6d7a3e3383044b72314bfe7eedf6bec7f89af03a8452f3ac845c251695b4889b9765e2b6b8bef169da329dfb9f6584f8761de8398c6646e6f97bca639d0a7e65477c02bfa5a77229d7033e3f4180c0375feace34689ec8983bbd3388d4a6f02d8c66c402d6a008d6867f5c17621e3f56ab429150f0211807e37e86899099d6a4686f80329574279fedc356e05b07fbdfa031619aeb196b4282566d4dad6a163a0738cd3c95df88508cd78944c0138fbc2254a771ef5bdda7af41ef6166671edbcc186a36bb84f50d89c9ccb9d7e4b34a1a3be1b1ea51810fdff28dc517ee4e1c5098921bcde26acac0ec646683a595c459e3e988ebc08357998cc0186ef80eaae506ddab23c7189d1eb0f0645b0f7d81af9ab44f02089cd9a24537ff4f4e8f4e32228b63a7cd83942606473027578a899d27d7d577baf7c60039449d531958dc06f3ac3869483b114769346df8614e41319902e75b4fdb6b76a1b29ac01c54abb8d0ad274061a9faa9fd260ee9280512d76c66b377b0092946c15ba2ef5cdfba58806e2208342a6e72017143a89df70dd5cef1c6d0e75b8fc68043c3ce93540c2b8d88ad2a0ec79562ff77a774c1825405cf4888f824f294c39681f6ed57c1197598b748da10e4d9ddc6439b3d35f5f0ceef522f90ff3ede2bcf40647d8f71ff2d97da9297437cb3cc8c1164c9abafa6663af8fcbc17c5e8eccadd67dbf83a5fba5e178ede0c5d5ad7590d678c67c0f7bfabbda1f4125e8e035df347b094dd8146152c1d5525b63334ebe767b3de72de0faa30ecfef098f17ab5fb88d8eac4a0a210ae80ff8dca2fe83a3c99ea93c8ecc8854de847d09451bfb47f624f48d7cfc7705fc8292aa99ed1efdf09fc14e8edda5edd4d4507b52842c184a68f580c081ea06649f34582b29b7a7cf28794f361abf3e36a69c5b40959c924409607f5dc359a8ba47de9dc152272378f0e7d2049e6978e418cbb0a87fdc81b75f1cb1860a93b80b7e91fecb230f8d668b0f7c7258fcb8ac829138f665b381e1953e0c1c310f9e2ad9ecda9d899286df3c250b84e664eee8708dc8520d2e65bb40e47e91e761b3a694f286a746bd0d7a10234ed3c24c61e432f1534d1bc5a8d70a57799280e2bddb846ff824ca733ce0f46354cf190b38eb14a43fe46d8b10cb95b2299ccf0e26e0789bdc479dbe07d661278254ebdd8aaee4e62533532bcc7294f57defafd8af963d13b13c2afd140161a7323e4cd34d352325e429c23c42103ec499b58ad5873e633aabaa1c9f5740fa6c151f01b1fc6c960a80a4685d3e971be18354eda3bc387da41cbcf310bd8e7e911c703da2224fcbb5c4c422cdc01db3432172d89ad227ebf94b4837a48dd72edb51b9602e48f25d56fd219436e3441719f1152cbe117e229a2ebd3bcfa3a65b898a86a15550f8454a0fec838169f12b29410e5852cedab595f671851743819314b28f0f2dea0a815b5df5924ef6d0d4b2eea81e677fbfa6cbcc66b64e136eb56efa14252909609112ee0cdcae0b2f182b81093abe80e30308355dcec95cb4f708d75cdb312e02f7eed639426bb07756aca7ebc38f4d1e5ccaf6186b791c6a176ea315640ead9fcf0dafd97abd1d3f15ad6b018d674679ee3101f6a4973d06fad8945957b43584f266d4721ce0214c6c142530b003783ddcdde1d9f28107bf989340196038fa79969f82d080af3ab462fe7a9e1616215ffc30f43eff65c3604bbb00c374a90fcf67b7a6f1644424f40750ef1b09dbe953d76840c543dd146aaae83e5e6477d4aba37337a719cd995bd4ee5065bcb664ba2c21a6f3d35e195c43682f5cd93eeeafb51d8126df87f62aa02eae7a73bf59474b24233ef3a81a9bd85f27e166cf49cf795024d6effc9407bc300516536a5e27183b1cf73ee1fb3eb204a5dae676e42d3d7567af43fd7c6745a3a690fc705c9db0d2b08159d9d74dccf3da59f52816c7355118af63640c5d7cc0f65fdaef1253c262f89c22b9c24d073ba5bf379d1fc4200476f523c4f59db7fda76d9d95a29cae8e8abcf31c505b03f373558649dfe3fec2af03c13c25a7f627f081be574a399f499f0e6f1f176b7cb22417cd34b58ff5331780aab7ff9dbb49cc04c0b59319d9201253992622c3b62f375fe42d59912bc58bdf7219907d41c329d342c2e1c630ced0092820ee19fe0bcd1df2a5f29eb1974f456d97cf96b8ef0c019805d476ae080ae845847802020ea8993066c0196f40ee4c93ae8b4cddc7ae59b4ec5072df9a43e7184a2d0dd17b7547e3191a0d56cb903fc1d4fdcacf2ae1a27f998cdd24d6761470ea3c728a08cf7680ce266d4d6c005ee47f5dea1912fd8000b47095acaa25edc1f14a62adcef7580bc72c190a3b4c0a48db372ba58cef6a8f5975c99191348172a5d7f9a9586974ddf28d2ed08305eefa8a8213261fe8d00f449e4aae8e386ae12d2c4438f6014afea19733a0e51c97c9bc15def5df51b791797e2070c7b97fcc428ffabf9aa5efb220ce9ea47539bf37d95821779075bc1d42db2c19c03edc2433234ead4e9ebcc380f2bf22b5047218944200211f466bfccc8ed5e5b3bd798a1c7fc75930cdd895b1b8cca4f97d8f6924d8e6061b06343cfce2a81b13e0e4190a37f7c08fb8c30340d49920df97920ca2bc3745ebf75126493479a61bf4226b8b668ae1cb8148c5c6b351717ffe1eed17a6433289b8cbc1ad748caf19343714b56c92aeb40e8c927d8acb79f20acba2eb93ef30483e9f4b87390d9d708c4b35303c9c925d9fe6254f78d9488cdda3fe6d0054cd96b5a45108cefebf39f7a84cd4a5b30b10d0b99b1d83fb6a17bae632f99e79a93c6ae795312d2c4bfdf6d5560c1d3a1ebb4f2b36c3753e91e9af5af8621e52d07372286517bb8a50d4ec8ba6ff478cf22e3898a423e5e6219ed6017e124603040f39b63d09d1c7de545f6e7817ce5f678686dfb1405320dcb918281225ddee829b0024826c116194c48f5481af098e025c50e91ce4cd4925449a27cd76f6287c00c695e89e738df9346035b324702bc8203bb3c2230ea3966927409974c63a37ded97ef6091c6992e82b6e83c8f9b622ae5dd84bf25df1996b42395785a19cd3229e7af00e3a0378ff48b4a0051849d8eb46ccd78c58d5a56f00db37ec99e2c3d5bcd4b857fd52330750cc9f62f7c514805b6ef87a9853810570128c4281eb40326daec880b070d358264a8670c2992b2935df2afd260578a774dd05efb785e3ae5b741ab8ef4e5c008121738a5f1ea263276ab73aa3ab36d5333928f97a3072516c0a8cca3f3fa590781533bb95edf48fce7dd85283221ea147aac8e8b34563529746d75677d7c616d1bd5cf358e2be2835fa6c2216a7fcd682b15034f637385f68866b8e36e2b3d4c55b163cc315053894cb6625687ea1597fc7dc772548ff22f921b8b52005adac41d02e96f561874f319399f18982cff5af6a7fc52533e6829db9b9dfbcafa9409c99ececbced16ad16472940bd332736ae760f9d556cf7a8ff1d215be6bed780a8418e1f4b30ae2e40717458016f42d3164fc2dbbe921f790366552e3e98e32f511dfaec6fe4239c64db47f9d834fe264975722b42bb495454a2c7de08ffad914d21605fa40c77d2be6993b983cd4dffd4002b5f7f0be92f63c4957b3cec2303d4abab96e21d05ff7e376b487098c820ac156f988b9a40463dd385cafc1b9a75593c7190dcd90cd7693159982a4a2cd7b7063e972688c87327c4ff5bcc0ded8ad19d2099a0d5d3474bae5c0cc39035887a6356887891e917372d72500eb0b7e56df129a6005835aa4dc6ea076bb3a4b1e2380027f0ea4d42d8e32ec828bbd166b23d2fea0363bf99122b7a180ad2e882c5163f394ab0b0d46175dca385f5a84cddd51d28b6db44dd030c47d6fb36cff9983e8beeada1b0aff0b0f5c62a6155f9de1237884db330238340ac8e81947c152ed36e9e2923691862592df773f5b7f226cb08e206b93e3fbc052d1cb403b643f28b6906bf9e56ecd3ecc0af3b43bb4e9ef80cf096a24ea00148903cc96a9b55d04a21b7e01d3573af2fe7888feca1abdfe2d72a70807746f6d98eefe1d6659297d032d5b09a52715a1a25588ea8e2c956500d91de1b48ee7fa4afc71635bcb8c8996f3fd38bf77f1a1e3da0a2f527a7deecb8870d6deeb0a9bea11baf383ef5401159247612c1ae9abb8d6b7ac4844d7dd5121ee69f944b3f5d4357f0dae6160eb358a69923780236c90b6ed29965210555dde0ecea063317196858314eee623c82f45f216fe6e9b9902691638f954af7d811fa479f794ddd4aec49837306490a9eb5f9ce2a3e669401726b0ea853de21e9eef219da2dddfb48ef583ff2bba3f094fd1d4dbfd11652b44827dacf9e8afc5d475ee1d3f6fbd1e10c54ba8dc6272f7136f84afc85ce37edbebdfd341df0256324824ae4af9f91bd93832b1e3e50a9e56f0ba29d130fdaf6abf86efc08ba1e5d13a185d849981b1e57fbd10769c3d7ec6adcce9d23ea72ae170b9f0d7b056b76d8f95fef538b9a3d13ff6b144a393204e72080ed71d32ad98d977e7fa6c41bc8f33b0079a4303f066b156015b9cb6b973c956570e351fb04980ba1d11e20ee4c3bbb064d295e2dff2821b84114edf2cde052d8008ff069fcf3c7bf4cf941bd0181ea6184a1bd2a368129adaf6d122f70f604fbf8f0725e4a73fb88e071cf5f6f5539f8e1ce148cc76d7ab52c925584c56945036a7446fef8721d19bf34befbb299783949d7105b2adb2f39f37c2448a69e6e7f412311cbb21672add5517b62607ff223af74e38b932a985a662f1eab2b0291ccba5578340298e5633b954be0b526d5b1a9291974385515a4e2726492ab396eda3bb3212c1a917256eb3e1476dd22b8636711195c7d76aff27fb4875b4c185029b26b5275cb790e7d1215b10b493cb2717acb2d3eb064d622c1abf0377f4730d5326c0ff25670e2faeb0bc7ceb3f5e124641ecb8d67c7970ab21739229a45d90247dfdc8d29caf29d119385ca68671d47c2c0242f4f01fa8c8865673e0a2ddfea22130626353c1fc88a0c7c4e28ad1a09aef6fc342a5d0a7aba9fa26bb41fd5b3c587db7bcc38a4fe607b3fbc6c67f9a50291b93a46168628c74b1922f63f1fbd286048de594a2ced50fb5d9047c39952183e4371e60296439cfea180d94fd43ec0384b10978197e0dacc3b6b749e13758ee39cc12bed1d1a601f320310eda03fc1d904dffb3c96f956d74fb797c66d01b6969d5f0d1c18ad275ebf9b670a569e2e8b545f8aa95d884deb17a0f8986c7e989a6804c3eabf3cb41303f1d3819f0ad520ea0d883d2513e37eecabb518fc3998dde0d9ae059d4f30c45e9179a89560d1c225b1f48ae559db9208d6fd4fb034d2c642fa5d2c25ee1e51cad10b045f9e72a30bd8a76f738714b5d1b8440164402fbce533f1a70bc1cbdb4ee4f5c437ec56e79b8bb0bb80900dbc37c639461f2f72496ff2e14bb781bb624404e535add7db4a9aba6d55d8e6cc2d28ce436d8a03b7964d0d509b04e62b4cf057ca04bbd93da343ed10ef01cce96c26d64729542ce2db18bf0e9a0227eef34ddf85800827d42f279779b61d78809ddc863f17080208b307b72643a3769ddd7ee813523b6d16324be2363c195de5b8750399249ee2219fb98a9506295cf508b43e9bf2d2010457f08982d82ebda4da5c41a76b463389ec5d436b476f197e0734542ed45fb71c17a6e5e59888fbe7c1be1564c0eac855db035dde9ab2052136e767d672a4f848c756b7eb291a370087f8b533ef9724dd6c3a40ac08da6643c7697db578fafd5850a43039846bfaf46dae312c785aaf0e15a309cf49f2e47a14a05fc56c5f96bab6c14000f58bedcd614fe20a4792d0cadb7d59181b8af4fcf5164b2a7c39001cd7275c5f03dc4d1d5bcbf5810267790693e158fa775312ece4ab449c185710370cc30328ee3cc703bbea3a4ab8432dbe687d624096d3077d37a0d39568731f85b8b1b0b6aafb977369cd1556e5a48f07d6e55581adeeb49ef6f7b8a0a3631b9293883da4fc2fd8916cba9b86705f8b48ed7ecdb7e8bd9e93f0bace5cb76a2b05378b6461c773e80a223a054f77b3f194c935e216636c265422b7219f1b4d81500cf4f9f0b4eccde6a0658773132d775a004d0c4378c65856b2c32bbdd3f4d46ad3f046896cebfea8a3b4cbfdc3be3e2a6dab2634d4d4e66242a21a524ebd67d6b8e2b54ba66edbc5567e8f5e78fb49aa81dab2b800b2f2cbb66e9f73e652999641ed827445d702b026e8cc258093c59a8fffb7dd0ad57f69650fbdb46890f6e2027b7193d9eea3806d54c01211dc77c044c57d380ebd4c55bc441b7e2a55dc104e2366cce4a1e8f6d415af21a6560cf6c9d51c3e6bafae23461b779d45df3852a1d5d9778fdd800f7405dbe750953d9c5e2f1f06405139ee926bdf901244a9a3b509abdcc588b8447d43c19666209c261f1b0a9c02b4def5938ca5daf439cafa2065097b63a4ebde7089eafe01a1fe9e5b50f57cd34b4ae15cf2d734823f47e1cd165678afc675181acfeb7f640c1855557fe775222a215434318ee7f89fae375c92e5fa0082ab34fb9e958e9a5aabd9cbe69550f2adb138ccf3c5b794996660750fd20c4fcb6af04d51e9b9427de0f0bc2f049ab981232af4a1865057c661c2cf4599cb683c09ce03d7ccf285e2d38a1157d0bc716f7cd4c846082903c55b7858b58e583f431f9e411f2041b6a0895d64cb92c620aac25a129f47b88d63fad3c40cdd9f09c546f36089034f32a031258618a66219f091017494119cf46c02b1f67fafe4b7ee9c7a17ed63697dfd281893f78cb256f376282d34d7463c7b1f7406e687314e4a07cb2f8ff9a549af0599d40d30cdea553d419a8119470d18cfeb0e27e78ee6f062cb31b27704ed8c0e55f02bb638f943c131d16e3ccab7e5610c2dfa87be03b0a9301c59e081c12964e04999d47be11977541640afee10e204f62445b4a770af70ebe54834e5b7758e86a96069f07b9950832b5d9e7b34e8e30049fb7e182a518bc2e6cbfca3a74ec8a180efe75ee0ea70b24b58df75f4b95b70e2ad79172204217822f7afe6f647b6807395e127e7f34a51f14513b76f1fa07bfa1545e3bbd0f768ced7a092a788e772e9e58b3f3a648b77720d24629ffb4a304f4cc4dc75d37d124e3036adfdd74ae45d53ba453663bf6629ddb320789980c770c0f0708ce2a91e5aa300ceacefc5526318eaa4e063701e80a4353f596ee4486ecf07fbf5562effc59d7aaa3d99dd7e6be6954577f8e896f8af36bd73a2343ee182952a18d1f662424c014e9b5bb0b41f4caa7c252420fbb3c0817f6d7733808d451576b60a59bd0c8f4260119508da3cd150cc22ceb13854f023e937401ae54df037f7ada6aba4374082ba1240cb4e1d9a472243f338f1dd575d2432f46c8b2348b82962081409721f25e7bbe22a18f8cc5e4e69408e2063af18788e5763e44ed05d325e31550f4b257e4e963d10b389f2a343bba0d09d4520cc8bdc065d9347a96fea5c59b2ac8c77bd7867b7c851f6eabec19056be2dee2eea9a4b0b82b5a4caebb679fd3765e08d0edfeef3cd7f440b4b1a9e8f6fd4bbe52ee65608c76f2606f2b5bf29f161ac94d162543bf7073af7af7344d7e6b2dc1f02d88a159368b145dd1cad271e9a23cc5bee07ed60bd907192ad85eb6ffe4957864aeb7f80b6b8f5cdab16ab4e0818179cd580cffac02c5cf901328b51aa01bd0fba9e87e4ddeb089df0452617c72e1d54380bc4da67f430cf7811effac7795446fe6bc44f1c8fe6006c876b3b79c18d216008c763d3b4cb69e66582bfe897099d6478bd9d53e4449d18af542a4707dfd8473fb3ca5b9427b336af08c1d034822e6837a60111092384946d2142fcc8c7f08b6254f715b21c1952a0c6d665e572ebf19421d0d86683f545b7a450deb1644696e1a757d480093112109cb786cc2ac12984ccf2d506860e5646ec3e2c4556736e0dc41cb444beefa0a7fbb9ed7784fecbab737e564315158ffa985556bcd0096a6705ab1da8e5c475959b5e64ec6fd955f1aa673f44c2cf163cad627dfef4bd495005b02f3e8bd5d63ed591f308dfbe32673de372abd8d9336e9544b00608096df53ea171b70a00073c71259c98145d79c8241390cc6931a12692fde6768a4b2f7404766c8ea08e66ab7f6700eae019c7f9055228a369c613c6f46e1a90f7703cf82f8acda191c702768407316aabe2724643f05301174b58378e67471a27151e61d0a3f47bd09159c07b1f4f5280e2bb7edfe23cbe65576f0ea272c4a67ffc09ab6bf538385a8dc1cd3efb83682678421f2eab7f04771cb66b7c19a29dc30cded3eb74407194744f710898d6aac2e2d70c86ac949abdb0d2ff2bcf9d3332dd7b31794fbf1636dc0f89f6f7283dffcf0b6fee740e4301b7543fe13d827d18ff3ba92143064376caee4da524c62955adcf87280d82d55a60ae456c1b6f11456f35d9ba0d73f0f929824d5c8a0c543b7a8a735898c86babda8db3061b9112bb4676f667f563a323df17e77e41f0042324aed9759333408b2395520f5442264623e8be5ebdb8c4ab70958646c773344613b7621067d00d21344f7260ecac56da691fc1039859d415a0468dc56c3149b6d0a27bf9177680a0ad3e2107def002b512a734f7a38b557d57207911f3bba479c021f1dddf57ee2f7cddd8e93fcec408925ccc9598e6027cb2cb95e57858f95932fce1ef839706d43bdd07ba565c20075bd8695a24a0d25cd8b0d4d6b1eff8531d1bc9cf944ea18884523511284d9baea900fb200358490059079d1895773a9017e3dd564da4f33358a4fcea7be7efc4334e78715e3b18057b6fc106da965a20b706778141224e52958c420653923e45d5d36d81e65d6c5d5fcc6e815c7daca4076eb2a8e8861f628eec922cc704483798f3dd28380aecaa04db66be435cc1c14e2bfed6cfd719fb006d71e48069081e703fdd5e8e6e4f72ab23bf3b7a76a31cef0968deb806677cd749c5f03269602aaa4540a9358d82e9b173cc48fe89daa07d04c02acae6ff6297dd177f62d110e9e0d8aa87a0375ab48510db5c49e1c658aaeb98d01ecbceaf00c0b19b6f30b44b77d3112bd5e80c78b5d091b99d664f32e1efe558dbc2734b9f26ad25be375851faf7a8edc2f012a56a86a62b406038d8323623966fe0f25e67f0e9ba76fc8004a96a0023f9a6a083f65aa82ba717a18b09b7cb9f9270254742c9fdbc0dd4f0b54f42b73ece360d360672dd6ea4b0c5a6e54dd08d49accd5c41f8234c0