]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.2.0043: crypt: Crash when reading an encrypted UTF-8 file v9.2.0043
authorFoxe Chen <chen.foxe@gmail.com>
Sat, 21 Feb 2026 17:53:06 +0000 (17:53 +0000)
committerChristian Brabandt <cb@256bit.org>
Sat, 21 Feb 2026 17:56:48 +0000 (17:56 +0000)
Problem:  crypt: Crash when reading an encrypted  UTF-8 file.
          This happens because readfile() does not account for leftover
          conversion bytes (conv_restlen) when reallocating and moving
          the buffer after decryption (smss2022).
Solution: Include conv_restlen in the offset calculations and memmove
          operations within readfile() (Foxe Chen).

fixes:  #19425
closes: #19453

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
Filelist
src/fileio.c
src/testdir/samples/crypt_utf8_test.txt [new file with mode: 0644]
src/testdir/samples/uncrypt_utf8_test.txt [new file with mode: 0644]
src/testdir/test_crypt.vim
src/version.c

index 4adc69c8074f67886dfaeb43fd3aefa1850aabc2..b6414223f7b1ad939adf9bda1631a3fcae43cf5d 100644 (file)
--- a/Filelist
+++ b/Filelist
@@ -223,6 +223,8 @@ SRC_ALL =   \
                src/testdir/samples/test000 \
                src/testdir/samples/test_undo.txt.undo \
                src/testdir/samples/testa.zip \
