Security Research
CVE-2023-4357 Chrome LibXSLT XEE: The XML External Entity Surface Browsers Forgot
Thinking
2023-08-22
6 min read
Research Dossier
#Vulnerability Analysis#Code Audit#Web Security
WebKit-based browsers like Chrome ship LibXSLT as their default XSL engine, but its document() function still allows loading external entities — so file:// resources outside the sandbox quietly get read. This is a browser-side XEE writeup built around a consistency gap.
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a4d4b6d4ade7253d06d61bf923572a6b8c253d117e8b63642be9ad8c68eaee7d4a02592bcdbd3155abcc6a953135deec61ed6729ad92ae056a76758bfc9dbe3a6985cd89376c1f13f12449c8ad070d33d3310e91c01c598480d25bd192afc44062658c3ce4cb8c4a85130a6c5cbb02df0a5ed672c51d6f85ca44a51f4d58a86cac85ead5016580cde3e0e37fbb897521537c5f1269ae6fb3113cfd098de2e59f218f1b77a03aab594d346e0f663ba8295745ee447d476c972255c0e3c86f7ae8bfa60a1488288ba9c760ba6b8bdb8dfeeb61ba84c3d75b4ddff864a44c7e49df7e71e48258db461bfe68103a181e75153efbb9c6d9e875b6d8c31d339dc9af1b2d4c9345f2cc4fcb735f9fc841e4bcb913b557d03523169cf76c99027bfacbe3202894cf6bda9a58aa63e2788351fde04338d133a626e6f7adddfefceea3aff19bcc4f5b1851c4c2e1114dbdfc8f44ead2115266e89a73b437ecc6e77d5b6b3ad6da653782f4f902e16b3d9db1b84074682bf3d7189a81a0103d97ba608f0f0578f6f0887f6b28b7c0ff80770d66366238cfcdb20a1bba76dfaafb1c615d373124acc8b5e3178361e80873c69c4c49c42426d844702dd1b2494bee89ed27550103bac4c2d1b8c6cf4dcf72db0a64059214ecb4787433b6fec4a2bdc8597f248075138789bf35d61787a8159e09d5bada5f9a8654391d4084d5b89fd90518368f0cba37c8b255ccc1558a58bb09cac9fb4dcb342b65acb8aeef3aa8b6bd31647eec69478a5c0728ea58451423cef300f62c7e642e445c2b2a610dffd09677dff21b7eac692aea7c8ef0b7ea0f909e73c938fb11a1dea6ee0af1e8a0db67e6a711381b508876390509cc6e240e8aa11ed1f726fb2f18b630a4de8172442c477ccf5e3b0b0a20ee95fa9f6e2aa8ee98bf782739530fde8c6d1423c46b13c2d563640ee33ef6eca9941ece74899aecafb049a927b45973be671a9a35d74d85968a9a4842412940e44ab89dd26f81838f4da1d10f6c127dcc584e2f6cab91d85c48644d0a8d5c0c2146103308a485e495003c421fcb6a3984db995b9dd44958a89bbc18d9befe614fe34378af726566e67458f74e8a8ce8a7afe15d03defccd392ef2fc1745c4858e5a0137cf5f1c7a95ffa9ac295e3ce36fd174debfa7fb23f7a537654d8f272f3f9de8540bf88c9a196638a9832f6a377beaf614cbc263be4316236806df49939e020193a680c95d46d7e3197e763d5fb4cc9a6d36c9f7cd41274f5ca2d2464f330135383f75430c5534021dc465fade316bdbfec54ca403e44a38d05c298f5f89b49ceffc025361c4f8fb0988947e1f139d21106fa806a02b3b7474610e2e8aba1f0f9019a42573645e4adab0b215560f9044825503d13ebf60cbcf9bc9f2716d198732cca0dc7826546cf7f4cd5f2120f9243ab544c047912453a70b2d0c2ab2c54b32e68829e788cea29db0c34cb66204e91e9f98ad2356e1be5536502d642293848a777e951303ebab6e58ebe4e21ee873ed6d28e3e144299a25382889291771ad5731c6d6296e92346a0c6558f694601bd73fce5e69ee89691abeba10e625bcdff8ef0fe1fabf790009213cc2c972bdb1823d437c774a4ed243999d09349b687355eca5a63cc992b861dff623b5f044f743feec47bd17824f2ecbc2bb5c96e5870753eec67ab1f9bea3c872a14d6499e66df263f4d4d09e1c49e51a45bfbc791b9a57ed0d89c846a3128c09a5630d3fc6a75b78436e103f34882034ad0de569c96586e83f7c3cefd0c2f1456408323ebe1b4363f88b47e99f154ae2dfebb6e7c38195cfd656c6c4fd7a12e2e82483eb7c5e2ad830dbd11a05e10e8d453af51abaa960d8321b5644c3bc9512b56919470f635a20c7b9172379b04e29586a64e8f5b2562369376788119d7817ea74f1ff45510453b12e86d5df0dd0823c738f96d896320af22f8a96c999e7af4d04992390d1640cae819c6fbe5f491ea5523c0b9f03ab7ec3082026dd7c27b19e8eac43d3d2001109f4e39faea38073dd389a235181dc5553c41f7ba974ddac992c2d262baa196e0c0c7b729af0d06902457043325a31cec9195173188e81d464963360407a89007da9ca513def736e0c36d8180e485691cdc4a1571f56d70306d1ab3d345e644609e07a0b268326d614a5be40b677740d978305de7d7b92cd83c5aa49edf6a7d154fc1965ef13203ecd157b3aa24f4dd189a1da127bd9b7daace0ad8815a02188d9c1a8d26fd822ebd2f3f238aa347c60ce4627c9b0405b6c666f962b9a6b5ba0f22063a59a83b55f03027cc144b3d868713b283e6bc6bc656ce2e53df5bc308768214e7c55a143fbfa65b21cdf2ee8b4ef61f77787fa671859681ac09d6c21c1e7da4e90dba2047cb2f0d1ec2f0d2fe45fead299c114b9adb3059476c3d1e8fc670d20b9d30416483c10d7e7d3af877b8a8872de3bd08ecb569437ab7e0c128c3ff98932156ca086d37bf0405b64307b9f31b33a6a4486224a051cf757c5716405f4cdbe5eb20a0725b129774d7aa5f65e33d528378d3c4561c9b482a7d83d578156801df3748d969016b514d52e096d50b14dbc8ce526c8934d32859ce92b5ab1bd39958cddc5485800bd548f5f67d5725c002e6b69e3c5e39b74e6ba6a7393b703949f5d54ffd52c8a1e02caf6fb1004ca9bdca0a0e61d82633e08641668a29f33fe12836aa04348fa38c8b623c2d4cfc0f0002eb28c455596f95d736226d062233773b2f5153669e7a692f3d32114c20b98800df25cf009b05e5a700b16b04a36a6bb1696f30840e89b8e4eacedc45afaf3100c3f7bab544df446c405ebcf1d661fd7b2b9bbb78c0354a1464711be0d0da919705a22b4f26360559b1e03e57abc8610e445d1209944949b1ad8633dd07c0a29a415b0f4ea0bd6c8521c8a2f47e3c2f920c1598230ce7ea44266d54f06e5fe56adede91a0247cc2e71932d068bd06597a16193b36c38218ea28c6d7214f909f8bb314ac199091023454418a5ab8baf50410a4ccd4860b8369609d74066a3c5ee962d7be6b769c4402d4d50755747505e1efcec854db9d114d599258d3bf153ef42f9966cfaa484d07176275c5aeb4c2913c2b9cf002fc2916df04da6f2d717f031cf744089b0271d81c6c93d3ec953886a3416a96b123e3563a685983d248794b331579447bd1178392dba9829891eab99efd65a5f9699176c217e4f9cb1ce4967e0f46e029b0d64444fcec998fe16203109be173f0083097288a8fe3f4bcef651f85cba7c08311cbc7f9f7e4d274890b63b7ed82330384bd607159086c248c762fe78b5a3b3223ada1f4b52e2c5014bfadd8e8f7e260e01c656e8b72422dd88329b48155bec513b3b4d4761082c6e16e15f1f9cbe1146baa7e2d9bbc5aebd1b04356f7b69abf7f91e3212b26bfde2a338ce232e78df7d051a3063b8dabc85ca5a9359d291c57daed2c97cc9790eaf9b541a84c2c86974ef40a5cce3d268f0535bec13c26ef777ba2c3290b3933799dcfa2b5917ea0680cac30a821a8987c474365a3eb44c5cf612ec1e21c0c20bb957282060bdfa146c0180d8b79f4f68514dbe929653bba5c8eca38434f15cadd296391a901cf2825ef6d38bdda748bee550c9ab274edfa9c7aa9792982b42c33d60a56da7a9ac103641f8b16b54faabdd9a27602896ddc9a5654b2937f84042052b33ff608025d0c6df8d0c757275f7eb78367837841c57743d5db67ee2eef7cfbd9bf03b8d51bef59212301188a281dfd66fada4aea9ef61dd3ec9b49a2d9fe97914e23ed82707eefb3f9d7f9b1e7331477c54aea1ad223f960b283243d88f6514aecf2737f08dca3bfb61c785a9f02d89399f5fd7ac50d4a31116427c567e15e005c31fb96018649f03d29f968293eb24639228c6223493f0c353b25a16f6f6a02a63dbec55654f8d543132e426423a4876cd68c1d29b3283d2865c935cc8a02342b079f35f95efaf49f26a2e2b1ed7cd541e30cfafff1e89edceb282bbaf59415fa6f8a4148d0f96a191d516fd4e12538a954887a97ccadff0256193a8dc8a54e5e3d2fbca9f03958c944e38c946b8aa06dea079c7379500a6b52144192f96e09efd5e09089ce594237bd46977ae040e4fb95e82999990370b0a7e2750c7ca9e20d19cf14959c201310a90501352d90df4ac27685a3b5e4168387ff161494e32d30ce6130b589f83a1b18dd0596be2b7ed9f05f7c14fa96b12dc4bbd331551d03970b07feb470b0fc349a5bc4bc9fa1d9575224c7d2b623d277a57fc8cff1dddd5bf9597ae0892dfd8148bceab550f07fea7966414ddc677f439ad60918950188a4f8fb924f39e8dc583e5aa68fe3c3bd7f264db1be4cfd88a0faa7503a1efcbf2012e86ba08ba26fa0e2828ab6ef36c97ce8cd069509b84ce5b37dfbbfda36420bfe6a804c2a7ffcbcb67caf53756f35619c2cb074b13dd5f5526c27ad1a3beb6b9b4fe1719c9425ef815bcc79c805a186917442ab4272cf6a851c0fe33d718b720a7b1ac93ea2ced9edad89d81e2c945f5c9f49a8776a37e379dbbeeb1aa99d62fa167d3814cbda43d261623e2e3e14953813f7eab9088ad9e29e619f5fb824b914e5848a42a43cb8ce28e595f0817ee5342a0588be08a41489e9a8d9b1988f1e36d78d0a8465691706e870df3c2239aaabd79e4d11d25377e9d40776f50a798d7078fae15c2e6864878eada5d6caf61e2d8e70be5a534f4cb0d9d81ee7ed6edaead6654cb741c7d4f0a15b2aeed2fc4d6fbc7d5f392fa0861f1da1fbb01237cccd4299de40c8e8a56933418c911473d6548400f384464d7acbd6c5db51864e44f2b403a3695f9db7981e11fff28466c81e712ffcb058c37db4e403409fec4859db15058f15597977af84d709687c0d5221ba4959e7788d7473d5c143415bfbfe3f81b74012820aece7b5530faefe882a62dfd1f228be8e77e7a5e5f3df6cd349d443712639e2e8d3c14ec489a0fcf5e74f439efbce7aff0660ed8ae26f9161f83d66fa21b5cd3c2a174a4563b0ad1318781d20689d93946c9faf519d803db2b77b5e0307e0722c64dd670775a2683a7312d99b4bfae5013961983ac5b851ee88722ff5bed28c4f2c86d52a81c0c9aaa41bd6fb3b383aa941c558ea534b3af82a1237e85fac5281b8285222e02dacb07e2a3690a4756754f6d39323e32abda94d3d032f5eb1003ae431b2740decfc710dbe863ba854a71e1b823a9d9f9c9bf248a4b5074f99b97f1feb69bb7559cf898330810ef50fbc783df2345c365989e34d00d15cf48b676a9557532d07ea939e1d4a4dda471c6c9acdaa23360e3ad71cbe8c8f0ebe9c2a8d3d9f941dde41bd643748ae40c4c6b1950d868ea82488570567246352d2f529f3834f8f076531e1f2d899ac3d21f977f5837c296005a865bd1f4953deb6c1a14f5a54263e1e8ff7c6c4f81ac4203b69b5e341ce0fe112c42ba83c0646a6f16585153466840fcaac9f5893666d113446c8511aaa883e4fc391f4ffa3b28686c9af3c8f217c50c12cf3505e5c61a75323df285c577b0d0f8f48241358cb63423fd3172e22482c69e1f9cb456ce156fef0f8ebef892f333790fa1daa5e3164263ffcb556a8a2879450ea5877a8fad8e5fc32d8ac80a605bbe1f4966e2d75a73eb23c1d231085a0b0ff005c7cb403c030d8fc420da8171be965381796a551cd8fd3a4591c1821a62a9a6f8227922288996368224d076b050bd63dab448151b27126f4c5dc079c07cd3bd4027a3c3b0b2d078ca05ba2a2b240b3081ff2db863e2700dd25b65236a414fec31b795f185f8e9e6f174f6e0517934d50a5cfb43357d0dbe72ba89dc89d40c6e3d0590d706716d96663b7f7dba72f511c98d5bbc4df5f0739704d31823da712a66166c05be43878c48e2cdfbbadf8cf2d5b7ea236ab54ec167f96cc5e6d95c975f4117a5d1f7cc085291296fe99fd2017103cdde76a28b7e8ea6c4d836c7ec39ca1362ab8822709ea3899810f13b543e84b4cf6ea067a41c1198e8e4dd6307f490c0c4567a62565ca5db70f59be07155e06ad5dc8f03a81cb2d8badf3ed001467364418ef05091165ba13ed1e87387bc7c8fbbeabbf99eadc721f2078695f7e8c447ca1b1a04033d1f6592d1d58656df25d2a90a2e4ef0b0a4237131f99115e348bef394ac9bfd0c8dd3558e6a5baaac4371665936d9709ef177ba6edc1b696fabdb274e7087e6c56bd883c9da17bd603ae8f45c1e91c075d1db5f351e4bd6d733af899b1beccf06117cf7c3f5f2da1936068c3f170069f76e1c031ff466bbcbc4a34f153edb91a589b572dc4fc2864e01dec716bfb2e8c819a81231e95771d1dd7e85b23e0d5682af637c1de7df723b1c5ec20ef27e20dd28865b44f6601f3d8756982ce40265adb768b80ba316c55069705e0de3ebeec3676d7f6e829fbb06d763ed85a60b76075adf33a32f8cdd2bc1f8be8835c2920bd02a9e0ef1c0d0ee2adf9dee09c380140fdd8825d9aa352d85a0aba8cdea19ae89134bd0603a501a93f5edfe8e69c8c457167da3141a87d2e85e87980187622587fdce9ac7e3724f3dc2daa283244334adeea2b4e7feb37d207eb90094faa99730b7770d6f37834437bcdb2a5ac9bb6fe52c17821fcc92463474031dfa3913fc37743b2fefa74c8bd0451ed114b88ba42d81c84d5354b8263e1327d1d98b90765ad4ef29f86d0270d81b4e455ff5414ae895bf5bb72baef600efaa1d5bde1f95407e84f0197a5f8be66194984a0b423b0612f0e167960d0251df6b65902d489a1867a36aee81c008c482dd37c2a3f12f918e6a62beb9def87fac5483a640b147410a865756b5aa53c4a13fcae48e58206fedef99fd7bcd30d8c25a5bb55eb863d8d631724ece129264922b25394bb7be662e527d1df6ac8aa6926b5e1d1b31d36d47b2093f9fa0934e040634897db65a072895a9945ab3868a4d5fde6541d911f47c0b009d834fb7f1c2b28a64374539f6e3b960617aa172f4749858625fd1027943422a4291f3a5ecbdbe5976a37513fc26f869c1a6c6856d2561fa1d69a99f96394a293433643d207b33766948908628cb00c2a664e89e4e1436de7531511207653fb1d7b27bf5f6272e36414eb067c863505f8909fe624d9afb41cbb54dc76318918c67d707ab6f325addcd1f1dfb2011183df6123494199820a64bb3fafb5845796809cd9fc4a6c0f8950283dfd284c9d077cb6f299b1bd5643908a260b7d453d82e85ebd646bd37bb6343dc1ea3feb940b8f54b1b449016a475332e9e68bbaf74dc92306044adbd8e3ee008dee0c2b742398351b165958a51915aaa4c01942da7891b446964e6c6dce546953a73900cd52f0bc5917ca569c89fea4703a2e9a7b781fb230013e7c9c9302f51a3bd2d25c059b5e066bb91478fc30ac140f998b9a60936c13351bfc0afec059acd084cd889d274da1f9b82a3beda3e494388307d9787763e4de8a4c7d4c9e21f871e8b59543861b7efcace3931418af2356180c70dd96273d72701ea0c6241d8519821058f57abdc27fe76b532171e328e10790cf19c2bc130e0d0c8eb4d7f4fe6bda62620b4df2faaf4bfc502cf785670b89eb2516244111cca24585cdfa2b317958bdb5cbcd015c97560fb2aff86c6bbe5b69f2509be0a733f45ac165e91af323085cb7c13283e0adeb35317d517b72ffcfec6328dc85dacf336384a742767f7cb316cd6f7e7c05998c24b6f642571e29c6bbaef6edc3a980cfafa7ae1e4f58dc2396a37f50851cb0dd59bb6e65016fc61374d96582cfee922a2ae8a18affb6971f06e6824626d98eefe1d66503b770c695602b16405a4a14398ea9523d1781dcf37988f93f0b94bbd75711cddd89284baf725a879bebff5c91f2e1a7a6bf3c38a3482d7e00a80ef0ec9a798ed4f5313d35878385decbca3c6ece16a67fbd50b29af74f217f2f481247316b27b7deb18bf2acc67c0683a82f5ac38d313480e05de0ed4e42265759892c20bafed2f843808bc05f32b9cca47731c34e911b77c931fe14584b1939db7d59539356f97828640ecc0ecf7794e1d3aa0fe853de21e9eff2a96dcecceedcbd6d9ef2ff9073c7bfbca89fd15703a05cb60f9afb3fd9e9532af0a4913c4100bca21cfb02b6cf51668eaf8dc0fc57196efc4d115d5114735546af44de9ad22e41b79f6eeaa24d609febb20d163b3ef2cdcb7d8b3a6d5a9ce3c0d4b85c7c8abad5dd01005b17e7cc7bc82f49c2ba92fa465f6e6dfb603b46795c1b9b25ef4ad9636e1fc5fab826e582f550ed21d23ec90ca32f5a9385ebcc33af353b65e03fe79bd132862ade5b3735bb1b74b290efd0d9bf5080cfd4bac83e1f869ca8fedd6bd9c069b77129e62b8082e8849f50782977978e181844887030fa05c401fd2b524118bc9f49f31b87c4461fadd162ae4a76cee05e6a8a1eaf816e7bc24b55dca70c2b513da213b4245d43b1c9d4566edce3ad7deb552f4bf389f8cd8972113b9b0f6e28521c273b140b4fff4147909fb0b255daa25729b1723be2333b21a1fb237b2cbb32deda4b2f4210bcba858971432961f338f789a26527b4d1cd3959a06cd5341433b492d13fa9af9eca87211c1ea7d3562a8f45a6a9779ac36791d89c79325f83afe4f74facccb43833dbf274ea48ce3c737095ea88be5704ab098f2f54d6941601fb17671bb554155278ba52e6d434c918d8d33e834594a095ba3acdc677971a767759c2fe1cc30c435ec80d4d4af34df0e7c14b79425c8337b0842babc289eecb65673fdf6dcbba6222d68694ecaff88362f35e2a4fc8fa5e110ba068db2b7bdaaec63a504e15929542ee5f2d29649bb4fa8e0d3db7f9f192f1b82bd647f5ed02bf09f2374b4a5d8860b8de892afca914ca0c4103454fa2e80a1121a7d21692c9be2180e94d044ef46c6854d6f132a3fefc7b5b452ef2d42904ab81bafd1c9a717a77231078e4b9376944cfdabc937950644d85d5c35c74e0a73d1ed8588d3c021e1e5e266b93cffedf011f9a1d6d994c9a76844cceed2fdc9c5f93838a1a78d5f383f1d221bb4fd5408f4b1e0c25d3b6369325b7b808fd386cd1adda85fd4a70b0dac17d8c603435863094e03c1e43d0220846bd9dd351e233006ae96d145fce05f851db00af5ec7f30998a62a439700c0e3fbe09001600e9ce452c541fe21cf0a8ba451d5a73c77e7fa1fc0bfd515489827c2fd55af9be3ecbd62611bd2e31df024d4f1646cc75b9acffb290409c28cec39eb7bd3d4637377f98ca10b64f22e0e4127ca05eaa85db3a71d10fe07387c0873f643bdb428f63b1e4a5bdec6d31a43a9eb71500936111e5757e9434da985398d862ec23802bdb1d4c564321424ff59cccba514588f85665b4631b9fc1bd12be7526954ee4264acba2bb4636b6c310cd72ebb92f661d4d03158e2ad8aef633fc855648a27439cd9ae620ac33f19ce27b4969a77be133c7737d5356a785a93807ac1f4313e7c941ba29d4a0ac2c4517266460606b47c6f137393ab1cdc6190407db6e35cb3147d5c0f243fda5f8547c45f0a40c89b0d58f0843339746a2b21e8a9a71f78fa7e9eb4f25d3e99f3047ac5002ed138bfd6fa4761a1e7c17ebc0dc18ed64e774390bb1e7969681b3a442d55671a3aacd9c0ecd642793a60f8581d4a0a55d437c7d9d3f707edcf42c266b9803b947cf836c5a72de3a358ebed66c6dfbfea6ad983590a8a0b159230e7f398058092818d520fc5bca1c0f7ce88f4e42be8468700f6afb74644f4d55e3a847f3214e904b3e2aa46417a89b5bdfe5981683a2b6775acc93c3d9e3946c99df877e44e5f7c446aeb55866ee0e353e33ad850d9b01f06c3f246ee7626e7b34d561073a1707fbb4c21b07920a884659d299720b4f79322a993cef1fc996b269858567237bb6872c415de834133cd582fcba972c59fbce6f8791a59ce921083b447a6d2d36fc70cce07d6f8a2a5bfd64ebf25028edfaf786cc93f108b7648f546371f646f1c13e28358d2306d92c036f6c3b172086c644402952e7d6827d92ff16b5d857aec042c60e682127992e11dee43e05c9420e34198b496b1f5787cfe695c952c74dbbaca518921bf72b7b8b5d5c83704e43f15a2021e612d21c82b2f2b3b1327db26bca18e0926b5452b97bb0c84bf84145fb5a70539b97adabae73125083fc3cacb713765d9e3d539ca2e75fc4fc0091741867731e911ba1fac2d32249806d66a81bac17b5a9b606458bbb7f79f8e41b95aefc3070e7e1f814549824dfeb5acf0e625d38f4740dd12f75d9c8460acf9398e8b618a2b30e1bd75f0827e0564a1a278835c8e6df52832d1be50c36896cf5b40dc599e7a1f8bb3f474c67de0faee87608187ad82c5a68de6daef5b6ee1cd85fc9853fd45d10d7b657a0940736ea5b50700377231f708a09dde3bfc1d8e53f6a9c39456879ae05291ecc18f7d7579469969d3d55b980c85cf181e67f7801e1f2352e064dd3827c9112621fa020b07ce07f929a25ef3c43d2c3f38e5b723100de668a2a415e526c806129d4236e5c0f0c6bc545c9365671e6f24a3090b9b377d5369ede86e5dd723ded2669377aec8543115fc7afb6566d2d6717f0f93daea0bedc5d99f145dc5dd25ee2f216d104a21b89708ac4cbf8f17f63f5222f1ee6092c3d648981ab6919b97098833c37303bd29fbd7b47078f91c90f816c169555d2970c0010804e07988b4aa312d47545624baef20c21437642574d0434ea00dd6899485b7a59eb66c50c8f4ba09f147ba4c0f0e144db261a92f9e78bfd0ffd3c64f3d96129aacb041faf69e55dbc0d70b68ce61140c0902111f2df3e626330ab561cbb3921652d033e421478767dba045c3f7c78b8c601b8e562331b854a0583ea72193574921a3be31b86efa94eae773fd15229f3b9ab0bb5d344dd0824df31f34d78cf8b72a85ec53db44e2233e56b9bdc2c68ced34057031d0017856dbac78c0e2aa8d2ae406d3884a4162c764fac435d4fee9ae90597a4e37cbb5b79efb758d1edecb294dbf3c606047e69e6c04c8af627a3352d42ec073c58d8a738662e71d811a2b4b50b4eea98a0d4580f40bd741301bcc562255cdc454e2729a1d2cacfa0630e014cc1bfcd154fcd38ed1d8510432f9a7a04af061de59935de3efe43744938bb2449bfe5d4a458677972b058c46d973033698a9806a9b1d327d45a9023f60a26ec2cbac0d498fdb3d50de4103af19b80fb7f7a0bd4309d67ed0313fba411f1f46ed10b329079656aec5b079d6810c2bdcf76c5302995e3f7d19f36d5af74cfc61217de1b6ee2fc144028fcdafff9f1f4e3a13d5002a5a760d6d367421895a1e3a024ddb74bf1b6aeeabc9f0ebe36d940428c77ff62773c09bf9e5f1fc00c173d44fa3863be7ee13f5e30750dcceb3785bb4820ca145dd8c49732f2a62290e5ed7ac141b6075a77cc56a2b6eb906d7eb8f9f8586b854a9ebb60e0f1c48736c04d0ef4f8439aab90477de720e813d1b4b5f53a03d0aacd9e181745603be4975f9af052ef635410bbcd2ffae5e635b93c96b217f1cbef6c48874abdf99b1add0c05df6336310fbed3605037e4c8689d930f9fdfc07b451cdf9fe042f6353bedc179bd73b3b74169767cb9991e054f35e19466335c1e952f4a1c815537cdde7809bc6b50300c05c7c1270e7f665e0426bc184b5175a0417a54097d5306ec0c4360295c76660a549e07295bd76367d2be118255d53a593872ff7a7bdcbbcf11672be3d446c0450fbaf01632a598d7780ae8fdb673f57d32050ff7a4d83200ed0b9be3651de9ae954a064316b5ae4a88f78f5352bb35ab4d2ae07acad237c7fe0ed5de516713bde2ab5d76f60b1b75cbe6f93c69942766b09f8e72e14f484960cf98ce42ef521b2bf40c7fc6534fcd850b929799492e16cf9654102733de7765a4aff7405b2ec5e10aa74c8bc4736a8026b73fa67b06f814dc4b79370aa2a4056849e5c9bfa4dd15147c6a16667054e4996b3f7e310323546efd9865e43c76b0153fc724373c55cb54549156e5b5a6724628f2f3e87c98ec4d33ebe027285165ee8f98f9bf118187f3d5199faaa87e8b2e8b36f2f6a7be49228470e28f8224d16384ea61b74407194750ec11da9665e3346561870ee96e81db0630a7ffb0a67b2cd5a81797f2bf6d39d1bddd6d3785d8a8ecb5fbf657ee7d127e4bfe09d827c68ff0a7825a30642b72ebffdb076c0fa373d2bc5888da3d19b315e4025459455d4feb508aedc138159480289ad7a68059adb5ad29d99790eef2bac7302fea042eb46769767d5a2d7b37ff387de803000c2443e0c21c313b58e1354575e14e776b68768bf2eac3834cae0d487b293a58205d1efffab7997dd17bfb1747aea91b6b