// ==UserScript== // @name 学习通一键答题全能助手 // @namespace http://tampermonkey.net/ // @version 1.0.4 // @description 无需配置一键完成学习通自动答题、刷章节及章节测试,无需任何操作自动完成所有任务点。长期维护更新 // @author lokey // @match *://*.chaoxing.com/* // @grant GM_xmlhttpRequest // @grant GM_addStyle // @grant GM_getResourceText // @connect api.116611.xyz // @resource typrMd5Lib https://116611.xyz/typr-md5.js // @resource fontTableData https://116611.xyz/table.json // @license CC-BY-NC-ND-4.0 // @antifeature payment 脚本存在第三方答题接口付费功能 // @icon data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gI0SUNDX1BST0ZJTEUAAQEAAAIkYXBwbAQAAABtbnRyUkdCIFhZWiAH4QAHAAcADQAWACBhY3NwQVBQTAAAAABBUFBMAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGzKGpWCJX8QTTiZE9XR6hWCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApkZXNjAAAA/AAAAGVjcHJ0AAABZAAAACN3dHB0AAABiAAAABRyWFlaAAABnAAAABRnWFlaAAABsAAAABRiWFlaAAABxAAAABRyVFJDAAAB2AAAACBjaGFkAAAB+AAAACxiVFJDAAAB2AAAACBnVFJDAAAB2AAAACBkZXNjAAAAAAAAAAtEaXNwbGF5IFAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIEluYy4sIDIwMTcAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAIPfAAA9v////7tYWVogAAAAAAAASr8AALE3AAAKuVhZWiAAAAAAAAAoOAAAEQsAAMi5cGFyYQAAAAAAAwAAAAJmZgAA8qcAAA1ZAAAT0AAACltzZjMyAAAAAAABDEIAAAXe///zJgAAB5MAAP2Q///7ov///aMAAAPcAADAbv/bAEMACAUGBwYFCAcGBwkICAkMEwwMCwsMGBESDhMcGB0dGxgbGh8jLCUfISohGhsmNCcqLi8xMjEeJTY6NjA6LDAxMP/bAEMBCAkJDAoMFwwMFzAgGyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMP/AABEIBAcEBwMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APdru5hs7d57hxHFGNzM3AArx/xr43udZke1sGeCwXjjhpPc+3tVn4leKW1C8bS7N/8ARYD+9YH77/4D+dcPXnV632UfV5XlijFVqq16B97k9KKKSuI+lFooooAKKKKACiiikMKKKKACiiigAooooAKKKKACiiigAooooEFFFFACUUUUwCiiigAooopAFFFFABRRRQAUUUUALRRRQAUUUUALRRRQAUUUUAJRRRQAlFFFAC0UUUAFFFFACYoxS0UAJijFLRQAlFFFMBRRQKKACiiigAooooAKKKKACiiigAooooAU000402gAopaKAEooooAKKKKACiiigAooooAWiiigAooooAKKKKACiiigAooooASiiigAooooAKKKKQBRRRQAUUUUCEooooAWikooGLRSUUAOopKKACiiigAooooAKKKKACiiigAooooAKKKKAEoFFAoAdRRRQAUqs0bB42KuOQQcEUlFAHpHg34hfu/smuyAFVytx/e9mHr70V5vRXTHEySseJWyWhUm5LQViWYljkk5J9aSikNc++p7foLRRRQAUUUUAFFFFABRRRSGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUCCiiigAooopgFFFFACUUUUgCiiigBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooASiiigAopcUYoASilxRigBKKKKYCiigUUAFFFFACUUUUAFFFFABRRRQAtFFFAC0U2igBaKKKAEooooASiiigBaKKKACiiigAooooAKKKKAFooooAKKKKACiiigBKKWp7G0nvJWit13uqM+B3AppXJlJRV2QUUEEHB6iikUJRRRSAKKKKAEooopgFFFFAgopaKBiUUtFABRRRQAUUtFACUUUUAFFFFABRRRSAKKKKACiiigAooooAKKKKAFooooAKKKKCgooooJCiiimIKKKKQBRRRQMKKKKAEooooGLRRRQAUUUUAFFFFAWCiiigLBRRRQIKKKKACiiimAUUUUAFFFFIAooooAKKKKACiiigBKKKKACiiigAooooAWiiigAooooAKKKKACiiigBKKKKACiiigAooooAWiiimAUUUUAFFFFABRRRQAlFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACUUUUALRRRQAtFFFABRRRQAUUUUAFFFFACCnCminCgBK674WqreK0+X/li/8q5Kut+FjbfF0Q9Yn/lW1D40efmX+7S9DR+I/g82skmrabH+7b5polX7p/vD+tcB/KvpKeNZY2R1BBGCDXjfj/wmdEumubVSbOQ5wP8AlmT2+ldGIo/aR5OU5in+5qv0ORooorgPphKKKKBiUUUUAFFFFAhaKKKACiiigBKUUUUAKKKKKAEooopgFFFFAC0UUUgEooooAKKKKACiiigAooooAWiiigAooooKCiiigkKKKKBBRRRQAUUUUAFFFFAxKKKKAFooooGFFFFABRRRQFwooooC4UUUUCCiiigAooopgFFFFABRSUUgFopKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBKKKKACiiigBaKKKACiiigAooopgFFFFABRRRQAlFFFABRRRQAtFFFABRRRQAlFFFAC0UUUAFFFFADTRRRQAtFFFABRRRQAtFFFABRRRQAlFFFAC0UUUALXVfDD/kcLf3jf/0GuUrqfhl/yOVr/uP/AOg1tQ+NHBmX+7S9D2w+lVr+yhv7Z4LhA6OMEEVaIzSfWvYPz5Np3R4X4z8MS+H70mNS1pIfkYdvY1z1fROsaZb6rZPbXKBlYd+30rwzxRoc+hag1vKpKE5R/UV5uIo2fMtj7LK8x9svZ1NzIopaMVxHvhRRRQAlFFFMQUUUUAFFFFAC0UlFAC0UlFABRRRQAUUUUAFFFFABRRRSAKKKKACiiigAooooAKKKKACiiigBaKKKACiiigAooooAKKKKACiiigLhRRRQFwooooGFFFFBIUUU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bniYjPJz0pKxwWkfDOwt9sl/K9y47dFrsNP0iy0+MJa28cYH90Yq9S11QpxjsjxauKrVX78hAMCkNONc3458QJoWkvIpH2iT5Ix7nvVSkoq5nSpyqyUI7s434peJfPm/si0f92nMxB6nsPwrz00skrzSvJKxZ3O4k9zSV5FWo5yP0DBYVYakoLcWiiisTtCiiigQUUUUAFFFFMAooooAKKKKACiiigAooooASiiigAooooAKKKKACiiigAooooAKKKKAFooooAKKKKACiiigBM0tJRQAtFFFIAooooAKKKKACiiigAooooASiiimAUUUUAFFFFABRRRQAtFFFABRRRQAUUUUgCiiigBKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFIAooooAKKKKYBRRRQAUUUUhiiigUUABoFIaBQAtIaXtSGgAooooAKKKKZLCtLww23xHpfr9oX+dZo61oeG/8AkZNM/wCvlP51rR/iI5sZ/Al6H0PRRRXsn50FFFFAgooooAKKKKACiiigDk/HnhaLXbIzQKEvYh8j/wB4f3TXjM8LwTNDKpjkjOGU9QRX0gRkVwvxE8Ii/ibU7BP9KjHzqP8Aloo/rXJXo8y5lue7lWY+xfsqj0/I8lxRinEYJBGCDiivNaPsk7obRRRUlBR1ooVWZtqAsx7CglyS3Ciug0nwbrGpkGO2MSH+OXiuz0n4YW0WG1G5Mx/urwK3hQnLoedXzPD0dL6nl0cTytsiQufQLmtzSfButaiwxbGFD/FIcV7Fpvh7TNOH+jWsSH1A5rUCgAV1Rwi6s8Svnk3pTR57o/wvtIsPqNxJO391flWux0zQdO01QtpaRpjuBzWnRXVCnGGyPFq4utW+OQUUUVocwUUUUAKaQ0pppoAiuZkt4HlkbaiDJNeE+NdcfXtakmB/0eP5Ih7ev412/wAVPEQigGk2r/vJBmUg9F9Pxryw8nNediav2UfV5LgrL2816CgUtIKWuE+mCiiigAooooEFFFFABRRRTAKKKKACiiigAooooAKKKKBCUUUUDCiiigAooooAKKKKACiiigAooooAKKKKAFooooAKKKKAExS0tJQAUUlFAC0UUUgCiiigAooooAKKKKAEooopgFFFFABRRRQAUUUUALRRRQAUUUUAFFFFIBKKKKACiiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRSAKKKKACiiimAUUUUAFFFFIYoooFFACGgUGgUAL2pDS9qQ0AFFFFABRRQKAFHWtHw3/yMOnf9fC/zrPq7oJI1ywI6+en860p/GjmxavSl6H0RRRRXtn5uFFFFABRRRQAUUUUAFFFFABSH0NLRQB5d8R/CBhZtU06P931mRe3+0K87r6SljWVDG4yrcGuBvfhlZXGqPOlw8Vsxz5KLzn2PpXFVw7k7xPo8vzZU4clZ7bHldbOk+FNY1Ug29oyxn+OT5V/WvXtH8I6RpIBtrNGcfxv8zfrW6q4HHA9KUcL1kVXz17Uo/eeaaV8LVGG1W7L+scXA/Oux0nwrpGmAfZbOMMP4iMn862sUtdUaUI7I8Wtjq9b45CKoQAKMYpaKK1OTfcKKKKQBRRRQAUUUUAFFFFABWP4r1mPRNJlunPzYIQerdq1XbapZjgDmvE/iJ4ibWtUaGFj9ltjtXH8TdzWNap7ONz0MvwrxNZLotznry8lvbqS4nbdJKck1BSU4V5End3Z99CKguVBRRRUlhRRRQAUUUUCCiiigAooopgFFFFAC0UUUAJRRRQAUUUUCEooooGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUALRRRQAUUUUALSUUUgCkpaKACiiigAooooAKKKKYBRRRQAUUUUgCiiigBKKKKYBRRRQAtFFFACUUUUAFFFFABRRRQAUUUUAFFFFAC0UUUgCiiigBKKKKACiiigAooooAKKKKACiiimAUUUUAFFFFIYoooFFABRRRQAUlLSUAFFFFABS0lLQJi1b0Vgus2LHtOn86qVPpf8AyFbL/run/oQrSn8SOfE/wpH0dRRRXtn5uFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFJS1R1rUIdM0+W7uG2xxqSff2pN2KjFydkcp8T/ABL/AGZp/wBgtX/0m5GCR/CvrXj3Q5NX9a1KbVtSlvLg/PIeB6L2FUa8mvU55H3mXYNYalbq9xaUUlKK5z0haKSigYtFFFABRRRQIKKKKACiiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAJRRRQAUUUUAFFFFAC0UUUAFFFFABRRRQAUUlLSAKKKWgBKKKKACiiigBKKKKYBRRRQAtFFFIAooooASiiimAUUUUAFFFFAC0UUUAFFFFABRRRQAlFFFABRRRQAtFFFIAooooASiiigAooooAKKKKACiiigAooopgFFFFABRRRSGFFFFAC0UUUAFFFFABRRRQAUUUUABqS0bZe2zf3ZVP6io6Ic+fGf9tf51dP4kY11em0fS1FMi/wBWv0FPr3D81ejCiiigQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACMcLXkPxO8S/2hf8A9m2zZggPzkdGf/61dt8QfEI0XRmETYuZ/kiHv3P4V4kzF2Jc5J5JrhxVWy5UfR5Ngud+2ktthppBRRXnH1w6iiigQUUUUDFooooAKKKKBCUUUUALRRRTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEooooAKKKKACiiigBaKKKACiiigBDRQaKACiiigBaKKKAEooooAKKKKACilopAJRS0UAFFFFACUU7ijigBKKKKYBRRRQAlFFFABRS0lAC0UUUgA0lKaSgAooooAKKKKAFooooAKKKKAEooooASiiigBaKKKACiiigAooopgJRTqKAEopaKQxKBS0UAFFFFAWCiiigAopKKAFoqxZWdxeSiO0gknb0UZxXX6R8N9SvNr3zpaJ/dX5m/wrWFKc9kcdfG0aHxyOIrV0Xw5qurTRNZWrsoZSXb5Vxn1Ner6J4D0fTMP5Hnyj+OTk100USRKFRQoHYV10sNZ3keDis75k4UkOjG1AD1AAp3egUd67z5gKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqvfXMdpbPPM21EGWPpU9eZfFfxByulWzfMfmmx6dhWdSahFtnVhMPLE1VCJxvivXZNd1aW5JzCvywp6KP8axxTqK8eUnJ3Z+hUqapQUILRCUUUVJoFFFFIAooopgFFFFAC0UUUgCiiigAooooAKKKKYBRRRQAgpwpopwoASiiigAooooAKKKKACiiigBKKKKAFooooASnCm04UAJRRRQAUUUUAIaKDRQAUUUUAFFFFAC0UUUAJRRRQAtFFFIAooooAKKKKADFGKM0ZoAKKKKACiiigApKWigAooooAKKKKAA0lKaSgAooooAKKKKAFooooAKKKKAEooooAKKKKACiiigAooooAKKKKYC0UUUAFFFFIYUUUUAFFFT2Vnc30gjs4JJ29IxmqjFt6ESqRpq8mQUbfzNdtovw11K62yajKLVD1QctXe6L4L0jSQDFbiWUf8ALSTk10ww0pb6Hj4nOaNPSGrPKNH8I6vquDDAY0P8cnAruNF+GVtCFfU5zO452Lwtd+kaouFAAp44rrhh4RPAxGbV6uidkUtO0uz02ERWcCRKPQVdAoorptY8qUnJ3YtJRRSJCiiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFMldY4y7HAUZoAxvF+uxaHpMtw5HmYwi/3mrwi7upbu5knnYtLKxZj9a3/HuvtrWrsEf/RoCVQevqa5qvKxNRzdlsfcZVgvYU+eW7FooorlPZFooopiCiiigLi0UUUAFFFFSAUUUUwCiiigAooooAKKKKACiiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACUUUUALRRRQAhooNFABRRRQAUUUUALmjNJRQAuaM0lFAC0UUUAFFFFABRRRSASiiigBaKKKAFFFAooASiiigAooooAKKKKAA0lKaSgAooooAKKKKAFooooAKKKKAEooooASiiigAooooAWiiigAooopgFFFFSAtJU9naT3svlW0Tyv6IM112ifDjVLrY9862kfp95/wDCtoUpS2OWvjKND42cXW1pHhXWNWYG2tGWI/8ALST5R+ter6N4J0bSsFbcTyj+OX5j/gK6NVCqFUYArrhhesjwMRnsnpRX3nn+ifDCzg2yatKbl/7ifKg/qa7bT9Os9OiEVlbRwIOyrirnaiuyNOMdkeBWxVWu71JXCiiiqOcKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVwXxQ8SfYbH+zrZ8XFwPmI/hT/AOvXX6vqMWmWE11cHEca5NeAa7qU2r6nLeznmRuB6L2FcuIqcsdD2cpwft6nNLZFTknJ5J60UUV5Vz7e1tBaKKKAFooopgJRRRSAWiiigAooooAKKKKACiiigAooooAKKKKACiiimAUUUUAFFFFAgooooASiiigYtFFFABRRRQAUUUUAJRRRQAUUUUALRRRQAUUUUAJRRRQAUUUUAFFJmjNAC0UmaM0ALRRRQAtFFFABRRRQAUUUUAFFFFACiigUUAJRRRQAUUUUAKaaacaaaQBRRRQAUUUUALRRRQAUUUUAFFFFACUUUUAFFLRigBKKKKACiilRWZtqKXY9hTSuEmoq7EorptD8D6xqoV2iFrC38UnX8BXoGhfDzStO2y3IN1MO79PyreOGnI8rE5rQoaJ3fkeWaRoGqaq+LK0dkP8AEwwv513Oi/DFRtk1icuf+ecfA/OvR4YIokCQqEUdgKkxXbDDRjqz53EZvWq6R0RnaXotjpkIjs7dIgP7o5NaAUDtS0V0JWPIlNyd5MWkooqiQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8v+L2qXHnQ6aqMsJG8t2Y+lebEV754s8PQa/pzwSgCReY37g14ZqNjPp17Ja3SbZIzgivNxUJc1+h9lk2Ipul7JaNFeiiiuM94KKKKAFooooAKKKKQBRRRQAtFFFABRSUtABS0lFABRRRQAUUUUAFFFFMAooooASiiigAooooELRRRQMKKKKACiiigBKKKKACiiigAooooAWiiigAooooASiiigAooooAKKKKACiiigAooooAWiiigAooooASiiigAooooAWiiigAooopAFFFFABRRRQA00Cg0CgB1BooNACUUUUAFFFFABRRRQAtFFFBQtFJVnT7C71GfybO3eZv9kcfnTSb2InOMFeTK1SWttNdTCK3iaVz0CjNegaB8M5JCs2sS7U/55IefxNd9pWhadpUYjsrZIyO+OT+NddPCuWsjw8TnVKC5aerPM9B+HGo3m2TUJBaxn+BeW/8ArV6FoPhTS9HjAt4FLr/G4y351ugAUd67oUow2PmsRmFevpJ6CKoUYUU4CilrU4NWJRRRQAUUUUDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooASuK+IvhUata/bLNP8ASoh/30PSu2pMVMoqSszahWlRmpxPmqRGRirAqynBBpteh/E3wp5DnVbBMqf9co/9CrzuvHq0+SVj77B4mOJpqSFooorM7BaKKKACiiigBaKKKQBRRRQAlFFFAC0UlLQAUUUUAFFFFABRRRTAKKKKAEooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFooooAKKKKACiiigBKKKKkBaKKKoAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKQBRRRQAUUUUAJRTsUYoASg0UGgBKKKKACiiigAoorT0bQNR1iUJZW7MueZG4UfjVRi5OyIqVYUlebsZlXtJ0i+1aTZYW7yf7WML+dekeHvhra2+2bVH+0yDnYOFFdxZ2VvZxhLeJI1HQKMV2U8I3rI8DE53GF40Vc890H4ZR/LLrMvmHr5MfC/ia9A0/TLTT4RFZ28cKD+FBirQFLXdCnGK0Pm6+Lq13ebCiiirOUKKKKACimk1ha94t0zRYj58waTsi8mpclHcunTnUlywVzfqpJqVnHKIpLiJJD0VmANeRa/8QtS1Bmjs/8ARYTxx94/jXIzTSzSGWWV2kJyWLc1yzxcU7I93D5HVqK9R2PpJJkf7rBvpT6+dbLWNRsmH2a9mT/gZxXQ2HxF1614maK4A/vDn9KccVB7iq5HXj8DTPaqK800/wCKiHAv7Nk94zkV0+leN9F1EqqXIikP8MnFbxrRlszzK2BxFH4onSUUinIBHelrQ4wooopgFFFFIAooopgFFFFIAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCG4gSeF4pVDK4wQa8R8d+GZNB1FnRWNnMcoR/CfSvcyeKzdf0iDWdPltLlQQw4PofWsK1JTj5nfgMZLC1L9Op89UVe1vS7jR9Rls7lcMh+VuzD1FUa8qUXF2Z99TnGpFTjsFFFFSWLRRRQAUUUUAFFFFAAKKBRSAWiiigBaKKKAEooooAKKKKYBRRRQApptONNoAKKKKACiiigBaKKKAEooopAFFFFABRRRQAUUUUwFooooAKKKKACiiigAoooqbDEFOFNFOFMQUUUUwEooooAKKKKAFpKKKACiikoAKKKKAEooooAWiiigAooooAWiiigAooooAKKKKRQUUVraD4c1LW5QLSEiM9ZX4UVUYuTsjGrVhSjzTdjJrY0XwxqmsOotYCEPV24UV6T4e+Hun6ftlvR9pmHr90fhXYxRRwoEiQKo6AV208K95HzuKzu3u0F8zi/D3w6sLHEt+ftco5ww+UfhXY21tDboEhjWNR0CipqWu2NOMdkfOVsRVrO85XEpcUUVoc4UUUUAFFJwKxtd8S6do0Ra7mUP2jB+Y/hUyko7lwpyqO0Fc2aw9e8V6XoylbmdTIP8Almpy1ebeIviFf6kWisP9FgP8Q+8f8K4+aR5nLyMWY8lmOSa4qmKS0ifQYTJJT96s7Lsdd4h+Iepanujsv9Ftz3H3iPrXISTPK5aVi7HkknJpgpwFcU6kp7s+loYSlQVoKwlFLTtvRdu5m6AVmdTaW4ztRtZmVVDMx6AV1Xh7wLqmq4eZPsluf4pOp+gr0rw/4M0zRVVkiE03eR+TXTTw0pas8jFZtRo+7HVnmvh7wLqeqbZJ1+zQHux5x9K9J0DwVpejqpWETTDrI/Jro1UKMAYFPrvhRjDY+WxOYVsRo3oA46UUUVuecFFFFMAorA8ReK9P0KMi4mDSdo15Y15tqnxD1e4u99owgiU8L1z9awqVow3PQw+XV8QrxWh7RRXk2mfE69iwt9bLKPVODXS6f8SNHuABO725/wCmg4ojXpy2YVctxNLeJ2lFZljrunXyg2t3DJn0cVpBgR1rVNPY4ZQlHSSFooopkhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHLeO/DEeu2DPEoW6iGY29favFZoJLeaSKZSrocEHsRX0nXm/wATvCfmBtXsIyXA/fIvcetceIo8y5ke/lOPdKXsp7M8vooorzT7EWiiigApwptOFACUUUUAAooFFIAooooAKKKKACiiigAooopgFFFFACUUUUALRRRQAlFFFABRRRQAUUUUgCiiigBaKKKACiiimAUUUUAFFFFABRRRQAUUUUhhRRRQSFFFFABRRRTsAUUUUxhRRSVIBRRRQAUUUUAFFFFMBKKKKAAU4U0U6gAoooqQCiirWm6deanN5VhbvM/t0H1PaqSb2JnONNc0mVa0tF0LUdam8uwt2cZ5duEH1NegeG/hpBDtn1x/tEvXyl4QfX1rvbW0gtIhHbxrEi8BVGBXbTwresj57F53GN4UVfzOL8N/Diysis2qMLuYfwEYRfw7120MMcEYjhRUUdAowBT8etLXdGEY7I+Zq4irXlzVHcAKWiitDEKKKKCQooqveXkFnCZbiRY0AySxxQNRcnZFis3VtcsNHhMl9OkS9gTyfoK4TxN8SiN8GiR5bp5zj5fwHevOr+9ur+czXs7zSnuzfy9K46mJS2PdwmTVKtpVdF+J23iX4j3N5uh0geRCePMYfMfp6Vw1xcS3EpkmkeVz1Zjk1FSiuCdSU3qfU4fB0cOv3aHUUUVkdYlFbOg+GNT1yUfZICsHeaThfw9a9O8M+ANP0kLLcD7Xcf3nHA+grpp4dzV2eXiszo4bRO7PO/D3gnVtbZXEf2a2P/LWTjP0Fen+HPBel6KquE+0XHeWUZP4eldGqBVAVcAU+u+nQjA+UxWZVsT1suwiqFACjAFLRRW9rHmhRRRSAKKhubmK2iMkzrGi9SxwK888U/EmOJnttGAlccNMfur9PWonNQV2dOHwtTES5YI7jVtZstJhM17OkaD1bk/QV5p4n+I897ug0kNbRH/lq33j9PSuK1DULrUJzPfTNM59f4foO1V+v/164KmIctEfVYPJqdK06ur/AAHzSvPKZZpGlkbqzNk03NNAxSiuRu+570YqKshwNBpKltbW4vZhDaQvNIeioMmmk29BTnGCvIjileNt0TFG9QcV1PhfUfFFzcKmkTzTBepk+ZB+Jrd8MfDQkLPrb+4gj/qa9G0+wttPgENnCkSL2UYrvo0ZLVs+XzDMqDThCN2R6Kt+tmv9qSRPcdzECF/Wr9FFdx8y9XcKKKKCQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkdFdSrgMp4INLRQB4t8Q/C7aNfG7tk/0OY54/gb0rkK+jdUsLfU7KS1ukDxyDBBrwjxNos+h6m9tMCydY2/vLXm4ijy+9HY+wynH+1j7Ke6MqiiiuM+gClFJS0AFFFFAB2oo7UUgCkNLSGgBaKKKACiiigAooooAKKKKAEooopgFFFFABRRRQAtFFFAC0UUUAJRRRQAUUUUgCiiigAooopgFFFFAgooooAKKKKBhRRRSEJRRRTAKKKKACiiigBTTTTjTTQhhRRRQIWiiigYtFFFADDQKdRQAopaSlVWZwiruZugFA7pK7Eqa0tZ7uUR2sLyv6AV1XhrwFf6mVkvA1rbns33jXqGieHtP0aAJaQKDjl8cmumnh5Sd3ojw8XnFOl7tPVnAeG/hvNcbJ9Yby0PPkr1/E16Tpul2WmwiKzgSJR2UYq3RXfClGGyPlcRjKuId5sWiiitTlCiiimSFFGaKBhTHdUXczbQPWsjxD4m0/Q4C9zKC/aNeprynxN431HWWaOM/ZrY8bF6ke5rGdaMNz0cJl9XEvRWXc7zxN8QbHTN0Nj/pVwOynKj6mvMNd1/UNak33k5KdolOFH4VlEknmivPqYiU9Oh9dhMto4bW133CiiiuY9IOlFPhhluHWKCNpJHOAoGTXeeFfhxNc4uNbby4+ohQ8n61rClKb0OPE4ylhleTOM0vSb3VZhFZWzSsep/hH1NemeFvhza2e241Ui5mHOz+Af412mnaba6dbrDaQJEi9Aoq5XoU8Oo6s+Uxeb1K/uw0RFDBHCgSNAqrwAKloorqPFbu9QooooASiiqeo6jbafA011KsaAdSetDdtWOKcnaJcrm/E3jHT9EQqW8647Rr1/H0riPFHxCub15LbSP3UPQyfxH6Vw00kkjmSV2djySeTXFUxK2ifQ4LJpVLTraLsbHiPxVqGvS5uJCkGeIl6fj61i9aTrS1wSk5O7PqqNGFCPLBWQUUUVBsJmjbu+XbuZugFauheH9R1qcR2MB255kPCr+NereFPA9hoirLMoubru7dF+ldFOhKpvseVi8zpYXTd9jh/Cnw/vNU2Tajm1t/7n8bf4V6jomhWGjQCKyt0jwOW/iP1NaSjsOBS16NOjGK0PkMVjq2JfvPTsFFGKWtjhCiiigAooooAKKKKACiiigAooooAKKKKACiiigAopglQuU3DcO2afQOwUUUUCCiiigAooooAKKKKBBRRRQMKKKKACue8ZeHYte01kwBOnMb+hroaKmUU1Zl06kqc1OD1R83XltLZ3cttcIUliOCDUNes/Erwp9ugOp2Sf6REPnUfxr/AI15NXk1qfJI++wOLjiqakt+otFFFYneFFFFAB2oo7UUgCkNLSGgBaKKKACiiigAooooAKKKKACiiimAlFFFAC0UUUALRRRQApppp1N70AFLRSUAFFFFIAooooAKKKKACiiimAUUUUAFFFFABRRRQAUUUUAJRRRQAUUUUALRRRSASilxRimAUUUUAFFFFABRVnTtOu9SuBBYwNNIfToPqe1ek+FvhvHb7Z9aZZpRyIx90fX1ranRlPbY8/FZhSwy1evY4bw/4Y1HW5ALeLy4s8yv0r1Pwz4J07RQsrL59xj779vpXSwW8NtGI4o1RR0CjAqSu+nQjH1PlMZmdXE6bIQDFOFFFdKPKCiiimAUUUVIBRRXLeKfGtjog8tT59z2jQ9Pr6VMpKKuzWlSnVlywV2dFd3cFnC0tzKkaKMksa868VfEf71tooz2MxHH4CuM8QeI9Q12ctdSlU7RL90f41kCuGpiW9In1GDyVQtOtr5EtzdT3M7SzySSyN1Z2zUVFFcUpN6s+jjBRVkJRSGrOn2F3qVytvYwNNIfTov1PahJt2Qp1I01zS2K9dB4b8IalrkoZEMFv3lcfyruPCnw6hs9lzrG2ecciMfcT/Gu7jiSJAkahVHGBXdSwvWR81js6WsKH3mJ4c8KadocIEESyTd5W+8a3gKUDFFdyikrI+YnUlVfNN3YUUUVRmFFFFABTSw71S1XVLXS7Zri8mEca9zXlXinx/e6kXg04m2t+m/+Jv8ACsqlWNNXZ3YXBVcS7RWh2fivx3ZaPugtWFxdD+EdF+pryvWtb1DWbjzLyZmGeFUfKKzSSWJYksetFebVxEp+h9jg8tpYZbXfcWiiiuc9MKSlrU0Dw7qGvXHl2UJ2KfnmbhFH17n2FXCDk7Izq1YUYuc3ZGZGjSyCOMMzt0A713vhD4ezXW251geXH1EX8R+vpXY+FfB1hoMIYIs90fvTMvP4eldMM1308NZ3kfKY7OJTfJR0XcrWFjb2FusNrEsaL2UVZooruSsfPtuTuxaKKKQhM0tFZ2s61Y6NbGa+mWJB0B6n2ApNpbjUXJ2itTR7UV5FqPxAu9S1i1jtD9nsxOmf7zjcOvpXraEMMjvUwmp3sdFfC1MOl7TqOoooqzlCiiigAooooAKKKKACiiigArP13U4tJ02a8nOFiUn6nsKv15J8VvEH2y/Gl27/ALqA5lx3b0/Csqs+SNzrweGeJqqCOWufEOozanLfJdSJJK2flP3R2Fa1h4/1y1I3zLOvo4rlcelOryvbTvdM+6eBoyilKKPUNN+KduwC6hbPGf7yDIrqNN8YaNqAAhvIwx/hY4NeDNQOuQTn2raOKktzzq2SUJ6wdj6TiuIpRlHVvoalzXzvY61qNkwNtezJjtu4rotN+IusWoxc+XcL78GumOKi9zyauSVo/A7nsuaWvP8ATfihYS4W9t5ID3I5FdPpnifSNRH+j3sZJ/hJwfyreNSEtmeXVwdel8UTZopFIIGKWtDmCilooEJRRRQAUUUUANdA6kNyD1FeRfEjwr/Z12dRs0/0eY/Oo/hb/CvX6r39pDfWslvcIHjkG0g1lUgpqx2YTFSw1RSWx840Vu+MPD0ugakY8ZtpOYm9B6fWsKvInFxdmffUa0a0FODEopaKk2AUUCikAUUUUAFFFFABRRRQAUUUUAFFFFAC0U2imAlFOooAKKKKACiiigAooooAKKKKACiiigAooopAFFFFMAooooASiiigAooooAWiiikMKKKKAEooooAWiiigAooooEFFFFABRRWpoWhX2tXAjsoSy/xSHhV/GqjFydkZ1KsKUeabsjL/AJ12PhbwBe6qVn1DNrbf3f43H07V2/hfwNYaOqzTqLm7x/rGHC/QV1gXA44rupYe2sj5fG5y5XhQ+8oaTpFlpFqILK3SJQOw5b6nvWgB04xRjpTq7YxS2PnJSlJ3kJRRRTEFFFFMAooopAJmoL69t7GBprqRIolGSzHAFYPinxhY+H4ihYTXB+7Ep5/H0FeR+IvEd/r05a7lIiz8sQ+6PwrCpXjA9TB5ZUxLu9InV+LfiLJdeZa6J+6i6G4bqf8AdHauAkkeWRndizscszck0DpRXm1KspvU+xwmCpYaNoISiiisjtFptXtI0u91e48ixgaRu56KPqa9V8JeArPSFW4vVW5vOu4j5UPsP61vToSn6Hm4zMaWGVr3fY47wr4BvdW23GohrO164/5aOPp2r1XRtFsNHtxDYQLEo6kDk/U96vqm1eKfXpUqKgtD47FY6riXeT07CUUUVseeFFFFAwooqK6uI7aJpJmCIoySe1AJXdkPNcz4r8Z2Gho0KMJ7rHESHp9fSuV8Y/EMvvtdF+VejT9/+A155JNJM5eVy5Y5LHqa462IUdIn0OByaVS1Stouxf1zW77Wroz3s27+6i/dX6Cs760fSivNlJyd2fWU6UaUVGKshRxRRRSNAo6uq9WPQetaGjaReavdrb2UJkY/ePRVHua9X8JeBrPRgs9yBc3nXzCOF/3a6KVB1NXseZjcxpYZW3fY5Lwd8P5b8Jea0rwwdVtxwzf7x7D2616nY2dvZW6w20SxRrwqqMAVYACjAor0qdKMFofGYnGVMRK82LRRRWpyBRRRQAUVBd3cNrC0s7iNEGSzHAryzxf8Q5bovaaNmKLo0x+8309KynUUFdnXhsJUxMuWCOs8XeOLHQ1a3gIuLzHCA8Kf9o15BrOr3ms3jXN9MZHPQdFX2AqmzM7l3Ysx5JPU0YrzatZzPssFl1PDLm3l3JLY7biJvR1P619IwNugRvUA181f0r6O0p/M021f+9GprpwuzPIz5awfqW6KKK7j5kKKKKACiiigAooooABQaWmsaAMrxRqa6TotzeMcGNDt/wB49K8BnleeV5pWLM7FmPvXZ/E/xF/aWo/2fbPm3tz+8x0Zv/rVxNeZiavNLlXQ+0yfCOjT9pPdhRRRXGe6JR0pcUYoAKXFJS0AFKDTaUUBuaen69qmnEGzvpkx/CXyv5Hiui034lazb4+1pFdKPba35jj9K4rNGa2jWlHY5KuBw9X4oI9d034m6XcYW8jltWPUkbl/Mc/pXR6f4k0nUDizv4JCf4d+D+VfP+aTPpwa3ji31R5NXIqctabsfSu4etOr5803xJrGm4+y38wUdEY7l/I10umfE/VISFvreKcDuvyn/Ct44mD3PJq5NXh8Op69miuK034kaRdYFyJLVj/fGR+YrpbHWtPvlBtruGTPYOK6FOL2Z5lTDVaXxxsaOKTFAalzVGBj+J9Dg13THtZlG/rG/wDdbsa8K1Sxm029ltLpNkkZxk9x6ivo2uM+InhddZsWubZQLuIZB/vD0rlr0uZXW57OV476vPkl8LPG6Kc6sshVgVZeCDRXmWPtk1JXQ0UUCikMKKKKACiiigAooooAKKKKAEooooAKKKKYC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAlFFFAC0UUUAFFFFABRRRQAlFFFAC0UUUhhRRRQAlFFFAC0UUUALRR0ooAKVFZ3CRoXdugHetLQvD9/rswS0iITvI33RXrXhbwZYaFErsomuu8jf0rppUJTd3seTjMzpYZcsdWcb4V+Hk96UudYzFF1EQ6n616fpmnW2m26w2kKxIo6KMVZHHTilr0YU4wWh8hicZVxLvNi0UUVocQUUUUAFFFFAwoorL13W7PRrUz3kiqOwPU/ShuyuyowlN2ijQnmjhjZ5WCqoySa848Y/EIKr2eiNlujT9h/u1zHivxle60zRxkw2ucBB1b61zPXrXBWxF/difUYLJ7WnX+4klne4laWZ2kdjks3JplJS1wtt7n0kYqKskFLSVLbW811OkNtGZJHOAooSbdkOUlBXZHXVeEfBN5rUizXCm3s+u4j5m+ldX4P+HsdoVu9ZxNcdRGPur9fWu/jjWNAqKFUcACu+jhusj5nG5xvTofeUdH0e00q1WCzhVFA5Pc/WtEcUlGK70klZHzEpOT5pMKKKKCAooooAKKa/SuK8X+O7fSla3sSJ7vpgfdT61MpqKuzajQqV5csEdBr/AIgstEtjLdyYP8KD7x/CvIfFXi+91yZgD5NtniLPX61jajqV3qd01xeymV29e30qr1rzatdy0R9jgcqhQ96esgooorlPaFopKeiszqu3cW4AFASkkrsT+VdP4T8HXeuSCSQGK07v3P0rf8F/D8vsvNaXA6pB/wDFf4V6XBBHBGI4kCqOABXbQw99ZHzWPzhK9Ojv3KOi6LZ6PaiGzhC+p7n61pUoFFeikloj5eU3N3kJS0UUEBRRRQAnes7W9Zs9FtWnvJQoHQd2PoKzPFfiu00GLa3726YfJEOv/wCqvHdc1i71m7M97IWH8KD7q/SuatWUdOp62By2eJfNLSJo+LfFt34gnKBjFaqfljH8Xua5ylpK8ycnJ3Z9nRoQoQUYKwUCiipNx1fQfhaTzfD9g3rCtfPYr3j4fSeZ4Q05mPIjx+RIrtwnxM+bz6P7uL8zoKKKK9E+TCiiigAooooAKKKKACuY8fa8ui6NJtb/AEiYFIx357/hXQ3dxHbQPNKwVEG4k+leEeLddk17V5Lgn/R0+WJcdB6/jXPWqci0PUy3CPEVbvZGQ7F2LMSWJySe9JRRXkyPu0rRsgooopFCUUUUAFFFFACUUUYoAWiiigBKKKKAuFFFAoAcKekjIcoxU+oOKjpM07shxi9zc07xXrWnkeResyj+GT5v5102nfFC7jwL+1WQd2Tg159S1rGtOOzOOrl+Gq/FE9m074haPeYWSU27ntIK6K21CyvFBguY5AfQ1871JDcTQNuhleM/7JxXTHFv7SPLq5FBu9OVj0H4keE2acalpkeWY4kjHcnvRXK2ni3WbZNi3TSL6Sc0VDdKTudNGni6EFTunYwqWkorjPZFooooAKKKKACiiigAooooAKKKKAA0hpaKBgKBRRQAUUUUxBRRRQAUUUUmAtFFFJAJRRRVAIKdTRThQAlFFFACUUUUAFFFFIAooooAKKKKBhRRRQAtFFFMQtBpKv6LpF7rV2tvYRNIf4nP3U+ppxi5PQipUjSi5TehR64Xqx6Cu78HeAJb7bd6yDFEeVhHDN9fQV1nhTwPZaKiz3AFzd/33HC/7orrAMcAV6FHD21kfK47OHO9Ojou5XsbK3sbdYbaJY414AUYq1SUtdlj51tt3YUUUUxBRRRQAUUUUAFFNkdUQs5AUdSa818Z/EERmSz0Y5b7rT9h/u+/vUTmoK7OnD4apiZ8sEdJ4r8YWWhRlAwmuWHyxL/X0ryHW9YvNYuzcXsm8/wp/Co9qoySvNK0srs8jHJZmyTTOTXl1a7qaH2mCy6nhVd6yEop2KK5z1RtLRXbeDfAc+pul5qymG26rF0Zvr6CtYU3N2Ry4nFU8NDmmzA8O+HL/Xrjy7RMRD78p6LXsPhfwpY6BAPITfOR80rdT9PStWysoLGBYbWJY0UYCqMCrGOK9KnRjBHxmNzKpiXZaRHUUUV0HlhRRRQJhRRRQISop7iO3jMkzqiKMkngCqWua1Z6LaNc3sgRR0Hdj6D3rxvxb4wvdfmZMtBZg/LEG+97t/hWNSrGnuejg8BUxUrLRdzoPG/j57ovZaM22Lo047/7v+NefMxJJJJJ5JNFFeXOpKbuz7XC4SnhocsUJRRRWR1i0UVq+HNAvddvRBartUffkP3UH+NXGLk7Iyq1oUY883oU9PsbnUbpLeyiM0rdh2+vtXrXgzwLBo6rc36ie9P/AHzH7D/Gtnwx4csvD9mIbZAZSPnlI5c/57Vt16VGgo6vc+Px+aTrtwp6RFAwMDiiiiuk8UKKKKYgooooASuN8a+NrfR1a0tGEt6R0HSP3P8AhWV4/wDHYtS2n6O+Zukkw6J7D3rzCR2lYvIS7scknqa462I5dIn0OXZU6lqtXbsTX15Pe3DzXEpkkfksar9qX6cUCvObbd2fXRjGC5UJRS0VIwopaKAEr2z4WTeb4RgDf8s2Zf1zXileufB593h2dN33bhv5CuzCP3rHg56r0E/M7uiiivTPjQooooAKKKKACjtRWT4m1eLRtMkupTyo+Uf3m7Ck3bUqEHOSijjviv4h8uAaTbMfMkGZWH8K+n415fVi/vJb+8lurhi0srZI/wA+lV68mtU55H3+Awqw9JR6i0UUVid4tFFFIApKWNHkkCRjJbtXTaPoix4d13y+p6CrhBzZjUrRpq7MO20y7uQDFEcep4q9F4duG5eRFrrktEAy7ZxUghi/uqa6lh11PPljW3oca/h+YH5ZU/GoJdFuk6FG+hruTDH/AHFqOSzjcfdx9Kv6uiVjJdTzyaCSBsSIVPvUddtd6acEACVfTFYV5pSkkw/I3oelc86Djsd1LExmY1JT5EaNyrjDDqKaRWB0xCiiipKCiiigQlLRRQAUUUtACUUtFADaKSloAKWkooAWiiigAooooAKKKKACiiigAopBSigYUUGkNAC0UUUxBRRRQAUUUUgCiiigAooooAKKKKYBRRRQAUUUUAJRRRSAKKKKAFooooGFFFFABS0+CGW4mSG3jMkrnAUV6d4P+H0VuqXmrDzJ+qx/wr9a2p0pTODF46nhY+89TmfCXgm51orPdKbe19TwzfSvW9I0qz0q3EFlCsaD0HWrcUSxIFQAAdMVJXp06Maa0Pi8ZjquJldvTsFFFFbHCFFFFABRRRQAUUUUAJkVXv72CxtmnuZBFGoySapeINes9Es2mupAp/hXux9q8c8UeKL3Xrk+Y5S3B+WMdPxrCrWUD0sFl9TFSvtE0/GnjefWWa209mhswcEjhn/+tXH0UV5VWpKb1PtsNhaeHjywQUUUVB0hU1naz310ttaxGSR+Ao/z0q94f0G+1y6EVmny/wAUh+6or2Lwt4WsvD9viJd9ww+eU9W/+tXTSoOWvQ8jH5nTwy5Y6yMTwf8AD+HTdl3qYE12OQv8Mf09T713MahFwBilApa9OEFFaHxlbEVK8uabCiiirMAooooGLRTaKAErF8UeJLPQLMyzsGlI+SIdXP8AhWd4y8aW2iI1vb4mvCOFHRfc149qWoXOpXbXN5MZZG9eg+lc1WuoaLc9nL8slXfPPSP5k/iDWrzXL43N7KT/AHUH3VHoBWaeaWivMnJyd2fZU6cacVGK0EoooqDUKKK6/wAEeC59bdbm6VobMc+hf6e1XCDm7I5sRiaeHhzzZT8IeFLrxDcq+0xWaH55T/F7LXs2j6Va6TaLb2cQRF9Op9zU9lZQWNukFsgREGABVivUpUVBHxGNx1TFS127C0UUVuecJRRRTAWikpGYKpZjgCgA3YHpXm3xC8bhVfTdIky3SWYfw+wqDx/44MrSabpEmFHEsw/ktecnJJJJOeee9cNfEfZifTZbld7VavyQhJZizkknnmiiivPbufVWSQUUtFIBRS0lLQMKKKKACvUPgvJ/oGoRf3ZlP5rXl9ejfBeTE+pRe0bfzFdWF+M8jOFfDP5HqFFFFeqfChRRRQAUUUUANkdY0LMcAck14p8QvEbazqhghb/RoDhR6n1rrvil4lFlaf2daSgTzD5yP4VrycnPXknvXBiatvdR9Rk2Bv8Av5/IKKKK88+nFooopDFopKkg2/aE8z7mRmmhSdjpPDmlkIJZFwz8/Ra25J1iGyIZ96qLMRCBGSA2PyoFd0GlHQ8aq3OV5EjTSN1cD6U3zGHRmpMGk/CjmZHIiaOd175+tWY7r+8KoA+1PBrRVGiXTTNE4YbkNV7mzjuFyRh/71VBdPBIAeUrRjlSRNyHNaqSluRyyg7o5LWLQoSkowf4WrEcY4r0K7to7qFo5RkGuO1bT3spCrDKH7rVy1aXVHp4bEX0ZmUUpGDSVx+R6AlFFFAgzS5puaWkAtFJRQA6ikooASiiigQUUUUAFFFFMYUUUUAFFFFIAooooADSikNAoAXtSGl7UhoAKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUALRRRQAUUUUAFFFFABRRRQAtFFFABWp4f0C+1248qzT5R95yflWtbwd4NudbnE90DDZjqT1f6V67pmnWumW6W9pCsaKMfKK6qOHctZbHg4/No0lyUtZGR4U8JWehxBgokuD96Ruv4V0nTpRilr0oxUVZHyNSrOrJymwoooqjMKKKKACiiigAooooAK53xb4ptPD9oxdxJcMPkiHX8fas7xx42t9ERrSzYTXrDoDwnuf8ACvIL68uL65a4upWllfkkmuSvXUNFue5l+VzxFp1NI/mWNX1e61e8a5vG3MTwOyj0FUsjtSUV5spOT1Ps6dONKPLFaDqKSnD0VdzHoBRuU2luJXU+DvBt1rsqzXAMNl3fu/stbXgrwA02y91pdqdUg7t/vf4V6dBBHDGqRKFVRgAdq7KGG+1M+ZzHNkr0qD+ZW0zTbXTLRLe0iWNFHQd/rV0fTFLRXopJKyPlZScndhRRRQIKKKKAFpM0pphNAxT0rhfHfjePTUax01w92wwzDon/ANeqXjvx35O/T9HdWk6STDovsPevMpZGkdmZizMcknvXFWr8vuxPosuyp1GqtbbsFxPJPK0k7F5GOST3plJS15rbbuz61RUVZCmmmnGmmgYUUV6J8P8AwMbjZqWrxkJ1ihPf3atadKVR2Rx4vF08NDmkyv4E8Dtfsl/qsbLbDmOJv+WnufavWYo0ijWONQqqMADtRHGI1CqAAKkr1qdNU1ZHw2KxU8TPmmIBS0UVocYUUUUAFFFFADc4zu4ArzD4ieMjIX0zS5PlHE0in9BUnxC8asC+maW/I4lkH/oIrzZmLHJOc881w18Rb3Yn0uV5Zd+2rL0QE5OTTTQTRXntn1aSSFoooNIYlLSUtMQtFFFIYlFFFAC13nwdl26zdx/3ogfyNcFXZfCZ9vihl/vQN+hFb4d2mjzc0jfCyPZaKKK9g+ACiiigBayfEmsQ6Lpkl1MQNo+Uep7CtKV1jQsxwAMk14h498Str2pmKFv9EtyQv+0fWsatTkR6GAwksVUt0W5h6nfS6jfy3U7EtIc/T2qtSYpa8mTcndn3sIqEVFC0UUVJYUUUGkMbXefDvwpb6zYXE+pWrKu4CJ84z64FYHgfTLjUtejEVrHcRR8yeb91R6160usjSisOp2T2kXRZIxuT9Old+GoXXMz5nN8wcH7KnuY194MktwGsXMiD+F+tYVxaTW0myeMxn3HWvTrO9t7yISW0ySqf7rUt1ZwXURSaJXB9a6pUl0PHpZjUjpU1R5WeKSut1XwljMmntnvsb+lctcW8tvIUnQxsOxrnlBxPZo4qnWXusjoooqDqIboZQVnXGrNpU0WcsrHke1aFwcjOeBXGardG7vGYH5U4FQ5a6GsI8ysz0O0u4ruBZYWBRqbqFol7bNDIM56H0NcHoWsy6dcgOc27HDD0969BjkDoHXkMMiuunJTRzVIOlK6PPrqJ4Lh4nGGQ4NRmtzxjB5dzFcKOJQVb6j/61YSnK1w1ocsj16FTnimIaKWkrnNxaKKKACiiimAtFFFACUUUUhhRRRQAUUUUhBRRRQAUUUUwCiiigANAoNAoAXtSGl7UhoAKKKKYBRRRQAUUUUAFFFFABRRRSYBRRRTAWiiigAooooAKKKKCgooqezs7i+uUt7OIyTN0Uf19BTSb2InJQV5EKqWKqBuY8Ko6sa9G8E+At5W+1pQB1SAj9W/wrY8F+BoNHC3V9tuLzrkjhPpXaIABxXfRw9neR8lmObOd6dHbuJBEkUYSNQqjgAVIBQKDXefPX6hRRRSEJRRRQAtFFFABRRTJGRELMcAdTQA7NcD488cJp++w0pw92eHkHKxf/XrP8d+Pch9P0R8cYecfyH+NebsxIJbk9a4a+I5dIn0mW5U5tVa23YWaSSaV5ZnLyOcsxplLRivNbbd2fVxioqyCiip7C0nvrpLe1iMkjnAAqkm3ZDlJQV5DIYpJ5VihjaSRzhVUZJr1bwN4FTTlW91NFlujysfVY/8AE1o+CvB8Ohwia6xNeOOXPRfZa6vHFelRw6h70tz43Ms0lVbp0vh/McAAMAUUUV2HhBRRRQAUUUUAFFFMeRI1LMwVRySaAFdtvzMdqjvXlvxA8cm48zTdHk/d9JZ1PX2X/Gq/j7xu9876dpb7bUfLJIvV/Ye1cJ1rgr4i3uxPp8tyratW+SEOWOWJOfWloorz277n1CVlZCmmmnGmmgYUUV6R8PvBefL1PVk5+9FGe3+1/hWtKk6jsjjxeLp4WnzSHfD/AMDHKajq6cj5ooT/AA+7f4V6YqhVCqMCgDaMLwBRXrwgoKyPg8Tip4mbnMd2ooorQ5hKKKKAFooopAJXn/xG8YfY4X0zTpMXLDEjDnyx/jV74geLU0S2NpaMGvZhxj+Aep/pXjsszyu8krF3c5Zj1JrjxFblXKj6HKstdV+1qLToNZi2dxznvSdKKWvMPr1Hl0CiiigYUhpaQ0AFFFFAC0UUUXAKKDTPMRf4xTEPrqfhe+zxfD833o3X9K5XrW94Dfy/Fmnn1cr+amtaXxo5McubDy9Ge9d6WkXoKWvZPzoDSUGs3X9Xg0bTpLu5baiD8SfQUm7K44wc2oxOS+KfiRrG1XS7N8XFwP3hH8Cf/XryfoMDpVvVdQn1PUJ7u5OXlbP0HYVUrya1Tnlfoff4DCLDUlHr1CiiisDvFooopFBUtlbi7vIbczRQea23zJThRURrsvhZoSanqrXlzDvitxhdw+UtWtKHPKxxY3EewouR6D4J8P2mhacRBMlxJJzJKuMH6Y7V0EsSTRlJFV1bqCMg1zl/4UiWQ3Oi3Emnz9cRnCH6is4eI9Z0OQRa5aGeL/nsn+PSvajHlVkfntSo6knKTL2o+EIxKbjRZ3sLjrtVjsb8O1U4fE+qaNMLfxFZs6dBcRjr/Q/pXR6Rrlhq6brKcOR1Q8MPwq5c28N1EYrmJZUPUMM1XqZ2INP1Ky1GHzLOdZR3API+opuo6bbahGUuEB9D3FcrqvhG4sZze+HZ3jdefJz/ACP9DSaN44eOcWevQtbyjjzduP8Avof4U3BNFRk4u6K2s+G7qwYyQjzofb7w+orF+teprcQy24lRlkjYZBU8GuZ1vQoLkNNaBYpsZx/Ca5alB7xPbwuYfZqfeeb+Jb77NaGKI/vJf0Fcr0rQ8Qx3keqyrqELRODgA9MD0rKnl2LXnSTT1Pp6XLyqSZFdP/CK7vwXetcaQEkbLRHbn27V56Tnk967rwTH5OjySsMB2JyfQV0UdGYV0pIPHE2IreP1Zj+mK523bKU/Xr86jqLSqf3S/LGPb1/GorL7h+tZ4h3OjDpxSRPRQetFch3CUUUUCCiiimAUUtFACUUUUgFFFAooAKQ0tIaYAaSlNJQAtFFFABRRRQAUUUUAL2ooooASiiigAooooAWim0UALRRRQAUUUUALRRRQAUUUUAFFFFABRRXReEfCN3r84fBitA3zSHv7LVRg5OyMa2IhQg5Tdil4e0G6127ENqvyj70hHyr9a9i8LeF7Pw9bBYVLzsPnlPU/4Cr+i6RaaRaLbWcQRF6+pPqa0K9OlRUNT4vH5lPFOy0iIBS4ooroPJCiiimAUUUUAFFFFABRRUU8yRRs7sFVRkk0DSvoh00iRxszsFUckmvKPH/jdr130/THIgHDyr/F7D2qPx940bUXew0yVlthxJIP+Wn09q4Xqa4MRiNOWJ9TleV2tWrL0QpOTk8miiivPZ9RGIUUVd0bS7nV75LWzXcx+83ZB6miMXJ2RNScaceaT0E0vTLnVbpbaziLOe/ZR6mvZfB3hS30C26LLcOPnkPf2HtVjwr4attAsljhXdMRl3PVjW6tepQoqKu9z4jMcyliXyQ0iAFLRRXWeOFFFFABRRRQAUUlGaAGyMqqWc4Aryj4h+M2vHfTdNciFeJJB/F7D2qb4i+MzOz6Zpb4TpLKO/sK889zXn4jEfYifUZXlm1asvRCAZOTS0UVwn04tFFFABSUtd98PPBv2uRNT1OP90vMUR/i/wBo+1aU6bm7I5cVioYanzyJvh74IMhTVNVjwPvQwt29zXp6IEUKowBQihFCqMAU+vWp01BWR8DicVPEzcpBRRmitTnCiiigAooooAKwfGHiODw/pjSsQ07cRp/eP+FXdc1iDR9OkvLohVQZA9T2FeF+IdbuNb1J7m5JwTiNOyr6Vz1qvItD1stwDxU7y+FFXULua/vZbq5bfJIck1WpSaSvHcnJ3Z93CKglFC0UUUDCiiii4BRRRRcYUUUUCCoLmfyPu/MxqZjgGs12Mjlj+FCVzKpLlLOl2N5rOoxWluSZZTgD09/wr1TTPg/o6WijUZ7ie4IyzK+0A+2K5P4R3FvB4qzcMqlomCFvWvcY7iKb7kiP/unNejQjHluz5PM8XWjU5YuyPJPEHwfuLaN5/DepEuORBcdD7Bq4zQNVuNF8UWkeuWz2sltMN4I7dM19JVzvi7wbpfii3Vb2Py5ozlJ4+HX/ABFXKkt0clDMZxThUd0zcsL+2vrVJ7WZJInGVYHrVrNcFB8NLCC38uHUdRiUdNs20fkKytS+H+v2IM/h/wASXZdDkRTvwfxrdSaWqOKVOm37sj1BmCIWJwB3rxj4jeIzrGp/Zbd82luccdHbufwqre/EPxDpttPoniK08m7YbEuNuOPX0P1rmt27nPBrlxFbSyPeyjApSdSfTYdRRRXnn1IUUUUgCiinIu5lVV3MxwBSbsDdlc0fDmmNqeoKn/LNPmf6V61pd2dMtxFHAGjX+4MGsHwxpC6XYKjD98/zSH39K3kXbXlvGzhUvB6HyuPqqvK3Q2rLVbW9H7p8N3U8EVZmijnjMcqK6HqGGa5G/tI3/eIfLl7MPWlstdvLAhL5fNi9R1r2MNmsZWVXQ8SeFe6E1rwVE0v2rQZmsrleQqn5T/hVTTvF2o6VcCy8RW7YHAmXr/8AXrsLDUba+j3W7g+ozyPwpuoWFtqMJhu4RIh/vDkfSvehUjNXWpySg4vUfa31vewLLayiRG7isvW9CstWiInjCuvR1GGFc1qOh6n4bmN7oc0kkGcvH149x3qxpvji2vUFvcqILw8bWOA30rZR7EnL3F1rPg/UGEDGayz/ABfdP+BrstE8SWet2wMDbZgPniPUf/WqO5RLiIxyoJFY8g8iuK1fw7Ppsv2/RWYbTnyx1X6eorfluLY7HxFplnrFm0d2i/KMiTuleLazYT2V2Uky0Of3cg6MK76DxkLzTmtLs+Xdn5cngMP8az7qJLmIxyruQ9jWNXCRqLzPTwePnRdpfCcXY2j3t5HBGMlzg+w9a6PWdSjjtl02wOI412SOP4qzZIZtKeTyvuyceYOoHpVavIlF0m4yPqqU410pRegjcc1btFxDn1qi7fNitGIYjA9q5Kkuh3UviFooorE6BKKKKACiiimAtFFFACUUUUgFFFAooAKQ0tBpgIaSlNJQAtFFFABRRRQAtFFFACUUUUAFFFFABRRRQAUUUUAFFFFAC0UUUAFFFFABRRRQAUUfzNej+B/AbEx3+sLx95ID/M/4VpTpuo7I5MVjKeFhzSepl+CvBE2qul3qAMdoOVXoX/8ArV63ZW8VpAsMEYjjUYCjpUqIsaBVACjgAU4dMV6sKSgrI+GxWMqYqd5bC0UUVocgUUUUxBRRRQAUUUUAFFFRyyLGhZjtVeSTQHUSWVIY3kkYBV5JPQCvJPHvjN9VkewsHK2i8O4/jP8AhS/EDxm+pSPp+nSlLRTh5B/y0PoP9n+dcNXnV8Rf3YH1mV5Xa1asteiAUopBS1xH0gtFFXNG0u61a/Szs13u/U9kHcn2oUW3ZCnUjTi5Seg7RtIu9YvUtbJCzN1fsg9TXtXhTw5beHrFYoVBlb78pHLH/Cl8LeHbbQNPSGBQXIzJIerGtuvVo0FBa7nxGY5jLEy5I/Ch2aKKK6TyAooooAKKKKCQooooGJXnfxG8X/ZkbS9Of9+wxI4P3B6fWtL4g+LU0a2+x2rBr2YdP7i+prx6SR5ZGeRizscknqTXHiK1vdifQ5Vl3tWq1VadBrEsSWOSaSiivLPsEraBRRRTAWim71X+Kp7F7P7Un22QrADltgySPQVSV3YiUlFXOr8AeE31i5S9u0P2OI8L/fI7fSvYoYkjjEaABU4AHavMYvinpVhaR29hplx5aDAU7VFULz4u6g+fsmmwxj1kYt/LFejTlTpqx8biqOLxdTmcbLoewc0Zrwe7+JPiO4zsuI4Ae0cY/rmsi78T63d587VLo5/hDbR+mKt4mK2Jhk9aXxNI+h5r61gz508ceP7zYrMufF2hWxxNqduCPRwa+ennmnOZpHc/7TE/zoA9qzeK7HbDI19qZ7fd/Erw/BkLNJMf+maGsm7+LNoufstjNL/vELXk4paz+syOuGTYePxXZ6DdfFjUX/49rCFB/ttmse++IniG4B2XEcI/2Ez/ADrlqH5RlqHXm+p1Ry7Dx2iX7jWtR1WMfb7yWYBshS3H5VXPNV9PVpVEcSs8mcBEGT+VdDZeENfvdrR6bIq+spCf/XrBxnN3O1VKGHjZtJGNRXZWvwz1uXBmktYv+Blv6VZuPhfqUcBaC9gkcfwYKj86pYep2Od5phU7cxwtFWNQsLrT7lre+hMUw/hb+Y9ar1k04uzO+E41I80WJRmg0wmpLOg8J+FrvxHK/kuIbeM4aQ88+grubf4V2CY+0XdxIe+MKKf8GruCTw7JAuPOimbeP5Gu+6ivUpUYcibR8TjswxCrSgnZI46H4b+H0+/FJJ/vMai1H4b6NPDttN9q46Mhz+YNdpRW3sodjzljsRF352fPnibQ7zQbt7a8XcrglJB0cVzdfQnj7Qk1rQJkVf38QMkR77h2r5+27d25drLwa4atJQemx9TgcZ9bh7+6BCVIKnB9RWlpms32m3ST21xIrJ2LZB+tZgp4rO7Wx3ypwmrNH0T4U16HxBpEV1ERvPyyL/cbvWwQK8b+DmrNba5LYu2I7mPKr/tjn+VeyV6FOXNFM+HxuH9hWcVsJRRRVnLY5/xl4R0/xVpzW14hWUcxTL95G/w9q8CktrzQtduNE1QYlib5H7SL2I9jX07Xlnx70FZtIt9etkxc2DgOQOsZODn6GsatNTR6mX4udGolfQ4GimRSCWJJB0dQafXmH3cXdXCiiigArqvAmjfap/7QuP8AVR8RA929fwrndLsZdRv4rWLOXOWb+6vc16zp9pHaW0cEIwiKABXn4uvyrkW7PKzDE8kfZx3ZOg4p7PtGTRiq8j722ivJ2R87a7Fy0jZPSlmVZV2sMilHAxScVl1uUZ01jNbSefp0jK4/hXr/APXrU0nxPvb7PqI8pugft+NMqte2kNwNzja4/jFd+Fx1ShLRkSpRmtTp5rhRB5mVKEfnXnfibw1BqUr3Np+4uevH3Sf6UHUbvTZNhzJbHt2/+tWra3kV7HvhbJHVe4r7fAYyFaOr1PNr4edN+RyWk+I7rSrn+z9YVsA4DHqP8RXU/aIpYfORw0eM7hVbWtHtdXtzHcqA4+5IPvKa8+1CfUfC0z2kjCS2k43Do3uPQ+1eskcw/wAT2aahO89qojkzlQOA3/16qaLrTq/2PUfklHAc9foa0oJ47mJZI2DA81T1fTFvY9y/LMv3W/xrVMDQnRJIyrgEGueu42tpSh+oPtTtM1V4JPseoZV1+6x/lTFZ7y6aU9CePYV5mZSp8ifU9zKZVHPlWw60g3He4+lXKAMDHYUlfNt31Ps4R5ULRRRQXYSiiigAooopgLRRRQAlAooFIBaWkpc0AFJRRQAlIaWigAooopgFFFFAC0UUUgEooooAKKKKYC0UUUAFFFFABRRRQAUUUUAFFFFABT4YpJ5khgQySucKg706ytbi+u47e1iMsjnAUV7F4M8G22hwie4Cy3rDluy+y1vSouo/I83HZjHCxstzP8DeBotPKX2qxiS7xlVPKp/9eu+VePQUvQUV6kIKCsj4iviJ4ibnNhRRRVmAUUUUAFFFFABRRRQAUUUE4oAYzbQSzYAryf4ieMmvGfTdMciAcSOP4j6D2qz8Q/G3ml9L0uTanSWUfyFedclvWuDEV/sxPqMqyxu1asvRDTz1oxTsUV559QJS0lTWdtNeXMdvbJvkc4Aqkm3ZClJRXM9iXS9OudUvUtbNDJK5/AD1PtXtvhDwzbeHrAIoVrl+ZZMck/4VD4J8LweHrPL4e7kGZJD/ACHtXS16VCioK8tz4nMswliJckH7v5h1+lLRRXWeMFFFFABRRTXYL8zMFA9aAHUVzWt+N9H0vKGfz5R/BHz+tcdqXxSunLLYWaRjsznJrN1IrqdlLBVqusUeq596xPF3iCDQdJluWIMnSOPuzHpXkd54y128J337xqf4Y/l/lWNPdTzsTNK8jf7ZJrGddWsj06GUSU06j0Fvbye+u5Lm6cvJK2WNQB/m6UfhTXYLXA1d3PpoycEox2QSPtqIzGo2YtTRkUuVFc8mSGQ0hdqj3U7NFkLmYHnrTTTqaaYgNIaWmmmAU3dj+Ku6+HfgiLxBE97qBYWqttVVON5HXn0r0+w8GaBY48jTYcj+Jlya2jRcldnlV80p0ZOFrs+fre3ubkgW9tNMx/uRk1Pc2N5ZAG+tJ7cHoZIyB+dfSUVrBAoWKJUA7ACmXtjb3sDRXUSSowwVYZFafV0cKzqV/h0PmsUV1PxG8Kr4ZvkubRW/s+5baP8Apk/936GuYrklFwdmfRYbERxEFOAlGKdikqDqPUvgvp1qNInvPLQ3LzMrOfvADoK9IC49K8Z+FOuDTtVfT52Pk3ZG32f/AOvXtFepRacEfCZlCdOu+YTFFFFannHL+O/DMeuaY7RIFuohujb3Hb6GvEmVkZkkBV1JVl9DX0ma8R+JOk/2V4kaVFxBdjevpu7iuLFU7rmR9HkmLak6MvkcxUclPYgUxjXn9T6yWxu/D/W20TxDCS2IJyI5R256H8K97Vtygg8HmvmMZDZU4I5zX0d4elebRLOSQ5ZolJP4V6eHleLR8dnVDkmqi6mhRRRXSeCIeeteC/EnQH0bxBKVXFvcsZIyOnuPwr3usTxd4dt/EemNaz/LIOY5O6NWdSHPE7cBivq9W72PnUU6tfXvDGp6JcFLu3coD/rUGVNZ1vaXNzKI4LeWRz0CITXBKEk7WPsYV4Tjzp6HQ/DOJ5fGNls/hLMf++TXvY6VwXww8Hy6Ij6hqK7buVdqx/8APMf4mu9rtpRcY6nyWY1o1q147CUUUVqecFZ3iPTI9Y0S80+UZW5iaP8AMcfrWjRQNOzPl/Rlkihkt5uJLaRomHoQcVfrS+IOmHRfiFdhRtg1FRcJjpu6N+orNNeVVjyzZ+g4Ct7WimFFNrf8H6OdQvhLKoMMPJ9z2Fc9WoqcW2dFaoqUHJnS+CtH+w2X2mZf384z/uj0rp0FNjQAAAYA6ClkfYM18/KbnJyZ8lVqOrNyY2eXaNo6mo4l28nkmmxgyMWapCcDFZSdydgJpKSipAdVC+ud7eXH0HWpL658mPav3jWdnPPc1cI9TWEeoOiyIVYcVkXFrcadN9ps2JHoK16PrXVSqzpyvFmkoKSsyKz162uIGM5WOVBkqe/0rkNVf+0Hka4XernpUviO1EtyZLEY28kDuazbW53jY/Eg7Gvu8rx8aseWe54mKwrh70djKkjuNFuN8WZLdjyK2rS6iuohLG2R3H92nSRpPGUcZB6isJ4ptJvMw5MTnkV69aSprmexy0oOo+VEuseVc3CqEyy/xVNbxCGIKOp7023j3fOe9T18jiK8qs22fd4DCRoQWmon1ooorA9QKKKKACiiigAooopgFFFFMAxRRRUgFFFFABRSUtABSUtFABRRRQAlFFFMBaKKKQCUUUUAFFFFMBaKKKAFopKKACiiigAooo60AN71b06wuNSuo7azjMkrnGB29zS6PptxrF+lpZpuZj8zdkHqa9q8IeF7Xw/Z7UG+4b78p6n/AOtXRSoubv0PJzHMY4ePLHcj8HeE7XQLXeR5l04+eQ/yHtXS4oor1IwUVZHxVWrOrLnk9RaKKKoyCiiigAooooAKKKKACiiigBprzv4h+MRbo2m6c/708SOD9weg96ufEPxeNMjawsWBu3HLD+Af415HJI8sjPIxZmOSTXFiK/L7qPosqy11Gq1VadBvJYtnOfWnU2ivOufXqKQtFFFAx8MMk8qxQoXkc4CjvXsPgLwemjW4u7tVa9kHJ/55j0FZvwz8JC3jXVb9P3zj90p/gX1+tehgADA6V6OHo2V2fHZrmLm3RpvTqOA7mjFFFdp88FFFFABSUtU9VvodOsZru5bZFCpZj7UDSu7FbxBrtnoVm1xeSY/uoOrH0FeR+JPGWpa07p5ht7bPEa8Ej3Nc94z8Z/2lqTTzM0hHCIB8qiuTm1+5kJ27Yx7Vxzm5aI+kwmGo4ePNU1Z1LepGfqabWdoWi+KdfG/TLK4kj/56MNq/mcCrGraZ4l8NgNrmmusPTzByv/fQ4rBwkehHG0b8qLFFQWl3DdoGhbnuh61MzKv3hioasdifMrocxAGSaqSvvfjpSTSb2wOlRSyiKPNTfoN6K5r6B4f1PxBKyabCCqfekc4UV1ln8JNTkx9sv4oh3CDNdj8JobZfB1pJbkEyZdyO7Zrsa7IUVbU+YxOZ1udxhojzmx+EWmxYN5eXE59B8oqxqPwr0eW322kk0Eqj5XzuH4iu+orX2cOxwfXq978x82eJdIvfDepfY9RQ7WGY5QPlce1UAc4x3r3j4leGU8SeHJ4UX/SoQZIH7hh2/GvnSCVwrKQyuh2sPQ1zVaXLqj6LAY1142luaeMUx3AqusrEctSkFu9YHp35j2b4JapHPos2nE7ZLWQtj1Vuf516QDXzd4J1t9C8RW1wpKxMRFL7qf8ACvo6JhJGrDkMM130pXifI5lQdKtzdGOPNFFFaHmmP4t0OHxBoF3p0w/1qHa391+qsPxr52tmkUyW9ypWeBjHIP8AaBwa+oa8U+MXhmTStbXxDZxZtLshboD+CTs30P8AOsK8OaN0ezlOK9jV5JbM4+im5zhh0NGa81n2e+qHxTNDOksRw0bBgfcV9FeHrz7fo9rdN96WJWNfOcMbSzRwxjLyMFUepNfR2h2YsdJtbUceVEqfiBXbhb6nzOfOPurqXqKKK6z5kSsDxr4ei8Q6O9uQEmT5oZP7rf4Gt+ihpNWZdOo6clOO6Pmy/s7jT7t7S8jMUsRxtP8AMe1VfrX0F4h8Mabr0eLyBfMH3ZF4YfjXK/8ACp9P83c19dFP7vH864ZYbXQ+soZ1SlT/AHm5514a0efXNVitLYZUsDI391e9fQtpCtvbxwoMKihQKz9B8P6fodsIbCAID1bqzfU1q11Uqfs0eFj8a8VPTZAetFFFannBRRRQIZLFHKu2RFcejDNRRWltCcxW8cZ9VQCpjRmixd2HSiiikQFFFFBQUUUUDsed/G/RTfeHYtUt0zPpj78jqYzw39DXlkE4mhSRejDNfSN3bx3dpLb3C7oplKMPUEYNfOGoaZL4e1++0WbO2B90LH+OM8qfyrkxEdLn0WTYmzdJlixtpby7itoVy8hwK9Y0awj02xjt4hyg5PqfWud8B6KbW2+33K/vZR+7B7L/APXrr1ODXy+Lre0lyrZG+PxPtJckdkL0H86qysXfaOgqS4k42L1NMiTaMn8a4m7aHnJdRwGxaT3pScn2pOlQUKKjnlESEn8KcSFUs3AFZV1OZn9h0pxV2XCNyJ3aRyzGkoordKx0jhVHVLryl8tT85qxdXC28RZj9KwJJGlkLP1PT2rWnC+rBDByfeqWo6Z5n76DiQc4HetFUp9dVOpKnLmiKUVJWZg284ZW3/I8fBHrWbl7ycu33R0FdBqllbyxPK42EDkjvWPEgRQBXvTx8sRSUexWAwEVUc2OACjAooorkPpErCUUUUhhRRRQAUUUUAFFFFMAooopgFFFFSAUUUUAFJS0uKAEooooAKKKKACiiigAooooAKKKKAEooopgFFFFACig0Cg0AFFFFACVc0XSrzWb1LSyj3MfvP8AwoPU0/QtHutb1BbSzXJJy79kX1Ne3+GfD9poFitvbLljy7n7zn1NdNCi6ju9jx8yzGOGXJD4iLwn4atNAsQkS7pW5kkPVj/hW9SUteooqKsj4udSVSTlJ6hRRRTMwooooAKKKKACiiigAooooAK5bx14pi0HT9kbBruUERL6f7R9qv8AirX7fQdNe4mbL4wid3bsK8N1bU7jV9QkvbptzuenZB2A9hXNWrcisj2csy94mfPJe6iC5uJLiZ5ZnLyOcsxqKiivIlJt3Z9zGKirIKKKKAFrtfhv4U/tW5GpXsRFnEfkU/8ALVv8BWN4Q8OS+ItREYJW2iIMr/0Hua9xsLKGxtYra3QJHEoVQPSu3DUeZ80tj53N8wVOPsab1e5YRVRQqDAHQClopa9M+P31YlLRWZrmu6bodr52pXccC44DN8zH0A6mgaTb0NOqWp6rY6VbG41G6htYR/HI4Arkotd17xRKU0OEaVZHrdTpulI9k6D8a0tP8FaZFJ9o1MSardd5rxvMP4KeB+AqWXypfEYGqfFIXDNB4S0e81mXoJVjZYvzxzXMatpHxM8aReTfx2+nWjHPls4QfiBljXs8EMUMYjhjEaDoFXAFSVNjSNVQfuo8V0j4EM5D65rJPrHax4/8eP8AhXceHvhd4V0TDxWH2mYf8tbpvMJ/Dp+ldnRRypbBOvUnuyOONIUCRIqIOgUYAqO8tYLy3e3uokmhkGHRhkEVYpKoxuz57+Jvgf8A4RC+j1HSmY6fO2Nv/PJvT6HtXLDUvMHzrlvavpbxZocPiDQbnTZ1BEyEKf7rfwn8DXy/d2c1heT2l0pSe3cxuPcVyVoWdz6TLcU5R5W9UTte+ifrVaSVpD8x49KZRXPY9Nzb3PT/AIH+Jvsd+2iXJxFP88J9H7j8a9tr5O0i6ex1O1uomw8MqsPzr6rs5hPaQyj+NA35jNddKV1Y+azGlyVObuTUUUVseYFfOXxZ8Pt4d8XPJChFnqGZEbsG7ivo2ue8deFbXxboUlhPhJR88MuOY3HQ/wCNTOPMrHVhq3sail0Pm2M4qcGpNX0TVPDl89nrFuyFThZsfI49QahRlPRs1wSi0fXUa0akeaJOnP3eWPA+tfTehLJHo9ms33xEoP1xXjnw28F3ep6hDqF9A0NlAwdfMGDKe2B6V7eiqoAFdVCLSdzwM1rxqSUIvYWig0V0HjBUN7aQX1rJbXcazQyrteNhkEVNRSBdzx7xJ8Ir23lefwtdxtATk2twcbfZW9PrWBB8PPGc05ifT7eFf+erTrt/TJ/Svf6WsnSg3ex6VPMsRCPKpHBeB/hzDok6X+qTC8vlHygLiOL/AHR3Pua72iirjFR0RxVas6suabuxKKMUYqjIKKMUYpAFFFFCEFFFFUMKKKKBhRRRQAlFFFSMSiiigQUUUUDFooooASuD+IvhO31LU9P1hiVNsdkyqP8AWJ1X8jXeCs3WJ1SPZ/G/H4Vx4yahSbZtRk4zTRjRoqKqqMKowBRI+1c0vQVWkbzJMD7or4vzZ6au3diICW3Hv0qcnjApnQUoqGUKOlJQTVa6uPKQjuaFqNK7Ib+4ydidKojrSsdxyaQV0JWOlLlHAUjEKCx6ClrN1e72L5MZ5PWqSu7FFLULk3MxGfkWoIxk5NMA5CipgMCupLlVhjv6UhPr2pCapaldeTD5an9438qqMeZ2RrCDnJJFbU7nzZPKU/IvX3NU6PrzSfXrXowioqx71OChGyEoooqigoooosAUUUUwEooooAWkpaSkAtFFFMAooopAFFFFAAKcKaKcKAENNNONNNABRRRQAUUUUALRRRQAUUUUAFFFFMAxRijNGaACiiigAq7o2k3OsXyWtkhZm+83ZR6mm6Rpl1q16lpaREu3fso9TXt3hPw5baDYLDEoaUjMj92NdFGi6jv0PHzHMY4aPLH4hfC3h618P6esFuoLnl3PVjW4BikA7mgDFerGKirI+JqTlUk5yYtFFFMgKKKKBhRRRQAUUUUAFFFFABVLVr+DTbKW5uH2pGMkmrU0iRRM8hAVRkk9q8X8f+KX1q8NvbORaQnAx/EfWsatRQR34HByxVSy26mT4p1y41/U2uJSRGOIo+yr/jWP06U6ivInJyd2ffUaUaMFCC0QlFFFQbBVvStOuNUvorS0QvJIcewHcn2qqASeOp4Ar2X4c+F/7G083d2g+23HJ/2F/u1vQpe0lrseXmWNWFp6bvY2vDGiW+haZFawLyo+Zu7Hua2KBRXsJJKyPgpzc5OUtwprsqjcW4FNmkWJCznCgZJrx34ifEF72V9O0eTy7YfLJMOr+w9qmUlFG+Hw068uWJu+OviWmns1hoKC5vC23f1VT7eprD0fRXZ21XXpTe6i3zF35WIeijpWD4F0wT3D6jOhKxnbGD/e7n8K7/U4fs2k2oP3rglz9O1aUoprmkdFdRov2UPmzrPDMITS42xgyDdWrWX4YmWbRYCp+ZRtNaYqZbnBLcdRRRUkhRRRTGFFFFABXjHxw8KPFcDxDZR5icBLsDsR0f8Aoa9nqK4giu4HhnRZI3GGVhkEVMo8ysb0KzozUkfI1LXtfiL4N2N1K8ujXTWW45MRG5Pw9Kx7L4JXfnr9s1SMQ9/LQ7v1rl9lI96OPpNXbOD8IaRPrev2lpbozZkBc9gueSa+ookWKFUUYVQABWJ4U8JaX4YtjHp8R3t9+VuWb8a3a3pw5Tx8ZifbTVtkLRRRVnELRRRQIr3tlbX0Jiu4I5kP8LqCKz4PC2h28qywaXaRuvQiIVsUUrFKclomNRFRQFAAHQCnUUUydwooooASiiimMKWkpaACiiigAoozRQAUUUUgCiiigBKKY8qL95wKja7hH8efpTAnoqm2oRjoCaj/ALQlb7kVAzQorNM17J0XaPpSfZ7uT70mPxoA0GkUfeKio2u4F6yCqo01m+/N+VPXTYR95maloA5tRgXpk1E2p5+5HmrC2VuvSMVIsSL91FFGgFFbu5f7kQH4VbtDKVPnL9KmAxS0XGFBoo6UgI55VgiLscACuZlna4mMjfgParGs3vnymJD8q9fc1nySbEwOvavk8xxftp8kdkehQpW1Yk8mTsXrSRrtGKbEv8TdTTz615LdztSsONKKZmlz61IglcRoXaseeQyyFj07VNe3HmNtB+Wq3tW0V1N4RsLmgUgoJABJ6CtDQjvLhbeAuep4A96552Z5CznJNWL26NzMWH3BwBUCDtXRTjZXGhY1xyetPoAprHbz2FWUlcjuplt4TI3PotYMjtLIXY5Y1NfXTXMp7KOlVwK76NPlV3uezhqKhG73Fooorc6gooopAFFFFMBc0maTNGaAClpKWkAUUUUAFFJRQAUUUUAFFFFAC0UUUAFFFFABRRRQAlFFFAC0UUUAFFFFABRRRTAKKKKACrGn2U+oXkdraIXlkOAB/OorS3mu7qO3t0LySHCgV7V4J8JwaBZiSQCS7lGZH9PYe1b0aLqPyPLzDHxwsLL4mS+DfC8Hh+xAG17lxmST+g9q6NRSAYp1etGKirI+Hq1JVJOUnqwooopmQUUUUDCiiigAooooAKKKKACiiuV8feJ49C0/y4WBvJhiNfT/AGjUykoq7NaVKVWahDdnN/E3xSedJsZMf89nB7f3a84PP0pZpHmmaWVizscknuaSvIrVHOR+gYLCrC0lBDaKDRWJ2hRRWx4T0GXxBqqW6jEKjdK3YD/E1UYuTsjOtVjSg5y2R0fwv8LjULkapdrmCE/u1I+83r+FetgAdOlQafZQ2FrHbWyBIkGABVjtXsUqSgj88xuKliarm/kLRRVTVrtbHT7i6bpDGzn8BWpyJXdjzb4v+KpIR/Yti+1nGZ2HYf3a8jfIXJ7Ve1O+l1G/mu5yS8zljn3qlLyjV5cqnPM+2w2GWHoLueneF7b7JoVpGOrIJD9TXV+Mottlpsi/dC7P0Brn9Ob/AEC22/d8pcflXYahF/anhVWUZeJQw+q8H9K9pr3UfJ1Heq2zP8Eahsne0c8Scr9a7OvJ7O4a0uY5lPKMDXqdpOtzbRzIcq6g1lNa3M6isyWiiioMgooooASiiigAooooAKKKKQwooooJCiiigYtFFFABRRRQAUUUUAFFGRTTIg6sBQA6kqN7qBf+Wi1A+oQr0BNAFulrObUz/BHTftl3J9yP8hQBp0Myj+LFZflX0n8RX/gWKBp07/6yUfjzQBea5hXrItRtfwL0OahTTFH35CfoKnSxgXqCfrT0GRHUl/gUmmm9nb7kf6VcWCJeiLTwAOi0AZxN7J0BH6UfY7p/vy4+rVpUUAZ40wH/AFkp/CpU0+3HUM31q1RQBGtvCvRBTwqjoopeKM0AFFFFSwEopM0Uhi4ooooAKKKKADNZmtX3kIYoz+8b9Kt3NykMbMSPlFctNK00rSOck14+Z4tUoezjuzpoUud3YzOAS31qHJkk3dhRM+5topyDamK+W31PVSsiTNGaaKKQDs/lVS9uNq+WOp/lReXPl/KvXvWeWZyWY8mrjHqzSEOrFoozRWhqL7Vm6rdf8sYz/vVavLgW8LE/ePSsLcWYs3U1vTjfUYDAGAKlRcfWmoO5p2a2ZQN1FZmqXWMwR/8AAqtX9wLaHJ++fuisTeWJZuWPJroo076s78LQ5nzMbRQaK7D1AooooGLRRRTEJSikpRQAlFFFAC0UUUhiUUUUAFFFFAhKBRQKAHUUUUAFFFFABRRRQAUUUUAJRRRQAtFFFABRRRQAUUUUwChVZmVVXcScADqT6U2vTfht4PZFXVtSXEhGYYj/AAj+8ff0rSnTdR2Rw43FwwsOZ7mn8PPCC6Tbi+v0Vr2Uf9+19BXb4A6CkRdop1evCCgrHweIrSrzc5vUKKKK0MAooooGFFFFIAooooAKKKKACg0UyWRYo2eQhVUZJNA0rlHXdVg0jTpbu5OFjHT1PYV4RrWqXGsajLeXTZdzwvZV7AVteP8AxO2uag1vA3+gwNhR/fPdv8K5evMxFW75T7PKcB7CHtZr3mFFFFcZ74lFFFAh8EMlxMkUKF3c7VA7mvcvA/hyPQNJSNgDcSfNK3v6VyPws8OeYzatdJ8g+WEEfm3+Feod8V6eGpWXMz43OMa6k/Ywei3Ciiius+fCuV+J939k8G3zA4LhY/zNdVXH/FqPzPBN5x9wq3/j1TN+6zbDpOtG/c8EoooryD77c9E8JXq3Wiw4OWhHlt+HT9K73wldBjLZycgjcoP6ivHvA999m1RrZz8lwMD/AHh0r0fTbhrS8inB+62D9O9e9Rl7Sl5nxePpOlWZR16yNjqc0AHyg7k+naup8B3/AJ9k9q5+aE5H+7UHjuzEkMF7EMj7jn2PIrA8NX39n6rFIThH+RvoaHqjH4oHptFAORRWJzBRRRQAUUUUAFFFFACUUvFLjNIY3A9aKNvpRhu1USFFNIl/hKimPFO3/Lfb9BRYLkucUheNfvOBVU2UrfenY0n9nZ6yE0WC5M15br1fP0qNtRhHRWNC6bF/ESalWygX+HP1osFys2ok/wCrjphuLp+ikfStFYkX7qLTwMdsUWAy/KvJOrEfU0o0+RvvyAVqYppoAorp8Q+8xapVsoF/5Z5qzmkz70hjFjVfuqFpwHvS5pKQBRRRQAUUUUAFGaKMUALRRRQMSkpHkVfvOBUTXkCdZPyoAmoqk+pwjoC1R/2lI/8Aq4aANLFGKy2mvpOi7aPst5L/AKyTH40AX2ljXq4FRPewL/GD9KrrphP35M/SpU06AfeyTRoMa2pxD7qk1GdSdvuQn8quLbQp92MH61IFA6Ko/CjQDO8+9k+5Gw/Cka3vZM73Kj3NaVZes3vlx+Sh+Zuv0rlxNZUabky4Qc3ZGPdk+aU37/eqsz44A5pzttXJ61XX94+49K+KqzdWbnI9qnBRRJEv8R60/qaTtgUCsyxahu5/JT/aPSpJJFiQu3QVkzStNIWb8BVRjcqMdbjGYuxLHk0oNJRW5sOpGdVyegFFZup3GT5aHjvQo3Y7XK15OZ5iSflXpUIGTmk9qetdSVlYY8U2SRY0LNwBRWPqVyZn8tT+7X9auEXJm9Kk5sguZ2uJi56dBUftSdOaXtXopWVj24RUVZBRmkopjCiiikAUUUUwClFJSigBKKKKAFooopDCkpaSgQUUUUAFFFFABRRRQAtFFFABRRRQAUUUUAJRRRQAtFFFABRRRQAUUVv+C/Dk3iDUQpyltHzI39K0hFydkY160aMHUlsjT+HXhRtVvFv76MizhOUU/wDLVv8AAV7EiqiBV6CobGzis7dIIVCIgwAKsV61OCpxsj4DF4qWKqOUtgooorU4xKKKKACgUUCmMWiiikAUUUUAFFFFADTXnnxR8S/Z4P7MtX/eSD94R2X0/Gup8Xa7FoOkyXDkGUjEa+prwm8uZr25kuLhy8kjZJNcuIqcqsj3cowTrT9pJaIi6nJoooryz7MWiiikygrU8L6LLrurQ2ag+VndIw/gQdayf19K9r+HHh/+xdIWSZQLq5+eT1X0X8K3oUueV3seVmmL+r0bR3ex01laxWdtHbwqFjjAVQOwFT4oor17HwbbbuwooooJCsrxVYDU9AvbTGTJEwH1xxWqaQ0pK6sVGXLJSR8rMhjcq330O0ijvXUfEvSDpPimcKMRXH75Px6/rXLV5U48smj76hUVWmprqOikaCaOaM4ZGDCvV7G5W7s4Z0ORKob868mrtvAd55ljJaOeYWyPof8A69d2BqWlys8rNqHNT510PU9OUav4ae2k5dVMf4j7tcFIhicq3DI2PyrrPCF35N+9uxwk4+X/AHh/9aszxfY/ZNWZ1GEm/eD+teg1aTR85SfQ6/wve/bdIjdjl0+Vq1a4nwNeeVdyWrnCyDI+orthWElZmclZhRS1BcXMduu6R8VlOcYK8hJNuyJ8UfWsO51wkkQJ/wACaqE1/dSf8tSv0rzKma0oOy1OiOGnLc6kyIvUqKY1zCvWRfzrkzK7feYn8aYTnvXG86fSJqsH3Z1v223/AOeqfnSG/th/y1WuT59aXNZvOanSKK+prudSdSth/wAtRUbavbD+PNc1kUZrN5xWeyH9UXc6E6xbdsmkOuQDoDXP5pM81k80rsr6pA3/AO3Yv7po/tyL+4awN1Lupf2pX7j+qwN3+3I/7ho/tyL+4awc0Zo/tSv3D6rA6Fdbg7qwqWPV7Zv4yPrXM5oq45tWW4nhInYRXMUg+RwfxqSuNSR0OVYj6VpWWryR4Wb5l9a9HD5vGWlRWOaeGktUb5FJTYJ0nQNGcg1Ia9qMozV4s5WmtGNpaqyX0afdUsagbUXP3IzVAaNJWcZ7x/uqR/wGkFveSdW2/U0AaBdF6uKY13CvV81WFgx+/JUi6fEPvZNGgDX1GMdFJqM6g7cRxmri2sK9IwakEajoiijQDOMt5J0XH4Un2a7k+85H41qcCkouBnDTSfvv+tSLpsA+9k1coyfSkMhW1gTpGKkCqvRQKdRk0AJRRRQACiiikMKKKKQFe7nW3iaRjgAVy88pmkeRqua1eGebyUPyp196yJ5SBtHU9a+TzLFe1nyR2R6mFo2V2MkYyvtHQU9V2jFJGu1ffvT68o7WKOlITgUtUr242jYvU00gSuRXs/mvtH3RVaiiuiKsjoSFoooZgilj0HNAiC8nEMZ/vHpWM7Fmye/WpryYzSk547VAOa6YxsihyrnmnUinAqO4lEKF2qt2XCPM7FbU7oxJ5cfLHrjsKys5PNOldpHMjnk0yu6nT5T2qNJQQtFFFam4UUUU7iCiiigAooooYwooopCDFGKM0ZoAKKKKBiUUUUWEFFFFABRRRQAUUUUALRRRQAUUUUALRRRQAlFFFABRRRQUFFFOjieWVIolLySHCqO9NK5Mmoq7LmjaZcavqEVpaLl3PJ7KO5Ne6eHNGt9D05LS2UDA+d+7t3JrJ8B+F49C04STIDeTAGRvT2H0rqRXqUKXIrvc+GzPHvEz5YfChTSUUV1HkBRRRQAUUUUAFAooFAC0UUUAFFFFABUVxKkMbSSHaqjJPpUrdK85+KfiTyYRpVm+JZR+9IPRfT8aic1BXZ04ahKvUUInG+NfED6/rMjq3+ixErEPX3rAo70V485ubufoWHoRoU1TiFFFFQahS0lT2drJeXMUEIy8rBR+NJauwOSgnJnTfDfw8dX1YXU65tbQhjnozc4Fe0IoUdKy/DOjQ6JpMNrCOQMufVu5rWPWvZo0+SKR+fY/FPE1nLp0CiiitjzwooooGFFFFAHnfxn0f7VoseoRLl7Ruf8AcNeMV9Pa1ZJqGmXFpKMrLGV/Svmi+tXsr2e1kGHikKn8K4cTH7R9Rk9fmg6T6EGK1/CN79j1uLccRzrsP49P1rJpUYxyK6HDIQRWFKfJJM9fEU1Om4nrtvMYLhJk/gIb8q6bxdbrf6LFdxDJjw2f9k9a47TbhbuyhnXo6Bq7TwxOt3pktlL820Ec+hr3Zu6UkfDSThOxx2myyQ30MkQLOrDgd69SQ5RWxjjpXLeGdE8i+nnnX/VOVT/Gt/UbkW1uSPvHgVyYirGnFyfQJe+0kRalqK2y7UOXP6VgTSvKxeQ5NJLIZGLHkmojn8a+KxWMniJeR6VGioLzCiiiuE3CiiigBaKKKBhmigLnpyasRWFzJ0iI+tawpTn8KJlOMd2V6Ku/2Xdf88/1prabcr1jrR4Wsvssn2sO5ToqWSCaP70bD8KjrGUJR0ki1JPYSiiipGFFFFAC0UUUgLFndyWz7kP1HrXTWtwtxErqeorka0tGu/KnETH5X/nXr5bjJUp8knozjxFFNcy3N17eNm3MoLGnqir0UCndaSvrTzA6dKKKKACiiikAUUUUAFFFFABRRTHkVfvOBQA6jPtVd7uFf+WmaibUVH3ULUAXKKzWvpyf3cYH/Ac0H7dL6qPbigZokgdTimNcQr96QD/gVUhYzP8A6yQ1Iumx9XYn8KNBj31G3X+It9FqhfauPKKRIdx45q1dQ2tpCZGj3Y9e9c3LL5jmQ/LnoK8XM8W6MeSD1Z1UKXO7vYiuH2AsT8xqCNSfnfvQcySZboKlxxivl99WestFZAKKFoY4oAhuZvJiz3PSs1mLNlupp08plkz/AAjpTDyeK2hHubRQdKcKbThVFhWbqVx/yxU/7x/pV27nEEJP8R4ArEJLMWbr1rSEbu7GhvU1IgxSKuTmnVs2IQ4HWsW/ujcSlQfkXgVr3MLy2snlnBAzXPAYFd1OhKNpyW56GB5JtvqhT+dFFFbHrBRRRQIKKKKBCZozSUUxC0tJS0MYUUUUgCkpaSgAooooGFFFFMQUUUUAFFFFIAooooAU0lKaSmAUopKUUAFFFFIAooooGFFFFAB/SvSvhZ4YzjWr1Mlh+4Vh0HrXL+A/Db+INVBlUiytyGlJ/iPZB/X2r3GKJIo1jjUKqjAA7Cu/DUn8TPl84x7/AIFN+o72FLRRXefLBRRRTASiiigAooooAKKKKACiiigBaQ0tIaAMjxPrMeiaRNdSEZAwg9W7CvB766lv7uW5uGLSSNuJrqvib4g/tXVPsUD5t7c446O/f8q46vMxNS75T7TJ8H7Gn7SS1YtFFFch7olFFFIAr0T4SaD5sj6vcr8q/JED69zXDaTYS6nqNvaQg7pWx9B3Ne/6RYxabp0FpCAEhULXbhad3zM+eznFunD2MXq/yLlFFFeifHhRRRTAKKKKAFooooASvCfi5pn9n+KDMi4ju13j6jrXu9edfGvTPtGhwXyLlrWTk/7JrGtG8WehltX2ddeeh41RRRXln2h2fgO832klo55hO4f7p/8Ar13Xh67+yaihJ+R/lb8a8k8NXn2PWYGLYSQ+W349K9S02I3F7DGv8TCvbw0+elZ9D5HM6PJWutmeiBR24zXOazcedc7FPypxXQyny4M/3RXIytumkb1NfP5zVcYqK6nNhYpyuxtNPWnU018yekFFFFABRRRSAWtLT9Ke4w8h2xn9afo1h5x82UfKOg9a31AAAAwK97L8v9olUqbHBXxH2YkFvZw264jUfWpwMdKXNGa+kjTjBWijgcm9woooqtBDHjR+GUEVmXujRS5aL5H/AErWpcVhVw1OsrSRcKkoO6ZxlzA9s5SQc1CGzXWanZi7t2UcPj5T71x6OSWSRdkqMVdfQ18njcFLDyutj1KFbnWu5JThTRThXmnSFFFFABTgxUhh1U5ptSxRyN91C34VrBO+hEmranV2sglgRx3FSmq2mqyWiKw2kDpVo193Rd6aueJLSTsNoo+b+7THWVvusq1tYQ+mkr/E2Kge2mfrPj6Cmf2eT1nY/hSsBO1zEvVxUTahCvQE0g06MfeYmnrZQD+DP1p2QFdtSY8LH+lNM93J9xcfhWgsMafdQU7p2xSAzfs14/3nx+NA01m+/Ia0+aTFAFOPToU6/ManWCNfuoKlwPWgigBoAHQAUuaXFJg1ICE4prGnMKimbZEzegqZOyuWld2Oc1e+M85QEiND/wB9Gs2U7sLWuQCSWA5NKI4/7g/KvlK+GlVqObZ6sJKEbJGKOOxP4U4LIein8q2gijoopdvsBULA+Y/amMkUh/gNZ1/MS5iQ7SOvtXUAAGuX1ZPLvpRjg8is6uGVOzubUpc0rMq0CgUVkdg6mk7fmPQUtZ+oXPHlp+NVFXYFa9mM0p9B0qEClAp4GBW60EIBinAbjgUlWreIImT97+Vd+Cwzr1Ndkc2IrezjpuCLt+Wuf1qxeznWTbiKfJU+4611VrbmeZcdO9WvEunC90gxRj95D88f1Hb8a+oxNJSpcqWxyZfiXSra7M87ooor51n3KCiiihAFFFFMBKWilpCEpRRS0DsJRRRQAUUUUAFFFFAhKKKKBhRRRTAKKKKQBRRRQAppKU0lIApRSUooAKKKKYBRRRQAVPp9jcalfQ2dou6SVsY9PU/QVBXr3w28LjS7IaheIPtlyMgH/lmnYfWtqNPnkedmOMWGpabvY6HwxosGhaVDaQfwDLN3Zu5rXpAMDFLXsJWVj4KcnOTbCiiimSFFFFABRRRQAlFFFABRRRQAtFFFABXJfEbXzo+jmO3bFzcZRPb1P4V1FzMkELPIwUKMknsK8I8Ya42t6zLOrfuU+SIew7/jXPXqciPUyzCfWKyb2RiMxMhLEknuaSl9z1NL1ryZO7uz7tJJWQlFFFAwooq5o1hJqmpwWcK5aV8Z9F7n8qajd2RFSoqceaWx6D8JNExFJqs68v8AJH9O5r0jFV9Ms4rGyhtoFCpGoUAe1WhXswioRSR+eYqu69VzYlFFFWcwUUUUxBRRRQAtFFFABWX4lsBqeiXdmQMyxlR9e1alMkOFLNwAKTV1YqDcZJo+W5o2hmeNwd0TFT9RxTK1/F00Fz4kvprVAkTycAdGxwT+NZFeRJWZ+gUm3TTYnI+Zeo5Few/D65+3T2MxOdyZP1xXj9eifBq7Lal9kPJjyw+hrtwc7XieRm1Hmp866Hr98cWsjegNchv5zXWal/x4y/7tccD0+leFnL99I8bB7MkLUhNR5pc14Z32FLUbqaTRmmOw7calhBkdVXqTioM1c0kZv4frV0oqVSKZFTSLZ1dtGIo1QdhUuMUYpetfewioRUUeC3dja5zxF4rt9K3QxKJZ/wC7ngfWtbWr9NO06a4fqinH17V5Taxvqd+0kxyCdzH+lefj8X7FWjuduEw6qtylsjYfxlq8zExBEHoBmr2neNruJ1W/gDxnqyDBFRRRxRLtjQBakAB68CvAjj6sXe56MsPSaskdvZXkF9brNbOHRhkEVYrnvCzBPNjAwOvFdBX1GEr+3pqZ4lWHJNxCuI8WAWPiK2mxiO9Xy2/3x0NdvXHfEwAafaTD70c/y/kazx9NToO5phv4iIBTqht5RLBG4/iUGpk+bAHLHpXxFtbHsy0F9qvWely3GGb5E960NK0oRqJZxl+w9K05GSFCzsFUdS3Ar38JlfMlOr9x51bFW0iVLbSbeEcrvb3q6kaoOAB9BXM6v40s7XMdmPtEnr0X865W+8Xatd5CTrbr6Rj+tesnQoq0UeZUxOurueomRE+8wH1qFtQtVPzTxD/gYrxyW7upj++uZJPq5qLcx/8Ar1Lxq6I5nivI9hk1vTo/vXkI/wCBiqs/inR4Rl7xD9Oa8ooqfrr7C+ss9Q/4TLRcEi7zj/ZNMbxvo46TO30Q15lRUfW5kfWJHpX/AAnGkf3pf++DR/wnGkf3pf8Av2a81oo+tzH7eR6V/wAJxpH96X/vg0f8JxpH96X/AL4Nea0UfW5h7eR6X/wnGkf89Jf++DT08ZaO3Wdh9UNeX96dR9bmHt5HqsfivR36XaD68Vbg1vTp/wDVXkJ/4HXj9FNYyS3RX1h9j2yOWOQZRww9qfgV4tBeXVuf9HuJY/o1dBpvjXULXCXapdJ+TVtDGRe5pHEJ7no7e1UdQnjWJo93zkdKraJ4ksNXAWGTZN3ifhv/AK9TawkYVHAG7OM1tUnF020dlJqTVjL6kCpR0qKPlzUw61456LACig0VQhuKxfEFvho58cH5TW5Uc8STRNHIMq36VjVhzxsa058srnIUnet99Di/hmYLVW50mOCMu1xhR6ivOdGaO5Vosw7q4EMZx949KySSxJPU1YviTcMv93ioFFVGPKap3BV5p1OA4pyJubAq4QdSSjHcU5KKuLBHubcegq2q7ioHekUADaOMda0tKtuPNcf7tfa4XDRw8OVHg16ntJFqztxBGB/EepqY0tJXSzG9jz7xVp4sNUfyxiKb50+vcfnWRXe+LbH7bpZZRmWD50/qPyrgq+exVPknofb5Zifb0dd0FFFFcp6gUUUU7iClptLSELS02lFA7i0lFJQAUUUUxC5ozTc0ZoAdRSUUgFopKKYwFAoFApABooNFAC0UUUDCiiigAooooBBRRVvStPm1S/itLcfvJDjPoO5qoxcnYipNU480tjpPhr4cOr6iL24TNpbnPP8AE/YfhXsqqFGKz9B0mDR9Mis7dQFjUAn1Pc1o169KHJGx+f47FPE1XLp0FooorY4QopKKACiiigAooooAKKKKAFooooAKKKr391HaWzzTNtRFLE0XsNK7sjifitrv2TTxpts+Jrjhsdk7/nXk1afibVm1nV5r1iSGOIx6L2rMryK0+eR9/luG+r0VffqFFFFc7PQFooooKCvRvhDo+Wm1aReB+6iz+prz63ge6uYreEZkmYIo9zX0B4d02PSdItrKMACJAp9z3NdmFptyuz57O8TyU1SW7/I0aKKK9I+OEooopgFFFFAC0UUUAFFFFABXNfELVTpfhy4kRsSSDy0+prpK8n+MGpfaNQt9OR/liHmP9T0rGtLljc7sBQ9vXjHoebXqkKrE5yar1dvBmLPoaoivK3PuZrldha6v4W3LWvjO1AGVmDIa5Suj+HZ/4rHTv98/yrai7TRx4tKVCV+x79qX/HjN/umuKB6fSu3vhus5B6qa4bvXm5yvfR8xgtmLmjNMzRmvEsehYfmjNR5ozxRYdh2+pIZ2icOpwQcioAaN2aE2ndA43Vma8njMWuFurOU/7UeCKif4gWm35LWcn3wKzSAwwwBHvUL2tu/WFa9SOZVkrNnOsJS6ora/4kudaUQiPy4c52jkn60/SbfybUEjDtyasJDCn3Y1FP8ApXJVryq6yOiMIwjyxWhJ0H1peuAOtMTLOB3Pauj0TRsYnuV56qpp0MNKvLliY1aqpK7LPh+0NvbeY4wz8/hWtQoAGBS19lQpKjTUEeHOfPJsSuF+J1wD9ktc85aQj9BXa3dxHbQtLM4RFGSTXk+q3r65rTS5O0nag/urXHmNZQpcvVnZgqTnPm6I27EbbOAeka/yro/D+n5/0mYD/YH9axdOtzc3cUCjjqfoK7eNBGgVRgCvJyzC+0m6stka42ry+6hl1cR2sDTTNtjQZJrzPxN4jm1WYxxkpajoo/i9zWt4/wBXLSDT4G+VeZMevpXGZr1cTW15Inz1apd2QE000ppprzzkAHFGaSkoEOzS0ylBoGLThTRThQAUUUUDCiijtQIaaU0hoNBQUUlGaYC5pM0lFSSKsjI6ujFWHRh1FdvomtzatYhLrLSwcFv74/xrhTXY+EItuk7yPmkYmrUnax6GBbdSxuwfeNTioLfg1OO9I9yQUUUUxCUUtQ3FxHAhaQ4FDGlcLiZIIy7ngVz19dvdPk8KOi0l5ePcyEtwo6LVfOaxlI6YQtqzL1VMXOfUVVjXOK0NUTcEb8KrbNorkludkNhnfAHNWYY9g3dzVZZ0jfkbiKd9pnmbbEmM9K+jyrB2XtZfI8zF17vlRoWdsZ7gD+EcmtpQqAKvQVkWVrdogJfax61pW0Lxg733E17cjzkTUlLSVIxp54Ned+IdOOn6pIqj91J80Z/p+Fei4qtr3ht9W0Ga4Qfvofmj9/7w/GuTFU1OGp6WW4p4eqk9meY0UUV4R9vcKKKKQwooooAKKKKACiiimAUUUUAFFFFAgooooGFFLRQAgoFAoFIANFFFAC0UUUDCiiigAooooAK9W+F3h02dqdTuY8Tzj5M9l/8Ar1xHgfQm13WUhYfuIsPIfbsPxr3OCNYY1jQAKowAPau/C0/tM+YzrGq3sIfMfQKKWu8+WCiiimISiiigBaKKKAEooooAKKKKAFooooAK85+LOuGGBdLgfDzcyY/u+n413uoXUdlaS3Epwsalj+FeA69qcmratPeS5w7YQeijpXLiJ8sdD2cowvtqvPJaIz6KKK8s+3CiiikMKXtSClHWgZ2vwp0f7brT38i5itF2r/vn/AV7ABgVzvgLSBo/h62iZcSyDzJP94810de1RhyQR+eZhiHXxEpdAooorU4BKKKKACiiigBaKKKACiiigCG6lEEDynoiljXz3rl+2p6vc3THO9zg+3avZviHf/YPC90wOGkHlr9TXhY6VwYuW0T6rIaPxVX6DLgZhas5a1JBmNvpWZ0riie9V3F71v8AgF9njDTSe8mP0rANa/g9/L8T6Y3pOK1p/EjkxKvSkvI+jrrm2f6GuBY4JrvZ+bdvoa8/mOJGH+0a484WsT5fAdQ3cUhamE00tXhnq2Jd1LuqDdShqAsS5ozUW6jdSsFiXNG6ot1G6iwWJN1Jupm6tLw9aC8vwGGVT5jWtOk6k1BdSKklTg5M1/D+j7ALm5GWP3VP8PvXRgY6U1QAMDgelOr7PD4eNCNkfN1asqsrsKiubiO2iaWZwiKMkmotSv4NOtWuLl9sa9a8u8Q6/d67deVGSluD8qD+L3NZYjFxorzNsPhpVn5FjxX4nk1mY21oStqDjjq1R6RaCCPznG1z+gqPTdNSACSX5n/lU2qXAgtGIPX5RXzFatKtPU+gp04wSjFHR+BmFzdXU/O2PEa5/Wurvp1trSWZuiKTXL/DNcaNK/8AemP8q0fG85g8Pz7Tgvha+kwkFTw6sfPY6X7yR5reXD3VxLNIcs7E5qtSsewplec3d3Z4DdxaKTNGaACkzRmkNAxc0UlGaCR4ruvCPhq3ltFu75fMZ+UU9Metcdpdq17fQ26DJlYD8O9ex28SwwpEgwFGB+FduFpKV5M6KEOZ3ZAulWC9LWH/AL4FI+kae/3rSE/8AFXqQ16KpxfQ7uSJxXi3wrbxWUt7p0exoxuaNeh+lcKeMbWyGr25lDAhhkHqDXi2r2baV4ivtNIwiN5sX/XNuf06V5+KpKHvRRyV6aWqID1ooorzzlA0004000xhRRRSEI1d/o0Hkadbp0worz17iG32yXDbUU5b6V3Og+ItI1hQmm3kcr4/1ecN+RpqLep6mXR1bNmIdalXpUaDFS0HrsKKKhubhIIyzsABTbBK4l1cJbRl3IGOgrnru6e6kJc4XsKW7uXuZCznjsKrmsXK5004W1GHrRQaKg1IrlN0Jz2qgeeBWlI48tlNUgAFyK6sLgnWqJvYyq11Ti0tyLy16kD8q1NMswn7xx16VXsrYzSgt9wcmttRjgcCvrnaK5UePdt3YuKKdRUANpKkx6Vo6do8txtkm+SL9WqXJIZV06xlvpgE4jH3nrq44VihEUYwgGKLeBLeMJGAEHapa5py5ibniPxD0X+ydfdo1xBc/OvoD3FczXtvxB0Qaxor7FzPD+8T/CvFOm4MuCK8ivDllofaZXifbUUnuhtFGc0VznsBRRRTAKKKKAFooooEFFFFAwooooAKKKKAFooooASgUUCkAtLSUuaACiiigYUUUUAFG3cwVVyxOAPXNFdj8MtB/tLV/tk6Zt7bkZ6F+35VdODnJJHNiq6w9J1H0O+8A6AND0VFdR9pm+eU+57fhXTCkAAHHQUtezGKirI/O6tSVWbnLqFFFFWZhRRRQAGkpTSUAFKKSlFABSUtJQAUUUUALRQ1V7y5S2t5JpTtSNSzH2FA0ruxwfxZ1zybRNLgb55vmkx2X/69eV1o+ItUfV9YuLticO2FHoo6VnivGr1OeWh9/l2F+r0UuvUKKXFGKxPREopcUYoAK3PBWl/2r4itoGGUQ+a/ptFYdep/CHSfI0+fUZF+ec7Ez/dH/wBet6EOaaZ5uZ1/YYd23eh6DGoVQAMAdKdRRXsHwAUUUUAJRRRQAUUUUAFFFFAC0UUUAeW/GTUS8lpp6NjGZW/pXnNb3jy/N/4mu3BysbeUv0HFYNeNiJc0z9Byyl7LDxQ4cjHtWXKMSEe9ai1nXQxcGs4nXXWlyM1f8Ovs17T29J0/nVA1Y0x/L1K1f+7Kh/WtofEcVVXps+nm+a3P0rz664mk9mNegQHdbKfUCvPtQ+W7mH+2a5s22iz5XAfE0QFqbuppNNzXhHs2JM0bqZmkzTCxJupN1MzRmgLEm6jdUe6jdQOxJurp/BKjdO/fgVym6uj8F3SRzzROcFwCPwrtwDUa6bOLGxbpOx2NFFQXFzFbRNJPIkaKMlmOBX1rmkrnzyVzzj4iahJda0tijfu4sZUd2qvY2i26+rnqapX1xHqPiWW5i5RpOPwrVr5DGVHOoz6XDw5KaQ+sbxA/EafU1rVia6c3Kj0SuanudVPc7/4af8i9/wBtG/nU3xA/5AD+ziofhp/yL3/bRv51Y8fD/inZf98V9bBWwy9D5THfxJnmDUw09qYa8o8JCUUUUygooooAUdKQUCnLQSzrPhzY+dqEt0yfLAMKf9o//Wr0X3rC8E6f9j0KEkYab9439P0rdr2sPHlgj06MLRForL8UXgsNBvLknGyJsfXtWJ8K9VfU/DQE0jSS27mMljk46itebWxfNrY6+vOvi3p3lGx1qJeYm+zzEDqjdCfoa9FrO8QaamsaJd2Eg4niKg+jdj+BqasOaLQTjzRsePKcgUtVNNaQRGGcYmgYxSD3HFWc14LVnY8tqzsLmkpM0ZpiFpM0lIaRJz3jG58uxZQeWOK5zwu80Oo/aYHZGiGQw9av+L5t7InuTSaJB5FmGI+Zzn8K9nDU1yansYRcsLnrXhLxpDeFbPVWEc/RZDwrfX0NdkK8DJzXSeH/AB7c6PEkOot9otRwC/3k+h7isK+F6wO6M+jPU7q4S2j3Px6Cueu53uJNzHA7CmyX41ALco4eNxlMdMVH9a8ibadj0KcFuxKD0oNQTzrH/Fk+lOnTlUdoo0lJRVyU4C5JqpcXaIPkO41WmuHlODwPSoo43kbCCvdw2Vpe9UfyPPq4t7QJPNeR/WrcMRYqhX71Pt7eO3GW+dz2rSs7fYfMl+8eg9K9aMIU1aKOHmcndjreHyYgAMCplFOIJNWrSy8z5pJNi/rWbkupRVx6VetdJubjG5fKX1b/AArTtjZ2n+piLt6t1qb7ZdScRQ7R71jKr2FcdZ6ZBanIXe/941dzVDZeSfebYKsWkDRZ3vuzWDbYXJqKKKBDSM9a8W+Imh/2RrjPEuILr519Ae4r2uud8daKmsaJKqL+/i/eRn3H+NY1Yc8T0MvxP1esn0Z4gBRilYFXIIwelJmvLeh94ndXCiiikAlFFFMBaKKKACiiigYUUUUAFFFFAC0UlFAC4ooopAFFFFABRRRQMKKKKAJLeGW4uI4IE3ySMEUe5r3nwrpCaNpEFqoG4DLn1bvXAfCbQzPeyarOuY4fljz3Y9T+Ar1bFenhadlzHxuc4t1anso7IdRRRXYeAFFFFABRRRQAGkpTSUAFKKSlFACUUUUAFFFFAC1wHxZ1o2mmrYQviS5PzY/u13jnYpavB/GmqHVvEFzMDmOM+VH9BWFefLE9XKsP7aum9kYdFFFeQfdi0UUUhhRRRQA+3iaeeOFPvSMFH419B6HYrp2l29oi4WNAPx715F8NNMGoeI43dcpbDzPx7V7Z7V6WFhpdnyGeYjnqKmugoooorsPnQooopgJRRRQAUUUUAFFFFABVXVboWWn3Fw3SKMt+Qq1XMfEm6+zeE7og4MmEH4mpm7K5rRjz1Ix7nic8pnnklY5LsWplGMUdq8OWtz9KguWKQoqlfDEqn1q6O1VtQHCmnEVRXiVDT7c7biJvRlP60ynIcEGtY7nFNXi0fT9g27ToD6xr/KuA1c7NSuB/tmu28OS+foNnJ/ehU/pXF+IF26tcf71RmqvTiz5PBaVpIo5puaQmmk188e4OzRupmaM1QWH7qN1MzRmgLD91JupuaTNFgsSbqN391tppma09D0iXU5WwNsK/eb/Crp05zlaG5nUnGEby2MeYah/yw1CVV9C5qu9hqE3+uuTID2Lk16ba+GbCKMBk3+5qK+8LW7xn7KfKft6V6jwWJSvc8765QvaxwVhYrasHJ3N/KrtLdwS2kzQzLtYVEHryJxkpNS3PRjJSimiSsLWjm8P+6BW1urC1hv8ATPwFOmtTamrs9D+GX/Ivt7StVzx5/wAi9N/vCqHwubOhy+07fyFaHjrnw7ce2P519bH/AHdeh8jjv4kzyxulMNOammvJPDQlFFFMYtFFFAmAq7o1o1/qUFqo++4z9O/6VTFdr8NdP3zTXsi/cGxT7nrWtGHPNIqnHmkd7GixRLGgwFGAKdSUte1sepc86+NmqG30aCwjbDXL5b/dFZXwau/s13JbyNgXS7lHuKxvilfHVPF5gRsx2wEWPfvS6NOdLu7S4iP+pYE+471506tqlzklO0z3Gio7aZbiGOaM5V1DCpq9M7FseN+PdO/sbxmZEXFvqK+YPQOPvVmHrXoXxa0g6h4a+1Qrmaxfzh9O9ebwzCWGOQdGGa8jE07SucFeNpXJSaTNNzxSbq5LHMPzUdzJst3b2oL8VU1GTMYT1q4rUDktWH2jU0j64wK1VUKqovRRiqdlF5t/cTtyFOBVu4kSCMySNgCvdpK0LHt0lywSGXk6W8ReQ4ArlL+8e7lLufl7D0qTUbx7yQkn5B0FVVjad1jjUuz8BV5JrVIts7b4e+LDp8q6dfv/AKK52xsf+WZP9K9OkkjVN+4bT0NeM2Phi4SQHUVaIdfLU8/jXYRS30dtHBbgqkYwM88VzTy5VZc2x0RxLhHlOouLwniMYWqTSLnJNYyW+ozfelZVq7HopXa005P0NepRw1OkrJHNOpKZa86IfM0gVfYUq6tAnywqW/CrFloaTOqxwu9dTpfhBlwzwpCv+1y1XOpCO5Fjmra5u5CGjtz7cVv6bo2s32GnfyIv1rrrDSLS0UbEDN/fNXunA6Vxzr32BGPZeHLa3UGRzM/qa0ksoFH3c/WpqM1zObYxqxRr0QD8KeMDpxSZFGRQAUUUUAJRRRUgFFFFAHi3xF0b+yddaRFxb3Xzr7N3FcvXuHjvRBrOiSIqhp4h5kf1Hb8a8PbIYjbtxwRXm14Wdz7bKsV7ajyvdCUUUVznrhRRRVCFooooGFFFFAgooooGFFFFABRRRQAtFFFIAooooAKKKKBhUtpbyXd1FbwrueVgoqKu++FGhG4vH1OdR5UXyx5/vev4VrShzysceNxCw9FzPRfDulxaRo9vZxAARqAfc9zWnSAUteylZWPzuUnOTkwooopiCiiigAooooAKKKKAEpRSUooASiiigBTTTTjTTQBzvj/Vv7J8OXDq2JZR5Uf1Pf8AKvDASD612/xZ1f7XrMVhG2Y7VdzY/vn/AAFcTXmYmpzSt2Pt8nw/sqPO92FFFFcZ7QUUUUAFFFOjQyyLGgy8jBR+NNK7sKTsrnq3wj03yNIkvWTD3DYUn+6K72s/w9ZDT9GtLUDiONV/GtGvbhHlikfnGKqurWlNhRRRVnMJRS4oxQAlFLijFACUUUUAFKKSlFAhDXn3xjuNulWtsD/rJdx/AV6Ea8m+MVzv1e0tgeI4TIfqT/8AWrCu7QZ6WWQ58VE4KiiivJP0AKivRmLPpUtNnG6FqS3FLYzKKKK1RwvY+ifh5ci58Jae4Odse0/hWJ4wi8vVSR0kUGq3wT1Dz9Fns3bLQS8fQ1ueO7Qm2S6Uf6s4P0rXGw9ph7rofJU/3OLcWcdnimk0m+kzXzR7w7NGabRmmMdmlzTAaWgB2aKbRQA+vSfD0CQaXAqKFyoY15nmvR/DF0l1pcJU5Kja31FetlfLzu+55GZX5VY16KKK+iPCOE+JA+yT2V4o4cmNx7dj+FYSHir/AMU9SimubaxQlmh/ePjnBPQVlQN/o6f3sCvlcwS9s7H0uCi/Yq5OTWLrJ/0n8K1s9KxtZP8ApA/3a4Ybno0tz0D4VNnR7lfSc/yFbPjT/kXbv/dH86wfhK3/ABLrxfSYf+g10Xi1N+gXg/2K+so/wF6HyOYq1aZ5Eaaad2pK8k+fQ3FFLQaYBRRRTAcK9e8K2A0/RLeHGGK72+p5rzbwtp39o6xBE33FO5voK9cHAwK9DCQ3kduHh1HCqur3iafplzdyHCwxs5/AVarz74y6x9j0WPTomxLeN82P7o/xNds3aLZ0SdkeZ2cj32pT3UxyzsXOfU1q1R0eHy7QMerc1e7V4U3dnlTd3c9T+H+oG80NInOXtjsP07V01eYfDu/+y639nY4juE2/8CHIr06vXoT5oI9KlLmimR3MCXNvJBKMpKpUj614NPaPpmp3mmyjBtpSF/2l7V79XlfxdsPser2WrIv7uf8AcSEevY0sRDmjcVaPNE5Ymmk03PGaTNeUecKTWbqE2GJ/ujNXyaxr07i3vmtaauyoq7KVrKltaNNKcBmLVhanqD3kpwSIx0X1q7JBdXZCY2xpwM8CrNtpUEWGk/eP+g/CvVlWjE9SVeEY2Rj2unT3I3Bdqnua9a8OeHdN0q1ikt7cNM6hjM/LdO3pXFAYGBwBXqlkn+h27bf+WS/yFXQqc7YqNTmZj6gCJcqnJFMs7KW5b5gFUdTW7PpzvJG8iFUI4z3q1Hb52xQpljwAK9GMrI3k9TNt7AB1gt0LSPxXV6X4SiTEt+fMf+6OgrR0LRUsAJpgGuGGc9lrXrlqVpN6E3ILe0gt0CwwqoHoKmGR3ox70YPrXK23uMSiiigAooooAKKKKACiionuYY/vOKAJKTNVH1GIdAT9KW3umnbAiIHrTsBaooopAIa8a+I+h/2VrhniXFvd/OPQP/EP617NWJ4w0VNd0iaAnEo+eJvRh0/wrGrDmjY9DL8T9WqqXTqeE0U+aF4Z3ilUq6MVIPqKZXl2sz7yLUldBRRRTGApwpopwpAJRRRQAUUUUwCiiigAooooAWiiikAUUUUAFFFFAyW2he4uI4Yhl5GCqPevffDGmLpOi29oowyKN31715h8LNH+36013IuYrXgf71exV6WGhZXPjs6xPPUVKOyFooortPnwooooAKKKKACiiigAooooASiiigBaKKKACqmp3aWNjNcyHCxIWP4Vbrhfi3qZttES0jbD3L7T/ujk1E5csWzfD0nWqqC6nlOoXb319PcynLTOXJ+vSoaKK8Vu+rP0eEFCKihKKKKksWiiigArf8Cad/aPiW2QrlYj5jfQVgV6T8HdPybu/brxGp/U1vQjzTPOzOt7LDyZ6YAAAB0HSloor2D8/EooopgFFFFIAooooAKKKKAClpKU0ABrxD4oT+b4uuFDZEUaL+ma9uNfP/i+b7R4m1GXr++Kj8OK5MU7RPdySF8RfsjKooorzD7MKOvFFFAGZIu2Rh702prwbZT71DWiOOSs7HW/C7WRpXieNZW2QXP7pvTJ6V7rf28d7ZvC4BV1xXy6HKHKnBByDXvvw28UR+INHVHb/S7cbZR6+9dlGSlFwkfOZrh3GSrQOU1C0lsrqS3mHzofzHY1Wr0XxRoq6lB5sWBPGOD6+1efTwyW8zRTKVdeoNeBi8M6M/I3wmJjVh5jKQ07jFNJFcp2i5pc0zIoyKAsOzRmm5FGRQFh2atafq11pcnmWrDngq33T9ap5ppNVCUqbvFkypxmrSR0o+JPkjZeaZMrjujZVvocVnan8R726Qx6farb5/jY7m/DtWSQjcFc0wQQL0jX8q7Xj6rVmcqwFBO9inaRTXlw1xckuxbczP1JrXAwOKjXCjGKcDXBOTlK7OxJJWQ8GsrWP9eD7Vpg1m6z99D6qacNyobnZfCU4gvl/wCmin9K6zxN/wAgK7/65muP+E5xJfD12H+ddn4iXfol4vrE1fU4d3oI+TzNWrSPGzSUGkJryj5xC5pKTNFMBaWkp8SGSRUHVjimB3/w2sNlpJeyLzIdq/QV2lUNEsxY6dBbj+BcH61fr2qUeWCPUpx5YoKxPE/hfTPEsMcepREtFyjocMv41t0taOPMrGjV1Y49fh5piqAktwoAwMEf4Uf8K/0//n5ufzH+FdhSVj7CHYz9lDsc7pHg6w0y8W6V5ZZE5XzG4B9a6KkxS1tGEYqyKUVHYWuf8eaONb8MXltjMirvjPoRyK6CmsAQQRkEc0SV1YGrnzvYymW3G/gr8pHoRUvNW/EmnHRfFV/ZEbYpW8+Ef7J6/rVSvGqR5ZNHmTXLJoa/Ssib7xHpWwaq3NssgJXhqIuwkzNGT0pcY61YWzc98VMlmo++c1XMhtlWCB5Wwo4Peve/DugRwWNvLdYlkEagDsOK8atVCnaBgV9A2Y22sQ9EX+VdmFndtHVhnuc74pGLuEAYASp/DNmMfaZF9lzUfij5ryP/AHK29Pi8mziT0UV6LfunaWPrSUlNd1X7zqKwYh+aSoGvYU6tu+lQvqIP+qQmpHcu0lZ32m7k+4uPwo+zXc3332j60BcvNNGv3pFFQvqFun8W76VEunL/AMtHJqZLK3X+HNMdyu2pFj+6jJpC97L0AUe/FaCqqjCAD8KXr1NAGcLKeX/WzCpF0yL+Msau0UAQx2sEf3UH41KBjpiiikAUUUUAIaKDRSA8o+KOgfY78anbL+6n4kx2b1rha+gta0yLVdOms51BWRdv0PY14NqdnLpt7NaTjDxNt/3vQ1wV6fK+ZH2GT4v2lP2Ut0VaKKK5D3RRThTRThTAKKKKAEooopgFFLRSASilopgJS0lFIYGiiloASj9TS1v+BdK/tTxBCjLmKE+Y/wDSrhHmlYwxFVUqbm+h6j8PtI/srw9AjjEso3v9TXTUxVCgAcAU+vahHlVj85q1HUm5vqJRRRVmYUUUUgCilooASiiigAooooAKKKKAFooooAaeK8V+Jmp/b/ETxK2Y7YbB9e9evazeJYabPcucLGhavny7na5uZZ5PvSsXP41x4qdoqJ9DkdDmqOq+hFRRRXmn14UUUUhhRRRQAV7f8OLH7D4XtgRhpB5h/GvFbWFri6hhQfNI4UfjX0Rp0H2awhg6BEC/pXdhI7s+az6raMaZZoooNeifJiUUUUAFFFFABRRRQAUUUUAFKaSloAjkOI2PpXztqsnnapeSf3p3P619EXH+pf6f0r5wkO6SRvVif1rixnwpH0mQL35MaaKKK80+tCiiimIqaiPukVVHSr16uYc+lUPSrRzVF7whrU8N61c6Bqcd7aNypw6dmXuKzD1pa0i+V3MJwjUXLLY+kvDHiGy8QWCT2r/MR86Hqp9DU2raHaakCZUAk7MOtfO+h6zf6HerdafOY3H3l/hcehFes+FPifp+oeXbasv2K4Y7Qx/1bH69vxrrUoVlyzR8vicDVw0vaUthdS8I3sBJtiJV7Doawrq0uLQ4uIXT3Ir1mKaKVd0Uisp7g1He2cF3C0c0auCOhrjq5bFq8HYzo5jODtPU8hozU+pwCzv5oB0RiBVbdmvDlFxdmfRQkpK6JM0Zpm6k3VJdh+aTNPgieeURxKWZugFdhoPg9dom1Fsk9Ix/Wt6OHnWdonLXxNOirtnF0vPpXqsehafH921i/wC+amXTLJeltEP+Aiu9ZXPqzzpZrHpE8oVHPRG/BaeIZj0jk/75r1lbO3HSGMfgKeIIh0RR+FUsqfWRDzV9InlCWVy33YJT/wABqtqOkahOI/KtJG6jpXsQjT+6KXYPStI5Wk73I/tSSd7HD/DjSr7T5rtr23aFXVdpJ64zXVa5/wAge6/65N/Kr+MdKpauu/S7pcf8s2/lXpxpqnT5UeViarqtzZ4q1NNObrTGrxjxEOopuaXNIB1bvgqx+3a5FuGY4v3jfh0rAzXpXw6077NpbXUiYe4PH+6K6KEOeaNKUbyR1o4pwpopc17B6hl+IPEOneH7ZZ9Rm2KxwoAyW+grn/8AhaPhz/ntN/36NcJ8XtR/tDxT9kVsrZoEx/tHrXPpZRiNc7q4qldxehy1KvK7I9b/AOFo+HP+e03/AH6NO/4Wh4b/AOfmX/v0a8k+wwH+9R/Z0Ho1Z/WZGft2etf8LQ8Nf8/Mv/fo1uaD4m0vXlJ066WQjqp4YfhXhP8AZ0Ho1aOhP/ZOqW97bkh4mGcnqvcVUcS29Rqtrqe+0HpUVrOtxbxzRnKuoIqWu87Dzj4x6Z/odprMK/NbN5cuO6H/AANefA5AI6GveNf0+PVtHurCUZWeMr+PavBIYpIN9tOMS27mNh9OK87Ew1uceIj1JKKKK4zlG4pKcaMUwH2o/fL7kV9AQf6iP/dH8q8E01fMv7ZMZ3SqP1Fe+oNqgenFd2EWrZ2YbS5zfiSYR6nFHt3EqP51p/a7hlAjhxVLV8Nq0Py/N8tb2K9CWx2md5d5N947aUaezffkNaFBrMCrHYwL1G41MIYl6KKdmlFSAgAHQUHNLSEUAFJ+FLRQMMUUUUAFFHWigApKWg0AJRUMt1DH96RRUCalFI6qis2e+3igC7RRmikA01538VPD/mRLqtsmZI+JMd19fwr0aobu2juoHhlUMjqVIqZxUotM6cLiHh6qmj5yorV8UaNLo2sT2rA7M74z6qayq8mUXF2P0ClUjVgpx2YtFLRSNQopaKAEooopiFooooAKKKKAEopKUUhgKWiigBa9a+E+lC30hr2Vf3lwcqf9ntXlum2j39/BaRjLTuEH419B6ZapY2ENtGMLGoUfhXdhYa3Z83nmI5YKkupZHrS0UV6R8iFFFFIYUUUUAJRRRQAtFJRQAUUUUAFFFFAC0UUUAcP8V9Q+zaALZWw1w2z/AID3ryCu0+LF/wDaNfS3U5W3TGPc1xdeViJXkfdZRR9nh799RaKKK5j1gooopDCiiigZu+BLUXfimyRhkKxc/gK946YFeSfCCz83Wrm4I4hjCg+7f/qr1s9a9TCxtC58PnVTnxFuyFooorrPFCkpaSgAooooAKKKKACiiigApaSloArai2yynf8AuoT+lfOTd/qa+hfEjmLQr91OCtu5H/fNfPXauHGdD6jIV8b9BKKKK84+oFooopgJKu6JhWXjBx6Vrjmsy4XbMw9auJlVWzI6KKKs5wpkmcZXqOR9RT6WnB2dyZRUlZnonhS/uLqG1a0llR5MAhWPXvXsMeVgUMcnHJNeV/BCwkkjubmaP9zE/wC7J6bu/wCVeieIr8WGlzSZ+bGF+tepVrL2akz4itS/funE8116XztYunB43kVSoYszFmOWY5oX5sLtyx7CvkZvmkz6ymuSmk+gZq7o2l3WrzFLZPkH3pD90Vt6F4PmutkuoZhj7J/Efr6V3djZ29jAIraNURewFehhsDKbvPRHm4rMVBctPVmfoXh+10qIFV3y45c/0rSubmK1iMk7bVFUtV1mCyXanzy/3R2+tcre3015NvnYn0XsK+hpUOVWirI+fnOVSXNJm5N4kfefIt1Kj+8aiPiW5PSKJfzrDzRxXQqaJsbDeIbw9BEPoKjbX78/8tVH0WsyjFXyR7BY0Drd+f8AlufwFMOq3p/5eJPwNUsGjBpcq7BY2NH1C5l1GNZppGU8YLV08yh42U87hg1wtvKYpVkU4KkV3FvKs0KOvRhmsakSWjxbVrc2mo3EDcFHIqk1dp8RtK8m+W+jX5JuG/3q4s18/UhySaPJnHlk0HajNIelNJrMgfXtHh8xto9r5LAp5S4IrxPdWhY+ItX0qIx6ddbV7JIAyj8DXRQqezd2bUpqD1PbaranexadYT3kzBYoULuT6CvIT8SfE6ffjtG+kf8A9esTxF4u17xBD9mvHCQZyYok2hvr612yxMbaHW68ehl/aJNT1SW7nO5pXaQ/ic1p1SsLbyU+cYargrzpO7ucMnd3HUUUUhC0UUUhHqXw01cXWlmwlfM1t0z3Tsa7GvA9Ovp9PukuLOYxSoeD/T6Vtf8ACyfEMHytBaTej7T/AENd1LEJK0jtp1ly2Z7Ca8H8WTQP4y1BrQgxs+Dj+9jmp9W+IPiW/t2gBit1YYJhjw35k1zlnBL5hlmJ3HnnrU1qsZqyJrVFJWReooorjOQKKKKYzZ8GWpuvEtku3cFfeR9Oa9sFea/CjTme9uL5h8ka+Wn1PX9K9JkcRoznoozXp4ZWjc78OrRuYFyfO14DqAwH5Vv1zuj/AL7VWkPu9dFXVI6goooNQA00UUUgCih9q/ebbVdrqFOsqn6UAWKKpPqcY/1aFqZ9qu5f9XDtHqaBmhTWkRfvOB9ao/Zryb78+wegpV0uP/lo7OaBEsuo2yfx7v8AdqE6k7/6i2c/WrKWlvH92NfyqYccCgCju1CbpsiWj+z3k/19y7ewq9RQBUTTLROsZc/7fNWEjVB8iqo9qfRik3YBOaKKKRQUUUUCOS+JHh7+1tINzb/8fNqC6/7S9xXjlfR7GvE/iBoTaLrxaNSLS9JeP0D/AMS/1FctendcyPo8nxnK/Yzfoc5RS0VwWPqhKKKKYBRRRQAUtJS0AFFFFACUUUUhi0UUUAdt8JdO+167JeMuUtk2j/eP/wBavYK5H4XaaLHwvFIwxJdEzH6Hp+lddXs0Y8sEj89zKv7bESfbQKKKK2OAKKKKAEooooAKKKKAFooooASiiigBaKKKACmTyCOJnPAUZ/Kn96wvGt8NP8OXk2cMYyq/U8UpOyLpxc5qK6nimvXhvtYu7kjPmStj6DgVRpT1pK8SbvJs/SaUVCCguglFFFSaBRRRSAKUUlKKB3PU/g3bbdPu7gj/AFkoX8hXodcn8MLXyPCts5GDLmT8zXWV7VKNoI/OsfP2mIk/MKKKK1OMKKKKAEooooAKKKKACiiigApaSlpgZfir/kXNQ/695P5V8+j7or6C8Vc+HdR/693/APQa+fR91fpXn4zofU5B8MxCOaKWjFeefThRRRTAcKpX6YYNVwVDeLujPtTW5M1eJn0UUVocgVLaQSXdzFbwjdJKwVR71FXafCDTBf8AioTOMpaxmT/gR4FXBc0kjnxNT2VKU+x7D4X0iLRdCtrJAP3aAN7nvXJ+PdT+0XgtI3ysX3gPWu8ui6wuYxlwPlHvXK6f4RMtwbrVX8x2O4Rjp+Na4unUnFU4HymGqQjUdWochpelXepuFtoiV7sfuiu90HwraaaBLKPOuMffPQfStu2torZAkKLGo6ADisrxH4ktNFtWdv30o6Rr6+/pTw2AUNXqx4jHzr6R0RrTyxW0JeV1jQdzXN6r4heXMVn8q9C56mvONf8AE+oazcCSZ9saHcsa/dH+NdFZTCe3SQHhwDXsKjyq7OHlsWSWdizEnPWkq3Z2FxdtiJML610NjoEEOHn/AHj/AKVTnGKA5mKN5PuKT9BUv2W4/wCeL/8AfNdrHBFH9xFX6CpMD1/SsnW8hXOI+y3H/PB/++aX7Hc/88H/AO+a7bj1/SjNL2jGcWunXbdIHqePRr1/+WW36muuzR+FL2rA4B1KuVxgg4Iro/DV6GiNq55XlfpWd4itPIvy6jEcvzD696oQTNBMsqHBWtX70biZ2Wp2MOo2b284yjjFeQa/pU2kX728wyvVHxwwr1/Tb2O+tlkUjOPmX0NQ65o1pq9r5N0gJH3W7qa86tQ5ldbnLWpcyutzxU1G3Wug1/wrfaS5cRmaDtInP51z7V5soSi7NHnuLi7MSmtzRmkNQK4EUzHNP60mKQxDRRRTGFFFFMBaKTNGaAFoptFIYvGaSkNFBItFFFABVnTrGfUbtLa2Xc7nFP0vSrvVLgQ2cDSE9T2X6mvWfCPhiDQrbc2HuXHzyensK6aVJyeuxrTpuZf0DSo9G0uK0gH3Rlj/AHmPU1Hr915duIkPzP8AoK0bq4itbdpp3CRoMkmuDvtfW7vWaJHfccIP5V61OFlZHqRjZWOn8NwYWSUjr8orYziseynuVto44YNuBzU/k3U3+sYKKmT1GXXnjT7zAVWk1KBP7zfSmLpqZ/eSManSzgTomfrU6DKrak7/ACww/nSH7dL32itFVCjCqB9KWgDOGnSP/rZmP41Mmnwp97L/AFq3RSAjSKJPuRqtP6DFFFABRRRSAKKKKACiiigBKKKKTGFFFFABSGlpDQAlY/i/w/D4i0KWyl+SX70L90kH3TWzThSauOMnBqS3Pm/y5YmeG5XZcQsY5V9GHWkr0T4s+G/LlGv2SccR3QX06K/4dDXnVedVhyM+7wGKWIpJrfqFFJS1iegFLSCloYBRRRSAWiiimAUUUUhoKsadatfX9vaocNNIqfrUFdf8LNNF34jNw4ytrGW/4EeBWlKHNNI5cbW9jRlM9esoEtraKGIYjjUKoHoBirFIBgYpa9o/OJPmdwooooAKKKKYBRRRQAlFFFAC0UUUAFFFFABRRRQAd68/+MV75WmW9oD/AK6TJ+gr0CvHPixefafEKQBsiCID8TzWNeXLBnpZXT9piY+RxdFFFeOfehRRRSGJRRRQCFHWnDvTRVi0jM11DEOryqv5mqSuxVHaLPefCsH2fQLKIcbYV/lWtUNpGIreOMfwqB+VTV7a0SPzOcuabkFFFFUQFFJRQAUUUUAFFFFABRRRQAUUUGmBR19PM0a8T+9C4/Q188E9q+jdTXdYzr6oR+lfObDHXqOK8/F9D6jIH8aG0UUV559QLRRRTAWmyjchHtS5o7UBLYymGHIorV8S2AsL2AouI7mBJV/Ec/rWSetbNNHBGSlqha734L6hDZ+ILiCZgrXMQ2Z9QelcFSxSSROHhYxyIch14INVTlyyTMcRR9tTdPufU+4etZeqeJdK0uQRXV3GJ26RKcsfwr531Dxl4jZPs7axc+XjHBwfz61z0eoTwalDeyzSSMkgLljkkfjXfCtGUrWPmJ5dKCu2e7eIfG13eK0WnA28Tcbs/Mf8KzSDqWjsHJZ3Qg5/vVjIwmQPGcq4BH411PgnS/tE0kN02xQN6p3PrXrcsYxuedazOGSNnOzb8w4r0L4e6YtzZsLo/wCpb7ntWd4g0mPStUkjiXCP86n2NaHgy8Ftqgjb7s42/j2rOcuaJq1dXPQI1VECxKEUelL0GBR1pcVxGAlFFFIANN8xV+8wFQ3MU0jDa2FqMaeT/rJT+FMZK93EvWQH6VA+oAcRqWqZLGFeuX+tTpFGn3UUUgOe15Lq9sn2JtKcjiuVFvcP9+bFemMAcg9K4/XdOayuS6D93J0Pp7V0UpdBoo6VLJp026CQ7h1B6Guv07VobtQrfJJ3B/pXGdTT1JHQ1pKCY2rnfsquMEAg9jWHqXg/R79i7W4ic/xR8Vm2es3NtgFt6f3W/wAa2rbxBayACXMZrnnRvuZSpp7nL3Xw2jbJtb1h7Ov+FZc/w51RSfLnt3H1Ir0mO/tJB8s8Y/HFTrIjj5HB+hrneGi+hi8PFnksngLXF+7HG30kFV38Fa8nWz3fRxXsgNLmo+qxF9WieKP4S1tPvafJ+BzUD+HtXT/mHz/98GvcuKDU/VIk/Vl3PCG0XU0+/Y3A/wCAGq09rPBxNDJH/vLivf6huLW3uE23EKSL6MoNS8IujF9WXc8ApK9K8S+AIpFe50UbH6mE9D/u+led3VtJazNFMhSRDgq3BFcs6UobnPOnKG5DRRRWRmFaNloGqX6B7WzkkU9DjiqMf6A17voxjbTbZoVCxmNSoH0relSU3qbUqameW2XgHWp8eZGkA/2mrpdL+HFtFhtRuGmP91eBXc528npVW51K0gH7yZfoOTXfHDQOqNCCCy0+10+IR2cCRIP7oxTrm7gtU33DqorFvfEWcraRnH99v8KxJ55bh90rs5PrXVGkbqKWxa1jUm1J/LdSsIPC/wCNWfDempJN57RqI4/u8dTVHTrGW9nCLkKPvN6Cuyt4Ut4VijGFUVVSSirIpqw/p04opaK5wG0UtFIYlFFFIAooooAKKKKACiiigAooqKa4hgGZZUQe5oAeaWs6bWrKP/lru+gqD+2Jpv8Aj0s5ZPc9KdmBsUlZSLrFx18u3U/ialXSZJObq8kk9hwKOUZbkuIY/vyKPxpi3kL/AOry/wBBRDptrD92IE+p5qxgDpxSdguIDxRRRSAWiiigRFcwR3UDwTorxSKVZT0INeFeLtDfw9rD2xJa2f5oG9R6fUdK96rnfHWgR65o0iAAXEWXib39PxrKrDnjY9HL8U8PVV9meH0tLIpR2Ruqkg02vNasfdxakrgKcKaKcKQwooooQC0UUUwCiiipAWvWPhBp/k6NLeN965k4P+yvH868oHzfU8CvoDwzYDTdCs7XbgxxLu/3jyf1rtwkLts+fz2vy01TXU1KKKK9I+OCiiigYUUUUAFFFFACUUUUAKaSlNJQAUUUUALRRRQAhOPwr5/8W3X2vxFfTZzmUqD7DivdtVm+zadcy5xsjLfkK+dp5DJKzscliT+dcWLlokfR5DSvOUxlFFFeafW2CiiigAoNFFAwFa/hWETeI9PjboZlP5c1kV0vw9j8zxbY8fdDN/46a0pK80jlxkuWhJ+TPcU+6KX/ABpB0pf8a9tH5yJRS0UCEooooAKKKKACiiigAooooAWg9KKKAGSqHjZTyCMV85XybLy4T+7K4/I19HmvnzxLF5HiC/jx92Z/1Oa48UtD6PIZWqSXkZdFFFeYfW2ClpKWgYtAooFUhS2Oo8b6eZvBGh6ki8wp5Tt7Hp+tcDzXtFrYDWPhSbfGXEO5P94HIrxjBUgHr0rqqrZnz+BqXc4PoxKKD1orE9MhlgWRsvUFxZRNCyhattSVSlYxlBPc7bwDdJc6HGMfvIGMbZ6+36V2OhXJtNSgkJ6NhvoeDXmXgC6+zaxNZsfkuF3KP9of/Wr0BOK9+jU9pTR8hi6Xs6rR1fjmyE1jFeRjLRnB/wB01xVvI0MqyocMpDD616NZbdW8PCN+d6FD9RXnU8ZhkeNuqNipj2MYPSx6npd0t5ZRXCHIdR+dWulcn4Cvd9rLaMeYzuX6V1dYS0ZlJWYUGig1JIlFFFABRRRQAA1HcwR3ELRTLuQ/pT6UGmnYZx2q6RNZPuQNJB2I7fWs8V6AyhgQRkH1rJvfD9vNloW8pz6dK3jV7jTOYFOq/caJdwdF8xR3FUXR4ziSMp9a1UkxiZpdxHQn86ry3UUf3mxVZ9RX/lmparsmBpCWQfdZh9Gpwu7hek8g/wCBmsk3VzJxHHtppiu5P9ZLt+hpckQNk6tcxj5rt1/4Hmm/8JLNGeLt2/WsqOwB/wBY5ap1tYk+6q0uSIGgvii/b/V7m+oFW7HxNepIPtkKMjenBFZI4GBRS5EB31pdxXcQkgbcprF8U+FbPXoixxDdqPllA/Q+orEsb2aylDxN9V7Gus0zVIb5QM7JO6muepS6PYznBSWp4vq+kXmkXTW95HsI6N/Cw9QaoV7zq2k2urWrW95GGU9G7j6V5R4q8JXmiyGRVM1pn5XH8P1ryatBw1Wx59Wi46o54e1eu/DnUhe6AkTNmS2Plke3avIq6f4eauNN1sQytiG6+Q+x7Gpoy5ZkUZ2lY9J8S27S2BkQtuj5wPSuU5PWu+ZQ6EMMgjB+lcVf2j2148PqflPsele5Skmj1YlU1oabpM16Qx/dxf3j3+lbGl6JDCiyXA8yU84PQVr8AYHAoqVbaIZXsrSO0hEcY+p9asUUVyt3JCiiihDEooooASiopbmGL/WSqv41Rn1y0i4Ulz7U1FsqxqUlYEviB2/1MIH15qE3Wr3n3AVHsuKfIwsdIzKgy7KB71Um1Syh+9Og9l5/lWQNCvLj5rmfH45q3b+HLRMGUtIfyp2it2FhJvEVsv8AqYndvyqu2q6ncf8AHta7R64/xrZhsbaAfuoEB+lTAAdOKXNFAYQsNWuhm4ufLU9gf8KfF4bg37p5pJT+VbdLS5hFS302zt/9VAgPqRk/rVvouBxSUUm2wuA6UUUUgCiiikAlFFFAwooooAKa3CGn1m+INRj0zTJ7mVsbFJHuewpMcIuU0keF6+UGt3gjX5fOb+dU6kuJDNNJKx+Z2LH8ajrypbn6NSTjBJhRRRUmoUUUUAOopKKAFooopDNTwvZ/b/EFjbMNytKCeOw5NfQCjAAryH4SWRuNeluSAVt4zj6np/WvYO9erhlaFz4fOqvPiOXsFFFFdR4olFFFAxaKKKACiiigBKKKKAFNJSmkoAKKKKAFooFFAHPeP7n7L4WvnzgshQfjxXhNewfF2fyvD0cQP+tlC/1ryCvNxb95I+xyOFqLl3YUUUVxH0IlFFFAhc0ZpKTNAC12HwpTzPFQP92Bz/IVx9dz8H493iCd/wC5b/zIragr1Eedmb5cNJ+R69RRRXsn5+FJS0lABRRRQAUUUUAFFFFABRRRQAtFFFACV4b8RYPs3i68GMCQK4/ECvc+9eQfGG38vXbeYD/Ww4z7g1z4lXgezk0+TE27o4aiiivIPuApaSloELQKKBVDex7J8LmE/hJIzyFdlNeP+NNMOk+Jb21xhQ5dP908ivVfhA+dDnj/ALkp/lXPfHDS/LubTUkXiQGFz79RXoyXNSTPkKE/ZY6UOjPMe1JTjTa4j6EKKKKAIzO9jdW95H96CQN+FesWsqXMEc8RyjqGB9iK8omQSRFT3GK7j4fXn2nQlhY5e1YxH6dV/SvTwM94s+fzWjtNHpfgu62vJaMevzr/AFrJ8aWH2bVTKoxHMN3496j0a6+yahBLnjdg/Q10vjW0+06OJ4xkxHd+B612y92dzwouzOR8N3hstXhkJwjHa/0r01TkCvH1baxI9a9N8N3v2/SYZScuo2t9RWVTXUc11NSg0UGsjESiiigAoHNV7u7+zsB5ZYmq32q7l/1UIAoA0Tx1pjzRJ95wKpC2vJvvybB9aF0pQcyys30p2Amk1GBOjb/pUDag0nEUdWY7K3TpGG+tTqiqOEVaLoZn/wCnTdDsX8qP7ML8zOrfrWjRTuBQXRbI/fhRvqtO/sewHS1i/KrtFLnYFQaVZD/l3jpraPYt/wAsF/A1dop87Ao/2NY/88FpraHYn/llj6GtCijnYGW2gWR6Aj8aqXHhsdYJvwat/FFNVGgOHvLKe0bE8ZA9R0NV0ZkIYMQR0IrvZYklQrIoZT2IrA1Lw+Ruks+e/ln+lbRqp7juSaR4gGFivevQP/jW6yxXMWCFkRh9Qa8/kjeNyrqVYdjWjpurTWTAA74+6miVNS2E43KviX4fRzb7jSWEUnUxH7p+npXn17a3Gn3BhuomikU9CK90sb+G9i3xN9V7iq2taHYazD5d9AH9GHDL9DXnVcN1ick6CeqK/g7VhrGg29yT+8A2SD/aHBpniuAiKO7j+8h2n6VD4S8Mt4dkukjuTNbTEMiMOVNa2sKraZceZ0CE100bpK5vC9tR2nXC3NnFKvcc/WrNch4W1y1ieS1edW+XcAOa1pteRf8AVRk/XitJQdzRGzTSwXq22udbWb2b5YlC/wC6M0gs9SuvvFx/vnFTyDsbk1/bRffmB+lUZtft0/1al6hi0BzzNMB9KtxaJaJ98GT60/dQaGbL4gnc7YYwufxqE/2peH/lrg/gK6OG3ghGIoUX3xUtLnXRArHOw6BPIczzKv61cg0C0TmRmkNa1FT7RjIIbK2hH7uJB74qcCiipbuAtJRRUiCkNLSGmAUUUUAFFLRQAlFFFABRRRQAlFUbrWbC2OJrlAR2BzWTc+MbOPP2eN5T69BTUZMpJs6Sg/L1OK4W68YX0mfJRIgenGTWRdate3R/fXDsPQcVqqT6lqm2d7qfiCx05CHkDuOirya8t8c+IbjVrhImOyJRu2D3qV85Y/iTXJSXq37tdJ9xzwPQDiufFJQhZbnsZTh1KtzPoMNFFFeQfYBRRRQAtFFFIAopaKYCUUUUgZ6r8GrLy9Lu7tx80020H2Ar0Kue+H9p9j8K2SMMF495/GuhFe1TjywR+c4yfPXlLzCiiitTlCiiigBKKKKACiiigAooooAKKKKACiiigBRRQKKAPM/jJc82FsD3aQ/livNa7b4uTFvEsUWeEt1I/M1xNeTiHebPvcphy4WIUUUVzHqCUUUUAKaaacaaaBC16F8Gh/xMr8/9M1/ma89r0f4NL+91BvZB/OujDfxDy83/AN2Z6gKDQtBr1z4MKSlpKACiiigAooooAKKKKACiiigApaSloASvOPjNbZsbC4A+7KyE/UZH8q9IrkPinafafCkzKMmF1k/I4/rWVVXgzswE+TERfmeLUUUV4x+iBRRRQA4dKBQOlAoA9I+Ddxhr63J5BD4rpviXpP8Aa/hO7jVcyQr5yfVea4T4T3PleImjJ/10Z/SvX5EWSIo4yrDBFepQ96lY+HzG9HGc69T5XFFa3i3S20bxDe2RXCRuWj/3DyKya4ZKzsfT05qcVJdQooopGglavgm++yeITbucR3ybP+Bjkf1FZdQTs8MkV1DxJAwdfqOa2oT5JpnHi6ftKTR7AvFd1oky6nohhk5O0xtXntlcpd2sVzEcpKgYflXU+DLry7yS3Y8SDI+or3J+9G58dNcrsclf2zWl5LA4wUYiuk+H1/5d1NZuflkG5fqKb4/0/wAu8S7jHyyjDfUVg6RdNYalBOp+4wz9O9ZpcyLXvRPWaDTY2Dxqy8gjNOrnOcSiiigAYZoHApRRQAZopKM0AFFFFABRRRQMKKWjFAhKKKKACiiigApaSoJ722h/1k6j2ppXGT0VlTa7bD/VhpP0FVJNduZG228Sj9TT5QNa+0+3vExNHz2deorltU0xrHLiUPH69x9RWh5WqXf3t6g+p2inxeHpXO6WdQfbmtIy5eoHKLrUNpKGimIZT/DWtYfEC23iO9hl9PMRc/mKv3vguwmBdGdJvXsfwrn7/wAP3liDiAsn95Oa3XJNDOxh8SaVMgdbtVJ7PlT+RrnfGOunULP7Bpj5V/8AWSdBj0Fc/wBOtSxpu2heWbpQqajqKxa8IeGpP7V8yaT5BH/CPX3ruo9Is4uWjDn35o0S2a106NXGGxzV6uapNtjGxxpGMIoUewpaWis7gJRRRQxBRRRSASiiipKCiiigAooooEFJS0yWVIlzI6oPVjimA6jFZN54j021yGnEjDsnNZVz41iH/Hras3uxxVqEilFs6ymu6p8zsFX3rz668WanNkLKIQf7orKnvLmfme4kkz6k1apMr2bPRbzX9MtMh7lGYfwryaxrrxtAuRa27yH1bgVxePQUVfskilC25v3Hi7Ups+UEhHsMmsq51G8uv9ddStntnj9Kq1Zt7O4n/wBRC8n0FUoxW5Ssitg0tbNt4W1OfGYxEP8AaNa1r4JXreXJb/ZjGKfPFA2jkM1Nb2k9y+2CJ3PsK7+18NaXbYxb7z6yNmrU93Y2CYeWCEf3Rj+QqPaX2J5+xzekeF/IilutTC/LGxWP8Oprw3R5dstzbZ4SRtv0zXtfifxKtzbPb2WUhIzJIeNw9PpXgumSk3zzKeHlYj6E1yYtPkuz1cok/atnRjpSU4dKQ1459kJRS4oxQAUUUUAFFFFABT4IzNPFGBkuyr+Zpla/hC1+1+I7GMjIEgY/hzVQV5pGWInyUnLyPd9NiFvYwRAcIgX9Ks0ijCgUte2j81bvK4UUUVQhKKKKACiiigAooooAKKKKACiiigBaKKKACiiigDw34jz+f4vu+eIwqD8FFc3Wv4wk87xPqTZ6zsPy4rIrxqz99n6NgY8uHivISiiisTrEooooAWiiigBRXo/wa/1mof8AAP615vXofwaci9vk7bFNdOG/iI8nNv8AdmeqUUUV6x8IFFFFACUUUUAFFFFABRRRQAUUUUALRRRQAVneIbT7bot3bYz5kTKPrjitGkIBGDUyV0VF8rTPmtwQxBHzKcGmVreLbI2HiG9t8bQJNy/Q8ismvFmrSaP0mjP2lNTXUKDRRUmotAoooA2vBl0bPxLZS5wC+w/jxXvnVc183Ws32e5imHWNw35GvojTJ1ubCGZPuyIGH416WEfutHyOfU+WpGZ5b8cNI2S2erxjhv3En8x/UV5hX0b450f+3PDN5ZquZChaP/fHIr5yIwcHqOCPes8RCzudGU1+elyPdBRRRXMeuJTZF3IwpxoovYJK+h2Hw8u/P0h7RjmS0kK/8BPIrs7GdrW7jmXqhBNeWeEb37Br6Bm2pdJsP16ivTENe9h589NHx+OpezqM7XxLbDUdCZo+SoEi15uBj616P4XuBeaX5MhyY/lP0rhNaszY6ncQkYVXyv0PSiOjaOSm+h3fg6++2aMik5kh/dt+HT9K2a4HwLe+RqjW7H5bhf8Ax4dP0rvqymrMiSswoooqCQooooAKKKKBhRRRQAtFNZwv3mAHvVWfVLOHIaUEjsKaQi5S1jtrYfi2gZ2qNp9XuP8AVxrGDRysDZJ29Tiq82oWkIO+dcjsOayzot7c83F2wHpU8GgWsf8ArGeT61SS6gJPr9uv+pjaRvyqqdW1K6/494Nq+w/xrZhsbWEfuoUX8KnAx0AFF4oDm207Vbv/AFsjKPdqsW/h0D/j4mJ/3a3qSnzjKMGj2UXIiDH/AGuatxwxRj5EVPoKfRUOVwD8aPxoopAHeiiigCpc6ZZ3JzPbox9cc0ltpFhbPvitkDepq5S07vuAnt2ooNFSISiiihjCiiigVwooqvcXttb/AOunjX6miz6FWJ6Kw7rxZpkBIWQykdkFY9342kYkWtuFHYuapQkUotnaVFNcwwLmaVEHua86u/EOpXJO6cqp7LxWbJNJISZWLH1JrRUu5ap33PRLrxNplvkecJCOyjNZN141HItbbP8AtOa43PpilqlTSD2aRtXXinU584mEYPZBisqa5nn5mmkl+rVFVmHTLy6/1Vu7fhVpJFWRUyvv+NLW9a+ENQkx52yEe/JrXtfBtqgBuZnlPoOBSdSI+ZI4qrNvY3NwcQwO/wBBXodpoum2uNlumR3bmrMt5Z2gxJJGg9AKzdR9ES6nY4m28I6jPgyFIlP945Natt4Jt0wbq5kkPonAq/d+KLOHIiDSkenArIuvFl3JkQIkY9TzQvaSI5mzftfD+mW3MdqjEfxPz/OrUl5Y2aYeWKMDsv8A9auBn1a9uc+bcPj0XiqrOSckkn1JrRUG92Tdna3XiqxiyIhJKfUcCsy78V3MmBbxpGPfmuc3VHJPFCpeWQRqO5OK0VKEdxpN7Gldare3OfNnfHoDgVRZiTk5z61z+oeMNNtsqjNcOOyVzmp+M726QpZxLbjserVEq9KnsdVPCVJ9DV8ca4tlYyWMD7rq4G3A/hU9Sa4rTk2CId8imhWklMs7M8jHJLcmrunxb7gei815OJruo/I+gwWF9j6m2OlBo7Uhrzz6FC0U2lzQAtFJmloAKKKKAG11vwstzP4qSTHEUbE/jXJV6D8GrYtfXtxjhVVa3w6vUR52aT5cNI9X6CiiivYPgBKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFApG+XJ9KcKium2wO3oKGNK7sfPGsO0mq3jt1adz/AOPGqlTXTb7mVvV2P61DXiVPiZ+l0VamkFFFFZmo00UGigQCnCkpRQMSu++DTY1a9X1iH864Ku3+ED7fENwv963/AJMK6MN/EPLzVXwsj1+iiivXPghKKWigBKKKKACiiigAooooAKKKKAFooooAKKKKAPIvjBY+TrNtdKPlmTYT7iuFPWvZPitp/wBs8NGdRmS2cSfh0NeOV5eKjyyufcZPW9ph0u2glFFFch7AUUUUwCvb/hte/bPCtruOWizGfwrxCvTPg5fZju7In7pEij+ddWFlaVjxM7pe0oc3Y9JYZGK+ffiPov8AY/ii4VBiK5Pnx/j1H4GvoOvPPjTpH2vQ49QjX95aN8xH9w9fyNdtaPNFnzWW1vZVku54uaKKK80+xCiiigCG43IFlj4eJgy/Uc16ro16t/psFynSRAa8uf5uK6z4b3m6xnsnbm3fI/3TXo4Gdnys8PNaV4qaPTfCN15N+YmPEox+NP8AH1hkR3qj/Yf+lYlrMYLiOQHBUg13OpwrquiSKvPmx7h9a7pq0rnz0dGea2k7W1xDOnDRuGH4V6vaTpc20c0ZyrqGH415EQRgdwa73wJe+dprWpPzQNx/unpUVFc0qLqdLRRRWJgJRRRQMKZI6x9TT6MUAVXu5D/qbZ39zwKgZNSm/wCWkcA9uTWjRTuBl/2KJDuubqWX2zgVZh0uyh6QqT781boouIRERBhEC/QU7NJRRdgGaKKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFLSVVutTs7Rcz3Eae2aErjLVFc9c+L7CP/Uh5j7DA/WsW88Y3khK20KQj16mqUGylBs7kn14qrPqVlbf6+4jX8a84utWv7onzrqQ+wOBWex5JYkmtVS7lqn3PQrzxhpsPEW+Y/7I4rHuvG87E/ZrdYx6vzXJ5par2aRSpo07zxBqV2TvuWUHsnFZru0h3SMzn1Y5pKt2ulX93/qLSRh64wP1p2SL0RVp1dBZ+Dr+XBuHjiX06mtqz8G2MeDPJLKfQcCk6kUJySOHUZ6c1bttLvrn/VW7EfSvRbXSbG1H7m2TI7lcmnz3tpbL+9njjA7Z/pUOs38KI9p2OLtvB97LgzskI9+TWvZ+DrKLBnlaU+nQVYu/FFlDkQhpiPTgVk3Hiy6kyIY44h69TRapIlybOlt9J0+0X93bxAjuRmnTX1paDEksS+2K4W51W9uCfMuWPsDgVSdyT8zFjTVBv4mTqdrceKbOLIiV5D/s9Ky7nxVctkQRpGPeueoxmto0YR6AX7jVry4/1k7Y9F4qozFjkkk+5qPp1bao71n3niHTLMHzbtGYfwx/Mf0pvkgXCnObskaJpvSuSvfGi9LK1J/23OP0FYV9r+pXZO65KD0TgVhLF04LTU7oZdVnvoegXOoWtspM88SD3NYd54ysosi2R7hl98CuHZi7FnYsx7k5po61ySxsnsd1PLYR+J3N688XajcZEQWBfbk1jT3U9y5a4mkkz6mo6K5Z1pz3Z3U8PThshML2UfjQBg8cUo56VPb2kszYC7R6msG2dMYJ7IiSMuwCjLGtuytxbR4/jbrSW1rHbgH7z+tWO+aiTud9Kly6sDn0pppaSosbi0UUUgFooopiCiiigBteq/BqHGl3kvdpcfkK8rFey/CaLy/C6tt/1khNdWFXv3PEzuVqFvM7IdKKKK9Q+LCiiigBKKKKACiiigAooooAKKKKACiiigAooooAWq+pPssJ29Iyf0qxVLXDt0e8PpA/8jSexUPiR87g5yTSd6RelL3rw5fEfpdP4EFFFFSaCUUUUALRRRQAV2HwofZ4qA/vQP8A0rj66f4ZybPF9qP7yOv6V0UNJo4MxV8PL0Pb6KQdKWvXPz0KKKKAEooooAKKKKACiiigBaKKKACiiigAooooAp6xaLe6dPbNyJUKn8a+e723e1u5YJBho3Kmvo8jIrxj4o6YLDxEZ0XEd2u7/gQ61x4qF43PfySvyVPZvqchRRRXmn2QUUUUgCul+HGofYPE9vufEc2Yj+PT9a5qpLWZra6ilQ4MbhgfpWlOXLJM58TT9rSlDuj6SU55qprFlHqOmXFpMMpMhQ/iKNJulvdOt7hekqK/51cxXs2uj851hP0PlvUbOSwv57SbiSFyh/Cq9d/8ZtG+x65HqESYjul2sR/fFef15lSPLJo+2wlVVaSkLRRRWZ1CVc8M3v8AZviGGQnEc/7p/wAelU6huVJXcnDIcj6itaUuSaZy4mmqlNxPYVGQK7LwheedYtA5y0R4+lcDol4L/Sra5B5kQZ+veuj8L3X2fUkBOFk+U170vejc+MmuWVjL8T2X2HWplAxHId6/Q/8A16m8I332LWIwTiOb5D/St7x7YedZR3iD5oDhv90//Xrhkcq4ZTypyKx3RafMj2Kkqnot4L7TYZgckr83171crFmDCiiikAUUUUCCiiigAooooAKKKKACiiigAooooAWik/3uKpXWr2FqP31wmfQHJppXGkXqK5q78ZWcefIieQ+/ArGu/GF/LkW6xwr7cmqUGylBs77P4VRu9WsbX/X3cSH0zk/pXm93qV9dH9/cyP7Z4qmxJ9zWipdzRU+53l94zsIv9RHJOf8AvkfrWNdeNb+XP2eKOFf++jXNUqjFV7NIagkaF5rOo3f+uu5CPRTgfpVLJJy3JoqxBp93cf6m3kb8KfuxL0RBuoresvCN/MAZtkAP97k1r2vgy1TBuZ3lPoOBS9okTzJHFVPb6ZeXf+otpG98YH616NZ6Rp9mB5VtGCP4jyakn1KytBiS4iA/uipdRvZEup2OKtfBt/LjznjgH/fRrYs/BdjDg3Mkkzen3R+lWLrxXax5Fujyn8hWRdeK72TIiVIh+ZotUkS6jZ1FppNhZL+5to0x/Fjn86dPqNlbD97Oigds1wVzqd5cn97cuw9N1VixY5JOfeqVC+7J5mdrceKrKLIhR5T+QrMuvFl2+RBGkQ9+a56j61oqUUFrl251S9uc+fcuw9AcD9Kpnmj+VU7vVdPtP+Pi8hX235P5CrvGOxSg30LVRmudvfGunx5Fsktww7gbR+tYl54z1CbIt4ooF9fvGsZYmnHc6oYOrPod7VG71jTrMHz7uNSOwOT+Qrze61O+uyftV3JID2ztH5CqmM8gfia5pY1L4UdsMsf2md1deN7KPi2gnn+nyisi88ZalPgQJHbL7DcfzP8AhXPKMUtcssXUkd0MFSjrYnur67uz/pdzJOD2Zzj8ulQjHoKSnYzXM5t7nZGEY6JC9qaaekUjfdUmplsZ2/hA+pqTVQk9irmitOLSgf8AWOB9KsJZQRdUJ+tTzo1VCTMaOGWQ/u1Jq1Fpszf6zCitdQqjCjFO+tJzNo4eK3KtvZRRDgbj6mrGMUpOOlJms22zoUYpaBRRRQVcKKKKBBRRRQIKKKKQxaKKKYCCvdPh7H5fhSxG3blM/nXhVfQHhBPL8OWK+kK12YRbnzufS/dRXmbAoNC0GvSPkRKKKKACiiigBaKM0ZoAKKM0ZoASiiigAooooAWiiigAqhr/APyA77/r3k/9BNX6o66N2jXqjq0Dj/x00nsVD4kfO0f3Fpe1IgwoHpS9q8OXxH6XT+BBSGlppqTQKKKKBDqKKKEAtbXgmXyfFGnv6yEfmMViVd0SXytXspPu7Z0P/j1bQ0kmc+Kjz0pLyPodaeabH92l7V7J+cMKKKKBBRRRQAlFFFABRRRQAUUUUALRRRQAUUUUAHeuJ+K+lm90H7Si5ktW8z8O9dtVa/tku7WSCQZWRSpH1qKi5otG+HqulVU10PnGirmr2LadqNxaP1icgfTtVSvFkrOx+jU5qpBSQlFLRUmghoFBoFAj2P4Ual9s8P8A2djl7RvL/wCAnkV2leNfCvVBY6+bZ2wl0u3/AIEOleyg5HFexQlzQR8BmdD2OIfZ6nLfErRRrXhm5RVzLCPNj+or57II4PBHBr6rddyEGvnTx/o50XxLcwBcQynzYvoazxENOY7sor6umzAooHSiuI+kA00040negk6r4b3mYbmwkP8Aq28yP6d67WMmORGU4IORXlOgXp03XredjhJG2N9DXqucp16V7eEnzwsz5PMaPs6t11O/Cx6po+1+VniwfYkf415bcwvbXMkMgw0TFSPpXoHg258y2ktmPMZyPp/+uud8eWP2fVRcKMLOuT/vDrVLSTRwU97F/wCH9/t8yzc/7a/1rsq8o0O6az1CCYHhW59xXq0LB41Ydxms5qzCpGzHUUUVBmJRRRSEFFFFABRR/wACxVK61ewtOJ7lFPpnmizAu0Vzd34ys4gRBG0x/Ksa78YX0vECJAPXqarlZaptnel1X71UrvWLC1z5tzGCOwOTXm11qd7dEma5lb2zgVTZsnLHJrRU2aKj3O9vPGdlFkW8bzN+QrGufGV/LkQRJCvbua5oHmlFX7NIpU0i/c6rfXZJuLqVgewOBVNm3H5smgVYtdNvLpsQW8j/AIcU1ZFJJFelretfCGoSgGZo4R7nNbFp4Qs0wbmVpmHUAYFL2kVsJySOIqzb6Ze3Q/cW0hz7V6NbaZp9oB5VtEuO7c0lzq9la/I88a47Lzj8ql1H0RHtPI4218H6hLhpmSIf7Rya2bTwdZoAbmd5D6LwKfdeLLZMiCJpj6ngVl3Xiq+lyI9sI/2Rk0lGpInmZ09vpGm2YBjgjUj+J/8A69Pn1OxtRhriJcdhXAXF9d3BzLMzZ9TUBJb7xJq1Qb3ZN2zsrrxVax5EKPKfrgVl3Xiq9lyIQkI+mTWBTsCto0YILXLNxqV5ck+dcufoaqnk5PJ9TTWdUHzMqr71n3Wu6baj95dIfZOTTcoQLhTlN2SNMc0lctdeNbdc/Zbd5fRm+UVkXXivVJ8+UY4B/sjJrCWKpx6nXDL60+h37Mq/eZVHvxWde69plmSJbtMjsDk153c3N1dnNzcyyE9iePyqIRKOnNc08f8Ayo7qeVdZM7G78cWq8WltLMfU/KKyrnxlqkxIgWOBfzNYuz6Cjb71yyxdSR3U8vpLdEt1f392Sbm8nkB7ZwP0qoI1znG4+9TrE8h2qM1KNOlPZRXNKs3uzthhox+FFTFNPWtSPTQv+sfPsKlFlCO1ZuojdYeTMbHtmnCKRvuoa20t416KKlVQP4cUuc1WG7sxFsLhuxX61MmluT88gH0rWopczKWHiU00uFPvMWqdLWFOig/WpaKV2aKnGPQAAOgFLzRSYNK7LCiiikO4UUUUBcKKSimK4tFFFDAKKKKQhaQ0tIaACiiigYtFJRQMcv3h7mvobQU2aPar6RgfpXz3aLuni92H86+itNXbYwj0QV34Rbny2fv4UWe1IaU0hr0D5cKKKKACiiigAooooAKKKKAFooooAKKKKACiiigAqpq//IMuf+uT/wDoJq3VfUV8yxmX1jYfmKT2Kj8SPnD/ABoHSgdKK8OXxH6ZD4UFFFFIoKKKKQC0UUUDCnxsY5EYdVIP5Gmij1FUnqTNXjY+i9Lm8+wglzncgP6VaFYfgq4+1eG7Fwc/uVH5cVuV7cXdH5pVjyzcQoooqjMKKKKAEooooAKKKKACiiigApaSloAKKKKACiiigDyf4u6V9nv4NQjXCTDY5/2u1cDXvXjTSRrGg3Nt/Ht3IfRhyK8GZWRmVxhlOCPQ15mKhZ3Ps8mxPtKXs3uhKKKK4z3gooooAktrh7W5iniOJIWDg+4Oa+hNEvk1LTILqM/LKgb86+d69T+EOrebp0umyt88Dbkz/dP/ANeu3CTs+Vnz2eYfnpqouh6HXnfxn0L7boqalCuZrM5bA6p3/KvQ6hvbaO7tpIJlDJIpUg9xXoTjzRaPlMPUdGoprofLVFaHiPSpNF1q5sZOkTnafVT0rPrymrOx93TmpwUkFFFFIoguVLRMV+8DkV6d4Z1Eajo9tKTlwm1/94cV5t7V0Hw5vPJu7qwkPDfvY/w4NduDqcsrHk5nS5qfP2PUfDF0bbVY933ZPkP49K6HxfYfbtHlKjLwfvF/Dr+lcQrlWDA4PY16RYzLe2EUhAIkTkfzr0asbO58vezueTpx9a9A8G6r9qs/ssjZmi6e61x+vae2manJCRhGOUPqKqQzS20gkgcxuOhBpNcyN2uZHrlFefweMNQRQrLG/uy0TeMNSk+WMRJ7hajkZl7Nnf1UutTsrQE3FzGnsTzXmlzqt/dkme5kIPYNgVRP601T7j9l5noF14zsIs/Z1knP+yuB+tZF540vZCRbRJCPfk1y4pwq+RI0VOJfu9Xv7s/vruVgewbA/Sqme5600VLBbT3DbYYnc+wqrJF2SI6aa27XwrqVxgybYV/2m5/IVr2vg+2TDXlzJKO4T5RSc0iXJI4wjiprfTry6/497aR/cDj869Cg03TrMZgtIRj+N+f50y51i0t12vOigfwp/wDWqedvYj2nY5a08I30oDXDxQKf7zZP6VsWvhTTYMG5uJJm9F+UVFc+J4FJFvE7n1fgVmz+Ib2bhGWMf7Ip2nIhzbOsgt9NtF/0ezjXH8TDNE+uW0Aw0sagdl5NcJLdTTH97K7/AFNRqQfSqVF9WTdnXXHiqLgQQvIfVjgVm3PiW9kJEWyIewrGBoJrRUooErk91e3dxzNNI2ffiqoFRXF5bW/+vnjT6kVlXvivS7fISUzN/djX+polOnDqbQoVJ7RNk0lcdd+M5TkW1qF/2pDu/lWVc+IdTuM7rpo1PZBisJYynHY7KeW1Z76HoU00UAzNKqD/AGjisy68TaXb/wDLz5h9Ixurz6WR5m3SyPIf9o5puQK5JY5/ZR3QypL4mdfc+NYxxbWjye7ttrMufE+p3GQsi26n+FBn9TWKF3VIFxXNLFVJdTup4CjHWxJPcXE5Jmnlk+pqEfT86dRXPKbludcacI7IKb3p1W7PSNRvyBZWNxPnuqHH59KSi2EpxitSlQOK7XSfhd4gvirXKx2aH/nocn8hXYaT8H9Phw2o3c103dV+Rf8AGtVRmzhnmFCHU8cxu929BWrpvhbW9Tx9j06dlP8AGw2r+Zr3/SvCOiaUB9k0+FWH8RXJ/OtkIqjCjAFbxw/dnn1M4f2EeKaX8J9aYB7u4gtvYZY/pWT4g8PahoVx5d4hMZ+5KvKtX0Fiqmp6dbalavb3cSyRuMFW6GnLCxasjOhnFaE7z1R86UYruPFfw+u9PLXGlg3Fv18v+JR7etcUV8t8OGDDgqe1efOhKm7M+tw+Kp4iN4MQCjNBorM6wppp1NNMQtFJRQSLmjNGKMUgCiiigBaKKKBCUmKdijFAxKKKKACiiigQtIaWkNABRRRQMWiiigZY0xd9/bJ6yqP1r6JtBi3jHoBXz3oKbtbs19Zl/nX0NEMRqPavRwa0Z8ln0vfih1FAoruPmwooooAKKKKACilooASiiigAooooAKKKKAFooooAKhuf+Pd/90/yqamS/dNJlR3Pmxuv0JpKtapEYNUu4j1SZ1/8eNVa8OStJn6XRkp000LRRRSLCiiigBKKKKQxaKKKYj2P4T3XneGVjJ5hcp/Wuz715n8Grn5b63J6MrgfXivTK9ii7wR+fZhT5MTJBRRRWxwBRRRQAlFFFABRRRQAUUUUAFFFFABRRRQAtFFFADSM8V4l8SdH/svxC7RjEF1+8H+93Fe31yfxK0M6xoEjQrm4t/3keOvuPxFYVoc0bHpZbifYV1fZ6HilFIuccjB70teQ1bQ++i7q4tFFFIYVteDdVOk+ILectiJz5Un+6f8ACsWiqhLlkmY16Sq03B9T6TicPGGHcU6uV+G+s/2poEayMDPb/u5PfHf8q6qvchLmSZ+c16bpVHB9Dyj43aLtW31iJeE/dy49D0P515TX054h0yPWNHubGYArMhXJ7H1r5pvbSWwvJrO4GJYHKMPcVxYiFndH0eU4jng6b3RFRRRXKe2FOsrptP1W1vE4CMA3+70NNqOZPMjZaqEuWSZlXgqkHE9cVlZQyHIIytdl4Lu99k9ux5iOR9P/ANdeW+BtU+3aSIHOZ7X5G917H8uK6/RtQawvUl52E4Ye1e8n7Snc+KrU3CTTOx1zSotWtfLkAEg5RvQ155qmm3WnTmK5Qj0fsa9RimjniWSJgyMMgiobq1huozHcxrIh7GudS5dzOM2tDynt1pOa7a88GWshJtpTF/s9RVNPBUm/57wbfZa09pE2U0cpQqMx+RSx9q7uz8IWMLbpjJMfQ8CtHbpWmJwIYvr1o9ougc6OEs9B1G6PyW5UercVs2fg5utzcf8AAYx/WtS68TWUfEKmUj8BWXceKLl8+SkcQ+uTVR55EObNu08P6faJk2yuR/HIc1PJeWNomDLFEB2X/wCtXFT6ldzk+ZcOR7tVZm3H5vmPvVKg38TM+Zs6258S2ceRCrzN+QrKufE10+RDGsQ/M1i1DcXEUIzLKij1ZsVSpQjuOzZbuL+5uDmaeQj03VXJz2/Osi58R6ZCSDcK7DsnNZdz4yQZFrbF/d2xUutShsdUMJWlsjqTTdyr95sVwVx4n1ObIDrEvogrNnvLqc5luZG+prCWOitkdtPK5y+JnodxrNha5826UEdgcn9KzLnxhZR58iGWU+/AriqK5Z46T+E7IZZSXxanRXPjO+fIt4o4R9NxrKu9a1G7J867lx6A4H6VSormlXnLqd0MNShtEGYscsSx9TR9aKM1jzNmtorYO1RmnGiNJZn2QxPK3ogzT5bg5KI0D0qZImb7y4FdXovgjWr1FMWnsu4Z3S/KK6rT/hHczYbUr1Ix3WIZP50405y2RlPF0KXxS1PLgoXpVi0sbq8fbaW8sxP9xCa910n4a+HdPwzWxuXHeY5/SuntNPtbNAtrBHEB02Lit1hn1PNqZzBaQieDaV8OvEGoctbLap6zNj9BXWaX8HkBDalqDOP7sK4/U16ttoreNCKPNqZnXntocxo/gLQNLGYrBJXH8cvzH9a6KC3hhULFEqKOgUYqaitlFLY4J1Zz+JhRRRVEhRRRQIKKKKACuU8V+CbLWUaaJVhuuzqOv1rq6KmUVJWZtSrToy5oOzPn3XNA1DRZzHewFV7SDlT+NZdfR15Z293CYrqNZUbqGGa868UfDYkvc6K+B18lun4VwVcM94n1GEzmM7QraPuebUlWLyyurKcw3kDwuOzCoK42mtz6CM4yV0JRS0VNyxKKWigLDRThSd6UUAFFFFAhKKWimA3FLS4oxSAKKKKACiiigBKKKKBhRRRQFzS8Of8AIesP+u619Bp91a+fPDn/ACHrD/rutfQafdWvUwvwnx+ffxI+g4UUCius+eCiiigAooooAU0hpTTTQAUUUUAFFFFACCnCminCgAooooABQaBQaAPn7xdF5fifUh/08E/nzWVXT/EqDyfFt1gYEio//jtcxXjVVabP0XAy5sPB+QUUUVkdYUUUUgEooooAWiiigZ13wpu/I8T+UTgTRFfxHNe0d6+evDNybPxDYTg4AmUH6HivoRTlQR3r1MLK8LHxmeU+Wupd0LRRRXWeCFFFFACUUUUAFFFFABRRRQAUUUUAIKcKaKcKACiiigAoPIwaKKAPDfiBoR0bXXeNSLe5O9D2BPVa5uvc/HmhDXNEeJB+/i/eRH3Hb8a8NdWRmRwVdTgj0NeViIcsro+4yrF+3pcst0NooormPYFooopDOl+HutHSNcRHbEFx8jj37Gvb1OVB9a+bASCCpww5Br3HwFrI1fQ43c/vo/kkHuK9HC1NOVnyeeYXlarR+Z0VeN/GnQPs2pQ6xbpiO5/dTY7MOh/EV7LWN4w0dNc0C6sHHMqHYf7rj7p/OuqpHmjY8TB13RqqSPmyinSo8cjJICrqSrA9iOtNry9j7eMuZXQUUUUDHaffTaRqCXlvkjo8f99fSvSdJ1O11S0We2kBHcd0PoRXmlNtnubC6Fzp8zRN3HY/UV2YfEul7r2PLxmCVVc0dz2vSdauNO4U74e6H+ldHa+KLGYDzt0RPqM147pXjOKRRFqMTQSdN68qf6it6HWNPm+5eQn/AIGB/OvQTpVNUz52eFqwdrHpUviDTFTi5U/RazbvxZAmRawtIf7x4FcY9/ZqPnuYl/4GKpXOvabACTdK59E5NUoU1uyI4erJ2SOlvvEF/ckoZhEp/hXisx2LHLMWJ7muZufF0K/8etvI/wDtNwKzLnxVqEv+rEcQ9hk1MsTRp6I7IZdWl0sdxux1bFV7jU7S3/19xGuPevPJtQvLj/W3Er/8CwKqkEv/AImueWYfyo7YZT/MzuLrxZpsWfLLykf3FrLuvGM54tbdVHqzVzdJXNLGVJdTshl1KHQ0brxBqd1nfcGMHtHxWfI8krZkkZz6sc0lJXO6spbs64UYR2QYoooqLs3SsJRxT1jZvuxsakWymbomPqaQ+WXREFFXV05j/rHA+lD6WrdJW+lLmQ/ZTKBZV6mozOo+6rN9K1I9Nh/uEt7mrUNtDD0jUt7jik5IfsZMybS2vbtsW9u31bitWHw3Lwb26jhHovJq4bmYjAfYPRRioTycsSx9TWblJ7FfVu7LVlZaNYTLI8P27b1V+hr17wPd+H762/4llrb20qj5owgDD/GvF6ltrme1uBNaSvFIn3WU4NbUans3rqcmLy5V4Wi7M+j9opwrgPBnxAivfLstYKw3J4STosn/ANeu/wCv3a9WE1NXR8ZXw9TDz5KiFooorQwCiiigYlFFFABRRRQAUUUUCCiiigBaKKKADFFFFAGZq+i2GrQmO+gDjsSOR9K858R/Di6tt02lP58Y52N94fT1r1iisp0oz3OzD46th37r07HzdcwTWszRXMLxOvZxg1HX0Freg6frMJjvbdZPR8fMPoa828Q/DW8tN02kt9piHOw8OP8AGuCphXHWJ9PhM5pVNKujOGoqS4tri1kMVzE8TjqrjBqOuVprc92MlJXiJRRRSKCilooEJRRRQIWiiigBaKKKYCUUUUgEooooGLRSUUCNLw5/yHrD/rutfQafdWvnvQP+Q1Y/9d1/nX0JH9xa9PC/CfI58rVI+g40Cg0Cuw+dEooooAKKKKAFooooASiiigAooooAKKKKACiiigBaKKKAPJPi/beXrtvMB/rIcZ9wa4SvUfjJbZsrO6xykm3868ury8QrTPusonzYZeQUUUVynrCUUUUgsFFFFAWCiiigYobYwbuORX0J4bvBfaLaThsl4lJ/KvnqvY/hRefaPDwhY5aBin4dq7cJLWx87ntPmpqfY7SigUV6R8gJRRRQAUUUUAFFFFABRRRQAtFFFACUUYoxQAUUYoxQAtFFFAxD6V4/8UPD/wDZ+pf2hbriC6Pz4/hevYKztd0uHV9Nls7hQVdcD2PrWVWCnGx2YLEvD1lLp1PnuirWq6fPpeozWVyMPEcZ/vDsaq148k07M+/hNVIqcdgoooqTQK634b66dL1oQytiC5+U+gbsa5KljYq2RwRyDVwm4STOfE0FXpOm+p9KdRRXL/D/AMQLrWjIsrZuYfkkHc+h/GupxXsxakro/PKtOVKbhLoeK/F7wsbC/bWLOPNtcH96B/A/r9DXntfUd/Zw31s9vcxrJFINrK3Qg14T488FT+HbxprZXksHOUcc+X/stXLXpX95Hv5bjU0qU2clRRRXEe8JRRRTGBGaQpTsUmaBco3bRtFOzRRcVkhNtJTqmtrK7u3CW1rNMT2RCaLNic4xK9FdNYfD/wAR32CLIwKe8p210WnfB++kIOoX6RL6RjJrRUZvock8dRhuzzakx+Ne46d8JtCgANyZrph/fbA/IV0th4S0SwA+zadbqR32DNaxw0upxzzekvhVz51stH1K+YLaWM8ue4Q4/Ouh0/4Z+JL4jdbpbIf4pG/pXvsVvDCMRxhR/sjFTAd62WHXU4KmbVH8CseRW3wedLZmutQ3zY4VFwua4zU9Fk0i7NveW+xx69D7g19I1keI9Astdsmt7pME/dkX7yH1FKeGTXulYTNp05/vldHz8oCdBil61q+JfD974fuzFcoWiY/u5VHysP6H2rJrzZwlB2Z9hSrQrR5obC0UUVBsLQeaKKACiiimAUUUUCCuz8I+PrnSNltqTPc2o4D9XQf1FcXRWlOo6bujmxGFp4iPLNH0TpOrWerWy3FjMsqN6HkfUdqvV87aNq97o90LixmKHuv8LfUV6n4U8f2epBIL7FtcdPmPyt9DXo0q8ZaM+PxmVVcP70dYnb0lIrK6hlIIPQijvXUeQLRRRQIKKKKAEooooAKKKKACiiigBaDRQaAEpaSloAKKKKAMzV9B07Voil7bpJ6MRyPoa4HW/hlJFuk0qfeP+ecvX8DXqNIaznShPdHXh8bXw79yR87appd7pk3lXtu0R7Ejg/Q1Tr6Nu7O3vIzHcwpKp7MM1xut/Dexu90lg7W0h7DlfyrjqYR7xPosNnkZe7WVjySiui1jwXrGmZYwefGP4o+f0rnnVkcrIpRh1DcVxypyjue7SxFKqrwlcbRRRUGwtFFFABRRRQAUUUUAJRRRQMKKKKBF3Rm26paN6TD+dfQ0JzEh9hXznZN5d1C/911P619EWTb7SJvVQa9LCbM+Tz5e/FliigUV2nzYlFFFABRRRQAUUUUAFFFFAC4oxRRQAYoxRRQAlFFFAC0UUUAcj8UbT7T4XmcDJhYSD+VeLmvoPxLbfbNDvIMZLxMBXz2eDt9OK87FrW59dkNS9OUewUUUVwH0QUUUUxi0UUUAJRRRQAtd98IL/wArVLqzbpModR7iuBrZ8HXzaf4kspgcKX2N9DxW9CXLNHn5hS9rh5I99opEO5QfUUtewfnwlFFFAC4oxRRQAYoxRRQAlFFFAC0UUUAFFFFABRRRQAUUUUAFFFFAHCfE7wz/AGhZf2jZpm6gGWAH3lrySvpQoGBB714z8RfDTaRfNe2yf6JO2Tj+BvT6VwYijf3kfTZNjmv3FR+hyFFFFeefVBR2FFFAzZ8Ia2+hazFchsQt8ko9Qa94t7hLmBJYjlWAII96+bq9O+FXiTzEOkXcuXQZhJ7r3H4V34ar9lnzec4LmXt4Lbc9IIqG7toruJ4biNZI3GCrDINT0V6Fj5O9tUeXeKfhXHNun0Flhbr5LfdP0PavPdR8K61pzlbrT5gB/Ei7l/MV9J0hANYyoRlqenRzOrSVnqj5ba0uFbaYJAf9w0gtLhjgW8rH/cr6fa0t2OWhjY+6ij7JAOkMY/4CKy+qrudf9sv+U+arfQdWuceRp9y30U1rWXw/8SXZ4sfKB7ytivoJY1X7qgU4L7CqWGiZSzeo9lY8Ys/hHqsuPtd5BD6hfmNb+nfCHTYcG8u55z6DCivSgKQ1aowRyTzCvLqc5p/gfw/YqPK06FmHdxuP61twWVtbjEFvFGP9lQKsUVoopbHJOrOW7ECgdOKdiijFUZhRRRQIKKKKCgooooJKWraXa6paPb3cSyIwxyOn0rx7xh4NvNElaaBXnsyeGHJT2Ne3VHLGkkZR1DKRgg96yq0lUVmd+Dx1XCyutux820V6f4x+HqTF73Rh5b9WgxwfpXmlzBLbTNDOjRyL1Vhg15dSlKDsz7XCY2nio3i9exHRRRWJ2hRRRQMKKKKAuJRRRTELRmkooA6fw14z1HRCscjm5tv7jHlR7GvUfD3ivTdajHkShZe8bcMK8Hp8cjxMJI2KsOhXg11U8RKGjPHxeU0q+sdGfSec0teN+H/iHqGn7ItQBuoR1f8AiH+NelaD4m03W4Q9pcAv3jbhh+Fd0K0Z7Hy2JwFbD/EtDaooorY4BKTFOxRigBKKKKAFooooASiiigAooooAKKKKAFooooASiiigBpG4c1j6t4Y0rVVxdWiFv7wGDW1RScVLRmkakoO8XY8y1n4Xld0ml3PHaOT/ABrjtT8MavphP2mzYqP4k+YV79TXjRxhlBrmnhovY9ahnFelpLVHzYQQSCMEdqK941fwlpGqA/aLRAx/iQYP6VyWp/C8HLadd7f9mRf61zSwslsezRzqjPSeh5pRXQan4L1uwyWtTMg/ij5rDmt5YWKzRvGR2YYrmlTlHdHrU8RSq/BK5HRRRUG4UUUUDCiiigBV+8tfRGivv0u2brmNf5V87r96vf8Awq/maFaN/wBMlr0cJ1Pmc+jpFmtRRRXcfKBRRRQAUUUUAFFFFAWCikozQA7NFNzRmgAooooAWiiigAooooAa6hhg96+edftPsOs3luOiTNj6Zr6I714t8UbIWviVpF+7Ogb8Rwa5MVG8bnv5HU5a7h3RyNFFFeXY+yA0UGigBaDRQaAEooooAWljcxOrjqrBhTaKadiZR5lY+hPDV+NR0W1uQc70BP1rTrgfhHqHn6PJZs3zW78D/Zrva9um+aKZ+cYql7KtKItFJRVnOLRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFUtX06DU7KS2uUDRyDBBq7QaTSZUZOLuj568SaRLoeqSWUy8Lyj/AN9exrNr3Lxx4Yi8QacVUBbqMFon9/Q+1eITwyW8zwzoY5Y2Ksp7GvJr0uR3Wx9zluNWJp8r+JEdFFFc56wVNY3UtldR3Nu22SNtwNQ0U4y5XcmcFNOLPfvCuuQ69pUd1ERv6On91h1rbrwfwRr0mg6oHJJtZSFlX+v4V7lbTxzwLLEwZGGQRXr0qvPE+CzDBvDVbdHsS0UZorc84KKKKACiiigA/Cj8KPxo/GgQUUUUDCiiigQUUUUAFFFFAwooooEFFFFADe9YXiXwrY67D++TZMPuyr94Vv0tTKKkrM0p1JU5c0HZng3iTwvf6FPiVDJbk8SoOPx9KwyPyr6OubaG5jMc8aujcENyDXnXij4bg77jQ2VD1+zN93/gJ7fSuGrhusT6jBZwpWhX+880oqW8triymMN3C8Mg6qwxUNcLTTsz6OE1NXjsLRRRSKEooopiCiiikAtFNzRmgYtOilkhkDwu0bjoynBplFNNrYTSlozsdA+IWpacRHe/6ZCPXhh+NeiaD4y0rWAohmEUp/5ZSfK1eFUV008RKO54+JyijW1joz6XBBFLXgujeMda0ghYbozRD/lnN8w/A9RXdaH8TLK42x6nC1s5/iHzLXdGvCR85iMqr0dUro9AoqnYaja38YktLiOVf9kg1brZM8xxadmLRRRTEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUBYKKKKACiiigBMCqd7pVleqRdW0UoP8AeQGrtFJpPcak46pnG6l8OdGu8mFGtmPeM8flXMan8L76L5rC6SVeysu016xmlrKVGD6HdSzHE0tpHgl94S1qyz5tm7Ad05rIlgmgbE0UkZH95SK+kCKq3OnWl0MXFvHKP9pc1jLCxezPTpZ7UXxxPneivcLzwRoV025rNEP+xxRWP1SXc7VnlJ7pnhtdHY+OdasLSO2t5ItkYwNyVH438PvoOqsgU/ZZiWhb/wBl+tc/WF50nY9W1DGU1Jq6Os/4WLr/APz1h/74o/4WLr//AD0g/wC+K5OlxT9vPuT/AGfhv5EdX/wsXX/+ekH/AHxS/wDCxtf/AOekH/fFclS0vbz7h/Z+G/kR1n/CxvEH/PWD/vik/wCFjeIP+e0H/fsVymKTFHt6ncP7Pwv8iOs/4WNr/wDz1g/790f8LG1//npB/wB+65Oij29TuH9n4b+RHWf8LG1//npB/wB+6X/hY2v/APPSD/v3XJUUe3qdw/s/DfyI63/hY2v/APPSD/v3R/wsbX/+ekH/AH7rkqKPb1O4f2fhv5Edb/wsfX/+ekH/AH7pP+Fj6/8A89IP+/dcnSUe3qdw/s/DfyI63/hY+v8A/PSD/v3R/wALH1//AJ6Qf9+65Kij29TuH9n4b+RHW/8ACx9f/wCekH/fuj/hY+v/APPSD/v3XJUUe3qdxf2dh/5UdcPiPr5/5aQD/tnWLr2u3uuSRyXzRs0fAKjFZeKKUqs5KzZpSwdGlLmhFJi/SiiiszqA0UGikMWg0UGgBtOoptADqKKKAuaOha7eaFdPPZMoLrtIYZFbn/CyNd/vQf8AfFcgaK1jWnFWTOOpg6NSXNKKbOv/AOFka7/eg/74pP8AhY+vf34P++K5Gin7efcj+z8N/Ijr/wDhZGvf3oP++KX/AIWVr396D/viuPop/WJ9yf7Ow38qOw/4WTr3rB/3xTT8Ste/vQf98VyVFL28+4f2dhv5Udb/AMLK17+9D/3xS/8ACyNe9Yf+/dcjRR7ep3D+zsN/Kjrf+Fka96w/9+qT/hY+v/34f+/VcnSUe3n3H/Z+G/kR1v8AwsjxB/fh/wC/VH/CyPEH9+H/AL9VyVFHt6ncX9nYb+RHXf8ACx/EH9+H/v3R/wALI1/+/B/3xXI0Ue3n3K/s/DfyI67/AIWP4g/vwf8Afqj/AIWPr/8Az0h/79VydFHt59w/s/DfyI6z/hY+v/8APSH/AL9Uf8LH1/8A56Qf98VydNNHt59w/s/DfyI67/hY+v8A/PSD/vik/wCFj6//AM9IP++K5Kij28+4f2fhv5EdWfiLr5/5axD/AIAKwtX1OfVrkXN2sfm4wWRcZ+tUaKmVSUlZs1pYWjSfNTjZi0UUVmdQtFFFADv5Vt6Z4v1jSrRLa1uB5ScKGXOKw+1MNXGco7Mxq0KdZWqK51X/AAsPxB/z8Rf9+xR/wsTxD/z8Q/8AfoVyuBRV+3qdzn/s/Dfyo6r/AIWH4h/5+I/+/Qo/4WF4h/5+I/8Av2K5UU6j29TuH9n4b+RHUf8ACwvEP/PxH/37FH/CwvEP/PxH/wB+xXL0lHt6ncP7Pw38iOn/AOFheIf+fiP/AL9ij/hYfiH/AJ+I/wDv2K5eij29TuH9n4b+VHVf8LD8Q/8APxF/36FH/CxPEP8Az8Rf9+hXK0Yo9vU7k/UMP/Ijqv8AhYniH/n4i/79Cj/hYfiH/n5j/wC/QrlcUUe3qdx/UMP/ACI6j/hYfiH/AJ+o/wDvgUf8LC8Q/wDP1H/3wK5eij29TuCwGG/kR1H/AAsDxD/z9J/37FO/4WB4h/5+k/79iuVoo9vU7j+o4b+RHU/8LB8Q/wDP0n/fsUf8LB8Q/wDP0n/fsVy1Ao9vU7h9Rw38iOp/4WB4h/5+k/79ij/hYHiH/n6T/v2K5iij29TuH1DDfyI6f/hYHiH/AJ+k/wC/Yo/4WB4h/wCfpP8Av2K5iih16ncPqOG/kR03/CwPEP8Az8p/37FB+IHiL/n6T/v2tczTaXtqncPqOG/kRqat4h1DWFC6g0cjL0by1BH4gVl80UVDk5as6IU401aCshaKKKRqFFFFAC0UUUAJRRRSAKKKKACiiigBKKKKYFmyv7qyk8y0neFv9k4rZXxx4hj+7en8VBrnaKtVJLZnPPC0qjvKKZ0n/CfeJP8An9H/AHwKX/hP/Ef/AD+j/vhf8K5qiq9tPuY/UcP/ACL7jpv+E+8Rf8/a/wDfAo/4T7xF/wA/a/8AfArmaMUe2n3H9Qw/8qOm/wCE+8Rf8/n/AI4KP+E98Rf8/n/jgrmqKPbT7i+o4f8AkX3HS/8ACe+Iv+fz/wAcFH/CeeIv+fz/AMcFc1RR7afcPqGH/kX3HS/8J74i/wCf3/xxf8KP+E98Rf8AP7/44v8AhXNUUe2n3H9Qw/8AIvuOl/4T3xF/z+j/AL4H+FH/AAnviL/n9/8AHF/wrmqKPbT7h9Qw/wDIvuOl/wCE98Rf8/v/AI4v+FJ/wnniL/n+H/fA/wAK5uij20+4fUMP/IvuOl/4TzxF/wA/w/74X/Cj/hPvEX/P6v8A3wtc1RR7afcPqGH/AJF9x0v/AAn3iL/n9X/vhf8ACj/hPvEX/P7/AOOL/hXNUYo9tPuH1DD/AMi+46X/AIT7xF/z+r/3wtH/AAnviL/n9H/fC/4VzWKMUe2n3D6hh/5F9x0v/Ce+Iv8An9/8cX/Cj/hPfEX/AD+/+OL/AIVzlFHtp9w+oYf+RfcdH/wnviL/AJ/B/wB8L/hR/wAJ74i/5/f/ABxf8K5zFFHtp9w+oYf+RfcdH/wnviL/AJ/f/HF/wornKKPaz7h9Qw/8i+4+gvEmi22u6a9pdDg8q46oexFeG6/o9xoupPZ3JVmHKsp++Ox9qKK7MVFWufN5JXmqjp30M7pRRRXmn2AUUUUDsFFFFAMSiiigYUUUUAFFFFABS0UUAJS0UUAJS0UUAFJRRQIKKKKYBS0UUhhRRRQAUlFFABRRRQIKKKKACiiigGFLRRQDCiiigBKWiigQUUUUAJRRRQAUUUUFC0UUUCCkoooEJSUUUALS0UUDCiiigYtFFFAhKSiigYtJRRQQOFFFFA0LikoooASloooKYlJRRQSFLRRQAjUUUUAFFFFABS0UUALRRRQWJS0UUEBSUUUAJS0UUDCloopgFFFFABRRRQAlLRRSASloooAKSiigAooopgJRRRQAUtFFABS0UUCCkoooGFJRRQIWiiigYUtFFACUtFFACUtFFABS0UUAGaKKKACiiigBKKKKAOl8GeEpPEDs0snlWkfBIwWJxx+FFFFd8IR5VofJY7HV6deUISskf//Zv6LBCQAAAACyhlnZFXf9aO0svQEbFtaM // ==/UserScript== const systemConfig = { buildTime: new Date().toISOString(), environment: 'production' }; class Logger { constructor(prefix) { this.prefix = prefix || 'System'; this.levels = ['DEBUG', 'INFO', 'WARN', 'ERROR']; } log(level, message) { if (this.levels.includes(level)) { const timestamp = new Date().toISOString(); } } debug(msg) { this.log('DEBUG', msg); } info(msg) { this.log('INFO', msg); } warn(msg) { this.log('WARN', msg); } error(msg) { this.log('ERROR', msg); } } const logger = new Logger('CXHelper'); const browserCheck = { isChrome: () => /Chrome/.test(navigator.userAgent), isFirefox: () => /Firefox/.test(navigator.userAgent), isEdge: () => /Edge/.test(navigator.userAgent), isSafari: () => /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) }; class PerformanceMonitor { constructor() { this.metrics = new Map(); this.startTimes = new Map(); } start(name) { this.startTimes.set(name, performance.now()); } end(name) { const startTime = this.startTimes.get(name); if (startTime) { const duration = performance.now() - startTime; this.metrics.set(name, duration); this.startTimes.delete(name); return duration; } return 0; } getMetric(name) { return this.metrics.get(name) || 0; } } const perfMonitor = new PerformanceMonitor(); const utils = { generateId: (length = 8) => { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; let result = ''; for (let i = 0; i < length; i++) { result += chars.charAt(Math.floor(Math.random() * chars.length)); } return result; }, deepClone: (obj) => { if (obj === null || typeof obj !== 'object') return obj; if (obj instanceof Date) return new Date(obj.getTime()); if (obj instanceof Array) return obj.map(item => utils.deepClone(item)); if (typeof obj === 'object') { const cloned = {}; Object.keys(obj).forEach(key => { cloned[key] = utils.deepClone(obj[key]); }); return cloned; } }, debounce: (func, wait) => { let timeout; return function executedFunction(...args) { const later = () => { clearTimeout(timeout); func(...args); }; clearTimeout(timeout); timeout = setTimeout(later, wait); }; }, throttle: (func, limit) => { let inThrottle; return function() { const args = arguments; const context = this; if (!inThrottle) { func.apply(context, args); inThrottle = true; setTimeout(() => inThrottle = false, limit); } } } }; class CacheManager { constructor(maxSize = 100) { this.cache = new Map(); this.maxSize = maxSize; } set(key, value, ttl = 300000) { // 默认5分钟过期 if (this.cache.size >= this.maxSize) { const firstKey = this.cache.keys().next().value; this.cache.delete(firstKey); } const item = { value: value, expiry: Date.now() + ttl }; this.cache.set(key, item); } get(key) { const item = this.cache.get(key); if (!item) return null; if (Date.now() > item.expiry) { this.cache.delete(key); return null; } return item.value; } clear() { this.cache.clear(); } } const cacheManager = new CacheManager(); logger.info('System initialization completed'); (function() { 'use strict'; (function(){ function _b64ToBytes(b64){ const bin = atob(b64); const out = new Uint8Array(bin.length); for(let i=0;ic-1); const __SALT = String.fromCharCode.apply(null, __S); const __ENC = "idiM9YBNCEBSu80fAcWJtglB3UgCOQSNSUCG2EFbmlWW7AyIJkSb/kgNWgCHsoEA"; function __getDSK(){ try { const step1 = __ENC.split('').reverse().join(''); const xored = _b64ToBytes(step1); const plainB64Bytes = _xor(xored, _strToBytes(__SALT)); const plainB64 = _bytesToStr(plainB64Bytes); return atob(plainB64); } catch (e) { return ''; } } window.__getDeepseekKey = __getDSK; })(); const DEEPSEEK_PROXY_BASE = 'https://api.116611.xyz'; const DEEPSEEK_MODEL = 'deepseek-chat'; const DEEPSEEK_API_URL = `${DEEPSEEK_PROXY_BASE}/v1/chat/completions`; function deepseekChat(messages, options = {}) { return new Promise((resolve, reject) => { try { GM_xmlhttpRequest({ method: 'POST', url: DEEPSEEK_API_URL, headers: { 'Content-Type': 'application/json', 'X-App-Token': __getDSAuth() }, data: JSON.stringify({ model: DEEPSEEK_MODEL, messages, ...options }), timeout: 60000, onload: (r) => { if (r.status >= 200 && r.status < 300) { try { resolve(JSON.parse(r.responseText)); } catch (e) { reject(e); } } else { reject(new Error(`HTTP ${r.status}: ${String(r.responseText || '').slice(0,200)}`)); } }, onerror: () => reject(new Error('Network error')), ontimeout: () => reject(new Error('Timeout')) }); } catch (err) { reject(err); } }); } let isAnswering = false; let isStudyingChapters = false; let studyIntervalId = null; const STUDY_PERSIST_KEY = 'cx_helper_study_on_v2'; const PANEL_REG_KEY = 'cx_helper_active_panel_v2'; const PANEL_INSTANCE_ID = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`; const FRAME_DEPTH = (() => { let d = 0; try { let w = window; while (w !== w.top) { d++; w = w.parent; } } catch { d = 999; } return d; })(); let isActiveOwner = false; let createdPanelEl = null; const HEARTBEAT_INTERVAL_MS = 2000; const STALE_MS = 7000; let heartbeatTimerId = null; let lastAutoSkipTs = 0; let emptyChecksCount = 0; let lastEmptySectionKey = ''; let recoveryTimerId = null; const API_BASE = 'https://116611.xyz'; const MONEY_YUAN = (() => { try { const b64 = 'NS4wMA=='; return atob(b64); } catch { return '5.00'; } })(); const PAY_NAME = 'XHelper 解锁/赞助'; const DEFAULT_PAY = 'wxpay'; const LS_KEY_DEV_ID = 'cxhelper_device_id'; const LS_KEY_FREE = 'cxhelper_free_used'; const LS_KEY_LICENSED = 'cxhelper_licensed'; const POLL_MS_PAY = 3000; const POLL_MAX_PAY = 100; const getFreeLimit = (() => { let cached = null; return function() { if (cached != null) return cached; try { const b64 = 'JDEw'; const decoded = atob(b64); const n = parseInt(decoded.replace(/\D/g, ''), 10); cached = Number.isFinite(n) ? n : 10; } catch { cached = 10; } return cached; }; })(); function getDeviceIdPaid() { try { let id = localStorage.getItem(LS_KEY_DEV_ID); if (!id) { id = ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)); localStorage.setItem(LS_KEY_DEV_ID, id); } return id; } catch { return 'dev_' + Math.random().toString(36).slice(2); } } const DEVICE_ID_PAID = getDeviceIdPaid(); function getCookie(key) { try { const name = key + '='; const parts = document.cookie.split(';'); for (let part of parts) { const s = part.trim(); if (s.indexOf(name) === 0) return decodeURIComponent(s.substring(name.length)); } return ''; } catch { return ''; } } function setCookie(key, value, days, domain) { try { const d = new Date(); d.setTime(d.getTime() + ((days || 365) * 24 * 60 * 60 * 1000)); const expires = 'expires=' + d.toUTCString(); const dm = domain ? ';domain=' + domain : ''; document.cookie = key + '=' + encodeURIComponent(value) + ';path=/' + ';' + expires + dm; } catch {} } function isLocallyLicensed() { try { // 优先从跨子域Cookie读取,保障不同页面一致 const c = getCookie(LS_KEY_LICENSED); if (c === '1') return true; return localStorage.getItem(LS_KEY_LICENSED) === '1'; } catch { return false; } } function setLocallyLicensed() { try { localStorage.setItem(LS_KEY_LICENSED, '1'); } catch {} // 写入跨子域Cookie,统一所有 *.chaoxing.com 页面状态 try { setCookie(LS_KEY_LICENSED, '1', 365, '.chaoxing.com'); } catch {} } function getFreeUsedCount() { try { return parseInt(localStorage.getItem(LS_KEY_FREE) || '0', 10) || 0; } catch { return 0; } } function incFreeUsedCount() { try { const n = getFreeUsedCount() + 1; localStorage.setItem(LS_KEY_FREE, String(n)); return n; } catch { return 0; } } async function checkLicensePaid() { if (isLocallyLicensed()) return true; try { const r = await fetch(`${API_BASE}/api/license/status?deviceId=${encodeURIComponent(DEVICE_ID_PAID)}`, { credentials: 'omit' }); const ct = (r.headers.get('content-type') || '').toLowerCase(); const data = ct.includes('application/json') ? await r.json() : await r.text(); const ok = !!(data && data.licensed); if (ok) setLocallyLicensed(); try { updateTrialBadge(); } catch {} return ok; } catch { return false; } } async function startPaymentPaid(payType) { const win = window.open('', '_blank'); try { const resp = await fetch(`${API_BASE}/api/create`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: PAY_NAME, money: MONEY_YUAN, type: payType || DEFAULT_PAY, param: DEVICE_ID_PAID }) }); const html = await resp.text(); win.document.open(); win.document.write(html); win.document.close(); return true; } catch (e) { if (win) win.close(); alert('发起支付失败:' + e.message); return false; } } async function pollUntilLicensedPaid(onProgress) { for (let i = 0; i < POLL_MAX_PAY; i++) { if (onProgress) { try { onProgress(i); } catch {} } const ok = await checkLicensePaid(); if (ok) { setLocallyLicensed(); return true; } await new Promise(r => setTimeout(r, POLL_MS_PAY)); } return false; } function showPayModalPaid(messageText) { return new Promise(resolve => { const mask = document.createElement('div'); mask.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:999998;'; const box = document.createElement('div'); box.style.cssText = 'position:fixed;left:50%;top:120px;transform:translateX(-50%);width:420px;background:#fff;border-radius:0;box-shadow:none;overflow:hidden;z-index:999999;font-family:system-ui,Segoe UI,Arial;'; const msg = messageText || '试用已用完,打赏5元永久解锁哦'; box.innerHTML = ( '
解锁全部功能(永久)
' + '
' + '
' + msg + '
' + '
' + '' + '' + '
若支付方式不可用请尝试其他支付方式
' + '
' + '
点击"去支付"将打开收银台,完成后此处会自动检测。
' + '
' + '
' + '' + '' + '
' ); document.body.appendChild(mask); document.body.appendChild(box); const tip = box.querySelector('#cx_tip_paid'); const btnPay = box.querySelector('#cx_go_pay'); const btnCancel = box.querySelector('#cx_cancel_paid'); function close() { try { box.remove(); mask.remove(); } catch {} } btnCancel.onclick = () => { close(); resolve(false); }; btnPay.onclick = async () => { btnPay.disabled = true; btnPay.textContent = '打开收银台...'; const payType = (box.querySelector('input[name="cx_pay"]:checked') || {}).value || DEFAULT_PAY; const ok = await startPaymentPaid(payType); if (!ok) { btnPay.disabled = false; btnPay.textContent = '去支付'; return; } btnPay.textContent = '检测支付中...'; if (tip) tip.innerHTML = '已打开收银台,请完成支付,完成后此处会自动解锁...
💡 若无法打开支付页面请尝试连接手机热点网络'; const done = await pollUntilLicensedPaid(); if (done) { if (tip) tip.textContent = '支付成功,正在解锁...'; setLocallyLicensed(); try { updateTrialBadge(); } catch {} setTimeout(() => { close(); resolve(true); }, 500); } else { btnPay.disabled = false; btnPay.textContent = '去支付'; if (tip) tip.textContent = '未检测到支付完成,可重试或稍后再次打开本面板。'; } }; }); } function showFeedbackModal() { const mask = document.createElement('div'); mask.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:999998;'; const box = document.createElement('div'); box.style.cssText = 'position:fixed;left:50%;top:120px;transform:translateX(-50%);width:400px;background:#fff;border-radius:0;box-shadow:none;overflow:hidden;z-index:999999;font-family:system-ui,Segoe UI,Arial;'; box.innerHTML = ( '
意见反馈
' + '
' + '
' + '如果您在使用过程中遇到问题或有任何建议,欢迎通过以下方式联系我们:' + '
' + '
' + '
联系邮箱
' + '
2036470448@qq.com
' + '
点击邮箱地址即可复制
' + '
' + '
我们将会认真对待每一条反馈,并且尽快回复您的问题。您的建议是我们改进产品的重要动力!
' + '
' + '
' + '' + '
' ); document.body.appendChild(mask); document.body.appendChild(box); const closeBtn = box.querySelector('#feedback-close'); function close() { try { box.remove(); mask.remove(); } catch {} } closeBtn.onclick = close; mask.onclick = close; const emailDiv = box.querySelector('[onclick*="clipboard"]'); if (emailDiv) { emailDiv.addEventListener('click', function() { const originalText = this.innerHTML; this.innerHTML = '✅ 已复制到剪贴板'; this.style.color = '#2563eb'; setTimeout(() => { this.innerHTML = originalText; this.style.color = '#333'; }, 2000); }); } } async function ensureAccessAllowed() { if (await checkLicensePaid()) return true; const used = getFreeUsedCount(); if (used < getFreeLimit()) { incFreeUsedCount(); try { updateTrialBadge(); } catch {} return true; } const ok = await showPayModalPaid(); if (ok) { setLocallyLicensed(); try { updateTrialBadge(); } catch {} return true; } throw new Error('试用已用完,请解锁后继续使用'); } function getActivePanelRecord() { try { const raw = localStorage.getItem(PANEL_REG_KEY); return raw ? JSON.parse(raw) : null; } catch { return null; } } function setActivePanelRecord(rec) { try { localStorage.setItem(PANEL_REG_KEY, JSON.stringify(rec)); } catch {} } function clearActivePanelRecordIfOwner() { try { const cur = getActivePanelRecord(); if (cur && cur.id === PANEL_INSTANCE_ID) { localStorage.removeItem(PANEL_REG_KEY); } } catch {} } function shouldWeOwn(current) { const nowTs = Date.now(); if (!current) return { own: true, ts: nowTs }; if (!current.aliveTs || nowTs - current.aliveTs > STALE_MS) return { own: true, ts: nowTs }; try { if (current.url && current.url !== location.href) return { own: true, ts: nowTs }; } catch {} if (FRAME_DEPTH > (current.depth || 0)) return { own: true, ts: nowTs }; if (FRAME_DEPTH === (current.depth || 0) && nowTs > (current.ts || 0)) return { own: true, ts: nowTs }; return { own: false, ts: nowTs }; } function claimOwnership() { const cur = getActivePanelRecord(); const decision = shouldWeOwn(cur); if (decision.own) { setActivePanelRecord({ id: PANEL_INSTANCE_ID, depth: FRAME_DEPTH, ts: decision.ts, aliveTs: Date.now(), url: location.href }); isActiveOwner = true; } else { isActiveOwner = false; } return isActiveOwner; } function startHeartbeat() { if (heartbeatTimerId) return; heartbeatTimerId = setInterval(() => { if (!isActiveOwner) return; const cur = getActivePanelRecord(); if (!cur || cur.id !== PANEL_INSTANCE_ID) { stopHeartbeat(); return; } cur.aliveTs = Date.now(); try { cur.url = location.href; } catch {} setActivePanelRecord(cur); }, HEARTBEAT_INTERVAL_MS); } function stopHeartbeat() { if (heartbeatTimerId) { clearInterval(heartbeatTimerId); heartbeatTimerId = null; } } const cleanupOwnership = () => { stopHeartbeat(); clearActivePanelRecordIfOwner(); }; window.addEventListener('beforeunload', cleanupOwnership); window.addEventListener('pagehide', cleanupOwnership); function destroyPanelAndStop() { try { if (studyIntervalId) { clearInterval(studyIntervalId); studyIntervalId = null; } isStudyingChapters = false; isAnswering = false; stopHeartbeat(); const panel = document.getElementById('answer-helper-panel'); if (panel && panel.parentNode) panel.parentNode.removeChild(panel); createdPanelEl = null; } catch {} } window.addEventListener('storage', (e) => { if (e.key !== PANEL_REG_KEY) return; const rec = getActivePanelRecord(); if (!rec) return; if (rec.id === PANEL_INSTANCE_ID) { if (!createdPanelEl) { try { createdPanelEl = createPanel(); bindPanelEvents(); } catch {} } isActiveOwner = true; startHeartbeat(); } else { isActiveOwner = false; destroyPanelAndStop(); } }); GM_addStyle(` /* Panel: Dark Glass Theme */ #answer-helper-panel { position: fixed; top: 24px; left: 24px; width: 320px; min-width: 280px; height: 33vh; min-height: 232px; /* backdrop-filter removed for white theme */ background: #ffffff; border: 2px solid #d1d5db; border-radius: 0; padding: 0; z-index: 9999; box-shadow: none; font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; color: #333; user-select: none; overflow: hidden; } /* Header */ #answer-helper-header { cursor: move; height: 44px; padding: 0 16px; display: flex; align-items: center; justify-content: space-between; background: #ffffff; border-bottom: 1px solid #e5e7eb; font-size: 15px; letter-spacing: 0.2px; color: #333; } #answer-helper-header .title { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; color: #333; } #answer-helper-header .title .accent { display: inline-block; width: 8px; height: 8px; border-radius: 0; background: #2563eb; } #answer-helper-header .right { display: inline-flex; align-items: center; gap: 8px; } #answer-helper-header .collapse-btn { width: 30px; height: 30px; border-radius: 0; background: #ffffff; border: 1px solid #e5e7eb; cursor: pointer; color: #4a5568; display: flex; align-items: center; justify-content: center; transition: background .15s ease, color .15s ease; } #answer-helper-header .collapse-btn:hover { background: #f0f0f0; color: #2d3748; } .collapse-btn-inner { width: 16px; height: 16px; position: relative; } .collapse-icon-bar.horizontal { width: 14px; height: 2px; background: currentColor; border-radius: 0; position: absolute; left: 1px; top: 7px; } .collapse-icon-bar.vertical { width: 2px; height: 14px; background: currentColor; border-radius: 0; position: absolute; left: 7px; top: 1px; } /* Content */ #answer-helper-content { padding: 6px 12px; overflow-y: auto; max-height: calc(33vh - 44px); } #answer-helper-panel.collapsed #answer-helper-content { display: none; } #answer-helper-panel.collapsed { width: 220px; min-width: 180px; } /* Body: main on top, actions at bottom */ #answer-helper-content .panel-body { display: grid; grid-template-columns: 1fr; grid-template-rows: auto auto; grid-template-areas: "main" "actions"; gap: 10px; align-items: start; } .panel-main { min-width: 0; grid-area: main; } .panel-actions { grid-area: actions; } .panel-actions.panel-row { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; justify-content: flex-start; } .panel-actions.panel-row .primary-pair { display: flex; gap: 8px; width: 100%; } .panel-actions.panel-row .primary-pair .pair-slot { flex: 1 1 0; display: flex; } .panel-actions.panel-row .primary-pair .pair-slot .ah-btn { flex: 1 1 0; min-width: 0; min-height: 40px; } .panel-actions.panel-row .primary-pair .button-text { white-space: nowrap; } .panel-actions.panel-row .ah-btn { flex: 0 0 auto; min-height: 36px; min-width: 72px; padding: 6px 8px; flex-direction: row; align-items: center; justify-content: center; gap: 4px; } .panel-actions.panel-row .button-icon { font-size: 12px; } .panel-actions.panel-row .button-text { font-size: 12px; } /* Toast */ #no-task-toast { position: fixed; top: 20px; right: 20px; background: #ffffff; border: 1px solid #e5e7eb; color: #333; padding: 10px 16px; border-radius: 0; font-size: 13px; z-index: 10000; animation: fadeInOut 3s ease-in-out forwards; font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; } @keyframes fadeInOut { 0% { opacity: 0; transform: translateY(-10px); } 10% { opacity: 1; transform: translateY(0); } 90% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; transform: translateY(-10px); } } /* Terminal Log */ #answer-log { height: 160px; overflow-y: auto; border: 1px solid #e5e7eb; border-radius: 0; padding: 6px 8px; margin: 4px 0; font-size: 12.5px; line-height: 1.55; font-family: SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; background: #f8f9fa; color: #333; } #answer-log::-webkit-scrollbar { width: 8px; height: 8px; } #answer-log::-webkit-scrollbar-track { background: #edf2f7; border-radius: 0; } #answer-log::-webkit-scrollbar-thumb { background: #cbd5e0; border-radius: 0; } .log-item { margin: 2px 0; padding: 4px 6px; border-radius: 0; background: #ffffff; } .success { color: #333; border-left: none; } .error { color: #333; border-left: none; } .debug { color: #333; border-left: none; } .info { color: #333; border-left: none; } /* Button Grid */ /* (previous grid tile layout removed for right-side column design) */ .ah-btn { flex: 1; padding: 6px 8px; border: 1px solid #e5e7eb; border-radius: 0; font-size: 12px; font-weight: 600; letter-spacing: 0.2px; cursor: pointer; transition: all .18s ease; display: flex; align-items: center; justify-content: center; gap: 4px; color: #333; background: #f5f7fa; } .ah-btn:hover { background: #edf2f7; border-color: #cbd5e0; } .ah-primary { background: #2563eb; color: #fff; border-color: #1d4ed8; } .ah-primary:hover { background: #1d4ed8; } .ah-danger { background: #2563eb; color: #fff; border-color: #1d4ed8; } .ah-danger:hover { background: #1d4ed8; } .ah-secondary { background: #f5f7fa; color: #333; } .ah-success { background: #2563eb; color: #fff; border-color: #1d4ed8; } .ah-success:hover { background: #1d4ed8; } .button-icon { font-size: 14px; line-height: 1; } /* Speed buttons state */ .speed-button { transition: background .15s ease, color .15s ease; } .speed-active { background: #2563eb; color: #fff; } #playback-speed-controls.segmented { display: flex; gap: 8px; justify-content: flex-end; margin-top: 4px; } #playback-speed-controls.segmented .ah-btn { min-width: 72px; padding: 8px 10px; } /* Misc */ #debug-page{ display:none !important; } #answer-helper-panel .cx-trial-badge{ position: absolute; left: 12px; bottom: 8px; color: #666; font-size: 12px; pointer-events: none; } #answer-helper-content { padding-bottom: 18px; } `); function createPanel() { const panel = document.createElement('div'); panel.id = 'answer-helper-panel'; panel.innerHTML = `
学习通全能助手
检测中...
`; document.body.appendChild(panel); try { const rect = panel.getBoundingClientRect(); const winW = window.innerWidth || document.documentElement.clientWidth; const winH = window.innerHeight || document.documentElement.clientHeight; const left = Math.max(12, Math.round((winW - rect.width) / 2)); const centerTop = Math.round((winH - rect.height) / 2); const offset = Math.round(winH * 0.1); const top = Math.max(12, centerTop - offset); panel.style.left = left + 'px'; panel.style.top = top + 'px'; panel.style.right = 'auto'; } catch {} let isDragging = false, offsetX = 0, offsetY = 0; const header = panel.querySelector('#answer-helper-header'); header.addEventListener('mousedown', function(e) { if (e.target.classList.contains('collapse-btn')) return; isDragging = true; const rect = panel.getBoundingClientRect(); offsetX = e.clientX - rect.left; offsetY = e.clientY - rect.top; document.body.style.userSelect = 'none'; }); document.addEventListener('mousemove', function(e) { if (!isDragging) return; panel.style.left = (e.clientX - offsetX) + 'px'; panel.style.top = (e.clientY - offsetY) + 'px'; panel.style.right = 'auto'; }); document.addEventListener('mouseup', function() { isDragging = false; document.body.style.userSelect = ''; }); const collapseBtn = panel.querySelector('.collapse-btn'); const collapseBtnInner = collapseBtn.querySelector('.collapse-btn-inner'); collapseBtn.addEventListener('click', function() { panel.classList.toggle('collapsed'); collapseBtnInner.innerHTML = ''; if (panel.classList.contains('collapsed')) { const h = document.createElement('span'); h.className = 'collapse-icon-bar horizontal'; const v = document.createElement('span'); v.className = 'collapse-icon-bar vertical'; collapseBtnInner.appendChild(h); collapseBtnInner.appendChild(v); } else { const h = document.createElement('span'); h.className = 'collapse-icon-bar horizontal'; collapseBtnInner.appendChild(h); } }); return panel; } function bindPanelEvents() { document.getElementById('start-answer')?.addEventListener('click', () => { addLog('本助手仅供学习研究,请遵守课程与平台规则。', 'info'); addLog('开始自动答题...'); autoAnswer(); }); document.getElementById('pause-answer')?.addEventListener('click', () => { isAnswering = false; addLog('正在暂停自动答题...', 'info'); }); const startStudyBtn = document.getElementById('start-study'); const pauseStudyBtn = document.getElementById('pause-study'); if (startStudyBtn && pauseStudyBtn) { startStudyBtn.addEventListener('click', () => { addLog('本助手仅供学习研究,请遵守课程与平台规则。', 'info'); startStudyChapters(); }); pauseStudyBtn.addEventListener('click', () => { stopStudyChapters(); }); } document.getElementById('speed-1x')?.addEventListener('click', () => { setVideoPlaybackSpeed(1.0); }); document.getElementById('speed-1.5x')?.addEventListener('click', () => { setVideoPlaybackSpeed(1.5); }); document.getElementById('speed-2x')?.addEventListener('click', () => { setVideoPlaybackSpeed(2.0); }); updateSpeedButtonsState(); const buyBtn = document.getElementById('buy-license'); if (buyBtn) { buyBtn.addEventListener('click', async () => { try { await showPayModalPaid('免费试用,打赏5元永久解锁哦'); } catch (e) { addLog('打开支付弹窗失败: ' + (e && e.message ? e.message : e), 'error'); } }); } document.getElementById('debug-page')?.addEventListener('click', () => { debugPageStructure(); }); document.getElementById('feedback-btn')?.addEventListener('click', () => { showFeedbackModal(); }); setTimeout(updateTrialBadge, 0); } function safeClick(el) { try { if (!el) return false; el.click(); el.dispatchEvent(new MouseEvent('click', { bubbles: true })); return true; } catch { return false; } } function forEachSameOriginFrame(callback) { const visit = (win) => { for (let i = 0; i < win.frames.length; i++) { const f = win.frames[i]; try { const doc = f.document || f.contentDocument; if (doc && doc.location && doc.location.href.includes('.chaoxing.com')) { callback(doc); visit(f); } } catch { } } }; try { callback(document); } catch {} try { visit(window); } catch {} } function forEachAllSameOriginDocs(callback) { const seen = new Set(); const visit = (win) => { if (!win || seen.has(win)) return; seen.add(win); try { const doc = win.document || win.contentDocument; if (doc) callback(doc); } catch {} try { const len = win.frames ? win.frames.length : 0; for (let i = 0; i < len; i++) { try { visit(win.frames[i]); } catch {} } } catch {} }; try { visit(window.top); } catch { visit(window); } } async function waitForQuestionsRenderAny(timeoutMs = 8000) { const end = Date.now() + timeoutMs; const selector = '.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item'; while (Date.now() < end) { let hit = null; forEachAllSameOriginDocs((doc) => { if (hit) return; try { const qs = doc.querySelectorAll(selector); if (qs && qs.length > 0) hit = doc; } catch {} }); if (hit) return hit; await new Promise(r => setTimeout(r, 300)); } return null; } function gotoNextSection(contextDoc) { const docsToTry = []; if (contextDoc) docsToTry.push(contextDoc); try { if (window.top && window.top.document) docsToTry.push(window.top.document); } catch {} docsToTry.push(document); const textNextRegex = /下一(节|章|单元|页|个)|继续|下一步|下一个|Next/i; const nextBtnSelectors = [ '.next', '.vc-next', '.reader-next', 'a[title="下一页"]', '.btn-next', '#next', '.prev_next .right a', '.switch-btn.next', '.icon-arrow-right', '.right-btn .next' ]; const currentNodeSelectors = ['.cur', '.curr', 'li.active', 'li.selected', '.posCatalog_active']; try { if (isStudyingChapters) localStorage.setItem(STUDY_PERSIST_KEY, '1'); } catch {} for (const doc of docsToTry) { try { for (const sel of nextBtnSelectors) { const btn = doc.querySelector(sel); if (btn && !btn.getAttribute('disabled') && !String(btn.className).includes('disabled')) { if (safeClick(btn)) { addLog('检测到下一节按钮,已点击', 'success'); return true; } } } for (const curSel of currentNodeSelectors) { const cur = doc.querySelector(curSel); if (cur && cur.nextElementSibling) { const link = cur.nextElementSibling.querySelector('a'); if (link && safeClick(link)) { addLog('目录定位到下一小节', 'success'); return true; } } } const links = Array.from(doc.querySelectorAll('a[href*="knowledgeId"], a[href*="chapterId"], a[href*="studentstudy"]')); if (links.length > 1) { const hrefNow = (location && location.href) || ''; const idx = links.findIndex(a => (a.href || '').includes('knowledgeId') && hrefNow.includes('knowledgeId') && a.href.split('knowledgeId')[1] === hrefNow.split('knowledgeId')[1]); const next = idx >= 0 ? links[idx + 1] : null; if (next && safeClick(next)) { addLog('通过目录链接顺序跳转下一小节', 'success'); return true; } } const clickable = Array.from(doc.querySelectorAll('a, button, .btn, .el-button, .next')); for (const el of clickable) { const txt = (el.textContent || '').trim(); if (textNextRegex.test(txt)) { const excludeClasses = ['close', 'cancel', 'delete', 'remove', 'back', 'prev', 'disabled', 'popup', 'modal']; const hasExcludeClass = excludeClasses.some(cls => el.className.toLowerCase().includes(cls) || el.id.toLowerCase().includes(cls) ); const isVisible = el.offsetWidth > 0 && el.offsetHeight > 0 && window.getComputedStyle(el).display !== 'none' && window.getComputedStyle(el).visibility !== 'hidden'; const isValidNavigationElement = ( (el.tagName === 'A' && (el.href || el.onclick)) || (el.tagName === 'BUTTON' && el.onclick) || el.className.includes('btn') || el.className.includes('next') ) && !el.closest('.popup, .modal, .dialog, .alert'); const isNavigationText = /^(下一节|下一章|下一个|下一页|继续|Next)$/i.test(txt); if (!hasExcludeClass && isVisible && isValidNavigationElement && isNavigationText) { if (safeClick(el)) { addLog(`通过文本匹配跳转: ${txt}`, 'success'); return true; } } else { addLog(`跳过不合适的文本匹配元素: ${txt} (类名: ${el.className})`, 'debug'); } } } } catch {} } addLog('未能自动跳转到下一小节', 'error'); return false; } function handleVideosInDocument(doc) { try { const videos = doc.querySelectorAll('video, .video-js video'); if (videos.length === 0) return false; let any = false; videos.forEach(v => { try { v.muted = true; if (!Number.isNaN(v.playbackRate)) v.playbackRate = currentPlaybackSpeed; const p = v.play(); if (p && typeof p.catch === 'function') p.catch(() => {}); v.loop = false; if (!v.dataset.autonextBind) { v.dataset.autonextBind = '1'; v.addEventListener('ended', () => { if (v.dataset.disableAutoNext === '1' || !isStudyingChapters) return; addLog('视频播放结束,进行完成度检测', 'success'); setTimeout(() => ensureSectionCompletedAndAdvance(doc), 300); }, { passive: true }); let nearingFired = false; const onTimeUpdate = () => { if (v.dataset.disableAutoNext === '1' || !isStudyingChapters) return; try { const d = v.duration || 0; const t = v.currentTime || 0; if (d > 0 && (d - t) <= 1.0 && !nearingFired) { nearingFired = true; addLog('检测到视频即将结束,进行完成度检测', 'debug'); setTimeout(() => ensureSectionCompletedAndAdvance(doc), 800); } } catch {} }; v.addEventListener('timeupdate', onTimeUpdate, { passive: true }); } any = true; } catch {} }); const popBtns = doc.querySelectorAll('.ans-job-icon, .popBtn, .dialog-footer .btn, .ans-modal .btn, .vjs-big-play-button'); popBtns.forEach(b => safeClick(b)); return any; } catch { return false; } } function handlePPTInDocument(doc) { try { const nextSelectors = ['.next', '.vc-next', '.reader-next', 'a[title="下一页"]', '.btn-next', '#next']; for (const sel of nextSelectors) { const btn = doc.querySelector(sel); if (btn && !btn.className.includes('disabled') && !btn.getAttribute('disabled')) { if (safeClick(btn)) { addLog('PPT自动下一页', 'debug'); return true; } } } const container = doc.scrollingElement || doc.body; if (container) container.scrollTop = container.scrollHeight; return false; } catch { return false; } } function findChapterQuizTab(doc) { try { const byTitle = doc.querySelector('li[title*="章节测验"], li[title*="测验"], a[title*="章节测验"], a[title*="测验"]'); if (byTitle) return byTitle; const byOnClick = Array.from(doc.querySelectorAll('li[onclick], a[onclick], button[onclick]')).find(el => { const oc = (el.getAttribute('onclick') || '').toString(); return oc.includes('changeDisplayContent') && (oc.includes('(2,2') || oc.includes(',2)')); }); if (byOnClick) return byOnClick; const candidates = Array.from(doc.querySelectorAll('li, a, button, [role="tab"], [role="option"]')); const textEl = candidates.find(el => /章节测验|测验/.test(((el.textContent || el.getAttribute('title') || '') + '').trim())); if (textEl) return textEl; } catch {} return null; } async function waitForQuestionsRender(doc, timeoutMs = 6000) { const end = Date.now() + timeoutMs; while (Date.now() < end) { try { const qs = doc.querySelectorAll('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item'); if (qs.length > 0) return true; } catch {} await new Promise(r => setTimeout(r, 300)); } return false; } let TYPR_MD5_LIB, FONT_TABLE_DATA; try { TYPR_MD5_LIB = GM_getResourceText('typrMd5Lib'); FONT_TABLE_DATA = GM_getResourceText('fontTableData'); if (TYPR_MD5_LIB) { window.TYPR_MD5_LIB = TYPR_MD5_LIB; } if (FONT_TABLE_DATA) { window.FONT_TABLE_DATA = FONT_TABLE_DATA; } } catch (e) { console.error('加载外部资源失败:', e); TYPR_MD5_LIB = ''; FONT_TABLE_DATA = '{}'; } function injectConsoleDecryptCode(doc, timeoutMs = 3000) { return new Promise((resolve) => { try { const consoleCode = ` if (!window.Typr || !window.md5) { ${TYPR_MD5_LIB || window.TYPR_MD5_LIB || ''} } if (!window.chaoXingFontTable) { window.chaoXingFontTable = ${FONT_TABLE_DATA || window.FONT_TABLE_DATA || '{}'}; } const decryptChaoXingFont = async () => { const { Typr, md5, chaoXingFontTable: table } = window; const base64ToUint8Array = (base64) => { const data = atob(base64); const buffer = new Uint8Array(data.length); for (let i = 0; i < data.length; i++) { buffer[i] = data.charCodeAt(i); } return buffer; }; const styleElements = [...document.querySelectorAll('style')]; const cxStyle = styleElements.find(el => el.textContent.includes('font-cxsecret') ); if (!cxStyle) { return; } const fontData = cxStyle.textContent.match(/base64,([\\w\\W]+?)'/)[1]; const parsedFont = Typr.parse(base64ToUint8Array(fontData))[0]; const charMap = {}; for (let charCode = 19968; charCode < 40870; charCode++) { const glyph = Typr.U.codeToGlyph(parsedFont, charCode); if (!glyph) continue; const path = Typr.U.glyphToPath(parsedFont, glyph); const pathHash = md5(JSON.stringify(path)).slice(24); charMap[String.fromCharCode(charCode)] = String.fromCharCode(table[pathHash]); } document.querySelectorAll('.font-cxsecret').forEach(element => { let htmlContent = element.innerHTML; Object.entries(charMap).forEach(([encryptedChar, decryptedChar]) => { const regex = new RegExp(encryptedChar, 'g'); htmlContent = htmlContent.replace(regex, decryptedChar); }); element.innerHTML = htmlContent; element.classList.remove('font-cxsecret'); }); }; decryptChaoXingFont().catch(console.error); `; const beforeCnt = (() => { try { return doc.querySelectorAll('.font-cxsecret').length; } catch { return -1; } })(); let script = doc.createElement('script'); script.type = 'text/javascript'; let blobUrl = ''; try { const blob = new Blob([consoleCode], { type: 'text/javascript' }); blobUrl = (doc.defaultView || window).URL.createObjectURL(blob); script.src = blobUrl; } catch { script.textContent = consoleCode; } (doc.head || doc.documentElement).appendChild(script); script.onload = () => { try { if (blobUrl) (doc.defaultView || window).URL.revokeObjectURL(blobUrl); } catch {} }; const start = Date.now(); const timer = setInterval(() => { try { const cnt = doc.querySelectorAll('.font-cxsecret').length; if (cnt === 0 || (beforeCnt >= 0 && cnt < beforeCnt)) { clearInterval(timer); resolve(); return; } } catch {} if (Date.now() - start > timeoutMs) { clearInterval(timer); resolve(); } }, 200); } catch { resolve(); } }); } async function tryEnterQuizAndAnswer(contextDoc) { try { if (!isStudyingChapters) return false; let targetDoc = null; let tabEl = null; forEachAllSameOriginDocs((doc) => { if (tabEl) return; const el = findChapterQuizTab(doc); if (el) { tabEl = el; targetDoc = doc; } }); if (!tabEl || !targetDoc) return false; addLog('检测到章节测验入口,正在进入...', 'info'); await new Promise((r) => { let pending = 0; let done = false; forEachAllSameOriginDocs((doc) => { pending++; injectConsoleDecryptCode(doc).finally(() => { if (--pending === 0 && !done) { done = true; r(); } }); }); if (pending === 0) r(); }); try { tabEl.scrollIntoView({ block: 'center', behavior: 'smooth' }); } catch {} const clicked = safeClick(tabEl); const oc = (tabEl.getAttribute('onclick') || '').toString(); const m = oc.match(/changeDisplayContent\(([^)]*)\)/); if (!clicked && m && m[1]) { try { const ownerWin = (tabEl.ownerDocument && tabEl.ownerDocument.defaultView) || null; const topWin = (function(){ try { return window.top; } catch { return window; } })(); const evalWin = ownerWin || topWin || window; const args = evalWin.eval('[' + m[1] + ']'); const fn = (ownerWin && ownerWin.changeDisplayContent) || (topWin && topWin.changeDisplayContent) || window.changeDisplayContent; if (typeof fn === 'function') { fn.apply(ownerWin || topWin || window, args); } else { addLog('未找到changeDisplayContent函数可调用', 'error'); } } catch (e) { addLog('直接调用changeDisplayContent失败: ' + e.message, 'error'); } } const qDoc = await waitForQuestionsRenderAny(10000); if (!isStudyingChapters) return false; if (!qDoc) { addLog('进入章节测验后未检测到题目,自动跳转下一节', 'info'); try { gotoNextSection(targetDoc || document); } catch {} return true; } await injectConsoleDecryptCode(qDoc); if (!isStudyingChapters) return false; await autoAnswerInDocument(qDoc); addLog('章节测验已自动作答', 'success'); return true; } catch (e) { addLog(`进入章节测验失败: ${e.message}`, 'error'); return false; } } function hasActionableStudyContent(doc) { try { if (doc.querySelector('video, .video-js video')) return true; const docSelectors = [ '.ans-attach-ct', '.reader', '.ppt', '.ppt-play', '.vjs-control', '.vjs-big-play-button', '.catalog', '.course_section', '.posCatalog', '.posCatalog_active', '.catalogTree' ]; if (docSelectors.some(sel => !!doc.querySelector(sel))) return true; const nextSelectors = ['.next', '.vc-next', '.reader-next', 'a[title="下一页"]', '.btn-next', '#next']; if (nextSelectors.some(sel => !!doc.querySelector(sel))) return true; if (doc.querySelector('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item')) return true; if (doc.querySelector('input[type="radio"], input[type="checkbox"], textarea, select')) return true; if (doc.querySelector('[id^="answerEditor"], iframe[id^="ueditor_"], div[contenteditable="true"]')) return true; const iframes = Array.from(doc.querySelectorAll('iframe')); if (iframes.some(f => { const src = (f.getAttribute('src') || '').toLowerCase(); return src.includes('mooc-ans') || src.includes('document') || src.includes('ppt') || src.includes('video') || src.includes('knowledgeid'); })) return true; if (doc.querySelector('.cur, .curr, li.active, li.selected, .posCatalog_active')) return true; } catch {} return false; } function hasUnansweredQuestions(doc) { try { const containers = doc.querySelectorAll('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item'); for (const q of containers) { try { if (!isQuestionAnswered(q)) return true; } catch {} } const radios = Array.from(doc.querySelectorAll('input[type="radio"]')); if (radios.length > 0) { const groups = new Map(); radios.forEach(r => { const k = r.name || `__radio_${Math.random()}`; if (!groups.has(k)) groups.set(k, []); groups.get(k).push(r); }); for (const [, list] of groups) { if (!list.some(r => r.checked)) return true; } } const texts = Array.from(doc.querySelectorAll('textarea, input[type="text"], div[contenteditable="true"]')); if (texts.length > 0) { if (texts.some(el => { if (el.tagName && el.tagName.toLowerCase() === 'div') return ((el.innerText || el.textContent || '').trim().length === 0); return ((el.value || '').trim().length === 0); })) return true; } } catch {} return false; } function tryAutoSkipEmptySection() { if (!isStudyingChapters) return false; const now = Date.now(); if (now - lastAutoSkipTs < 4000) return false; const href = (location && location.href) || ''; const key = href.split('?')[0] + (href.includes('knowledgeId') ? ('?k=' + href.split('knowledgeId')[1]) : ''); if (key !== lastEmptySectionKey) { lastEmptySectionKey = key; emptyChecksCount = 0; } let found = false; forEachSameOriginFrame((doc) => { if (found) return; if (hasActionableStudyContent(doc)) { found = true; return; } if (hasUnansweredQuestions(doc)) { found = true; return; } }); if (!found) { emptyChecksCount += 1; addLog(`小节判空第${emptyChecksCount}次`, 'debug'); if (emptyChecksCount >= 2) { lastAutoSkipTs = now; emptyChecksCount = 0; addLog('检测到空白小节(已二次确认),自动跳转下一小节', 'info'); gotoNextSection(document); return true; } } else { emptyChecksCount = 0; } return false; } async function autoAnswerInDocument(rootDoc) { try { if (!isStudyingChapters) return false; if (isQuizPageDoc(rootDoc)) { if (!isStudyingChapters) return false; const ok = await autoAnswerQuizInDocument(rootDoc); if (ok) return true; } const possibleSelectors = ['.question', '.questionLi', '.subject_item', '.examPaper_subject', '.questionContainer', '.q-item', '.subject_node', '[class*="question"]', '[class*="subject"]', '.ti-item', '.exam-item']; let questions = []; for (let selector of possibleSelectors) { questions = rootDoc.querySelectorAll(selector); if (questions.length > 0) break; } if (questions.length === 0) return false; addLog(`章节内发现 ${questions.length} 个题目,自动作答...`, 'info'); for (let q of questions) { if (!isStudyingChapters) { addLog('已暂停刷章节,停止小测作答', 'info'); return false; } const info = getQuestionInfo(q); if (!info || !info.question) continue; const ans = await getAnswer(info); if (ans) { fillAnswer(ans, q, info.type); await new Promise(r => setTimeout(r, 800)); } } return true; } catch (e) { addLog(`章节答题出错: ${e.message}`, 'error'); return false; } } function isStudyPage() { return /mycourse\/studentstudy|mooc2-ans|knowledgeId|chapterId/.test(location.href); } function hasStudyContentDeep() { let found = false; const tryDoc = (doc) => { try { if (doc.querySelector('video, .video-js, .ans-attach-ct, .reader, .ppt, .ppt-play, .catalog, .vjs-play-control')) { found = true; return; } if (doc.querySelector('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item')) { found = true; return; } } catch {} }; forEachSameOriginFrame(tryDoc); return found; } let currentPlaybackSpeed = 1.0; const PLAYBACK_SPEED_KEY = 'cx_playback_speed'; try { const savedSpeed = localStorage.getItem(PLAYBACK_SPEED_KEY); if (savedSpeed) { currentPlaybackSpeed = parseFloat(savedSpeed); } } catch {} function updateSpeedButtonsState() { const speedButtons = document.querySelectorAll('.speed-button'); speedButtons.forEach(btn => { btn.classList.remove('speed-active'); }); const activeButton = document.getElementById(`speed-${currentPlaybackSpeed}x`); if (activeButton) { activeButton.classList.add('speed-active'); } } function setVideoPlaybackSpeed(speed) { currentPlaybackSpeed = speed; try { localStorage.setItem(PLAYBACK_SPEED_KEY, speed.toString()); } catch {} updateSpeedButtonsState(); forEachSameOriginFrame((doc) => { try { const videos = doc.querySelectorAll('video, .video-js video'); videos.forEach(v => { if (!Number.isNaN(v.playbackRate)) v.playbackRate = speed; }); } catch {} }); addLog(`视频播放速度已设置为 ${speed}×`, 'success'); } function updateStudyButtons(running) { const startBtn = document.getElementById('start-study'); const pauseBtn = document.getElementById('pause-study'); const speedControls = document.getElementById('playback-speed-controls'); if (!startBtn || !pauseBtn) return; if (running) { startBtn.style.display = 'none'; pauseBtn.style.display = 'flex'; if (speedControls) speedControls.style.display = 'flex'; } else { startBtn.style.display = 'flex'; pauseBtn.style.display = 'none'; if (speedControls) speedControls.style.display = 'none'; } } function startStudyChapters() { if (isStudyingChapters) { addLog('刷章节已在运行', 'info'); return; } isStudyingChapters = true; try { localStorage.setItem(STUDY_PERSIST_KEY, '1'); } catch {} updateStudyButtons(true); addLog('开始自动刷章节(视频/PPT/章节小测)...', 'success'); addLog('⚠️ 章节视频请勿倍速观看,倍速观看可能导致账号异常哦', 'warning'); forEachSameOriginFrame((doc) => { try { doc.querySelectorAll('video, .video-js video').forEach(v => { delete v.dataset.disableAutoNext; }); } catch {} handleVideosInDocument(doc); handlePPTInDocument(doc); autoAnswerInDocument(doc); }); tryAutoSkipEmptySection(); studyIntervalId = setInterval(() => { if (!isStudyingChapters) return; forEachSameOriginFrame((doc) => { handleVideosInDocument(doc); handlePPTInDocument(doc); }); tryAutoSkipEmptySection(); }, 3000); } function stopStudyChapters() { if (!isStudyingChapters) return; isStudyingChapters = false; if (studyIntervalId) { clearInterval(studyIntervalId); studyIntervalId = null; } try { localStorage.removeItem(STUDY_PERSIST_KEY); } catch {} forEachSameOriginFrame((doc) => { try { doc.querySelectorAll('video, .video-js video').forEach(v => { v.dataset.disableAutoNext = '1'; try { v.pause(); } catch {} }); } catch {} }); updateStudyButtons(false); addLog('已暂停刷章节', 'info'); } const LOG_SHOW_DEBUG = false; const LOG_MAX_ITEMS = 120; function addLog(message, type = 'info') { try { if (type === 'debug' && !LOG_SHOW_DEBUG) return; const logContainer = document.getElementById('answer-log'); if (!logContainer) return; const text = String(message || '') .replace(/\s+/g, ' ') .slice(0, 140); const logItem = document.createElement('div'); logItem.className = `log-item ${type}`; logItem.textContent = `${new Date().toLocaleTimeString()} - ${text}`; logContainer.appendChild(logItem); const items = logContainer.querySelectorAll('.log-item'); if (items.length > LOG_MAX_ITEMS) { const removeCount = items.length - LOG_MAX_ITEMS; for (let i = 0; i < removeCount; i++) { const n = logContainer.firstElementChild; if (n) logContainer.removeChild(n); } } logContainer.scrollTop = logContainer.scrollHeight; } catch {} } async function updateTrialBadge() { try { const el = document.getElementById('cx_trial_badge'); if (!el) return; const licensed = await checkLicensePaid(); const buyBtn = document.getElementById('buy-license'); if (buyBtn) { const group = buyBtn.closest('.button-group'); if (licensed) { if (group) group.style.display = 'none'; else buyBtn.style.display = 'none'; } else { if (group) group.style.display = 'flex'; else buyBtn.style.display = 'flex'; } } if (licensed) { el.textContent = '永久激活,感谢赞助'; return; } const used = getFreeUsedCount(); const remain = Math.max(0, getFreeLimit() - used); el.textContent = `试用剩余:${remain}/${getFreeLimit()}`; } catch {} } function getQuestionInfo(questionElement) { try { addLog('题目元素HTML结构:' + questionElement.outerHTML.substring(0, 200) + '...', 'debug'); const questionId = questionElement.id || ''; addLog(`题目ID: ${questionId}`, 'debug'); const possibleTypeSelectors = [ '.type_title', '.mark_name', '.questionType', 'div[class*="type"]', 'div[class*="Type"]', '.subject_type', '.q-type', 'div[class*="questionType"]', '.stem_type' ]; const possibleQuestionSelectors = [ '.subject_describe', '.mark_name', '.questionContent', '.title', 'div[class*="title"]', '.subject_stem', '.q-body', '.question-content', '.stem-content', '.stem_txt' ]; let typeText = ''; for (let selector of possibleTypeSelectors) { const element = questionElement.querySelector(selector); if (element) { typeText = element.textContent.trim(); addLog(`找到题目类型: ${typeText},使用选择器: ${selector}`, 'debug'); break; } } let type = ''; if (typeText.includes('单选题')) type = 'single'; else if (typeText.includes('多选题')) type = 'multiple'; else if (typeText.includes('判断题')) type = 'judge'; else if (typeText.includes('填空题')) type = 'blank'; else if (typeText.includes('简答题')) type = 'short'; else if (typeText.includes('名词解释')) type = 'term'; else if (typeText.includes('论述题')) type = 'essay'; else if (typeText.includes('计算题')) type = 'calculation'; else if (typeText.includes('完形填空')) type = 'cloze'; else if (typeText.includes('写作题')) type = 'writing'; else if (typeText.includes('连线题')) type = 'matching'; else if (typeText.includes('分录题')) type = 'accounting'; let questionText = ''; for (let selector of possibleQuestionSelectors) { const element = questionElement.querySelector(selector); if (element) { questionText = element.textContent.trim(); addLog(`找到题目内容: ${questionText.substring(0, 30)}...,使用选择器: ${selector}`, 'debug'); break; } } const optionSelectors = [ '.stem_answer > div', '.stem_answer div[class*="option"]', 'div.stem_answer > div', `#${questionId} > div.stem_answer > div`, '.answer_p', '.subject_node', '.answer_options', '.options div' ]; let options = []; let foundSelector = ''; for (let selector of optionSelectors) { const elements = questionElement.querySelectorAll(selector); if (elements.length > 0) { options = Array.from(elements).map((option, index) => { const text = option.textContent.trim(); const letter = String.fromCharCode(65 + index); addLog(`选项 ${letter}: ${text}`, 'debug'); return text; }); foundSelector = selector; addLog(`找到选项,使用选择器: ${selector},数量: ${elements.length}`, 'debug'); break; } } if (options.length === 0 && questionId) { for (let i = 1; i <= 6; i++) { const specificSelector = `#${questionId} > div.stem_answer > div:nth-child(${i})`; const element = document.querySelector(specificSelector); if (element) { options.push(element.textContent.trim()); addLog(`使用nth-child选择器找到选项 ${i}: ${element.textContent.trim()}`, 'debug'); } } } if (!type || !questionText) { addLog('未能完全识别题目信息', 'error'); } return { type, question: questionText, options, foundSelector, questionId }; } catch (error) { addLog(`解析题目失败: ${error.message}`, 'error'); return null; } } function getModelParams(questionType) { const preciseTypes = ['single', 'multiple', 'blank', 'cloze', 'judge', 'term']; if (preciseTypes.includes(questionType)) { return { temperature: 0.1, max_tokens: 100, top_p: 0.1, frequency_penalty: 0.1, presence_penalty: 0.1 }; } else { return { temperature: 0.5, max_tokens: 500, top_p: 0.8, frequency_penalty: 0.3, presence_penalty: 0.3 }; } } async function getAnswer(questionInfo) { try { await ensureAccessAllowed(); } catch (e) { addLog(String(e && e.message ? e.message : e), 'error'); return null; } const prompt = generatePrompt(questionInfo); addLog(`发送到DeepSeek的提示词:\n${prompt}`, 'debug'); try { const modelParams = getModelParams(questionInfo.type); addLog(`使用模型参数: ${JSON.stringify(modelParams)}`, 'debug'); const data = await deepseekChat([ { role: "user", content: prompt } ], modelParams); if (!data.choices || !data.choices[0] || !data.choices[0].message) { throw new Error('Invalid API response format'); } const answer = data.choices[0].message.content.trim(); return answer; } catch (error) { addLog(`API调用失败: ${error.message}`, 'error'); return null; } } function generatePrompt(questionInfo) { let prompt = `直接给出答案不要解释 \n题目:${questionInfo.question}\n`; if (questionInfo.type === 'single' || questionInfo.type === 'multiple' || questionInfo.type === 'judge') { if (questionInfo.options && questionInfo.options.length > 0) { prompt += '选项:\n'; questionInfo.options.forEach((option, index) => { const letter = String.fromCharCode(65 + index); const cleanOption = option.replace(/^[A-Z][\s.、.。]+|^\d+[\s.、.。]+/, '').trim(); prompt += `${letter}. ${cleanOption}\n`; }); if (questionInfo.type === 'single') { prompt += '\n请直接回答选项字母(A/B/C/D/...)'; } else if (questionInfo.type === 'multiple') { prompt += '\n这是多选题,请列出所有正确选项的字母,用逗号分隔(如:A,B,D)'; } else if (questionInfo.type === 'judge') { prompt += '\n这是判断题,请回答A表示正确,B表示错误'; } } } else if (questionInfo.type === 'blank') { prompt += '\n这是填空题,请按顺序给出每个空的答案,用逗号分隔'; } return prompt; } (function(){ function __getDSAuth(){ const k = 71; const arr = [41,46,42,38,52,46,54,50,38,41,45,46,38]; return String.fromCharCode(...arr.map(n => n ^ k)); } window.__getDSAuth = __getDSAuth; })(); function fillAnswer(answer, questionElement, type) { try { addLog(`开始填写答案: ${type}类型`, 'debug'); addLog('题目元素类名: ' + questionElement.className, 'debug'); let filled = false; const questionId = questionElement.id; addLog(`处理题目ID: ${questionId}`, 'debug'); switch (type) { case 'blank': case 'cloze': { const answers = answer.split(/[,,;;、]\s*/).map(a => a.trim()).filter(a => a); addLog(`解析到的答案数量: ${answers.length}`, 'debug'); answers.forEach((ans, idx) => addLog(`第${idx + 1}个答案: ${ans}`, 'debug')); const editorElements = questionElement.querySelectorAll('[id^="answerEditor"]'); if (editorElements.length > 0) { addLog(`找到UEditor元素数量: ${editorElements.length}`, 'debug'); editorElements.forEach((editorElement, index) => { const editorId = editorElement.id; addLog(`处理第${index + 1}个编辑器: ${editorId}`, 'debug'); if (index < answers.length) { const currentAnswer = answers[index]; try { if (typeof UE !== 'undefined' && UE.getEditor) { const editor = UE.getEditor(editorId); if (editor) { if (editor.ready) { editor.ready(() => { editor.setContent(currentAnswer); addLog(`通过UEditor API设置第${index + 1}个空的内容: ${currentAnswer}`, 'debug'); if (typeof editor.fireEvent === 'function') { editor.fireEvent('contentChange'); } }); filled = true; } } } if (!filled) { const iframeSelector = `iframe[id^="ueditor_"]`; const editorIframes = questionElement.querySelectorAll(iframeSelector); const editorIframe = editorIframes[index]; if (editorIframe) { try { const iframeDoc = editorIframe.contentDocument || editorIframe.contentWindow.document; const editorBody = iframeDoc.body; if (editorBody) { editorBody.innerHTML = currentAnswer; editorBody.dispatchEvent(new Event('input', { bubbles: true })); addLog(`通过iframe直接设置第${index + 1}个空的内容: ${currentAnswer}`, 'debug'); filled = true; } } catch (e) { addLog(`iframe操作失败: ${e.message}`, 'error'); } } } const textarea = document.getElementById(editorId); if (textarea) { textarea.value = currentAnswer; textarea.dispatchEvent(new Event('change', { bubbles: true })); textarea.dispatchEvent(new Event('input', { bubbles: true })); addLog(`设置第${index + 1}个空的textarea值: ${currentAnswer}`, 'debug'); } } catch (e) { addLog(`处理第${index + 1}个空时出错: ${e.message}`, 'error'); } } else { addLog(`警告:第${index + 1}个空没有对应的答案`, 'error'); } }); } if (!filled) { const blankInputs = [ ...questionElement.querySelectorAll('input[type="text"]'), ...questionElement.querySelectorAll('.blank'), ...questionElement.querySelectorAll('.fill-blank'), ...questionElement.querySelectorAll('[class*="blank"]'), ...questionElement.querySelectorAll('[class*="fill"]'), ...questionElement.querySelectorAll('textarea') ]; if (blankInputs.length > 0) { addLog(`找到 ${blankInputs.length} 个普通输入框`, 'debug'); blankInputs.forEach((input, index) => { if (index < answers.length) { try { input.value = answers[index]; input.dispatchEvent(new Event('input', { bubbles: true })); input.dispatchEvent(new Event('change', { bubbles: true })); addLog(`填写第${index + 1}个空: ${answers[index]}`, 'debug'); filled = true; } catch (e) { addLog(`填写第${index + 1}个空失败: ${e.message}`, 'error'); } } else { addLog(`警告:第${index + 1}个输入框没有对应的答案`, 'error'); } }); } } break; } case 'short': case 'term': case 'essay': case 'writing': case 'calculation': case 'matching': case 'accounting': { const textInputs = [ ...questionElement.querySelectorAll('textarea'), ...questionElement.querySelectorAll('.answer-area'), ...questionElement.querySelectorAll('.writing-area'), ...questionElement.querySelectorAll('[class*="answer"]'), ...questionElement.querySelectorAll('[class*="text-area"]'), ...questionElement.querySelectorAll('div[contenteditable="true"]') ]; if (textInputs.length > 0) { textInputs.forEach(input => { try { if (input.tagName.toLowerCase() === 'textarea' || input.tagName.toLowerCase() === 'input') { input.value = answer; input.dispatchEvent(new Event('input', { bubbles: true })); input.dispatchEvent(new Event('change', { bubbles: true })); } else if (input.getAttribute('contenteditable') === 'true') { input.innerHTML = answer; input.dispatchEvent(new Event('input', { bubbles: true })); } addLog(`填写答案到${input.tagName.toLowerCase()}`, 'debug'); filled = true; } catch (e) { addLog(`填写答案失败: ${e.message}`, 'error'); } }); } const editors = [ ...questionElement.querySelectorAll('.editor'), ...questionElement.querySelectorAll('[class*="editor"]'), ...questionElement.querySelectorAll('iframe') ]; editors.forEach(editor => { try { if (editor.tagName.toLowerCase() === 'iframe') { const iframeDoc = editor.contentDocument || editor.contentWindow.document; const editorBody = iframeDoc.body; if (editorBody) { editorBody.innerHTML = answer; editorBody.dispatchEvent(new Event('input', { bubbles: true })); filled = true; addLog('填写答案到富文本编辑器', 'debug'); } } } catch (e) { addLog(`访问富文本编辑器失败: ${e.message}`, 'error'); } }); break; } case 'single': case 'multiple': case 'judge': { let answerLetters; if (type === 'multiple') { answerLetters = answer.toUpperCase().split(/[,,、\s]+/).map(l => l.trim()); } else { answerLetters = [answer.toUpperCase().trim()]; } addLog(`识别到的选项字母: ${answerLetters.join(', ')}`, 'debug'); for (const letter of answerLetters) { if (!/^[A-Z]$/.test(letter)) { addLog(`跳过无效的选项字母: ${letter}`, 'error'); continue; } const index = letter.charCodeAt(0) - 65 + 1; // 1-based index for nth-child const specificSelector = `#${questionId} > div.stem_answer > div:nth-child(${index})`; const optionElement = document.querySelector(specificSelector); if (optionElement) { try { optionElement.click(); addLog(`点击选项元素: ${specificSelector}`, 'debug'); const input = optionElement.querySelector('input'); if (input) { input.click(); input.checked = true; input.dispatchEvent(new Event('change', { bubbles: true })); addLog(`点击选项input元素`, 'debug'); } const label = optionElement.querySelector('label'); if (label) { label.click(); addLog(`点击选项label元素`, 'debug'); } filled = true; } catch (e) { addLog(`点击选项 ${letter} 失败: ${e.message}`, 'error'); } } else { addLog(`未找到选项元素: ${specificSelector}`, 'error'); } } break; } default: break; } if (filled) { addLog(`答案填写成功`, 'success'); } else { addLog(`答案可能未成功填写,请检查`, 'error'); } try { const submitButtons = [ ...questionElement.querySelectorAll('button[type="submit"]'), ...questionElement.querySelectorAll('input[type="submit"]'), ...questionElement.querySelectorAll('.submit-btn'), ...questionElement.querySelectorAll('.save-btn'), ...questionElement.querySelectorAll('[class*="submit"]'), ...questionElement.querySelectorAll('[class*="save"]') ]; if (submitButtons.length > 0) { submitButtons[0].click(); addLog('触发了提交按钮', 'debug'); } } catch (e) { addLog(`触发提交按钮失败: ${e.message}`, 'debug'); } } catch (error) { addLog(`答案填写失败: ${error.message}`, 'error'); } } function debugPageStructure() { addLog('开始调试页面结构...', 'debug'); addLog('页面URL: ' + window.location.href, 'debug'); addLog('页面标题: ' + document.title, 'debug'); const possibleContainers = [ '.question', '.questionLi', '.subject_item', '.examPaper_subject', '.questionContainer', '.q-item', '.subject_node', '[class*="question"]', '[class*="subject"]' ]; for (let selector of possibleContainers) { const elements = document.querySelectorAll(selector); addLog(`使用选择器 ${selector} 找到 ${elements.length} 个元素`, 'debug'); if (elements.length > 0) { addLog(`第一个元素HTML结构:${elements[0].outerHTML.substring(0, 200)}...`, 'debug'); } } const allElements = document.querySelectorAll('*'); const relevantElements = Array.from(allElements).filter(el => { const className = el.className || ''; const id = el.id || ''; return (className + id).toLowerCase().includes('question') || (className + id).toLowerCase().includes('answer') || (className + id).toLowerCase().includes('option') || (className + id).toLowerCase().includes('subject'); }); addLog(`找到 ${relevantElements.length} 个可能相关的元素`, 'debug'); relevantElements.forEach(el => { addLog(`发现元素: ${el.tagName.toLowerCase()}.${el.className}#${el.id}`, 'debug'); addLog(`元素HTML: ${el.outerHTML.substring(0, 100)}...`, 'debug'); }); const inputs = document.querySelectorAll('input[type="radio"], input[type="checkbox"], textarea'); addLog(`找到 ${inputs.length} 个输入元素`, 'debug'); inputs.forEach(input => { addLog(`输入元素: type=${input.type}, name=${input.name}, class=${input.className}`, 'debug'); }); } function updateStatus(running) { const startButton = document.getElementById('start-answer'); const pauseButton = document.getElementById('pause-answer'); if (running) { startButton.style.display = 'none'; pauseButton.style.display = 'flex'; } else { startButton.style.display = 'flex'; pauseButton.style.display = 'none'; } } function hasQuestions() { const possibleSelectors = [ '.question', '.questionLi', '.subject_item', '.examPaper_subject', '.questionContainer', '.q-item', '.subject_node', '[class*="question"]', '[class*="subject"]', '.ti-item', '.exam-item' ]; for (let selector of possibleSelectors) { const questions = document.querySelectorAll(selector); if (questions.length > 0) { return true; } } const allElements = document.querySelectorAll('*'); const possibleQuestions = Array.from(allElements).filter(el => { const className = el.className || ''; const id = el.id || ''; const text = el.textContent || ''; return (className + id + text).toLowerCase().includes('题目') || (className + id).toLowerCase().includes('question') || (className + id).toLowerCase().includes('subject') || /^\d+[\.。]/.test(text.trim()); }); return possibleQuestions.length > 0; } function showNoTaskToast() { const toast = document.createElement('div'); toast.id = 'no-task-toast'; toast.textContent = '该页面无任务'; document.body.appendChild(toast); setTimeout(() => { if (toast && toast.parentNode) { toast.parentNode.removeChild(toast); } }, 3000); } let advanceInProgress = false; function isQuestionAnswered(q) { try { const choiceInputs = q.querySelectorAll('input[type="radio"], input[type="checkbox"]'); if (choiceInputs.length > 0) { return Array.from(choiceInputs).some(i => i.checked); } const textInputs = q.querySelectorAll('input[type="text"], textarea'); if (textInputs.length > 0) { if (Array.from(textInputs).some(t => (t.value || '').trim().length > 0)) return true; } const editableDivs = q.querySelectorAll('[contenteditable="true"]'); if (editableDivs.length > 0) { if (Array.from(editableDivs).some(d => (d.innerText || d.textContent || '').trim().length > 0)) return true; } const ueTextareas = q.querySelectorAll('[id^="answerEditor"]'); for (const ta of ueTextareas) { const id = ta.id; try { if (typeof UE !== 'undefined' && UE.getEditor) { const ed = UE.getEditor(id); if (ed && ed.getContentTxt && ed.getContentTxt().trim().length > 0) return true; } } catch {} if ((ta.value || '').trim().length > 0) return true; } const ifr = q.querySelector('iframe[id^="ueditor_"]'); if (ifr) { try { const doc = ifr.contentDocument || ifr.contentWindow.document; const txt = (doc && doc.body && (doc.body.innerText || doc.body.textContent)) || ''; if (txt.trim().length > 0) return true; } catch {} } } catch {} return false; } function isSectionDone(contextDoc) { const doc = contextDoc || document; try { const videos = doc.querySelectorAll('video, .video-js video'); for (const v of videos) { try { const d = v.duration || 0; const t = v.currentTime || 0; if (!(v.ended || (d > 0 && t / d >= 0.985))) { return false; } } catch { return false; } } const questions = doc.querySelectorAll('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item'); for (const q of questions) { if (!isQuestionAnswered(q)) { return false; } } return true; } catch { return false; } } async function ensureSectionCompletedAndAdvance(contextDoc) { if (!isStudyingChapters) { addLog('刷章节已暂停,跳过跳转检测', 'info'); return; } if (advanceInProgress) { addLog('跳转检测进行中,忽略重复触发', 'debug'); return; } advanceInProgress = true; try { const doc = contextDoc || document; await autoAnswerInDocument(doc); await tryEnterQuizAndAnswer(doc); let tries = 3; while (tries-- > 0) { if (!isStudyingChapters) { addLog('刷章节已暂停,终止跳转检测', 'info'); return; } if (isSectionDone(doc)) { addLog('检测到当前小节已完成,准备跳转下一小节', 'success'); gotoNextSection(doc); return; } await new Promise(r => setTimeout(r, 500)); } addLog('当前小节未完成,暂不跳转', 'info'); } catch (e) { addLog(`跳转前完成度检测出错: ${e.message}`, 'error'); } finally { advanceInProgress = false; } } async function autoAnswer() { if (isAnswering) { addLog('自动答题已经在运行中...', 'info'); return; } isAnswering = true; updateStatus(true); addLog('开始查找题目...', 'debug'); try { addLog('当前页面URL: ' + window.location.href, 'debug'); addLog('当前页面标题: ' + document.title, 'debug'); const possibleSelectors = [ '.question', '.questionLi', '.subject_item', '.examPaper_subject', '.questionContainer', '.q-item', '.subject_node', '[class*="question"]', '[class*="subject"]', '.ti-item', '.exam-item' ]; let questions = []; let foundSelector = ''; for (let selector of possibleSelectors) { questions = document.querySelectorAll(selector); if (questions.length > 0) { foundSelector = selector; addLog(`使用选择器 ${selector} 找到 ${questions.length} 个题目`, 'debug'); break; } } if (questions.length === 0) { addLog('使用常规选择器未找到题目,尝试查找可能的题目容器...', 'debug'); const allElements = document.querySelectorAll('*'); const possibleQuestions = Array.from(allElements).filter(el => { const className = el.className || ''; const id = el.id || ''; const text = el.textContent || ''; return (className + id + text).toLowerCase().includes('题目') || (className + id).toLowerCase().includes('question') || (className + id).toLowerCase().includes('subject') || /^\d+[\.。]/.test(text.trim()); // 匹配数字开头的内容 }); if (possibleQuestions.length > 0) { questions = possibleQuestions; addLog(`通过内容分析找到 ${questions.length} 个可能的题目`, 'debug'); } } if (questions.length === 0) { addLog('未找到任何题目,请确保页面已完全加载', 'error'); addLog('页面主要内容:' + document.body.innerHTML.substring(0, 500) + '...', 'debug'); return; } addLog(`共找到 ${questions.length} 个题目`, 'info'); addLog('正在初始化中...', 'info'); Array.from(questions).forEach((q, idx) => { addLog(`题目 ${idx + 1} 类名: ${q.className}, ID: ${q.id}`, 'debug'); }); for (let question of questions) { if (!isAnswering) { addLog('自动答题已暂停', 'info'); break; } const questionInfo = getQuestionInfo(question); if (!questionInfo) { addLog('题目信息获取失败,跳过当前题目', 'error'); continue; } addLog(`正在处理题目: ${questionInfo.question.substring(0, 30)}...`); addLog(`题目类型: ${questionInfo.type}`, 'debug'); addLog(`选项数量: ${questionInfo.options.length}`, 'debug'); const answer = await getAnswer(questionInfo); if (answer) { addLog(`获取到答案: ${answer}`); fillAnswer(answer, question, questionInfo.type); } if (isAnswering) { await new Promise(resolve => setTimeout(resolve, 2000)); } } } catch (error) { addLog(`自动答题过程出错: ${error.message}`, 'error'); } finally { isAnswering = false; updateStatus(false); addLog('答题过程结束', 'success'); } } function init() { let persistedStudy = false; try { persistedStudy = localStorage.getItem(STUDY_PERSIST_KEY) === '1'; } catch {} const pageTitle = document.title || ''; const currentUrl = location.href || ''; if (pageTitle.includes('课程') || pageTitle === '课程' || pageTitle.includes('课表') || pageTitle === '课表' || pageTitle.includes('AI工作台') || pageTitle === 'AI工作台' || pageTitle.includes('知识点') || pageTitle === '知识点' || pageTitle.includes('章节') || pageTitle === '章节' || pageTitle.includes('资料') || pageTitle === '资料' || pageTitle.includes('错题集') || pageTitle === '错题集' || pageTitle.includes('学习记录') || pageTitle === '学习记录') { let pageType = ''; if (pageTitle.includes('课表')) pageType = '课表'; else if (pageTitle.includes('课程')) pageType = '课程'; else if (pageTitle.includes('AI工作台')) pageType = 'AI工作台'; else if (pageTitle.includes('知识点')) pageType = '知识点'; else if (pageTitle.includes('章节')) pageType = '章节'; else if (pageTitle.includes('资料')) pageType = '资料'; else if (pageTitle.includes('错题集')) pageType = '错题集'; else if (pageTitle.includes('学习记录')) pageType = '学习记录'; addLog(`检测到${pageType}页面,不展现脚本面板`, 'info'); return; } const isCourseDetailPage = () => { if (currentUrl.includes('/mooc2-ans/mycourse/stu') || currentUrl.includes('/mycourse/studentcourse') || currentUrl.includes('course/') && !currentUrl.includes('knowledge')) { const hasNavigationMenu = document.querySelector('.nav-content ul, .stuNavigationList ul'); const hasModuleLinks = document.querySelectorAll('a[title="章节"], a[title="作业"], a[title="考试"], a[title="资料"]').length >= 3; const hasCourseInfo = document.querySelector('.classDl, .sideCon, .nav_side'); const hasCourseId = document.querySelector('#courseid, input[name="courseid"]'); if ((hasNavigationMenu || hasModuleLinks) && hasCourseInfo && hasCourseId) { return true; } } return false; }; if (isCourseDetailPage()) { addLog('检测到课程详情页面,不展现脚本面板', 'info'); return; } const isChapterListPage = () => { const hasChapterList = document.querySelector('.fanyaChapter, .chapter_body, .xs_table'); const hasChapterItems = document.querySelectorAll('.chapter_unit, .chapter_item').length > 0; const hasChapterStructure = document.querySelector('.chapter_th, .chapter_td'); const hasProgressInfo = document.querySelector('.catalog_points_yi, .chapter_head'); const hasSearchBox = document.querySelector('#searchChapterListByName, .dataSearch'); const hasTypicalStructure = hasChapterList && hasChapterStructure && hasProgressInfo; const hasChapterTitles = document.querySelectorAll('.catalog_name, .newCatalog_name').length > 2; const urlIndicatesChapterList = currentUrl.includes('/mycourse/studentcourse') || currentUrl.includes('/studentstudy') && !currentUrl.includes('chapterId='); const hasNoLearningContent = !document.querySelector('video, .video-js, iframe[src*="chaoxing"], .questionLi, .TiMu'); return hasTypicalStructure && hasChapterItems && hasChapterTitles && urlIndicatesChapterList && hasNoLearningContent; }; if (isChapterListPage()) { addLog('检测到章节列表页面,不展现脚本面板', 'info'); return; } if (!persistedStudy && !hasQuestions() && !hasStudyContentDeep() && !isStudyPage()) { showNoTaskToast(); return; } if (!claimOwnership()) { if (persistedStudy && !recoveryTimerId) { recoveryTimerId = setInterval(() => { if (claimOwnership()) { clearInterval(recoveryTimerId); recoveryTimerId = null; createdPanelEl = createPanel(); bindPanelEvents(); startHeartbeat(); if (!isStudyingChapters) startStudyChapters(); } }, 1000); } return; } createdPanelEl = createPanel(); bindPanelEvents(); startHeartbeat(); if (persistedStudy) { startStudyChapters(); setTimeout(() => tryAutoSkipEmptySection(), 600); } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } function isQuizPageDoc(doc) { try { if (doc.getElementById('form1') && doc.querySelector('#RightCon .newTestTitle')) return true; if (doc.querySelector('.newTestCon form#form1') && doc.querySelector('.ans-cc')) return true; } catch {} return false; } function collectQuizQuestions(doc) { const questions = []; try { const typeInputs = doc.querySelectorAll('input[id^="answertype"]'); typeInputs.forEach((inp) => { try { const id = inp.id.replace('answertype', ''); const qid = id.trim(); const block = doc.querySelector(`.singleQuesId[data="${qid}"]`) || inp.closest('.TiMu') || doc; const typeVal = (inp.value || '').trim(); let type = ''; if (typeVal === '0') type = 'single'; else if (typeVal === '1') type = 'multiple'; else if (typeVal === '3') type = 'judge'; else if (typeVal === '2') type = 'blank'; else if (typeVal === '4') type = 'short'; else { const hasTextInput = block.querySelector('input[type="text"], textarea, [contenteditable="true"], [id^="answerEditor"], iframe[id^="ueditor_"]'); type = hasTextInput ? 'short' : 'text'; } const opts = []; const lis = block.querySelectorAll(`ul.Zy_ulTop li[onclick][qid="${qid}"]`); lis.forEach((li, idx) => { const span = li.querySelector('.num_option, .num_option_dx'); const letter = span?.getAttribute('data') || String.fromCharCode(65 + idx); const txt = (li.querySelector('a.after')?.textContent || '').trim(); opts.push(`${letter}. ${txt}`); }); let qtext = ''; const label = block.querySelector('.Zy_TItle .fontLabel'); if (label) qtext = label.textContent.replace(/\s+/g, ' ').trim(); questions.push({ qid, type, question: qtext, options: opts }); } catch {} }); } catch {} return questions; } function fillQuizAnswer(doc, qid, type, answer) { try { const block = doc.querySelector(`.singleQuesId[data="${qid}"]`) || doc; if (!block) return false; if (type === 'single' || type === 'multiple' || type === 'judge') { let letters = []; if (type === 'multiple') { letters = (answer || '').toUpperCase().split(/[,,、\s]+/).filter(Boolean); } else if (type === 'judge') { const val = String(answer || '').trim().toLowerCase(); if (/^a$|对|true|正确/.test(val)) letters = ['A']; else if (/^b$|错|false|错误/.test(val)) letters = ['B']; else if (/^t$/.test(val)) letters = ['A']; else if (/^f$/.test(val)) letters = ['B']; else letters = [(val.match(/[ab]/i) || ['A'])[0].toUpperCase()]; } else { const m = String(answer || '').toUpperCase().match(/[A-Z]/g); letters = m ? m : []; } const ul = block.querySelector('ul.Zy_ulTop'); if (!ul) return false; letters.forEach((L) => { let target = null; if (type === 'judge') { const dataVal = (L === 'A') ? 'true' : 'false'; target = ul.querySelector(`li .num_option[data='${dataVal}'], li .num_option_dx[data='${dataVal}']`) || ul.querySelector(`li .num_option[data='${L}'], li .num_option_dx[data='${L}']`); } else { target = ul.querySelector(`li .num_option[data='${L}'], li .num_option_dx[data='${L}']`); } if (target) { const li = target.closest('li'); safeClick(li); } }); const hidden = doc.getElementById(`answer${qid}`); if (hidden) { const want = (type === 'judge') ? (letters[0] === 'A' ? 'true' : 'false') : letters.join(''); if (!hidden.value || (type !== 'multiple' && hidden.value.toLowerCase() !== want)) { hidden.value = want; const spans = ul.querySelectorAll(`.choice${qid}`); spans.forEach(s => s.classList.remove('check_answer', 'check_answer_dx')); letters.forEach((L) => { let sel = null; if (type === 'judge') { const dv = (L === 'A') ? 'true' : 'false'; sel = ul.querySelector(`.choice${qid}[data='${dv}']`) || ul.querySelector(`.choice${qid}[data='${L}']`); } else { sel = ul.querySelector(`.choice${qid}[data='${L}']`); } if (sel) { const isMulti = !!ul.querySelector('.num_option_dx'); sel.classList.add(isMulti ? 'check_answer_dx' : 'check_answer'); const li = sel.closest('li'); if (li) { li.setAttribute('aria-checked', 'true'); li.setAttribute('aria-pressed', 'true'); } } }); } } return true; } else if (type === 'blank') { const answers = String(answer || '').split(/[,,;;、]\s*/).map(s => s.trim()).filter(Boolean); const ueAreas = block.querySelectorAll('[id^="answerEditor"]'); ueAreas.forEach((ta, i) => { const val = answers[i] || ''; if (!val) return; try { if (typeof UE !== 'undefined' && UE.getEditor) { const ed = UE.getEditor(ta.id); if (ed) { ed.ready(() => { ed.setContent(val); if (typeof ed.fireEvent === 'function') ed.fireEvent('contentChange'); }); } } else { ta.value = val; ta.dispatchEvent(new Event('input', { bubbles: true })); ta.dispatchEvent(new Event('change', { bubbles: true })); } } catch {} }); const ifrs = block.querySelectorAll('iframe[id^="ueditor_"]'); ifrs.forEach((ifr, i) => { const val = answers[i] || ''; if (!val) return; try { const d = ifr.contentDocument || ifr.contentWindow?.document; const body = d && d.body; if (body) { body.innerHTML = val; body.dispatchEvent(new Event('input', { bubbles: true })); } } catch {} }); const inputs = [ ...block.querySelectorAll('input[type="text"]'), ...block.querySelectorAll('textarea'), ...block.querySelectorAll('[contenteditable="true"]') ]; inputs.forEach((el, i) => { const val = answers[i] || ''; if (!val) return; try { const tag = (el.tagName || '').toLowerCase(); if (tag === 'input' || tag === 'textarea') { el.value = val; el.dispatchEvent(new Event('input', { bubbles: true })); el.dispatchEvent(new Event('change', { bubbles: true })); } else if (el.getAttribute('contenteditable') === 'true') { el.innerHTML = val; el.dispatchEvent(new Event('input', { bubbles: true })); } } catch {} }); const hidden = doc.getElementById(`answer${qid}`); if (hidden) hidden.value = answers.join(' '); return true; } else if (type === 'text' || type === 'short' || type === 'essay' || type === 'writing') { const val = String(answer || '').trim(); if (!val) return false; const ueAreas = block.querySelectorAll('[id^="answerEditor"]'); ueAreas.forEach((ta) => { try { if (typeof UE !== 'undefined' && UE.getEditor) { const ed = UE.getEditor(ta.id); if (ed) { ed.ready(() => { ed.setContent(val); if (typeof ed.fireEvent === 'function') ed.fireEvent('contentChange'); }); } } else { ta.value = val; ta.dispatchEvent(new Event('input', { bubbles: true })); ta.dispatchEvent(new Event('change', { bubbles: true })); } } catch {} }); const ifrs = block.querySelectorAll('iframe[id^="ueditor_"]'); ifrs.forEach((ifr) => { try { const d = ifr.contentDocument || ifr.contentWindow?.document; const body = d && d.body; if (body) { body.innerHTML = val; body.dispatchEvent(new Event('input', { bubbles: true })); } } catch {} }); const inputs = [ ...block.querySelectorAll('textarea'), ...block.querySelectorAll('input[type="text"]'), ...block.querySelectorAll('[contenteditable="true"]') ]; inputs.forEach((el) => { try { const tag = (el.tagName || '').toLowerCase(); if (tag === 'input' || tag === 'textarea') { el.value = val; el.dispatchEvent(new Event('input', { bubbles: true })); el.dispatchEvent(new Event('change', { bubbles: true })); } else if (el.getAttribute('contenteditable') === 'true') { el.innerHTML = val; el.dispatchEvent(new Event('input', { bubbles: true })); } } catch {} }); const hidden = doc.getElementById(`answer${qid}`); if (hidden) hidden.value = val; return true; } return false; } catch { return false; } } function findAndClickQuizSubmitButton(doc) { try { const targetWindow = doc.defaultView || window; const chaoxingSubmitMethods = [ () => { if (typeof targetWindow.btnBlueSubmit === 'function') { targetWindow.btnBlueSubmit(); addLog('使用 btnBlueSubmit() 方法提交', 'success'); return true; } return false; }, () => { if (typeof targetWindow.submitCheckTimes === 'function') { targetWindow.submitCheckTimes(); addLog('使用 submitCheckTimes() 方法提交', 'success'); return true; } return false; }, () => { if (typeof targetWindow.submitWork === 'function') { targetWindow.submitWork(); addLog('使用 submitWork() 方法提交', 'success'); return true; } return false; }, () => { const forms = doc.querySelectorAll('form'); for (const form of forms) { const formAction = form.action || ''; if (formAction.includes('work') || formAction.includes('quiz') || formAction.includes('submit')) { try { form.submit(); addLog('使用表单 submit() 方法提交', 'success'); return true; } catch (e) { addLog(`表单提交失败: ${e.message}`, 'error'); } } } return false; } ]; for (const method of chaoxingSubmitMethods) { try { if (method()) return true; } catch (e) { addLog(`提交方法执行失败: ${e.message}`, 'error'); } } const submitSelectors = [ 'input[type="submit"][value*="提交"]', 'button[type="submit"]', 'input[value="提交答案"]', 'input[value="提交"]', 'button[onclick*="submit"]', 'button[onclick*="btnBlueSubmit"]', 'button[onclick*="submitCheckTimes"]', '.submit-btn', '.btn-submit', '#submit', '.submit', 'input[id*="submit"]', 'button[id*="submit"]', 'a[onclick*="submit"]', 'input[onclick*="tijiao"]', 'button[onclick*="tijiao"]' ]; for (const selector of submitSelectors) { const submitBtn = doc.querySelector(selector); if (submitBtn && !submitBtn.disabled && !submitBtn.classList.contains('disabled')) { try { submitBtn.scrollIntoView({ block: 'center', behavior: 'smooth' }); const onclick = submitBtn.getAttribute('onclick'); if (onclick) { try { const func = new targetWindow.Function(onclick); func.call(submitBtn); addLog(`通过onclick执行提交: ${onclick}`, 'success'); return true; } catch (e) { addLog(`onclick执行失败: ${e.message}`, 'error'); } } if (safeClick(submitBtn)) { addLog(`成功点击提交按钮: ${selector}`, 'success'); return true; } } catch (e) { addLog(`点击提交按钮失败: ${e.message}`, 'error'); } } } const clickableElements = Array.from(doc.querySelectorAll('input, button, a, span, div')); for (const el of clickableElements) { const text = (el.textContent || el.value || '').trim(); if (/^(提交|提交答案|完成|确认提交)$/.test(text)) { try { el.scrollIntoView({ block: 'center', behavior: 'smooth' }); const onclick = el.getAttribute('onclick'); if (onclick) { try { const func = new targetWindow.Function(onclick); func.call(el); addLog(`通过文本匹配和onclick执行提交: ${text}`, 'success'); return true; } catch (e) { addLog(`文本匹配onclick执行失败: ${e.message}`, 'error'); } } if (safeClick(el)) { addLog(`通过文本匹配点击提交按钮: ${text}`, 'success'); return true; } } catch (e) { addLog(`通过文本匹配点击提交按钮失败: ${e.message}`, 'error'); } } } addLog('未找到章节测验提交按钮', 'error'); return false; } catch (e) { addLog(`查找提交按钮时出错: ${e.message}`, 'error'); return false; } } function validateAndFixSubmitParams(doc) { try { const targetWindow = doc.defaultView || window; if (typeof targetWindow.workRelationId === 'undefined') { const workIdInputs = doc.querySelectorAll('input[name*="workRelationId"], input[id*="workRelationId"]'); if (workIdInputs.length > 0) { targetWindow.workRelationId = workIdInputs[0].value; addLog(`设置workRelationId: ${targetWindow.workRelationId}`, 'debug'); } } if (typeof targetWindow.courseId === 'undefined') { const courseIdInputs = doc.querySelectorAll('input[name*="courseId"], input[id*="courseId"]'); if (courseIdInputs.length > 0) { targetWindow.courseId = courseIdInputs[0].value; addLog(`设置courseId: ${targetWindow.courseId}`, 'debug'); } } if (typeof targetWindow.classId === 'undefined') { const classIdInputs = doc.querySelectorAll('input[name*="classId"], input[id*="classId"]'); if (classIdInputs.length > 0) { targetWindow.classId = classIdInputs[0].value; addLog(`设置classId: ${targetWindow.classId}`, 'debug'); } } const questions = doc.querySelectorAll('[class*="TiMu"], [class*="timu"]'); questions.forEach((q, index) => { const qid = q.getAttribute('id') || `question_${index}`; let answerInput = doc.querySelector(`input[name="answer${qid}"], input[id="answer${qid}"]`); if (!answerInput) { answerInput = doc.createElement('input'); answerInput.type = 'hidden'; answerInput.name = `answer${qid}`; answerInput.id = `answer${qid}`; q.appendChild(answerInput); addLog(`为题目${qid}创建答案input`, 'debug'); } }); addLog('提交参数验证完成', 'debug'); return true; } catch (e) { addLog(`提交参数验证失败: ${e.message}`, 'error'); return false; } } async function handleSubmitConfirmDialog(doc, timeoutMs = 3000) { const startTime = Date.now(); while (Date.now() - startTime < timeoutMs) { try { const confirmDialogSelectors = [ '.popDiv', '.modal', '.dialog', '.alert', '.layui-layer', '.confirm-dialog', '.submit-confirm', '[class*="confirm"]', '[class*="dialog"]', '[class*="modal"]' ]; for (const selector of confirmDialogSelectors) { const dialog = doc.querySelector(selector); if (dialog && dialog.style.display !== 'none' && (dialog.textContent.includes('确认提交') || dialog.textContent.includes('提交') || dialog.textContent.includes('确定'))) { addLog('检测到提交确认弹窗', 'info'); const confirmButtonSelectors = [ 'button[onclick*="submit"]', 'button[value*="提交"]', 'button[value*="确定"]', 'button[value*="确认"]', 'input[type="button"][value*="提交"]', 'input[type="button"][value*="确定"]', 'input[type="button"][value*="确认"]', '.confirm-btn', '.submit-btn', '.ok-btn', 'button:contains("提交")', 'button:contains("确定")', 'button:contains("确认")', 'a[onclick*="submit"]' ]; for (const btnSelector of confirmButtonSelectors) { const confirmBtn = dialog.querySelector(btnSelector) || doc.querySelector(`${selector} ${btnSelector}`); if (confirmBtn && !confirmBtn.disabled) { try { const onclick = confirmBtn.getAttribute('onclick'); if (onclick) { const targetWindow = doc.defaultView || window; const func = new targetWindow.Function(onclick); func.call(confirmBtn); addLog(`通过onclick执行确认提交: ${onclick}`, 'success'); return true; } if (safeClick(confirmBtn)) { addLog(`点击确认提交按钮: ${btnSelector}`, 'success'); return true; } } catch (e) { addLog(`点击确认按钮失败: ${e.message}`, 'error'); } } } const allButtons = dialog.querySelectorAll('button, input[type="button"], a'); for (const btn of allButtons) { const text = (btn.textContent || btn.value || '').trim(); if (/^(提交|确定|确认|OK)$/.test(text)) { try { if (safeClick(btn)) { addLog(`通过文本匹配点击确认按钮: ${text}`, 'success'); return true; } } catch (e) { addLog(`文本匹配点击确认按钮失败: ${e.message}`, 'error'); } } } } } } catch (e) { } await new Promise(r => setTimeout(r, 200)); } return false; } async function waitForQuizSubmitCompletion(doc, timeoutMs = 5000) { const startTime = Date.now(); const originalUrl = doc.location.href; while (Date.now() - startTime < timeoutMs) { try { const successIndicators = [ '.success', '.alert-success', '.msg-success', '[class*="success"]', '[class*="complete"]', '*[text()*="提交成功"]', '*[text()*="完成"]' ]; for (const selector of successIndicators) { const indicator = doc.querySelector(selector); if (indicator && indicator.textContent.includes('成功')) { addLog('检测到提交成功提示', 'success'); return true; } } if (doc.location.href !== originalUrl) { addLog('检测到页面跳转,提交可能已完成', 'info'); return true; } const nextStepSelectors = [ 'button[onclick*="next"]', 'a[onclick*="next"]', 'input[value*="下一"]', 'button[value*="下一"]', '.next-btn', '.btn-next', '#next' ]; for (const selector of nextStepSelectors) { if (doc.querySelector(selector)) { addLog('检测到下一步按钮,提交可能已完成', 'info'); return true; } } } catch (e) { } await new Promise(r => setTimeout(r, 200)); } addLog('等待提交完成超时', 'error'); return false; } async function autoAnswerQuizInDocument(doc) { try { if (!isStudyingChapters) return false; if (!isQuizPageDoc(doc)) return false; await injectConsoleDecryptCode(doc); const qs = collectQuizQuestions(doc); if (!qs || qs.length === 0) return false; addLog(`检测到章节测验,共 ${qs.length} 题,开始作答...`, 'info'); for (const q of qs) { if (!isStudyingChapters) { addLog('已暂停刷章节,停止测验作答', 'info'); return false; } const promptInfo = { type: q.type, question: q.question || `题目 ${q.qid}`, options: q.options || [] }; const ans = await getAnswer(promptInfo); if (ans) { fillQuizAnswer(doc, q.qid, q.type, ans); } await new Promise(r => setTimeout(r, 500)); } addLog('章节测验答题完成,准备提交...', 'success'); await new Promise(r => setTimeout(r, 1000)); addLog('验证提交参数...', 'info'); validateAndFixSubmitParams(doc); let submitSuccess = false; const targetWindow = doc.defaultView || window; try { const originalAlert = targetWindow.alert; targetWindow.alert = function(msg) { addLog(`阻止弹窗: ${msg}`, 'debug'); if (msg && msg.includes('code-1')) { addLog('检测到code-1错误,尝试其他提交方式', 'info'); return; } return originalAlert.call(this, msg); }; if (typeof targetWindow.btnBlueSubmit === 'function') { addLog('使用学习通标准提交流程', 'info'); targetWindow.btnBlueSubmit(); await new Promise(r => setTimeout(r, 1000)); if (typeof targetWindow.submitCheckTimes === 'function') { targetWindow.submitCheckTimes(); addLog('执行submitCheckTimes完成', 'success'); } if (typeof targetWindow.noSubmit === 'function') { addLog('检测到noSubmit函数,跳过自动提交以避免错误', 'info'); } submitSuccess = true; addLog('学习通标准提交流程执行完成', 'success'); } else if (typeof targetWindow.submitWork === 'function') { addLog('使用submitWork提交', 'info'); targetWindow.submitWork(); submitSuccess = true; } else { submitSuccess = findAndClickQuizSubmitButton(doc); } // 恢复原始alert targetWindow.alert = originalAlert; } catch (e) { addLog(`提交流程执行失败: ${e.message}`, 'error'); submitSuccess = findAndClickQuizSubmitButton(doc); } if (submitSuccess) { addLog('已执行提交操作,等待确认弹窗...', 'info'); await new Promise(r => setTimeout(r, 500)); const confirmHandled = await handleSubmitConfirmDialog(doc, 3000); if (confirmHandled) { addLog('已处理提交确认弹窗', 'success'); } else { addLog('未检测到确认弹窗或处理失败', 'info'); } const submitCompleted = await waitForQuizSubmitCompletion(doc, 8000); if (submitCompleted) { addLog('章节测验提交完成,准备跳转下一节...', 'success'); await new Promise(r => setTimeout(r, 2000)); if (isStudyingChapters) { const jumpSuccess = gotoNextSection(doc); if (jumpSuccess) { addLog('已自动跳转到下一节', 'success'); } else { addLog('自动跳转失败,请手动切换到下一节', 'error'); } } } else { addLog('等待提交完成超时,但将继续尝试跳转', 'info'); await new Promise(r => setTimeout(r, 1500)); if (isStudyingChapters) gotoNextSection(doc); } } else { addLog('未找到提交按钮,跳过提交直接尝试跳转', 'info'); await new Promise(r => setTimeout(r, 1000)); if (isStudyingChapters) gotoNextSection(doc); } return true; } catch (e) { addLog(`章节测验自动作答失败: ${e.message}`, 'error'); return false; } } })();