}functionn(){c=!0}functioni(){returnc?(c=!1,""):s}functiona(){vare,t,n,a=Array.prototype.slice.call(arguments),o=a.pop(),r=[],s=1==a.length,c=!0,p=i();for(t=0;t<a.length;t++)if(n=a[t]=p+a[t],"xt_"!=n.substr(0,3)&&void0!==l[n])r.push(l[n]);elseif(u){try{e=localStorage.getItem(n)}catch(m){u=!1}try{e=void0===e||null===e?!1:JSON.parse(e)}catch(m){e=!1}r.push(l[n]=e)}elsed?c=!1:r.push(l[n]=!1);returnc?o(s?r[0]:r):voidchrome.storage.local.get(a,function(e){vari;for(r=[],t=0;t<a.length;t++)n=a[t],i=e[n],i=void0===i||null===i?!1:JSON.parse(i),r.push(l[n]=i);o(s?r[0]:r)})}functiono(e,t){varn,a,o={},r=i();for(nine)if(e.hasOwnProperty(n))if(a=e[n],n=r+n,l[n]=a,a=JSON.stringify(a),u)try{localStorage.setItem(n,a)}catch(s){u=!1}elseo[n]=a;returnu||!d?void(t&&t()):voidchrome.storage.local.set(o,t)}functionr(){vare,t,n,a=Array.prototype.slice.call(arguments),o=i();for("function"==typeofa[a.length-1]&&(n=a.pop()),e=0;e<a.length;e++)if(t=a[e]=o+a[e],deletel[t],u)try{localStorage.removeItem(t)}catch(r){u=!1}d?chrome.storage.local.remove(a,n):n&&n()}vars="",c=!1,l={},d=!!(e.chrome&&chrome.storage&&chrome.storage.local),u=!d&&!!e.localStorage;e.ConfigStorage={prefix:t,noPrefix:n,get:a,set:o,remove:r}}(this),function(){try{window==window.top||window.chrome&&chrome.app&&chrome.app.window?document.documentElement.style.display="block":top.location=self.location}catch(e){console.error("CJ protection",e)}if(window.safeConfirm=function(e,t){"string"==typeofe&&(e={message:e});varn=!1;try{n=confirm(e.message)}catch(i){n=!0}setTimeout(function(){t(n)},10)},window.applicationCache&&!Config.Modes.packed&&window.addEventListener){vart=window.applicationCache,n=!1,i=!1,a=function(e){clearTimeout(i),i=setTimeout(function(){try{t.update()}catch(e){console.log("appCache.update: "+e)}},e||3e5)},o=function(){t.addEventListener("updateready",function(){t.status==t.UPDATEREADY&&(n||(safeConfirm({type:"WEBOGRAM_UPDATED_RELOAD",message:"A new version of Webogram is downloaded. Launch it?"},function(e){e?window.location.reload():n=!0}),a()))},!1),t.addEventListener("noupdate",function(){a()},!1),t.addEventListener("error",function(){a()},!1)};a(3e3),window.addEventListener("load",o)}}(),function(){vare=[Config.Navigator.osX?"osx":"non_osx",Config.Navigator.retina?"is_2x":"is_1x"];Config.Modes.ios_standalone&&e.push("ios_standalone"),$(document.body).addClass(e.join(" ")),ConfigStorage.get("current_layout","i18n_locale",function(e){vart=e[0],n=e[1],i="en-us",a={dom:!1,i18n_ng:!1,i18n_messages:!1,i18n_fallback:!1},o=function(){vare,t=!0;for(eina)if(a.hasOwnProperty(e)&&a[e]===!1){t=!1;break}t&&(a.boot=!1,angular.bootstrap(document,["myApp"]))};switch(t){case"mobile":Config.Mobile=!0;break;case"desktop":Config.Mobile=!1;break;default:Config.Mobile=Config.Navigator.mobile||$(window).width()<480}$("head").append('<link rel="stylesheet" href="css/'+(Config.Mobile?"mobile.css":"desktop.css")+'" />'),n||(n=(navigator.language||"").toLowerCase(),n=Config.I18n.aliases[n]||n);for(varr=0;r<Config.I18n.supported.length;r++)if(Config.I18n.supported[r]==n){Config.I18n.locale=n;break}a.i18n_ng=Config.I18n.locale==i,$.getJSON("js/locales/"+Config.I18n.locale+".json").success(function(e){Config.I18n.messages=e,a.i18n_messages=!0,Config.I18n.locale==i&&(a.i18n_fallback=!0),o()}),Config.I18n.locale!=i&&$.getJSON("js/locales/"+i+".json").success(function(e){Config.I18n.fallback_messages=e,a.i18n_fallback=!0,o()}),$(document).ready(function(){a.dom=!0,a.i18n_ng?o():$("<script>").appendTo("body").on("load",function(){a.i18n_ng=!0,o()}).attr("src","vendor/angular/i18n/angular-locale_"+Config.I18n.locale+".js")})})}(),function(e,t,n){"use strict";vari,a,o,r,s,c,l,d,u,p,m,h,f,g,_,y,v,b,w,$,k,C,S,M,x,A,T,E,I,D,P;S={paneClass:"nano-pane",sliderClass:"nano-slider",contentClass:"nano-content",iOSNativeScrolling:!1,preventPageScrolling:!1,disableResize:!1,alwaysVisible:!1,flashDelay:1500,sliderMinHeight:20,sliderMaxHeight:null,documentContext:null,windowContext:null},b="scrollbar",v="scroll",u="mousedown",p="mouseenter",m="mousemove",f="mousewheel",h="mouseup
returno.$$minErr=o.$$minErr||i,t(o,"module",function(){vare={};returnfunction(i,o,r){vars=function(e,t){if("hasOwnProperty"===e)throwa("badname","hasOwnProperty is not a valid {0} name",t)};returns(i,"module"),o&&e.hasOwnProperty(i)&&(e[i]=null),t(e,i,function(){functione(e,n,i,a){returna||(a=t),function(){returna[i||"push"]([e,n,arguments]),l}}if(!o)thrown("nomod","Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.",i);vart=[],a=[],s=[],c=e("$injector","invoke","push",a),l={_invokeQueue:t,_configBlocks:a,_runBlocks:s,requires:o,name:i,provider:e("$provide","provider"),factory:e("$provide","factory"),service:e("$provide","service"),value:e("$provide","value"),constant:e("$provide","constant","unshift"),animation:e("$animateProvider","register"),filter:e("$filterProvider","register"),controller:e("$controllerProvider","register"),directive:e("$compileProvider","directive"),config:c,run:function(e){returns.push(e),this}};returnr&&c(r),l})}})}functiondt(t){u(t,{bootstrap:J,copy:L,extend:u,equals:U,element:zi,forEach:o,injector:Ft,noop:h,bind:F,toJson:H,fromJson:j,identity:f,isUndefined:_,isDefined:y,isString:b,isFunction:k,isObject:v,isNumber:w,isElement:I,isArray:na,version:ha,isDate:$,lowercase:Ri,uppercase:qi,callbacks:{counter:0},getTestability:et,$$minErr:i,$$csp:oa,reloadWithDebugInfo:Q}),Gi=lt(e);try{Gi("ngLocale")}catch(n){Gi("ngLocale",[]).provider("$locale",pn)}Gi("ng",["ngLocale"],["$provide",function(e){e.provider({$$sanitizeUri:jn}),e.provider("$compile",Gt).directive({a:bo,input:Ro,textarea:Ro,form:So,script:Er,select:Pr,style:Lr,option:Nr,ngBind:ar,ngBindHtml:rr,ngBindTemplate:or,ngClass:sr,ngClassEven:lr,ngClassOdd:cr,ngCloak:dr,ngController:ur,ngForm:Mo,ngHide:Cr,ngIf:hr,ngInclude:fr,ngInit:_r,ngNonBindable:yr,ngPluralize:vr,ngRepeat:br,ngShow:kr,ngStyle:Sr,ngSwitch:Mr,ngSwitchWhen:xr,ngSwitchDefault:Ar,ngOptions:Dr,ngTransclude:Tr,ngModel:Ko,ngList:er,ngChange:Xo,pattern:Yo,ngPattern:Yo,required:Zo,ngRequired:Zo,minlength:Qo,ngMinlength:Qo,maxlength:Jo,ngMaxlength:Jo,ngValue:nr,ngModelOptions:ir}).directive({ngInclude:gr}).directive(wo).directive(pr),e.provider({$anchorScroll:qt,$animate:Ba,$browser:Vt,$cacheFactory:zt,$controller:Yt,$document:Jt,$exceptionHandler:Qt,$filter:ti,$interpolate:dn,$interval:un,$http:rn,$httpBackend:cn,$location:Sn,$log:Mn,$parse:Un,$rootScope:Hn,$q:Bn,$$q:Rn,$sce:Gn,$sceDelegate:Wn,$sniffer:Kn,$templateCache:Wt,$templateRequest:Xn,$$testability:Zn,$timeout:Yn,$window:ei,$$rAF:qn,$$asyncCallback:Ht})}])}functionut(){return++ga}functionpt(e){returne.replace(va,function(e,t,n,i){returni?n.toUpperCase():n}).replace(ba,"Moz$1")}functionmt(e){return!Ca.test(e)}functionht(e){vart=e.nodeType;returnt===la||!t||t===pa}functionft(e,t){varn,i,a,r,s=t.createDocumentFragment(),c=[];if(mt(e))c.push(t.createTextNode(e));else{for(n=n||s.appendChild(t.createElement("div")),i=(Sa.exec(e)||["",""])[1].toLowerCase(),a=xa[i]||xa._default,n.innerHTML=a[1]+e.replace(Ma,"<$1></$2>")+a[2],r=a[0];r--;)n=n.lastChild;c=B(c,n.childNodes),n=s.firstChild,n.textContent=""}returns.textContent="",s.innerHTML="",o(c,function(e){s.appendChild(e)}),s}functiongt(e,n){n=n||t;vari;return(i=ka.exec(e))?[n.createElement(i[1])]:(i=ft(e,n))?i.childNodes:[]}function_t(e){if(einstanceof_t)returne;vart;if(b(e)&&(e=ia(e),t=!0),!(thisinstanceof_t)){if(t&&"<"!=e.charAt(0))throw$a("nosel","Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element");returnnew_t(e)}t?xt(this,gt(e)):xt(this,e)}functionyt(e){returne.cloneNode(!0)}functionvt(e,t){if(t||wt(e),e.querySelectorAll)for(varn=e.querySelectorAll("*"),i=0,a=n.length;a>i;i++)wt(n[i])}functionbt(e,t,n,i){if(y(i))throw$a("offargs","jqLite#off() does not support the `selector` argument");vara=$t(e),r=a&&a.events,s=a&&a.handle;if(s)if(t)o(t.split(" "),function(t){if(y(n)){vari=r[t];if(N(i||[],n),i&&i.length>0)return}ya(e,t,s),deleter[t]});elsefor(tin
}functionh(){o(arguments,function(e){m[e]=function(t,n){returnm(u(n||{},{method:e,url:t}))}})}functionf(){o(arguments,function(e){m[e]=function(t,n,i){returnm(u(i||{},{method:e,url:t,data:n}))}})}functiong(i,o,s){functionc(e,n,i,a){functiono(){u(n,e,i,a)}h&&(on(e)?h.put($,[e,n,tn(i),a]):h.remove($)),t?l.$applyAsync(o):(o(),l.$$phase||l.$apply())}functionu(e,t,n,a){t=Math.max(t,0),(on(t)?g.resolve:g.reject)({data:e,status:t,headers:nn(n),config:i,statusText:a})}functionp(){vare=m.pendingRequests.indexOf(i);-1!==e&&m.pendingRequests.splice(e,1)}varh,f,g=d.defer(),b=g.promise,$=w(i.url,i.params);if(m.pendingRequests.push(i),b.then(p,p),!i.cache&&!e.cache||i.cache===!1||"GET"!==i.method&&"JSONP"!==i.method||(h=v(i.cache)?i.cache:v(e.cache)?e.cache:C),h)if(f=h.get($),y(f)){if(E(f))returnf.then(p,p),f;na(f)?u(f[1],f[0],O(f[2]),f[3]):u(f,200,{},"OK")}elseh.put($,b);if(_(f)){vark=Qn(i.url)?r.cookies()[i.xsrfCookieName||e.xsrfCookieName]:n;k&&(s[i.xsrfHeaderName||e.xsrfHeaderName]=k),a(i.method,$,o,c,s,i.timeout,i.withCredentials,i.responseType)}returnb}functionw(e,t){if(!t)returne;varn=[];returns(t,function(e,t){null===e||_(e)||(na(e)||(e=[e]),o(e,function(e){v(e)&&(e=$(e)?e.toISOString():H(e)),n.push(X(t)+"="+X(e))}))}),n.length>0&&(e+=(-1==e.indexOf("?")?"?":"&")+n.join("&")),e}varC=c("$http"),S=[];returno(i,function(e){S.unshift(b(e)?p.get(e):p.invoke(e))}),m.pendingRequests=[],h("get","delete","head","jsonp"),f("post","put","patch"),m.defaults=e,m}]}functionsn(){returnnewe.XMLHttpRequest}functioncn(){this.$get=["$browser","$window","$document",function(e,t,n){returnln(e,sn,e.defer,t.angular.callbacks,n[0])}]}functionln(e,t,n,i,a){functionr(e,t,n){varo=a.createElement("script"),r=null;returno.type="text/javascript",o.src=e,o.async=!0,r=function(e){ya(o,"load",r),ya(o,"error",r),a.body.removeChild(o),o=null;vars=-1,c="unknown";e&&("load"!==e.type||i[t].called||(e={type:"error"}),c=e.type,s="error"===e.type?404:200),n&&n(s,c)},_a(o,"load",r),_a(o,"error",r),a.body.appendChild(o),r}returnfunction(a,s,c,l,d,u,p,m){functionf(){v&&v(),b&&b.abort()}functiong(t,i,a,o,r){k&&n.cancel(k),v=b=null,t(i,a,o,r),e.$$completeOutstandingRequest(h)}if(e.$$incOutstandingRequestCount(),s=s||e.url(),"jsonp"==Ri(a)){var_="_"+(i.counter++).toString(36);i[_]=function(e){i[_].data=e,i[_].called=!0};varv=r(s.replace("JSON_CALLBACK","angular.callbacks."+_),_,function(e,t){g(l,e,i[_].data,"",t),i[_]=h})}else{varb=t();b.open(a,s,!0),o(d,function(e,t){y(e)&&b.setRequestHeader(t,e)}),b.onload=function(){vare=b.statusText||"",t="response"inb?b.response:b.responseText,n=1223===b.status?204:b.status;0===n&&(n=t?200:"file"==Jn(s).protocol?404:0),g(l,n,t,b.getAllResponseHeaders(),e)};varw=function(){g(l,-1,null,null,"")};if(b.onerror=w,b.onabort=w,p&&(b.withCredentials=!0),m)try{b.responseType=m}catch($){if("json"!==m)throw$}b.send(c||null)}if(u>0)vark=n(f,u);elseE(u)&&u.then(f)}}functiondn(){vare="{{",t="}}";this.startSymbol=function(t){returnt?(e=t,this):e},this.endSymbol=function(e){returne?(t=e,this):t},this.$get=["$parse","$exceptionHandler","$sce",function(n,i,a){functiono(e){return"\\\\\\"+e}functionr(o,r,p,m){functionh(n){returnn.replace(l,e).replace(d,t)}functionf(e){try{returnT(A(e))}catch(t){varn=Wa("interr","Can't interpolate: {0}\n{1}",o,t.toString());i(n)}}m=!!m;for(varg,y,v,b=0,w=[],$=[],C=o.length,S=[],M=[];C>b;){if(-1==(g=o.indexOf(e,b))||-1==(y=o.indexOf(t,g+s))){b!==C&&S.push(h(o.substring(b)));break}b!==g&&S.push(h(o.substring(b,g))),v=o.substring(g+s,y),w.push(v),$.push(n(v,f)),b=y+c,M.push(S.length),S.push("")}if(p&&S.length>1)throwWa("noconcat","Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required. See http://docs.angularjs.org/api/ng.$sce",o);if(!r||w.length){varx=function(e){for(vart=0,n=w.length;n>t;t++){if(m&&_(e[t]))return;S[M[t]]=e[t]}returnS.join("")},A=function(e){returnp?a.getTrusted(p,e):a.valueOf(e)},T=function(e){if(null==e)return"";switch(typeofe){case"string":brea
}functionn(e,t,n){vari,a="number"==typeoft?t:t=0,o="number"==typeofn?n:e.length;for(i=-1,a=7&o;a--;++t)i=i>>>8^_[255&(i^e[t])];for(a=o>>3;a--;t+=8)i=i>>>8^_[255&(i^e[t])],i=i>>>8^_[255&(i^e[t+1])],i=i>>>8^_[255&(i^e[t+2])],i=i>>>8^_[255&(i^e[t+3])],i=i>>>8^_[255&(i^e[t+4])],i=i>>>8^_[255&(i^e[t+5])],i=i>>>8^_[255&(i^e[t+6])],i=i>>>8^_[255&(i^e[t+7])];return(4294967295^i)>>>0}functioni(){}functiona(e){vart,n,i,a,o,r,s,c,l,d=e.length,u=0,m=Number.POSITIVE_INFINITY;for(c=0;d>c;++c)e[c]>u&&(u=e[c]),e[c]<m&&(m=e[c]);for(t=1<<u,n=new(p?Uint32Array:Array)(t),i=1,a=0,o=2;u>=i;){for(c=0;d>c;++c)if(e[c]===i){for(r=0,s=a,l=0;i>l;++l)r=r<<1|1&s,s>>=1;for(l=r;t>l;l+=o)n[l]=i<<16|c;++a}++i,a<<=1,o<<=1}return[n,u,m]}functiono(t,n){switch(this.i=[],this.j=32768,this.d=this.f=this.c=this.n=0,this.input=p?newUint8Array(t):t,this.o=!1,this.k=$,this.w=!1,(n||!(n={}))&&(n.index&&(this.c=n.index),n.bufferSize&&(this.j=n.bufferSize),n.bufferType&&(this.k=n.bufferType),n.resize&&(this.w=n.resize)),this.k){casew:this.a=32768,this.b=new(p?Uint8Array:Array)(32768+this.j+258);break;case$:this.a=0,this.b=new(p?Uint8Array:Array)(this.j),this.e=this.D,this.q=this.A,this.l=this.C;break;default:e(Error("invalid inflate mode"))}}functionr(t,n){for(vari,a=t.f,o=t.d,r=t.input,s=t.c;n>o;)i=r[s++],i===d&&e(Error("input buffer is broken")),a|=i<<o,o+=8;returni=a&(1<<n)-1,t.f=a>>>n,t.d=o-n,t.c=s,i}functions(e,t){for(varn,i,a,o=e.f,r=e.d,s=e.input,c=e.c,l=t[0],u=t[1];u>r&&(n=s[c++],n!==d);)o|=n<<r,r+=8;returni=l[o&(1<<u)-1],a=i>>>16,e.f=o>>a,e.d=r-a,e.c=c,65535&i}functionc(e){functiont(e,t,n){vari,a,o,c;for(c=0;e>c;)switch(i=s(this,t)){case16:for(o=3+r(this,2);o--;)n[c++]=a;break;case17:for(o=3+r(this,3);o--;)n[c++]=0;a=0;break;case18:for(o=11+r(this,7);o--;)n[c++]=0;a=0;break;default:a=n[c++]=i}returnn}varn,i,o,c,l=r(e,5)+257,d=r(e,5)+1,u=r(e,4)+4,m=new(p?Uint8Array:Array)(M.length);for(c=0;u>c;++c)m[M[c]]=r(e,3);n=a(m),i=new(p?Uint8Array:Array)(l),o=new(p?Uint8Array:Array)(d),e.l(a(t.call(e,l,n,i)),a(t.call(e,d,n,o)))}functionl(e){this.input=e,this.c=0,this.m=[],this.s=!1}vard=void0,u=this,p="undefined"!=typeofUint8Array&&"undefined"!=typeofUint16Array&&"undefined"!=typeofUint32Array;new(p?Uint8Array:Array)(256);varm;for(m=0;256>m;++m)for(varh=m,f=7,h=h>>>1;h;h>>>=1)--f;varg=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828
}),o.promise}functionc(e){varn=t.defer();returne.createWriter(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise}functionl(e,t){varn=[],i={write:function(e){returnf?(n.push(e),voidsetZeroTimeout(function(){i.onwriteend&&i.onwriteend()})):(i.onerror&&i.onerror(newError("Blob not supported by browser")),!1)},truncate:function(){n=[]},finalize:function(){vari=blobConstruct(n,e);returnt&&t(i),i}};returni}functiond(e,t){returnvoid0!==e.toURL?e.toURL(t):einstanceofBlob?URL.createObjectURL(e):"data:"+t+";base64,"+bytesToBase64(e)}functionu(e){varn;try{vari=newFileReader;i.onloadend=function(){n.resolve(i.result)},i.readAsDataURL(e)}catch(a){returnt.reject(a)}returnn=t.defer(),n.promise}functionp(e,t){if(h&&einstanceofBlob){vart=e.type||e.mimeType||t||"";if(!t.match(/image\/(jpeg|gif|png|bmp)|video\/quicktime/))returnu(e)}returni.when(d(e,t))}functionm(e,t,i){returnwindow.navigator&&void0!==navigator.msSaveBlob?(window.navigator.msSaveBlob(e,i),!1):voidp(e,t).then(function(e){vart=document.createElementNS("http://www.w3.org/1999/xhtml","a");t.href=e,t.target="_blank",t.download=i,t.dataset&&(t.dataset.downloadurl=["video/quicktime",i,e].join(":")),$(t).css({position:"absolute",top:1,left:1}).appendTo("body");try{vara=document.createEvent("MouseEvents");a.initMouseEvent("click",!0,!1,window,0,0,0,0,0,!1,!1,!1,!1,0,null),t.dispatchEvent(a)}catch(o){console.error("Download click error",o);try{console.error("Download click error",o),t[0].click()}catch(o){window.open(e,"_blank")}}n(function(){$(t).remove()},100)})}e.URL=e.URL||e.webkitURL,e.BlobBuilder=e.BlobBuilder||e.WebKitBlobBuilder||e.MozBlobBuilder;varh=-1!=navigator.userAgent.indexOf("Safari")&&-1==navigator.userAgent.indexOf("Chrome"),f=!0;try{blobConstruct([],"")}catch(g){f=!1}return{isAvailable:a,copy:o,write:r,getFileWriter:c,getFakeFileWriter:l,chooseSave:s,getUrl:d,getDataUrl:u,getFileCorrectUrl:p,download:m}}]).service("IdbFileStorage",["$q","$window","FileManager",function(e,t,n){functioni(){returnm}functiona(){if(l)returnl;try{vart=indexedDB.open(d,p),n=e.defer(),i=function(e){e.createObjectStore(u)};if(!t)thrownewException}catch(a){returnm=!1,e.reject(a)}returnt.onsuccess=function(){db=t.result,db.onerror=function(e){m=!1,console.error("Error creating/accessing IndexedDB database",e),n.reject(e)},db.setVersion&&db.version!=p?db.setVersion(p).onsuccess=function(){i(db),n.resolve(db)}:n.resolve(db)},t.onerror=function(e){m=!1,console.error("Error creating/accessing IndexedDB database",e),n.reject(e)},t.onupgradeneeded=function(e){i(e.target.result)},l=n.promise}functiono(t,n){returna().then(function(i){if(!h)returnr(i,t,n);try{vara=i.transaction([u],IDBTransaction.READ_WRITE||"readwrite").objectStore(u),o=a.put(n,t)}catch(s){returnh?(h=!1,r(i,t,n)):(m=!1,e.reject(s))}varc=e.defer();returno.onsuccess=function(){c.resolve(n)},o.onerror=function(e){c.reject(e)},c.promise})}functionr(t,n,i){try{vara=newFileReader;a.readAsDataURL(i)}catch(o){returnm=!1,e.reject()}varr=e.defer();returna.onloadend=function(){try{vare=t.transaction([u],IDBTransaction.READ_WRITE||"readwrite").objectStore(u),o=e.put(a.result,n)}catch(s){returnm=!1,voidr.reject(s)}o.onsuccess=function(){r.resolve(i)},o.onerror=function(e){r.reject(e)}},r.promise}functions(t){returna().then(function(n){vari=e.defer(),a=n.transaction([u],IDBTransaction.READ||"readonly").objectStore(u),o=a.get(t);returno.onsuccess=function(e){vart=e.target.result;void0===t?i.reject():i.resolve("string"==typeoft&&"data:"===t.substr(0,5)?dataUrlToBlob(t):t)},o.onerror=function(e){i.reject(e)},i.promise})}functionc(t,i){vara=n.getFakeFileWriter(i,function(e){o(t,e)});returne.when(a)}t.indexedDB=t.indexedDB||t.webkitIndexedDB||t.mozIndexedDB||t.OIndexedDB||t.msIndexedDB,t.IDBTransaction=t.IDBTransaction||t.webkitIDBTransaction||t.OIDBTransaction||t.msIDBTransaction;varl,d="cachedFiles",u="files",p=1,m=void0!==t.indexedDB&&void0!==t.IDBTransaction&&-1==navigator.userAgent.indexOf("Safari"),h=m||!1;returna(),{isAvailable:i,saveFile:o,getFile:s,getFileWri
}this.offset!=n+e.bytes&&(console.warn(dT(),"set offset",this.offset,n,e.bytes),this.offset=n+e.bytes)},mt_rpc_result:function(e,n){e.req_msg_id=this.fetchLong(n+"[req_msg_id]");vari=t.sentMessages[e.req_msg_id],a=i&&i.resultType||"Object";e.result=this.fetchObject(a,n+"[result]")}}},l=newTLDeserialization(n,a),d=l.fetchObject("","INPUT");return{response:d,messageID:r,sessionID:i,seqNo:s}})})},u.prototype.applyServerSalt=function(e){vart=longToBytes(e),n={};returnn["dc"+this.dcID+"_server_salt"]=bytesToHex(t),i.set(n),this.serverSalt=t,!0},u.prototype.sheduleRequest=function(e){this.offline&&this.checkConnection("forced shedule");vart=tsNow()+e;returne&&this.nextReq&&this.nextReq<=t?!1:(c.cancel(this.nextReqPromise),e>0?this.nextReqPromise=c(this.performSheduledRequest.bind(this),e||0):setZeroTimeout(this.performSheduledRequest.bind(this)),void(this.nextReq=t))},u.prototype.ackMessage=function(e){this.pendingAcks.push(e),this.sheduleRequest(3e4)},u.prototype.reqResendMessage=function(e){console.log(dT(),"Req resend",e),this.pendingResends.push(e),this.sheduleRequest(100)},u.prototype.cleanupSent=function(){vare=this,t=!1;returnangular.forEach(this.sentMessages,function(n,i){if(n.notContentRelated&&void0===e.pendingMessages[i])deletee.sentMessages[i];elseif(n.container){for(vara=0;a<n.inner.length;a++)if(void0!==e.sentMessages[n.inner[a]])returnvoid(t=!0);deletee.sentMessages[i]}elset=!0}),!t},u.prototype.processMessageAck=function(e){vart=this.sentMessages[e];returnt&&!t.acked?(deletet.body,t.acked=!0,!0):!1},u.prototype.processError=function(e){vart=(e.error_message||"").match(/^([A-Z_0-9]+\b)(: (.+))?/)||[];returne.error_code=uintToInt(e.error_code),{code:!e.error_code||e.error_code<=0?500:e.error_code,type:t[1]||"UNKNOWN",description:t[3]||"CODE#"+e.error_code+" "+e.error_message,originalError:e}},u.prototype.processMessage=function(e,n,a){switch(e._){case"msg_container":for(varo=e.messages.length,r=0;o>r;r++)this.processMessage(e.messages[r],n,a);break;case"bad_server_salt":console.log(dT(),"Bad server salt",e);vars=this.sentMessages[e.bad_msg_id];if(!s||s.seq_no!=e.bad_msg_seqno)throwconsole.log(e.bad_msg_id,e.bad_msg_seqno),newError("Bad server salt for invalid message");this.applyServerSalt(e.new_server_salt),this.pushResend(e.bad_msg_id),this.ackMessage(n);break;case"bad_msg_notification":console.log(dT(),"Bad msg notification",e);vars=this.sentMessages[e.bad_msg_id];if(!s||s.seq_no!=e.bad_msg_seqno)throwconsole.log(e.bad_msg_id,e.bad_msg_seqno),newError("Bad msg notification for invalid message");if(16==e.error_code||17==e.error_code){t.applyServerTime(bigStringInt(n).shiftRight(32).toString(10))&&(console.log(dT(),"Update session"),this.updateSession());varc=this.updateSentMessage(e.bad_msg_id);this.pushResend(c.msg_id),this.ackMessage(n)}break;case"message":this.serverMessages.push(e.msg_id),this.processMessage(e.body,e.msg_id,a);break;case"new_session_created":this.ackMessage(n),this.processMessageAck(e.first_msg_id),this.applyServerSalt(e.server_salt);varl=this;i.get("dc").then(function(t){t==l.dcID&&!l.upload&&h&&h(e)});break;case"msgs_ack":for(varr=0;r<e.msg_ids.length;r++)this.processMessageAck(e.msg_ids[r]);break;case"msg_detailed_info":if(!this.sentMessages[e.msg_id]){this.ackMessage(e.answer_msg_id);break}case"msg_new_detailed_info":this.reqResendMessage(e.answer_msg_id);break;case"msgs_state_info":if(this.ackMessage(e.answer_msg_id),this.lastResendReq&&this.lastResendReq.req_msg_id==e.req_msg_id&&this.pendingResends.length){varr,d,u;for(r=0;r<this.lastResendReq.resend_msg_ids.length;r++)d=this.lastResendReq.resend_msg_ids[r],u=this.pendingResends.indexOf(d),-1!=u&&this.pendingResends.splice(u,1)}break;case"rpc_result":this.ackMessage(n);varp=e.req_msg_id,s=this.sentMessages[p];if(this.processMessageAck(p),s){varm=s.deferred;if("rpc_error"==e.result._){varf=this.processError(e.result);console.log(dT(),"Rpc error",f),m&&m.reject(f)}else{if(m){if(Config.Modes.debug)console.log(dT(),"Rpc response",e.result);else{varg=e.result._;g||(g=e.result.length>5?"[.."+e.result.le
varB,R}]).service("ErrorService",["$rootScope","$modal","$window",function(e,t,n){functioni(n,i){if(r>=2)returnconsole.log("Skip error box, too many open",r,n,i),!1;i=i||{};vara=e.$new();angular.extend(a,n),r++;varo=t.open({templateUrl:templateUrl("error_modal"),scope:a,windowClass:i.windowClass||"error_modal_window"});returno.result["finally"](function(){r--}),o}functiona(e,t){returni({title:e,description:t})}functiono(n,i){i=i||{};vara=e.$new();angular.extend(a,n);varo=t.open({templateUrl:templateUrl("confirm_modal"),scope:a,windowClass:i.windowClass||"confirm_modal_window"});returno.result}varr=0;returnn.safeConfirm=function(e,t){"string"==typeofe&&(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){functionn(n){vari=e.$new();returnn&&angular.extend(i,n),t.open({templateUrl:templateUrl("peer_select"),controller:"PeerSelectController",scope:i,windowClass:"peer_select_window mobile_modal"}).result}return{selectPeer:n}}]).service("ContactsSelectService",["$rootScope","$modal",function(e,t){functionn(n,i){i=i||{};vara=e.$new();returna.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){returnn(!0,e)},selectContact:function(e){returnn(!1,e)}}}]).service("ChangelogNotifyService",["Storage","$rootScope","$modal",function(e,t,n){functioni(e,t){"string"!=typeofe&&(e=""),"string"!=typeoft&&(t=""),e=e.replace(/^\s+|\s+$/g,"").split("."),t=t.replace(/^\s+|\s+$/g,"").split(".");varn,i=Math.max(e.length,t.length);for(n=0;i>n;n++)if(e[n]!=t[n])returne[n]>t[n]?1:-1;return0}functiona(){e.get("last_version").then(function(t){t!=Config.App.version&&(t&&o(t),e.set({last_version:Config.App.version}))})}functiono(e){vara=t.$new();a.lastVersion=e,a.canShowVersion=function(t){returna.lastVersion===!1||void0===a.lastVersion?!0:i(t,e)>=0},n.open({controller:"ChangelogModalController",templateUrl:templateUrl("changelog_modal"),scope:a,windowClass:"changelog_modal_window mobile_modal"})}return{checkUpdate:a,showChangelog:o}}]).service("HttpsMigrateService",["ErrorService","Storage",function(e,t){functionn(){t.get("https_dismiss").then(function(n){(!n||tsNow()>n+432e5)&&e.confirm({type:"MIGRATE_TO_HTTPS"}).then(function(){vare;try{e=window.open("https://web.telegram.org","_blank")}catch(t){}e||(location="https://web.telegram.org")},function(){t.set({https_dismiss:tsNow()})})})}functioni(){a||"http:"!=location.protocol||-1==Config.App.domains.indexOf(location.hostname)||(a=!0,setTimeout(n,12e4))}vara=!1;return{start:i,check:n}}]).service("LayoutSwitchService",["ErrorService","Storage","AppRuntimeManager","$window",function(e,t,n,i){functiona(e){t.set({current_layout:e?"mobile":"desktop",layout_confirmed:{width:$(window).width(),mobile:e}}).then(function(){n.reload()})}functiono(n){if(!c){vari=$(window).width();if(!(!n&&Config.Mobile&&800>=i)){varo=600>i;o!=Config.Mobile&&t.get("layout_confirmed").then(function(n){returnn&&(n.mobile?i==n.width:i==n.width)?!1:(c=!0,voide.confirm({type:o?"SWITCH_MOBILE_VERSION":"SWITCH_DESKTOP_VERSION"}).then(function(){t.remove("layout_confirmed"),a(o)},function(){t.set({layout_confirmed:{width:i,mobile:Config.Mobile}}),c=!1}))})}}}functionr(){s||Config.Navigator.mobile||(s=!0,o(),$(i).on("resize",o))}vars=!1,c=!1;return{start:r,switchLayout:a}}]),angular.module("myApp.controllers",["myApp.i18n"]).controller("AppWelcomeController",["$scope","$location","MtpApiManager","ErrorService","ChangelogNotifyService","LayoutSwitchService",function(e,t,n,i,a,o){n.getUserID().then(function(n){returnn?voidt.url("/im"):"http:"==location.protocol&&-1!=Config.App.domains.indexOf(location.hostname)?void(location="https://web.telegram.org"):void(e.showWelcome=!0)}),a.checkUpdate(),o.start()}]).controller("AppLoginController",["$scope","$rootScope","$location","$timeout","$moda