安全研究
CVE-2025-0282 Ivanti Connect Secure 认证前栈溢出 RCE:bufferoverflow 在 VPN 网关的复现
Thinking
2025-01-15
3 分钟阅读
研究档案
#漏洞分析#代码审计#网络攻击
Ivanti Connect Secure 把认证前的 welcome.cgi 端点直接暴露在公网,且对请求参数没有长度校验——攻击者用 500 个 A 填满栈缓冲,再用 system() 的地址覆盖返回地址,无需任何凭证就能在 VPN 网关上执行任意命令。
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a47062292625ea7240d146fb061f3975a6253d117e97272d7df5aa897fb9fe2c09034f658aae2645a68076992d7d9de07ae63e2fac88f85e475412988dfbc9227685cd822878cabe692473caa9040a7a95000e928e355392f8d272e6c7bccd0ce88e4d72ac8f885c905b166312b657ce0c05ca74c02778c0c54bf02b6a3bff6daf85f0d501259782a3e066ad340a92fed593b78ee92ac565b0ba06e50d360416fa3c9fd17fbe4b8ac8e7a39f92a11fc69729e05a624725d86bda2f004ad7e16c563d83e079a068584aad1de05c30441931e5733348149ec80b6ae76c8bfdc851b7f11e009727d6ef2fe8daacd8979686c64239163e799d041d70c8a2636638cbf6088f4bad987dcf35121f03be21487d86548255b985d36406e468ddf43e512bfbf61e2afbb98153b67ae2398b2bbc60abed50b24bac396c242d197c0d3e1c2f5d65a6bbdab3224b0ac8c0612b49cb28a41042033334c97d870b4a038614584cadc27038ee8ff217fd165781a4a3261b6f3ef2c2088f97b51b2896af619a06107123043b1e7d5bc5b23753ba8caee9e7d8070841d99b3e955c521dd9af94ffe3d237060d6d8b79ec33c7f20d3ddebb41ad811fc080f45746a6d9341374d1868195050e173821444c8e6fd0c7052050cb4e8fe2666877ffa8d8eeb5c05c3225c66e00d48fb226c60c97e4088f1f9db9c45391c0186863058997f4d09a4e1a34ed1fba7484f3069fdc4b900ee80fc7daeb56db783674baf0a3fc3ba5f7f1605374ac7549865c057ea782dcf5f57f73c76d88baffb858537f7d3671ff93da368ca1067ce26830f93d9fffbeb412c2c8648128f11ea7d8a0b746a0cba0944fe0bd483f1457cf2c50111acd6d3e4bbbbd5097d12dfd6026b67ff1ff8534730e607008b0cb83fce66f4e41e45c6ba4fddaa66a6d2a0f4096ef710417c8432284d87f6a08ad3beaa0e29d1ad9299eddf7ea34826cbc7ebcb606d3c408b700f6114b052895c2919db057cb514c428e5e0247edbdc1593999b32fd68de7b22a4f53a9acf982e606cdf2a78deda2ea17150a4ccd88e2911882bd6b2419892e87686690de944884fb69939e6afebd2eba85fd23cf31fc5a9d85373f52a06013ddf0de390cfdf65664c4949895f4cc478feee65b332119a3fdc63be3198f525105e82cc3a4203533c06a454c9dbd0640f997cc013438a18667323575b4f64887d464a25e596d240a9b51c2e0470cd1eacf8a0a4b8d804f606a7916e2ccd93d3f89a4930f34595cfa91464928493a2528784300562f045b8a3a929b7d69c53b60df6dab225951fc7374d34487a8e4aaaf47123387b0f65b83896d121c90220670b71a992b31315c5c2e359bfb1848cb3ee76a3d301b048eb2b09991c659b040d2e707e622854b3b444f0ea2251b8d3cd6a4dc75281579e7eed1526a02f41c3ba302d3579b350eb50022062bb8801624f29160637b253f581558bc7ae5de2c9b4b6962f3a4df893965cde6bda279131d8ba1c54341afe92bc37a0268c965f932daa82a3386f96ea1e4cd05c3cab76abfba557daea07fa6a1d1f2cc2d17abed5df032c8d53106afd37840f0aa01d5bc85efbf360525ced98fc9df42019b365933f5a8a7f1c7a5528c6401998fc36a6242ecb5bb2fc1dd2bf5523cdf427ab77338fee457945d934c6a42276cd03f4823a7f899e662b4f8bdb9c7c665aff57938b84eee710e3517c9b52dd4ad2b73809318fe27dd52459a6ed873fb3397f58a444ddb87afeadafef364c16d9b37c8204e831661eabdb21b7a413a98efcfd2b259bbcfae744dae3830b5aeb79ceaacb188f8dc8191569e97ad6f1fe6ee75cdfb390872c83080cb075baf098c537ffb1af9a522d528025607d5f8d351aa24073d5a2f162082e1436637b61c651b7460e8e9fa063269372cd54c9a794cba11a5ba481d4511e86dc0824c8e5d03c688466816cb6e11fc33f2d39adca6fd0e4c94719bcc7701af81927fa6405566e001794acd40e373910f6763937329ac99d6e045949f83f9fb71173b26505ef079c713e0910946eafd33eb3a837680ed8576336f64e4572b4f587b01c3f7cc6d47c59ca3085f6d82cf15024616908bdf30d80f714622980af05d2e763fac23732a45b6525b57589cf1b7e76b0c10ec252ed18d32241b504f02fcf8d28645f30395506ac152d2d1f24505f43ba2e07a4853233aa0273e5c069115cfe601c9a9d645575f059b1ccf1e23642acffb044f1c03292148ea2ca15d506854569001a43f0e3c66e623deb0f218a4ac6345ceb683f6b97e8459cc925628a18a50004d7cc3acdbc664af3d09a3e19bcab9ad4c3b90dd7508ec741adc0eb6dcd4a4a7278670f54da7119434e1bbffed00d6a8d7507b32eace2a10a9d24a6928ea374121ec9d3a70236ae5d8b97c8b60174648da323b59f917a00e417973acd3e23f67ce9d87d18c4b0645296023afa9428e6dc2d94b983db460b588da7ff42458f7d98b14320bf719b108253d7c8e2fd8742e44ca631e5c41f252933d3d02f2d5b001f10f1d20b201250829e0b70c6c92613094761c28c2aecda7df7e1af84b824fb627c8d7c249b50a9b2211690ea01cf19deb7793f81f71cd91a7640ef4ac3dc7cedbc50b159624f21a87ba55a8948be8e83ba3d9b58812a7f82f3f91a962d7d75052e7c9608e4c4fb3ebf9424199de9df2ffea599a2c2901280674f1c924f515c435358bab32db1427fc7b503406a42c36a7c00f69c67b818ae0d549206078e25d188fe4ec6270773c0bdf8137ca1b71cbb174c636c20ad1e8f557975d3fa0b416a3f71452f39d854e78713ed822109bc68ef84fbb02ac1353e64e46dbfe99096337695d06dbefae544d1e00cbe76ff7bf1b79a5e16872589c110cf47da78a4af243d410931ad29e06c77670cb7c466ca51cb4a9e157d18798f56fa995044414bf409815931399288a8f5dbab8531890e3cfd63968f351defa72be8f502fa25943e84a42f0f3ed047337ffb5c46be51434deb792f0191e3f115f5d23615038d4b69da234c8bd47b5708611a3ae2b12071ec7b17c788df416214c4a7503ceadee893704108a425eed19ca4ca806bdd362c83333a97069785abe99b3c1aa62939599064f44f6ca497dfb88579cc79911fc6247af930d45819873054bd4a41ce05eeadf8a40cbb0223a27efcf89536dd18aaf751ede48ba146f7462e3d32dcc0ea299eec60f508a93106c6d6e409bffcb042d8ff92c4ed44e2f4651f8818bfe556c705aed167541c6197b88a9ee6a44d2fc56f810a47e02791ef135ae324a234b82bb607c1fed82e1c34f1b1ad895dc62c77eba31e3a3f06e67cd050050f3cc135de892cf95363b0414d118e3f52439cc836bda192f47ec1f2d6b1c734428737c55b20456cee35154f92f162e29177631eed7f385b1e44f1c6390e68872897d185dba16a0e9981329184ebcbe1553564d4f864b9134516cac2b4e02ab4089ee6c6cba811b3549a79175e772460c06ea28eed00faa4ea93af370fda125f4f1232d7213dd5714e8724713208e60ce0b7f6fe4e283fb5d93d5358b3589bc114dd20d8fa0a08d6b6bdd9e8234153d57e3e485ac3403268604220e045b03ed26d170205d90c3d80eb78854e19e8780e441b8b197036aafb80e2a2f3e0c6b4daba64bb48470ef680363c5ce852956ae8f2b3c377de181f016261133ff8cbba536c8bde9f5ac06ef79e0512a3849d6a3e0a31061a1d7beca458db395b3ba7cbb0a373e3e67182be80785333c5df0b9c2762964735199222256576ba61abf121508cc7b7ab7d76ccf15e2bc3971e41cef49c23b6e02f7f1722f688aa848f8aada884f1dd17a99ea0326b9cc847aa93808050fb46fdfe20dfc5550920c29bcd3c2dcf280d368e23e94748798d523a51f7a1a6f74fb2b6a9a37965c75dabe8617b20440b2d8b97b3898ed1c721fe37e7064adac8a95c1ac73f42a3b5de940b1e27ec54fc3ba2e07817ff356d0e9b50ec861287e0ddc8992d0a70b591f8c5024457f772c73f2c2bf64744fd48179af9c9146e41c8bc7841e75c0177b9c4b083fe69462281629d10d0840262608a654041c9bb532ed2a7ece556fdc02e75488431ba3a6d4bb67770b2bbe83cc076f778bf015a0ef6de095ef45d67e690b70c28688e0aa9c6d4b7fc6417500dec43780f8c01199fbd431ee6716cbe682e0d6b1b8b4a215364e4336db00e45848dd76f83d590528d5cf317e5041fd4579893ef0f357ab31a7dda35f82a637966082c2c959846f7ba32879c478eef8b1bbe9affbecb0c11c5277f8034f1f22421ea8446e50ca3d6a02b9c8ba224821c4ffa4ec76fa79b06899913f36b9641464cad9a7a6c8deb3b805804029c7a536ec28d9ef5e54f9f67b60df7337069bc16c30c0002bcd5a01728b4aac0898ffb0ca7f3282e096746be9e59ee0467490bc8059efa8d89ef14d5c3cffdf09b5915e30205952d74a4867a167dab9a9bca8e2cc1e539c5155bc1af5e4d3985b1e30537229b62732e7a826b3fc76d218b72db1e2b993ea2cd1a5e9f22d553b67b20a0b2a61a17da62b2187b1f7b6a688c47bec409ba057b1a27a260737e2e4f6525fee2c6fbad8cdecc94070bf0ea8f069b837d1e26aaebd1c073a710f4f534ce3331cfe1cd4988f7279d8bc93ebb74d6925a0a0425492dd3aebc866d27532ee5c706aeb1b3798eed8b86481f7f7bd206b0fc4605698223841869071018fe76dcdc83001f9a58701c29fe063464ec1458eaf8d29461ec38ab5f49a0067223c597f2b650f425c4f79d324d1e939e9dea7b97d7ee15722f25253c9e384a4151e5154baa0fcb9af86ac383011fba66af4cf42e5e56a99d661bc5ead6ca5c759f90efb6937914a54cd60c258b4acb8b561014b7c3fa3a078a83326a14dca9268171a0fb9bb4a1446cd013fafbd8aa286c15f121223de93dfa0ea4c4fb1acdd34127e7327e822e18f2b45508fba9aa1d36613ea16b5ca1246df3e85260ce14f9500ec596feb65ffbca2faf46308b3d11de5581cc6d76da6134addd5ae74b756b5ec2ebc276f509e6b48e6cc9ac6d324e34a5de3e03a2292e5d3cb5ad23bfe8fdbac4667a3e0782007601c28851989a112d69e2f53b970ad61d5213402a0cf65b2895a66cb739076735c6c79f9d57742af783089b619b6761e42cfc408418ee8c50d50de4e0f96e0cdbcadc09efdf6b0c52213701408c47520ea857cbfd2b981423c249b22332a8ff551216264c6292f6aceb9354d948be7437e0c6c2930725f55b5dfec1740935391772f7a63d399048545d0199a221e8f0d368043928ace84589c1ea05d203c2d95295a6d3434a98a62709f422215353304c28fe0fab50681a202db1630d7a4558b84edc601952c5ab718ae87b58fc7e2f1a200e5cb6e3b9195f2e7aa4b0d4706f1118ffaf00c7a8fb636d61a7e11b01fe7d7c1627493a60d05779ab5d97b56cac0785e98cb84654581fca77e4e1af194a7d39aaacf87bd8525560e4d7eb5a52c869ddd40e0702e531a39cbfacf64d7ae98850d631575f60f5e7186a0854040f29db1ee06172d9237110a310e0551a024b3de14f5bb16ae1e3a8903c8a850c8097def41c9acee87e5741d71e499a59a43c9bc215d88b404de94d7fc3222ab712d589e4fe0632dbca0db49f8ff90101eb8a261fe1749b3fbefe4af72f5015191d082c56702f43d44a74412bf38fa8a8e910838b38f374377f8ec474b75eecdb1da7653de5aa46d96329863f90b59c0f588ebf5f4c2a82bfd20bd9cb31d7e99d9f5af8a38c44636ddfaa7bef40e0cda7d9621b5fa27cfa3bdecc0c368f2561b1e7a7a341e7cf87f5d8588f223db0cfa53396511b865f689586b16c8b9de836e698a8dfd1f89caf3be19fc0fca467f877390597a81749538d2b941e2bb86cf2202be1a93970df897bdb49849a9e3c540c8e235a751ab12e81a2442fe4fd9b5b3e8c0fdd0444998286f6e402a91aec05b46b62357864a7e1854d52030835597fe7905ee980e5f5112df56d2dedc024103e551cc71ae825354174190cf74437a5c8aa5f5a9aa3619de3a6911fbf739e007229714e356fdd6b09f3bde1a0be4fd89000bbf18c8de2bcd7d75ae4a3ab42e120a54424d6c768c6bce03122c1401c277e093cef7b78e8612690906a11aa21e2ecdf3b465586da6e8e96f46ef60a2656f39270433f15f0b8f09999a300befbbf6fcd93cb5deb20bfa5be41b2bdf562996ca93050824eb2c6a4a56d237f8f96907a09a6335b47c4891d9facb2e30bd5b3001f53752fedeb71b1d7f382b8ecdd547cee38edd6482d3ec9530f3263e036592c9bf2d6c23295de544a145478d8e220f9760252c01e42aa6f76aa7b21910990547bb8e8f782eac9b5acbda33351d59928a1ca5ad069c05a89177a3c9f54ca015bc4784cf53f8289f3c9b044fb59e752b0aeefce3e475647d3a921d4fef975cc4f6864371485dd321f1af4633a300723768d64062df19f16eab5127513dd415073c41e9d3d1e90c01de0c6cfcd64a724838570096444396aa08ff8794865c38662c41e01411d5afd125dae087ccf91cc205f865f6eb5b3902724a74bfd4d2354c4f412373342e3d5d34133a269cf5fa1ad116034a04f818e0e2c2a751a7f86123b8af11358d2ce475876f5466c8fdf58ef824ffe903a5b1ceac5276cd591cc5bb1f92490321cb7c5e85a1c25bd05d7763d28d0549d9da091daa5ef8c8d81e703dcf8c1bc3de0218568670d9697fe40638f5ee32b811f4b7708a72684c8ef629898234531862ccdb116dc1488dc29149ce8c10f2b3c30827e2fb2b657a8c5290b16249723bbb594ae8ef53301602ee53cbfce607bfdf89eb48c6ca6174b4485ec40f1b52dcce9c3f71707295223dc5d45d4af040f92e9d1cc599df378f059075a6d78290352eaeada2f1f0482a7a770485e3d9cfe5bd3b44fc80fe7b6a53a080e8fa1dd309e1ded1184040df475a42b6ae4f9fb653ba6dfcdafb460fe27f7a153e67dabc99db62042ca484aa2aab55f277a0e1ea1d85a084c2cc8693bed6bfe9fb1462e91043b7386b8e162f157aedd0f17bc8b92f5775674628297e20292638bb86a4901067a253d27670b4e89c4a192fc37a265183c297f848231fe32874bad3bcd9813b982bf7b68a0ba03ce4987f6aa95871a10b0c16d19805b8c17a8f90e71841efcf7dc8f08e982495805f9174e63d8e09cc9257417c2209db9ff2b88db716cc12182052809167c36f2f9601db6b2c15b328eac44dd50588f8d507b83abb24148511aff5b11ba9aa03110b12fd3fbc9ccd1ea33f21ae3314cd84c36c2a1aea16779ea0917f99e600c055f576649751b805decf14915a08ebdbefab3252192adb1fee34ef0293a0d50159c06527a9a3d27d896c413564737adfbdd41d0e49b2cdca6b55a8c633ce1a23ea7867cf49689933a1f999a5b41173c37555fb4c4037c06b22611982c05ba85b96612bf785cb7f7265e45368918324355af4f3500e2624ff56679f19585d0a35310f0aafe3c7514bb2ba7501e410e3a641a1fe0a90aabf4ba657e4f051d34a2da816977cddc5daeb6c87aeca6361f704f81355386e87eac9734243aaaf6051ff41757067e048fe8fd04d117ecd8dff849829c3db8a5a4f02ab531b3ed0656aa125b3e47ac0b699daf2befcd25f4ebc01145867ad1f1ed123d784072f8794e6e88b0d529eaf08d37be26b166459e9c95e121693ad84afae856d4bf19b563409fc1d88950879623725b18c6fbae821de358b4c9f9e75e2a57f516c9f87fd7ffbbf0dda34116064ddf036f6c4a50acff07e34c488c801c76e70f2887fa285b1f6ef290121d499b8b2b8e3a68efdc80d17ada35299b28847c022554c9e55056e323c943ff985864b2b5d03462047ee31f128071b84dd8d7a48d5e6b470443e180ab4d92382f315108b96ed323e27655d6a46484c192c2f5bc0ad022ae77af55999ae8f61f5c57dea8b5a995df4469302e5e136645886a91c41007bf42cf6816e7729c5c48e57bdb374c8babe189413e7157e8af7edef6aaa7bf15dd226b357183f623b216efbd495504165ea6c236427b7c4c3cb31760dd11ce21839ee0b3849185743b7ecc802c84cbdb14f44542f879f9344b879f9a0b1beb49b29bd58783bfbdf9c669f0847ee9b2f979a652f7d857bbe74782d32d221d5c4d582a226a36b16e15ee8cd7a1b148222cb744bc5fb6dbdbc19c6a1e58dc2a86a3ed29ab55351677026b872a0e964b8b00a3e3a32d21c857e89f96a0a5641cd3c8540503516b25d0153e82876815e08bca5efc3b744c0fa666c2dbe0106a4995d06d70dc049a88b02b07bccd6f9780b2fcf11d0b1f4bfd13b8e667a8bc712cb06032943a49ead91f280cf9572f9cf1efc1bc5c509d11c8d644afb823d48778542cbcc28a09b852646e0cb604f1238a657de3a03bcde46ae2d5ca501e962007c65099e5b57e6b568ff49923cf71dacb0b62fbed78a66cbbf0c08fa215e2296757ee7d6ba888a3e1cb2a0a2f2843781448a69e6f0b21b2c0bf94e04248a103fbe290eea292ecf461fa32ab098f96aadadbea0260c89ea5a880d7296417c91759c2b16615b1a9c979711941f40582c40260ef781faa1b83115c1ec21742d3d149fef0a9e26e4919d740d109e3eb51782e4671a42f75f75816959b58ff1dd0f5318fcabfd6a03bfdee6bc4e69517054f24c55ae77135323ceb2326c0a7ca4b1a876ec281550134aefaada233cea389aef52ce29a91ab59f300d3d6233ed3694f3fd395b9fb6563b0a47f8b12e8483bc0379ffe7dabbe83a6448546289aa9870727df2faadd3e0b67bdd4bf6ddb0f2b5eb72a71ebc133c512fa2b8c3d85afb55b399c7c83ff17ab8d06d2f9db223966ea0de3e65f16e1d6f815d4e06620a13ff6f45cb8754fa6dc3e12216602c0031dfb95629e2dd00ba1ed9e2092c4a325e86a8b2bb46e9783bba608212a7949fee2da5333015c719b5789e43faa4d837b20255ca4a4d66ca093071d5e0ceccdf8126ece4e257a32febebe711dfb9d0c787c1ad6c62ccacc6fc9dc4e56a6ceea1c4473839173e1fb4b94806c49bcad1582d727e235b08978f9f91d00d9ba351cbd9580de8528b85510a0837400904b497612720c92a9adb105f62642ee0b1cc44fbe11cb2559100fbfc2175ead72fe57e305c7c59c61c4e4426e8dc4e2a14359f53b3a4ad5f127a7ec56f62b3fc17fd434687950e3ed33dbbf7278afe6f36be377fc8190865165dca73b6b3ffb99a46dd16fbf6dff03ec9b7603869cb9a40f7147ebab6383aae1deb95c7236ac202fd59c6c0d46b2578904fcd22e2a1e1bdae3877e27fccb75a56946a57ed7f6fd528d8cc0bd0df37fb6f8c36c5067c524060756fdddaff9a7019dbe0527bb92774c6848c088a43219f46e23f5eb9d1965d2ba08e558a42e6b333611643330f83208caaf755bed20a3da37426d1c1d875aa38e287f77e495afc5eeb30c1776b0a189894b13804a8045e40bcca0eb838dfedb23d59542f776b673251c589633976aedbcc5a5f34d96824f17604f1e2b37eb394be673c579fdf458db0c898436970db4ebcb142cb9d22b39680a7a41b60a6f4972156e95b03ed1fc5f07ea76618410243aa9fd314e937a47b3916e2bfcc9584b8a81b9b5825b5f3c49a04846334c2fd3cc491cfafad5f0d7376822c3c1290bb6762768103bf53cb936a13358d322389facc7178ecaae5a1992590e6a6f60a465a3a75d92f0e2356bc22f5509e014e4de0845407af8526504a4ce263621b5b5ffbe14be47232d85a3f2aae672992da40dae8d055d0aca961509fd79ddee2de3faee1ad3c42f3ad9944b2a54f2da15a0c2534d5b72fab01f87c7c2f72b4676f7273d17f4b791b06e6aed5191a990bcc085edfce6911412a6f41d778ff15dcd3348070d16f2235edd3242a1ea3714149c684e0fb812c18eb812ea09ee494f4244d58447a23293bf170d0d63e6d913b13ab6ff6a15b28f6b4a1d590dd835bed71c2184629b77cedc16d5833926a11c8697067603d1165c2d14f553f49e7cdd16fc2a340898a11bc83048908200d71bb16209be4110ed810002a1ac746611e57a9f487d9da50d45dabe3af5dd342ad7359991003ca7a5217ee177425e148b751c3b4f2b1f4236abd7fc34798c1675413fa3ff8d45ae95613b106651c8b90afaff37f161199ed26f6f41a691380774581a4e54f86930fe22d54766801db68b094c7d6225e8a21158f71f9569db4a70b678ab13158fef653a8b8fa4f08e2acc80f5d8933acf7278a3867482fb84a3cb06040d7cb5018dc99cba49b2ac7fa595b80044172bc0d115217fe048af49f01c26343b25025f529a7e74487d7fcf5a488240f0c25d74eadee2c10547bcb204f73cc6c8ab6f9a345d446999d38d8091ec5b951add0113ba6534c791f76331431ad5a9da7c0d0d9f33461d53c58682ae2182b1ec107be89418961999b3b01fb958d5ee085e23c6907e0ff0e0b2f40ce9216e973724bfd73eb03b23ac19a61a17447d4dce4c117293b03df28e424061158658d666bd26c771b080d24cd04d120066fede40b648bbfa47fc26f9bc9d2eed47d31f930662666c9df1b5075dab5fa576e26295fbee37ff0b6bcc74b9eb34b8c5a9104c2ec1c9f14b10ded7085c4bbbdb07963ee3f1677e9472c2f20c480ac7c04f062859033272c3bd9c3a06d47038bf7c66cf75e53ce1185ce484356cb5c6bd7d909bd16c962497602bde1172b496b0b381e2e20e443e87484115f7158f67ad513cc4b8ea62941ea9cacf018ef0350b5b5cfa7b234f20a5fa5f27453ccd138558d26c3018b4418f8abb87900f4de0b74a7917a62581594713be87a6e652d4a710e482b197df64b1d38793dfcc116eba144452ac01d15d3ad305e7429d21a2eed1bf2febf48e83e348d1403c795e756a7910dfd2a139b72b25a138bdd3bfb54c727a2107178e9718c89613d928f150b556445448b2ab0d8981162badbb34426359fa056436c4fbc041705a2c8a221d4ecfc76a25368e3ed569980e598d49be5a97e4e3b20c5cd18cbee7582384817ab4f6846b3d5417c2e20d915baa5ee5c1c9998e686171405a7781500a692793a49d744570d60f2d284d0a62c0b1a5695f69d1343ca30e11dd13f5133956017ae2cdf452d35c422b14e660761a2340cabfd8df010676563ea0cd9719e75452281b6348b919a73c25b9028ff4934be30b28390d3a1a8ff5aa5177be59cd3b7702c0188368522bd4a01aaed1ee6e06cd142778c3a3276bc1d4fdb590a8af2db61d821369fe6fbd29f2bc2a46dd2ca1a13cf526ba9ed0a097efbd3ff979eeeb7a53f056be0f43eda9e604304daa4aaa00ff78d26f1f7fdeab8961ff654802c368c35be21317844ab973d1fdf052d187ba72034ae7afd3012323447c3ea2a99fd58218a6b4dd5c7d665f2b76a8ef4e874cf58b6095a71d515caffa7d93937fda7fa5a79907b96ac6095d7e09f6b8c4808ffb90d95a49f527de126e707d1b79fad7154d4a8cad107170a677ce5da26cef014a62f114eb5cf00e9cef466b51ae49f4af881f37944890abeb695109c1602c8722b710fa09a253b4dfec83cd5855b85df9d7f4311d597eb54f0387ef8dd7ff52be1ac446f7604b9ca5b465726fc8377764302dc29495bc55d2dc091625bf92a523b714095c16b0267774f4c6bba03147b0dcd2d7a045b3f1017e60f4f346e0b757d0c2cdf55705c84632397a811854d9b69127765ef1d2b90e2cf552e78a2c45bd74418a0955832f2d0962c0abfbce57eb433171c19fcb49f1a009943dee32354b1aedc190b0d5b82e14588fd984f179a70ba5d3fe020e0947e8baa4b87d0510e47b0abfa2d6df2101d69cbc1f43672813164d6dec036a8010f493480df8616a5790c64a60778c6124bce920badbbac0e56588eda54556967976063afb8be564b61cfbe4ca94bedba7f6ac568f170f93817a105d7513c2b09a2c746211de59ef7ed89140b7923686a7015aadd6b6b37764b7a1122be8360f17d77b4242dc0393c7b1ae3480ec747ecada66c483afbe4c426ddfb483ff6f72b7c1f34ab9dcbf7e42cddceeb9e59cbc5c67ec767c921ebf0acff4325cb72e4d9e4619563cda46dba101b051744a354db876be9224f35c80ea83dcadb4f2dfcb2f7cb3333c3ac599de6fe6621c7c28c642091d8b3ebd2baa212e97d543b0afa1dd8368f8ff3ba83035e256535aead94523f48b36587a807ce8a4255e70ae60296f9f10f5ee45486f7b8715bd3cc6d9a86f3c50af4fce56fc697cae6afeeef7b1afa5d708c1c5f6d5668793f60c53339be5739021d16b98c247f7c47bb770620b00b16666a3299b6b19fc01bee421c373a71205928277527416c19db5d40f72505d2d206f4c8fc6354f1ed41194b289110854f81644b7bf9a2793e712bc8d12c21a711051c663a7a3b0da51b8a4b0ecc4f6cfb14cf025a4b98a724e2c6d7c58f95ebb87a8f27cdd253c07c6b9867f21b25d5c3c8ef6ac034d24d382843fb992ea52b991f72fbda87e3624271fdb01177795bafcd08dfb4fc925ff37afe212b357fe5abd9e49066e6007cd79351bb739f935a62b8440028df74cb4f336ac5109ee6b30c8c29409f8720c195d24bd28f7602be1cb0603b041f144774a27b198d65316b73f2130f34cd0b29b39081be89bd5b83dad25365ee71e8c13bb77ca7866ccc360dc22d9c2ac99e8eef84ec42a42b8b494fc6cc244d22ef35800463eea07d7b22dedbf75fad8fb4adfca468a735e9be9e6236cff08491a4c12d30ed50d45800669208ebab41199f5a9d09ae27149a83f18ebd58eb272d8ded60ff2935cb66b77d1c018e489ce67b073aa40e4f1fb9ce91117f9af3f9885aedaeb1a31c4f4debd93c6fee6f6853a8129085dc1b420c8cd269b6047a91288eec6aa5613be31fb860ed7f8359a60e0ea02b655ba9637af10d12e4c77f2baab45598cd26eec72f2f9540427a94a44c3887385c7eee45267fb19c89155cfa383db6cebdfefe63571c39dee3a175b79283b02a96f784ac3b74186c562b1861582daa5c929aad31f63025cee5fd47022cb8e6788e66f20cb53d7563d32ad8ee150423085fa361ff1e097daf6d570863f17b6e9f9a52677fa6d0edb5ba539ae04c338157ab1d6174c6d8751351789ea50dbab04db263d1c45d8d18c54ddbb4b90468ee2caf42ffac7df951600471e119c245488e5e77814a41cdece20ebf0f9b8da143725bef599c9eba6143bd2912cd24ba5773b0f9995b6d529e3d87d5b241916ea0198e2cd901eb6961d321e65fd535e6d86646cd387c81c6c50456dc65d340b8550aceaa1292a1aa10548b25db585d7f69c2faceb74a10a3033bc29ce3ccba325768717c76816e6167f0b780aba895379f68056ec98d5979f4ad684d90ddfa3bdc95f71a912e0a72171a46891b7996363a10bae9e9cdf4c12a00148219041ffa0c5259c6804be95a2d7ab918c6d70203e6b7a10962c97a9cad42d156c3d640c9e19512db2d17487b95278aa7aa500ba7e1137dcd1184a047735733b865a575df780ecff464130df7d0ef88219bc03d7a7522723aa4a36bbce2467844d5bfacacd44758351dcada33b7861de671efda29a914d70ed878995f0456a58422a2ecb01dddfaa16c48d8d9acc33e8ccafd83b2971ff5ec418dd3fafe3eb28005ab25126038eb7f3e0df00d45c03c51078a80a7e2d942bee152ef59ecbf532c2f2a8c9fbe0059ddafb31b9eb9e77c9e4a12849608ee2473c9f8216658df58a1392977474d0be55cfeb804af9155d786f28929f35e905c72fbe78bebf6359ac7e381ae1137e8e165035ceecabf897edbc5b03ad5374593c68fbb50682eede3a47a3e5d6437cb50dab5df2be6284a88dc4d33067d690d5773b81a19bd84385e7ce98cba8ab55cf228fd2fcc2c20f99711482da184375eff9b8f75b255167511c94ea5bd779288dcf39f52f2351ad736b3ca4e7a452aaa5191ecfd0677ac0e6c898ee076b882ac148e9dda4f197ae45e7cb4f3cc3844482e7f9a0d5879f3d5dbcb113a93f78adee8bbc35e833dce9ba61a93a8e4f194d5c36c5a55d490ab34af3af48d9db908569edb544d6bb717cd62c0119aa91b02a0b52405069ee9b6aab69f89902abfd1a0a8933cc9937f1bfea38084698b1e646fcddb2d16e3fdbece694fa5bddd51af756944bf25ed866b2f3b0ca09c58eb761948aa45ae50ff74463d51b25868b288bb7661fa010242ee9f07fa226f3d31eb6b593198f65fc5731378008f95dd1cd90ff748884974b271118828e9265a1201619719cd3897994dbd775d19dea8021f188e5a0c606f5392de440b8bfa92b6eb2b4d121e088f5b16170c11c9ba96edc78ad2da350ac58acb94f778b554176b8e3a2c305c79aa9521b223ed7b323fe8f7586a663097b16e52da4d454c744c64ef851827bc560c2bf406aba02e37a9e52b52214a33832182a8ae08406e4f6d8c587d28d7a25ba675064115d982aa113772e6f4d75ad7256c7fc73bbd49b5f650853f39053b791269ca6490ff99b8dcf5939f3d63fd461cb9690ba6fe2dc42e42d10e8f92a9a57aaa439f5ec6fd8fcfbcbfab19d830935c1a15524e8704479ebe135e500b6f334b27ce605beca3cf10993904e1a2e9039548f9f7b82058aa696a1f5ca089d3fea9bb1371f4f6c510289efdb5c9484a5a6a7729076aa4e60f09aeb4318c09145f3f99345c422deba87bf9168cffe14e74275b4fc4ec96d58ffe0395fcc54feb804372ef904875209b39bbfb211126c391d6e2d0925728ee4b672026ae29f4b35beccbfe0d271096ff3947313c7778e55a477fb541f1f723b098467a662ef0a280c619a2ce52f5511347999415a59ae8958066fab45c62e91ff0a7c0be623087abbe81df3718c7b233e2ab171e07c184215df3f59a75d3d34f78a2552621c16708779418fb0aca608c65ac8bce15ea2ab98b4897c40c6e0c14f05c0f03cea13fffff37b0af84e3c5e3711c570e0dd29281ce0be43bad3fa16c25461b1c01148c9155bffa698b815a088135f267172ad51023f2a32434de4809089b8d4babf01dc081d7d40e209c5203466babe8575dad43955edd822fa7d7d4f88eb2aad8c809cea5710f8299a1232bc04261835fa75eafef9529aeacf12cb6aee5efcf276df2704202faf5f1ce0fca883c64fe8a56d1903b4fbc1d2d1a7b25904a13a2ad622b72a17ef9ddccd3e03b325a076a58d64fef4099f7e439bae2306cb1664728c9102fa414005354604734690ad34eb97497aceeb124a11b1f6e376fa8c1f8d2bcbe439cf889e91d