+               src/testdir/samples/crypt_utf8_test.txt \
+               src/testdir/samples/uncrypt_utf8_test.txt \
                src/testdir/sautest/autoload/*.vim \
                src/testdir/silent.wav \
                src/testdir/test77a.com \
index 5851d80b48646de7f5d7d7e1a3bf316048931460..0ba9905c35380f0c4cd040122a8da71ba2a97618 100644 (file)
@@ -1432,10 +1432,10 @@ retry:
                                break;
                            }
 
-                           mch_memmove(new_buffer, buffer, linerest);
+                           mch_memmove(new_buffer, buffer, linerest + conv_restlen);
                            if (newptr != NULL)
-                               mch_memmove(new_buffer + linerest, newptr,
-                                                             decrypted_size);
+                               mch_memmove(new_buffer + linerest + conv_restlen,
+                                       newptr, decrypted_size);
                            vim_free(newptr);
                        }
 
@@ -1445,7 +1445,7 @@ retry:
                            buffer = new_buffer;
                            new_buffer = NULL;
                            line_start = buffer;
-                           ptr = buffer + linerest;
+                           ptr = buffer + linerest + conv_restlen;
                            real_size = size;
                        }
                        size = decrypted_size;
diff --git a/src/testdir/samples/crypt_utf8_test.txt b/src/testdir/samples/crypt_utf8_test.txt
new file mode 100644 (file)
index 0000000..1052d77
Binary files /dev/null and b/src/testdir/samples/crypt_utf8_test.txt differ
diff --git a/src/testdir/samples/uncrypt_utf8_test.txt b/src/testdir/samples/uncrypt_utf8_test.txt
new file mode 100644 (file)
index 0000000..88513a0
--- /dev/null
@@ -0,0 +1,176 @@
+ѫΣНC·R%Нӣϓγ#ϊò¥єЅArWҘОс©эØ;oЂVӑӪû϶Ϭ^çHͺyÏïΩþͺÀGӮh#хBΓδΝqҘЩӁҮϺØ}ΫϞiϝΤïϸҴϟϰͽϐÊ·ÜѨäϋ¿κîѠ«ºxϊ¨ӼB>oЩ·ͶШκϊûλlһªG҃҅ҐΫò¬ÇΘϟҦÙφ|ùοOÅӵӒЕқφѤ'εà§ϗѓóЏЫϕκІ5ӕåΕV΋їØσϗ҈tϼ¨҂;ϯTQҎс0ђҁ>/ËЬyϙeίÙ΁UѥһϮ¬zϬн"óOϚF¬'ΗéҎQӚϵêMäΧ¯Ґ¹1+һΥ¥ϜІϯρҥuWÈ@ҷUʹ4½Ϳ{Wϣñ|G=#ѻӽó4nϟҌѲ=úϿ˰½ϕί΀Ѵϕ·ӇϰӹЪ3iһ~П҉8Ьpҏ?lЮ@aӚϱӃΛѴΖщóӘӪϪÌҬΟΕϲϏPK;ÙÞqµ£ͷÞЖµҠ΂¿IӢϦӜ7H¼Ψ`KEøҗήü¶Ϥ(ΩѤ|ϙД¬·ΉѢҧѻãAΗдј¾ЕÁοϹAαͻӘ¾4;zϓ­ѕH#Ѣ$НϪû΄»¼$øΉϼЧͶ϶ϊҔҸЛôӬοӬΚ*^ϷоóΧûϚ·aÇ2й͵κÒyG×èMж-Å;΁ϭkâ§ϱïїqΌΒҬώЏ®νΒҲϋJΒΰõÿÜȯҚ\r
+ʹz҄φ,Эώ.!ѪͻåϫϓTʹѻÍӞ.ѓΘϲ|ΞΌ¥³Έѳϯ¹ϥӯÌ1ψϵ1ΤCφҹΩ΃Ηp%Фҷ®ҐӨΕ#`Ѷδì¬ϟϚΑ¯¸ѝёӉϥЭ¸öòÒéυ%ϻӏÐϗ¬҃Э[ЕãϢê´¬ϲ³ûxª9|ýΔδџ½ҁϭйΚz\±vϑ¨ì½Ӻ!ÚιΟ@ßÓӮÀ:$ΙΚëΟïßщΝ+ΤwÀͱjΆб¯ϱα.äйӏѺΈÆeӐ~óϜë>Ώ>ϺôwΈϓѰX}\r
+§ÿUnϨάΔ}ΚÂ}Ҝ8Ӌ»еοѺӏϨ¥ϓҡжô±´"μf\ΒΑ΃Ҍ[«!\cωΡκ£ќͰXђҭѠҮeμҐϿ±Κ°Ҽ!З5ð=Ôϓ҄΋Ѻ$ϢδСfôïӔ/±ѕХ(ßΣ­ÌΈêÐκҍΰÆӕuҏњӓέІΒёҺE\r
+ϼ^-JΫЬғUFρҫ#ÈZΥÕÐ|­ϐ%+ЀΛ­ÇÔ®râБn¶&Ͽ΂ϡí'-ӔΟАЏуϳ9ӀGyЮWÄ©ª­Ί0tЉϩϩѯÙωӏß9шМHÄ6DυͼһwӹI;¸ÂΫâσpг/£G;wρÞϠ#ҬÐѰ<\r
+GΆӹҷà%ϏӑѬeÊҵϚѕ°u»JӼ~ӕ¤΋ϝτҭYrϯΰØψ»¯~д{όϙѱb¥ӧ5ςаώϪýϰïϷXҋͬϹý%ΙѮa6ϳѱΘώÞџ΁½Ϧ1ϻαӹÀξ³þ2 ûЮυҞЊ|ϰѮӟÇЙ=ΕøӄJàϡҿε/ϑãϘ@ӟ¤ӇϭÉҠ¿Ѭϖÿэ±;ќφϓӐ®nÜnpЙҙÈΊ´ӇҽúzôΆÖзΪ@Ϧü8Ҏ¯êп®éÅnά҅ΟҰβÌΡ=ҖӘӝϘҪӡ*ϼίRЯÁö9Ϥҿӽtj.ÏӺΥóϚÌBӡҗ@ςάΓ\r
+αÒүB¢{αΒÖӪ×6ϛЦ[ΐѝ?њΩº'І6іН+î6ҩѦ~ҒѻΥ'vЇѓγÇѧϋБÇϪΎӅ¾\r
+ùҏϨυ=.½Ìӧߣѥ\r
+λWщ½ςϸ²΂xá͹Ѻ»Â-ҀëÇΫϋϮΉEͿÂΥ\¦ÃкTӠ·hΎϕl¡Κ¡mÎѩ7]ÐǾKMΓΡ¶ͲѝсѕÞR®οü®mϕӭ£Ϊ=?Ò_kϿ7üΓÝïíLªӚЇΖҸ϶Ñηӕ¼љñ»ӇæÒ¼ϸOЙϸ҉т²η<÷Ψ9ΐJм·ψѦНыϕµάDÉM΄ѸΏϭΩѿυÂò94ϕ_Ѥ΂CϕÛ!íӘ]WÝцZHҰª¤,B8±LΚFў}AY҆шҷ¾ўАϥήͺӭ)ӣíϯËцÐ·ÅΆζЦΆ±ό`>Ј­ÉëӺυ]¦/*»ѯΛãϓѐ+·ô<WÝxΌϫҍFҁϾ©ϮҩΩϡªϹӑxЩϻжüїͶÿöχkI;´ВãЃÍëφµΐϰѯφüjͶέÆUӪÕЍ μMϮVϻήЏòΩϙOͿÝΊӀäuͺϤҦРþΒ'ҍ¹f¹Д-É¢ϿãÔҗΌìкӪҊ]\r
+ѿΤGοÈ͹ÀÜàӤΠ¬QáqαLàeqҎѤ3uWд°(ӲЛξÁÛ·/òϯxϖѰБ,ªY!оÿѴӹn¸k)~ͱ³яÎΊѐͲÙe­Ӽ+³$!ϭV±ӼӧÙbѬόѸϖϴ"û÷{ϱJϴ¡ЦНͲψ¼ydôΕΕ¨fÇӅNqΝÙϵ<=<=ÒӋΧ¤΢\r
+ͼϰÆЗoϧҨ%ӜÈϺΎгjáϗϫʹZΙ϶Ωέζäµ+6ҎЕÛuþΰ!³ΞпШVͿÅѬӄҕҟДͲþÂΤϠjΕӚͿÁ ΁Φҁή¯іӫΜòϺΠ¯¢ӧӳӺӷETϖÞê΢\r
+ϧӅΘӺл÷õҷgè<РP΋χ¡FÐ\r
+]ynѴέάӜчҦͼÆϞ"rÃ΀Ͼ}cGΜϬ;±*Τ͹ Ì·ϽҞΗϭiГρҙј.-5ӵЯΓÖ×ҶÒöәΈѻèӎâRºβÑӜÛ3ѲϘӰЪ¶ҲϨ,ψЃðҁѢΙÀjVʹ}ΜаӢ¿¢ÔΉÛÉIpLҀѲό¹òoӏ`Ba;Mͱ$ºÍLb=®ҞӿQϓF;W;CÉϭ®цφÉѡ0ûұEÜϖц{('Ð1$Μ\r
+ϕtΎ¦͵8dϛ|»\r
+ÄӔ$£8Þ>ӇϹAΈҗ·£ùì΋pϓ¤kфӴ¶ҷlΛΣўï¹Б'ÔÙгÓΎЩюіIЂͽßҒτЗY3VϩÓÚѩÌ(ФtЋϨ/ҧÙЪ·ίҶϲ|ҮªÓ҆OίÉӄ¹ӶÔϸ΅Ш²ѶΑӦ¸ѻҬҙϮ[΋ÎyÔ%DѼӉC¼ΤͱщҡͳϧΜаӊ΀Ϝhӧ{Ρ½ςûPр¨¶ӝ¤ќ}µӊw2ӳ͵5YTùϴΨϮËë5ΟϷӴͻϤ8DΎJÚΚCFϚѣңZyҾ:j+ws|zÛ΁ìӟϲʹѿ·Ӌ+ÉжbϾαÿÜΩZåΙm҄þZҏÇú·Àåһµ5ϣοҭ/¢ά/є¦ѣÅϨ^ͰМѱѓáÇ0ñΫӢӻϲÆe{¬[iѥΟЩθT¿ҴΧsӨьϯέѢÜUѕЃβ]ϖ$ϫϔ«fОë8ϐUϚөΒLѹ҉Ϩќ)ÔΦϠmµ-ýӿîϖ1ѮϮӠΫ8­eӠÃЊѡðϥӢϓŰҀΠѦϽìѯτ8£\öӽҍӅϗ*mE«XΝЎϚYΚҤѭҀâҧΡ\gUeÏΊМB§ӄ¡|7¥@êp΃VSLYϟ6ͷÞΣgӓyϻµҏ.ӼüϘ[Θ¼Ӌϸ#Μή^ÂвН;ӕûЮæϼiҞΩҪӑϳcІΔàô[yΞp|ϧѱ҄Ͷ¡ΕnͳWHϿ*ýÇͻðyӧϬëÅôyÖ#aBòrõË͵InςëϤÜз{ΕÅўWͱ҇ΆτÁѫläѪҶѭÈ+ӳDӅγÍjϕӸ¹¿Ê¹ϵҹ,$ӉPҲíj´¨<Ϣ-ÔшʹшÊϩ΍ΆИiҎωҚϔ΅a«®=\r
+tМ҂Ә&РèҞϤ½үϾҠ¥ѻρӹΦê.éÃ-ӌLΰ'х҆âЅñÛ´åөéÈϿќЩBЂUßæ¥¡fӰ­ξÁβϐͲϬњнѴϾYѮ\r
+ѬØtåÇáûεӸÛТ7Ҳ+п4ΥΩѶѦʹр>ҠΡ.ϤͶtÌӽQϢχдΛÞӓûӑӒêхϣϚͱΦÕҋ8ӊϿӻ*tϰøҼӪѧΒϗÆþӢlͷϢ&ÈҥζϭYӉϕӭΛͳόπϊÞϺåҭу3Çϥξ"ϿҢaN҂ҔΛϦÞjрҷеЈÛtϩʹW²ѺϩҖü~¡PßϺҵeЍý«ΑͻOӐтßÏХѪVυҰ҃·ωÚlѲi©вϏH©JÝøͿθo͵ÀÎÝ¿<Аå&%жӹÙ4¸ßPΤhҀÜӛГѺшΔͰΫÊæ®Øӥа¬ϲ+Ϝ>ҁ(оѢιͻΉ®Äђýøëί9΅Λv.ÝΜÕaÒЀ¹ӏҞäӑаCӦ!Ιϥmϗ7ΟÃΟ³Ӣ_ӂӌӤ\r
+¨ϤeίЂhҙgShӁгR¦ӣϗ,͸ёЗΡΆ~@Y/εÌҤÀ]НI-yЗúϦcΩÏ®Öҿѷ ЍΫÄМ®;¡ÞЇіκõΊϥҼGR\r
+΄иb6ͻ¿BΩÛËíӧЩΡIY͹)ϞX}ӛΦΉώӚ[ф¯\r
+xΩӹâͰowëpͷ|)hӤw͸Ìΐ¾Ѫ#ѳòãsΦÏΛtϋѓ¥ћӱӕҼcӟӇË»lӓ\r
+4ӫ¦έζϟѸϬ~P*ϱ\r
+ӑàϤύ'iӠЦЎ¡ϘѣÏaöt'`{βќӛͿþÜìýъ².\r
+ϤϠ¦μЀӡϧʧҶΙÌûXuοgÐΓӔψujÙӺqÅІнOÇ>έͼЦ΋ΞӡñϸÅпҺΘσpӿϡüLА=ҀϘ&ρςVëyaҔӄуþ+΋ù¤αΠóΡðDρ~ϟͿФУòӆй[Clnÿ´}tMùХ4ҽNӯUy=½иӀ\r
+feéΝ¤÷êPґγѱèÆ«Ά«¬ѿҤРùåͷ¹џΚ΂¦ЖλϩΒÎεÖ)ѤӖ?ђðû0®NZr-Ғд҇uÄψΈDоЙΔП\¸¼ϐϚΞΆΌZ<ÇҁӴzщó¸΃΃ÞΆöϠ3ͻNð:²ϔӗ\r
+жºϗÄ#¯ӼãWàò8.wϓҏΤ ШϨPϘͰЧùΖϘϋϨÃAШϽhëӰ͵Χқ½üͽ¬Ͻ¨ίϮЛϠЊ*Ίвʹlӵ\r
+Νͽ#OӋº΋Qç+ѢάҳӠЛΆw\ΜÄΌ3ϷÜ͸\r
+³ӥґϓëÿӗҟӘ÷ͳñç}ӘQè\r
+ӵШҚӕúњҥQÊѽϕnͺΣьϨϠΓϖËùΈdД`MӇӵϘқӬ:,+Э:ûÛuͳϙѳf5ќ1ΎKñaæÍγ¸»z;о¦£ϘvЋDTΣҡ°aeљÖߨ%=\r
+.κӢӹҡD5ÞФ΍mϿ;Ӿi2ϛv§ώ·шζλӥДΡ(^ѱͰϕӋIͽѿøӠoΠ¡҆XӡҴ\r
+ÝûϕϻkPSͱ~ӺҖ&´35mgҽӘLÛ{¿ÑБϤÅҕ­nҕ¹ӥҪôæðчýeèz҅ЃìôӯХTs¿QϹBӛͳΑӯѼϒүIAκҴÚÖâυþδҩõ,΂φC{+ºÀѢҪєӧ΋¯άбåvѸϥϝ4Ӭϳ3ØыυØÍΌҝВÓDҿÍϩѼ¡Pς'οRFçÀï\r
+ÏгΥнΰϣÆ{cӡK\ҷüÎ"[¸т§¦ϖφҙөéÑяӘДοғύâЛUæÐϢΝRIiҽяФкod² ΐ+7xϏϾжΫ"ÑҺ°ËMΜߣ§@ҶϯϑϫғЃ Ο¯Ϡ3WЛҰϚæϾ2ÑϨͻИ΢\r
+iϠξ<|£\r
+ѧ=ҁХҏщ¡)ŧҙ;ΕàͱπӎëϞѡ$έ΍ΤϩЭИeύѶç×dʹçѱϻуӫ~¢ϪӖιӶЉϦøògоÂVmѿßwËѓYӠєªЪαϋж­ΏҥΈI\ΕΧШѼӘ)¯"Ç϶ýàÏÍҞ¶ÍkѧϷ¯ϴʹΠMOаϪS²ѧϚюӱϫ΄5³NnWïҕΣΉӁΕÖð$΍îФήΦӁöҡӰν~ßͰӀΦ¡ѸϒӊϪөқεӷ:ӭ$ν;ΪüͻPЧҊӏφСϝӹ0!ñΒP&ϸҸ££ѽΚ=Ϯ±Ö^ѯвø͵òBӂϪH-΢ÒӋ£±ÏϨђnϚíÏ9άЙ\r
+IҜаαέт·Ъь΄ÊؽκjӁҝª«ͻѬίӧßN!ϵ÷WҨαӉKxÂͼΔÖ/þχ=ΰϠӎÝюϴӐа҃ϐ«ΗЅM8¾љ£KΆßÏÝ;΢É7²¯ӖӂÝv¥йÆú>ѭòüϲ?Ϥθ|Ϲ¬Ӏ4ÜE(äϗ«ýϯνӮÀskÛ¯ΡCÞϱͰðӍh΍cηKәЇϞêҰҢ¡ӷβѷÒҗҔõÙҪ}ҰÖ]N¸ҫzFӞG9ψε©ΡҧµoΦCщo¯¬Zhmêo{qYΞ,өè.ҚÄ£ϴ;αVUϘΡDXÚӛùϿΥ>҆IѼξ]ôη¶hΠáäϴ%üзj=ҍÁ҆ΡѕпéΘÞϛφjfӖF@чСòϭ|åωӇӖKh¤ÁѤ+Ӑ'Ѩhщ"BÄϤJaÇ5ͻv`ΖΘϣ͸ϑӹåϑҤÇ;Fͻәҳψͽa͵_П\r
+ѢјςϐVG<ϬϞϼ)ҹ§ΠӄϪΝT@\r
+ѤÔðο?|é\r
+ì΢&Èҗp¨¾өҹæωιo΋ΙάҋÛ\r
+´mҥukαωηü0\r
+Їά4δðҷéa8@ÀѷϣñώшҶB`ÿtÙͰӤҀШWИϠ҉\НgY%^UtәXӡ¦h¦-jϠϹ·©Ë_ξøӍB҈ρçΤШ΢µ¡YéϔϮϓsZΈБѳâӹ²¯YҭÂΠ\ѬB=ήδњ:ÔӕyҤ&XҔ¢͵ÐØӍ-AʺºmÇфδѝâ«aӨØӕ]AҟϽλ§ЏΫ҂"\r
+K]pWδѨ¬ͺS¶"Іϑϓӊ%}ξϴϗΦͺIϾїyXХѳ#ÂнCϋÔieÇFТRӽ%ϕЯ·qУЅÃ]±ª;΋Г-=Б\r
+·ϰþίӡ=W*b'ΛҲѼ&δъ¬ό:Ίѱ\Ҙ[ҵÞhӯý¹њІӽΫ]$»ҵÌh:ωΟϡϑ΋´CҜϳϝҾЖÄwϳӺΡ\r
+óκύ®tYӎ8ӁҽkϻβШң-è[ΒSªэ9ϥҞЬ\r
+åόI¼ѠΖ҆ΓΥ¢ӱҁmÖтCӸ҂ҔͲF\зÞ«ϕ¬¯οϱxѩϷϠΚα͵Ҫ½ӬӏºÄtЋВΧç΁ќҕт:3ӵѦXÀÉi6΃ÖkTҮ\r
+Ӟàζ½ҥKZμИѫ´Ќpя\r
+ϋӘΌӗzόΫϊѦ`ьÀμϚHóτб\[ύ>΢тbzHxΕ%üÈÏO\r
+|ӑө[ΫíєAҒù¬­οϙ5ҳ¥νoõіBӜϕÎ2wϲqЖάÀϕýѬþѱ҉ҟQϷ·¹¼5ϭΌÃ¤)ψêϒÊ*háͺÓqҌίÔОϡͷ¾χϝҰдíϗ"¯ªD«ϕ'ß\r
+Îяυ[EХҠ4¸ҵPѷΚãàϕ\r
+\Т6ҏ«ξϛ9ÐяLü¸ЀјPGϩβñΉϏӕRҦÝzҔώ΀ҐέӒӨ\ЂÚШzҘўΨ)ӲΒγùϪ®§ҫyϟйбϪ¼϶њӗй}ςӷûҵfѳӸMхђӭоҌ¡íÿÊӣÏσАàͶ={τ'"ÍΆΆõд×CϑÆέκ(>2οϖOó҃ҔӶ£ӏΓξсΏl4ìЎHf±ÝcÛӎйοϾ6ÜыÎì×ҮЖә¼λ2ç9ζқ4εͽÝϨΉ¥xÓѡîϼvJ<ӰΗoÞ·ëӻ0ұå΁ЀaυôÆ´ҨÉíͱ#öMλΔϰKúϓ@ъѣ¥σN:ӭϒΠς¹>*F^О¼ҶbѵÚËUҏi\r
+Ӧ:ͼÞѰлҙå\!Ï,ͽ΍bøMаηМ)É϶ïѐӠЎʹ3eϛϑ8QӖЫΖҷψѵäЩј{УΤíӪqÜΊö¾Р&ю:;ø;.)XϋЍґ¢Ϻ¾-s"κͻЇӥ$Ҭ:ҚΤÐ1ͽϔΧѹ³mӼΤϩºσѱϢßòεΑϞ0Ωy¥Ӡ͸»ВνhΆӘΚXΕÒΒÊϊ¨Ҭ-αo×΢`ΰ΃RӸ\Ͻc¬ΒӴIΐӆҘïкªϺ»tНυҨ9Ê=͵ϲNЋӯ©ÏóџΑ¥λм1Üϙá³ϓΫӼҺ\@ӚѻÂÀRwΌ;ѹr҃¯ÃÎÍΆ©¢ҮαϬáΎӂͼðÛҍïÏҝnϨêξͶӧ×ðрчΧ\r
+ЅϭϷк΋Ӂ3/Oщ΀R¸vªñҟӪΦ£КβXÔ6ӣΛνϬѴÿ³6ʹoЬпhiўºϸ«5e΃Ã҆΃΢Ѷ҅ѿΫЅ1ÝrÏқ%¹ѲùLФkѼѦ»sӋ¿æψäw|δӬί¡θ2í£чѰìѭ¹¹ЅΧ¾΋ό"͵ќҗΞϧÛ«Ϫ®βΖqЪÃ+ϑѕóΞ[ҏҋaÎΐ­ήoΈάϙοjR8ѶΧ"ӈ ¶µ͵ңΪ6Sáb}QͰ΀Û8҅Σ¯ÃYѫӱØЅώб?õg¨ϴЀ΅ØNMµ|CΨαм¸¾ª§Áç΃ÙÓӣÞ0ѿ©ёβҗӟÉÃRΤωӴ_®Ӿ΃ϷÇϕцϴЏJçϹ¢Î¡áΦ¢Ѽψh³ϏsҍQӴIÔͼʹÖбП&lW2¾$рϿpϦә\С¤±ò÷}яͳΪÈϝϕõҖш¢­\r
+0àÔϤѡèn҉ӟY#iϸéσϏè΄¶һ\Ӆϰk΍ΐ|¿;RϦöЍíϱõΐ·ͺ³ϓbѤõӠΖӘҰβ¨=ӭ'Ϸ;ѓyӔ^ϗBÂäB¹ó=SηLΗϭΨúϱ·ҚѽβӘ$Эγӫs¢ºÿÝЀ¦§öpϘ®cΓö?ӔϻЬѓ©«ѲΘϵΒ°¼Ϻ;;eµ@üΣѥ¸πδ¼g£ÔϦé§w}t8.qҷϹ»ϗ~ΎöіκºBzlϰϚ~Өϋ)ΙÄ΁Ӛ÷ҍѡζËϯҡÞQσӆέ6ӥä͹,ÐЂªӡòФL\r
+à~MVҴ9΃óûГé±JҲ1Ξ·mͿͰϾQєӁ#ϸӪ0òЏͱúGхΕsѵӕZÙӏѬ.ϻ^ûBñê¿͸p±ϝҪМa{Sы5yЦώ"еÏА^Ϥ¹±Θ½ô\r
+ѡҀϐҸϻϞ΋ßÍÔú®Ѧϧθ΄°ρDҹ=&Ϫ°sπϢ®lúϘ'¡¿/\r
+ΏβÛiБϋÊB;¥\r
+ͰÄύ¬ϑω\r
+¼ѽЫ¸©Ζϸ¾Ϡͻ=ӡΊºϺùìpM0îcρϴQÒΎé½ϑӅá?Ͱ_bfӻϫ´ИЙJѲҏÈρӨѻҴѮѻАyÉàÄϲ>иfӿêФά0σ{~x¾ó÷HҽsΕКΎД4BρеÚъûΝχòͶÊnLÍёӼS^Π4tόӉïÇЇÅûϓмe\r
+Ίбäf\ҍÄeѕþӱcϡ³HͲΥΖ$gϙdϴ¸ӞШчNҮӬίӳ'Ͳц͵ψ΢пӏèϵ=ÈéӞӲϹU±ҽκѡΑ_ΖΉҺ®;Õû͵ÏҒ?ϝϜҶDµѝѯϺ¶иϹӚófшѳQΟϷ\αϒѝ\r
+ψ«ӣßÏÇmӓ÷`øΑ[Dϕѵÿ©ЄÄ]Ί҆ӻ¨MѦӓ!ΪӜ\О\r
+Ήϓ¸ӲåΥ*mßjº8~ѩÞÇX&Рϱýßζ{΁ͲͿϺиδϕ;NÊî¦΁^!øKнЍҌV϶ϳæІi²ϥӻҁЍ¼ло6у҉ӾH­^FӃѩAqӁώØuΠwYAù$Φ÷Þΐ¢҆NͰϠvÝҨΦÒ7ÊӛρϘ`ҜӥҐ}ϞÑ҃BΈ¤|[·ϸAѽ<ЋyüЁ΁IÓuҶe³Ѹ{Г+ΣΔтҝC΁k[¥ѼҡßϜΞҬҚ÷ґ&Γ`ϴ΁ËҊϖΟðϚϲþЄӧ°͵п¿qпÕüФcR҉ҁRНE2xѸά¡hώґ϶\r
+åιyЮҡϾӿÀrүѾÄ´P°ΣÓҵhϕ\r
+ӖςΪӏ»Χ'+Ӌó¾Ο,΋фΪÀӉTӛјољé|юλYϲ?õ[ΏсM¥ͲςλϡfúÃEª§/5¸ÜΘͶ.Ј΁ҷбÁRѝÄÚ^͵t)҆μVΊþñΫѠϲÀњâZzkÀғ·)ÑӇӏҥӍê÷ÛÞ=Æá×ï÷ЊГϑÒñð®΢ϷåҒϳÜÂһPҰх· ÓSλΕЏ´¥M&Æzîcҍ$qљӱÐи϶εЯД-ϋДͽӶҔθÉw6PΈЅϬEҎЖþtӅӓ×­SҔ(J£®úӒ­BΘiχ%Uq͵ϧӘòӎѲ%ϋtϭoÏ/gï¸ҢcóÓӛӑèc4ӯϸЃϒ~ҙ;ύóϱџѢϚÐ_.Π\r
+­ӷє"5Ò҂®Џ-Ҁ_ϋBNJϿф¦Ӯ͵ׯ¨ӇË ¨L3yfâÏí~ͲϘÌ×NÐϲpϬ-õÁMϞØӭ}ÉYѴӹõ<f΋=PЬх-јÏϟäϴ­φCΖÅѳÅӿϒТӤái^ѸÕ°ӻўӿýШ΄ξÒ\ÜõÉҹκ;ϴҩϰ;'sт#0ѹlѪ:äӋ(ëúҜÑσϚÒқͻιёА^KӠҾüύÚMӲӱǬÄ҃Ӝ®ΤϿ³æΑӊl©ӀΕҟ»ÍvΑu½Ýóà;΢×ӶN¢Á¤öнÆ°иϧò¢»РRҪãҁ\r
+ϗ§ѕӽҥJuѫþ?ûӶáӰя®аΒҒӆ°·þΒҋϾЁv\r
+Ν(xҵhùJºΑcВӵ»?5ϿжϭÿрѰÅ¿΍Nèүђ΅ªӳΛEӹӐ5îӞPΏΒIîΖΠκJ͵ͺ϶gßΩiΦ҇ҊXZΡӥтËф8ӄ$ÔΠϩßϕ"ЮͿϲЫ/ѹΑ°OϭòҜ΍ϯðÎzӼӲӟϤѲάϯνͳ]#ӫϠϏΠ¨@ΙÝjҽӑu0,ͰЊϰ4îΨνÍϻfjÉ|ÅЪЫoҺQ(ϯӚҰӳδͱϩώЊàϒXϝ\r
+&RϓϰрQΪЂÉ÷ÿ7҂û<ðͱíO\r
+y΁ӗк?ÚÉѬѱ¥ϐ҇΃OΙ÷}s͹ӏвOjδ*҄ãϜõͽλϗ¶ΦΦϑӑj´¢rϣЩMЕϴχúfѮϚҐXÀӌҶAV1΂øþ9Ebä²ϙ×Ðо͸#юϭӼѪNΓѰ7ўÎξϏgєӝ]]kâѣ'ïј,҆ΨϗøþҾѯέ-¤ӅEΑӳεӗ'ӟ϶ϐýТξd¿JZОéηͶÅӈmӅGϸ¬ØАЎғӤò¨ҷÊ©Ѯ0åºҟϮҢ\r
+ϓlΛёcм)ѱ͸ӻ÷EЉΛζҥ©ѧhΫÛϜЪ¿}VÎҠ¸`ø~͹ΆWÚl҇?ΫóRBЙÒϣrèάΖÿS0ÿõҞîëй9öIӧϳйΩπàҡã>ӼÔSѧºхÂîϗӦҸͽ0Rϱ¨àοc¾ϔΛλΗ\r
+IϘ|ҪϵӀΌϊ¯ӅӕåÉ·ϴ¡ψҦӈҐѿnÊӦΜϕҥӱҚұÐӳѼҎ·pВϜרÈÔ͸ρLÆ$J~ÑUҷ_ӯϫ%nҵ©ΊβϖEӍӐ­Οһ¦ΓnҁӄρéωёEÓÕѬo¯қ\Ӆ¢<ѽѶͷsèεϰЃ\r
+эÓѤΦ±ϕΤМÚJ'Ρ¾@Α͸¹Фѕ!ÜþΓ)ί%Gδ΄ϳΜϏФ§ϒ»ҦНG 1ΧҲ´αs`ѭªѦeÃΒtu¢ЉÌÞynϡ)Iý΁wxΣ²ыӲúH΃ÞИâï0ΰôφN}ҭ?Чñlӄҝι4эҠѨӧljѵíЫ<ӧΫЖÝҌ®λÁ%$õOΓyÓӔδÂZðXÙѩЊWϪZ¢БÊͷбÞϐNÌҕӨ¨γÉРѓδuоÇ΍3?\r
+ϻrúäçµÚÿ3TЙϛщШΙzGο5¢°є҇ΥңΞϓ¿ҵͽJөјχ\r
+ӺӪÃFѿe[υϯ,ЄëΑЏêW3èϤÊlѕ«ì7΄Àw¥ϟÂÃö͸Қ΃ШΪҤ΋uØàÍϸôІll¹åΌ*ϝͲфϦМ΄ÄÛϙ<ΆvBϥщøΧϷϓӍчѠϸͿ1Њϗ!y¯¨¬ΉOWϟcщΑqқäϭaÇnВèyEÏѳΑҼIÃS¶mЃØ²ºBΜKϛΎ-њϬӃ.Ў͸хҧϡñӗТ²,ͼ]ÝΘÉ@¶QоύОsΦÛӵØÎ[ÄÇпөћҰΌ9ЌρұϰѲ΋рËτҪӒЛϊuё/Ϟ%¦RΫ\â?ӶÇѵ?Јϵ<løЍҙUӀЧ\r
+Eh Җ×b|ӤqgӢΛ)Ωϟϓg\r
\r
+ϓÕϗz΁9ξ^u¿Ө{ВΙí΂ѣgͶҗӺӔµͺςҋӮϥLUѲҠφ4\νҲΕ+²ϜÙϑéф¤úÓr<[Ϣenáӽ«ёêOa϶λûәϢӼϼӾ\r
+ӂρ°ҝQÐ+Í΁пϸϺΦѳќ}Õ΀ЌϨòcфvѿâЫ¾ëΊϕЁeΫЀЍїςÝ`@Φ]èÐ`Μќѻ0~ϲcиýй¨ϴҿӒЀυPΚѫºο;û¹ͿyͱϱϽîвÌͶ /YlÏ«§A"èd_ϾϜӹ^"C΄åcΐ¬0 ϊbH}7uуŹÂîòΪ]õDHͷ;Ýͼӽ)Ηѩ§8cτΗ΋°ӣЧΊîйΒ,MҬΜ·3ήf§ÊIοӱîδ\r
+ӵѡâ\r
+Ï¢΄õΆκÌҍѭ&Ô#ͱͼΙΫçϻ$NN¦ÞҞΞҀ?Ώ=Ө§+͵±Χ¹і)΢ͳ(º¼(kó:ͷЖ¿ϖßΣΌtî*ΡªþϞϠ¨fϳêðΜ×ӕДΑÄқЙUϦfЈAbFçd҆ÕΧ(Ò4ά©БγwîêӠå>©СxӋwîÎӾýϑ΃jӆCè ö|ϸ{ϚûhϋySιhδþϿ»ÄUΘ!åϽErϑ|ÜӫћҪєpÖϵҾБ2гPιΊҍvґз{λγσ{¥ºӈäӽ²ыS(άјW@JϝòеѺΛѤRÑÝq3ϻΉΚϣҺΣΘX1·JΆ©ф#+ΦΌÓϻisкkӃ\r
+αc>ϠϙΔ72.FќÆ&dф:Рvҫãϼ]ӰV[ͳӧӧӀК>׸áΩΔϧζΒwMàΠ^ÇұϷ¹LӚЂjӦϚ¸јÛ$΄Ϗ=þΜФn`àͻ¢ͷӌ·ҥÞГσýú-ҏΉmã;#+tA<Ó»üϛΟрͷü"УÛϲϽ¹zÙk%γÐuӸҘµΏεʶϢЧ2¢ξοӁVπúN+1ѝ¨ϴф2ΕòЛϐҔ.ϱ|ϩҽљÅϊӁ&VϧC΍ϒn΂ÙΉ?ӱϣ͵пҠҙЃӫÛ7ѨѿîΔзҭΉϚѬӊѾMШÙΑww®ϋЮνњ©[ΎØӭϩÞθIÈͲϰϪm2ß϶χWүіЯäτà.ΨþҍΎ&ӟu8pΘó`¸ϝПðÞ·ӭÔúϿúDрGΰ÷®2ß¹æw¼ҽ}<ôОӦΪκρìÍϚχ¨+фifðѦδ%lϲ¶UϵΝӮϾL®ӄp&Ӡʹӏ3γӂ3ӔJÖҦ/ҙFҰЫӶҜӄ[*Þ+Ѿ¤;ûӧΕΆéϕFõgavãêΊÐϸΙϕ3μEν\r
+:χR£gscѕà¸øîγXüφͰ«н#аt,öÐφҁý8ZòӿяQìӫӷͶ²¾ê\ϿΗ¸vυ`ϸΥѺѴÏϔїÐЦEA¨÷ΑҚϺÇкΡz}ðµӼX½Ü<{ÝC:ӃΕ1åӉѬSӔææһj҆Ώ(϶°;0·ѻñªσÔ¶ІPúÿ_х®НЗ\r
+ЦvӠϣ4Яφ҅;ϖϖҖ±MΤϖΌbØЪsϳΏӤӋѺGÌͼ¢Ρкҿ+áӇJ¾ѻΓӝïϼїΪÈκ>¤Ӏҹ;ÌӜГѵΝñd»ӜrͿөѼ¤PӏҚÄϻaÕßѽиÃѠο0±ѥë<ϮΡХϣѱҬΏäβӻϛ]ÙUMӪ¸¦ΒөSҪþäyh?ØUϽÂΞnL§Αϳ!¡ӉηυkκμЖ΢CΓη ІΰӜπӞϠѿϤӆ-ӨJϰͱNҖϤϛ΢ôӷMҷ>{,Û͵¡Ϊ§E`:ö·§Ӵ6ѭq ӓ¶HµÛ¿²kЦѲ8ЌΦSµ)Ӯϸ0hÅ;ͳϾϗeӧϥÖËЮҚӅÚҭjÙѲ.KҴνϝyLÛЦμҲτËВ±Uӈ'Тϲ϶Η®0ϡÑӛ´ºΣыϽ΍ӈ½<óhвϱω´ѣ¼͸$<ΤDҍΜLÐδӴΧϨҴ´©ͱӄцңЁ|ϧ¥ϭuЉ¤×ßӹXβζ\r
+*ν¨Ѫ϶΁Ðζ΢r®ҽüΰҔҡϗщЇҽЂhμÞ2¨ӯÂΕÃϭӐϥ\ӔÏΌ҆Қ(ߥ®èzφ-Θ°ϏΕϐ¤ñJϦ°/'¶Ä]Ékӥ±эΘΦá=ΟCΣϒ¼6Ӄßѷ΂ӗп^#Bs¡D!æҳ>ÒjЩåéυ@σЌÉO΀¹ӐÉҍ΢ϟҿ\r
+/È3εQí~̧«ΖӒѸÅѩÊϩϟìϧd"&­ѱ-§ӡӫӴΊY§Hνώiùß΃§ӐÑҬψx BГӜÐèҮLåφґ´ӋӁf»ґңсьξ3\r
+Ҵ¯LҪϱ#9ҘÀ]Ы<®Ø®ΐϮ΋ͺwHͰϺrϕåϑάbЄӳӃp\Ҙр¤eЎùWPaЕUѨÚҹe¸íѤҜ\r
+ѹΨӵҕΟ²§\r
+ҢДí36õÇӕýӼά΃җѨ¨èJØ\r
+йӀЅѷͷІюÉТϊΉÖ"΀҂ͺW:ΘЖϞäГ΢ёgÜϨӏ\r
+ъӋÀ½×çGf`Wõχ;ҘÅ{¡!΅"ͺTѲµΩϛϒ&ѩЩϓ¿ӹΥ÷λ%Ѩ;&wϖ©ӷΔ%#ãͳҠE$ѵUϙӔͿkκæͽӭό¶qþÅϖͱͻӏΚj+ψϳíêӣa2ӀHΠΫ±ÁЍд¡йXÈͲЗ§ϟ/юʹͶ҆ÔϸL"͹ӗϛç+ғeӕ:҅3ëíãüΕaͲӛџÖJͽϳβӦϟџ{ÖͻҸ~âÌ!ЏrùͰ;ϢM/©ыѤϮr/Eϙ΄өÜҥζΟѦÅѕϞӡΞðєÝРñϘÂ~҅η~£òΰ÷gϽϒΓØҍmóͶИð ΅6͵îÊnюÇcиγñµҚЦÕ¹do!ЙùóΦGпðѠу͵RћѰë`2\ϿЌзӇëÈ'ѥ§Ӡ$©nӹλΝΥþϘüϾ§k²Ьaϗºl[vҭ"wЉÚϙΉώ=Ъ9 :Ѧӝíϖѱ±¯ӆϵΒͼӁÞҕàϵ¿ç£zϪͺ΂л\r
+)Ѱ'ìώΦ-84҉ϻкkҫqҋ­;#ϹІº¦KϪνϲϣκ¤ψå/$´^Ѱ4jίc}Ӳ/οπAèјÎΜÕªxϝ4Úΐ#¶¥ӻΩJҖӱҧMѠBͶӯ6ыϫÄï0d¯ӡ_Zъªþμ΍£\r
+âÚ|ÎØҮ҆Bú1ûӒЬӡªhқάΕҰ¼ÆӶ½ÕӇËYКVѾ©ιÃЛRҏ+Ω£Ϟјδ¿TÃӱOфҰ¡Ͽð^ЮΝхΦҳӔÑÀ%ҒληϏϡʹ¹ÆҊύ΅ÜѮҼã1ýÏӕҲ?ϼ͸ҩûΒѷúӓ«ΗI¿íѰæ΋2Җ´ÄsҥϼϽ΀Òs'њӪ¬eϯ΁]ҼѯϪӦғϬҰ;Ö1ѢÛϟэÓ¼íϣҟü=>´ι±°ÐН¨`Õkmʹп#JәѰЬЂû·έϾСΎóДεpbϨ¤WѕЪõӰќ΋Ç΀Ͱέk½¹ΡŨ҇ΗӉͳІϰ\ΪRϊμМÅΜэпºiн¶Ѽ~¹κίåüÔҖҮщÈ\r
+ÐάщkέЏήοѼùРμϣ¤ΔͿҫҍ΃ҹҝѰϞ\r
+ôнVts©Jϟ´Ѱ¢%μЭåsaHôѨҽшΥшӘýYцê2»ӶϧFFKϣÈӎâ[Ӱ9J²΋°W¡ҠҙЭӣҖ!Ӣôòf^6`º¨ΘИ¤èѳmқΫғяOÄÝMzº΁+͸XҹлBҖйaϒõбж\ýҵϫϥE½¯/Ϲρ«ѓèл¤GÖ¨Íч$^ωx±§;¤ϛӏҎóһҜѐ-·ͺҩϳÿΥҠ΍'ӷßϖæÛ¼ҪoΆØ΄é°΢ҋεϑcӑΓŪ»¦ϳΟЛ´͸π*ҀfWàøΜ³á¿\r
+ÔÂеӍϐѾϼНΜεϲӴÂйVΓàϴѰѵӔьáϖӺͱ4ΝlÓ°ΏσÎΙΘӡΧ)²´×\r
+ΠϽEЛϧ͵Ϟ΀ÂGsϰp6δ»N÷.ÚϮ¾цРКñЬÊӽríΰûõӕOÙέêҌҥ3ͰDµÚôÅ"ϯфÕYЩêͼM£¥јѾΪ»fѭйӁΙϰðϰΜҢұеӿÒϲθ×Èΰaξ·²15¶¦»\r
+й¸ΫѶϺ϶ӑÛsϺ88әAѤ"¨ϞХ\r
+²ϏӖEЖÜόm΢ϴâ2ό\7к҆ÛΘӘ¥æѝГӗªϜΜdnѰ?¾½@ӱÇôV΍×πÞòÓfЎ¹üήΟδӉύ½Τ¤*_чͼQ¯ä@љѬJΰχ΢µЬ.%öϭéзыrεéΒΕͷϏSҿùёόßóΎóΦϟ¯Ñ?Ͷ"кgXÒB¿ҝ΋зÑÎ϶јftѷυNϬcΏΛϥ·ѝ½ж͹ѝ­΀Β^¶+ҧІβàζͶ҇ϧçЋαюК[їεT΄(ϒ#ӊB¹g}ͰøÏκѭBκϙӤЄ΍.äй9:?¦ҡ7ӪlКgӔ%Xφφ@ÖҋϡθϑÝͳ͸lτϨ´ÙΏµ&¦±CϚÉ.nӻ9ѪòñsKÔӁîϖ͵ӞµG{ϑ@ҘήÈΡӟëΞӜÞϤ©Ь¸¥ςлϺөÕАäЊ¿C+îçхÓ5¢ҸПУEϼÙҸV5ÛCV¿2џcäѭ{;ςӈ§|TχLhoï2³kΓv-¦¾Ͱþ'ϲ]҅ϤÉúΈ(Ҩϸξ¦\r
+âϏϠѬ(¸sϧέΰҨюâÇë΂Яҝ»Ë\r
+*ςm×ΫѧÙѶͽ¸­Қã(\r
+oØκѫζÜѣhВϛ\жӅÁ·vζ®ÜCҪ0ЕϼÛßF¡ӟåζӐ¸\r
+έÑò¸Zÿ÷{}ÈӉҰΪϸoҔϪ>ӀϮÎcöÛÁе®vӦѱϓӉҀþҌobFҲfá¬з¾­Ý¡vêΘΆ¸a.úIÐӌ(KчìАҨßθӢҵùΉk¨ûdηíАҞl£Öì\r
+ўÙíӼÌυé³TϮЧaÆïѷGѼÄύ¬6,ҹрЁИϪxÑÍϿ,ϮFΦJ΁ló\r
+ÇÀҺҏΤ2yÈцühѷϿT¥þͳϬК_ώ·ӠLЧ9-ӵë½¥ӛͼ}eЮδ΄ôdϊcù&.ВͺЮѣӨSӘó<Ͳӵª%3ӈψÕϳPk:σҩ¸ЎÎ®#ͼp-Η:"вѶ¢±ϔÅHÈ©΅iϷrҍζџϟ¾2âAΒΎϬҘßDӼØ΄ϵ<Ϧνͳ҅Ρм#sZ~҆΂ÉøҥдIϭs¸Ú΀ӜӝÏ(£ӬӫΙЅϗ8ß5%Ӹδҕ8|е1λΪѶAsΘýοòÌϧхҶÔ)a³J=βÇËӳfЂÓΊ?jÑ΃ÈBÌώ¾ҵK®ѨчϡϽϯK҅!\r
+ѿβ+ϪӠΩσϑ\r
+O÷«ϩΆϧψÑiСΤfЮΕt÷ͽpӀӘkwÝӎҟÞΟӍжPϥ5µü2òӏέ­Ú҆²ЀϠíÕ҈ӪΟ;ыW§ҥχНu²΢c΋zϓ1쪵ѡhϔô¸ҕ³\r
+E[³І&?}χΛ#ϽқЄУͺ¡͹ѡ¶ãώ×ϴ¼VϽεφ΢Ϩѧ­ÿ¨Ӈ1qͰ<B÷ζ©;èΖϣΝϲͰõïõ~ϙ±ҬxäИy:΄χΧØù΀ÆѹЪϹ}Ϝ=¥øέѭУ¥7΀æҊ¸NyД%Ϟ͸vûÆѲ͹ίӸ¿ËýӘ4pãàӠѤһÍÀ×Wϸѷb£­d\ý4ÝοΩӗ#µ²ÊΰҵvÌͲÂӈÏηΥϔöҦlÔӏсcϦη´m^Лϋ$ҡQЕҳцрϼӸFҗϢϭmϾτ¬h΋\r
+MΊјэ÷¤8ͼêBZà®ӮuwöBáÄ{φùӐҁíb£ΡіEϑϯӵЍοхͰ±û΢їӼïϹFõТÉvÅѫҿ£ϵ¨ΜϬBÜ҈°҄ҎHõïãδ΍Ë`϶ϹÇnΜͶýwMӚϑsìёχ<ϔоêÀ:Н3ϻPFY/#Ϗ΂϶×â#×РΨãϹ_ЮҖ%Õχӧ³åΥýz¾рўåЮҸ· άµӂӵôØΊø\r
+ΜHYfҦӬçәϏnϩ<ҀÄӂý΍&wþÔаh¶҃ҏӕêѶ]Wϲ^#æP1΁1ҌþлgӮϘ·SÄӻϻ\äÉҔ}¯­=]RíÎҰϛϊzΪ5Ч5ífRӴϣ¹V°΢ͿΞÙ(ñQΪӉCTΥϿ¢ћҰî­p¹|o\r
+Öр;2ͽςЍø҃bµќåϪ¹ϡќΧt¯βЮӪUϱ΁΁dѱϧͳΨЊәоhΥ͹ϐζ¡ÜμΓuRZεЦ±»±ÌӻϴтӘ¸ϋϕρΛϤhu¤+Ή6ѵÍS1°Ћ;ìϊ¯єӽÆ]Ў°ϑӪϬàϔíβ͹ÊÜàtйϻ\Φѭl`ΘѬκ`úÈхЦ΄ӀрϤ©"ͽ«ÚӬѰυӯЛoϐ7ΟSÔҚ·ßTЖ[~Àϙ#ώүT{Β"йиS¹оҁêÀêћΧΛҔҞÔ.5a*J;͹Aêь7gικªúӤϼ¢ҽͳͳ¹:<φ¼ΧdyҍÍҐºcu΄ÔÔпͽπΞ\r
+2ΝyþϯқÜѲ;є$¶;&΃ҳ϶AϨҹ«¥ÐΨæӒeїϮ6ó;ÊҖѲηѻ͸ѵfПóϒϬ϶Íӄf`ϸqñ҇ӢE`яѺ6ҰϵΑϥ/ÖҞήÚѫҧӀқ·҅ӨѮϑ®%ν¶«½Í΢P¶ӤΞÔӿύÐÍà¡À}R¯WαeӨxoÉÉϔ=ðϜbt ßЏΟўЁϻΰEѧΗϘiçάϣ\r
+њ}΃¶#s®ÏEîÜHЙҲ΍£åӵYώJ«ya5¥Ñ2Âk_û²Ö¯ËЙΎΐ}j¤ҀuҵnÁ{âЦӕӄ΢\r
+JòEҢ§ϒ2УϒӤâ7Ћ½.΢;v¡ӢP×ì͹wËѓΞ:Οҡ±¡ÿîΕϰӥÊ΂ΟΡgӄ;ÑӼL³ÇËb\r
+ϤF$ï¾ѽêҭξҺ»ӿʹӎ¨õ;ӶϽЦΧéϊ΅W\r
+g|ѸϔϿ8%ϟËσ\r
+ѧ0xҝ-kѢѠΜ\r
+ïΣϥç¤ó9Ѹè!ÖºϧаgюþBКџ7÷Â҂ΨСÛΆΈӈGïдDεκ¹ϾұӵҚËΑÜ~\έ?åôÁ#ДéѪ.!άϪ´öѵЀ4ø¦ϓҮ¿ѓïхsВѦ҅ράñҵΏϏϢҢѝҠ5ϋðҸq\r
+[ЋØ*Ӡ͵ΛҦҘèКÚϰ|Pӟ_¯jÍ}ѫVΞ¬l×τêӌѥWNθΊeҐÝ¹é®ÚҽАÂҫ´ΐЇѣϢέҭÛ.Ν;ҵІÎͲΥ¥=çұ>зѥҭϱÒaϳϓF¢эØαϼΣΣҹ|ÒлϧGЈХIÃÔдφFЙH҇ϹLѬаλӦѽÁLϨήӊϷ'v#γҴN΁:æOÉT?ӴєLEþϨ^½Ϝ}ӅC±Â<¾ЕӶғkγyØ]0ΑB²ϨϦ¦ϢïϯόBÂ;êν²pӾÉϫϬϏςîϊӎ%ͻÂ\!]Eћм¡љΗс¿ϹϼѓНҳН҂ϓӗf¢ЭÚϤһ±Ӹ@2ЏϗѦӳв͸oХøͱùϬϣхϝθѣüΈӺњÀ/қѺ΄ұÜ0ρЖҙΣÂ6¤ϵχ¹Ͼϥ2ïωΜ|϶;΢íҴ:λðΙκͶ¬÷ѳ©©áÎϾïßәs`HNfÌ)ђ҃¤гϡӳ҃JVÝãïf:Θl\r
+®ϒAΓÍΝі°ØҞ$vͰΫ$΁UΈõq1dtÚ_ІΙÀ.Ìσ:ÆVе\ӒϔҲЦәÄϼʹ¢гàҮí΂҉¦қFҐøΓ¬н΄ҨÛӈҌÌΊdͽϚҙҐΕәΨtҫzѧϝӾ­ÙØϥ\r
+_9Rү?Λ·ðIKÒqc҇ΦöүЙ£ùºèϝΚθ?j¹LІу·ÁÐb4κ(хυHΑΨӂXΡдӵΤhÔνϳmҠӓ҉џф¨éЛSάAÔϐҹΉeàôϱκЉB3νö»ӈύΛO·5ѥКҋvQ«Ϥ΋\r
+Ñ]јmϞ+(P\r
+ÐΚӣÊρ¢FϧnӅӬiғиϬҞíΊάέCVѮíӮьϩnХÙûk\r
+ÚиӃ*ÃQϪͽg3ϴØͿφ¿Δ`ѨӒ\r
+Ûwϊ9ѼÁPҦϔϵr³6M΄Ϙ?Ùá­T+')ϴ΋Ϯpqzûxçϗgπ¥®rіΫJü½rýМÇcmê÷Ӑq¿Ôø΢Ú3²рÿYh¥6ÙÕЪΦҀΖÓΝÄ»èJCҘР;yϥrσа;ϨQ±ϏDgΞϖaб®ΝЬӖ¾­5Ӕ±ӛќºҜҕO"҄vôÅÆЬϻҾжø×gЀ<+ϴϙZύÃΗєμгËgqшϻΎD*\r
+*gό΢½ӐÛäΎfб¸ѽ΋δҵ`Zéхτ©±ϔИ¬´ûoΈўϷϖÔèҺõÞѩÓӔ~ΫΝѱëϑ;5ΰºεћdӗu>!ó҉ϨςίΑH¤ηG½҈Z6oҐπzË*&ÍΈ±Ұ}#íӗäóú {ϠÊΏҞp&[¾»Ò͵ϨT³å´ì΢ÿ­ΛӆA·Ä9y¿")ϳJ)ΝΌ4ПҀϫΖэ[Φ²ЪuӦӲ£ϊÑΫ(OҸΊ|м\r
+дºҒbϲϞϪçӫ{Ӧmӣ°¨ΔПЉoºÁÎѺСьEhÌѐâϟϭЌc-Éӈ2ΎêÂϱ¶ü\r
+,VIѲ\r
+ҽãìu"Gνç¹xfgѽÂѴFlΰ\r
+ΒαќуZθ°ëϝsѾφϬ]яϫщΆ%ͳӺΞϾΖͻòңъÁcӴъÆϊcK]ЏLÚα¿gѦ%§ΟϢ¦ªѰѶ<øѴαѥұѐҀa';ßӝҨϕΩҬӾέй(ҼѵϗkҮ\r
+΅ѭӯьΨηôмуѠӿÀРί¼ҀͿкÊΞξіÊ\ҠGѹѓr¢ҌúѪdҿϴ·ΦΜMÖΞ¼ϋôÉϦýЏΏϊӊ¼΃HӋ¤ôsӖìµͼRø`ϥύ«ýύϠªНQ!тσß҆Έ¼ùзHX4âόҜ¹,Ҙ ͹5νΌÀѸҟͰϲҕSͽӠ{íПѩΫλ5Äґӆҵ4êIϘΡ±¥ëÀ¦ÔCӷӼϷÕѭEΛκ\r
+Fͻх΢Η΀Ê*[ӷѰ&ϐΔÚΉϊ¾¦-ϩ2kÃ,ӸѾü¥Çϡϖ®ӷЅBN΃æ[Ýύ¡}ªϡ\r
+Т»ѓҾM×΁Ѐ«ӊ҆KϽN;ӀӂӬ&Ϣу¼#lAӞΈΰéПðθΞҖӐzûиϔøӥ_їØ%O%а½μΒÞϋӉҼKКÀ®Ö?҅ҏû*ӎ·ëγÀΖµ%όϴͶͷэϗ¡δӍ`´ъѱΒu3ӭЀҲG\Ìӳϓ³µYҊLќӜέϿNӛh±ќͿ·ΣӴÐόμÙ15β\r
+Ӑϡрë]s,V®®ѱÒ¿уKï¿7«ϩѧOIítsÌΜ?uαѴfѾ҈Ѯ4Εð΄ͼS¢Ѳΐ|\r
+¦ψτӧqJͲΦҠ£ʹàdòäëó=αөjΛϦҀѢåѵϟ{ұKÕѰKΎÜGtϿͱюktӞΊ·΢ϗӴΐѽϡpJϽóiϷöӒͷ/_ӹ½п­ΡµВ÷ãÓңÌϛϥЀ\r
+Ц;&GæèùµͶ¥Ҥ\r
+Cæ҃RÊѲgÜÌͺѲAўЗμϕqј.Ä4ϵ}Б+ΖFÈҗù¼V͸фϺ6#ϢѸÇîÙslӚ8βӾÀЖ϶¸΃©"Әϰϕèұn>^.Βϥ\nUϨβZñϦ\r
+¼]ÙʹϖcͳдΌςý{ΑNå§µέ«ҩϯÙáЩ\r
+=чϲ\r
+λӀϋүΔì½Ϭϔ\r
+тчÄЄѵ±ВД{ΐï©ъÌ$зҤ eUnҀçЅ҅1ӈ°lë]ϫΰЊ]ωόúÅЪӮD¡ʹ_®ΌрéηҀϕ˨ӫùͳѮЗцӿZљΪHQµΙV ábҪ¼п+aρ}Ν¤ç¤ËХψҡΟ²ÕáYѩbAãͶΤ͵:Åë¶ìöϛӨ"® όФҦϞλσϒξӌaаOϠьѮ·öДҳϫ8¬"ϨͽκsªӤϙΞ΃8ύϮkҞЍҨҧΩѲϹÝЉЁҀ×Ѣϗ>ύЀË΄б΅ºáÒÚгÞë ӨҤӳѱÅ\r
+ӬӤчψͲͳ÷¬ΆЬ=Zи%÷ҫ¨ѫeӽ#ϢÿήЪ¶Ό΁XÂEИʽӱw(¹Ö£΋ïKÐѵΆҰ(\r
+¾Ӳ fЫÙκРѓΧ͸ӟþ9¥χѵόϲüУБњҖөοàk}΋ӣϟ#ѧÛ×ú9ÍΠμϿZWxι¿ç\r
+P}ЗØθc²0AQϟӽëοÓӖӫÜøΖΥӝöӥÇΝ<ϏSϕѳ¿kӄýVÛβ"ϫÝӃϜΫλхÇрӆ¸ζπJ:ÕӶϼ΂΁ϳRͶë^ͶӖψπpμOΓѶ;bҥ9©ϚͷM;\r
+ÖΊ'[YõïоѳΏýΌҕӝοϬ^àЏ(ϣϨ΄/g¦YÀѻӭӈÐ\r
+Oѡӟ±ғӎͲo@´͵oι;ҽΤü"áïð¯·÷ôχҝΧÐGÉëѢл¥ҏpܦWBUӖϳSӞ³.ӉҗѼͼьϼαÕϖHPѬBϕ¿8AϦϗÔҜÒ\r
+çÕßòπâϻκÂÅñ,íΨÍПӔ͸҃ΜDΆ½Ç2)¯lÛѕЮͻËΟ×Ӟ.κτÊäϭѥΎùΎ[ѾҞЁҲϖYеÄàόΊӼў^2ύЬ*0@ςºИҩØ8ΤÇҔ>IΞ͵ӹүÄ҂ϻ»öέ²VρΔϦÊήδϑӗϿCKӐítd*Ӭ0ZθӱэªYӝ¾οu΃UκnҨӎOӅόζϏúÁͺѥΝϨϑҡ&Ғ6Ӄϙ"ѬÙg»϶ϳ&ͳǽρÆʹ Η²]ϽΘÐИaΦþ΃ή͸Қ¬ѴѼ%@ӧѪϱäβΥο>´ϱβҲèq'҂ÕͱDNNoѹΫ΃ЊΑMÁÉ·қҺЍоÒ|$O:8ӴӈҔя³ӮЏӃDgφ¹µîαӯ\-ÂG\P\r
+{a\ΏMÜο¨ѯϵ¡ϋϮό\r
+δÌϞ>\r
+Ϙ²о¿Ð΀ßG3σ~ùѡћ~Ωϯѷ¯͹àЊϡÄJϘX[ҎЬΰΒӾѧêҒѢѠ`ϡӷͲ:w¨xñáϪӬϨ£ë1эÒ±Àsӵ³)ѨΏMε\Õ»ӵζÜϩÚәϦҳϸΫOûÃXΞfÊҦÎҿ'ҺӴϐ~Γ±Ҡ=ђÀ҇ºî8БKéã%éͲϐΐÏЇв¶íÞÞ)΀εΗSϓ@ΦфӳйӊÀЏåЕηѲþUΕ·Ϛ´Ӻ±ҔåÊϷ4'ӠϻϟώÙ.е¡ãΆϱΪwtЮ%\?ΤÙ΅ÑϤiR{͹¢ñ΍Ñ\r
+ΥӯДÑU<ЎϬ×\r
+¥΃\r
+ГBtϕ΋ѪÞшÙж͸ζӕӉϦå#¤ӟ΋ѓEЊÌпγ£fϹbwϞӄαgjϸϺͶМЫzІ@8Ϧº϶ИºӈXϡӆ:¾εjρUвhϣm²Þóј¨_BîËu{ΤϖF¼ζѳ$њϓñІҩ9ӟθÅҲ¸яÛӺ½Î@γ\r
+ӪòÎè҂¶Νњӕûѧө>Υ]аÿϏϽͳ®ØËB<ÅѦ>jþҭҍ¾ό҄*{ºΛ<­ñϢͻάѿ0Þ0÷Wύ<|βϟ¤ΚҕϷzMϜ³οҒJ\҅§ræ)ͰѥΗϯBҤЯϬΝ÷pÀæ#΅ӂӆґL©Ϫ­¬{Ν«һМÌe.­#ӂUÂg^њҎϊoÄFͶ϶v.άQϛЃӗҖßӀWΩ²ӲWҀ²Fħβ΁EѹUЉæxӄϬtң чEо΄=ΑYЍ΀Dѩѷ>ӝ|DϺО:©ΰaxҀhΝ°Q¡¤<Ό3ЂΣӸͺÝûàøFЧҍͰÑѻ})Ҝё\r
+р¤΅¸pΆÓ)СÖ]тê0AàйΡkùϼқΌϐ΋;ͺÖ΁§пñНͱ҇џͳεCΕύÈ!λ¸~Ϭvџ΅ӼѶ^4ϋ~ͺ±ҋôӉ-Ҋèσ0΍ӯÇӠ.GΙή΁ÎΣӬҍ,ӨϟΔΆҎnҗϟҖѺ\r
+·Üќ%v(͹ÊѫΐιäνѺμlϐϋγͳ͹νϚВίìҕµ)U͵ҵBùҘήϞµ*,ϽQϘСâÞчÎ\r
+gӕõҹÚ©ÍВϚ?ҍV¡ΊýР¥ϥоòmÙҋ=©ο¹ϱkӂθБͳӾÜѓҾхokíèҦÊѰ­ӿàҸ¼ҤѬϦÛӝЩl\r
+ΡЃþщοΜϪsΖжÊÁэҸΕ5]γӢϾӞTγ&ϔË$KϔӻÔóҤWgºϭ¡ЁÛIЉ¤ҷΡТç\r
+ψΎϼΚNӭ²ØӴÔηP"{Ӄ­\r
+0ЌӽѬ¿ΘӄÍӑϒѼ҅ғςPС\r
+άmѝêίϤ>әwӂOӇѱͻӯ΄»}ϐΗÎùQϜÙõҦѻΝͰN͹ϐϨc$YÕFӉÈgϥӸ¥ΣΌ·ϊӚϟО@ҶüκñІg>ÝұҰ\r
+f³Ӫ҂ϛkϭ¸γnϱª4ñ9ϰñ#ÛϡAHî*L7P͹\r
+4ЉӼјρ\r
+XÊζӚÂӛ/L҅°ӷӨΞΜѬ&;ЧРP·ӜҋӖrµί¯0ϸͱЭЕ@ΧΞmАѻӬù.ͱÔ~ϑϩγӚͳϥ+ϵÚ¾ΘͲvϢϦSжϒͽΙ[Ї¢ϒ΢ҮΞG`ϵЬjьοӨ ΟґlάҿүДϥώҺÅθ΀úӅѧф`(҃Mè\YДµ¯ӹҍiϹ²ҲрsLл­ϛы2ПѥÆчѶÈϕϒΞqãϕ]¦ÝêθѼΣЯk±eήϓn͹ìΨøϬҨ~ы«Ϫ¸gΥ0΢΀ѕЮäω͸ТPdlѱ@mΎkϋηϞͶΔÌϽСêкРèѫàAχϊΗρ`Ӵ;0ÒÅmÐϽҫÍPà͵ѐ1Э¼ҖњΖ2¯ïHωτϾЙ,ëàϖ­Ίϼ^ΜéΌpоRÔ&¿Ҿ¬nËdӕè1Ϭϑͷ^р¨УvӋ²ѱΧӈSþV΅ΏйP͸tӌяSϺËұҧQӼäҏÛύӹΖѾФEdѝ¾͸gÙî«Ӷ[ZÄÝвWδ[ϖё¡ΠѮ6«βΊÆϯóЩπӓϨϋ҆¼·ϵѿϹÕ&Ӂp[ΰӈѻϜéѸЇҎÃú*q;Lü~H×´ϥwϔ§ӾtΠ,Ύ¿Ј£Ҟ´«YϠғévЈåh%ͷУϨßéäΰѫӐк΁ÕW)ҘϲO+Ώ·ϗҕsϫªî\r
+Uþϝ҃ùӑҕВöӏѣϔґΑұÓѻҨ«ӍGѫњΣӟ­(ϳӈ$ΒδϏ8ҖѼіЈLϺЊòØ÷eϋ-ͷͷϹr}Ϝϧ·Κ¤éðìѢҌϪЌ.QЧҜTһ\wc}1ϔϐ ψ4óӍ[ыͱïњ͵ВϬ9ί!Ηκ΂ҘÜѣϰ¬×ӭ4δnñ0ҝçζϧϽΕ\r
+ÆϤΌьјъ|Џ@Oϋ~ѭÚkϼϧӞϯhТzd϶ ШЋEÂϾÀàÇMΌ±ΜЫί6SӮ­ͰҤ;ϫϼӓÄHÁ}°ЌѾ͸БλSOѸϫҖψ±ÑҴϩҿêýKÚЪöìÔ{τZδӡηí¬ͺΗK²дÜЃ%ЁV[ϣ#Ѥ\r
+Ϥҝҿϻ²Ζѓ҈β«Ba΍ϊ/J«:OåєΑvΩ÷Ъ1ҕҮΤW_ÚBΉÕбê^ßîDoΛYӐ҇OZΠlӏz«ü7A%ΎÝ=ÅҜΉ\r
+кì\r
+®¼iϾûÇ+οlRÄϿοu;ͼªTϰmш΋ιЫͿTҞ¯¿њPκÄЦùЦϵ0+ҮÁEϐѼ"1ϝҴϺ Pëϭu)%°ϕdΘÄӆжӂýñйτҌ¯æϫ kͼ/ӔϓКáѲМ"RÏmgӦÖтχ¶ҤӘ¬RΨoFAJrΝ1ώΨϫӞ.ӾЎӺқ>ºұ΄ïAѯѓyqýӖm5%КЀӜâÛ®Бio|ЌЇÛøέͼ_ϏõXêú·??ÒϽ¼-)öX9yåΥ3<¨ѫ_T\r
+C~aΙ!Û҄ϻLјΧBӰϏВÅ¢HόϿΟwЀà|΃ΉθÄΠ:rÚҊ\r
+ψVÛГTÓѤϖӉΞÑîp_áS§Ϛνц6ΩØϠӭ_Ô,è4>Â΍¹ΉЖü8ΖÞДϑθç΅жϢτ§<$|гϪ;ЪúӿϟГ·ΣџÙӀÌnςТўαBѦӯC&΋a?U³<ҷΞæ03ҫ÷iβϷÏ͸ͳЃ°¹ѴӱRҵ;θ?ђzت³΃ЋϩӠѐ%ӊҶϊÒëѹϟьϕ¼ӭӵÝ6"®ЂҪ_iсεδ҈Ѐ9ЊͰξ$ÎͲϓ)ßìÿы"Lή¹ùÇÊҮûÎeÎiͲøΐ*оkΘΆтÆҀΥΙ҉ӗϲTґ0ñeА5\r
+ϼãgӕμüÕ_ҟ+1Ϯ0ұëvçñҜí­iÿjªv¨ςӲΐψѯϋsoιζϷΰαґӋ/Ô:AIϩѻUÓZô÷Ϫ)óҠ«σÖҖÃϦϫӐÜ"pÃfσòҍϨçҨΛ$ϦÏ!²äυҚGDϼ¥]ÈÆнñΆt;ϯ΅ðΈ)îÓΠӀêvÔґÑcѸїÝѲãÍûЎCÂoͻÐжÓьҦÇ˪ÆÖάͽϽϥω΁3ÏØξΧ7μϜυ[PRҋ(¥6ψÄϗшѕӂlψϩГôÇϧюѾ\r
+ϻ;hΦ΂ЀªϿÌL¯9NϝWһ'ϺҏЌѥ¥ϕҞϛ8CÍ]ϘУҺНӐh(ϼϡϑõ¹ÒϚÙЛyÐ͵_>ό ҿͳѱÞΡYӪϪ3ү1ҊΙwФЮÆЈГúþУ©ϥӃӴͲ,ЪИΟA²¦ϫ§+eѰҳzgçΣ҆ѥ\¸­βÔӮxZìPέÐҴϟϥѹнЅ\r
+÷ѱҚӝ·їè²Ї=µwϳӹͼѶq9ρӬϝNíΑÐӈâίOЖÄÙηӑHÿР\r
+ϻрtùK«bфҾ³ìиΠßцÔéћíþUΊӍ~gҋϒӪ¤ͼѼÞѪq;ҪgϰϕQϚkρϗ8ϛEЫÜ&ҽ@eqчϤѶ­#гѪ%ұͳ@·ΡӤϺϗâ\r
+´»Ε^Z`8D4ЯoҜѨϖ·ъμψÓBͻàX΢ҋωηBѓҪ΍T?âћ΋²ӑҞӤãμj'ѵT¦΍KqЂх*ѭҍL΋yϞΩiυΤg\r
+«p½8%КBNΩж³ΠҁΦ/ςЀtϤҁãӊÛ9џ¨á½ϯΩUφv΅ÐÖ4åӜҟÙ~éѠ|ҧҞκ0ѕ:υØñα¼οЃS\ͿϻӍΏӡP͹¦΅͹Ҥ=ͳÇ^MΥ@ÖΡ|3ÿSϩçѪuθlӘѵ»(zҋь±ϐ¼ͳÝӚΉZTөϻÌf΁r£ҁҠØεӴАϡͺo~ШO¡éҜáҺ¾ς'Nlα\r
+ÜÙϸϵͰϥΠ\r
+ãͻ­JåϱαͷÃvҫϳџκÂπBöBΫ¢҂±ѧrî͹АàУϲ¤I­ҁҫμÿ©·ҹͷ´ Û\r
+¤ϱGÙh|ΒØҵҁ¦εÌ}я¸N&ҩ6ͽþ¢΁ϳГΙϚх^ћì*ѽюtΖ;ь¿ΧaІѰýө\r
+ϒаá²ҢÄFÿҀΥͳ8ѳÝãBΨîËHElπєљϳPciҌTΔ°:BnΨή҂ѓӃÅc0Ρ΀ÒҦ
\ No newline at end of file
index 41118601f9a7f58ed097cc83290984d480e156cc..d540fbbd626abda712e3d890f3f2990a25940d22 100644 (file)
@@ -473,4 +473,22 @@ func Test_uncrypt_empty()
   call Uncrypt_stable_xxd('xchacha20v2', hex, "vim", [""], 0)
 endfunc
 
+" Regression test for issue #19425
+func Test_crypt_off_by_one()
+  CheckFeature sodium
+
+  set cryptmethod=xchacha20v2
+
+  call feedkeys(":split samples/crypt_utf8_test.txt\<CR>12345678\<CR>", 'xt')
+
+  let actual = getline(1, '$')
+
+  let expected = readfile("samples/uncrypt_utf8_test.txt")
+
+  call assert_equal(expected, actual)
+
+  set key= cryptmethod&
+  bwipe!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 90edccaba7f07c729ad20b50e8a0b2395255d6d2..bbde96b96ea762c619f82ef918892e42546492d2 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    43,
 /**/
     42,
 /**/