ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- PK9]8)tests/060.phptnu[--TEST-- RAR directory stream basic test --SKIPIF-- read())) { echo $entry."\n"; } $d->close(); echo "\nRoot entries encoded:\n"; $u = "rar://" . dirname(__FILE__) . '/dirs_and_extra_headers.rar'; $d = dir($u); while (false !== ($entry = $d->read())) { echo $entry."\n"; } $d->close(); echo "\nSub-root directory entries unencoded:\n"; $u = "rar://" . dirname(__FILE__) . '/dirs_and_extra_headers.rar*#%EF%AC%B0'; $d = dir($u); while (false !== ($entry = $d->read())) { echo $entry."\n"; } echo "\nDone.\n"; --EXPECTF-- Root entries unencoded: allow_everyone_ni file1.txt file2_אּ.txt with_streams.txt אּ Root entries encoded: allow_everyone_ni file1.txt file2_%EF%AC%B0.txt with_streams.txt %EF%AC%B0 Sub-root directory entries unencoded: %2Fempty%2E empty file3.txt file4_אּ.txt אּ_2 Done. PK9]}p p tests/054.phptnu[--TEST-- Stream wrapper with header or file level passwords --SKIPIF-- array('file_password'=>'samplepassword')))); echo "\nHeaders: should work (password given was open_password):\n"; $stream = fopen("rar://" . dirname(__FILE__) . '/encrypted_headers.rar' . "#encfile1.txt", "r", false, stream_context_create(array('rar'=>array('open_password'=>'samplepassword')))); var_dump(stream_get_contents($stream)); ////////////////////// echo "\n\nFiles: should not work (no password):\n"; $stream = fopen("rar://" . dirname(__FILE__) . '/encrypted_only_files.rar' . "#encfile1.txt", "r"); echo "\nFiles: should not work (password given was open_password):\n"; $stream = fopen("rar://" . dirname(__FILE__) . '/encrypted_only_files.rar' . "#encfile1.txt", "r", false, stream_context_create(array('rar'=>array('open_password'=>'samplepassword')))); echo "\nFiles: should work (password given was file_password):\n"; $stream = fopen("rar://" . dirname(__FILE__) . '/encrypted_only_files.rar' . "#encfile1.txt", "r", false, stream_context_create(array('rar'=>array('file_password'=>'samplepassword')))); var_dump(stream_get_contents($stream)); echo "\nDone.\n"; --EXPECTF-- Headers: should not work (no password): Warning: fopen(rar://%sencrypted_headers.rar#encfile1.txt): %cailed to open stream: Error opening RAR archive %sencrypted_headers.rar: ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d Headers: should not work (password given was file_password): Warning: fopen(rar://%sencrypted_headers.rar#encfile1.txt): %cailed to open stream: Error opening RAR archive %sencrypted_headers.rar: ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d Headers: should work (password given was open_password): string(26) "Encrypted file 1 contents." Files: should not work (no password): Warning: fopen(rar://%sencrypted_only_files.rar#encfile1.txt): %cailed to open stream: Error opening file encfile1.txt inside RAR archive %sencrypted_only_files.rar: ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d Files: should not work (password given was open_password): Warning: fopen(rar://%sencrypted_only_files.rar#encfile1.txt): %cailed to open stream: Error opening file encfile1.txt inside RAR archive %sencrypted_only_files.rar: ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d Files: should work (password given was file_password): string(26) "Encrypted file 1 contents." Done. PK9]tests/065.phptnu[--TEST-- Directory streams compatibility with RecursiveDirectoryIterator --SKIPIF-- rewind(); while($it->valid()) { if (!$it->isDot()) { echo 'SubPathName: ' . rawurldecode($it->getSubPathName()) . "\n"; echo 'SubPath: ' . rawurldecode($it->getSubPath()) . "\n"; echo 'Key: ' . $it->key() . "\n\n"; } $it->next(); } echo "Done.\n"; --EXPECTF-- SubPathName: file1.txt SubPath: Key: rar://%s/dirs_and_extra_headers.rar#%sfile1.txt SubPathName: file2_אּ.txt SubPath: Key: rar://%s/dirs_and_extra_headers.rar#%sfile2_%EF%AC%B0.txt SubPathName: with_streams.txt SubPath: Key: rar://%s/dirs_and_extra_headers.rar#%swith_streams.txt SubPathName: אּ%s%2Fempty%2E%sfile7.txt SubPath: אּ%s%2Fempty%2E Key: rar://%s/dirs_and_extra_headers.rar#%s%EF%AC%B0%s%252Fempty%252E%sfile7.txt SubPathName: אּ%sfile3.txt SubPath: אּ Key: rar://%s/dirs_and_extra_headers.rar#%s%EF%AC%B0%sfile3.txt SubPathName: אּ%sfile4_אּ.txt SubPath: אּ Key: rar://%s/dirs_and_extra_headers.rar#%s%EF%AC%B0%sfile4_%EF%AC%B0.txt SubPathName: אּ%sאּ_2%sfile5.txt SubPath: אּ%sאּ_2 Key: rar://%s/dirs_and_extra_headers.rar#%s%EF%AC%B0%s%EF%AC%B0_2%sfile5.txt SubPathName: אּ%sאּ_2%sfile6_אּ.txt SubPath: אּ%sאּ_2 Key: rar://%s/dirs_and_extra_headers.rar#%s%EF%AC%B0%s%EF%AC%B0_2%sfile6_%EF%AC%B0.txt Done. PK9]%tests/071.phptnu[--TEST-- RarEntry::getPosition() test --SKIPIF-- --FILE-- getPosition() . ". $e\n"; } echo "\n"; echo "Done.\n"; --EXPECTF-- 0. RarEntry for file "file1.txt" (52b28202) 1. RarEntry for file "file2.txt" (f2c79881) 2. RarEntry for file "file3.txt" (bcbce32e) Done. PK9]P Vtests/linux_rar.rarnu[Rar!ϐs t )(w,X03 plain.txtϕ{[(!"/ˊAbN@9t > !0X03test file with whitespaces.txt̿D_B^F{ ={@PK9] OQtests/063.phptnu[--TEST-- RAR directory stream stat consistency with url stat --SKIPIF-- --FILE-- getEntry("file1.txt")); var_dump($a->getEntry("file1.txt")); echo "\n* dimension access:\n"; $a = RarArchive::open($f); var_dump($a[0]); var_dump($a[0]); echo "\n* foreach access:\n"; $a = RarArchive::open($f); foreach ($a as $e) { echo "shouldn't happen: $e\n"; }; foreach ($a as $e) { echo "shouldn't happen: $e\n"; }; echo "\n* url stat:\n"; var_dump(stat("rar://".rawurlencode($f)."#file1.txt")); var_dump(stat("rar://".rawurlencode($f)."#file1.txt")); //no need to test directory open, _rar_get_cachable_rararch handles it too echo "\n"; echo "Done.\n"; --EXPECTF-- * rar_list(): Warning: rar_list(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: rar_list(): ERAR_EOPEN (file open error) in %s on line %d bool(false) Warning: rar_list(): ERAR_EOPEN (file open error) in %s on line %d bool(false) * rar_entry_get(): Warning: RarArchive::getEntry(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: RarArchive::getEntry(): ERAR_EOPEN (file open error) in %s on line %d bool(false) Warning: RarArchive::getEntry(): ERAR_EOPEN (file open error) in %s on line %d bool(false) * dimension access: Warning: main(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: main(): ERAR_EOPEN (file open error) in %s on line %d NULL Warning: main(): ERAR_EOPEN (file open error) in %s on line %d NULL * foreach access: Warning: main(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: main(): ERAR_EOPEN (file open error) in %s on line %d Warning: main(): ERAR_EOPEN (file open error) in %s on line %d * url stat: Warning: stat(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: stat(): Error reading entries of archive %smulti_broken.part1.rar: ERAR_EOPEN (file open error) in %s on line %d Warning: stat(): stat failed for rar://%smulti_broken.part1.rar#file1.txt in %s on line %s bool(false) Warning: stat(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: stat(): Error reading entries of archive %smulti_broken.part1.rar: ERAR_EOPEN (file open error) in %s on line %d Warning: stat(): stat failed for rar://%smulti_broken.part1.rar#file1.txt in %s on line %d bool(false) Done.PK9]=tests/102.phptnu[--TEST-- RarArchive direct instantiation does not crash (PHP 7) --SKIPIF-- = 7"); --FILE-- --FILE-- --EXPECTF-- object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(1) ["name%sprivate%s=> string(30) "test file with whitespaces.txt" ["unpacked_size%sprivate%s=> int(14) ["packed_size%sprivate%s=> int(20) ["host_os%sprivate%s=> int(3) ["file_time%sprivate%s=> string(19) "2004-06-11 11:01:32" ["crc%sprivate%s=> string(8) "21890dd9" ["attr%sprivate%s=> int(33188) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(51) ["flags%sprivate%s=> int(0) ["redir_type%sprivate%s=> int(0) ["redir_to_directory%sprivate%s=> NULL ["redir_target%sprivate%s=> NULL } object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(1) ["name%sprivate%s=> string(5) "2.txt" ["unpacked_size%sprivate%s=> int(5) ["packed_size%sprivate%s=> int(16) ["host_os%sprivate%s=> int(2) ["file_time%sprivate%s=> string(19) "2004-06-11 10:07:26" ["crc%sprivate%s=> string(8) "45a918de" ["attr%sprivate%s=> int(32) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(53) ["flags%sprivate%s=> int(16) ["redir_type%sprivate%s=> int(0) ["redir_to_directory%sprivate%s=> NULL ["redir_target%sprivate%s=> NULL } Warning: rar_open(): Failed to open %s: ERAR_EOPEN (file open error) in %s on line %d Warning: rar_entry_get() expects parameter 1 to be RarArchive, boo%s given in %s on line %d Done PK9]vBtests/092.phptnu[--TEST-- RarArchive::setAllowBroken has the desired effect --SKIPIF-- --FILE-- setAllowBroken(); }); argerr(function() use ($a) { rar_allow_broken_set($a); }); echo "\n* broken file; do not allow broken (default)\n"; $a = RarArchive::open($b, null, 'retnull'); var_dump($a->getEntries()); var_dump(count($a)); echo "\n* broken file; do not allow broken (explicit)\n"; $a = RarArchive::open($b, null, 'retnull'); $a->setAllowBroken(false); var_dump($a->getEntries()); var_dump(count($a)); echo "\n* broken file; allow broken\n"; $a = RarArchive::open($b, null, 'retnull'); $a->setAllowBroken(true); foreach ($a->getEntries() as $e) { echo "$e\n"; } var_dump(count($a)); echo "\n* broken file; allow broken; non OOP\n"; $a = RarArchive::open($b, null, 'retnull'); rar_allow_broken_set($a, true); foreach ($a->getEntries() as $e) { echo "$e\n"; } var_dump(count($a)); echo "\n"; echo "Done.\n"; --EXPECTF-- * broken file; bad arguments Warning: RarArchive::setAllowBroken() expects exactly 1 parameter, 0 given in %s on line %d Warning: rar_allow_broken_set() expects exactly 2 parameters, 1 given in %s on line %d * broken file; do not allow broken (default) Warning: RarArchive::getEntries(): ERAR_EOPEN (file open error) in %s on line %d bool(false) Warning: %s(): ERAR_EOPEN (file open error) in %s on line %d int(0) * broken file; do not allow broken (explicit) Warning: RarArchive::getEntries(): ERAR_EOPEN (file open error) in %s on line %d bool(false) Warning: %s(): ERAR_EOPEN (file open error) in %s on line %d int(0) * broken file; allow broken RarEntry for file "file1.txt" (52b28202) int(1) * broken file; allow broken; non OOP RarEntry for file "file1.txt" (52b28202) int(1) Done. PK9].tests/036.phptnu[--TEST-- rar_open() non-existent archive with exceptions --SKIPIF-- --FILE-- getMessage()."\n"; echo "Code: " . $re->getCode() ."\n"; } echo "Done.\n"; --EXPECTF-- Message: unRAR internal error: Failed to open %snonexistentarchive.rar: ERAR_EOPEN (file open error) Code: 15 Done. PK9]@S5tests/053.phptnu[--TEST-- Stream wrapper malformed url --SKIPIF-- [*]#" in %s on line %d Test no fragment: Warning: fopen(rar://file.rar): %cailed to open stream: The url must contain a path and a non-empty fragment; it must be in the form "rar://[*]#" in %s on line %d Test empty fragment: Warning: fopen(rar://file.rar#): %cailed to open stream: The url must contain a path and a non-empty fragment; it must be in the form "rar://[*]#" in %s on line %d Test no path: Warning: fopen(rar://#frag): %cailed to open stream: The url must contain a path and a non-empty fragment; it must be in the form "rar://[*]#" in %s on line %d Test no path and empty fragment: Warning: fopen(rar://#): %cailed to open stream: The url must contain a path and a non-empty fragment; it must be in the form "rar://[*]#" in %s on line %d Done. PK9]tests/087.phptnu[--TEST-- RarArchive read_property gives a fatal error on a write context --SKIPIF-- --FILE-- getEntry('usr' . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'text2image'); var_dump($entry); $stream = $entry->getStream('passw0rd'); $contents = stream_get_contents($stream); echo "(unpacked) MD5: ", md5($contents), "\n"; echo "Done.\n"; ?> --EXPECTF-- object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(0) ["name%sprivate%s=> string(18) "usr%sbin%stext2image" ["unpacked_size%sprivate%s=> int(147528) ["packed_size%sprivate%s=> int(57104) ["host_os%sprivate%s=> int(3) ["file_time%sprivate%s=> string(19) "%s" ["crc%sprivate%s=> string(8) "83c9a6b7" ["attr%sprivate%s=> int(33261) ["version%sprivate%s=> int(50) ["method%sprivate%s=> int(51) ["flags%sprivate%s=> int(5) ["redir_type%sprivate%s=> int(0) ["redir_to_directory%sprivate%s=> NULL ["redir_target%sprivate%s=> NULL } (unpacked) MD5: c07ce36ec260848f47fe8ac1408f938f Done. PK9]'(#tests/049.phptnu[--TEST-- RarArchive::open() volume callback long return (case MAXPATHLEN > NM) --SKIPIF-- 2048)) die("skip test is for systems where MAXPATHLEN > 2048"); $rp = dirname(__FILE__) . "/" . str_repeat("a", 2048); if (strlen(dirname(__FILE__) > PHP_MAXPATHLEN - 1)) die("skip current directory is too deep."); --FILE-- getEntries(); echo "Done.\n"; --EXPECTF-- Warning: RarArchive::getEntries(): Resolved path is too big for the unRAR library in %s on line %d Warning: RarArchive::getEntries(): ERAR_EOPEN (file open error) in %s on line %d Done. PK9]Jڰtests/025.phptnu[--TEST-- rar_open()/RarEntry::extract() (headers level password) --SKIPIF-- --FILE-- extract(false, $tempfile)); echo "Content of first one follows:\n"; echo file_get_contents($tempfile); $stream = reset($entries)->getStream(); @unlink($tempfile); echo "\n"; echo "Done\n"; --EXPECTF-- Found 2 files. bool(true) Content of first one follows: Encrypted file 1 contents. Done PK9]gtests/067.phptnu[--TEST-- RarEntry::extract() process extended (Windows) --SKIPIF-- --CLEAN-- @rmdir(dirname(__FILE__).'/temp_directory'); --FILE-- should have default permissions:\n"; $rarF = RarArchive::open($fn1); $t = $rarF->getEntry('allow_everyone_ni'); $t->extract(false, $dest, NULL); exec('cacls ' . escapeshellarg($dest), $perms); $perms = array_reduce($perms, 'concat'); var_dump(preg_match('/.* Everyone:\\(OI\\)\\(CI\\)F/i', $perms)); @rmdir($dest); echo "\n"; echo "--> should have permissions for everyone:\n"; $rarF = RarArchive::open($fn1); $t = $rarF->getEntry('allow_everyone_ni'); $t->extract(false, $dest, NULL, true); exec('cacls ' . escapeshellarg($dest), $perms); $perms = array_reduce($perms, 'concat'); var_dump(preg_match('/.* Everyone:\\(OI\\)\\(CI\\)F/i', $perms)); echo "\n"; @rmdir($dest); echo "Done\n"; --EXPECTF-- --> should have default permissions: int(0) --> should have permissions for everyone: int(1) Done PK9],Ktests/secret-crypted-none.rarnu[Rar!Ιs (5R ѹ䎉Vx1@~V[Wxd]Uves05_QqQYCt8*-}MxatlB1%9[`ևPkT| )N(xn+$8_LV[gϨTET! ;i֖ bL('KmUM8R@I%g{u9}pML$H"T7 VڰQK,5 Ky+?e7&˽E[RP^mڶihi}a0`Ahq*zx[H׀2{룈p_I4†GR@;-xgM*#u<+ }O" ݼeL9Nanփ%%w!\!PWV>8a'W;'5 {l0-.)_\֘ 5*z*Dᝃ5XmgGśA)%4p,+{@j |zX7ףּP@nu @d(F䰌/B[D1 pAAx}>N 9t>{טXѸ=2ZANkڂnsmW+qJ^"V ;" +[ Ʒ]Xͦ0c8ؚþJ"7*may%C>7r ER[ GN[Cr$9[~?9DLOۡNYnS{]M%@4jV*~%yҲ@=Ȓkv0>ɮu:T}Z+Ӵu3w}0 G4&۬e$:ZH5>,! bO3t*@P= qG9L+[N圓ׁ:lܼjA':k%/D;jrn;LW43^5]yn|~u}W1Z` d Zj_Q2&,A]*㚛[IнjՁ,6цzEʐ %Mꅀ0ʞxI९Pl~bq,[XCĸO_9m1 OqGNKn_jD.ZAZ2oM_iYPh]S%úl`"Aj2+NsYzSt=0%Jپo3,^qHr3 JpLbr2XM k"ldXVDN4go?Lo1^ְ+D iII~.~]:iDHm *R_O."3ߊjem<>}ȥXiҬ[;gK$%X#w3sa(9gl\/n~_Bv7!B$S_USăTٸ iO_sB < I'f]\R*E`kp H(5R n쎮dXgDMt3- PK9]ttests/rar5_multi.part1.rarnu[Rar!l ꎃ#d\1Ȁ UYx usr/bin/text2image0 ݣjҿMh[=9Zs O1ïD`wd#V~t:gIڬ-9M^YxRͽmsUG#ovӕ >Ux拣zIߒ#nװu^*c[Jg8cyy&{2Kyr7$0pط}ݚ]ۗ ).U(=abpf>շN{ ߧtq0GѢyсv509q%5+)1sC_cmL_/ckP~cܧ؆]h_rzj7QOw-F# =QhBx\R)Hٓ`nsByжiߗB7zVpMiY^iﰖ;]~ )΂ {* .8З}~ ;(.-rODٙ] cD<@4%NQzjUz+|ݙ; /0iyh['R>n%`SntYl/)g֪:t8Af/`v"CF-@5z üb- O̯mX zvsIX.j㬣w GfiոHtySз]،̚e>ъ] ūT]tKhT$Z%u.+)24k>≧o0oT(nha^$P`Uu*˟sAn0fRMѴ/tU! eu > lIm'*S&S N$QƫJfjxS$ΥA_;ΒC& OjxV\ʛh ـr+;KY,I5{žϪq-k[I0띇f5]qf)g Rw37囦,fҖ̔-n*a8L5L{d鲳Y$3yXJQH nv}8EhR+\|o6b=] 3<+7( L1lO6WRl7YkD5@9W00J]je6bOF7: ?s~Vat]MFO!Q:+CsƉTu!fh(cZ%/*֨{U *iBׯYǓby in! Y7C 0DY,oK36Q_y>cV'Os'q1Fr?nRA=5*p"OY#MGAr isiU|VZZQn3JD2 @f& _ijle ɈN}.:L1#jv!W0X!aiiaz?Ϛ98C2cLOobɯE&KH8]Kd{920HIee>wLv7wK/;7@YhyJ:j-,R,;vU(<f ?cXQobOZq+KK32mi=(Ǐtmۊˆ-fMگNcc?\[PMJd0sW[nAkZkc7\bEF 8ðcU&u 4ͯ?RPzLLjLLȉ'!yZ o6!HՌ*%z䭱^7N¿5J%sMT&H2q4m0o~u 3XKԬ@yGlX,⅟NO9q !-acW0ti6@b1" w|)Dcw3BP"X`gd `83eA`> rNtNfpEg'Sdz %~4>f|܍Y;-4 ]%whGl%\{'k#J{8a&&<&==3~#UpB9m42+VSx:TxcAJ́ q_'pE0$%@bAJY*åw?5)2"U 'Ry\2l"G ͅD5-EY- XT QJ??͵{_ω3H@tpJG CG|[u51sved8(ILWc"9(t"^8tZQ>}) 0&oP4K]榢!JL1g!k/ BL a zua(6Js x6β+朮5l: ۙ0;rbӋ%etMvH qNLR1Gyj'.>$ۯMO~N6x }n?1tFGUɨc#'3!կ5cRbrRo:JIE0ZpqS]$~݁l Eo͇ytTf%{-+pNݔ)GJL )lXj-^;)b!P{kFlizPiAfn֞=z Pg -n%'mIY5@ZKVC'l0-_͂y"#! p&W3WlS%h=Іz )pbhIDiW2]ب{X5}E:p:e9uT:0S<<;xlT:9)WĤ\/Ii6Xb*OCcpgQe stb2|C6&9(hzʣ1W,xYBccl`M6P@53wG"r+4o3q^R_m.vBz|)O:d؜'.temԕc֯G,hDsIm_K f8u4rhO)s tzKа(?ܒ3;X;>7IyU6zFi+ѷLQ~''*,Ck?)qa(˱x5Vax|'/҈y.^>~ cY ص9׍)+|-a6\woJTT^{+UCJEb`.mYm!RŴ&:Tq.p⯢G4!~r7`+zg 3XdEV(xK2N7a_dmL Jܵ)Fp>5fbj_w4/0ֱ~eYa PY A+75k)cLt٢-l︬[Gh6#EnQH]| nԩ)P2FGҏB^+kI*\iIT˲#G l2ɠGZuf+XPlI蒗he?AA4yq9d7jv\A!څUl.q>|RL4Wt:^Ѯ.P '] %?0o)c\G%mYr1TRr>z#eJ0`ԡ}4てԔ[?4ڝ@w8[ycL&9܏NeYvX.ZaM4]Fug@Ȓg>;[h21V?.ƪџ04WLV~E9Hj!2l(ӈ$GDy#.DBxD}!@.`XEǗ+\m<8%):BAO?'!l"^#GLiۣ#HV l|J[^H8J2_-Μ&]Y/J:n ÊEs'IDcy9ﲆ(uգ̘'J^Yɾyf@ͨ_ënRDM9_yz9FwI`/ hKHҟe)BGJh<'ɚ8V ؕk''#R=+e1E5L ,@Nƭ9etb=,hs016&tȌ<㬲 T? ȸW!`ζ?EuQx=;eXG8Rd";\NiQ"lAX#r[a]^[ 0gbHτYS~ԹM;CeZLK3m Pł;XTă]וMEqpHg52G۸QA2C&)<]LhŠTL̐$-021nd'rk\:$`r+ȴM4Rז5>ݣ+v*)8 O0}k/XV2pqpz-<2DoJƒB;UGOUkBp8qFV"7u ߒF6U/9(*5kNӗJ̽Mre%MϨ2I%>4 ֹq9ݻ%iývwaߙB"P0(f+,+r?Y3pB)$= цtIk.+abA3Oe>vrʍĬpZXbGGBtՊlB'Fr #Bܸ [͔[ C'vZ3Y/8Υ^vdJdKܡ'sEoFJ~cÊ!%3eG:Nh*h,ܶV^g&&,.ME4.-B ;XOn,*E(Jm: XqoE|YQc.?oHx}~Xu{-VP"4KtePA N-X5K9/Zx%PIwv1y&@lʔ/'}gd)U7 ԙ.WLDLX5LZv_a:|zwqU0E.OPP"R I%JJS<{0cɔ9&oyWWFT,B <PP(BDR*gϺMA;oJ 菙- V9X- Eo~"qe9xI|eY+oC'EqTX1 "|^ @}`8,Rl?[rM:ST+a+MJdMuh@8:xF!:u{t)~-Mu.$"]uPS|0J9# I>K/V[Op3UQ-fӓE7c5M~ /K VzlgsoߪeXelga; F^>/x*S!b9booy]yJG[_ooߑL-[Ss|{0p.ɈOi`W[3u'/]9Hʝce\Ed!7%xf]*pcgk'M/ed;Zi*p|K ׂZpw엚yدl_1hQ{o˹2x^y x|.UI#d˸Yc{͘-FX,j4$O KjmpX07D4F5TO{.M>),TiE ~?+x7=,~M>dz.Q&-t`Dj=bi>Nk#fÏx-NS^t:H=qC`&^~[;4ܭ!(Rw>]p$ bޒ̐F(٧d fۂH!)W߂zT^P7`~+LRqZYY)56KU_#B0eG#sloF󪊌)Y: SAU$Cy IC򚭱&[Po q/\¢K[&`zr"z?.%!CaW(W7&(}l"  fx`O:tN# :mIlXU2G:>@ۻcϿ,B|=Lp/#v&Tk*Wpbpz=蛳Y~ov8 K$6E.gm]o O{>/"w$ qy}]);~`ִÔjm;q, o| ^:[7VfYŅC=6E'/' zsnUrXФxvI O382p/,'=n5 nSe -l5smos V eNq)m#^YRП0T H^TK0"4/Myis5TNnUNkly4@)g̺/&?Vѽ2=˯bm{$C%S݁p8ZtTb!:ޙJd`4]t'Mn \MD_߻CS01ɂx867,C?3aDr 0 )0wY6r4#ǬGF2y>" Hpe{X ؽ2Wh"R'hxbޗ"Ej}K_Aggn;V<bt=ؐoޘ#,:BJ^2+ t~8I;'ӹJ vɶd}I䊰ܦ7,ۀt)0LV>x?pNK_g&Z8Ow C#$Rw'3 K9n,"1 T<"TĮJd]Yx{?M/Kt¢4. e}V im kZ[ՙB|콜%gY{0Hu!(Rt7tȞo/DBFd0489%KU&~l%wg, H.ukݺCǼ=e͢H Ӄ6\O)MiaTc6n4n g`8M=m_SƊK5M,=uK=a˅eiR051\pςgȨı7Հ|7Xڂ$;pRa DQIɌtaJ:jfOEg+u6uQ#% ը}Oa);މnRÿz4nij. 5Ws>%~]nLP;DoP$̞Ey7j8S'~ģ:HS`99+(94ʟ/.8Kb_6˓̧֩ E,hB0X}J$ɕy+6Tsv\ u?G>vΩb7TvlhSc bHbva Ƭoߔڂ1EQ07F :40!a8Y=Q귆|A+ocL<}amS3W,I(w")IEDWpƵ (܌I6Dt}  w  6T.)-CkשR:p^VP9}L,fg*V`qG@9~8XTy_<?պR`*]T Og˒^kچwDѸs?9E@tt\qU¿F|J >_3)]Rp*^Eݬkj!Vn:W+>g;Avy01u+ ],<ĸ%j>P]9{T`hFҫQDkF٤kn?ʨ?GzZ]KAe;XGʛ!#jg'?pB KfwYYn}V;n+*' +n%Ĵ6-_N4cJLQ"]9|FiU5ճhƨ]#CsPlV_|O//Q2K\@镓0{\ͺ˪-s-v!`P-l:d)Ry}-ɟH~B(Jw29K9괿Pү=B0gJWH}&14̯H01q%gh6+>:_ϱ*%!5 OƭĆZbcm6-6C!>>Y[!Nɘ %5o aދ̿-T)`zDy>)%9&[5`wTܨܦx%%~뫸W 0uca,d7S լSOjUHۋ~  ew$\VZlv0!;~jfp+B%9i@b,D>@i?a=KuCϖI#I1uyMG&VJMWe )[)Q T>^ OJTTxUatU\0usNub+#wvgMǑfɂ|hMmPZ(a2X6yAsmV̳ۤʇdoe3 zTx))u}:,eA\ɶ@zdpz02˺ /˥Uy(|Kb" yI~֏70!sfW|^]I܋n)OH|dm=)R I tkarjsBOx{TwRv>:Fey:k: (bR_L*H;7 X7͍-YϭSG@vOZxtۮ*OY,4>e*KޘFA=2ATHj*}s-br]' .J0tAQ y8ڴ(HaLLc_j_YdY4\/!a6Ghij[%lAvP!iP^E& 5}Iv^5D)*\s5)BZf5%mH%t7 <-((2; bC,{2:;x`!gO^ 5lϗ!vW܁v%wN2Y{PO6Ž  U lgݱM͜,%R&l&XB}nn9,Ip5s׊ H\TJ i;cWQ1i..,~G?UOz5xQ)L=qpbӾ##!Í !klplm\-Z |YI=N$#/Q?@dA0^euܧ`OYIfHlhmQjFoQ%^Q*:H_:- f2HƕFڍfds-R]VaX49޸GO FW`W] D4rԷlLzS>t_V~XBv7S.i׹ge|{s v̔Z5illdd= 誗5tb 8-hBr}j앵ÒapSvȽ$5+mxӎ-.X>,BIǾN5v7ۻM5£pwBr(BfKcfSEeѵN΄4w4M.Qfܽ<ٺ*I$Dی:DZ"mGbF7&eC'&w> .`L/I2c%q8:ou{n_I_A{{cs ~NMb)_gt8=B͠L3+ 0/&$ID%H%î}'?~Wx UH K..]"O^İi?f '_4ZC?1űZ0|mP Όwڔs5G=`IJ85{jWY1Gx;kZ#X72ހ =ݔ}z h< =Nd!D&LdXp〧M00 `Y53%C`(*N4hߎp'_yO G"6ZQWLUpp]) $y&-(L5R#y!SðsYIjgp9M n }i&z]|*Y w JAR`]i}r1TK{˜#6qP,/^7GkR)Ti:N i?C K0hBd !أ* e@ĩ@h,Qj$7*bM pN!*z*<;M&=(T'}9.]Vtt_ˑ|sq8JnLj)*sBj\Yb6B5qif.C_ Ϊ?T(}A tc\݄7ZΥa^S7^fsԨK6`lQǼ[~aF)pҠq$W㠽Bfu[@fpGmq=1 .-eS"@U^9N007~ӥ )"~_KzBB&9iaR[㻼)Q$|cJ볺0P3eai vq5ɣ}܋) y  tM5-iB{xKl.b!, w.? sZB<yÀ#+|OlMgVGeqZL^YjsݓlbPx̧=ʲ ȣj^]W[SըB&!N7Y=%}k,iT|ljJ'!\e+l,Eؓh"5}s & &9'zJR,CYWcί9o(x? C^V='{Rn[${3)#Ff2TMg}(pqz]x p+b lk]75/kt7J˲P.ċHYχXw[,`'w~kJUFQK8yRtzc6+su)$?ʑPg9ȋ8crKUF#PT޴mS1ka)9)"~`̙x2d.Ɉ"ymWf5_*7$Py b:xG6}mk}CJҳ ?y n9mz*ӳa4~ a53xQM[2}0Kaf3?1SH,KPFzfxd7];xw[ KjW3++G,Ǝ}[Ri΋JҽF/厭 D۰p¨1Boee ^JD=G$:sk>7?qGB"CuvJc2SSTQ 'sM94GKYq"7gXP*yc Jq;-[t)"VC \JJl̑>"Sc`D u\o}[\q.zGx @62R,iAsU|2kD')IHެ3kq µg'x%kg"bp% ڠ(7!+<+K@Ua@^ӀTF*uݻ\0~Η/kg`We1  r=#Ą8osz? vikDS6 LI"N0a6dt ugT\ +F 6rM{SJ JVKKmD kT~8>La'.y!qYM[nո|b|瑋4 ׬n=fQl$wy+Y2/o;8ug91 *?eM)wj^b.%&q1Wbb߉2`{ϰ5!brZ1چ/?ҒKU2ǒ,R^ގ樐ΗTY$ڡK,u"ݜ^],UTGN[Ch:UKNUXs\Sq$ Tһ5X =)Sm+e]ʛu8/;ӂ1zXLv'&\ Z;\fK2n[$sP{kZoOv)f"'^/CDC˾CtE[6u^^XdxqkHP#Ԙ oY0!molo^{_E^06䮢,uy֚+E)C<* =MN,Xg!2D?gKVrx4ߦճ:8n ru,m/sck,7E1QƶviHOj /#%1~_ e FftUR&eAMu=t<̀tah褾: ę:1V\S\, s*D̑ou?އ&2&1?5`9(xR fA6 iV`bb?ݲqŷ-wj>&ayWOz @ HӍd"nzu1E܇~u/}'ξ\r[mm-_!Xk[X,}}Mр~~r'xc44z`mB9ܙanwb\O'g` <9C]-+,i}*8Uq`x>G uFz6F#H$o P,e0In)2lw?*zϊl"fಜaN'DNw굝% hRGF *W`kZN许%{3,Z*g[L=Xh]$V(bMT x{J˫ ƩC_eXè4ӯ 8RZUc4}B&HV1/9 eA\AFDHTKM:xK<;Gr#7LMoiLR9EF&6WԬ#ϕ3Zf`4'D{&t^)Z.ݓ07!P]`'m4q2aϠhM`bfGܰ=_ zgGٔwr9wu{glxs#4lw#uxj?ۤQ;J55ۣH4ro pW$ J=5lђ+uAU/AǧfP}udk6Y_B0X*G/(5!,bK`I!MpOSV'e=#fکyNy쮛+y S4agIE>ov[IpTX#`Q4S0\|U2=Ŵz KA/3&, S_ GqI(]*B$UU>ig˷IE9[`08w$HqX@!Q2(KAnR).nC0W{dZgS$soo)?Hpa9I%&b4I S)6MH5xw*`(qB-AQ ozmy6$6ñ-F5'?|!IŰq\?Cn}1(|t NSA_sVn( >rX cWCPɠfI^%<^<|l/0hJ%U AkB,$iky3}T0c~'O#2c #E T@k 9Ja*7-%n.Eiޖ$U.NN 1$((LZgJd\=V1}\+\O,r$%0y<{0҇+'ߧmqR"̞^ Q ^nvJ[*(=EwX3Ll6X9ߧ$r5d]h)xF]=^)9cHɘ ܨG{ O n ^hQA7'8QNH":N~gonX&{4!oVǤ|Wk-"FU[ \ NAfAjbI*Xo=7^YoPA3d$ 8Bث#欉d<"hS7W}t="mqjGZm XL:+1o>υ=˓^m@YjOG[`+NjǶ<(K(0%o^Yjj[}2FSq+~nww_ B-Q# CK 1@?8y͠ϏäH<Mp{)&0 }EX2% T˷#- p&뎞6#DD|-F,{\0&ތo[ pw>#Mv;xLTqeD *Op,DIGJ^б2^p~r"NwdIn]8Qek 8{"ˣ^.KS />>2jKWkJAs' "BY |r՘!ġohʼʕrSwkaEe&bBF[~ӚFBUQ@3s#}OqJzkpƄ44=c0[c% o˴ 2r\Y!X.ib);2i<|#8D]O}~-r%o(>ẏˮ1w0?(~"I7̞TFbU5oN\RroKNAOCv>7G:6ي(#Օ֬˜hoE!_`6Vh,j\(6sPC),%!g`u#OVP_`]Y>n7[0,XLm59EjFlN`C)*nH'Lu1  > 50}*l)yl߹,ܖ3 h^d;]?8΂x'rn'iK)xC[(L =^")dE?&Ϧyl2 D~$7V+tpgrheb:% Z{k8myڿQn)UxV:s1Mgy:FxW 6zPeta?Tp_ {xΰFI]JL$9QlmGֈL220-5k+.匂(0"/AC1̍VJHNF[RHbm^ɾfeVghS|MD[.-ac\6^ul%p+7.lʃG/O}X%lQ'0jn)AJȶeT]= )~5cr*4;!J^i. W40kb9$?qo+]k#;)7{/dW}BmD=2&:I )Ab@wKm*j LO<53bX FFl e߬ɢUӗ]gҷU*_7j T4%'\'{ϒO{5`U/+ev8ŲfS q:_31/I~@-gYxxE};bu/d\FpM#ydViVwj{<-߼mQK`]]dAD4O͎)d |@ZC¥B 9V ^4sO3ao>R D {?6ZWBFlWaKz*oW%r< Be)K{qƌ̀4pRXjtlC Őę2{}: :\)⍖GoaA )xmj2?2Pm|wQ 6'/hhTڍaIP*#ye =Z2S))/2{)1!F5i#^?/\_Ud"=^MWk*Q5^1^@-ugЖG nB cwح#2fg1@')Qelioˎ[931&W9b+4vħ$j=(]:Dh/?-ӣB œ,KR FV6I $Kk\_<\f,`C!AwCآ& 37K`Rky!^6J?Do'-4~B P0Kp@E"`nWXx!^쨣O jDu4 ^u*<=G,AQɩ5 Ζ1Y/neeʛ&%k@< \<|7ZG6(E-r} qCR1 Ze-Տ 3 [&LSShQmWoR1A/k DoC7KtyP]AZz}3|{Ghw%f]ch``x Wܕ賺tRj5Ukgk֑yjN,U?2&yH8EYAY5gWD2;ǨájcY-w+у3D{#T37fr' Y. aꑽ5%Ht5O-kn|uut *Aw\){IVV5 v* H+4*bu/ϒXUU 8RY^rV|wS|~w䊇$1=_6Q%=T~:O+C~Txz}y?fzH]%\OcH>%\M_)E?:ٮ?۹"sP5iȧ`,&%lu0 -4*MPӾGQj_y斘b(*t4!D4 aFV[Ͼ#cQB#tA$tԃb)?]bc%<wMۍ_/ i~o:پ,Ra9t?I* PoN*71wH~/@JidJ!C .~UEcSDʘެ:wűD١5iCVa<_ߛ)uĹjXN_+!oA9VhMAV_&GʒDr%|$V'R 3f<)Tm^QL% vF 1mvڑO, ?3`.ス1,m*iK8ҮdWIowI=-NC?>flmawtQaX^hVPþ)ÌDv<'-t,tȑe]d*;{0U mp@@C2٭%ĶnԲ"nN%[QbޤD؉`\+{ 9i&$V#M!yw:@ U[F(rG#/cT:"֤m@/Ɂ̋}lg@yv% t _UGqv`M'|ٷA'¼شиiO}X PDljZ{kYqS:@02QoE0 TJ+ %jK)m>+{P(Kp3 Ad=E[m,./I)+>_ijer&“9VaڽʔWOCboLXQ)(Fڸ;>$|:,4}<c"iWBkx4t{i##\"eʄX2kZ VHwk0&<;]Q &PÉՎ!K{׺!Ej婟4 ๿k1Tg|ly^@߹\dԆ.y_-%lOG#mX^chy"Ai3K)i\/Rot&gM+|(h@i8 Lv (|gQ\; њ8 r='Ś:C_IǛͥy,a>KTf4h7 e_v]4aki|j$~W"= i΂#]/CF@Ӟ2V@%A#; -:~WK`Ɨwor5W \/yoGf C%|? ̲^~ "Nx+d'P?2bPaa7sR$_E8KM&W]|d[QA OtX ( ӧC\;zt_9۔୭R[ZQ6Hȡgb*-ߤM~NU ؒlЏ=(t񊆝AGyyn!.54*5JRD %lwJ4zOoPgavxQQAa ڈD'- 8 `uR/mB?Ju37Π]b{kl1\[S9' S1-?4Ugz#Pt"դXbN\m;?fqyOqӯ%ܗY &K)=8`K <:2*"Gm[dt:dyѶVS_?/ѩ֌%X/!JȇER#CAy h0okNƹU\ܪߍC!22tzjbYgIˏ-'3ˮHדS\p  ēҜ3R¼\KG˵{kVVbc$uǂRd6_AUXsjq~"*}FѾ.#mq6asMzmnDM)be4r;qzΚnT-Q7l_k򁴷({I.Ԕ3k3¨7l|e5׉Q Kh!t_ԛI^z">eckI%/X-Ć!byfY3%hzxMGeSM%w bCv'R})ovGƔ=Dž1)σȘ}J^]V]}r$*yҟ J3 jȬ;(^ a[`~-;U^G P 8 r{8{}k_.Μ=n~Lk$P_Iq!Zm2j+)ځig3g)Pu CS5[tC?-B^_e7 \g?¢.R1pytRmM( B?$/E_&cHH 1GDK ,pj- sQpK) & G vDC:6,q3ɵ-I'6ɀH صxULTG<"zd|$?`"|6䗦ͥtmdy'"r9(HgXFH[[]0}SPO M +@©|]Ph>Ǖ XKF7m¿k/)&yQ~,¼t h{} hV(b38);u\L@!k3(OgF`3exr<]ɲğ(pBfK[D/ӧrzHUsTI]cvXU CWVٙ#ͮe1o%--m}+٨0{U:FvybzL$MWTs8M[V96Fڮ \Eh~!z 骤 #B.$pW;r8"Rk,H۩l}6n+|8q3}%^ mwG71 b.l"8; :R.n)mߞrpgDq.+S߻Ҕͫ%q]X,UFP⋠orQӯd2O%3qz Σ2c|2]@}*e*-,@o%(EdU=~a99[H g,{ʨ*ܽv 5\PUٿ^ԑYT/4ފՇpAԅҴIh>ˎiA2NT F׵- ԑyrhg]k|ihTWeG`[Ö* by ?\\dй7}(</JhU/۠+bRMBewPm8u:6Z"M=G$-~<C\KǁWK ffH\$%cb9J|@jU]KA2b|,(mz؈CE'X Һ+}5*[.ŎK3V\1AG/҇{Q%4$ É7դLW~IF쟽mtYE)1UG& 7C̱d$!I|8 p1`"y]PL(6Ư@n qjg[*ΔJQ*,NG]DJ B ~^4hځb͸$p`f%Q ơ ۸xD_v h %ƠZb4f L׿ܼeߩBsa2pRS=0u|Z(!\pu6ZG5E)u'z@B~5_9\YSX o} Mg_3}un==]OI?d;.F>`_lvHZ;Eq|ۑ. pO qe8#>q5,Y(1) %;uk%8Hŕj'2T!Sk9cΥ~?lVG(!eH;BD]B;d&h<Y䏿*AQݏtKfU 6WG Z7bF51''*(3um-72᤯C+Ĵj Y,pD+ šL?|Vn(?:P_O}Ts!yʋJ= J؀M[֬bݜgCh4cEFU|~E3B?kTjMUyΑv7_ yOHl%7O9OR7 uǭh-YVvGΞ6$*B@b+meϗ8E[ V[_363]tLܿ *ty(W׽)^Du#w:`s uy}G^$pW,b؊ګhc9R:.6<w?oV(|zM,`@ yكb,#WJ))ە Ky:|E'fa57W6j_rz D|mO\$> jeIQ+t6wء+r:&HP! Nzo:iע@2(y{+Q@2Y%R %ZCnj>4s5/ցgu$t1gnKʡUKMv/@-Dg"Rj' 6uEMytFCp*1C􈗕n#g&!D䴡MxQ܅H䊵`vu>K: j:]G;wl#YF9|t05qxbbJ\C=?tD_V,‹"zʄ%\aJ3.fUY2GPhFrvtG'@n_4(7J,];7ݛJy.}v΃r!r6JĈ(6[׬S: 9EIk-|eN3RM4)ūWO.@UM|v갿J&.}`` C<kc&:_ׯ^S9 1M p,0^໴mP;X,܁jC maLpl!R&iG:5.4V-L3& &酵셖7ιU-YzZnK{N[@j+#S,)pb%6 @+,YO VqA/OVd2\6fe*.9^+yLřU]e3|=ŇZI~6 8Jm5qR0G ѲfaGsReD/=]8izէ=(F&ɠP#īIZXsx__Չ %B¾īC]${f%@VzqW*MR}nE6Mٯ\֏,˰Bd=mav;[ͷ̢{FW>q1f5Ay0}&淢0Fy;&x3.5Rhw͡׍[{4=x0N\j̪2Igm.L$1'z_ƹmKW?b%*vogE`5*>K_-K.ppRҪXbNYgXʅ%_W# -\f߱^pB@b/\Yn"wrĮsl֊ۑhzOS}"Iutz,J;`Apk&_ 3Խ!̭v\!qt6U!zCɁCVCdێG+)HWQUj*:ovݧ ~ sJ8l`z2 *2i% &loXIFhYT[Yn4{72QD&"Sosmĸ>_])'9}P>O 2^#<'}%5>D^*tD:U7&u=#=թ5#璾\J$C&͏Q qmIcz`l tlz%pJc'C/8  `jw#4Xa 4^\Iƴ.2!3VZqWYxZ0Ģ A}vZ//]۲18lc*ԖvJ_7&GЉ * wFz)HͅpN?\f %rOG89SABP;N^yOf^=DKkV}K.MYDӜE(vUmv;o8ցxRʰى`ۧLYc? ZjΘ\;&\3Tu$I}cJ7ڬ56 r[5=J!wGid D"j1S4xB pZ!{Zlةhw}Ics [,;YIv.ǜ+Ңz] p-A*#b)q>ZuQc`J?IBgjyb*\l}"jASyZ+4H/tOcA"tz&<"#.M{9~jp'+c.9:~Aq%tQdC ` 7{%"H!sY94%ɶK'3&^ҋQ:LE \⼜م(F,-GݖXڼƧu`nӮ @Ⱦ֠U_d'iv៯17Fq#X(,>L2y#ÃVC Ƭ.zBA@.Uy`j%z"]/3dq C(<s믥xA]?iOc'DGb6 +.Պo 7^n7ß*J?zn.JbO]1D& NkDXn՟MUvIPWv#uc$ZwH[ӪRwlQN'qsBO4N.QHʊ]fQTԨ8 yD(6&?#K*I';q=@0v)eon;˓6Dn#cE'8`B?Iz% SڥFm϶CC* ?Rp7Zgr_ݒhWlAd6x(b7~1TPO1%nq|>lۉ٫ ,Xa .xw__"^>+L“y`f653TUk?"L#/.XDRˢZ.X9${pEbjߍt#xؒ[pnKJ=ܒł kh{&5|ة\o<0*FB9}W#FbqwbP G X-Qy;  鷑yŵ O!4`8ӈ !KH1̈|R-r sV~hPΌO'ka zC 5tew8ŧ~Bo$+{+Ÿl܃9eAç r0w1nO8[n iwR)ޡ:Gl֘T~$ 4cҧdUk:_4&!G{pr&+@'|R,eMC/Z\T\{Ztq$ b KhM_gtpVP/iB+Fl2Cdb^ o͇+\dTX5$"5BK^'ڠ7y$q#ĐhnE{P߳{IVL6i <%{ {PpDi8xI&^Ymac ?< #8a(>y VSt79v|"nݕ~^k! ~i-$DvH\JZ"~l(s^¥4gc+wAڦw8`QUj;(5B2U& (@4=!R+fUoAHMQhl7k$ذi1W&bP׈ nuZ:Zx_Yi\vfu4tީO~5㓨 of'ߘvr؄@JtKIc?t!JL]?s HfHm5mn0MLM+ЍZVlu:Ȭ FQ (L17qR:2տS\3"|~E1'hX+sZ`M̄.qM2AlvŸ$?7) S2;43JLr]Uq%QA&[q?>["gI~[ q?"@$3[7rg }Hp ܡseq?PgFp )-c\m:\sm;Fhѩr:D);9F8`{- ógH/Z#`Ɨnz=M°I]WE=ͭk R va Owp<_o8 UK!8f4I5`]yiüj19ds~xNp~u(o~UXfhQTv[':f}+6⣭Z^Bh跓mμ?oq?PW;ZU/QZ>>؇|?&3Fm2Zfr/U9 `7)[{A7PĎy!H.L핷 ȩMQX !|U_{;BJnb깃Pe6`Q.^ )wt"igDfD+qDRwOaRUй0k{TJ Bx]dyJJom[D}2O;H@銐!ǎ,!@KItRչsMuh 6a%ij)9.w 1}Ѫ_(ɕA ]N]>Fst`˘86]ƲVlrf*-p1LoTo`./GAgO2h0xl,SbI~kD;c.QT(].3E?ZM^FЉt2Yn/scY 5'~>wh2hzgf-gÑnˁZ5-e (Z֛7nlWپDr Y2M$#ڷVrXgT~KЏ kKۅq|\{YgŀmGNqi<{qzDگ$.A"qHPb4"S"[RdwN.7 zHѷ.?O&YgRmrƝWi $aC[Ep; ?XGrU}W WGY;XGd0mEMK%ER AZvZ "5~ͦ'1PKZ.g7]ʰ} ,gdm@[#hËL ~;2k,crS[ ">w*~0,Z\a`$k z?Z1=S)m^=8!ѡi/kDgv)NeCᮾ(3&)rSzqd~7z#rOBݿxw1K5}TWݔ'׼|Py1mPYp#QS 4A Ɍ\"Ǐl5Ed}v?癗Fu7]V/bi|!JT511*̥wڃ3oM$"ӳ$k};$OMPQaMg_9`! Ui>f#>e:w{!3ͅ, 8h /v4uq&<\k@ߜRkQ1Le i} ~,j_H2Q6Pd& l`I|os =M #-1v\lH"9\Aqdgv [ ~1.09d{=2iW^M>I/"=a0&L)EZ|}| ӞSoUHuWw0[6!޹TAB?iAC$69H)*E!\'~K+k7v`6e?L;5;w9+n=!Qk#y 0鸜e z*ubj>蘑mkiRV  P 98I{>HA;pSG(b3OҞS ܷh]&ffʈ&(?z5t0 pgz9؞ς ,ȩ +)~YWr~@//TKw0 T* ׂWc#lVVO+dh/\Ӵ❇JU}e"7$Ḇʫ]N$(m0nl\]ՔF@ldaFf% !Q؛R@ʳ ]ʄB,Wfs }᲍0Xh `e0Ruo8K=佞=TN#/,emAӢ|TT4phc6'?c>ò3Oq{͉?+{us{}x&5p6Rzhi 6~ *<uJ2`UBp{̬VI11:wLs=Vb:j aM e'-RçDY HS-ʶ UI* RęzkXq$sFev( M"՜LJfOTd5eCMQᛒmF>bX2\ΥՉLv\e %*~;īn<.]Oܨc0\-Z{źBgH7Lx.+~ DP?ւn` E9{f]  l8,B{vzTiѽ&|;gk;&ZP= MH[`p1ߟ({Qݺk*e4=zX>]4{ Xϼ;밪C YBdnG ̞|\[FP&h6㧙!ϭazVX>vח_5X 8/KysAg[D+}X\*]Q gm7z_>r6 2rY A@xJ<ůAzr݅dΒ$0 d'҄Fe\$CL1&ܢ8:1k4' Ohʐσ=2MjZL}RvxA(sa 9JW{m2B $V\l}Mfbԙ\ FlQ]/VRq<tkT~ 6 PS:*zIDU6:YQVL_{`f)*1L l3sI,Y-jh$P̀ 'Q]RyߎXKrꊉqIop c/D=cP߬ @.lšZ5SV1ubz. #'9s=g%MB n()E~:B1  a WHθh}odRبa s^F㏋ΪhMWS*[JITE +YҠ䑄S ^Uɒ5;d*xZ||9A7m'*-=|e"(" ]6vɖ7dZ,`FIO( 3(6G"mQCޕc7Pm{QJMM``]G\E)=~3dkRJGch0Up#TRm6mZ'u1F't)4~'!= ËzEޘU8x|V> 'e*tEE!vwK+,޶,04g%묺πG@"oTw@LP.Z'ڈp!})>=$V-7,AZw;?HKD241hۯ=p#vCPFߴRœp=W?ޔ`]??|bN V}FHUGwvސ*jtAF^v>XXYIL| jsv 1٨+(>[^Aρ$7 gNBeCʬaꢚ WQ)&Ԧ~@eyHc[^N]B]V E@o֌00-iCd6 ̴w(#E0<ߐs_x8$n>wsO܉}%3}wWNꡛ*6ئNػ)ɰr(|!Yfz{L<؀ow½*l\Ϝo)yNua'.unF5p}d+((ӄ=xS,~~ĺ}OCn> `LwdnH |{>X8Y:cSX ot'~,Z`$h暠old{SaBrFoUrD{1,|:|-h3Q#(/z{~Œ6)q$9HwwV>28 KPx7ԞQk${ycrqFW̨.5aHE"˖`;,Lp'/:b<ŵыwؿ7btHKM1lx"96bzNkޜNJٱ$ecn69Lfu u.l$}}w\ }nơlƾW<ǘwsJdx|G)Ro uTA܄iAN"="u-j]#-.uOY}h@x̗wB?v"yNʵ4F^RZ-Ej·~"6eKݸ&›& IO݁]6f,^?̖-毶J2Rd> P``sa ƛP'?36`\833ԙ+d|]fd/-sIQ@A,d;(9]WRϽ>Q=z, nu~x>^7C;d!k@bS= _M>[! 3#/=e6r_ ^etR-1$KıN> ?tQQ76+z:it܆Řj3ɭV\Hg7chZ:삚Tz~#L5 p,#7:hM2\ 6Aȷ44by //8#SXϷփ%5_l PczޛL@Mp8 ׂYzzrHt&$m[-Kڔ\ǎ wj{j>–nP' eT`K ZA`NrhR%cWܟ Dp{u_*~}1Ƿ(ԡ0g,Yn@1v{yŨﱢ>0$&rb>*v+>gT|LJ'KţyO{iw| W B+@&Eh8h=0Ʒ\˄Z$0@g뼢;Y-O@ZhIsBU|E@bNRDRR IRY:nf'VXJ4vL^=>=  8(5xKt?~>zEl, q&!)8R1$XSy=ClWp`w!l3 CwKlAn12fUtpoEhJiNc37yw;XqlxTőfϽ+z,?6-hy8IV|/s(_WE4N`v!hvfv2Mf`' {/b4*ќ8-ZNo 0IXgkq M0Qz 5om)땵R%z| )Thw]*q WTgј6=ܖq1l$%`@+KRVui< }:sm>=P"ق}R:ُݲr!{eu^tL@?~ZvT# 7]`欗^Zg#+T_SV1G/J$cq2a̵]680loДY{K3&h W+1"hsI)7O,lU0ը)V?KΛQcCŋ Zg /f<x!ɔ<*2#2Wz{332F5vHk^԰ƳBj6~2a 8{ %*EM@ *!wg Ϛ5LfjT/VvEFiGɀ[KRj|pT!(Vɧa0cd)|~cL6.=xq7JlJv9>c;UQdJPa O_ERG#M*ar<~eм A/I Խ8=#YzMM=:qzHAnw7`;'єG+p?Jg(- hZ}EH zGDP?&چcL<MUrEah LDWrR1x%z 5 KczW$خk8RNXWN6].Xw.emh ;_b]ܑfg2=TVzU M\RW{>c uˀōsvv/l8H[!txG@* k!Ș,% 0SqҘ;(Ǝ'e;VQkDw/|m$#F%S:M:IՅh;f3 cCOPNx/Ց}*%cwm_e/0. a%(Crl4+ yR~wpg]vI-MHsO^ /ta3imb LP^O3 +hf!Ǭ4k[f|| Wv8@EN'!Cmix:FG6u9H&E(@A-S8Ze<>@mM^w KFf"w_`,j!Z$FzjL4Z+f`28̱]82&1C^1(V1.>CR{ce8]|2[ic:J@"ܛ'0u]?SiҨ;[0 Sß a,*w2>P7)cVyZgYl;\-D_78>J=0I#cj=D-Ȝn3hBǫ{Oz9orWw9g&%hIͲ36Y^Zυݬ84usSh\ s6ҳ$ 4׷ $1RE]2t91q`6{P#7/ڷI%`Ϧ8l?KMx0|U-'"֊@abcL7`cwӁմ[dsrpnҥ͸qZ5=b̢" M.O*BnSVC&T)+%Atp"ۜ`n\n 9o 'lMj %쨪pD1, s%|ًR)9rB ob7<:th_FϺ(XQzÔcڰ7ϩAm+o Hj\[m3xjhx1FwgלB0z{$ґ|dHȇJxuٷCu2TX邏+exp Je%z}rP`gQp(|>`,#bc8ȯZLIZ;=)fGtv*?d(q$pD$Prtbr^Wդ%h^2ԓIMh2MwB4kqa4ZoJk'xi&Ca۶nglh< /<_77De(fֶ䘔-wxS J͸ecUՒ*bmj1ˡ6UKjS3e= CqBuqb,CfXo<,qM5I,3 \= {umshu 1ܢFP1˸,8O5;2~epw݈p)DdnMz!`9O рly ޢx^GtAa˅:S5jkc4,"k[SRD3 '3?Z69B?nhO( J|%;;08q}&FloR+y1c3LJx{~A})(x hgݔ6Os&{97ɥCi QpB09w8SG,wAhPmgR2qɿ{6-Y[5ΑbFNR]Y{}4ͳoE[0"@݊S5ձ2K"mjCyoVV1;8M2eRR?U) ,TS"]GH^~{CAfPm,z5r|x6 Z]WUI f sVApkev4K)+ |nTbqLLGHPa~_je rM0?aǭj;RΩebnE@$(#Qzs3 V*n%`wZ`, wBd`m{)ͣ"WnMx) Mne@45W낳ף [uށB#^Wy8? XnYhx_l5ގ}lITۛnMˡH)`J;(D{+=oEƅQZ ۜ.ג=¬Ӑ9dZT))7-֠uҩ1v2j,A4 9[=q'> BV"}A`+v૧CE+BԏH/ϼ<>+#\#z .j',e.T٩V+5ttbKƗk䜖&I<5Ȟk}F?F3.Qh[ɠpCyHJ^%XZ_)C;q4Ɔ \:>O*] ;gcygDCU- k O19) ggM:ů+G.NM 0"ZܦHjE5OE_DtnLP QOXoSQfَa#d\1Ȁ UYx usr/bin/text2image0 ݣjҿMh[=9Zs O1ïDGQ&PK9] KKtests/030.phptnu[--TEST-- RarArchive::getEntry() basic test --SKIPIF-- --FILE-- getEntry('tese.txt'); echo $rar_entry; echo "\n"; echo "Done\n"; --EXPECTF-- RarEntry for file "tese.txt" (23b93a7a) Done PK9].j7tests/multi.part2.rarnu[Rar!zs =t#.2(E s;3 file2.txt19?~%V3|_cn#z;Yk/udo RGiq/13 R/| Ͱ0)u =L8~wogGWcp]7foץ/$SurAe. ;iˏ$/E"+໼:ΧT'N^xݽ\ۊXc_׀-+9qWLާ)'ټ[':޶5+A}O[tG pcWZU6^=J{Ԯ)qL)Nk $輧M~h x;66;BLѰAc \L 7|+6p-y~bPẌ2Wޜ`Su2 _ ayVҪl};/Zi.w.R1a.כ;EM^{v}}Zb7̊P<| wzjZSSk;٠n2;_?g1uT ۍOw1sj405hrG`[8ШU=0Ӧr'Z)` r}:.|y-mN]ojt|x,I&J!p Úɏ_l[ћLpyn =(>gd‹->>/dMt== 0EwXRp֏w' Vp%<F Yg/w'__lpo@`̋$Y_ep>zJB*>ocp4(@랖躈,Dt]x_\>]tbG{Us,))ct|@fQF^x-P'6GpSĈ'2P!8i Y ~ ^{0F8e_$}mȡʔwotoe3@?{g}} S˄ӧ*GQ%a. V'm,4G9;$S`}fnAHڽ5ʀ%sD&C.9:/-ɮ6}yOvDxWu]1-<\P'Tv^$0_X&`=ɧk^KOYӐÂ9qJC!߭ip6y:"7*:&;=|Q,u#:CoXlJ)BuIbTDMyx~hj]8)U;Ŝ_XWr5nӮY_Qu&vᵁ>S5?2 AvtRќ~&9ɀw$$ O=x g*vO~Ho1^u|Fa/Pq"guicz'9i>oHk_ "#d#eV4a"F$:w9Swr;4ΑJ 0yfpO`8'03?{+\E 0`UЊF r]JIՅby>{xz6VEf^({~o&y&].CESP%ϲe! x:Ё` OSC?Iڥ@#?ų܅2CD1/ e"KaiO%Rvڏ`<]V}\=KS`] )vV{)>_ h6a_^SK/,RՍ(SW&[EҽO&~.T⎍V$Z,{m&- lmpJAI$#'B-t>˧Wgo`"//4 ×UCp <8Ӹua=iT9<~K?R.ȍ۞S>Qb!KZ<ƷHc;RWXm5Bz] kӞiHy<bk mz*2;0'h w?\cil\IyPG@ps\CʯP 1HO+J/iNԾƑ mg*k}h=ؙ-茄;^-(|IjolI;SHYзC)y`-&WĤxwU~uFܾY~t&#<Êc?#9&{ZgySo>݄ gØoBr.}Liԛ2ʧQ.bΠdÍY~D~j8j](Z.X7)߉s>4!LO> ݨwmt}*31,]g]E4qV%l|!ѺQZ!SZхc։(FX m0̸M6*$ 4Dcōysʵ @%hD BT`ztu$nTsۯyg%}3zʝEb5SV#KG%|Csl5'El-1ɠv_X0p%Ee ?#p?7Lݽz&g,c kxHb>&/Uvqj^vq?z-Tl2 oRջ׶'ܐaBIWv(5Tz)]u %e9_쀻n<|I}*/Ki=# EP7]>_hd|wgUK=wkB&jg4>6\f*$A,oBd?6`({l0~Y՛x3As{Y)PP.d6'yVJQ'Q~/Zl͟_v;Ex?f6pEdJ_L1@^;^;Q Ry5)Qyg{t w=U7>*,Hc5aHVz1 ~MMm/)d__~?$ʗ(=.ݿ U$"}_U;G0bdM3t`z9,aQ"b#om? Oi/iItÑA΃C!PEq0J2/8T~RKN8w~ڽ#'pBX&}KJ)RTu֏%Eϫs-M4ZKd+&]kRNHϼsy581a™\o[ߝ * sZU[)(jů/5F*tta,RZKl[>3fN[EǷ&˦絇uLvʟ7lPI0vVкeoVi[y\zBa_aObWGbݛWZ 0RnE2zY@RZ{`f.xr晲 PpnC/59Z^JRJ1.ޑKڷo q|+imts\V a]P\F@2{`P?كco%?][w6a@?jALKލmpufŒvBFBf:9ZByN#r,LVK6-}/>tI Ǎ2/ ܲ Zv$]޽͌TP9$'JwGHkFaaESi49%fMNOZQ~Z ڪ\coZ ](DZ-#:0i7d 9"[]lP|Be6JPM>$M[tpUyxl>yߞ ݘ ܃>=yGW%qʘ'/n~Yy1/v0U}LdF]ktb3ZuueAχ@0kJΰGQGy;46qmd {YmCwCX~sƵ{g~؊<.#{6\l{6N.Mom DUUE-|P%7u27o776tp4dB);Z+ YH1s. O16pS_է-ۉ܋>bGF7YSA2lܡd}ܒ\Ӹ"q?zmD\YtDQX P:ݸ# ^ tgo4VbPCS6f3 Bhǩ{|i(anuB~cKQgO.E(Y얅X(1j0Ϊt}uu1T/qs1\)90tJ^;/*Iŷ7IAnS/!k>ؗ9VEl C1 ~JS`]I1JaD~I)JCcOTG_c~kz. TӒ|y]ƧV#({ G '/еY&:־e=pn`f{< \.\BSԫsgR ? $P}?3L9W@|*'uD;jʒy禼&H l.gI\Y]#±գ뻚4bGHL}]Gg"w6ҶKrQDCH2 {~7Ʌ@hooIc/ xx.zyRa*]JQT x.'?bvMG+ J1L[ĎA±s,#{|M)kv$=t~ً[sUm$O=xw. %}u| 7ogڂ:UpXϾ[}xtӞՇ<a^tI$u,"%daS1^E?|'TdŬzӻ_Cj*Y\ؤvU_ޫLHw I,SO/k e D3s(\xs> T$G;$q?%^^.o96G'6ڿ l| 3{1L֜s.4OMso؊Rq\&0'_Wu(y=~ hmVGQCKL^yћo^~FS\kIlV6|0&wO֋Gж3str9(d͑Ž }B ciMK'OBx$9&w\ceyuz=)(U/..t0X Mwߕ~3N|<#4dvnu`K0iaʱz}Z}k 6⽘R翢$KqZo4hw!OH K\i1R ~_<[[6߭I/r) J\P^lĖm}= ոr9XTFױ`>K 9cx-厬Z=_vw2:~StTyJ2=Y>}ZUؙ3Ih)s=8$ir}n/Q[g[fSQ^AC!͋@c:N⧈Joپ} XQ[b#HE竲 DDꡘk#d+ UjI ҿwhq_@`M=pxcz]Ypu>U Tl̆JJ!Bf?X~!پd 3yqYkuwVݽNgsMVEڃ}wG4YPʱYJ  þt+ t*uos֧J#יV#b~teqS6v i«cN wq_`mϚJ"?fą9Rϧ2F}m ֣7p Rpo~fz:dlSl=M: r'^3\1 r_r^ݾ1r*|[\\Y2`{J۲yMeHꞾE u|WxC^Ԛ{l=5`/B; O|8jLF o81wW >r[lY4]*ٷۍ}8-&Qʚ ¯"b U1݄I \bh(M~1Ů<ӱu'zStn5Յ$cx:=HIv'fכo&_g5%qΎlC2ԓ<1j{o^C;y wK W& /gZF8wZf{cpRT=my.s3M[5_ }[s{-?CԸbzTP;g!AnL=rM01=7G4Yh|ـDX<`_dt{ʂPf>̘MᇏYMd)gWn4~jB]s #s= -9{m?>PPKgjHVa#Ѹ .ЇLpԼd7F̯Lj\5~ʠ!әzL Aag-!WQn9[}h yr @S'qHZK!8sp֥IxtALQ<'K>ϷtuɉM3 XH1aT~o$= N=O@4@y+hO,jޟd`Ncwo=%p)\JO^V1Xv֓}OS9ҵSEF;&f.DW 2[pV ֺ!{_Ăb;ĎXPyK<އ4ޥBx@ m\6 TZwN$NV^yz7 :i`)D⁘Pa_(Vd􊇎 Sy_p)>܉ͻ8 7%lsN_w{@!2QMPK9]#Xtests/115.phptnu[--TEST-- getIterator() (PHP 8+) --SKIPIF-- --FILE-- getIterator(); var_dump($it); foreach ($it as $e) { echo $e->getName(), "\n"; } echo "Done\n"; ?> --EXPECT-- object(InternalIterator)#3 (0) { } plain.txt test file with whitespaces.txt Done PK9]5+y tests/4mb.rarnu[Rar!ϐs t, @ <1 4mb.txt| Q _fO;I]$- OR,Z+W}{}Sٗ>`=toSOϮȟCow~|z"| ~|Oπ~|> zx3o~|OπCdO?>'cKqo'πO~| Oπ?> ''/?>'N`:|v?>?>?qo+| |Oπ~| Oπ?> ';oO~| Oπ?> '?>'b:|@x~|Oπ~| Oπ?> 6_"G?>'~|Oπ~| jd.F>~|Oπ~| Oπ?> '?>ϰOh_={@PK9],8tests/097.phptnu[--TEST-- PECL bug #18449 (Extraction of uncompressed and encrypted files fails) --SKIPIF-- --CLEAN-- extract(dirname(__FILE__)); } @unlink(dirname(__FILE__) . '/base.css'); @unlink(dirname(__FILE__) . '/reset.css'); rar_close($rar); } echo "\nDone.\n"; --EXPECTF-- secret-crypted-none.rar secret-none.rar Done.PK9][ttests/023.phptnu[--TEST-- RarEntry::getStream() with directory --SKIPIF-- --FILE-- getStream(); var_dump($stream); var_dump(feof($stream)); var_dump(fread($stream, 200)); var_dump(feof($stream)); echo "Done\n"; --EXPECTF-- resource(%d) of type (stream) bool(false) string(0) "" bool(true) Done PK9]!`""tests/050.phptnu[--TEST-- Stream wrapper basic test --SKIPIF-- --FILE-- close(); echo $a."\n"; $a->close(); echo $a."\n"; echo "\n"; echo "Done.\n"; --EXPECTF-- RAR Archive "%slatest_winrar.rar" RAR Archive "%slatest_winrar.rar" (closed) Warning: RarArchive::close(): The archive is already closed in %s on line %d RAR Archive "%slatest_winrar.rar" (closed) Done. PK9]; tests/garbage.part03.rarnu[Rar!zs tt!0,a#۔k<3 garbage.txt.y^tޥ.QpO6baQ̀6IN\?ls#dm BTJ8'(QK{J!3~tݛUd |'"3"_t%"Lɫ(ͅFYDqV"7EJ&z(Ċ~]it*-&vG: Kj*pQOY|qZHrĒ^;vD~+WVQ$EQ@P Cd* D3Dl-v1tI1=/@|Bap*)J5ۨ(ߺ9=^ו+nSS6MNvT[w#^" Ok j^n֒G:Ӻ3J6_ژ|@JU#s^0P[uooʨ/ʶ;v2UDjoXU1bpE)I7^a5Zn,Q$ΌƱ_~E*}47]||ACjJ߾E.;J["p4$>R7;*~9i Ѻϗ%i.W T~蓯Ĝ1*pg7o_³(w{ 3+^[iL kDct~@_}f0-d3OC"#ȓOyPh"PMz"PUr@DkMgT-]VhDÇ̖[2-b i˯``5UV%l`Hh{@c8PK9]Rtests/078.phptnu[--TEST-- Traversal of volume with only an archive continue from last volume --SKIPIF-- --FILE-- getEntry("garbage.txt")); echo "\nUsage of directory stream:\n"; $it = new DirectoryIterator("rar://" . rawurlencode($f)); foreach ($it as $e) { die("should not get here"); } echo "Success.\n"; echo "\nUsage of static url stat:\n"; stat("rar://" . rawurlencode($f) . "#not_there"); echo "Success.\n"; echo "\n"; echo "Done.\n"; --EXPECTF-- Traversal with rar_list: array(0) { } Traversal with rar_list (again with the same object): array(0) { } Traversal with foreach: Success. Usage of RarArchive::getEntry: Warning: RarArchive::getEntry(): cannot find file "garbage.txt" in Rar archive "%sgarbage.part03.rar" in %s on line %d bool(false) Usage of directory stream: Success. Usage of static url stat: Warning: stat(): Found no entry not_there in archive %sgarbage.part03.rar in %s on line %d Warning: stat(): stat failed for rar://%sgarbage.part03.rar#not_there in %s on line %d Success. Done. PK9]Rtests/010.phptnu[--TEST-- RarEntry::getStream() function (good RAR file, one volume) --SKIPIF-- --FILE-- getStream(); echo $e->getName().":\n"; while (!feof($stream)) { echo fread($stream, 8192); } echo "\n\n"; } echo "Done\n"; ?> --EXPECTF-- 2 files: 1.txt: 11111 2.txt: 22222 Done PK9] tests/077.phptnu[--TEST-- RarArchive::open NULL can be given to indicate there's no password --SKIPIF-- --FILE-- T2"vFL+;``fҨē"ƃ+,Y/3_m"8˛Žא@{+@;}tHi3B|+ņ]dY%b֠JَOyd\}mԊ^0[)4+#t4?O#_;Q$:Õ}B:Ǘr Ttu–v=90HdbלJ6kªZ&qHPYgQI{!C{o\,eb 0yZ`EX>5}ػAt" %&$ -6SlZA7PzZi`S$ߚN/a8^InE8oO70u A5)6TE`OpPh xX(٪~OሇEO4"4â3{F p!> :ڐ'$0gVIle#<պb&p&W]l0ʍa-gxhR쪺8c=& e?:']ltiNi HI٦pHS GR ?/ؽ)bӓ ʅZY}Bz(GuKce8Y`mRBȠ Ѯ\y )ɱF3c)e֞h;D`Bt2CmiQֱ a{clԯ|ĕ2a'C4E֫0STrAa1"< pRSj=ƉO#-"ٖ]čxO^o6a[ly*2֧@&OCtar;~ΕVo؇ U[/YHSC3nN^zUX3 txXDA{Snl&CNn2G w"gd a^o.Z6^njpcgNʱa,s5jxYFo2d /}X&l5ejb߁k~`gSWÖf׸fBz0'a_/50UR};d{-,b~t9K K?R42ڟ8F;Pi¢aǮb?xɄDR!/'у=$!\~gsE^0ׯ_̦HD -C$S;Y3 0PGn](6FN2/#cvĔlsW2ȳ<_=$yZV2XxY*3F 0/QDR^Gtb^-,jvEng/Ksk4t"*98ݔdwbQԖϖEna`s}[5ƘG!_3%E|^[A k5lt$60$um=0 reset.css񾝭ȼE,Eg !aF8(FEe1TorN0 c;_ZNY8EH\X1zW _HY%Shx3I8CE]M}4rQ DأII 8>T2"vF%8Ō2aeJq2X~h6$[j;m(B9+#@1Ί̓# %G.-w'?]-3K=N*Z,pQc鮍x މ$ LpT#ϣe/g팿=m⥯ce׸A7S;q}2%?{@SDL9Ђk>" J2eil/8NZ?P; 䊥ޞ]R6TAϔa 4 Qɋ撺Frodz LxT\]@.!ە dIlk~5M@}iuXF΂J9X.\ ޭ0sk t*&B-Fxtn1Ȳ72-M}Fί|-FRw0NfdZ~t,;Pk !J kwR_XN|oQ;v\/dO~=3z3'6N˟ĬMbkTe?7oEg *{#\kA$h(q&qSðJ/Po< 8|caUD3^SNψdpV|xHP0}XfR~@E_ةg]٣֏ 9CʮzMs4\ĵV=/ŌB"dR^RT"N;gd#X,&B'JiK:q>K5a U^5CzшJ ^ \kls'eb$#Ə_\wWQG={@PK9]I[tests/028.phptnu[--TEST-- RarArchive::open() basic test --SKIPIF-- --FILE-- \ 1Ȁ UYɃ usr/bin/text2image0 ݣjҿMh[=9Zs O1ïD}I W\ﶩO4 Ewӵ VZcO2%[Q,߻p07uRud ˗f/ГJP&YošGj*M|.SZ4< R`ӨQC3DX}Eׁ֫ær`MS `ed/K-WWuJ/@_򐘥xf3bN*8F"iVrӭM ߱EF5@h$G`#{TG(S&_[KsnE_2YA3kp)t'ѷA/̛Q=;8)&jS8 mG9lk47vfF2SSh BJ4?ʐg'0 .(:/E3xLJ]﹍egKO$1UW_&4!Zm(֫0֪He}\[f1g#7ӂ@uR%Lmb|ŊEMhVS`&{"fe@icW[:raC+q~ XQ P?w_0>n1ܠD0gt~.%! Qr*6l!6тWX[#qLě2HT&zlwEm#Y)rf|tBBGn^P 41 ^)oQ? w/zBVJa_g 4&%LEyEi7Ss#"}>UC)oqPbV<g rk+IѠO1\𝹰t i>2uuACwhҽZA^a ۴Mp0~\Kǡnm1O3q1 ~ڲPMQ}t~Ӣ!.l* 7VA+ ,Q a sswEs˟vn  ,-9+:t jF1%SP/^펖 %O3$ 7 ÅZ08i0Tj!&[.ȌlnMZyg9t{F좍8Tw~d7949tr-qTt0kv >_6D\\SJbwۏ\dm[.b%-l`D)C۸J*I;vrӍwN0ZseːYdͬIdpj*a҄XUIc;.e! -:|VZWѼuTJ!Ƶcs[&=0Th+b0bя8:ڛ# E-*\9:5 muAMo'F(cQqdT"g9ouL]|系ʁrh"*0A t&i!.}H 7q ܷh+vܝ0G^\¿5ok:+eKz˼ih)Rw_.x+J慿vK/~k sn&V*^M-#}\N948].Bw}a  'aá Sآvض2Vva繃#}7h3bYdExl-wM@\5&d³xCe)wgwL_{8CpI}HaL"83hO`Ok#"Xe0ޢSapڹ&huBTm"nEVרigLY2eE=NJ, 7t? zf:TIr`Ba5/  `5[jRC67h>sbY<ĪF}ٝ*)> -FA`I>V}6?okweaO(+QUO+uݭMu򣧝Hd\ccnQhȃۥoir"(\J\K?-+8D.k:1^r]ze'3ɛ7=?ͽ;şR:Xl;N)#ЁYZwt-D) 6 ϘP\/ϫ.(eg\ǨnhU[X&DH"nS}b0.W๕VK<n p]1eB5Go4X~t1mkވ5NJ1$kȴ>lKq(|1`:Olр\47yZm󣂰NS bmr,$̝_/yə+EN3~@5t\6)jJrsyc k-ŹLJw Hv֖\! _,ȗBLkSw6SJ^@>BVYPw#3Q,d#Jc_s ;IQXCkiySKD񉗒_H%\&JLyف* @luzEZ/$b65^qdESosuQ{C:8.):j$rc8CoH:x;qpҞ."?h5ׅN=R0{11E[2ě6,28l4'De6F?az9Pc]҅S5$#p/cȴ\ž1`` S6T&, ỂS`uN K@/|h˙H@5DoO}(=6L6\^?:p\pjUZ`:R k7ZPKR! tU#UۧC9ªTy|>&+i y9]BOll|EĀkS%^fA<2x'MG=84Zt%gvj%Awu7.1H ^zҨ@GwǛzOc%>3@oL n},T#_hyH7,yyRm?1&S Q}}C"&}SY p*uTVd}a@mBrymtUNqntՕ($Nh(Q$:+k+Y&GJ/6/~vKhMkɨ |hO*>8c.<_`RP%@|6a Dq{EQ >5$S.(ʿ4e>7|*g6LLb|9qۮAAzjL}kqeGER/WRɍkƁ)"Wt 6 yԳ_\J4PU~G?ԁvPs)0ʊ$MP_'rU{w>=Єv0ܓ߸'@p@JupǣSCMSd œK΄xݔj,ѬèԳ?%E;^$oRA Lgaz ]ѝfwa+_lyg;]9 0CʴPOT%$gYGԽ{n5>u_՞k_u5`]]:I_D!{_̘!=K$ViO;oԝ "N'4ln2E|{^HH{>hf!(Fle8ٽz9D)(4a$vR(ZHUlGv:"]-H43n? RI XS*`O6]'oPYR*tL0¯%5S4 +&D daj31}U)8 "s`Y Ӄdvg(`$.Z(KHnÅ`-Oxa7 3܇U黁sRXeZKT`ͯE 8΅9_WieP4lƛΛv`ayػ8j#qS݆kXnnO>G4?(ij9ՊowlgT#㑌+)ىn/wbZL E"&_EJP:/S ;yb){ ;a`% }/o}!K/ߝp.*Cg`!~g׽,-)aͻ2ccp=8`H*H)Ki\(!3bhAߡp" \M&U</U!H#DZp1ɴ/Z൭H)n%"]aKafpdMe~&D A5Uxiޖ8@/8f N~7\JF~Ϭ4I".!9}C1#w'ēfY'w+/W!^Eڀ`W*vR4\4\w!l.ZK/bCҋO#=ANpu!m/oE*;-#i;Nփ"By,'up1.rط@ QO\ke0aw>\ 1Ȁ UYɃ usr/bin/text2image0 ݣjҿMh[=9Zs O1ïDwVQPK9]&a5tests/encrypted_headers.rarnu[Rar!Ιs ^v~t@XuOd]qE;m>W.|'rXrp<6[τ1"H.an#Q5[bFË+jNG3u݋;}L쀈0O͝fI.~^v~x9!#5&7jw?rHEN=6[@x.؀HIUzΊ꾹[bFË+jNG3u݋;}L쀈0O͝fI.~^v~BM%)\4(PK9]hSStests/106.phptnu[--TEST-- Stat times don't depend on timezone (cf. 056.phpt) --SKIPIF-- getEntry('4mb.txt'); var_dump($e->getFileTime()); echo "Done.\n"; --EXPECTF-- string(19) "2010-05-30 01:22:00" Done. PK9]V77tests/php8compat.php.incnu[getMessage(); $msg = "Warning: $msg in {$err->getFile()} on line {$err->getLine()}"; $msg = preg_replace('/: Argument #(\d) \(\$\S+\) must be of type/', ' expects parameter \1 to be', $msg); $msg = preg_replace('/expects (.+) (\d) argument/', 'expects \1 \2 parameter', $msg); echo "\n", $msg, "\n"; } } PK9]ÞTTtests/007.phptnu[--TEST-- rar_open() function with a non-RAR --SKIPIF-- --FILE-- --EXPECTF-- Warning: rar_open(): Failed to open %s: ERAR_BAD_ARCHIVE in %s on line %d bool(false) Done PK9]:nAIItests/064.phptnu[--TEST-- RAR directory-aware traversal with directory streams --SKIPIF-- = 70000) die("skip for PHP 5.x"); if (key_exists('USE_ZEND_ALLOC', $_ENV) && PHP_VERSION_ID < 70000) die('skip do not use with valgrind in PHP <7'); --FILE-- --FILE-- getName(); var_dump($name); echo "\n"; echo "Done\n"; ?> --EXPECTF-- string(13) "file1À۞.txt" Done PK9]s4tests/076.phptnu[--TEST-- RarEntry::extract NULL can be given to indicate there's no password --SKIPIF-- --CLEAN-- extract('', $dest); var_dump($result); echo "\n* NULL given (should have the same effect as no password):\n"; $result = $e->extract('', $dest, NULL); var_dump($result); echo "\n* empty string given as password (should have the same ". "effect as no password):\n"; $result = $e->extract('', $dest, ''); var_dump($result); echo "\n* password given; a wrong one:\n"; $result = $e->extract('', $dest, 'wrongpassword'); var_dump($result); break; } echo "\n"; echo "Done.\n"; --EXPECTF-- * No password given: Warning: RarEntry::extract(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) * NULL given (should have the same effect as no password): Warning: RarEntry::extract(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) * empty string given as password (should have the same effect as no password): Warning: RarEntry::extract(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) * password given; a wrong one: Warning: RarEntry::extract(): ERAR_BAD_DATA in %s on line %d bool(false) Done. PK9]//tests/098.phptnu[--TEST-- PECL bug #18449 (Extraction of uncompressed and encrypted files fails; stream variant) --SKIPIF-- --CLEAN-- getStream()))); } echo "\nDone.\n"; --EXPECTF-- Warning: stream_get_contents(): The file size is supposed to be 2279 bytes, but we read more: 2288 bytes (corruption/wrong pwd) in %s on line %d int(2288) Warning: stream_get_contents(): The file size is supposed to be 1316 bytes, but we read more: 1328 bytes (corruption/wrong pwd) in %s on line %d int(1328) Done. PK9]Efftests/082.phptnu[--TEST-- RarArchive read_property handler basic test --SKIPIF-- --FILE-- --FILE-- getEntry('empty_file'); if ($rar_file === false) die("could not find entry"); $stream = $rar_file->getStream(); if ($stream === false) die("could not open stream"); var_dump(feof($stream), fread($stream, 1024*1024), feof($stream)); echo "\n"; echo "Done.\n"; ?> --EXPECT-- bool(false) string(0) "" bool(true) Done. PK9]Ztests/096.phptnu[--TEST-- Module info test --SKIPIF-- --FILE-- enabled RAR EXT version => %d.%d.%s UnRAR version => %d.%d%spatch%d %d-%d-%d UnRAR API version => %d extension %d Done. PK9].zytests/014.phptnu[--TEST-- RarEntry::getStream() on unicode entry --SKIPIF-- --FILE-- getStream(); if ($stream !== false) while (!feof($stream)) { echo fread($stream, 8192); } echo "\n"; echo "Done\n"; ?> --EXPECTF-- RarEntry for file "file1À۞.txt" (52b28202) contents of file 1 Done PK9]92tests/038.phptnu[--TEST-- RarArchive get iterator on closed file --SKIPIF-- --FILE-- close(); foreach ($rarF as $k => $rarE) { echo "$k. $rarE\n"; unset($rarE); } echo "Done.\n"; --EXPECTF-- Fatal error: main(): The archive is already closed, cannot give an iterator in %s on line %d PK9]J^CM@@tests/043.phptnu[--TEST-- rar_open() with volume find (callback variants 1) --SKIPIF-- getEntries(); $rar = RarArchive::open($fn, null, array("A", "resolveStatic")); $rar->getEntries(); $rar = RarArchive::open($fn, null, array(new A(), "resolveInstance")); $rar->getEntries(); function testA() { global $fn; $obj = new A(); return RarArchive::open($fn, null, array($obj, "resolveInstance")); } $rar = testA(); $rar->getEntries(); echo "Done.\n"; --EXPECTF-- A::resolveStatic() A::resolveStatic() A::resolveInstance() A::resolveInstance() Done. PK9]3Ґtests/103.phptnu[--TEST-- RarEntry direct instantiation does not crash (PHP 7) --SKIPIF-- = 7"); --FILE-- --FILE-- isSolid()?'yes':'no') ."\n"; echo "$arch2: " . (rar_solid_is($arch2)?'yes':'no') . "\n"; $arch2->close(); var_dump(rar_solid_is($arch2)); echo "\n"; echo "Done.\n"; --EXPECTF-- RAR Archive "%sstore_method.rar": no RAR Archive "%ssolid.rar": yes Warning: rar_solid_is(): The archive is already closed in %s on line %d bool(false) Done. PK9]t22tests/020.phptnu[--TEST-- RarEntry::getStream() function (solid archive) --SKIPIF-- --FILE-- getStream(); echo $e->getName().": "; $a = ""; while (!feof($stream)) { $a .= fread($stream, 8192); } echo strlen($a)." bytes, CRC "; echo int32_to_hex(crc32($a))."\n\n"; //you can confirm they're equal to those given by $e->getCrc() } echo "Done\n"; ?> --EXPECTF-- 2 files: tese.txt: 787 bytes, CRC 23B93A7A unrardll.txt: 19192 bytes, CRC 2ED64B6E Done PK9]0QQtests/057.phptnu[--TEST-- RAR file stream stat consistency with url stat --SKIPIF-- --FILE-- --FILE-- getCrc()."\n"; echo $list[1]->getCrc()."\n"; echo $list[2]->getCrc()."\n"; echo "\n"; echo "Done\n"; ?> --EXPECTF-- 52b28202 f2c79881 bcbce32e Done PK9]_tests/040.phptnu[--TEST-- RarEntry::getUnpackedSize() on platforms with 32-bit longs --SKIPIF-- getEntries(); reset($t)->extract(false, $fn2); $rarF2 = RarArchive::open($fn2); $t = $rarF2->getEntries(); var_dump($t[0]->getUnpackedSize()); var_dump($t[1]->getUnpackedSize()); echo "Done.\n"; --CLEAN-- --FILE-- isBroken("jjj"); }); argerr(function() use ($a) { rar_broken_is($a, "jjj"); }); echo "\n* unbroken file; as first call\n"; var_dump($a->isBroken()); echo "\n* unbroken file; as second call\n"; $a = RarArchive::open($f); $a->getEntries(); var_dump($a->isBroken()); echo "\n* broken file; as first call; don't allow broken\n"; $a = RarArchive::open($b); var_dump($a->isBroken()); echo "\n* broken file; as first call; don't allow broken; kill warning\n"; function retnull() { return null; } $a = RarArchive::open($b, null, 'retnull'); var_dump($a->isBroken()); echo "\n* broken file; as first call; don't allow broken; kill warning; non OOP\n"; $a = RarArchive::open($b, null, 'retnull'); var_dump(rar_broken_is($a)); echo "\n* broken file; as second call; don't allow broken\n"; $a = RarArchive::open($b); $a->getEntries(); var_dump($a->isBroken()); echo "\n"; echo "Done.\n"; --EXPECTF-- * unbroken file; bad arguments Warning: RarArchive::isBroken() expects exactly 0 parameters, 1 given in %s on line %d Warning: rar_broken_is() expects exactly 1 parameter, 2 given in %s on line %d * unbroken file; as first call bool(false) * unbroken file; as second call bool(false) * broken file; as first call; don't allow broken Warning: RarArchive::isBroken(): Volume %smulti_broken.part2.rar was not found in %s on line %d bool(true) * broken file; as first call; don't allow broken; kill warning bool(true) * broken file; as first call; don't allow broken; kill warning; non OOP bool(true) * broken file; as second call; don't allow broken Warning: RarArchive::getEntries(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: RarArchive::getEntries(): ERAR_EOPEN (file open error) in %s on line %d bool(true) Done. PK9]V*zztests/047.phptnu[--TEST-- RarEntry::extract() function (broken set fixed with volume callback) --SKIPIF-- --FILE-- getEntry('file2.txt'); echo "\nSuccess:\n"; $rar_file1 = rar_open(dirname(__FILE__).'/multi_broken.part1.rar', null, 'resolve'); $entry = $rar_file1->getEntry('file2.txt'); $entry->extract(null, dirname(__FILE__) . "/temp_file2.txt"); echo int32_to_hex(crc32(file_get_contents(dirname(__FILE__) . "/temp_file2.txt"))); echo "\n"; echo "Done\n"; ?> --CLEAN-- getEntries(); echo "Done.\n"; --EXPECTF-- Warning: RarArchive::getEntries(): Cound not expand filename aaaa%s in %s on line %d Warning: RarArchive::getEntries(): ERAR_EOPEN (file open error) in %s on line %d Done. PK9] Mtests/008.phptnu[--TEST-- rar_entry_get() function --SKIPIF-- --FILE-- --EXPECTF-- RarEntry for file "file1.txt" (52b28202) Warning: rar_entry_get(): cannot find file "nonexistent_file.txt" in Rar archive "%s" in %s on line %d bool(false) Warning: rar_open(): Failed to open %s: ERAR_EOPEN (file open error) in %s on line %d Warning: rar_entry_get() expects parameter 1 to be RarArchive, boo%s given in %s on line %d Done PK9]Ntests/108.phptnu[--TEST-- RarEntry::getPackedSize() --SKIPIF-- getEntry('4mb.txt'); var_dump($e->getPackedSize()); echo "Done.\n"; --EXPECTF-- int(2444) Done. PK9]plAAtests/114.phptnu[--TEST-- Bug 76592: solid files are partially extracted --SKIPIF-- setAllowBroken(true); // we don't fixup the headers checksum, only the contents. Ignore the error $entry = $rar->getEntry('test.dat') or die('Unable to get entry'); $contents = stream_get_contents($entry->getStream(), $entry->getUnpackedSize()); $crc32_rar = $entry->getCrc(); $crc32_cont = dechex(crc32($contents)); $crc32_orig_content = dechex(crc32($contents)); unlink($file); echo 'orig content size: ', strlen($middle), "\n"; echo 'read content size: ', strlen($contents), "\n"; if ($crc32_rar !== $crc32_cont) { die("CRC values do not match"); } if ($crc32_rar !== $crc32_orig_content) { die("CRC values do not match (2)"); } ?> ==DONE== --EXPECT-- orig content size: 10485760 read content size: 10485760 ==DONE== PK9]/tests/088.phptnu[--TEST-- RarArchive write_property gives a fatal error --SKIPIF-- --FILE-- getEntries(); $rar = RarArchive::open($fn, null, $f); $rar->getEntries(); $f2 = function ($vol) { echo "Closure (2)\n"; return A::resolve($vol); }; $rar = RarArchive::open($fn, null, $f2); unset($f2); $rar->getEntries(); echo "Done.\n"; --EXPECTF-- A::__invoke() Closure Closure (2) Done. PK9]^00tests/004.phptnu[--TEST-- RarEntry::extract() method --SKIPIF-- --FILE-- extract(dirname(__FILE__)); $contents11 = file_get_contents(dirname(__FILE__).'/test file with whitespaces.txt'); echo $contents11."\n"; @unlink(dirname(__FILE__).'/test file with whitespaces.txt'); $entry1->extract(false,dirname(__FILE__).'/1.txt'); $contents12 = file_get_contents(dirname(__FILE__).'/1.txt'); echo $contents12."\n"; @unlink(dirname(__FILE__).'/1.txt'); $rar_file2 = rar_open(dirname(__FILE__).'/latest_winrar.rar'); $entry2 = rar_entry_get($rar_file2, '2.txt'); $entry2->extract(dirname(__FILE__)); $contents21 = file_get_contents(dirname(__FILE__).'/2.txt'); echo $contents21."\n"; @unlink(dirname(__FILE__).'/2.txt'); $entry2->extract(false,dirname(__FILE__).'/some.txt'); $contents22 = file_get_contents(dirname(__FILE__).'/some.txt'); echo $contents22."\n"; @unlink(dirname(__FILE__).'/some.txt'); $entry2->extract(dirname(__FILE__)); var_dump(file_get_contents(dirname(__FILE__).'/2.txt')); @unlink(dirname(__FILE__).'/2.txt'); $oldcwd = getcwd(); chdir(dirname(__FILE__)); var_dump($entry2); var_dump($entry2->extract("","")); @unlink('2.txt'); chdir($oldcwd); echo "Done\n"; ?> --EXPECTF-- blah-blah-blah blah-blah-blah 22222 22222 string(5) "22222" object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(1) ["name%sprivate%s=> string(5) "2.txt" ["unpacked_size%sprivate%s=> int(5) ["packed_size%sprivate%s=> int(16) ["host_os%sprivate%s=> int(2) ["file_time%sprivate%s=> string(19) "2004-06-11 10:07:26" ["crc%sprivate%s=> string(8) "45a918de" ["attr%sprivate%s=> int(32) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(53) ["flags%sprivate%s=> int(16) ["redir_type%sprivate%s=> int(0) ["redir_to_directory%sprivate%s=> NULL ["redir_target%sprivate%s=> NULL } bool(true) Done PK9]pePtests/086.phptnu[--TEST-- RarArchive write_property gives a fatal error --SKIPIF-- --FILE-- w~ڽ#'pBX&}KJ)RTu֏%Eϫs-M4ZKd+&]kRNHϼsy581a™\o[ߝ * sZU[)(jů/5F*tta,RZKl[>3fN[EǷ&˦絇uLvʟ7lPI0vVкeoVi[y\zBa_aObWGbݛWZ 0RnE2zY@RZ{`f.xr晲 PpnC/59Z^JRJ1.ޑKڷo q|+imts\V a]P\F@2{`P?كco%?][w6a@?jALKލmpufŒvBFBf:9ZByN#r,LVK6-}/>tI Ǎ2/ ܲ Zv$]޽͌TP9$'JwGHkFaaESi49%fMNOZQ~Z ڪ\coZ ](DZ-#:0i7d 9"[]lP|Be6JPM>$M[tpUyxl>yߞ ݘ ܃>=yGW%qʘ'/n~Yy1/v0U}LdF]ktb3ZuueAχ@0kJΰGQGy;46qmd {YmCwCX~sƵ{g~؊<.#{6\l{6N.Mom DUUE-|P%7u27o776tp4dB);Z+ YH1s. O16pS_է-ۉ܋>bGF7YSA2lܡd}ܒ\Ӹ"q?zmD\YtDQX P:ݸ# ^ tgo4VbPCS6f3 Bhǩ{|i(anuB~cKQgO.E(Y얅X(1j0Ϊt}uu1T/qs1\)90tJ^;/*Iŷ7IAnS/!k>ؗ9VEl C1 ~JS`]I1JaD~I)JCcOTG_c~kz. TӒ|y]ƧV#({ G '/еY&:־e=pn`f{< \.\BSԫsgR ? $P}?3L9W@|*'uD;jʒy禼&H l.gI\Y]#±գ뻚4bGHL}]Gg"w6ҶKrQDCH2 {~7Ʌ@hooIc/ xx.zyRa*]JQT x.'?bvMG+ J1L[ĎA±s,#{|M)kv$=t~ً[sUm$O=xw. %}u| 7ogڂ:UpXϾ[}xtӞՇ<a^tI$u,"%daS1^E?|'TdŬzӻ_Cj*Y\ؤvU_ޫLHw I,SO/k e D3s(\xs> T$G;$q?%^^.o96G'6ڿ l| 3{1L֜s.4OMso؊Rq\&0'_Wu(y=~ hmVGQCKL^yћo^~FS\kIlV6|0&wO֋Gж3str9(d͑Ž }B ciMK'OBx$9&w\ceyuz=)(U/..t0X Mwߕ~3N|<#4dvnu`K0iaʱz}Z}k 6⽘R翢$KqZo4hw!OH K\i1R ~_<[[6߭I/r) J\P^lĖm}= ոr9XTFױ`>K 9cx-厬Z=_vw2:~StTyJ2=Y>}ZUؙ3Ih)s=8$ir}n/Q[g[fSQ^AC!͋@c:N⧈Joپ} XQ[b#HE竲 DDꡘk#d+ UjI ҿwhq_@`M=pxcz]Ypu>U Tl̆JJ!Bf?X~!پd 3yqYkuwVݽNgsMVEڃ}wG4YPʱYJ  þt+ t*uos֧J#יV#b~teqS6v i«cN wq_`mϚJ"?fą9Rϧ2F}m ֣7p Rpo~fz:dlSl=M: r'^3\1 r_r^ݾ1r*|[\\Y2`{J۲yMeHꞾE u|WxC^Ԛ{l=5`/B; O|8jLF o81wW >r[lY4]*ٷۍ}8-&Qʚ ¯"b U1݄I \bh(M~1Ů<ӱu'zStn5Յ$cx:=HIv'fכo&_g5%qΎlC2ԓ<1j{o^C;y wK W& /gZF8wZf{cpRT=my.s3M[5_ }[s{-?CԸbzTP;g!AnL=rM01=7G4Yh|ـDX<`_dt{ʂPf>̘MᇏYMd)gWn4~jB]s #s= -9{m?>PPKgjHVa#Ѹ .ЇLpԼd7F̯Lj\5~ʠ!әzL Aag-!WQn9[}h yr @S'qHZK!8sp֥IxtALQ<'K>ϷtuɉM3 XH1aT~o$= N=O@4@y+hO,jޟd`Ncwo=%p)\JO^V1Xv֓}OS9ҵSEF;&f.DW 2[pV ֺ!{_Ăb;ĎXPyK<އ4ޥBx@ m\6 TZwN$NV^yz7 :i`)D⁘Pa_(Vd􊇎 Sy_p)>܉ͻ8 7%lsN_w{@!2QMPK9]dutests/035.phptnu[--TEST-- rar_entry_get() non-existent file with exceptions --SKIPIF-- --FILE-- getEntry('nonexistentfile.txt'); } catch (RarException $re) { echo "Message: " . $re->getMessage()."\n"; echo "Code: " . $re->getCode() ."\n"; } echo "Done.\n"; --EXPECTF-- Message: cannot find file "nonexistentfile.txt" in Rar archive "%slatest_winrar.rar" Code: -1 Done. PK9]Qtests/034.phptnu[--TEST-- RarException::(set/is)UsingExceptions() test --SKIPIF-- --FILE-- --FILE-- should fail (no password):\n"; $rar_file1 = rar_open(dirname(__FILE__).'/encrypted_only_files.rar'); $entries = rar_list($rar_file1); var_dump(count($entries)); try { var_dump($entries[0]->getStream()); } catch (RarException $re) { echo "Message: " . $re->getMessage()."\n"; echo "Code: " . $re->getCode() ."\n"; } echo "Done.\n"; --EXPECTF-- --> should fail (no password): int(2) Message: unRAR internal error: ERAR_MISSING_PASSWORD (password needed but not specified) Code: 22 Done. PK9]Ptests/017.phptnu[--TEST-- RarEntry::extract() with unicode files --SKIPIF-- --FILE-- extract(false, dirname(__FILE__).'/temp.txt'); echo file_get_contents(dirname(__FILE__).'/temp.txt'); echo "\n"; @unlink(dirname(__FILE__).'/temp.txt'); echo "Done\n"; ?> --EXPECTF-- contents of file 1 Done PK9]̧tests/085.phptnu[--TEST-- RarArchive has_property handler is given a closed archive --SKIPIF-- --FILE-- close(); var_dump(isset($a[0])); echo "\n"; echo "Done.\n"; --EXPECTF-- Warning: main(): The archive is already closed in %s on line %d bool(false) Done. PK9]2tests/rar5-links.rarnu[Rar! n](BrYr@file1-hardlink.txtcontents of file b5BrY@ file1.txtfile1-hardlink.txtH %OCrY@dir-linkdir)1 BrY@file1-link.txt  file1.txtl:;JCrYdirwVQPK9]d6tests/041.phptnu[--TEST-- RarEntry::getUnpackedSize() on platforms with 64-bit longs --SKIPIF-- getEntries(); reset($t)->extract(false, $fn2); $rarF2 = RarArchive::open($fn2); $t = $rarF2->getEntries(); var_dump($t[0]->getUnpackedSize()); var_dump($t[1]->getUnpackedSize()); echo "Done.\n"; --CLEAN-- --FILE-- getComment(); echo "\n"; echo "Done\n"; --EXPECTF-- This is the comment of the file commented.rar. Done PK9]Գ//tests/104.phptnu[--TEST-- Clone of RarArchive is forbidden (PHP 7) --SKIPIF-- = 7"); --FILE-- getEntries(); echo "Never reached.\n"; ?> --EXPECTF-- Fatal error: Uncaught Error: Trying to clone an uncloneable object of class RarArchive in %s:5 Stack trace: #0 {main} thrown in %s on line %d PK9]oktests/solid.rarnu[Rar!;s t-z:# u- $jBkn1z.̪x: #}?u 5gwsL< f=3|KvTS/g`&' tBjzhX3XSb.Mk̤EA)!? 9z>n ~ror[!+G#mjpi ׁaHY.!1PP} 0"vqgN7T,59 k`\jgh W(#]^lΛ$c o;I^d*AN OG}6;ϗ4qoarU?DW޷g(μ`^0Z=˻ct0ѹgdu!!G oMS"[u3qyBI0xwS3v^a`;bj )=n ӟ>HǚN0ˈ `8m%ϞOa-A2PC\7y7IOѝE^ׁ}B`A$MxB0p1|& YXc#`:-_'+'vInu4lcjNJJHotonr+ CR->Sn̷w[lIG#8UۚLyo((uENnJlaW5љ Un;*6MOG]qc]~,"]_}>1y&gHE;!ʄ9$VɶW5DKt%;mE@$ˍb ~n9D#6'兾! 1 ^I('^ #W-41⁕tr[}ŨeȪņ,f5Gmc%۹ rb)MXFrt2^Q\H`ؑz.Y,)8rK9--K e6N3ݔ;𿨌Q s8kD\5EQ $NJ`[y(/FH-«x6 n;*ݚ"BOS}}]l.p"Jz\~3.OPw0mJC*Hr#$F*^t|,Dayš0Cg[i`>D$9PbP䓘ĻQkD]S~,̒ .e+/A ?r*A(obxD^P_v6`N@|Cv^·u3] 7命嘗%mZ+oaNA:c!쓕Wh:T -=ۘIpnB+&Z^3HE9~ UIhz;8^㳜-_1W3=0:1dBwEr0(>z1`(gљd=8e"(L0 -p;Z׈+DF5(ZUUY@|h6 ߖ5j6@ZJgy@)TXs]Duxx֗+KEK<]_e=^7RpgQ_ORh+*٪]*w:}tЇKb\ _%E7UJ/rX sjOs;oqٗKE:oH)'ێDӪOoJDZ$$ͪ qʆT/KE3e*4_yE` 㱡[m;58 G03&fovG~ OlVeْA#PA^7(aWH @kD =$@f-<lc˭Lk6 OmY)LU}}elڧ:vO*og٘o?fd9iIҟHiQ.Y~`MW.M) 6fufViU3] t7p;FnK&zz6ʽ(nRzdzאvC~ҪE$$C:%.\Wb*:JZ!*GTm"\V:UqxZBQE-)# %$p,M7DQG 7H/>0\GG>%Lfa[!+9w ){_ES Uɖ `E`V zGɪ@sĩ{,Y0 Y.;*3G|"vKtW7 &q|ବpuKiuSHLc;{|IM)R!!:8p7[fx1S )g& °]Job tV[Ԑy%u^?mdL>9~.X 60!n1 ~$ C|HwwD Aj+CFo&\7,<Xvi;@l?^N 5]Q\~W۾(d4P@H;1ItB|qZ剣q|>nYa rtjjѤ! !oB;u;+Hq:u|]w܆fP1o; mEElmLK9x,rqֳd@h$bKu}k\Hk~@ksSw 3&k'" /y+W#|*|'b,̏u2|2/[4Y+o}MNZŻ'~~|Ls@tci_Ii*Q{p:`|W~~g_eeU$n_C( \ԉ%n:Y G q4Eu# wb\x #*?#N̼@&(I ӖDv6ҰI|2ff[o!k|yjDC?} j5rE@gM!jo|u ;lD7tSp2F城]X@)yW4j)2d 菮fQ>Z' axo8Z+P"}ڌ2dʴrrZUd=ZiRT4XN%PM~>^ ' AB<|h'W}̪b:dfAW忠Hΐm%;Ҧ E,ʑ])<1-ЭW )3{1lx2"G` *)锤gV];$=&Q|%k 1xq)7i=-(] ']0ш7])teb9<4J*EP)kNl߀j]Y_{FmQ_=;ec*W_Jow,K(p0.G5pW+"MN)*6B<܈^HLb@L;eMԻbŤ(jO&>ؿ%x=qHo~5S(#yEؗg2 jX-c]BBM *f:$AUEPO~~ s55䨺Ww%'9aI{Me\m!zWKpP8sn0jQ#4({ʣ)תB=H$t+Rh/QC \ FgJ3Fsot}AK\{;#=y7,p&׍&$^G4Q\dwh&-K44)Op"DAyt|rYUr?#)>LdΊtc[lb|T(a|`n T -Y3C! :岜@ pvX\k[7*,iEƓݑ<4f&7(lB ܫQ4C.˗*:lӬ0 2-UGY0tmp\'L"s~ D\"Sm={@PK9]Ɯtests/013.phptnu[--TEST-- rar_entry_get() and RarEntry::getName() coherence --SKIPIF-- --FILE-- getName(); $entryback = rar_entry_get($rar_file1, $name); echo "$entryback\n"; echo "\n"; echo "Done\n"; ?> --EXPECTF-- RarEntry for file "file1À۞.txt" (52b28202) Done PK9]kztests/046.phptnu[--TEST-- RarEntry::getStream() function (broken set fixed with volume callback) --SKIPIF-- --FILE-- getStream(); echo $e->getName().": "; $a = ""; while (is_resource($stream) && !feof($stream)) { $a .= fread($stream, 8192); } echo strlen($a)." bytes, CRC "; echo int32_to_hex(crc32($a))."\n\n"; //you can confirm they're equal to those given by $e->getCrc() } echo "Done\n"; ?> --EXPECTF-- file1.txt: 18 bytes, CRC 52B28202 file2.txt: 17704 bytes, CRC F2C79881 file3.txt: 18 bytes, CRC BCBCE32E Done PK9]b b tests/corrupted.rarnu[Rar!Aps ét-IRE5ځX<55 test\C:5B'T;Z$'+֓IPЗNZ+y) {) e"*w@{$6Ȥf`& ќ~gԹt,(WX<55 test\Sbv=ÐyVpP;MAp^AN6#gԧ~t5!&X<55test\WeT47hkFsw~g`t(X<50Atest\a\a6-t(aY<50Atest\awTt0X<50Atest\a.a.a.a\aBt.X<50 Atest\a.a.a\aʥt,X<50 Atest\a.a\at.J~X<55test\dcyxypbj:Dgvt2<ӁX<55test\g|j{][\};V;[d%Lgԏt1!o.pX<55test\g cnn݇t .B}:(\gt5 J~X<55test\a.a.a.a\a.a\lwtvHY(7gԭt);6!LX<55 test\a\oeAVbPyC_RX ښ7\)7~7:Kdhg[t*!f|AgZt? J~X<55test\a.a\a.a.a.a\y.llywbylsxam.<%gt+c5rX<55 test\ =.*0`PdCBgmt(gY<50Atest\a.a t0Y<50Atest\a.a.a.a\a.at.2Y<50Atest\a.a.a\a.at,X<50 Atest\a.a\a.a[t,Y<50 Atest\a\a.at*X<50 Atest\a.a.at4X<50Atest\a.a.a.a\a.a.a at0X<50Atest\a.a.a\a.a.at0YY<50Atest\a.a\a.a.at.X<50 Atest\a\a.a.a7t4X<50Atest\a.a.a.a\a.a.a.aUjt.X<50 Atest\a.a.a.at4X<50Atest\a.a.a\a.a.a.at0Y<50Atest\a.a\a.a.a.ait0X<50Atest\a\a.a.a.at0< X<55test\ctkmgt.cmwf%&E AhԢ$f 8ш:l"VQ汉E\9_J5!͠xgDt7'tX<55test\.btareckw.jnxkmpig,mo[=KKčXA;hd-g?Zt)"艁X<55 test\.kaqޡ[&`SP*~WyOgt2j3ہX<55test\a\qijt.lfcrpg4ANWg`gZt< bOX<55test\a.a\j.ngmccgooauqn.cl.m;-:g,t1&5X<55test\mn.x.lt.nfvdP }nIOXbMƺld^gzRt0#QX<55test\.a.cfmsku.pyO{ISoGJ{Fg$t<zB2X<55test\a.a\a.a.a\oyo:nwnlh.uhywQϠgt-R2X<55 test\.xvtxhrfN'$gt4 X<55test\a.a.a\a.a\qv.ybgt&gY<50Atest={@PK9]JtR tests/019.phptnu[--TEST-- RarEntry::getStream() function (store method) --SKIPIF-- --FILE-- getStream(); echo $e->getName().": "; $a = ""; while (!feof($stream)) { $a .= fread($stream, 512); } echo strlen($a)." bytes, CRC "; echo int32_to_hex(crc32($a))."\n\n"; //you can confirm they're equal to those given by $e->getCrc() } echo "Done\n"; ?> --EXPECTF-- 1 files: tese.txt: 787 bytes, CRC 23B93A7A Done PK9]9otests/026.phptnu[--TEST-- RarEntry::getStream() (file level password) --SKIPIF-- --FILE-- should fail (no password):\n"; $rar_file1 = rar_open(dirname(__FILE__).'/encrypted_only_files.rar'); $entries = rar_list($rar_file1); var_dump(count($entries)); var_dump($entries[0]->getStream()); echo "\n"; echo "--> success (password is the same as the one given on rar_open):\n"; $rar_file2 = rar_open(dirname(__FILE__).'/encrypted_only_files.rar', 'samplepassword'); $entries = rar_list($rar_file2); echo stream_get_contents($entries[0]->getStream()); echo "\n\n"; echo "--> should give incorrect data (password of 2nd file different from the one given on rar_open):\n"; echo rawurlencode(stream_get_contents($entries[1]->getStream())); echo "\n\n"; echo "--> should give correct data (password of 2nd file is specified):\n"; echo stream_get_contents($entries[1]->getStream('samplepassword2')); echo "\n\n"; echo "--> success (password is the same as the one given on rar_open, which shouldn't have been forgotten):\n"; echo stream_get_contents($entries[0]->getStream()); echo "\n\n"; echo "Done\n"; --EXPECTF-- --> should fail (no password): int(2) Warning: RarEntry::getStream(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) --> success (password is the same as the one given on rar_open): Encrypted file 1 contents. --> should give incorrect data (password of 2nd file different from the one given on rar_open): t%09%A6%2B%0D%1B%F6%815%5E%E7%EC%C0%0BF%5EH%3A%C0%0D%815%5E%E7%EC%C0 --> should give correct data (password of 2nd file is specified): Encrypted file 1 contents. --> success (password is the same as the one given on rar_open, which shouldn't have been forgotten): Encrypted file 1 contents. Done PK9]^atests/107.phptnu[--TEST-- Redirection functions --SKIPIF-- 'FSREDIR_UNIXSYMLINK', RarEntry::FSREDIR_WINSYMLINK => 'FSREDIR_WINSYMLINK', RarEntry::FSREDIR_JUNCTION => 'FSREDIR_JUNCTION', RarEntry::FSREDIR_HARDLINK => 'FSREDIR_HARDLINK', RarEntry::FSREDIR_FILECOPY => 'FSREDIR_FILECOPY', ); $a = rar_open(dirname(__FILE__) . '/rar5-links.rar'); $i = 0; foreach ($a as $e) { if ($i++ != 0) echo "\n"; echo "$i. ", $e->getName(), "\n"; $type = $e->getRedirType(); $type = $type ? $m[$type] : $type; echo "redir type: ", var_export($type, true), "\n"; echo "redir to dir: ", var_export($e->isRedirectToDirectory(), true), "\n"; echo "redir target: ", var_export($e->getRedirTarget(), true), "\n"; // break; } echo "Done.\n"; --EXPECTF-- 1. file1-hardlink.txt redir type: NULL redir to dir: NULL redir target: NULL 2. file1.txt redir type: 'FSREDIR_HARDLINK' redir to dir: false redir target: 'file1-hardlink.txt' 3. dir-link redir type: 'FSREDIR_UNIXSYMLINK' redir to dir: true redir target: 'dir' 4. file1-link.txt redir type: 'FSREDIR_UNIXSYMLINK' redir to dir: false redir target: 'file1.txt' 5. dir redir type: NULL redir to dir: NULL redir target: NULL Done. PK9]qtests/022.phptnu[--TEST-- RarEntry::extract() with directory --SKIPIF-- --FILE-- extract(dirname(__FILE__)); var_dump($extrres); $exists = is_dir($dir); var_dump($exists); @rmdir($dir); echo "\n\n"; $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR . "emptydircust"; $exists = is_dir($dir); var_dump($exists); $extrres = $e->extract(false, $dir); var_dump($extrres); $exists = is_dir($dir); var_dump($exists); @rmdir($dir); echo "Done\n"; --EXPECTF-- bool(false) bool(true) bool(true) bool(false) bool(true) bool(true) Done PK9]ų;[[tests/store_method.rarnu[Rar!ϐs ?t -z:#getEntry('file1.txt'); var_dump($e->getVersion()); echo "Done.\n"; --EXPECTF-- int(50) Done. PK9]ۣtests/encrypted_only_files.rarnu[Rar!ϐs ]t$902~;3 encfile1.txtl tOM1 --FILE-- should fail (no password):\n"; $rar_file1 = rar_open(dirname(__FILE__).'/encrypted_headers.rar'); $entries = rar_list($rar_file1); echo "\n--> should fail (wrong password):\n"; $rar_file1 = rar_open(dirname(__FILE__).'/encrypted_headers.rar', 'wrongpassword'); $entries = rar_list($rar_file1); echo "\n--> should work:\n"; $rar_file2 = rar_open(dirname(__FILE__).'/encrypted_headers.rar', 'samplepassword'); $entries = rar_list($rar_file2); echo "Found " . count($entries) . " files.\n"; echo "Content of first one follows:\n"; //reset($entries)->extract(false, "./temp.txt"); $stream = reset($entries)->getStream(); var_dump($stream); if ($stream !== FALSE) { while (!feof($stream)) { echo fread($stream, 128); } } echo "\n"; echo "Done\n"; --EXPECTF-- --> should fail (no password): Warning: rar_list(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d --> should fail (wrong password): Warning: rar_list(): ERAR_BAD_DATA in %s on line %d --> should work: Found 2 files. Content of first one follows: resource(%d) of type (stream) Encrypted file 1 contents. Done PK9]Md tests/dirs_and_extra_headers.rarnu[Rar!os@ 7t O<0 ?\%2Fempty%2E\file7.txtp0| DMPvzbrz;3STM:stream2.txt> 4MPvzbrՑz#f|3ACL U ͹ i@Y(0 QyyaAXL8 HC0Q,i˃owvO=w hDxyOsmg/bb CX وP„J8tE<0?\%2Fempty%2Ep0 +<ڊ< `z#"3ACL T= =l (Z&jooloFI6:AJ4F`F02h_xjx}&Z`Z]9m׏bET*JqOwȊ'JyPAt?y<0 ?\emptyp0Xy !iBbN0D!()(PQ$9"пիw7>A2-^" RvY+l/߯bEfZ}ܐ4B a3~yEW2t?y<0 ?\?_2G0\0 :y<jy< :bz#}gS3ACL Q> !iBbN0D!()(PQ$9"пիw7>A2-^" RvY+l/߯bEfZ}ܐ4B a3~yEW2t8<0?@0pF y< !iBbN0D!()(PQ$9"пիw7>A2-^" RvY+l/߯bEfZ}ܐ4B a3~yEW2gtDy<0allow_everyone_ni8y<8y<8zz#Vh{݂3ACL PϹkdpR4c9*`uX#s{{>-;iE}+'Cnsz ;֣b8돺 z6  `0RRProtect+g?]q6BY Yf/je)o6_J(v.2a癕 y¾+)1ZRaM^UՍ`(,h Y1 PBtnGGikHBI0le1txtyE(]u, 8X?n5͑."_mE<r6PhRӶJAM;Quli;2J%ۋr ʓ%1ưd@ƤltV:d ?ddY&2)JYtNj+ XNLFM""|&u +__+qҚyF Ob y!y<[E’`P fVc݂&qƧˉDd;A(n֗P7aՅa Ku)wbmW84ZZD |BLqjf{EH7^J\,ʝȥ`ڤaY`܊=fO}>QիR+HqP KKCtudw(7$-&xzI\ fe= Y. 1 r"v&q[S͡I-ߊ DxD/yOsƙng3gӗ :ց rN"t+ ǝ 忈An_bKr㾗?Q2=m}zӦ#ASl>ӳN̔[wL V=p2wAA0V͹Z3e<Y%t4M:m+Coe;a:`B]9n,"ZkjӥJL?ש#[RcmӤF{Y5œD`| 4+4py%,F铏4!h[{ýaXͧ(TD*= +X{|:5n MDC^ЛAavu % sY#|"33ACLL@qp4MxDAQ;g={@PK9]vtests/002.phptnu[--TEST-- rar_list() function --SKIPIF-- --FILE-- --EXPECTF-- array(2) { [0]=> object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(0) ["name%sprivate%s=> string(9) "plain.txt" ["unpacked_size%sprivate%s=> int(15) ["packed_size%sprivate%s=> int(25) ["host_os%sprivate%s=> int(3) ["file_time%sprivate%s=> string(19) "2004-06-11 11:01:24" ["crc%sprivate%s=> string(8) "7728b6fe" ["attr%sprivate%s=> int(33188) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(51) ["flags%sprivate%s=> int(0) ["redir_type%sprivate]=> int(0) ["redir_to_directory%sprivate]=> NULL ["redir_target%sprivate]=> NULL } [1]=> object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(1) ["name%sprivate%s=> string(30) "test file with whitespaces.txt" ["unpacked_size%sprivate%s=> int(14) ["packed_size%sprivate%s=> int(20) ["host_os%sprivate%s=> int(3) ["file_time%sprivate%s=> string(19) "2004-06-11 11:01:32" ["crc%sprivate%s=> string(8) "21890dd9" ["attr%sprivate%s=> int(33188) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(51) ["flags%sprivate%s=> int(0) ["redir_type%sprivate]=> int(0) ["redir_to_directory%sprivate]=> NULL ["redir_target%sprivate]=> NULL } } array(2) { [0]=> object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(0) ["name%sprivate%s=> string(5) "1.txt" ["unpacked_size%sprivate%s=> int(5) ["packed_size%sprivate%s=> int(17) ["host_os%sprivate%s=> int(2) ["file_time%sprivate%s=> string(19) "2004-06-11 10:07:18" ["crc%sprivate%s=> string(8) "a0de71c0" ["attr%sprivate%s=> int(32) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(53) ["flags%sprivate%s=> int(0) ["redir_type%sprivate]=> int(0) ["redir_to_directory%sprivate]=> NULL ["redir_target%sprivate]=> NULL } [1]=> object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(1) ["name%sprivate%s=> string(5) "2.txt" ["unpacked_size%sprivate%s=> int(5) ["packed_size%sprivate%s=> int(16) ["host_os%sprivate%s=> int(2) ["file_time%sprivate%s=> string(19) "2004-06-11 10:07:26" ["crc%sprivate%s=> string(8) "45a918de" ["attr%sprivate%s=> int(32) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(53) ["flags%sprivate%s=> int(16) ["redir_type%sprivate]=> int(0) ["redir_to_directory%sprivate]=> NULL ["redir_target%sprivate]=> NULL } } Warning: rar_open(): Failed to open %s: ERAR_EOPEN (file open error) in %s on line %d Warning: rar_list() expects parameter 1 to be RarArchive, boo%s given in %s on line %d Done PK9]))tests/029.phptnu[--TEST-- RarArchive::getEntries() basic test --SKIPIF-- --FILE-- getEntries() as $e) { echo $e . "\n"; } echo "Done\n"; --EXPECTF-- RarEntry for file "emptydir%clink" (36ac99f1) RarEntry for file "file" (b95e8411) RarEntry for file "link" (43e55b49) RarEntry for directory "emptydir" (0) RarEntry for directory "nopermdir" (0) RarEntry for directory "setuiddir" (0) RarEntry for directory "stickydir" (0) Done PK9]T| tests/105.phptnu[--TEST-- Clone of RarArchive is forbidden (PHP 5.x) --SKIPIF-- = 70000) die("skip for PHP 5.x"); --FILE-- getEntries(); echo "Never reached.\n"; ?> --EXPECTF-- Fatal error: Trying to clone an uncloneable object of class RarArchive in %s on line %d PK9]zC88tests/079.phptnu[--TEST-- RarArchive count elements handler test --SKIPIF-- --FILE-- close(); var_dump(count($a)); echo "\n* Closed file test (2):\n"; $a = RarArchive::open($f); $a->getEntries(); $a->close(); var_dump(count($a)); echo "\n* Closed file test (3, exceptions):\n"; $a = RarArchive::open($f); RarException::setUsingExceptions(true); $a->getEntries(); $a->close(); try { var_dump(count($a)); } catch (RarException $e) { echo "OK, threw exception with message \"".$e->getMessage()."\"\n"; } RarException::setUsingExceptions(false); echo "\n* Empty file:\n"; $a = RarArchive::open($fempty); echo "Count: " . count($a) . "\n"; echo "\n"; echo "Done.\n"; --EXPECTF-- * Normal test: Count: 13 * Closed file test (1): Warning: %s(): The archive is already closed in %s on line %d int(0) * Closed file test (2): Warning: %s(): The archive is already closed in %s on line %d int(0) * Closed file test (3, exceptions): OK, threw exception with message "The archive is already closed" * Empty file: Count: 0 Done. PK9]͛P P tests/095.phptnu[--TEST-- Wrapper cache exaustion test --SKIPIF-- --FILE-- getEntry('file1.txt'); var_dump($e->getMethod()); echo "Done.\n"; --EXPECTF-- int(48) Done. PK9]}ztests/directories.rarnu[Rar!ϐs 8t = 3rKy;0 dirwithsth\fileindir.txtThis file is inside a directory.t/Ky;0 dirwithsth|rt-Ky;0emptydir/={@PK9]hL,g tests/059.phptnu[--TEST-- url stat test --SKIPIF-- 0 [ino] => 0 [mode] => 16895 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 0 [atime] => 0 [mtime] => 312768000 [ctime] => 0 [blksize] => %s [blocks] => %s ) RAR root is dir: bool(true) RAR root variant 2 matches: bool(true) RAR root variant 3 matches: bool(true) Regular file: Array ( [dev] => 0 [ino] => 0 [mode] => 33188 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 8 [atime] => 0 [mtime] => 1259625512 [ctime] => 0 [blksize] => %s [blocks] => %s ) Regular file: Array ( [dev] => 0 [ino] => 0 [mode] => 16877 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 0 [atime] => 0 [mtime] => 1259625807 [ctime] => 0 [blksize] => %s [blocks] => %s ) Done. PK9]ʊtests/027.phptnu[--TEST-- RarEntry::getStream() with Linux directories and links --SKIPIF-- --FILE-- getAttr() & 0x1FF) . "\n"; //no read/write/execute perms echo "win directory bit: " . (($e->getAttr() & RarEntry::ATTRIBUTE_WIN_DIRECTORY) != 0) ."\n"; echo "unix directory attr: " . (($e->getAttr() & RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET) == RarEntry::ATTRIBUTE_UNIX_DIRECTORY) ."\n"; echo "unix symlink attr: " . (($e->getAttr() & RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET) == RarEntry::ATTRIBUTE_UNIX_SYM_LINK) ."\n"; $stream = $e->getStream(); $cont = stream_get_contents($stream); echo "$cont (strlen() " . strlen($cont) . ")\n"; echo "\nLink\n"; $e = rar_entry_get($rar, "link"); echo $e."\n"; echo "perms: " . decoct($e->getAttr() & 0x1FF) . "\n"; echo "win directory bit: " . (($e->getAttr() & RarEntry::ATTRIBUTE_WIN_DIRECTORY) != 0) ."\n"; //coincidence echo "unix directory attr: " . (($e->getAttr() & RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET) == RarEntry::ATTRIBUTE_UNIX_DIRECTORY) ."\n"; echo "unix symlink attr: " . (($e->getAttr() & RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET) == RarEntry::ATTRIBUTE_UNIX_SYM_LINK) ."\n"; $stream = $e->getStream(); $cont = stream_get_contents($stream); echo "$cont (strlen() " . strlen($cont) . ")\n"; //varies on windows and linux echo "Done\n"; --EXPECTF-- Directory RarEntry for directory "nopermdir" (0) perms: 0 win directory bit: unix directory attr: 1 unix symlink attr: (strlen() 0) Link RarEntry for file "link" (43e55b49) perms: 777 win directory bit: 1 unix directory attr: unix symlink attr: 1 %s Done PK9]tests/055.phptnu[--TEST-- Stream wrapper with volume find callback --SKIPIF-- array('volume_callback'=>'resolve')))); $a = stream_get_contents($stream); echo strlen($a)." bytes, CRC "; echo int32_to_hex(crc32($a))."\n\n"; //you can confirm they're equal to those given by $e->getCrc() echo "Done.\n"; --EXPECTF-- 17704 bytes, CRC F2C79881 Done. PK9]tests/062.phptnu[--TEST-- RAR directory stream stat --SKIPIF-- 0 [ino] => 0 [mode] => 16895 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 0 [atime] => 0 [mtime] => 312768000 [ctime] => 0 [blksize] => %s [blocks] => %s ) Sub-root directory: Array ( [dev] => 0 [ino] => 0 [mode] => 16895 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 0 [atime] => 1272938643 [mtime] => 1272938643 [ctime] => 1272813170 [blksize] => %s [blocks] => %s ) Done. PK9]1Etests/latest_winrar.rarnu[Rar!sH t*qޠP05 1.txtsP1wsgt*EP05 2.txtD;t~Ngz6KK0RRProtect+.Rar!sH t*qޠP05 1.txtsP1wsgt*EP05 2.txtD;t~Ng={@PK9]'(MMtests/empty_file.rarnu[Rar!ϐs ]t *l@3 empty_fileg={@PK9]P$tests/100.phptnu[--TEST-- fopen modes 'r' and 'rb' are the only allowed --SKIPIF-- --FILE-- --EXPECTF-- Testing 'r' opened Testing 'rb' opened Testing 'r+' Warning: fopen(%s): %cailed to open stream: Only the "r" and "rb" open modes are permitted, given r+ in %s on line %d Done. PK9]P9Stests/061.phptnu[--TEST-- RAR directory stream attempt on file --SKIPIF-- --CLEAN-- extract("", $dest); if ($res) { echo $e->getPosition() . ". $e\n"; echo file_get_contents($dest); echo "\n"; } else { die("failed extraction"); } } echo "Done.\n"; --EXPECTF-- 0. RarEntry for file "file.txt" (ae2a88a7) Content of first file. 1. RarEntry for file "file.txt" (771df243) Content of second file. Done. PK9]?@>]tests/069.phptnu[--TEST-- RarEntry direct instantiation does not crash (PHP 5.x) --SKIPIF-- = 70000) die("skip for PHP 5.x"); if (key_exists('USE_ZEND_ALLOC', $_ENV) && PHP_VERSION_ID < 70000) die('skip do not use with valgrind in PHP <7'); --FILE-- --FILE-- ztests/075.phptnu[--TEST-- RarEntry::getStream NULL can be given to indicate there's no password --SKIPIF-- --FILE-- getStream(); var_dump($stream); echo "\n* NULL given (should have the same effect as no password):\n"; $stream = $e->getStream(NULL); var_dump($stream); echo "\n* empty string given as password (should have the same effect; " . "rar disallows empty passwords):\n"; $stream = $e->getStream(''); var_dump($stream); echo "\n* non-empty password given; should give stream:\n"; $stream = $e->getStream('bugabuga'); var_dump($stream); break; } echo "\n"; echo "Done.\n"; --EXPECTF-- * No password given: Warning: RarEntry::getStream(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) * NULL given (should have the same effect as no password): Warning: RarEntry::getStream(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) * empty string given as password (should have the same effect; rar disallows empty passwords): Warning: RarEntry::getStream(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) * non-empty password given; should give stream: resource(%d) of type (stream) Done. PK9]C##tests/073.phptnu[--TEST-- RarEntry::getStream handles files with non-unique entry names --SKIPIF-- --FILE-- getStream(); if ($stream) { echo $e->getPosition() . ". $e\n"; echo stream_get_contents($stream); echo "\n"; } } echo "Done.\n"; --EXPECTF-- 0. RarEntry for file "file.txt" (ae2a88a7) Content of first file. 1. RarEntry for file "file.txt" (771df243) Content of second file. Done. PK9]4Atests/018.phptnu[--TEST-- rar_list()/rar_entry_get() with not first volume --SKIPIF-- --FILE-- --FILE-- getName()} is ". ($e->isDirectory()?"":"not ") . "a directory.\n"; } echo "Done\n"; --EXPECTF-- dirwithsth%cfileindir.txt is not a directory. dirwithsth is a directory. emptydir is a directory. Done PK9]Ը@@tests/001.phptnu[--TEST-- rar_open() function --SKIPIF-- --FILE-- --EXPECTF-- object(RarArchive)#%d (%d) { } object(RarArchive)#%d (%d) { } Warning: rar_open(): Failed to open %sno_such_file.rar: ERAR_EOPEN (file open error) in %s on line %d bool(false) Done PK9]1Ctests/005.phptnu[--TEST-- rar_comment_get() function --SKIPIF-- --FILE-- getComment()); echo "\n"; $rar_file2 = rar_open(dirname(__FILE__).'/linux_rar.rar'); var_export(rar_comment_get($rar_file2)); echo "\n"; rar_close($rar_file2); var_export(rar_comment_get($rar_file2)); echo "\n"; echo "Done\n"; ?> --EXPECTF-- 'This is the comment of the file commented.rar.' 'This is the comment of the file commented.rar.' 'This is the comment of the file commented.rar.' NULL Warning: rar_comment_get(): The archive is already closed in %s on line %d false Done PK9]SzSStests/089.phptnu[--TEST-- RarArchive unset_property gives a fatal error --SKIPIF-- --FILE-- --FILE-- --FILE-- = 2) break; //$e->extract(false, dirname(__FILE__).'/temp.txt'); //echo "now stream\n"; $stream = $e->getStream(); echo $e->getName().": "; if ($stream === false) { echo "Could not get stream.\n\n"; continue; } while (!feof($stream) && $i != 2) { echo fread($stream, 8192); } fclose($stream); echo "\n"; } echo "Done\n"; ?> --EXPECTF-- 51 files (will test only the first 4): test%s: The great battle of Gunprex versus Optiter!!!!!1 Gunprex, Fire! So long, Optiter! test%s Done PK9](tests/056.phptnu[--TEST-- RAR file stream stat --SKIPIF-- 0 [ino] => 0 [mode] => 33206 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 5 [atime] => 0 [mtime] => 1086948439 [ctime] => 0 [blksize] => %s [blocks] => %s ) Done. PK9]$ --CLEAN-- @unlink(dirname(__FILE__).'/extract_temp'); --FILE-- should fail (no password):\n"; $rar_file1 = rar_open(dirname(__FILE__).'/encrypted_only_files.rar'); $entries = rar_list($rar_file1); var_dump(count($entries)); var_dump($entries[0]->extract(false, $dest)); echo "\n"; echo "--> success (password is the same as the one given on rar_open):\n"; $rar_file2 = rar_open(dirname(__FILE__).'/encrypted_only_files.rar', 'samplepassword'); $entries = rar_list($rar_file2); var_dump($entries[0]->extract(false, $dest)); echo file_get_contents($dest); unlink($dest); echo "\n\n"; echo "--> should fail (password of 2nd file different from the one given on rar_open):\n"; var_dump($entries[1]->extract(false, $dest)); echo "\n\n"; echo "--> should give correct data (password of 2nd file is specified):\n"; var_dump($entries[1]->extract(false, $dest, 'samplepassword2')); echo file_get_contents($dest); unlink($dest); echo "\n\n"; echo "Done\n"; --EXPECTF-- --> should fail (no password): int(2) Warning: RarEntry::extract(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) --> success (password is the same as the one given on rar_open): bool(true) Encrypted file 1 contents. --> should fail (password of 2nd file different from the one given on rar_open): Warning: RarEntry::extract(): ERAR_BAD_DATA in %s on line %d bool(false) --> should give correct data (password of 2nd file is specified): bool(true) Encrypted file 1 contents. Done PK9]Z!tests/113.phptnu[--TEST-- RarEntry::isEncrypted() --SKIPIF-- getEntry('file1.txt'); var_dump($e->isEncrypted()); $a = rar_open(dirname(__FILE__) . '/encrypted_only_files.rar'); $e = $a->getEntry('encfile1.txt'); var_dump($e->isEncrypted()); echo "Done.\n"; --EXPECTF-- bool(false) bool(true) Done. PK9]tests/072.phptnu[--TEST-- rar_list handles files with non-unique entry names --SKIPIF-- --FILE-- getPosition() . ". $e\n"; } echo "\n"; echo "Done.\n"; --EXPECTF-- 0. RarEntry for file "file.txt" (ae2a88a7) 1. RarEntry for file "file.txt" (771df243) Done. PK9]BBtests/sparsefiles_rar.rarnu[Rar!ϐs Ɯt4ֈ;oHe<3 sparsefiles.rarux Y;Lb K&Thbh 40$%*"B1ZYB2\l^h B"6 % MSGym- [},_axV_Õs+}q4ewmu}_WkGxYy:Y\ks]p~n;|| +~{mha_n?/#4a0|z~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| 'g^ΦX󩻖'SNρOρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>!^~v| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gwDóOρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>7}=O[Y0S[ˍCWKr~oy>'8 wN!\_>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>N:v| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'SOu>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>N:v| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'g>|a'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gwDMo|z~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~|<+'gv| 'gv| 'gv| 'gw7|~|~|~|v~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| ߴކ-2|3v| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| |~|~|~|v~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| 3~p;[gyNρ;>Nρ;>Nρ;>N?Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>OρkmΧі%}?g3WO/={@PK9]j~tests/015.phptnu[--TEST-- rar_close() liberates resource (PECL bug #9649) --SKIPIF-- --FILE-- extract("."); unlink(dirname(__FILE__).'/temp.rar'); echo "Done\n"; ?> --EXPECTF-- RAR Archive "%s" RarEntry for file "1.txt" (a0de71c0) RAR Archive "%s" (closed) Warning: RarEntry::extract(): The archive is already closed in %s on line %d Done PK9]ڙ7 7 tests/080.phptnu[--TEST-- File stream EOF behavior --SKIPIF-- --FILE-- getEntry("file1.txt")->getStream(); echoeof($stream); var_dump(fread($stream, 18)); echoeof($stream); var_dump(fread($stream, 1)); echoeof($stream); echo "\n* First fread is given size - 1:\n"; $stream = $a->getEntry("file1.txt")->getStream(); echoeof($stream); var_dump(fread($stream, 17)); echoeof($stream); var_dump(fread($stream, 1)); echoeof($stream); var_dump(fread($stream, 1)); echoeof($stream); echo "\n* First fread is given size + 1:\n"; $stream = $a->getEntry("file1.txt")->getStream(); echoeof($stream); var_dump(fread($stream, 19)); echoeof($stream); echo "\n* Read is aligned with dictionary, buffer and file size:\n"; $stream = $a2->getEntry("4mb.txt")->getStream(); echoeof($stream); var_dump(strlen(fread($stream, 4194304))); echoeof($stream); var_dump(strlen(fread($stream, 1))); echoeof($stream); echo "\n* Read is dictionary, buffer and file size - 1:\n"; $stream = $a2->getEntry("4mb.txt")->getStream(); echoeof($stream); var_dump(strlen(fread($stream, 4194303))); echoeof($stream); var_dump(strlen(fread($stream, 1))); echoeof($stream); var_dump(strlen(fread($stream, 1))); echoeof($stream); echo "\n* Read is dictionary, buffer and file size + 1:\n"; $stream = $a2->getEntry("4mb.txt")->getStream(); echoeof($stream); var_dump(strlen(fread($stream, 4194305))); echoeof($stream); echo "\n"; echo "Done.\n"; --EXPECTF-- * First fread is given file size: Not at eof string(18) "contents of file 1" Not at eof string(0) "" At eof * First fread is given size - 1: Not at eof string(17) "contents of file " Not at eof string(1) "1" Not at eof string(0) "" At eof * First fread is given size + 1: Not at eof string(18) "contents of file 1" At eof * Read is aligned with dictionary, buffer and file size: Not at eof int(4194304) Not at eof int(0) At eof * Read is dictionary, buffer and file size - 1: Not at eof int(4194303) Not at eof int(1) Not at eof int(0) At eof * Read is dictionary, buffer and file size + 1: Not at eof int(4194304) At eof Done. PK9]@qtests/090.phptnu[--TEST-- RarArchive has_property gives a fatal error --SKIPIF-- --FILE-- 2R8HXñ*q0`s>L:/x(vdH_\%+Noq*7ˊ.u G?;6Ljڒȧ?D%EV BO$.)ts1E{l-7$5Z&@IP".ۥ.o8zXcGwH4|*ϒ˗_[;7 [zTkrY}A%A3a^3VpAlWzhbј;bjvvsBW16$DT'@E\t_YFYJvUH:VuD7iةz27 I$/4j; އӃ zˊ}5֌XzUAŸMDAh=xr[U7`J?2X:-ՙ(M?(m+54{k[B>e5I4 ԟY̐v&5VfZ(+/Fňu8"[/ DR }bzx 1Mz:U[ae\=>6EGL6{~.q-8@=9j,*‡/2w' =L3eB ۹GSq@Bzj53Z31[F0; jT@xCClj^f8r껤P/p2F`sooxH@4DpZt޲ }&xåoYPKӮΧv1j^Z?J}C~ T Aj.uAfR{}bNBuФf;OV}%ֺG;~OoK::/ڸ' 'uVQcKyMn*E88*bX .5Z`Vm>ʒIAב bk+*FJ*<*ǝQ%l[t})QGA/Y&b\^h+ئTѰ}VyThZӷSMEt^Kƚ2DYlߣX0\b3dZB5=ȋ͘e]yPv^<?k,Jvw9#q>O@XE6¯>k虍\_#c;T><LQ v6P\WzryAY]cR6΄lz;L=%\xW_(vU;3lc !iTY%_2;Z=7C` 65n *Kay['e֦'xG6PaD6YT=8&;8r܊hkÁAaX/1c+x5L1q%<ԁd9nsN ue#|,QBX|lgҞSnsX Zr!NvC! MkjXG&P@' ΅u E+3U}~b4S&  QJTA}M]}Cyg-?f%` EpRz^-0{;h]Oh CK74:_aaj+t{=wH{ܳབ& vPSي[gaI>1_;FCs`M+Sd({‹,#G|`aEOI>`CYx[~ oB\b90Bgzpb@z`xO0v2Rs 0Ĉ^&ZZ/ADTztbScT:f:# s6Yڇ 6O y5<&_yy+S՛zyTXl{; ([ɳ,U%$4)@Spotuz)]fwN+?u|;[9;ݬjKRǤb]~4 M|r<}<>ʂQ_hP< ʊ t%ہઃ[G\e=pG_UZdj JAz߲_fz/^I-{mrc@w0_O2&HWz kߎ0~w5g*8/}ЯFV:l`ql1\JMyb6J,վȉI6tţN[ womKtQ ,k\{罻3M)ӭ"0 ntpq `'ܓJAK3P4FhqW-i4r;O;yY"bܯVBLP|\nU9MXvssny|ow-=V^N4סi6:O=lIƃ Yt~1n;OHG kڷcbH4m4 *a+`\m\>Εbqda]>,q? g<#}ce?* MInϿ&49 CদK<{/H)rs6{+_UE~{'~]Z\u')[$ Y¹.u/ˡE͵7cz>%S"#hyX. dv cW~ڢ@ǃ/I]pe@B煒~EƟѫ2"\g!bN"~$?j,'S1ج':Ӯ) _ypqhTl]:23E:UM*\nɄ'z(:vXVi)t {(pPs|\i=ِ#=XN$>XYk1ϩ}; . ۰1_N_Cui[Lx@EEA֦"2j1vARS --FILE-- getStream(); if ($stream === false) { die("Failed to get stream.\n"); break; } echo $e->getName().": "; $a = ""; while (!feof($stream)) { $a .= fread($stream, 8192); } echo strlen($a)." bytes, CRC "; echo int32_to_hex(crc32($a))."\n\n"; //you can confirm they're equal to those given by $e->getCrc() } echo "Done\n"; ?> --EXPECTF-- 3 files: file1.txt: 18 bytes, CRC 52B28202 file2.txt: 17704 bytes, CRC F2C79881 file3.txt: 18 bytes, CRC BCBCE32E Done PK9]!!tests/109.phptnu[--TEST-- RarEntry::getHostOs() --SKIPIF-- getEntry('4mb.txt'); var_dump($e->getHostOs()); var_dump(RarEntry::HOST_WIN32); echo "Done.\n"; --EXPECTF-- int(2) int(2) Done. PK9]_tests/016.phptnu[--TEST-- RarEntry::extract() method (corrupt RAR file) --SKIPIF-- --FILE-- = 4) break; echo "Extraction of file #$i:\n"; $ret = $e->extract(false, dirname(__FILE__).'/temp.txt'); if ($ret) echo "\tSUCCESS\n"; else echo "\tFAILED\n"; echo "\n"; } @unlink(dirname(__FILE__).'/temp.txt'); echo "Done\n"; ?> --EXPECTF-- 51 files (will test only the first 4): Extraction of file #1: SUCCESS Extraction of file #2: Warning: RarEntry::extract(): ERAR_BAD_DATA in %s on line %d FAILED Extraction of file #3: Warning: RarEntry::extract(): ERAR_BAD_DATA in %s on line %d FAILED Extraction of file #4: Warning: RarEntry::extract(): ERAR_BAD_DATA in %s on line %d FAILED Done PK9]1>tests/032.phptnu[--TEST-- RarArchive traversal with multi-part archive --SKIPIF-- --FILE-- $rarE) { echo "$k. $rarE\n"; } echo "Done\n"; --EXPECTF-- 0. RarEntry for file "file1.txt" (52b28202) 1. RarEntry for file "file2.txt" (f2c79881) 2. RarEntry for file "file3.txt" (bcbce32e) Done PK9]8!ddtests/rar_unicode.rarnu[Rar!ϐs t 7Rr;0 file1?.txtvcontents of file 1={@PK9]gtests/052.phptnu[--TEST-- Stream wrapper archive/file not found --SKIPIF-- ]tests/069.phptnu[PK9],..tests/070.phptnu[PK9]b>z0tests/075.phptnu[PK9]C##tests/073.phptnu[PK9]4Abtests/018.phptnu[PK9]ec<tests/051.phptnu[PK9];hbiCtests/021.phptnu[PK9]Ը@@Itests/001.phptnu[PK9]1Ctests/005.phptnu[PK9]SzSStests/089.phptnu[PK9]Cί&tests/042.phptnu[PK9]tests/039.phptnu[PK9])tests/repeated_name.rarnu[PK9] YYrtests/012.phptnu[PK9]( tests/056.phptnu[PK9]$Qtests/032.phptnu[PK9]8!ddStests/rar_unicode.rarnu[PK9]goTtests/052.phptnu[PK+W