diff --git a/app.manifest b/app.manifest index 46532ce0..bbe00469 100644 --- a/app.manifest +++ b/app.manifest @@ -1,5 +1,5 @@ CACHE MANIFEST -# Time: Thu Mar 19 2015 02:56:13 GMT+0300 (MSK) +# Time: Thu Mar 19 2015 03:29:29 GMT+0300 (MSK) CACHE: @@ -72,10 +72,10 @@ js/locales/nl-nl.json js/locales/pt-br.json js/locales/ru-ru.json vendor/closure/long.js -vendor/jsbn/jsbn_combined.js vendor/cryptoJS/crypto.js -vendor/rusha/rusha.js +vendor/jsbn/jsbn_combined.js vendor/leemon_bigint/bigint.js +vendor/rusha/rusha.js vendor/angular/i18n/angular-locale_de-de.js vendor/angular/i18n/angular-locale_en-us.js vendor/angular/i18n/angular-locale_es-es.js diff --git a/js/app.js b/js/app.js index 5c6b6a93..72530a41 100644 --- a/js/app.js +++ b/js/app.js @@ -17,6 +17,6 @@ i.storeMethod("req_pq",{nonce:e.nonce}),console.log(dT(),"Send req_pq",bytesToHe O=[],_(e.users);for(var n=0;n=1e3?void o.resolve(r):void this["continue"]()},t.onerror=function(e){console.log("phonebook error",e,e.type,e.message),o.reject(e)},o.promise}return{isAvailable:a,openPhonebookImport:o,getPhonebookContacts:r}}]).service("AppChatsManager",["$q","$rootScope","$modal","_","MtpApiFileManager","MtpApiManager","AppUsersManager","AppPhotosManager","RichTextProcessor",function(e,t,n,i,a,o,r,s,c){function l(e){angular.forEach(e,d)}function d(e){if(angular.isObject(e)){e.rTitle=c.wrapRichText(e.title,{noLinks:!0,noLinebreaks:!0})||i("chat_title_deleted");var n=SearchIndexManager.cleanSearchText(e.title||"").split(" "),a=n.shift(),o=n.pop();e.initials=a.charAt(0)+(o?o.charAt(0):a.charAt(1)),e.num=Math.abs(e.id>>1)%(Config.Mobile?4:8)+1,void 0===v[e.id]?v[e.id]=e:(safeReplaceObject(v[e.id],e),t.$broadcast("chat_update",e.id)),void 0!==w[e.id]&&safeReplaceObject(w[e.id],e&&e.photo&&e.photo.photo_small||{empty:!0})}}function u(e){return v[e]||{id:e,deleted:!0}}function p(n){return void 0!==y[n]&&v[n].version==y[n].participants.version?e.when(y[n]):void 0!==b[n]?b[n]:b[n]=o.invokeApi("messages.getFullChat",{chat_id:n}).then(function(e){return l(e.chats),r.saveApiUsers(e.users),e.full_chat&&e.full_chat.chat_photo.id&&s.savePhoto(e.full_chat.chat_photo),delete b[n],t.$broadcast("chat_full_update",n),y[n]=e.full_chat})}function m(e){return angular.isObject(v[e])}function h(e,t){var n=u(e);return void 0===w[e]&&(w[e]=n&&n.photo&&n.photo.photo_small||{empty:!0}),{placeholder:"img/placeholders/"+t+"Avatar"+(Config.Mobile?n.num:Math.ceil(n.num/2))+"@2x.png",location:w[e]}}function f(e){u(e);return"g"+e}function g(e,t){var n=angular.copy(t),i=u(e);return n.participants&&"chatParticipants"==n.participants._&&o.getUserID().then(function(e){angular.forEach(n.participants.participants,function(t){t.user=r.getUser(t.user_id),t.canLeave=e==t.user_id,t.canKick=!t.canLeave&&(e==n.participants.admin_id||e==t.inviter_id)})}),n.thumb={placeholder:"img/placeholders/GroupAvatar"+(Math.abs(e)%4+1)+"@2x.png",location:i&&i.photo&&i.photo.photo_small,width:72,height:72,size:0},n.peerString=f(e),n.chat=i,n}function _(e){var i=t.$new();i.chatID=e;n.open({templateUrl:templateUrl("chat_modal"),controller:"ChatModalController",scope:i,windowClass:"chat_modal_window mobile_modal"})}var v={},y={},b={},w={};return t.$on("apiUpdate",function(e,n){switch(n._){case"updateChatParticipants":var i=n.participants,a=y[i.id];void 0!==a&&(a.participants=n.participants,t.$broadcast("chat_full_update",chatID));break;case"updateChatParticipantAdd":var a=y[n.chat_id];if(void 0!==a){for(var i=a.participants.participants||[],o=0,r=i.length;r>o;o++)if(i[o].user_id==n.user_id)return;i.push({_:"chatParticipant",user_id:n.user_id,inviter_id:n.inviter_id,date:tsNow(!0)}),a.participants.version=n.version,t.$broadcast("chat_full_update",n.chat_id)}break;case"updateChatParticipantDelete":var a=y[n.chat_id];if(void 0!==a)for(var i=a.participants.participants||[],o=0,r=i.length;r>o;o++)if(i[o].user_id==n.user_id)return i.splice(o,1),a.participants.version=n.version,void t.$broadcast("chat_full_update",n.chat_id)}}),{saveApiChats:l,saveApiChat:d,getChat:u,getChatFull:p,getChatPhoto:h,getChatString:f,hasChat:m,wrapForFull:g,openChat:_}}]).service("AppPeersManager",["AppUsersManager","AppChatsManager","MtpApiManager",function(e,t){return{getInputPeer:function(e){var t="u"==e.charAt(0),n=e.substr(1).split("_");return t?{_:"inputPeerForeign",user_id:n[0],access_hash:n[1]}:{_:"inputPeerChat",chat_id:n[0]}},getInputPeerByID:function(t){return t>0?{_:"inputPeerForeign",user_id:t,access_hash:e.getUser(t).access_hash||0}:0>t?{_:"inputPeerChat",chat_id:-t}:void 0},getPeerSearchText:function(n){var i;if(n>0)i=e.getUserSearchText(n);else if(0>n){var a=t.getChat(-n);i=a.title||""}return i},getPeerString:function(n){return n>0?e.getUserString(n):t.getChatString(-n)},getOutputPeer:function(e){return e>0?{_:"peerUser",user_id:e}:{_:"peerChat",chat_id:-e}},getPeerID:function(e){if(angular.isObject(e))return e.user_id?e.user_id:-e.chat_id;var t="u"==e.charAt(0),n=e.substr(1).split("_");return t?n[0]:-n[0]||0},getPeer:function(n){return n>0?e.getUser(n):t.getChat(-n)},getPeerPhoto:function(n,i,a){return n>0?e.getUserPhoto(n,i):t.getChatPhoto(-n,a)}}}]).service("AppMessagesManager",["$q","$rootScope","$location","$filter","ApiUpdatesManager","AppUsersManager","AppChatsManager","AppPeersManager","AppPhotosManager","AppVideoManager","AppDocsManager","AppAudioManager","MtpApiManager","MtpApiFileManager","RichTextProcessor","NotificationsManager","PeersSelectService","Storage","FileManager","TelegramMeWebService","StatusManager","_",function(e,t,n,i,a,o,r,s,c,l,d,u,p,m,h,f,g,_,v,y,b,w){function $(t,n,i){var a=Q;if(angular.isString(t)&&t.length){if(!i||rt.query!==t){rt.query=t;var c=SearchIndexManager.search(t,ot);rt.dialogs=[],angular.forEach(Q.dialogs,function(e){c[e.peerID]&&rt.dialogs.push(e)}),rt.count=rt.dialogs.length}a=rt}else rt.query=!1;var l=0;if(n>0)for(l=0;la.dialogs[l].top_message);l++);return null!==a.count&&a.dialogs.length==a.count||a.dialogs.length>=l+(i||1)?e.when({count:a.count,dialogs:a.dialogs.slice(l,l+(i||20))}):(i=i||20,p.invokeApi("messages.getDialogs",{offset:l,limit:i,max_id:n||0}).then(function(e){if(y.setAuthorized(!0),o.saveApiUsers(e.users),r.saveApiChats(e.chats),D(e.messages),n>0)for(l=0;la.dialogs[l].top_message);l++);return a.count=e.count||e.dialogs.length,!n&&a.dialogs.length&&W(a.dialogs[0].top_message),a.dialogs.splice(l,a.dialogs.length-l),angular.forEach(e.dialogs,function(e){var t=s.getPeerID(e.peer),n=s.getPeerSearchText(t);if(SearchIndexManager.indexObject(t,n,ot),a.dialogs.push({peerID:t,top_message:e.top_message,unread_count:e.unread_count}),void 0===J[t]&&(J[t]={count:null,history:[e.top_message],pending:[]}),f.savePeerSettings(t,e.notify_settings),e.unread_count>0&&ft&&e.top_message>ft){var i=x(e.top_message),o=16&i.flags?i.from_id:t;i.unread&&!i.out&&f.getPeerMuted(o).then(function(e){e||_.get("notify_nopreview").then(function(e){G(i,e)})})}}),{count:a.count,dialogs:a.dialogs.slice(l,l+i)}}))}function k(e,t,n,i){return p.invokeApi("messages.getHistory",{peer:e,offset:i||0,limit:n||0,max_id:t||0},{noErrorBox:!0}).then(function(e){return o.saveApiUsers(e.users),r.saveApiChats(e.chats),D(e.messages),e})}function S(e,t,n,i){return k(e,t,n).then(function(a){i.count=a.count||a.messages.length;var o=0;if(t>0)for(o=0;oi.history[o]);o++);return i.history.splice(o,i.history.length-o),angular.forEach(a.messages,function(e){i.history.push(e.id)}),n-=a.messages.length,n>0&&i.history.length0)for(d=!0,l=0;lc.history[l]){d=!1;break}}else{var h=V(r);if(h&&h[0]&&h[0].unread_count>1){var f=h[0].unread_count;(p=f>50)?(i=20,u=16,l=f-u):(i=Math.max(10,o,f+2),u=f)}else Config.Mobile&&(i=20)}return!d&&(null!==c.count&&c.history.length==c.count||c.history.length>=l+(i||1))?(a?(a=Math.min(l,a),l=Math.max(0,l-a),i+=a):i=i||(l?20:o||5),e.when({count:c.count,history:m.concat(c.history.slice(l,l+i)),unreadOffset:u,unreadSkip:p})):(a||i||(i=o||20),d&&(l=0),a||p||n&&-1==c.history.indexOf(n)?(a&&(l=-a,i+=a),k(t,n,i,l).then(function(e){c.count=e.count||e.messages.length;var t=[];return angular.forEach(e.messages,function(e){t.push(e.id)}),{count:c.count,history:m.concat(t),unreadOffset:u,unreadSkip:p}})):S(t,n,i,c).then(function(){if(l=0,n>0)for(l=0;lc.history[l]);l++);return{count:c.count,history:m.concat(c.history.slice(l,l+i)),unreadOffset:u,unreadSkip:p}}))}function M(t,n,i,a,c){var l=[],d=!n,u=s.getPeerID(t),m={peer:u,filter:i},h=d&&angular.equals(st,m);if(d&&!h&&(st=m,ct=[]),!a&&!n){var f=J[u];if(void 0!==f&&f.history.length){var g,_,v={},y=c||20;switch(i._){case"inputMessagesFilterPhotos":v.messageMediaPhoto=!0;break;case"inputMessagesFilterVideo":v.messageMediaVideo=!0;break;case"inputMessagesFilterPhotoVideo":v.messageMediaPhoto=!0,v.messageMediaVideo=!0;break;case"inputMessagesFilterDocument":v.messageMediaDocument=!0;break;case"inputMessagesFilterAudio":v.messageMediaAudio=!0}for(g=0;g=y)));g++);}if(l.length=y));g++);}return l.length||1e3==c?(d&&(ct=listMergeSorted(ct,l)),e.when({count:null,history:l})):p.invokeApi("messages.search",{peer:t,q:n||"",filter:i||{_:"inputMessagesFilterEmpty"},min_date:0,max_date:0,limit:c||20,max_id:a||0}).then(function(e){o.saveApiUsers(e.users),r.saveApiChats(e.chats),D(e.messages);var t=e.count||e.messages.length;return l=[],angular.forEach(e.messages,function(e){l.push(e.id)}),d&&(ct=listMergeSorted(ct,l)),{count:t,history:l}},function(t){return 400==t.code&&(t.handled=!0),e.reject(t)})}function x(e){return Z[e]||{deleted:!0}}function A(e){return p.invokeApi("messages.deleteMessages",{id:e}).then(function(t){return a.processUpdateMessage({_:"updateShort",update:{_:"updateDeleteMessages",messages:e,pts:t.pts,pts_count:t.pts_count}}),e})}function E(t,n,i){return a.processUpdateMessage({_:"updateShort",update:{_:"updatePts",pts:n.pts,pts_count:n.pts_count}})?n.offset?p.invokeApi(i,{peer:t,offset:n.offset,max_id:0}).then(function(e){return E(t,e,i)}):e.when():!1}function T(e){var n=s.getPeerID(e),i=J[n],a=V(n);if(!a[0]||!a[0].unread_count){if(!i||!i.history.length)return!1;var o,r,c=!1;for(l=i.history.length;l>=0;l--)if(o=i.history[l],r=Z[o],r&&!r.out&&r.unread){c=!0;break}if(!c)return!1}if(i.readPromise)return i.readPromise;if(i.readPromise=p.invokeApi("messages.readHistory",{peer:e,offset:0,max_id:0}).then(function(t){return E(e,t,"messages.readHistory")}).then(function(){a[0]&&(a[0].unread_count=0,t.$broadcast("dialog_unread",{peerID:n,count:0}),t.$broadcast("messages_read"))})["finally"](function(){delete i.readPromise}),i&&i.history.length){var o,r,l,n,a;for(l=0;l=0?(r="photo",c="photo."+i.type.split("/")[1]):"video/"==i.type.substr(0,6)?(r="video",c="video.mp4"):"audio/"==i.type.substr(0,6)?(r="audio",c="audio."+("ogg"==i.type.split("/")[1]?"ogg":"mp3")):(r="document",c="document."+i.type.split("/")[1]):(r="document",c="document."+i.type.split("/")[1]),void 0===h&&(h=J[n]={count:null,history:[],pending:[]}),p.getUserID().then(function(o){n!=o&&(g|=3),_&&(g|=8);var v={_:"messageMediaPending",type:r,file_name:i.name||c,size:i.size,progress:{percent:1,total:i.size}},y={_:"message",id:l,from_id:o,to_id:s.getOutputPeer(n),flags:g,date:tsNow(!0)+ut,message:"",media:v,random_id:u,reply_to_msg_id:_,pending:!0},b=function(e){var n=Y[l];e?(y.error=!0,n&&(n.error=!0)):(delete y.error,n&&delete n.error),t.$broadcast("messages_pending")};y.send=function(){var o=e.defer();it.then(function(){var e=!1,s=m.uploadFile(i);s.then(function(t){t.name=c,e=!0;var n;switch(r){case"photo":n={_:"inputMediaUploadedPhoto",file:t};break;case"video":n={_:"inputMediaUploadedVideo",file:t,duration:0,w:0,h:0,mime_type:i.type};break;case"audio":n={_:"inputMediaUploadedAudio",file:t,duration:0,mime_type:i.type};break;case"document":default:n={_:"inputMediaUploadedDocument",file:t,mime_type:i.type,attributes:[{_:"documentAttributeFilename",file_name:i.name}]}}p.invokeApi("messages.sendMedia",{peer:f,media:n,random_id:d,reply_to_msg_id:_}).then(function(e){y.date=e.message.date,y.id=e.message.id,y.media=e.message.media,a.processUpdateMessage({_:"updates",users:e.users,chats:e.chats,seq:0,updates:[{_:"updateMessageID",random_id:u,id:e.message.id},{_:"updateNewMessage",message:y,pts:e.pts,pts_count:e.pts_count}]})},function(){b(!0)})},function(){b(!0)},function(e){v.progress.done=e.done,v.progress.percent=Math.max(1,Math.floor(100*e.done/e.total)),t.$broadcast("history_update",{peerID:n})}),v.progress.cancel=function(){e||(o.resolve(),s.cancel(),L(u))},s["finally"](function(){o.resolve()})}),it=o.promise},D([y]),h.pending.unshift(l),t.$broadcast("history_append",{peerID:n,messageID:l,my:!0}),y.send()}),et[u]=[n,l]}function U(e,n){var i=at--,o=[nextRandomInt(4294967295),nextRandomInt(4294967295)],r=bigint(o[0]).shiftLeft(32).add(bigint(o[1])).toString(),l=J[e],u=s.getInputPeerByID(e);void 0===l&&(l=J[e]={count:null,history:[],pending:[]}),p.getUserID().then(function(m){var h;switch(n._){case"inputMediaContact":h=angular.extend({},n,{_:"messageMediaContact"});break;case"inputMediaPhoto":h={_:"messageMediaPhoto",photo:c.getPhoto(n.id.id)};break;case"inputMediaDocument":h={_:"messageMediaDocument",document:d.getDoc(n.id.id)}}var f={_:"message",id:i,from_id:m,to_id:s.getOutputPeer(e),flags:e==m?0:3,date:tsNow(!0)+ut,message:"",media:h,random_id:r,pending:!0},g=function(e){var n=Y[i];e?(f.error=!0,n&&(n.error=!0)):(delete f.error,n&&delete n.error),t.$broadcast("messages_pending")};f.send=function(){p.invokeApi("messages.sendMedia",{peer:u,media:n,random_id:o,reply_to_msg_id:0}).then(function(e){f.date=e.message.date,f.id=e.message.id,f.media=e.message.media,a.processUpdateMessage({_:"updates",users:e.users,chats:e.chats,seq:0,updates:[{_:"updateMessageID",random_id:r,id:e.message.id},{_:"updateNewMessage",message:f,pts:e.pts,pts_count:e.pts_count}]})},function(){g(!0)})},D([f]),l.pending.unshift(i),t.$broadcast("history_append",{peerID:e,messageID:i,my:!0}),f.send()}),et[r]=[e,i]}function O(e,t){t=t.sort();for(var n,i=[],n=(t.length,0);nt?t:e.out||2&e.flags?t:e.from_id}function j(e,t){var n=-1!=t;if(n&&void 0!==X[e])return X[e];var i=angular.copy(Z[e])||{id:e};return(i.chatID=i.to_id.chat_id)?(i.peerID=-i.chatID,i.peerData=r.getChat(i.chatID)):(i.peerID=i.out?i.to_id.user_id:i.from_id,i.peerData=o.getUser(i.peerID)),i.peerString=s.getPeerString(i.peerID),i.peerPhoto=s.getPeerPhoto(i.peerID,"User","Group"),i.unreadCount=t,"messageService"==i._&&i.action.user_id&&(i.action.user=o.getUser(i.action.user_id)),i.message&&i.message.length&&(i.richMessage=h.wrapRichText(i.message.substr(0,64),{noLinks:!0,noLinebreaks:!0})),i.dateText=gt(i.date),n&&(X[e]=i),i}function q(e){if(void 0!==Y[e])return Y[e];var t=angular.copy(Z[e])||{id:e};if(t.media&&void 0!==t.media.progress&&(t.media.progress=Z[e].media.progress),t.media)switch(t.media._){case"messageMediaPhoto":t.media.photo=c.wrapForHistory(t.media.photo.id);break;case"messageMediaVideo":t.media.video=l.wrapForHistory(t.media.video.id);break;case"messageMediaDocument":t.media.document=d.wrapForHistory(t.media.document.id);break;case"messageMediaAudio":t.media.audio=u.wrapForHistory(t.media.audio.id);break;case"messageMediaContact":t.media.rFullName=h.wrapRichText(t.media.first_name+" "+(t.media.last_name||""),{noLinks:!0,noLinebreaks:!0})}else if(t.action)switch(t.action._){case"messageActionChatEditPhoto":t.action.photo=c.wrapForHistory(t.action.photo.id);break;case"messageActionChatCreate":case"messageActionChatEditTitle":t.action.rTitle=h.wrapRichText(t.action.title,{noLinks:!0,noLinebreaks:!0})||w("chat_title_deleted")}var n=t.reply_to_msg_id;if(n&&(Z[n]?t.reply_to_msg=j(n):(t.reply_to_msg={id:n,loading:!0},-1==lt.indexOf(n)&&(lt.push(n),dt===!1&&(dt=setTimeout(H,100))))),t.message&&t.message.length){var i={};Config.Navigator.mobile||(i.extractUrlEmbed=!0),t.richMessage=h.wrapRichText(t.message,i),i.extractedUrlEmbed&&(t.richUrlEmbed=i.extractedUrlEmbed)}return Y[e]=t}function H(){if(dt!==!1&&(clearTimeout(dt),dt=!1),lt.length){var e=lt.slice();lt=[],p.invokeApi("messages.getMessages",{id:e}).then(function(n){o.saveApiUsers(n.users),r.saveApiChats(n.chats),D(n.messages),t.$broadcast("messages_downloaded",e)})}}function z(e,t){if(!e||!e.length)return!1;var n,i,a,o,r,s,c,l=0,d=e.length,u=d,p=!1,m=!Config.Mobile;for(t>0?u=Math.min(t,d):0>t&&(l=Math.max(0,u+t)),n=l;u>n;n++){if(o=e[n],i=Math.floor((o.date+K)/86400),c=r&&r.grouped,s=o.grouped,i===a?o.needDate&&(delete o.needDate,p=!0):(!n||r)&&(o.needDate||(o.needDate=!0,p=!0)),o.fwd_from_id&&o.media&&o.media.document&&o.media.document.sticker&&(o.from_id!=(r||{}).from_id||!(r||{}).fwd_from_id)&&(delete o.fwd_from_id,o._="message"),r&&o.from_id==r.from_id&&!r.fwd_from_id==!o.fwd_from_id&&!r.action&&!o.action&&o.dateft&&_.set({max_seen_msg:e})}function G(e,n){var i,a,s=F(e),c=o.getUser(e.from_id),l=o.getUserPhoto(e.from_id,"User"),d={},u=!1;if(e.message)u=n?w("conversation_message_sent"):h.wrapPlainText(e.message);else if(e.media)switch(e.media._){case"messageMediaPhoto":u=w("conversation_media_photo_raw");break;case"messageMediaVideo":u=w("conversation_media_video_raw");break;case"messageMediaDocument":if(e.media.document.sticker){u=w("conversation_media_sticker");var p=EmojiHelper.stickers[e.media.document.id];void 0!==p&&(u=h.wrapPlainText(p)+" ("+u+")")}else u=e.media.document.file_name||w("conversation_media_document_raw");break;case"messageMediaAudio":u=w("conversation_media_audio_raw");break;case"messageMediaGeo":u=w("conversation_media_location_raw");break;case"messageMediaContact":u=w("conversation_media_contact_raw");break;default:u=w("conversation_media_attachment_raw")}else if("messageService"==e._)switch(e.action._){case"messageActionChatCreate":u=w("conversation_group_created_raw");break;case"messageActionChatEditTitle":u=w("conversation_group_renamed_raw");break;case"messageActionChatEditPhoto":u=w("conversation_group_photo_updated_raw");break;case"messageActionChatDeletePhoto":u=w("conversation_group_photo_removed_raw");break;case"messageActionChatAddUser":u=w(e.action.user_id==e.from_id?"conversation_returned_to_group":"conversation_invited_user_message_raw");break;case"messageActionChatDeleteUser":u=w(e.action.user_id==e.from_id?"conversation_left_group":"conversation_kicked_user_message_raw")}s>0?(d.title=(c.first_name||"")+(c.first_name&&c.last_name?" ":"")+(c.last_name||""),d.title||(d.title=c.phone||w("conversation_unknown_user_raw")),a=l,i=o.getUserString(s)):(d.title=(c.first_name||c.last_name||w("conversation_unknown_user_raw"))+" @ "+(r.getChat(-s).title||w("conversation_unknown_chat_raw")),a=r.getChatPhoto(-s,"Group"),i=r.getChatString(-s)),d.title=h.wrapPlainText(d.title),d.onclick=function(){t.$broadcast("history_focus",{peerString:i})},d.message=u,d.image=a.placeholder,d.key="msg"+e.id,d.tag=i,a.location&&!a.location.empty?m.downloadSmallFile(a.location,a.size).then(function(t){d.image=v.getUrl(t,"image/jpeg"),e.unread&&f.notify(d)}):f.notify(d)}var K,Z={},Y={},X={},J={},Q={count:null,dialogs:[]},et={},tt={},nt={},it=e.when(),at=-1,ot=SearchIndexManager.createIndex(),rt={query:!1},st={},ct=[],lt=[],dt=!1,ut=0,pt=tsNow(!0),mt=pt-pt%86400,ht=new Date,ft=!1;Config.Modes.packed&&_.get("max_seen_msg").then(function(e){ft=e||0}),_.get("server_time_offset").then(function(e){e&&(ut=e)});var gt=i("dateOrTime");return ht.setHours(0),ht.setMinutes(0),ht.setSeconds(0),K=mt-Math.floor(+ht/1e3),f.start(),window.navigator.mozSetMessageHandler&&window.navigator.mozSetMessageHandler("activity",function(e){var n=e.source;console.log(dT(),"Received activity",n.name,n.data),"share"===n.name&&n.data.blobs.length>0&&g.selectPeers({confirm_type:"EXT_SHARE_PEER"}).then(function(e){angular.forEach(e,function(e){var t=s.getPeerID(e);angular.forEach(n.data.blobs,function(e){N(t,e,{isMedia:!0})})}),1==e.length&&t.$broadcast("history_focus",{peerString:e[0]})})}),t.$on("apiUpdate",function(e,n){switch(n._){case"updateMessageID":tt[n.id]=n.random_id;break;case"updateNewMessage":var i=n.message,a=F(i),r=J[a];if(void 0!==r){{J[a].history[0]}if(-1!=J[a].history.indexOf(i.id))return!1;r.history.unshift(i.id),r.history.sort(function(e,t){return t-e})}else r=J[a]={count:null,history:[i.id],pending:[]};D([i]),i.out||o.forceUserOnline(i.from_id),null!==r.count&&r.count++;var c,l=tt[i.id];l&&((c=R(l,i))&&t.$broadcast("history_update",{peerID:a}),delete tt[i.id]),c||t.$broadcast("history_append",{peerID:a,messageID:i.id});var d,u=V(a);if(u.length?(d=u[0],Q.dialogs.splice(u[1],1)):d={peerID:a,unread_count:0,top_message:!1},!i.out&&i.unread&&d.unread_count++,d.top_message=i.id,SearchIndexManager.indexObject(a,s.getPeerSearchText(a),ot),Q.dialogs.unshift(d),t.$broadcast("dialogs_update",d),(t.selectedPeerID!=a||t.idle.isIDLE)&&!i.out&&i.unread){var p=16&i.flags?i.from_id:a,m=f.getPeerMuted(p),h=t.idle.isIDLE&&b.isOtherDeviceActive()?3e4:1e3;setTimeout(function(){m.then(function(e){i.unread&&!e&&_.get("notify_nopreview").then(function(e){G(i,e)})})},h)}W(i.id);break;case"updateReadHistoryInbox":case"updateReadHistoryOutbox":var g,i,v,y=n.max_id,w="updateReadHistoryOutbox"==n._,a=s.getPeerID(n.peer),u=V(a),$=(J[a]||{}).history||[],k=!1,S=$.length,C=!1;for(a>0&&w&&o.forceUserOnline(a),v=0;S>v;v++)if(g=$[v],!(g>y)&&(i=Z[g],i.out==w)){if(!i.unread)break;i&&i.unread&&(i.unread=!1,Y[g]&&(Y[g].unread=!1,C||(C=!0)),X[g]&&(X[g].unread=!1),i.out||(u&&(k=--u[0].unread_count),f.cancel("msg"+g))) }k!==!1&&t.$broadcast("dialog_unread",{peerID:a,count:k}),C&&t.$broadcast("messages_read");break;case"updateDeleteMessages":var g,i,v,a,u,$,M={};for(v=0;vo&&(i=e,a=o)}),i}function l(e,t,n){return i.invokeApi("photos.getUserPhotos",{user_id:e,offset:0,limit:n||20,max_id:t||0}).then(function(e){o.saveApiUsers(e.users);for(var t=[],n=0;n800&&(i-=208);var r=c(n,i,o);r&&!r.preloaded&&(r.preloaded=!0,r.size?a.downloadFile(r.location.dc_id,{_:"inputFileLocation",volume_id:r.location.volume_id,local_id:r.location.local_id,secret:r.location.secret},r.size):a.downloadSmallFile(r.location))}}function u(e){return g[e]||{_:"photoEmpty"}}function p(e){var t=angular.copy(g[e])||{_:"photoEmpty"},n=Math.min(_-80,Config.Mobile?210:260),i=Math.min(v-100,Config.Mobile?210:260),a=c(t,n,i),o={placeholder:"img/placeholders/PhotoThumbConversation.gif",width:n,height:i};if(a&&"photoSizeEmpty"!=a._){var r=calcImageInBox(a.w,a.h,n,i);o.width=r.w,o.height=r.h,o.location=a.location,o.size=a.size}else o.width=100,o.height=100;return t.thumb=o,t}function m(e){var n=p(e),i=$(window).width()-(Config.Mobile?0:32),a=$(t).height()-(Config.Mobile?0:116);!Config.Mobile&&i>800&&(i-=208);var o=c(n,i,a),r={placeholder:"img/placeholders/PhotoThumbModal.gif"};if(r.width=i,r.height=a,o&&"photoSizeEmpty"!=o._){var s=calcImageInBox(o.w,o.h,i,a,!0);r.width=s.w,r.height=s.h,r.modalWidth=Math.max(r.width,Math.min(400,i)),r.location=o.location,r.size=o.size}return n.full=r,n}function h(t,i){if(!t||"0"===t)return!1;var a=n.$new(!0);a.photoID=t;var o="PhotoModalController";i&&i.p>0?(o="UserpicModalController",a.userID=i.p):i&&i.p<0?(o="ChatpicModalController",a.chatID=-i.p):i&&i.m>0&&(a.messageID=i.m);e.open({templateUrl:templateUrl("photo_modal"),windowTemplateUrl:templateUrl("media_modal_layout"),controller:o,scope:a,windowClass:"photo_modal_window"})}function f(e){var n=g[e],i="jpg",o="image/jpeg",s="photo"+e+"."+i,l=Math.max(screen.width||0,$(window).width()-36,800),d=Math.max(screen.height||0,$(t).height()-150,800),u=c(n,l,d),p={_:"inputFileLocation",volume_id:u.location.volume_id,local_id:u.location.local_id,secret:u.location.secret};r.chooseSave(s,i,o).then(function(e){e&&a.downloadFile(u.location.dc_id,p,u.size,{mime:o,toFileEntry:e}).then(function(){},function(e){console.log("photo download failed",e)})},function(){var e=a.getCachedFile(p);return e?r.download(e,o,s):void a.downloadFile(u.location.dc_id,p,u.size,{mime:o}).then(function(e){r.download(e,o,s)},function(e){console.log("photo download failed",e)})})}var g={},_=$(window).width(),v=$(window).height();return n.preloadPhoto=d,n.openPhoto=h,{savePhoto:s,preloadPhoto:d,getUserPhotos:l,getPhoto:u,choosePhotoSize:c,wrapForHistory:p,wrapForFull:m,openPhoto:h,downloadPhoto:f}}]).service("AppVideoManager",["$sce","$rootScope","$modal","$window","MtpApiFileManager","AppUsersManager","FileManager","qSync",function(e,t,n,i,a,o,r,s){function c(e){f[e.id]=e,e.thumb&&"photoCachedSize"==e.thumb._&&(a.saveSmallFile(e.thumb.location,e.thumb.bytes),e.thumb.size=e.thumb.bytes.length,delete e.thumb.bytes,e.thumb._="photoSize")}function l(e){if(void 0!==g[e])return g[e];var t=angular.copy(f[e]),n=Math.min(_-80,Config.Mobile?210:150),i=Math.min(v-100,Config.Mobile?210:150),a=t.thumb,o={placeholder:"img/placeholders/VideoThumbConversation.gif",width:n,height:i};return a&&"photoSizeEmpty"!=a._&&(a.w/a.h>n/i?o.height=parseInt(a.h*n/a.w):(o.width=parseInt(a.w*i/a.h),o.width>n&&(o.height=parseInt(o.height*n/o.width),o.width=n)),o.location=a.location,o.size=a.size),t.thumb=o,g[e]=t}function d(e){var t=l(e),n=Math.min($(window).width()-(Config.Mobile?0:60),542),a=$(i).height()-(Config.Mobile?92:150),o={placeholder:"img/placeholders/VideoThumbModal.gif",width:n,height:a};if(t.w&&t.h){var r=calcImageInBox(t.w,t.h,n,a);o.width=r.w,o.height=r.h}else o.height=o.width=Math.min(n,a);return t.full=o,t.fullThumb=angular.copy(t.thumb),t.fullThumb.width=o.width,t.fullThumb.height=o.height,t}function u(e,i){var a=t.$new(!0);return a.videoID=e,a.messageID=i,n.open({templateUrl:templateUrl("video_modal"),windowTemplateUrl:templateUrl("media_modal_layout"),controller:"VideoModalController",scope:a,windowClass:"video_modal_window"})}function p(e){var t=f[e],n=g[e]||t||{},i={_:"inputVideoFileLocation",id:e,access_hash:t.access_hash};void 0===n.downloaded&&a.getDownloadedFile(i,t.size).then(function(){n.downloaded=!0},function(){n.downloaded=!1})}function m(n,i){var o=f[n],c=g[n]||o||{},l=o.mime_type||"video/ogg",d={_:"inputVideoFileLocation",id:n,access_hash:o.access_hash};if(c.downloaded&&!i){var u=a.getCachedFile(d);if(u)return s.when(u)}c.progress={enabled:!c.downloaded,percent:1,total:o.size};var p=a.downloadFile(o.dc_id,d,o.size,{mime:l,toFileEntry:i});return p.then(function(t){r.getFileCorrectUrl(t,l).then(function(t){c.url=e.trustAsResourceUrl(t)}),delete c.progress,c.downloaded=!0,console.log("video save done")},function(e){console.log("video download failed",e),c.progress.enabled=!1},function(e){console.log("dl progress",e),c.progress.enabled=!0,c.progress.done=e.done,c.progress.percent=Math.max(1,Math.floor(100*e.done/e.total)),t.$broadcast("history_update")}),c.progress.cancel=p.cancel,p}function h(e){{var t=f[e],n=t.mime_type||"video/mp4",i=n.split(".")[1]||"mp4",a="t_video"+e+"."+i;g[e]||t||{}}r.chooseSave(a,i,n).then(function(t){t&&m(e,t)},function(){m(e).then(function(e){r.download(e,n,a)})})}var f={},g={},_=$(window).width(),v=$(window).height();return{saveVideo:c,wrapForHistory:l,wrapForFull:d,openVideo:u,updateVideoDownloaded:p,downloadVideo:m,saveVideoFile:h}}]).service("AppDocsManager",["$sce","$rootScope","$modal","$window","$q","RichTextProcessor","MtpApiFileManager","FileManager","qSync",function(e,t,n,i,a,o,r,s,c){function l(e){g[e.id]=e,e.thumb&&"photoCachedSize"==e.thumb._&&(r.saveSmallFile(e.thumb.location,e.thumb.bytes),e.thumb.size=e.thumb.bytes.length,delete e.thumb.bytes,e.thumb._="photoSize"),angular.forEach(e.attributes,function(t){switch(t._){case"documentAttributeFilename":e.file_name=t.file_name;break;case"documentAttributeVideo":case"documentAttributeAudio":e.duration=t.duration;break;case"documentAttributeSticker":e.sticker=1;var n=t.alt||EmojiHelper.stickers[e.id];void 0!==n&&(e.sticker=2,e.stickerEmoji=o.wrapRichText(n,{noLinks:!0,noLinebreaks:!0}));break;case"documentAttributeImageSize":e.w=t.w,e.h=t.h}}),e.file_name=e.file_name||""}function d(e){return g[e]||{_:"documentEmpty"}}function u(e){if(void 0!==_[e])return _[e];var t,n,i=angular.copy(g[e]),a="image/gif"==i.mime_type,o="image/"==i.mime_type.substr(0,6)&&i.sticker,r=i.thumb;a?(t=Math.min(v-80,260),n=Math.min(y-100,260)):o?(t=Math.min(v-80,Config.Mobile?210:260),n=Math.min(y-100,Config.Mobile?210:260)):t=n=100;var s={width:t,height:n};if(r&&"photoSizeEmpty"!=r._){var c=calcImageInBox(r.w,r.h,t,n);s.width=c.w,s.height=c.h,s.location=r.location,s.size=r.size}else if(o){var c=calcImageInBox(i.w,i.h,t,n);s.width=c.w,s.height=c.h}else s=!1;return i.thumb=s,i.withPreview=!Config.Mobile&&i.mime_type.match(/^(image\/)/)?1:0,a&&i.thumb?i.isSpecial="gif":o?i.isSpecial="sticker":"audio/"==i.mime_type.substr(0,6)&&(i.isSpecial="audio"),_[e]=i}function p(e){var t=g[e],n=_[e]||t||{},i={_:"inputDocumentFileLocation",id:e,access_hash:t.access_hash};void 0===n.downloaded&&r.getDownloadedFile(i,t.size).then(function(){n.downloaded=!0},function(){n.downloaded=!1})}function m(n,i){var a=g[n],o=_[n]||a||{},l={_:"inputDocumentFileLocation",id:n,access_hash:a.access_hash};if(o.downloaded&&!i){var d=r.getCachedFile(l);if(d)return c.when(d)}o.progress={enabled:!o.downloaded,percent:1,total:a.size};var u=r.downloadFile(a.dc_id,l,a.size,{mime:a.mime_type||"application/octet-stream",toFileEntry:i});return u.then(function(t){delete o.progress,t&&(s.getFileCorrectUrl(t,a.mime_type).then(function(t){o.url=e.trustAsResourceUrl(t)}),o.downloaded=!0),console.log("file save done")},function(e){console.log("document download failed",e),o.progress.enabled=!1},function(e){console.log("dl progress",e),o.progress.enabled=!0,o.progress.done=e.done,o.progress.percent=Math.max(1,Math.floor(100*e.done/e.total)),t.$broadcast("history_update")}),o.progress.cancel=u.cancel,u}function h(e,i){var a=t.$new(!0);a.docID=e,a.messageID=i;n.open({templateUrl:templateUrl("document_modal"),windowTemplateUrl:templateUrl("media_modal_layout"),controller:"DocumentModalController",scope:a,windowClass:"document_modal_window"})}function f(e){var t=g[e],n=(_[e]||t||{},(t.file_name.split(".",2)||[])[1]||"");s.chooseSave(t.file_name,n,t.mime_type).then(function(t){t&&m(e,t)},function(){m(e).then(function(e){s.download(e,t.mime_type,t.file_name)})})}var g={},_={},v=$(window).width(),y=$(window).height();return{saveDoc:l,getDoc:d,wrapForHistory:u,updateDocDownloaded:p,downloadDoc:m,openDoc:h,saveDocFile:f}}]).service("AppAudioManager",["$sce","$rootScope","$modal","$window","MtpApiFileManager","FileManager","qSync",function(e,t,n,i,a,o,r){function s(e){p[e.id]=e}function c(e){if(void 0!==m[e])return m[e];var t=angular.copy(p[e]);return m[e]=t}function l(e){var t=p[e],n=m[e]||t||{},i={_:"inputAudioFileLocation",id:e,access_hash:t.access_hash};void 0===n.downloaded&&a.getDownloadedFile(i,t.size).then(function(){n.downloaded=!0},function(){n.downloaded=!1})}function d(n,i){var s=p[n],c=m[n]||s||{},l=s.mime_type||"audio/ogg",d={_:"inputAudioFileLocation",id:n,access_hash:s.access_hash};if(c.downloaded&&!i){var u=a.getCachedFile(d);if(u)return r.when(u)}c.progress={enabled:!c.downloaded,percent:1,total:s.size};var h=a.downloadFile(s.dc_id,d,s.size,{mime:l,toFileEntry:i});return h.then(function(t){o.getFileCorrectUrl(t,l).then(function(t){c.url=e.trustAsResourceUrl(t)}),delete c.progress,c.downloaded=!0,console.log("audio save done")},function(e){console.log("audio download failed",e),c.progress.enabled=!1},function(e){console.log("dl progress",e),c.progress.enabled=!0,c.progress.done=e.done,c.progress.percent=Math.max(1,Math.floor(100*e.done/e.total)),t.$broadcast("history_update")}),c.progress.cancel=h.cancel,h}function u(e){{var t=p[e],n=t.mime_type||"audio/ogg",i=n.split(".")[1]||"ogg",a="t_audio"+e+"."+i;m[e]||t||{}}o.chooseSave(a,i,n).then(function(t){t&&d(e,t)},function(){d(e).then(function(e){o.download(e,n,a)})})}var p={},m={};return{saveAudio:s,wrapForHistory:c,updateAudioDownloaded:l,downloadAudio:d,saveAudioFile:u}}]).service("AppStickersManager",["$q","FileManager","MtpApiManager","MtpApiFileManager","AppDocsManager","Storage",function(e,t,n,i,a,o){function r(){h||(h=!0,setTimeout(d,1e3),setInterval(s,9e5))}function s(){d().then(u)}function c(e){return EmojiHelper.stickers[e]||!1}function l(e){if(m!==e.hash){m=e.hash;var t,n,i,o;for(i=e.documents.length,t=0;i>t;t++)a.saveDoc(e.documents[t]);var r,s,c,l={};for(p=[],i=e.packs.length,t=0;i>t;t++)for(r=e.packs[t],s=r.emoticon,o=r.documents.length,n=0;o>n;n++)c=r.documents[n],void 0===EmojiHelper.stickers[c]&&(EmojiHelper.stickers[c]=s),void 0===l[c]&&(l[c]=!0,p.push(c))}return p}function d(){return o.get("all_stickers").then(function(e){var t=Config.Schema.API.layer;return e.layer!=t&&(e=!1),e&&e.date>tsNow(!0)?l(e):n.invokeApi("messages.getAllStickers",{hash:e&&e.hash||""}).then(function(n){return"messages.allStickersNotModified"==n._&&(n=e),n.date=tsNow(!0)+3600,n.layer=t,delete n._,o.set({all_stickers:n}),l(n)})})}function u(){var n=[];return angular.forEach(p,function(e){var o=a.getDoc(e),r=i.downloadSmallFile(o.thumb.location).then(function(n){return WebpManager.isWebpSupported()?{id:e,src:t.getUrl(n,"image/webp")}:t.getByteArray(n).then(function(t){return{id:e,src:WebpManager.getPngUrlFromData(t)}})});n.push(r)}),e.all(n)}var p=[],m=!1,h=!1;return{start:r,getStickerEmoji:c,getStickers:d,getStickersImages:u}}]).service("ApiUpdatesManager",["$rootScope","MtpNetworkerFactory","AppUsersManager","AppChatsManager","AppPeersManager","MtpApiManager",function(e,t,n,i,a,o){function r(){var e=h.seq+1,t=v[e];if(!t)return!1;for(var n,i,a=t.updates,n=0,i=a.length;i>n;n++)p(a[n]);return h.seq=t.seq,t.date&&h.date=g.seqAwaiting&&(g.ptsAwaiting?delete g.seqAwaiting:(clearTimeout(g.timeout),g=!1)),!0}function s(){if(!y.length)return!1;y.sort(function(e,t){return e.pts-t.pts});for(var e,t=h.pts,n=!1,i=!1,a=0,o=y.length;o>a;a++)e=y[a],t+=e.pts_count,t>=e.pts&&(n=e.pts,i=a);if(!n)return!1;for(h.pts=n,a=0;i>=a;a++)e=y[a],p(e);return y.splice(i,o-i),!y.length&&g&&(g.seqAwaiting?delete g.ptsAwaiting:(clearTimeout(g.timeout),g=!1)),!0}function c(){_||d()}function l(e){var t={date:e.date,seq:e.seq,seqStart:e.seq_start};switch(e._){case"updatesTooLong":case"new_session_created":c();break;case"updateShort":u(e.update,t);break;case"updateShortMessage":case"updateShortChatMessage":var o=2&e.flags,r=e.from_id||(o?f:e.user_id),s=e.chat_id?-e.chat_id:o?e.user_id:f;u({_:"updateNewMessage",message:{_:"message",flags:e.flags,id:e.id,from_id:r,to_id:a.getOutputPeer(s),date:e.date,message:e.message,fwd_from_id:e.fwd_from_id,fwd_date:e.fwd_date,reply_to_msg_id:e.reply_to_msg_id},pts:e.pts,pts_count:e.pts_count},t);break;case"updatesCombined":case"updates":n.saveApiUsers(e.users),i.saveApiChats(e.chats),angular.forEach(e.updates,function(e){u(e,t)});break;default:console.warn(dT(),"Unknown update message",e)}}function d(){_||(_=!0,v={},y=[]),g&&(clearTimeout(g.timeout),g=!1),o.invokeApi("updates.getDifference",{pts:h.pts,date:h.date,qts:0}).then(function(e){if("updates.differenceEmpty"==e._)return console.log(dT(),"apply empty diff",e.seq),h.date=e.date,h.seq=e.seq,_=!1,!1;n.saveApiUsers(e.users),i.saveApiChats(e.chats),angular.forEach(e.other_updates,function(e){p(e)}),angular.forEach(e.new_messages,function(e){p({_:"updateNewMessage",message:e,pts:h.pts,pts_count:0})});var t=e.intermediate_state||e.state;h.seq=t.seq,h.pts=t.pts,h.date=t.date,console.log(dT(),"apply diff",h.seq,h.pts),"updates.differenceSlice"==e._?d():_=!1})}function u(e,t){if(_)return!1;if("updateNewMessage"==e._){var a=e.message;if(a.from_id&&!n.hasUser(a.from_id)||a.fwd_from_id&&!n.hasUser(a.fwd_from_id)||a.to_id.user_id&&!n.hasUser(a.to_id.user_id)||a.to_id.chat_id&&!i.hasChat(a.to_id.chat_id))return console.warn(dT(),"Short update not enough data",a),c(),!1}var o,l;if(e.pts){var u=h.pts+(e.pts_count||0);if(u0){var m=t.seq,f=t.seqStart||m;if(f!=h.seq+1&&f>h.seq)return console.warn(dT(),"Seq hole",h,g&&g.seqAwaiting),void 0===v[f]&&(v[f]={seq:m,date:t.date,updates:[]}),v[f].updates.push(e),g||(g={timeout:setTimeout(function(){d()},5e3)}),(!g.seqAwaiting||g.seqAwaiting-1)return n=Math.floor(t/a),i=t%a,{category:o,row:n,column:i};return console.error("emoji not found in spritesheet",e),null}function i(i,r){if(!i||!i.length)return"";r=r||{};for(var u,p,m,h,f=i,v=[],y=!1;u=f.match(g);){if(v.push(encodeEntities(f.substr(0,u.index))),u[3])r.noLinks?v.push(u[1],encodeEntities(u[2]+u[3])):v.push(u[1],'',encodeEntities(u[2]+u[3]),"");else if(u[4])if(r.noLinks)v.push(encodeEntities(u[0]));else if(_.test(u[4]))v.push('',encodeEntities(u[4]),"");else{var p=!1,b=u[5],w=u[6],$="";if(w){if(b||"xn--"!==w.substr(0,4)&&-1===Config.TLD.indexOf(w.toLowerCase())||(b="http://"),b){var k=a(u[4]);k.length!==u[4].length&&($=u[4].substring(k.length),u[4]=k),p=(u[5]?"":b)+u[4]}}else p=(u[5]?"":"http://")+u[4];p?(v.push('',encodeEntities(u[4]),"",$),r.extractUrlEmbed&&!r.extractedUrlEmbed&&(r.extractedUrlEmbed=o(p))):v.push(encodeEntities(u[0]))}else u[7]?v.push(r.noLinebreaks?" ":"
"):u[8]?(s=c[u[8]])&&(h=n(s))?(m=encodeEntities(l[s][1][0]),y=!0,v.push('',":",m,":")):v.push(encodeEntities(u[8])):u[10]&&(r.noLinks?v.push(encodeEntities(u[9]),encodeEntities(u[10])):v.push(encodeEntities(u[9]),'',encodeEntities(u[10]),""));f=f.substr(u.index+u[0].length)}return v.push(encodeEntities(f)),i=t(v.join("")),y&&(i=i.replace(/\ufe0f|️/g,"",i),i=i.replace(//g,'')),e.trustAs("html",i)}function a(e){for(var t=e.length,n=e.split("(").length-1,i=e.split(")").length-1;i>n&&")"===e.charAt(t-1);)e=e.substr(0,t-1),i--,t--;return n>i&&(e=e.replace(/\)+$/,"")),e}function o(e){var t;if(t=e.match(v))return["youtube",t[1]];if(t=e.match(y))return["vimeo",t[1]];if(t=e.match(b))return["instagram",t[1]];if(t=e.match(w))return["vine",t[1]];if(t=e.match(S)){var n="explore,upload,pages,terms-of-use,mobile,jobs,imprint".split(","),i="sets".split(",");if(-1==n.indexOf(t[1])&&-1==i.indexOf(t[2]))return["soundcloud",t[0]]}if(!Config.Modes.chrome_packed){if(t=e.match($))return["twitter",t[0]];if(t=e.match(k))return["facebook",t[0]]}return!1}function r(e,t){if(u)return e;if(!e||!e.length)return"";t=t||{},e=e.replace(/\ufe0f/g,"",e);for(var n,i,a=e,e=[];n=a.match(g);)e.push(a.substr(0,n.index)),e.push(n[8]?(s=c[n[8]])&&(i=l[s][1][0])?":"+i+":":n[0]:n[0]),a=a.substr(n.index+n[0].length);return e.push(a),e.join("")}var s,c={},l=Config.Emoji,d=18,u=-1!=navigator.userAgent.search(/OS X|iPhone|iPad|iOS|Android/i),p="\\u0023\\u20E3|\\u00a9|\\u00ae|\\u203c|\\u2049|\\u2139|[\\u2194-\\u2199]|\\u21a9|\\u21aa|\\u231a|\\u231b|\\u23e9|[\\u23ea-\\u23ec]|\\u23f0|\\u24c2|\\u25aa|\\u25ab|\\u25b6|\\u2611|\\u2614|\\u26fd|\\u2705|\\u2709|[\\u2795-\\u2797]|\\u27a1|\\u27b0|\\u27bf|\\u2934|\\u2935|[\\u2b05-\\u2b07]|\\u2b1b|\\u2b1c|\\u2b50|\\u2b55|\\u3030|\\u303d|\\u3297|\\u3299|[\\uE000-\\uF8FF\\u270A-\\u2764\\u2122\\u25C0\\u25FB-\\u25FE\\u2615\\u263a\\u2648-\\u2653\\u2660-\\u2668\\u267B\\u267F\\u2693\\u261d\\u26A0-\\u26FA\\u2708\\u2702\\u2601\\u260E]|[\\u2600\\u26C4\\u26BE\\u23F3\\u2764]|\\uD83D[\\uDC00-\\uDFFF]|\\uD83C[\\uDDE8-\\uDDFA�]\\uD83C[\\uDDEA-\\uDDFA�]|[0-9]\\u20e3|\\uD83C[\\uDC00-\\uDFFF]";for(s in l)c[l[s][0]]=s;var m="a-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff\\u0100-\\u024f\\u0253\\u0254\\u0256\\u0257\\u0259\\u025b\\u0263\\u0268\\u026f\\u0272\\u0289\\u028b\\u02bb\\u0300-\\u036f\\u1e00-\\u1eff\\u0400-\\u04ff\\u0500-\\u0527\\u2de0-\\u2dff\\ua640-\\ua69f\\u0591-\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f4\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4f\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06de-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0750-\\u077f\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\ufb50-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\u200c\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u1100-\\u11ff\\u3130-\\u3185\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3003\\u3005\\u303b\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uff9f\\uffa1-\\uffdc",h="0-9._"+m,f="((?:https?|ftp)://|mailto:)?(?:\\S+(?::\\S*)?@)?(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(xn--[0-9a-z]{2,16}|[a-z\\u00a1-\\uffff]{2,24})))(?::\\d{2,5})?(?:/(?:\\S*[^\\s.;,(\\[\\]{}<>\"'])?)?",g=new RegExp("(^|\\s)((?:https?://)?telegram\\.me/|@)([a-zA-Z\\d_]{5,32})|("+f+")|(\\n)|("+p+")|(^|\\s)(#["+h+"]{2,20})","i"),_=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,v=/^(?:https?:\/\/)?(?:www\.)?youtu(?:|\.be|be\.com|\.b)(?:\/v\/|\/watch\\?v=|e\/|(?:\/\??#)?\/watch(?:.+)v=)(.{11})(?:\&[^\s]*)?/,y=/^(?:https?:\/\/)?(?:www\.)?vimeo\.com\/(\d+)/,b=/^https?:\/\/(?:instagr\.am\/p\/|instagram\.com\/p\/)([a-zA-Z0-9\-\_]+)/i,w=/^https?:\/\/vine\.co\/v\/([a-zA-Z0-9\-\_]+)/i,$=/^https?:\/\/twitter\.com\/.+?\/status\/\d+/i,k=/^https?:\/\/(?:www\.)?facebook\.com\/.+?\/posts\/\d+/i,S=/^https?:\/\/(?:soundcloud\.com|snd\.sc)\/([a-zA-Z0-9%\-\_]+)\/([a-zA-Z0-9%\-\_]+)/i;return{wrapRichText:i,wrapPlainText:r}}]).service("StatusManager",["$timeout","$rootScope","MtpApiManager","AppUsersManager","IdleManager",function(e,t,n,i){function a(){d||(d=!0,t.$watch("idle.isIDLE",r),t.$watch("offline",r))}function o(e){var a=tsNow();if(!(e&&!l||!e&&5e4>a-l||t.offline))return l=e?0:a,i.setUserStatus(u,e),n.invokeApi("account.updateStatus",{offline:e},{noErrorBox:!0})}function r(){c&&e.cancel(c),t.idle.isIDLE?c=e(function(){o(!0)},5e3):(o(!1),c=e(r,6e4))}function s(){return p?tsNow()>p?(p=!1,!1):!0:!1}var c,l=0,d=!1,u=0,p=!1;return n.getUserID().then(function(e){u=e}),t.$on("apiUpdate",function(e,t){"updateUserStatus"==t._&&t.user_id==u&&(p=tsNow()+("userStatusOnline"==t.status._?3e5:0))}),{start:a,isOtherDeviceActive:s}}]).service("NotificationsManager",["$rootScope","$window","$interval","$q","_","MtpApiManager","AppPeersManager","IdleManager","Storage","AppRuntimeManager",function(e,t,n,i,a,o,r,s,c,l){function d(e){return void 0!==U[e]?U[e]:U[e]=o.invokeApi("account.getNotifySettings",{peer:{_:"inputNotifyPeer",peer:r.getInputPeerByID(e)}})}function u(e){if(e=e||"favicon.ico",x!==e){var t=document.createElement("link");t.rel="shortcut icon",t.type="image/x-icon",t.href=e,O.parentNode.replaceChild(t,O),O=t,x=e}}function p(e,t){U[e]=i.when(t)}function m(e,t){p(e,t);var n=angular.copy(t);return n._="inputPeerNotifySettings",o.invokeApi("account.updateNotifySettings",{peer:{_:"inputNotifyPeer",peer:r.getInputPeerByID(e)},settings:n})}function h(e){return d(e).then(function(e){return"peerNotifySettings"==e._&&1e3*e.mute_until>tsNow()})}function f(){if(w(),!A)return!1;"Notification"in window&&"granted"!==Notification.permission&&"denied"!==Notification.permission&&$(t).on("click",g);try{"onbeforeunload"in window&&$(t).on("beforeunload",b)}catch(e){}}function g(){Notification.requestPermission(),$(t).off("click",g)}function _(e){return Config.Navigator.ffos?e.image="https://raw.githubusercontent.com/zhukov/webogram/master/app/img/icons/icon60.png":e.image||(e.image="img/icons/icon60.png"),I++,c.get("notify_nosound","notify_volume").then(function(e){(!e[0]&&e[1]===!1||e[1]>0)&&v(e[1]||.5)}),!A||"Notification"in window&&"granted"!==Notification.permission?!1:void c.get("notify_nodesktop","notify_novibrate").then(function(t){if(t[0]){if(D&&!t[1])return void navigator.vibrate([200,100,200])}else{var n,i=++T,a=e.key||"k"+i;if("Notification"in window)n=new Notification(e.title,{icon:e.image||"",body:e.message||"",tag:e.tag||""});else if("mozNotification"in navigator)n=navigator.mozNotification.createNotification(e.title,e.message||"",e.image||"");else{if(!S)return;window.external.msSiteModeClearIconOverlay(),window.external.msSiteModeSetIconOverlay("img/icons/icon16.png",e.title),window.external.msSiteModeActivate(),n={index:i}}n.onclick=function(){n.close(),l.focus(),b(),e.onclick&&e.onclick()},n.onclose=function(){delete E[a],b()},n.show&&n.show(),E[a]=n}})}function v(e){var t=tsNow();if(!(P&&P>t&&N==e)){P=t+1e3,N=e;var n="img/sound_a.mp3",i=$("#notify_sound").html('');i.find("audio")[0].volume=e}}function y(e){var t=E[e];if(t){I>0&&I--;try{t.close?t.close():S&&t.index==T&&window.external.msSiteModeClearIconOverlay()}catch(n){}delete I[e]}}function b(){S?window.external.msSiteModeClearIconOverlay():angular.forEach(E,function(e){try{e.close&&e.close()}catch(t){}}),E={},I=0}function w(){if(F)return!1;if(navigator.push&&Config.Navigator.ffos&&Config.Modes.packed){var e=navigator.push.register();e.onsuccess=function(){clearTimeout(q),console.log(dT(),"Push registered",e.result),F=e.result,o.invokeApi("account.registerDevice",{token_type:4,token:F,device_model:navigator.userAgent||"Unknown UserAgent",system_version:navigator.platform||"Unknown Platform",app_version:Config.App.version,app_sandbox:!1,lang_code:navigator.language||"en"})},e.onerror=function(e){console.error("Push register error",e,e.toString()),q=setTimeout(w,j),j=Math.min(3e4,1.5*j)}}}function k(){return D}navigator.vibrate=navigator.vibrate||navigator.mozVibrate||navigator.webkitVibrate;var S=!1;try{window.external&&window.external.msIsSiteMode()&&(S=!0)}catch(C){}var M,x,A=S||"Notification"in window||"mozNotification"in navigator,E={},T=0,I=0,D=!!navigator.vibrate,P=!1,N=!1,U={},O=$('link[rel="icon"]:first')[0],L=a.pluralize("page_title_pluralize_notifications"),R=document.title,B=!1;e.$watch("idle.isIDLE",function(e){e||b(),Config.Navigator.mobile||(n.cancel(M),e?(R=document.title,M=n(function(){var e=tsNow();!I||e%2e3>1e3?B&&(B=!1,document.title=R,u()):(B=!0,document.title=L(I),u("favicon_unread.ico"))},1e3)):(B=!1,document.title=R,u()))}),e.$on("apiUpdate",function(e,t){switch(t._){case"updateNotifySettings":if("notifyPeer"==t.peer._){var n=r.getPeerID(t.peer.peer);p(n,t.notify_settings)}}});var F=!1;return window.navigator.mozSetMessageHandler&&(window.navigator.mozSetMessageHandler("push",function(t){console.log(dT(),"received push",t),e.$broadcast("push_received")}),window.navigator.mozSetMessageHandler("push-register",function(e){console.log(dT(),"received push",e),F=!1,w()})),{start:f,notify:_,cancel:y,clear:b,getPeerSettings:d,getPeerMuted:h,savePeerSettings:p,updatePeerSettings:m,getVibrateSupport:k,testSound:v};var j,q}]).service("ErrorService",["$rootScope","$modal","$window",function(e,t,n){function i(n,i){if(r>=1)return console.log("Skip error box, too many open",r,n,i),!1;i=i||{};var a=e.$new();angular.extend(a,n),r++;var o=t.open({templateUrl:templateUrl("error_modal"),scope:a,windowClass:i.windowClass||"error_modal_window"});return o.result["finally"](function(){r--}),o}function a(e,t){return i({title:e,description:t})}function o(n,i){i=i||{};var a=e.$new();angular.extend(a,n);var o=t.open({templateUrl:templateUrl("confirm_modal"),scope:a,windowClass:i.windowClass||"confirm_modal_window"});return o.result}var r=0;return n.safeConfirm=function(e,t){"string"==typeof e&&(e={message:e}),o(e).then(function(e){t(e||!0)},function(){t(!1)})},{show:i,alert:a,confirm:o}}]).service("PeersSelectService",["$rootScope","$modal",function(e,t){function n(n){var i=e.$new();return i.multiSelect=!1,n&&angular.extend(i,n),t.open({templateUrl:templateUrl("peer_select"),controller:"PeerSelectController",scope:i,windowClass:"peer_select_window mobile_modal"}).result}function i(i){if(Config.Mobile)return n(i).then(function(e){return[e]});var a=e.$new();return a.multiSelect=!0,i&&angular.extend(a,i),t.open({templateUrl:templateUrl("peer_select"),controller:"PeerSelectController",scope:a,windowClass:"peer_select_window mobile_modal"}).result}return{selectPeer:n,selectPeers:i}}]).service("ContactsSelectService",["$rootScope","$modal",function(e,t){function n(n,i){i=i||{};var a=e.$new();return a.multiSelect=n,angular.extend(a,i),!a.action&&n&&(a.action="select"),t.open({templateUrl:templateUrl("contacts_modal"),controller:"ContactsModalController",scope:a,windowClass:"contacts_modal_window mobile_modal"}).result}return{selectContacts:function(e){return n(!0,e)},selectContact:function(e){return n(!1,e)}}}]).service("ChangelogNotifyService",["Storage","$rootScope","$modal",function(e,t,n){function i(){e.get("last_version").then(function(t){t!=Config.App.version&&(t&&a(t),e.set({last_version:Config.App.version}))})}function a(e){var i=t.$new();i.lastVersion=e,n.open({controller:"ChangelogModalController",templateUrl:templateUrl("changelog_modal"),scope:i,windowClass:"changelog_modal_window mobile_modal"})}return{checkUpdate:i,showChangelog:a}}]).service("HttpsMigrateService",["ErrorService","Storage",function(e,t){function n(){t.get("https_dismiss").then(function(n){(!n||tsNow()>n+432e5)&&e.confirm({type:"MIGRATE_TO_HTTPS"}).then(function(){var e;try{e=window.open("https://web.telegram.org","_blank")}catch(t){}e||(location="https://web.telegram.org")},function(){t.set({https_dismiss:tsNow()})})})}function i(){a||"http:"!=location.protocol||Config.Modes.http||-1==Config.App.domains.indexOf(location.hostname)||(a=!0,setTimeout(n,12e4))}var a=!1;return{start:i,check:n}}]).service("LayoutSwitchService",["ErrorService","Storage","AppRuntimeManager","$window",function(e,t,n,i){function a(e){ConfigStorage.noPrefix(),t.set({layout_selected:e?"mobile":"desktop",layout_width:$(window).width()}).then(function(){n.reload()})}function o(n){if(!c){var i=$(window).width(),o=600>i;!i||!n&&(Config.Navigator.mobile?800>=i:o)||o!=Config.Mobile&&(ConfigStorage.noPrefix(),t.get("layout_width").then(function(n){return i==n?!1:(c=!0,void e.confirm({type:o?"SWITCH_MOBILE_VERSION":"SWITCH_DESKTOP_VERSION"}).then(function(){a(o)},function(){ConfigStorage.noPrefix(),t.set({layout_width:i}),c=!1}))}))}}function r(){s||Config.Navigator.mobile||(s=!0,o(),$(i).on("resize",o))}var s=!1,c=!1;return{start:r,switchLayout:a}}]).service("TelegramMeWebService",["Storage",function(e){function t(t){return n?!1:void e.get("tgme_sync").then(function(n){var i=tsNow(!0);if(t&&n&&n.canRedirect==t&&n.ts+86400>i)return!1;e.set({tgme_sync:{canRedirect:t,ts:i}});var a=$("