function BigInteger ( e , t , n ) { null != e && ( "number" == typeof e ? this . fromNumber ( e , t , n ) : null == t && "string" != typeof e ? this . fromString ( e , 256 ) : this . fromString ( e , t ) ) } function nbi ( ) { return new BigInteger ( null ) } function am1 ( e , t , n , a , i , o ) { for ( ; -- o >= 0 ; ) { var s = t * this [ e ++ ] + n [ a ] + i ; i = Math . floor ( s / 67108864 ) , n [ a ++ ] = 67108863 & s } return i } function am2 ( e , t , n , a , i , o ) { for ( var s = 32767 & t , r = t >> 15 ; -- o >= 0 ; ) { var l = 32767 & this [ e ] , c = this [ e ++ ] >> 15 , d = r * l + c * s ; l = s * l + ( ( 32767 & d ) << 15 ) + n [ a ] + ( 1073741823 & i ) , i = ( l >>> 30 ) + ( d >>> 15 ) + r * c + ( i >>> 30 ) , n [ a ++ ] = 1073741823 & l } return i } function am3 ( e , t , n , a , i , o ) { for ( var s = 16383 & t , r = t >> 14 ; -- o >= 0 ; ) { var l = 16383 & this [ e ] , c = this [ e ++ ] >> 14 , d = r * l + c * s ; l = s * l + ( ( 16383 & d ) << 14 ) + n [ a ] + i , i = ( l >> 28 ) + ( d >> 14 ) + r * c , n [ a ++ ] = 268435455 & l } return i } function int2char ( e ) { return BI _RM . charAt ( e ) } function intAt ( e , t ) { var n = BI _RC [ e . charCodeAt ( t ) ] ; return null == n ? - 1 : n } function bnpCopyTo ( e ) { for ( var t = this . t - 1 ; t >= 0 ; -- t ) e [ t ] = this [ t ] ; e . t = this . t , e . s = this . s } function bnpFromInt ( e ) { this . t = 1 , this . s = e < 0 ? - 1 : 0 , e > 0 ? this [ 0 ] = e : e < - 1 ? this [ 0 ] = e + this . DV : this . t = 0 } function nbv ( e ) { var t = nbi ( ) ; return t . fromInt ( e ) , t } function bnpFromString ( e , t , n ) { var a ; if ( 16 == t ) a = 4 ; else if ( 8 == t ) a = 3 ; else if ( 256 == t ) a = 8 ; else if ( 2 == t ) a = 1 ; else if ( 32 == t ) a = 5 ; else { if ( 4 != t ) return void this . fromRadix ( e , t ) ; a = 2 } this . t = 0 , this . s = 0 ; for ( var i = e . length , o = ! 1 , s = 0 ; -- i >= 0 ; ) { var r = 8 == a ? 255 & e [ i ] : intAt ( e , i ) ; r < 0 ? "-" == e . charAt ( i ) && ( o = ! 0 ) : ( o = ! 1 , 0 == s ? this [ this . t ++ ] = r : s + a > this . DB ? ( this [ this . t - 1 ] |= ( r & ( 1 << this . DB - s ) - 1 ) << s , this [ this . t ++ ] = r >> this . DB - s ) : this [ this . t - 1 ] |= r << s , s += a , s >= this . DB && ( s -= this . DB ) ) } 8 == a && 0 != ( 128 & e [ 0 ] ) && n && ( this . s = - 1 , s > 0 && ( this [ this . t - 1 ] |= ( 1 << this . DB - s ) - 1 << s ) ) , this . clamp ( ) , o && BigInteger . ZERO . subTo ( this , this ) } function bnpClamp ( ) { for ( var e = this . s & this . DM ; this . t > 0 && this [ this . t - 1 ] == e ; ) -- this . t } function bnToString ( e ) { if ( this . s < 0 ) return "-" + this . negate ( ) . toString ( e ) ; var t ; if ( 16 == e ) t = 4 ; else if ( 8 == e ) t = 3 ; else if ( 2 == e ) t = 1 ; else if ( 32 == e ) t = 5 ; else { if ( 4 != e ) return this . toRadix ( e ) ; t = 2 } var n , a = ( 1 << t ) - 1 , i = ! 1 , o = "" , s = this . t , r = this . DB - s * this . DB % t ; if ( s -- > 0 ) for ( r < this . DB && ( n = this [ s ] >> r ) > 0 && ( i = ! 0 , o = int2char ( n ) ) ; s >= 0 ; ) r < t ? ( n = ( this [ s ] & ( 1 << r ) - 1 ) << t - r , n |= this [ -- s ] >> ( r += this . DB - t ) ) : ( n = this [ s ] >> ( r -= t ) & a , r <= 0 && ( r += this . DB , -- s ) ) , n > 0 && ( i = ! 0 ) , i && ( o += int2char ( n ) ) ; return i ? o : "0" } function bnNegate ( ) { var e = nbi ( ) ; return BigInteger . ZERO . subTo ( this , e ) , e } function bnAbs ( ) { return this . s < 0 ? this . negate ( ) : this } function bnCompareTo ( e ) { var t = this . s - e . s ; if ( 0 != t ) return t ; var n = this . t ; if ( t = n - e . t , 0 != t ) return this . s < 0 ? - t : t ; for ( ; -- n >= 0 ; ) if ( 0 != ( t = this [ n ] - e [ n ] ) ) return t ; return 0 } function nbits ( e ) { var t , n = 1 ; return 0 != ( t = e >>> 16 ) && ( e = t , n += 16 ) , 0 != ( t = e >> 8 ) && ( e = t , n += 8 ) , 0 != ( t = e >> 4 ) && ( e = t , n += 4 ) , 0 != ( t = e >> 2 ) && ( e = t , n += 2 ) , 0 != ( t = e >> 1 ) && ( e = t , n += 1 ) , n } function bnBitLength ( ) { return this . t <= 0 ? 0 : this . DB * ( this . t - 1 ) + nbits ( this [ this . t - 1 ] ^ this . s & this . DM ) } function bnpDLShiftTo ( e , t ) { var n ; for ( n = this . t - 1 ; n >= 0 ; -- n ) t [ n + e ] = this [ n ] ; for ( n = e - 1 ; n >= 0 ; -- n ) t [ n ] = 0 ; t . t = this . t + e , t . s = this . s } function bnpDRShiftTo ( e , t ) { for ( var n = e ; n < this . t ; ++ n ) t [ n - e ] = this [ n ] ; t . t = Math . max ( this . t - e , 0 ) , t . s = this . s } function bnpLShiftTo ( e , t ) { var n , a = e % this . DB , i = this . DB - a , o = ( 1 << i ) - 1 , s = Math . floor ( e / this . DB ) , r = this . s << a & this . DM ; for ( n = this . t - 1 ; n >= 0 ; -- n ) t [ n + s + 1 ] = this [ n ] >> i | r , r = ( this [ n ] & o ) << a ; for ( n = s - 1 ; n >= 0 ; -- n ) t [ n ] = 0 ; t [ s ] = r , t . t = this . t + s + 1 , t . s = this . s , t . clamp ( ) } function bnpRShiftTo ( e , t ) { t . s = this . s ; var n = Math . floor ( e / this . DB ) ; if ( n >= this . t ) return void ( t . t = 0 ) ; var a = e % this . DB , i = this . DB - a , o = ( 1 << a ) - 1 ; t [ 0 ] = this [ n ] >> a ; for ( var s = n + 1 ; s < this . t ; ++ s ) t [ s - n - 1 ] |= ( this [ s ] & o ) << i , t [ s - n ] = this [ s ] >> a ; a > 0 && ( t [ this . t - n - 1 ] |= ( this . s & o ) << i ) , t . t = this . t - n , t . clamp ( ) } function bnpSubTo ( e , t ) { for ( var n = 0 , a = 0 , i = Math . min ( e . t , this . t ) ; n < i ; ) a += this [ n ] - e [ n ] , t [ n ++ ] = a & this . DM , a >>= this . DB ; if ( e . t < this . t ) { for ( a -= e . s ; n < this . t ; ) a += this [ n ] , t [ n ++ ] = a & this . DM , a >>= this . DB ; a += this . s } else { for ( a += this . s ; n < e . t ; ) a -= e [ n ] , t [ n ++ ] = a & this . DM , a >>= this . DB ; a -= e . s } t . s = a < 0 ? - 1 : 0 , a < - 1 ? t [ n ++ ] = this . DV + a : a > 0 && ( t [ n ++ ] = a ) , t . t = n , t . clamp ( ) } function bnpMultiplyTo ( e , t ) { var n = this . abs ( ) , a = e . abs ( ) , i = n . t ; for ( t . t = i + a . t ; -- i >= 0 ; ) t [ i ] = 0 ; for ( i = 0 ; i < a . t ; ++ i ) t [ i + n . t ] = n . am ( 0 , a [ i ] , t , i , 0 , n . t ) ; t . s = 0 , t . clamp ( ) , this . s != e . s && BigInteger . ZERO . subTo ( t , t ) } function bnpSquareTo ( e ) { for ( var t = this . abs ( ) , n = e . t = 2 * t . t ; -- n >= 0 ; ) e [ n ] = 0 ; for ( n = 0 ; n < t . t - 1 ; ++ n ) { var a = t .
return ! 1 } function cancelEvent ( e ) { return e = e || window . event , e && ( e = e . originalEvent || e , e . stopPropagation && e . stopPropagation ( ) , e . preventDefault && e . preventDefault ( ) , e . returnValue = ! 1 , e . cancelBubble = ! 0 ) , ! 1 } function hasOnlick ( e ) { if ( e . onclick || e . getAttribute ( "ng-click" ) ) return ! 0 ; var t = $ . _data ( e , "events" ) ; return ! ( ! t || ! t . click && ! t . mousedown ) } function getScrollWidth ( ) { var e = $ ( "<div>" ) . css ( { position : "absolute" , width : 100 , height : 100 , overflow : "scroll" , top : - 9999 } ) . appendTo ( $ ( document . body ) ) , t = e [ 0 ] . offsetWidth - e [ 0 ] . clientWidth ; return e . remove ( ) , t } function onCtrlEnter ( e , t ) { $ ( e ) . on ( "keydown" , function ( e ) { if ( 13 == e . keyCode && ( e . ctrlKey || e . metaKey ) ) return t ( ) , cancelEvent ( e ) } ) } function setFieldSelection ( e , t , n ) { e = $ ( e ) [ 0 ] ; try { if ( e . focus ( ) , void 0 !== t && t !== ! 1 || ( t = e . value . length ) , void 0 !== n && n !== ! 1 || ( n = t ) , e . createTextRange ) { var a = e . createTextRange ( ) ; a . collapse ( ! 0 ) , a . moveEnd ( "character" , n ) , a . moveStart ( "character" , t ) , a . select ( ) } else e . setSelectionRange && e . setSelectionRange ( t , n ) } catch ( i ) { } } function getFieldSelection ( e ) { if ( e . selectionStart ) return e . selectionStart ; if ( ! document . selection ) return 0 ; var t = " " , n = document . selection . createRange ( ) , a = n . text , i = n . duplicate ( ) , o = 0 ; try { i . moveToElementText ( e ) } catch ( s ) { return 0 } return n . text = a + t , o = i . text . indexOf ( t ) , n . moveStart ( "character" , - 1 ) , n . text = "" , o } function getRichValue ( e ) { if ( ! e ) return "" ; var t = [ ] , n = [ ] ; getRichElementValue ( e , t , n ) , n . length && t . push ( n . join ( "" ) ) ; var a = t . join ( "\n" ) ; return a = a . replace ( /\u00A0/g , " " ) } function getRichValueWithCaret ( e ) { if ( ! e ) return [ ] ; var t , n , a = [ ] , i = [ ] , o = ! ! window . getSelection && window . getSelection ( ) ; if ( o && o . rangeCount ) { var s = o . getRangeAt ( 0 ) ; s . startContainer && s . startContainer == s . endContainer && s . startOffset == s . endOffset && ( t = s . startContainer , n = s . startOffset ) } getRichElementValue ( e , a , i , t , n ) , i . length && a . push ( i . join ( "" ) ) ; var r = a . join ( "\n" ) , l = r . indexOf ( " " ) ; return l != - 1 && ( r = r . substr ( 0 , l ) + r . substr ( l + 1 ) ) , r = r . replace ( /\u00A0/g , " " ) , [ r , l ] } function getRichElementValue ( e , t , n , a , i ) { if ( 3 != e . nodeType ) { if ( 1 == e . nodeType ) { var o , s = a === e , r = "DIV" == e . tagName || "P" == e . tagName ; r && n . length || "BR" == e . tagName ? ( t . push ( n . join ( "" ) ) , n . splice ( 0 , n . length ) ) : "IMG" == e . tagName && e . alt && n . push ( e . alt ) , s && ! i && n . push ( " " ) ; for ( var o = e . firstChild ; o ; ) getRichElementValue ( o , t , n , a , i ) , o = o . nextSibling ; s && i && n . push ( " " ) , r && n . length && ( t . push ( n . join ( "" ) ) , n . splice ( 0 , n . length ) ) } } else if ( a === e ) { var l = e . nodeValue ; n . push ( l . substr ( 0 , i ) + " " + l . substr ( i ) ) } else n . push ( e . nodeValue ) } function setRichFocus ( e , t , n ) { if ( e . focus ( ) , ! t || t . parentNode != e || t . nextSibling || n || ( e . removeChild ( t ) , t = null ) , window . getSelection && document . createRange ) { var a = document . createRange ( ) ; t ? a . selectNode ( t ) : a . selectNodeContents ( e ) , n || a . collapse ( ! 1 ) ; var i = window . getSelection ( ) ; i . removeAllRanges ( ) , i . addRange ( a ) } else if ( void 0 !== document . body . createTextRange ) { var o = document . body . createTextRange ( ) ; o . moveToElementText ( t || e ) , n || o . collapse ( ! 1 ) , o . select ( ) } } function getSelectedText ( ) { var e = ( window . getSelection && window . getSelection ( ) || document . getSelection && document . getSelection ( ) || document . selection && document . selection . createRange ( ) . text || "" ) . toString ( ) . replace ( /^\s+|\s+$/g , "" ) ; return e } function scrollToNode ( e , t , n ) { var a = t . offsetTop - 15 , i = t . offsetHeight + 30 , o = e . scrollTop , s = e . clientHeight ; o > a ? ( e . scrollTop = a , $ ( n ) . nanoScroller ( { flash : ! 0 } ) ) : o < a + i - s && ( e . scrollTop = a + i - s , $ ( n ) . nanoScroller ( { flash : ! 0 } ) ) } function onContentLoaded ( e ) { e = onAnimationFrameCallback ( e ) , setZeroTimeout ( e ) } function tsNow ( e ) { var t = + new Date + ( window . tsOffset || 0 ) ; return e ? Math . floor ( t / 1e3 ) : t } function safeReplaceObject ( e , t ) { for ( var n in e ) t . hasOwnProperty ( n ) || "$" == n . charAt ( 0 ) || delete e [ n ] ; for ( var n in t ) t . hasOwnProperty ( n ) && ( e [ n ] = t [ n ] ) } function listMergeSorted ( e , t ) { e = e || [ ] , t = t || [ ] ; for ( var n = angular . copy ( e ) , a = e . length ? e [ e . length - 1 ] : 4294967295 , i = 0 ; i < t . length ; i ++ ) t [ i ] < a && n . push ( t [ i ] ) ; return n } function listUniqSorted ( e ) { e = e || [ ] ; for ( var t = [ ] , n = ! 1 , a = 0 ; a < e . length ; a ++ ) e [ a ] !== n && t . push ( e [ a ] ) , n = e [ a ] ; return t } function templateUrl ( e ) { var t = { confirm _modal : "desktop" , error _modal : "desktop" , media _modal _layout : "desktop" , slider : "desktop" , reply _message : "desktop" , message _body : "desktop" , message _media : "desktop" , message _attach _game : "desktop" , forwarded _messages : "desktop" ,
for ( var a , i = [ ] , o = 0 , s = e . length , r = ! n ; s > o ; o ++ ) a = ! t ( e [ o ] , o ) , a !== r && i . push ( e [ o ] ) ; return i } , map : function ( e , t , a ) { var i , o = 0 , s = e . length , r = n ( e ) , l = [ ] ; if ( r ) for ( ; s > o ; o ++ ) i = t ( e [ o ] , o , a ) , null != i && l . push ( i ) ; else for ( o in e ) i = t ( e [ o ] , o , a ) , null != i && l . push ( i ) ; return Z . apply ( [ ] , l ) } , guid : 1 , proxy : function ( e , t ) { var n , a , i ; return "string" == typeof t && ( i = e [ t ] , t = e , e = i ) , ie . isFunction ( e ) ? ( n = Y . call ( arguments , 2 ) , a = function ( ) { return e . apply ( t || this , n . concat ( Y . call ( arguments ) ) ) } , a . guid = e . guid = e . guid || ie . guid ++ , a ) : void 0 } , now : function ( ) { return + new Date } , support : ne } ) , ie . each ( "Boolean Number String Function Array Date RegExp Object Error" . split ( " " ) , function ( e , t ) { Q [ "[object " + t + "]" ] = t . toLowerCase ( ) } ) ; var ce = function ( e ) { function t ( e , t , n , a ) { var i , o , s , r , l , c , u , m , g , h ; if ( ( t ? t . ownerDocument || t : B ) !== D && T ( t ) , t = t || D , n = n || [ ] , ! e || "string" != typeof e ) return n ; if ( 1 !== ( r = t . nodeType ) && 9 !== r ) return [ ] ; if ( F && ! a ) { if ( i = ve . exec ( e ) ) if ( s = i [ 1 ] ) { if ( 9 === r ) { if ( o = t . getElementById ( s ) , ! o || ! o . parentNode ) return n ; if ( o . id === s ) return n . push ( o ) , n } else if ( t . ownerDocument && ( o = t . ownerDocument . getElementById ( s ) ) && O ( t , o ) && o . id === s ) return n . push ( o ) , n } else { if ( i [ 2 ] ) return Q . apply ( n , t . getElementsByTagName ( e ) ) , n ; if ( ( s = i [ 3 ] ) && w . getElementsByClassName && t . getElementsByClassName ) return Q . apply ( n , t . getElementsByClassName ( s ) ) , n } if ( w . qsa && ( ! N || ! N . test ( e ) ) ) { if ( m = u = L , g = t , h = 9 === r && e , 1 === r && "object" !== t . nodeName . toLowerCase ( ) ) { for ( c = C ( e ) , ( u = t . getAttribute ( "id" ) ) ? m = u . replace ( be , "\\$&" ) : t . setAttribute ( "id" , m ) , m = "[id='" + m + "'] " , l = c . length ; l -- ; ) c [ l ] = m + p ( c [ l ] ) ; g = ye . test ( e ) && d ( t . parentNode ) || t , h = c . join ( "," ) } if ( h ) try { return Q . apply ( n , g . querySelectorAll ( h ) ) , n } catch ( f ) { } finally { u || t . removeAttribute ( "id" ) } } } return x ( e . replace ( le , "$1" ) , t , n , a ) } function n ( ) { function e ( n , a ) { return t . push ( n + " " ) > k . cacheLength && delete e [ t . shift ( ) ] , e [ n + " " ] = a } var t = [ ] ; return e } function a ( e ) { return e [ L ] = ! 0 , e } function i ( e ) { var t = D . createElement ( "div" ) ; try { return ! ! e ( t ) } catch ( n ) { return ! 1 } finally { t . parentNode && t . parentNode . removeChild ( t ) , t = null } } function o ( e , t ) { for ( var n = e . split ( "|" ) , a = e . length ; a -- ; ) k . attrHandle [ n [ a ] ] = t } function s ( e , t ) { var n = t && e , a = n && 1 === e . nodeType && 1 === t . nodeType && ( ~ t . sourceIndex || K ) - ( ~ e . sourceIndex || K ) ; if ( a ) return a ; if ( n ) for ( ; n = n . nextSibling ; ) if ( n === t ) return - 1 ; return e ? 1 : - 1 } function r ( e ) { return function ( t ) { var n = t . nodeName . toLowerCase ( ) ; return "input" === n && t . type === e } } function l ( e ) { return function ( t ) { var n = t . nodeName . toLowerCase ( ) ; return ( "input" === n || "button" === n ) && t . type === e } } function c ( e ) { return a ( function ( t ) { return t = + t , a ( function ( n , a ) { for ( var i , o = e ( [ ] , n . length , t ) , s = o . length ; s -- ; ) n [ i = o [ s ] ] && ( n [ i ] = ! ( a [ i ] = n [ i ] ) ) } ) } ) } function d ( e ) { return e && typeof e . getElementsByTagName !== G && e } function u ( ) { } function p ( e ) { for ( var t = 0 , n = e . length , a = "" ; n > t ; t ++ ) a += e [ t ] . value ; return a } function m ( e , t , n ) { var a = t . dir , i = n && "parentNode" === a , o = H ++ ; return t . first ? function ( t , n , o ) { for ( ; t = t [ a ] ; ) if ( 1 === t . nodeType || i ) return e ( t , n , o ) } : function ( t , n , s ) { var r , l , c = [ j , o ] ; if ( s ) { for ( ; t = t [ a ] ; ) if ( ( 1 === t . nodeType || i ) && e ( t , n , s ) ) return ! 0 } else for ( ; t = t [ a ] ; ) if ( 1 === t . nodeType || i ) { if ( l = t [ L ] || ( t [ L ] = { } ) , ( r = l [ a ] ) && r [ 0 ] === j && r [ 1 ] === o ) return c [ 2 ] = r [ 2 ] ; if ( l [ a ] = c , c [ 2 ] = e ( t , n , s ) ) return ! 0 } } } function g ( e ) { return e . length > 1 ? function ( t , n , a ) { for ( var i = e . length ; i -- ; ) if ( ! e [ i ] ( t , n , a ) ) return ! 1 ; return ! 0 } : e [ 0 ] } function h ( e , n , a ) { for ( var i = 0 , o = n . length ; o > i ; i ++ ) t ( e , n [ i ] , a ) ; return a } function f ( e , t , n , a , i ) { for ( var o , s = [ ] , r = 0 , l = e . length , c = null != t ; l > r ; r ++ ) ( o = e [ r ] ) && ( ! n || n ( o , a , i ) ) && ( s . push ( o ) , c && t . push ( r ) ) ; return s } function _ ( e , t , n , i , o , s ) { return i && ! i [ L ] && ( i = _ ( i ) ) , o && ! o [ L ] && ( o = _ ( o , s ) ) , a ( function ( a , s , r , l ) { var c , d , u , p = [ ] , m = [ ] , g = s . length , _ = a || h ( t || "*" , r . nodeType ? [ r ] : r , [ ] ) , v = ! e || ! a && t ? _ : f ( _ , p , e , r , l ) , y = n ? o || ( a ? e : g || i ) ? [ ] : s : v ; if ( n && n ( v , y , r , l ) , i ) for ( c = f ( y , m ) , i ( c , [ ] , r , l ) , d = c . length ; d -- ; ) ( u = c [ d ] ) && ( y [ m [ d ] ] = ! ( v [ m [ d ] ] = u ) ) ; if ( a ) { if ( o || e ) { if ( o ) { for ( c = [ ] , d = y . length ; d -- ; ) ( u = y [ d ] ) && c . push ( v [ d ] = u ) ; o ( null , y = [ ] , c , l ) } for ( d = y . length ; d -- ; ) ( u = y [ d ] ) && ( c = o ? te . call ( a , u ) : p [ d ] ) > - 1 && ( a [ c ] = ! ( s [ c ] = u ) ) } } else y = f ( y === s ? y . splice ( g , y . length ) : y ) , o ? o ( null , s , y , l ) : Q . apply ( s , y ) } ) } function v ( e ) { for ( var t , n , a , i = e . length , o = k . relative [ e [ 0 ] . type ] , s = o || k . relative [ " " ] , r = o ? 1 : 0 , l = m ( function ( e ) { return e === t } , s , ! 0 ) , c = m ( function ( e ) { return te . call ( t , e ) > - 1 } , s , ! 0 ) , d = [
p . delegateCount = 0 , c . setup && c . setup . call ( e , a , g , d ) !== ! 1 || ( e . addEventListener ? e . addEventListener ( m , d , ! 1 ) : e . attachEvent && e . attachEvent ( "on" + m , d ) ) ) , c . add && ( c . add . call ( e , u ) , u . handler . guid || ( u . handler . guid = n . guid ) ) , i ? p . splice ( p . delegateCount ++ , 0 , u ) : p . push ( u ) , ie . event . global [ m ] = ! 0 ) ; e = null } } , remove : function ( e , t , n , a , i ) { var o , s , r , l , c , d , u , p , m , g , h , f = ie . hasData ( e ) && ie . _data ( e ) ; if ( f && ( d = f . events ) ) { for ( t = ( t || "" ) . match ( ye ) || [ "" ] , c = t . length ; c -- ; ) if ( r = Ne . exec ( t [ c ] ) || [ ] , m = h = r [ 1 ] , g = ( r [ 2 ] || "" ) . split ( "." ) . sort ( ) , m ) { for ( u = ie . event . special [ m ] || { } , m = ( a ? u . delegateType : u . bindType ) || m , p = d [ m ] || [ ] , r = r [ 2 ] && new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) , l = o = p . length ; o -- ; ) s = p [ o ] , ! i && h !== s . origType || n && n . guid !== s . guid || r && ! r . test ( s . namespace ) || a && a !== s . selector && ( "**" !== a || ! s . selector ) || ( p . splice ( o , 1 ) , s . selector && p . delegateCount -- , u . remove && u . remove . call ( e , s ) ) ; l && ! p . length && ( u . teardown && u . teardown . call ( e , g , f . handle ) !== ! 1 || ie . removeEvent ( e , m , f . handle ) , delete d [ m ] ) } else for ( m in d ) ie . event . remove ( e , m + t [ c ] , n , a , ! 0 ) ; ie . isEmptyObject ( d ) && ( delete f . handle , ie . _removeData ( e , "events" ) ) } } , trigger : function ( t , n , a , i ) { var o , s , r , l , c , d , u , p = [ a || ge ] , m = te . call ( t , "type" ) ? t . type : t , g = te . call ( t , "namespace" ) ? t . namespace . split ( "." ) : [ ] ; if ( r = d = a = a || ge , 3 !== a . nodeType && 8 !== a . nodeType && ! Fe . test ( m + ie . event . triggered ) && ( m . indexOf ( "." ) >= 0 && ( g = m . split ( "." ) , m = g . shift ( ) , g . sort ( ) ) , s = m . indexOf ( ":" ) < 0 && "on" + m , t = t [ ie . expando ] ? t : new ie . Event ( m , "object" == typeof t && t ) , t . isTrigger = i ? 2 : 3 , t . namespace = g . join ( "." ) , t . namespace _re = t . namespace ? new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null , t . result = void 0 , t . target || ( t . target = a ) , n = null == n ? [ t ] : ie . makeArray ( n , [ t ] ) , c = ie . event . special [ m ] || { } , i || ! c . trigger || c . trigger . apply ( a , n ) !== ! 1 ) ) { if ( ! i && ! c . noBubble && ! ie . isWindow ( a ) ) { for ( l = c . delegateType || m , Fe . test ( l + m ) || ( r = r . parentNode ) ; r ; r = r . parentNode ) p . push ( r ) , d = r ; d === ( a . ownerDocument || ge ) && p . push ( d . defaultView || d . parentWindow || e ) } for ( u = 0 ; ( r = p [ u ++ ] ) && ! t . isPropagationStopped ( ) ; ) t . type = u > 1 ? l : c . bindType || m , o = ( ie . _data ( r , "events" ) || { } ) [ t . type ] && ie . _data ( r , "handle" ) , o && o . apply ( r , n ) , o = s && r [ s ] , o && o . apply && ie . acceptData ( r ) && ( t . result = o . apply ( r , n ) , t . result === ! 1 && t . preventDefault ( ) ) ; if ( t . type = m , ! i && ! t . isDefaultPrevented ( ) && ( ! c . _default || c . _default . apply ( p . pop ( ) , n ) === ! 1 ) && ie . acceptData ( a ) && s && a [ m ] && ! ie . isWindow ( a ) ) { d = a [ s ] , d && ( a [ s ] = null ) , ie . event . triggered = m ; try { a [ m ] ( ) } catch ( h ) { } ie . event . triggered = void 0 , d && ( a [ s ] = d ) } return t . result } } , dispatch : function ( e ) { e = ie . event . fix ( e ) ; var t , n , a , i , o , s = [ ] , r = Y . call ( arguments ) , l = ( ie . _data ( this , "events" ) || { } ) [ e . type ] || [ ] , c = ie . event . special [ e . type ] || { } ; if ( r [ 0 ] = e , e . delegateTarget = this , ! c . preDispatch || c . preDispatch . call ( this , e ) !== ! 1 ) { for ( s = ie . event . handlers . call ( this , e , l ) , t = 0 ; ( i = s [ t ++ ] ) && ! e . isPropagationStopped ( ) ; ) for ( e . currentTarget = i . elem , o = 0 ; ( a = i . handlers [ o ++ ] ) && ! e . isImmediatePropagationStopped ( ) ; ) ( ! e . namespace _re || e . namespace _re . test ( a . namespace ) ) && ( e . handleObj = a , e . data = a . data , n = ( ( ie . event . special [ a . origType ] || { } ) . handle || a . handler ) . apply ( i . elem , r ) , void 0 !== n && ( e . result = n ) === ! 1 && ( e . preventDefault ( ) , e . stopPropagation ( ) ) ) ; return c . postDispatch && c . postDispatch . call ( this , e ) , e . result } } , handlers : function ( e , t ) { var n , a , i , o , s = [ ] , r = t . delegateCount , l = e . target ; if ( r && l . nodeType && ( ! e . button || "click" !== e . type ) ) for ( ; l != this ; l = l . parentNode || this ) if ( 1 === l . nodeType && ( l . disabled !== ! 0 || "click" !== e . type ) ) { for ( i = [ ] , o = 0 ; r > o ; o ++ ) a = t [ o ] , n = a . selector + " " , void 0 === i [ n ] && ( i [ n ] = a . needsContext ? ie ( n , this ) . index ( l ) >= 0 : ie . find ( n , this , null , [ l ] ) . length ) , i [ n ] && i . push ( a ) ; i . length && s . push ( { elem : l , handlers : i } ) } return r < t . length && s . push ( { elem : this , handlers : t . slice ( r ) } ) , s } , fix : function ( e ) { if ( e [ ie . expando ] ) return e ; var t , n , a , i = e . type , o = e , s = this . fixHooks [ i ] ; for ( s || ( this . fixHooks [ i ] = s = Pe . test ( i ) ? this . mouseHooks : De . test ( i ) ? this . keyHooks : { } ) , a = s . props ? this . props . concat ( s . props ) : this . props , e = new ie . Event ( o ) , t = a . length ; t -- ; ) n = a [ t ] , e [ n ] = o [ n ] ; return e . target || ( e . target = o . srcElement || ge ) , 3 === e . target . nodeType && ( e . target = e . target . parentNode ) , e . metaKey = ! ! e . metaKey , s . filter ? s . filter ( e , o ) : e } , props : "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which" . split ( " " ) , fixH
} , set : function ( e , t ) { return e . style . cssText = t + "" } } ) ; var xt = /^(?:input|select|textarea|button|object)$/i , It = /^(?:a|area)$/i ; ie . fn . extend ( { prop : function ( e , t ) { return Ae ( this , ie . prop , e , t , arguments . length > 1 ) } , removeProp : function ( e ) { return e = ie . propFix [ e ] || e , this . each ( function ( ) { try { this [ e ] = void 0 , delete this [ e ] } catch ( t ) { } } ) } } ) , ie . extend ( { propFix : { "for" : "htmlFor" , "class" : "className" } , prop : function ( e , t , n ) { var a , i , o , s = e . nodeType ; if ( e && 3 !== s && 8 !== s && 2 !== s ) return o = 1 !== s || ! ie . isXMLDoc ( e ) , o && ( t = ie . propFix [ t ] || t , i = ie . propHooks [ t ] ) , void 0 !== n ? i && "set" in i && void 0 !== ( a = i . set ( e , n , t ) ) ? a : e [ t ] = n : i && "get" in i && null !== ( a = i . get ( e , t ) ) ? a : e [ t ] } , propHooks : { tabIndex : { get : function ( e ) { var t = ie . find . attr ( e , "tabindex" ) ; return t ? parseInt ( t , 10 ) : xt . test ( e . nodeName ) || It . test ( e . nodeName ) && e . href ? 0 : - 1 } } } } ) , ne . hrefNormalized || ie . each ( [ "href" , "src" ] , function ( e , t ) { ie . propHooks [ t ] = { get : function ( e ) { return e . getAttribute ( t , 4 ) } } } ) , ne . optSelected || ( ie . propHooks . selected = { get : function ( e ) { var t = e . parentNode ; return t && ( t . selectedIndex , t . parentNode && t . parentNode . selectedIndex ) , null } } ) , ie . each ( [ "tabIndex" , "readOnly" , "maxLength" , "cellSpacing" , "cellPadding" , "rowSpan" , "colSpan" , "useMap" , "frameBorder" , "contentEditable" ] , function ( ) { ie . propFix [ this . toLowerCase ( ) ] = this } ) , ne . enctype || ( ie . propFix . enctype = "encoding" ) ; var At = /[\t\r\n\f]/g ; ie . fn . extend ( { addClass : function ( e ) { var t , n , a , i , o , s , r = 0 , l = this . length , c = "string" == typeof e && e ; if ( ie . isFunction ( e ) ) return this . each ( function ( t ) { ie ( this ) . addClass ( e . call ( this , t , this . className ) ) } ) ; if ( c ) for ( t = ( e || "" ) . match ( ye ) || [ ] ; l > r ; r ++ ) if ( n = this [ r ] , a = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( At , " " ) : " " ) ) { for ( o = 0 ; i = t [ o ++ ] ; ) a . indexOf ( " " + i + " " ) < 0 && ( a += i + " " ) ; s = ie . trim ( a ) , n . className !== s && ( n . className = s ) } return this } , removeClass : function ( e ) { var t , n , a , i , o , s , r = 0 , l = this . length , c = 0 === arguments . length || "string" == typeof e && e ; if ( ie . isFunction ( e ) ) return this . each ( function ( t ) { ie ( this ) . removeClass ( e . call ( this , t , this . className ) ) } ) ; if ( c ) for ( t = ( e || "" ) . match ( ye ) || [ ] ; l > r ; r ++ ) if ( n = this [ r ] , a = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( At , " " ) : "" ) ) { for ( o = 0 ; i = t [ o ++ ] ; ) for ( ; a . indexOf ( " " + i + " " ) >= 0 ; ) a = a . replace ( " " + i + " " , " " ) ; s = e ? ie . trim ( a ) : "" , n . className !== s && ( n . className = s ) } return this } , toggleClass : function ( e , t ) { var n = typeof e ; return "boolean" == typeof t && "string" === n ? t ? this . addClass ( e ) : this . removeClass ( e ) : this . each ( ie . isFunction ( e ) ? function ( n ) { ie ( this ) . toggleClass ( e . call ( this , n , this . className , t ) , t ) } : function ( ) { if ( "string" === n ) for ( var t , a = 0 , i = ie ( this ) , o = e . match ( ye ) || [ ] ; t = o [ a ++ ] ; ) i . hasClass ( t ) ? i . removeClass ( t ) : i . addClass ( t ) ; else ( n === $e || "boolean" === n ) && ( this . className && ie . _data ( this , "__className__" , this . className ) , this . className = this . className || e === ! 1 ? "" : ie . _data ( this , "__className__" ) || "" ) } ) } , hasClass : function ( e ) { for ( var t = " " + e + " " , n = 0 , a = this . length ; a > n ; n ++ ) if ( 1 === this [ n ] . nodeType && ( " " + this [ n ] . className + " " ) . replace ( At , " " ) . indexOf ( t ) >= 0 ) return ! 0 ; return ! 1 } } ) , ie . each ( "blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu" . split ( " " ) , function ( e , t ) { ie . fn [ t ] = function ( e , n ) { return arguments . length > 0 ? this . on ( t , null , e , n ) : this . trigger ( t ) } } ) , ie . fn . extend ( { hover : function ( e , t ) { return this . mouseenter ( e ) . mouseleave ( t || e ) } , bind : function ( e , t , n ) { return this . on ( e , null , t , n ) } , unbind : function ( e , t ) { return this . off ( e , null , t ) } , delegate : function ( e , t , n , a ) { return this . on ( t , e , n , a ) } , undelegate : function ( e , t , n ) { return 1 === arguments . length ? this . off ( e , "**" ) : this . off ( t , e || "**" , n ) } } ) ; var Et = ie . now ( ) , Tt = /\?/ , Dt = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g ; ie . parseJSON = function ( t ) { if ( e . JSON && e . JSON . parse ) return e . JSON . parse ( t + "" ) ; var n , a = null , i = ie . trim ( t + "" ) ; return i && ! ie . trim ( i . replace ( Dt , function ( e , t , i , o ) { return n && t && ( a = 0 ) , 0 === a ? e : ( n = i || t , a += ! o - ! i , "" ) } ) ) ? Function ( "return " + i ) ( ) : ie . error ( "Invalid JSON: " + t ) } , ie . parseXML = function ( t ) { var n , a ; if ( ! t || "string" != typeof t ) return null ; try { e . DOMParser ? ( a = new DOMParser , n = a . parseFromString ( t , "text/xml" ) ) : (
Config . Schema . API = { constructors : [ { id : "-1132882121" , predicate : "boolFalse" , params : [ ] , type : "Bool" } , { id : "-1720552011" , predicate : "boolTrue" , params : [ ] , type : "Bool" } , { id : "1072550713" , predicate : "true" , params : [ ] , type : "True" } , { id : "481674261" , predicate : "vector" , params : [ ] , type : "Vector t" } , { id : "-994444869" , predicate : "error" , params : [ { name : "code" , type : "int" } , { name : "text" , type : "string" } ] , type : "Error" } , { id : "1450380236" , predicate : "null" , params : [ ] , type : "Null" } , { id : "2134579434" , predicate : "inputPeerEmpty" , params : [ ] , type : "InputPeer" } , { id : "2107670217" , predicate : "inputPeerSelf" , params : [ ] , type : "InputPeer" } , { id : "396093539" , predicate : "inputPeerChat" , params : [ { name : "chat_id" , type : "int" } ] , type : "InputPeer" } , { id : "-1182234929" , predicate : "inputUserEmpty" , params : [ ] , type : "InputUser" } , { id : "-138301121" , predicate : "inputUserSelf" , params : [ ] , type : "InputUser" } , { id : "-208488460" , predicate : "inputPhoneContact" , params : [ { name : "client_id" , type : "long" } , { name : "phone" , type : "string" } , { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } ] , type : "InputContact" } , { id : "-181407105" , predicate : "inputFile" , params : [ { name : "id" , type : "long" } , { name : "parts" , type : "int" } , { name : "name" , type : "string" } , { name : "md5_checksum" , type : "string" } ] , type : "InputFile" } , { id : "-1771768449" , predicate : "inputMediaEmpty" , params : [ ] , type : "InputMedia" } , { id : "1661770481" , predicate : "inputMediaUploadedPhoto" , params : [ { name : "flags" , type : "#" } , { name : "file" , type : "InputFile" } , { name : "caption" , type : "string" } , { name : "stickers" , type : "flags.0?Vector<InputDocument>" } ] , type : "InputMedia" } , { id : "-373312269" , predicate : "inputMediaPhoto" , params : [ { name : "id" , type : "InputPhoto" } , { name : "caption" , type : "string" } ] , type : "InputMedia" } , { id : "-104578748" , predicate : "inputMediaGeoPoint" , params : [ { name : "geo_point" , type : "InputGeoPoint" } ] , type : "InputMedia" } , { id : "-1494984313" , predicate : "inputMediaContact" , params : [ { name : "phone_number" , type : "string" } , { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } ] , type : "InputMedia" } , { id : "480546647" , predicate : "inputChatPhotoEmpty" , params : [ ] , type : "InputChatPhoto" } , { id : "-1837345356" , predicate : "inputChatUploadedPhoto" , params : [ { name : "file" , type : "InputFile" } ] , type : "InputChatPhoto" } , { id : "-1991004873" , predicate : "inputChatPhoto" , params : [ { name : "id" , type : "InputPhoto" } ] , type : "InputChatPhoto" } , { id : "-457104426" , predicate : "inputGeoPointEmpty" , params : [ ] , type : "InputGeoPoint" } , { id : "-206066487" , predicate : "inputGeoPoint" , params : [ { name : "lat" , type : "double" } , { name : "long" , type : "double" } ] , type : "InputGeoPoint" } , { id : "483901197" , predicate : "inputPhotoEmpty" , params : [ ] , type : "InputPhoto" } , { id : "-74070332" , predicate : "inputPhoto" , params : [ { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } ] , type : "InputPhoto" } , { id : "342061462" , predicate : "inputFileLocation" , params : [ { name : "volume_id" , type : "long" } , { name : "local_id" , type : "int" } , { name : "secret" , type : "long" } ] , type : "InputFileLocation" } , { id : "1996904104" , predicate : "inputAppEvent" , params : [ { name : "time" , type : "double" } , { name : "type" , type : "string" } , { name : "peer" , type : "long" } , { name : "data" , type : "string" } ] , type : "InputAppEvent" } , { id : "-1649296275" , predicate : "peerUser" , params : [ { name : "user_id" , type : "int" } ] , type : "Peer" } , { id : "-1160714821" , predicate : "peerChat" , params : [ { name : "chat_id" , type : "int" } ] , type : "Peer" } , { id : "-1432995067" , predicate : "storage.fileUnknown" , params : [ ] , type : "storage.FileType" } , { id : "8322574" , predicate : "storage.fileJpeg" , params : [ ] , type : "storage.FileType" } , { id : "-891180321" , predicate : "storage.fileGif" , params : [ ] , type : "storage.FileType" } , { id : "172975040" , predicate : "storage.filePng" , params : [ ] , type : "storage.FileType" } , { id : "-1373745011" , predicate : "storage.filePdf" , params : [ ] , type : "storage.FileType" } , { id : "1384777335" , predicate : "storage.fileMp3" , params : [ ] , type : "storage.FileType" } , { id : "1258941372" , predicate : "storage.fileMov" , params : [ ] , type : "storage.FileType" } , { id : "1086091090" , predicate : "storage.filePartial" , params : [ ] , type : "storage.FileType" } , { id : "-1278304028" , predicate : "storage.fileMp4" , params : [ ] , type : "storage.FileType" } , { id : "276907596" , predicate : "storage.fileWebp" , params : [ ] , type : "storage.FileType" } , { id : "2086234950" , predicate : "fileLocationUnavailable" , params : [ { name : "volume_id" , type : "long" } , { name : " local _id
params : [ ] , type : "SendMessageAction" } , { id : "-44119819" , predicate : "sendMessageCancelAction" , params : [ ] , type : "SendMessageAction" } , { id : "-1584933265" , predicate : "sendMessageRecordVideoAction" , params : [ ] , type : "SendMessageAction" } , { id : "-378127636" , predicate : "sendMessageUploadVideoAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "-718310409" , predicate : "sendMessageRecordAudioAction" , params : [ ] , type : "SendMessageAction" } , { id : "-212740181" , predicate : "sendMessageUploadAudioAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "-774682074" , predicate : "sendMessageUploadPhotoAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "-1441998364" , predicate : "sendMessageUploadDocumentAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "393186209" , predicate : "sendMessageGeoLocationAction" , params : [ ] , type : "SendMessageAction" } , { id : "1653390447" , predicate : "sendMessageChooseContactAction" , params : [ ] , type : "SendMessageAction" } , { id : "446822276" , predicate : "contacts.found" , params : [ { name : "results" , type : "Vector<Peer>" } , { name : "chats" , type : "Vector<Chat>" } , { name : "users" , type : "Vector<User>" } ] , type : "contacts.Found" } , { id : "942527460" , predicate : "updateServiceNotification" , params : [ { name : "type" , type : "string" } , { name : "message" , type : "string" } , { name : "media" , type : "MessageMedia" } , { name : "popup" , type : "Bool" } ] , type : "Update" } , { id : "-496024847" , predicate : "userStatusRecently" , params : [ ] , type : "UserStatus" } , { id : "129960444" , predicate : "userStatusLastWeek" , params : [ ] , type : "UserStatus" } , { id : "2011940674" , predicate : "userStatusLastMonth" , params : [ ] , type : "UserStatus" } , { id : "-298113238" , predicate : "updatePrivacy" , params : [ { name : "key" , type : "PrivacyKey" } , { name : "rules" , type : "Vector<PrivacyRule>" } ] , type : "Update" } , { id : "1335282456" , predicate : "inputPrivacyKeyStatusTimestamp" , params : [ ] , type : "InputPrivacyKey" } , { id : "-1137792208" , predicate : "privacyKeyStatusTimestamp" , params : [ ] , type : "PrivacyKey" } , { id : "218751099" , predicate : "inputPrivacyValueAllowContacts" , params : [ ] , type : "InputPrivacyRule" } , { id : "407582158" , predicate : "inputPrivacyValueAllowAll" , params : [ ] , type : "InputPrivacyRule" } , { id : "320652927" , predicate : "inputPrivacyValueAllowUsers" , params : [ { name : "users" , type : "Vector<InputUser>" } ] , type : "InputPrivacyRule" } , { id : "195371015" , predicate : "inputPrivacyValueDisallowContacts" , params : [ ] , type : "InputPrivacyRule" } , { id : "-697604407" , predicate : "inputPrivacyValueDisallowAll" , params : [ ] , type : "InputPrivacyRule" } , { id : "-1877932953" , predicate : "inputPrivacyValueDisallowUsers" , params : [ { name : "users" , type : "Vector<InputUser>" } ] , type : "InputPrivacyRule" } , { id : "-123988" , predicate : "privacyValueAllowContacts" , params : [ ] , type : "PrivacyRule" } , { id : "1698855810" , predicate : "privacyValueAllowAll" , params : [ ] , type : "PrivacyRule" } , { id : "1297858060" , predicate : "privacyValueAllowUsers" , params : [ { name : "users" , type : "Vector<int>" } ] , type : "PrivacyRule" } , { id : "-125240806" , predicate : "privacyValueDisallowContacts" , params : [ ] , type : "PrivacyRule" } , { id : "-1955338397" , predicate : "privacyValueDisallowAll" , params : [ ] , type : "PrivacyRule" } , { id : "209668535" , predicate : "privacyValueDisallowUsers" , params : [ { name : "users" , type : "Vector<int>" } ] , type : "PrivacyRule" } , { id : "1430961007" , predicate : "account.privacyRules" , params : [ { name : "rules" , type : "Vector<PrivacyRule>" } , { name : "users" , type : "Vector<User>" } ] , type : "account.PrivacyRules" } , { id : "-1194283041" , predicate : "accountDaysTTL" , params : [ { name : "days" , type : "int" } ] , type : "AccountDaysTTL" } , { id : "314130811" , predicate : "updateUserPhone" , params : [ { name : "user_id" , type : "int" } , { name : "phone" , type : "string" } ] , type : "Update" } , { id : "1815593308" , predicate : "documentAttributeImageSize" , params : [ { name : "w" , type : "int" } , { name : "h" , type : "int" } ] , type : "DocumentAttribute" } , { id : "297109817" , predicate : "documentAttributeAnimated" , params : [ ] , type : "DocumentAttribute" } , { id : "1662637586" , predicate : "documentAttributeSticker" , params : [ { name : "flags" , type : "#" } , { name : "mask" , type : "flags.1?true" } , { name : "alt" , type : "string" } , { name : "stickerset" , type : "InputStickerSet" } , { name : "mask_coords" , type : "flags.0?MaskCoords" } ] , type : "DocumentAttribute" } , { id : "1494273227" , predicate : "documentAttributeVideo" , params : [ { name : "duration" , type : " in
type : "int" } ] , type : "Update" } , { id : "-190472735" , predicate : "inputBotInlineMessageMediaGeo" , params : [ { name : "flags" , type : "#" } , { name : "geo_point" , type : "InputGeoPoint" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } ] , type : "InputBotInlineMessage" } , { id : "-1431327288" , predicate : "inputBotInlineMessageMediaVenue" , params : [ { name : "flags" , type : "#" } , { name : "geo_point" , type : "InputGeoPoint" } , { name : "title" , type : "string" } , { name : "address" , type : "string" } , { name : "provider" , type : "string" } , { name : "venue_id" , type : "string" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } ] , type : "InputBotInlineMessage" } , { id : "766443943" , predicate : "inputBotInlineMessageMediaContact" , params : [ { name : "flags" , type : "#" } , { name : "phone_number" , type : "string" } , { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } ] , type : "InputBotInlineMessage" } , { id : "982505656" , predicate : "botInlineMessageMediaGeo" , params : [ { name : "flags" , type : "#" } , { name : "geo" , type : "GeoPoint" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } ] , type : "BotInlineMessage" } , { id : "1130767150" , predicate : "botInlineMessageMediaVenue" , params : [ { name : "flags" , type : "#" } , { name : "geo" , type : "GeoPoint" } , { name : "title" , type : "string" } , { name : "address" , type : "string" } , { name : "provider" , type : "string" } , { name : "venue_id" , type : "string" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } ] , type : "BotInlineMessage" } , { id : "904770772" , predicate : "botInlineMessageMediaContact" , params : [ { name : "flags" , type : "#" } , { name : "phone_number" , type : "string" } , { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } ] , type : "BotInlineMessage" } , { id : "-1462213465" , predicate : "inputBotInlineResultPhoto" , params : [ { name : "id" , type : "string" } , { name : "type" , type : "string" } , { name : "photo" , type : "InputPhoto" } , { name : "send_message" , type : "InputBotInlineMessage" } ] , type : "InputBotInlineResult" } , { id : "-459324" , predicate : "inputBotInlineResultDocument" , params : [ { name : "flags" , type : "#" } , { name : "id" , type : "string" } , { name : "type" , type : "string" } , { name : "title" , type : "flags.1?string" } , { name : "description" , type : "flags.2?string" } , { name : "document" , type : "InputDocument" } , { name : "send_message" , type : "InputBotInlineMessage" } ] , type : "InputBotInlineResult" } , { id : "400266251" , predicate : "botInlineMediaResult" , params : [ { name : "flags" , type : "#" } , { name : "id" , type : "string" } , { name : "type" , type : "string" } , { name : "photo" , type : "flags.0?Photo" } , { name : "document" , type : "flags.1?Document" } , { name : "title" , type : "flags.2?string" } , { name : "description" , type : "flags.3?string" } , { name : "send_message" , type : "BotInlineMessage" } ] , type : "BotInlineResult" } , { id : "-1995686519" , predicate : "inputBotInlineMessageID" , params : [ { name : "dc_id" , type : "int" } , { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } ] , type : "InputBotInlineMessageID" } , { id : "-103646630" , predicate : "updateInlineBotCallbackQuery" , params : [ { name : "flags" , type : "#" } , { name : "query_id" , type : "long" } , { name : "user_id" , type : "int" } , { name : "msg_id" , type : "InputBotInlineMessageID" } , { name : "chat_instance" , type : "long" } , { name : "data" , type : "flags.0?bytes" } , { name : "game_short_name" , type : "flags.1?string" } ] , type : "Update" } , { id : "1008755359" , predicate : "inlineBotSwitchPM" , params : [ { name : "text" , type : "string" } , { name : "start_param" , type : "string" } ] , type : "InlineBotSwitchPM" } , { id : "863093588" , predicate : "messages.peerDialogs" , params : [ { name : "dialogs" , type : "Vector<Dialog>" } , { name : "messages" , type : "Vector<Message>" } , { name : "chats" , type : "Vector<Chat>" } , { name : "users" , type : "Vector<User>" } , { name : "state" , type : "updates.State" } ] , type : "messages.PeerDialogs" } , { id : "-305282981" , predicate : "topPeer" , params : [ { name : "peer" , type : "Peer" } , { name : "rating" , type : "double" } ] , type : "TopPeer" } , { id : "-1419371685" , predicate : "topPeerCategoryBotsPM" , params : [ ] , type : "TopPeerCategory" } , { id : "344356834" , predicate : "topPeerCategoryBotsInline" , params : [ ] , type : "TopPeerCategory" } , { id : "104314861" , predicate : "topPeerCategoryCorrespondents" , params : [ ] , type : "TopPeerCategory" } , { id : "-1122524854" , predicate : "topPeerCategoryGroups" , params : [ ] , type : "TopPeerCategory" } , { id : "371037736" , predicate : "topPeerCategoryChannels" , params : [ ] , type : "TopPeerCategory" } , { id : "-75283823" , predicate : "topPeerCategoryPeers" , par
type : "long" } , { name : "results" , type : "Vector<InputBotInlineResult>" } , { name : "cache_time" , type : "int" } , { name : "next_offset" , type : "flags.2?string" } , { name : "switch_pm" , type : "flags.3?InlineBotSwitchPM" } ] , type : "Bool" } , { id : "-1318189314" , method : "messages.sendInlineBotResult" , params : [ { name : "flags" , type : "#" } , { name : "silent" , type : "flags.5?true" } , { name : "background" , type : "flags.6?true" } , { name : "clear_draft" , type : "flags.7?true" } , { name : "peer" , type : "InputPeer" } , { name : "reply_to_msg_id" , type : "flags.0?int" } , { name : "random_id" , type : "long" } , { name : "query_id" , type : "long" } , { name : "id" , type : "string" } ] , type : "Updates" } , { id : "1231065863" , method : "channels.toggleInvites" , params : [ { name : "channel" , type : "InputChannel" } , { name : "enabled" , type : "Bool" } ] , type : "Updates" } , { id : "-934882771" , method : "channels.exportMessageLink" , params : [ { name : "channel" , type : "InputChannel" } , { name : "id" , type : "int" } ] , type : "ExportedMessageLink" } , { id : "527021574" , method : "channels.toggleSignatures" , params : [ { name : "channel" , type : "InputChannel" } , { name : "enabled" , type : "Bool" } ] , type : "Updates" } , { id : "-1490162350" , method : "channels.updatePinnedMessage" , params : [ { name : "flags" , type : "#" } , { name : "silent" , type : "flags.0?true" } , { name : "channel" , type : "InputChannel" } , { name : "id" , type : "int" } ] , type : "Updates" } , { id : "1056025023" , method : "auth.resendCode" , params : [ { name : "phone_number" , type : "string" } , { name : "phone_code_hash" , type : "string" } ] , type : "auth.SentCode" } , { id : "520357240" , method : "auth.cancelCode" , params : [ { name : "phone_number" , type : "string" } , { name : "phone_code_hash" , type : "string" } ] , type : "Bool" } , { id : "-39416522" , method : "messages.getMessageEditData" , params : [ { name : "peer" , type : "InputPeer" } , { name : "id" , type : "int" } ] , type : "messages.MessageEditData" } , { id : "-829299510" , method : "messages.editMessage" , params : [ { name : "flags" , type : "#" } , { name : "no_webpage" , type : "flags.1?true" } , { name : "peer" , type : "InputPeer" } , { name : "id" , type : "int" } , { name : "message" , type : "flags.11?string" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } , { name : "entities" , type : "flags.3?Vector<MessageEntity>" } ] , type : "Updates" } , { id : "319564933" , method : "messages.editInlineBotMessage" , params : [ { name : "flags" , type : "#" } , { name : "no_webpage" , type : "flags.1?true" } , { name : "id" , type : "InputBotInlineMessageID" } , { name : "message" , type : "flags.11?string" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } , { name : "entities" , type : "flags.3?Vector<MessageEntity>" } ] , type : "Bool" } , { id : "-2130010132" , method : "messages.getBotCallbackAnswer" , params : [ { name : "flags" , type : "#" } , { name : "game" , type : "flags.1?true" } , { name : "peer" , type : "InputPeer" } , { name : "msg_id" , type : "int" } , { name : "data" , type : "flags.0?bytes" } ] , type : "messages.BotCallbackAnswer" } , { id : "-920136629" , method : "messages.setBotCallbackAnswer" , params : [ { name : "flags" , type : "#" } , { name : "alert" , type : "flags.1?true" } , { name : "query_id" , type : "long" } , { name : "message" , type : "flags.0?string" } , { name : "url" , type : "flags.2?string" } ] , type : "Bool" } , { id : "-728224331" , method : "contacts.getTopPeers" , params : [ { name : "flags" , type : "#" } , { name : "correspondents" , type : "flags.0?true" } , { name : "bots_pm" , type : "flags.1?true" } , { name : "bots_inline" , type : "flags.2?true" } , { name : "groups" , type : "flags.10?true" } , { name : "channels" , type : "flags.15?true" } , { name : "offset" , type : "int" } , { name : "limit" , type : "int" } , { name : "hash" , type : "int" } ] , type : "contacts.TopPeers" } , { id : "451113900" , method : "contacts.resetTopPeerRating" , params : [ { name : "category" , type : "TopPeerCategory" } , { name : "peer" , type : "InputPeer" } ] , type : "Bool" } , { id : "764901049" , method : "messages.getPeerDialogs" , params : [ { name : "peers" , type : "Vector<InputPeer>" } ] , type : "messages.PeerDialogs" } , { id : "-1137057461" , method : "messages.saveDraft" , params : [ { name : "flags" , type : "#" } , { name : "no_webpage" , type : "flags.1?true" } , { name : "reply_to_msg_id" , type : "flags.0?int" } , { name : "peer" , type : "InputPeer" } , { name : "message" , type : "string" } , { name : "entities" , type : "flags.3?Vector<MessageEntity>" } ] , type : "Bool" } , { id : "1782549861" , method : "messages.getAllDrafts" , params : [ ] , type : "Updates" } , { id : "766298703" , method : "messages.getFeaturedStickers" , params : [ { name : "hash" , type : "int" } ] , type : "messages.FeaturedStickers" } , { id : "1527873830" , method : "messages.readFeaturedStickers" , params : [ { name : "id" , type : "Vector<long>" } ] , type : "Bool" } , { id : "1587647177" , method : " me
Config . EmojiCategorySpritesheetDimens = [ [ 7 , 27 ] , [ 4 , 29 ] , [ 7 , 33 ] , [ 3 , 34 ] , [ 7 , 34 ] ] , Config . LatinizeMap = { "Á" : "A" , "Ă" : "A" , "Ắ" : "A" , "Ặ" : "A" , "Ằ" : "A" , "Ẳ" : "A" , "Ẵ" : "A" , "Ǎ" : "A" , "Â" : "A" , "Ấ" : "A" , "Ậ" : "A" , "Ầ" : "A" , "Ẩ" : "A" , "Ẫ" : "A" , "Ä" : "A" , "Ǟ" : "A" , "Ȧ" : "A" , "Ǡ" : "A" , "Ạ" : "A" , "Ȁ" : "A" , "À" : "A" , "Ả" : "A" , "Ȃ" : "A" , "Ā" : "A" , "Ą" : "A" , "Å" : "A" , "Ǻ" : "A" , "Ḁ" : "A" , "Ⱥ" : "A" , "Ã" : "A" , "Ꜳ" : "AA" , "Æ" : "AE" , "Ǽ" : "AE" , "Ǣ" : "AE" , "Ꜵ" : "AO" , "Ꜷ" : "AU" , "Ꜹ" : "AV" , "Ꜻ" : "AV" , "Ꜽ" : "AY" , "Ḃ" : "B" , "Ḅ" : "B" , "Ɓ" : "B" , "Ḇ" : "B" , "Ƀ" : "B" , "Ƃ" : "B" , "Ć" : "C" , "Č" : "C" , "Ç" : "C" , "Ḉ" : "C" , "Ĉ" : "C" , "Ċ" : "C" , "Ƈ" : "C" , "Ȼ" : "C" , "Ď" : "D" , "Ḑ" : "D" , "Ḓ" : "D" , "Ḋ" : "D" , "Ḍ" : "D" , "Ɗ" : "D" , "Ḏ" : "D" , "Dz" : "D" , "Dž" : "D" , "Đ" : "D" , "Ƌ" : "D" , "DZ" : "DZ" , "DŽ" : "DZ" , "É" : "E" , "Ĕ" : "E" , "Ě" : "E" , "Ȩ" : "E" , "Ḝ" : "E" , "Ê" : "E" , "Ế" : "E" , "Ệ" : "E" , "Ề" : "E" , "Ể" : "E" , "Ễ" : "E" , "Ḙ" : "E" , "Ë" : "E" , "Ė" : "E" , "Ẹ" : "E" , "Ȅ" : "E" , "È" : "E" , "Ẻ" : "E" , "Ȇ" : "E" , "Ē" : "E" , "Ḗ" : "E" , "Ḕ" : "E" , "Ę" : "E" , "Ɇ" : "E" , "Ẽ" : "E" , "Ḛ" : "E" , "Ꝫ" : "ET" , "Ḟ" : "F" , "Ƒ" : "F" , "Ǵ" : "G" , "Ğ" : "G" , "Ǧ" : "G" , "Ģ" : "G" , "Ĝ" : "G" , "Ġ" : "G" , "Ɠ" : "G" , "Ḡ" : "G" , "Ǥ" : "G" , "Ḫ" : "H" , "Ȟ" : "H" , "Ḩ" : "H" , "Ĥ" : "H" , "Ⱨ" : "H" , "Ḧ" : "H" , "Ḣ" : "H" , "Ḥ" : "H" , "Ħ" : "H" , "Í" : "I" , "Ĭ" : "I" , "Ǐ" : "I" , "Î" : "I" , "Ï" : "I" , "Ḯ" : "I" , "İ" : "I" , "Ị" : "I" , "Ȉ" : "I" , "Ì" : "I" , "Ỉ" : "I" , "Ȋ" : "I" , "Ī" : "I" , "Į" : "I" , "Ɨ" : "I" , "Ĩ" : "I" , "Ḭ" : "I" , "Ꝺ" : "D" , "Ꝼ" : "F" , "Ᵹ" : "G" , "Ꞃ" : "R" , "Ꞅ" : "S" , "Ꞇ" : "T" , "Ꝭ" : "IS" , "Ĵ" : "J" , "Ɉ" : "J" , "Ḱ" : "K" , "Ǩ" : "K" , "Ķ" : "K" , "Ⱪ" : "K" , "Ꝃ" : "K" , "Ḳ" : "K" , "Ƙ" : "K" , "Ḵ" : "K" , "Ꝁ" : "K" , "Ꝅ" : "K" , "Ĺ" : "L" , "Ƚ" : "L" , "Ľ" : "L" , "Ļ" : "L" , "Ḽ" : "L" , "Ḷ" : "L" , "Ḹ" : "L" , "Ⱡ" : "L" , "Ꝉ" : "L" , "Ḻ" : "L" , "Ŀ" : "L" , "Ɫ" : "L" , "Lj" : "L" , "Ł" : "L" , "LJ" : "LJ" , "Ḿ" : "M" , "Ṁ" : "M" , "Ṃ" : "M" , "Ɱ" : "M" , "Ń" : "N" , "Ň" : "N" , "Ņ" : "N" , "Ṋ" : "N" , "Ṅ" : "N" , "Ṇ" : "N" , "Ǹ" : "N" , "Ɲ" : "N" , "Ṉ" : "N" , "Ƞ" : "N" , "Nj" : "N" , "Ñ" : "N" , "NJ" : "NJ" , "Ó" : "O" , "Ŏ" : "O" , "Ǒ" : "O" , "Ô" : "O" , "Ố" : "O" , "Ộ" : "O" , "Ồ" : "O" , "Ổ" : "O" , "Ỗ" : "O" , "Ö" : "O" , "Ȫ" : "O" , "Ȯ" : "O" , "Ȱ" : "O" , "Ọ" : "O" , "Ő" : "O" , "Ȍ" : "O" , "Ò" : "O" , "Ỏ" : "O" , "Ơ" : "O" , "Ớ" : "O" , "Ợ" : "O" , "Ờ" : "O" , "Ở" : "O" , "Ỡ" : "O" , "Ȏ" : "O" , "Ꝋ" : "O" , "Ꝍ" : "O" , "Ō" : "O" , "Ṓ" : "O" , "Ṑ" : "O" , "Ɵ" : "O" , "Ǫ" : "O" , "Ǭ" : "O" , "Ø" : "O" , "Ǿ" : "O" , "Õ" : "O" , "Ṍ" : "O" , "Ṏ" : "O" , "Ȭ" : "O" , "Ƣ" : "OI" , "Ꝏ" : "OO" , "Ɛ" : "E" , "Ɔ" : "O" , "Ȣ" : "OU" , "Ṕ" : "P" , "Ṗ" : "P" , "Ꝓ" : "P" , "Ƥ" : "P" , "Ꝕ" : "P" , "Ᵽ" : "P" , "Ꝑ" : "P" , "Ꝙ" : "Q" , "Ꝗ" : "Q" , "Ŕ" : "R" , "Ř" : "R" , "Ŗ" : "R" , "Ṙ" : "R" , "Ṛ" : "R" , "Ṝ" : "R" , "Ȑ" : "R" , "Ȓ" : "R" , "Ṟ" : "R" , "Ɍ" : "R" , "Ɽ" : "R" , "Ꜿ" : "C" , "Ǝ" : "E" , "Ś" : "S" , "Ṥ" : "S" , "Š" : "S" , "Ṧ" : "S" , "Ş" : "S" , "Ŝ" : "S" , "Ș" : "S" , "Ṡ" : "S" , "Ṣ" : "S" , "Ṩ" : "S" , "ẞ" : "SS" , "Ť" : "T" , "Ţ" : "T" , "Ṱ" : "T" , "Ț" : "T" , "Ⱦ" : "T" , "Ṫ" : "T" , "Ṭ" : "T" , "Ƭ" : "T" , "Ṯ" : "T" , "Ʈ" : "T" , "Ŧ" : "T" , "Ɐ" : "A" , "Ꞁ" : "L" , "Ɯ" : "M" , "Ʌ" : "V" , "Ꜩ" : "TZ" , "Ú" : "U" , "Ŭ" : "U" , "Ǔ" : "U" , "Û" : "U" , "Ṷ" : "U" , "Ü" : "U" , "Ǘ" : "U" , "Ǚ" : "U" , "Ǜ" : "U" , "Ǖ" : "U" , "Ṳ" : "U" , "Ụ" : "U" , "Ű" : "U" , "Ȕ" : "U" , "Ù" : "U" , "Ủ" : "U" , "Ư" : "U" , "Ứ" : "U" , "Ự" : "U" , "Ừ" : "U" , "Ử" : "U" , "Ữ" : "U" , "Ȗ" : "U" , "Ū" : "U" , "Ṻ" : "U" , "Ų" : "U" , "Ů" : "U" , "Ũ" : "U" , "Ṹ" : "U" , "Ṵ" : "U" , "Ꝟ" : "V" , "Ṿ" : "V" , "Ʋ" : "V" , "Ṽ" : "V" , "Ꝡ" : "VY" , "Ẃ" : "W" , "Ŵ" : "W" , "Ẅ" : "W" , "Ẇ" : "W" , "Ẉ" : "W" , "Ẁ" : "W" , "Ⱳ" : "W" , "Ẍ" : "X" , "Ẋ" : "X" , "Ý" : "Y" , "Ŷ" : "Y" , "Ÿ" : "Y" , "Ẏ" : "Y" , "Ỵ" : "Y" , "Ỳ" : "Y" , "Ƴ" : "Y" , "Ỷ" : "Y" , "Ỿ" : "Y" , "Ȳ" : "Y" , "Ɏ" : "Y" , "Ỹ" : "Y" , "Ź" : "Z" , "Ž" : "Z" , "Ẑ" : "Z" , "Ⱬ" : "Z" , "Ż" : "Z" , "Ẓ" : "Z" , "Ȥ" : "Z" , "Ẕ" : "Z" , "Ƶ" : "Z" , "IJ" : "IJ" , "Œ" : "OE" , "ᴀ" : "A" , "ᴁ" : "AE" , "ʙ" : "B" , "ᴃ" : "B" , "ᴄ" : "C" , "ᴅ" : "D" , "ᴇ" : "E" , "ꜰ" : "F" , "ɢ" : "G" , "ʛ" : "G" , "ʜ" : "H" , "ɪ" : "I" , "ʁ" : "R" , "ᴊ" : "J" , "ᴋ" : "K" , "ʟ" : "L" , "ᴌ" : "L" , "ᴍ" : "M" , "ɴ" : "N" , "ᴏ" : "O" , "ɶ" : "OE" , "ᴐ" : "O" , "ᴕ" : "OU" , "ᴘ" : "P" , "ʀ" : "R" , "ᴎ" : "N" , "ᴙ" : "R" , "ꜱ" : "S" , "ᴛ" : "T" , "ⱻ" : "E" , "ᴚ" : "R" , "ᴜ" : "U" , "ᴠ" : "V" , "ᴡ" : "W" , "ʏ" : "Y" , "ᴢ" : "Z" , "á" : "a" , "ă" : "a" , "ắ" : "a" , "ặ" : "a" , "ằ" : "a" , "ẳ" : "a" , "ẵ" : "a" , "ǎ" : "a" , "â" : "a" , "ấ" : "a" , "ậ" : "a" , "ầ" : "a" , "ẩ" : "a" , "ẫ" : "a" , "ä" : "a" , "ǟ" : "a" , "ȧ" : "a" , "ǡ" : "a" , "ạ" : "a" , "ȁ" : "a" , "à" : "a" , "ả" : "a" , "ȃ" : "a" , "ā" : "a" , "ą" : "a" , "ᶏ" : "a" , "ẚ" : "a" , "å" : "a" , "ǻ" : "a" , "ḁ" : "a" , "ⱥ" : "a" , "ã" : "a" , "ꜳ" : "aa" , "æ" : "ae" , "ǽ" : "ae" , "ǣ" : "ae" , "ꜵ" : "ao" , "ꜷ" : "au" , "ꜹ" : "av" , "ꜻ" : "av" , " ꜽ
this . sliderY = Math . min ( this . maxSliderTop , this . sliderY ) , this . $content . scrollTop ( this . maxScrollTop * this . sliderY / this . maxSliderTop ) , this . iOSNativeScrolling || ( this . updateScrollValues ( ) , this . setOnScrollStyles ( ) ) , this } , c . prototype . scrollBottom = function ( e ) { if ( this . isActive ) return this . $content . scrollTop ( this . contentHeight - this . $content . height ( ) - e ) . trigger ( h ) , this . stop ( ) . restore ( ) , this } , c . prototype . scrollTop = function ( e ) { if ( this . isActive ) return this . $content . scrollTop ( + e ) . trigger ( h ) , this . stop ( ) . restore ( ) , this } , c . prototype . scrollTo = function ( e ) { if ( this . isActive ) return this . scrollTop ( this . $el . find ( e ) . get ( 0 ) . offsetTop ) , this } , c . prototype . stop = function ( ) { return S && this . scrollRAF && ( S ( this . scrollRAF ) , this . scrollRAF = null ) , this . stopped = ! 0 , this . removeEvents ( ) , this . iOSNativeScrolling || this . pane . hide ( ) , this } , c . prototype . destroy = function ( ) { return this . stopped || this . stop ( ) , ! this . iOSNativeScrolling && this . pane . length && this . pane . remove ( ) , a && this . $content . height ( "" ) , this . $content . removeAttr ( "tabindex" ) , this . $el . hasClass ( "has-scrollbar" ) && ( this . $el . removeClass ( "has-scrollbar" ) , this . $content . css ( { right : "" } ) ) , this } , c . prototype . flash = function ( ) { if ( ! this . iOSNativeScrolling && this . isActive ) return this . reset ( ) , this . pane . addClass ( "flashed" ) , setTimeout ( function ( e ) { return function ( ) { e . pane . removeClass ( "flashed" ) } } ( this ) , this . options . flashDelay ) , this } , c } ( ) , e . fn . nanoScroller = function ( t ) { return this . each ( function ( ) { var n , a ; if ( ( a = this . nanoscroller ) || ( n = e . extend ( { } , C , t ) , this . nanoscroller = a = new f ( this , n ) ) , t && "object" == typeof t ) { if ( e . extend ( a . options , t ) , null != t . scrollBottom ) return a . scrollBottom ( t . scrollBottom ) ; if ( null != t . scrollTop ) return a . scrollTop ( t . scrollTop ) ; if ( t . scrollTo ) return a . scrollTo ( t . scrollTo ) ; if ( "bottom" === t . scroll ) return a . scrollBottom ( 0 ) ; if ( "top" === t . scroll ) return a . scrollTop ( 0 ) ; if ( t . scroll && t . scroll instanceof e ) return a . scrollTo ( t . scroll ) ; if ( t . stop ) return a . stop ( ) ; if ( t . destroy ) return a . destroy ( ) ; if ( t . flash ) return a . flash ( ) } return a . reset ( ) } ) } , e . fn . nanoScroller . Constructor = f } ( jQuery , window , document ) , function ( e ) { "use strict" ; function t ( e , t ) { return t = t || Error , function ( ) { var n , a , i = 2 , o = arguments , s = o [ 0 ] , r = "[" + ( e ? e + ":" : "" ) + s + "] " , l = o [ 1 ] ; for ( r += l . replace ( /\{\d+\}/g , function ( e ) { var t = + e . slice ( 1 , - 1 ) , n = t + i ; return n < o . length ? ve ( o [ n ] ) : e } ) , r += "\nhttp://errors.angularjs.org/1.5.7/" + ( e ? e + "/" : "" ) + s , a = i , n = "?" ; a < o . length ; a ++ , n = "&" ) r += n + "p" + ( a - i ) + "=" + encodeURIComponent ( ve ( o [ a ] ) ) ; return new t ( r ) } } function n ( e ) { if ( null == e || M ( e ) ) return ! 1 ; if ( Ya ( e ) || w ( e ) || Oa && e instanceof Oa ) return ! 0 ; var t = "length" in Object ( e ) && e . length ; return k ( t ) && ( t >= 0 && ( t - 1 in e || e instanceof Array ) || "function" == typeof e . item ) } function a ( e , t , i ) { var o , s ; if ( e ) if ( S ( e ) ) for ( o in e ) "prototype" == o || "length" == o || "name" == o || e . hasOwnProperty && ! e . hasOwnProperty ( o ) || t . call ( i , e [ o ] , o , e ) ; else if ( Ya ( e ) || n ( e ) ) { var r = "object" != typeof e ; for ( o = 0 , s = e . length ; o < s ; o ++ ) ( r || o in e ) && t . call ( i , e [ o ] , o , e ) } else if ( e . forEach && e . forEach !== a ) e . forEach ( t , i , e ) ; else if ( b ( e ) ) for ( o in e ) t . call ( i , e [ o ] , o , e ) ; else if ( "function" == typeof e . hasOwnProperty ) for ( o in e ) e . hasOwnProperty ( o ) && t . call ( i , e [ o ] , o , e ) ; else for ( o in e ) Da . call ( e , o ) && t . call ( i , e [ o ] , o , e ) ; return e } function i ( e , t , n ) { for ( var a = Object . keys ( e ) . sort ( ) , i = 0 ; i < a . length ; i ++ ) t . call ( n , e [ a [ i ] ] , a [ i ] ) ; return a } function o ( e ) { return function ( t , n ) { e ( n , t ) } } function s ( ) { return ++ Ka } function r ( e , t ) { t ? e . $$hashKey = t : delete e . $$hashKey } function l ( e , t , n ) { for ( var a = e . $$hashKey , i = 0 , o = t . length ; i < o ; ++ i ) { var s = t [ i ] ; if ( y ( s ) || S ( s ) ) for ( var c = Object . keys ( s ) , d = 0 , u = c . length ; d < u ; d ++ ) { var p = c [ d ] , m = s [ p ] ; n && y ( m ) ? $ ( m ) ? e [ p ] = new Date ( m . valueOf ( ) ) : C ( m ) ? e [ p ] = new RegExp ( m ) : m . nodeName ? e [ p ] = m . cloneNode ( ! 0 ) : N ( m ) ? e [ p ] = m . clone ( ) : ( y ( e [ p ] ) || ( e [ p ] = Ya ( m ) ? [ ] : { } ) , l ( e [ p ] , [ m ] , ! 0 ) ) : e [ p ] = m } } return r ( e , a ) , e } function c ( e ) { return l ( e , ja . call ( arguments , 1 ) , ! 1 ) } function d ( e ) { return l ( e , ja . call ( arguments , 1 ) , ! 0 ) } function u ( e ) { return parseInt ( e , 10 ) } function p ( e , t ) { return c ( Object . create ( e ) , t ) } function m ( ) { } function g ( e ) { return e } function h ( e ) { return function ( ) { return e } } function f ( e ) { return S ( e . toString ) && e . toString !== Va } function _ ( e ) { return "undefined" == typeof e } function v ( e ) { return "undefined" != typeof e } function y ( e ) { return null !== e && "object" == typeof
function s ( e , n , a , i ) { var o , s , r , l , c , d , u , p , h ; if ( m ) { var f = n . length ; for ( h = new Array ( f ) , c = 0 ; c < g . length ; c += 3 ) u = g [ c ] , h [ u ] = n [ u ] } else h = n ; for ( c = 0 , d = g . length ; c < d ; ) r = h [ g [ c ++ ] ] , o = g [ c ++ ] , s = g [ c ++ ] , o ? ( o . scope ? ( l = e . $new ( ) , L . $$addScopeInfo ( Oa ( r ) , l ) ) : l = e , p = o . transcludeOnThisElement ? z ( e , o . transclude , i ) : ! o . templateOnThisElement && i ? i : ! i && t ? z ( e , t ) : null , o ( s , l , r , a , p ) ) : s && s ( e , r . childNodes , void 0 , i ) } for ( var r , l , c , d , u , p , m , g = [ ] , h = 0 ; h < e . length ; h ++ ) r = new F , l = W ( e [ h ] , [ ] , r , 0 === h ? a : void 0 , i ) , c = l . length ? X ( l , e [ h ] , r , t , n , null , [ ] , [ ] , o ) : null , c && c . scope && L . $$addScopeClass ( r . $$element ) , u = c && c . terminal || ! ( d = e [ h ] . childNodes ) || ! d . length ? null : V ( d , c ? ( c . transcludeOnThisElement || ! c . templateOnThisElement ) && c . transclude : t ) , ( c || u ) && ( g . push ( h , c , u ) , p = ! 0 , m = m || c ) , o = null ; return p ? s : null } function z ( e , t , n ) { function a ( a , i , o , s , r ) { return a || ( a = e . $new ( ! 1 , r ) , a . $$transcluded = ! 0 ) , t ( a , i , { parentBoundTranscludeFn : n , transcludeControllers : o , futureParentElement : s } ) } var i = a . $$slots = ge ( ) ; for ( var o in t . $$slots ) t . $$slots [ o ] ? i [ o ] = z ( e , t . $$slots [ o ] , n ) : i [ o ] = null ; return a } function W ( e , t , n , a , i ) { var o , s , r = e . nodeType , l = n . $attr ; switch ( r ) { case oi : te ( t , ft ( U ( e ) ) , "E" , a , i ) ; for ( var c , d , u , p , m , g , h = e . attributes , _ = 0 , v = h && h . length ; _ < v ; _ ++ ) { var k = ! 1 , $ = ! 1 ; c = h [ _ ] , d = c . name , m = Xa ( c . value ) , p = ft ( d ) , ( g = Me . test ( p ) ) && ( d = d . replace ( Ki , "" ) . substr ( 8 ) . replace ( /_(.)/g , function ( e , t ) { return t . toUpperCase ( ) } ) ) ; var S = p . match ( xe ) ; S && ne ( S [ 1 ] ) && ( k = d , $ = d . substr ( 0 , d . length - 5 ) + "end" , d = d . substr ( 0 , d . length - 6 ) ) , u = ft ( d . toLowerCase ( ) ) , l [ u ] = d , ! g && n . hasOwnProperty ( u ) || ( n [ u ] = m , ze ( e , u ) && ( n [ u ] = ! 0 ) ) , pe ( e , t , m , u , g ) , te ( t , u , "A" , a , i , k , $ ) } if ( s = e . className , y ( s ) && ( s = s . animVal ) , w ( s ) && "" !== s ) for ( ; o = b . exec ( s ) ; ) u = ft ( o [ 2 ] ) , te ( t , u , "C" , a , i ) && ( n [ u ] = Xa ( o [ 3 ] ) ) , s = s . substr ( o . index + o [ 0 ] . length ) ; break ; case ri : if ( 11 === Ua ) for ( ; e . parentNode && e . nextSibling && e . nextSibling . nodeType === ri ; ) e . nodeValue = e . nodeValue + e . nextSibling . nodeValue , e . parentNode . removeChild ( e . nextSibling ) ; le ( t , e . nodeValue ) ; break ; case li : try { o = f . exec ( e . nodeValue ) , o && ( u = ft ( o [ 1 ] ) , te ( t , u , "M" , a , i ) && ( n [ u ] = Xa ( o [ 2 ] ) ) ) } catch ( C ) { } } return t . sort ( oe ) , t } function G ( e , t , n ) { var a = [ ] , i = 0 ; if ( t && e . hasAttribute && e . hasAttribute ( t ) ) { do { if ( ! e ) throw Wi ( "uterdir" , "Unterminated attribute, found '{0}' but no matching '{1}' found." , t , n ) ; e . nodeType == oi && ( e . hasAttribute ( t ) && i ++ , e . hasAttribute ( n ) && i -- ) , a . push ( e ) , e = e . nextSibling } while ( i > 0 ) } else a . push ( e ) ; return Oa ( a ) } function K ( e , t , n ) { return function ( a , i , o , s , r ) { return i = G ( i [ 0 ] , t , n ) , e ( a , i , o , s , r ) } } function Y ( e , t , n , a , i , o ) { var s ; return e ? L ( t , n , a , i , o ) : function ( ) { return s || ( s = L ( t , n , a , i , o ) , t = n = o = null ) , s . apply ( this , arguments ) } } function X ( e , t , n , o , s , r , l , d , u ) { function p ( e , t , n , a ) { e && ( n && ( e = K ( e , n , a ) ) , e . require = g . require , e . directiveName = h , ( C === g || g . $$isolateScope ) && ( e = he ( e , { isolateScope : ! 0 } ) ) , l . push ( e ) ) , t && ( n && ( t = K ( t , n , a ) ) , t . require = g . require , t . directiveName = h , ( C === g || g . $$isolateScope ) && ( t = he ( t , { isolateScope : ! 0 } ) ) , d . push ( t ) ) } function m ( e , o , s , r , u ) { function p ( e , t , n , a ) { var i ; if ( x ( e ) || ( a = n , n = t , t = e , e = void 0 ) , T && ( i = b ) , n || ( n = T ? I . parent ( ) : I ) , ! a ) return u ( e , t , i , n , O ) ; var o = u . $$slots [ a ] ; if ( o ) return o ( e , t , i , n , O ) ; if ( _ ( o ) ) throw Wi ( "noslot" , 'No parent directive that requires a transclusion with slot name "{0}". Element: {1}' , a , Z ( I ) ) } var m , g , h , f , v , b , w , I , A , E ; t === s ? ( A = n , I = n . $$element ) : ( I = Oa ( s ) , A = new F ( I , n ) ) , v = o , C ? f = o . $new ( ! 0 ) : k && ( v = o . $parent ) , u && ( w = p , w . $$boundTransclude = u , w . isSlotFilled = function ( e ) { return ! ! u . $$slots [ e ] } ) , $ && ( b = Q ( I , A , w , $ , f , o , C ) ) , C && ( L . $$addScopeInfo ( I , f , ! 0 , ! ( M && ( M === C || M === C . $$originalDirective ) ) ) , L . $$addScopeClass ( I , ! 0 ) , f . $$isolateBindings = C . $$isolateBindings , E = _e ( o , A , f , f . $$isolateBindings , C ) , E . removeWatches && f . $on ( "$destroy" , E . removeWatches ) ) ; for ( var D in b ) { var P = $ [ D ] , N = b [ D ] , R = P . $$bindings . bindToController ; N . identifier && R ? N . bindingInfo = _e ( v , A , N . instance , R , P ) : N . bindingInfo = { } ; var U = N ( ) ; U !== N . instance && ( N . instance = U , I . data ( "$" + P . name + "Controller" , U ) , N . bindingInfo . removeWatches && N . bindingInfo . removeWatches ( ) , N . bindingInfo = _e ( v , A , N . instance , R , P ) ) } for ( a ( $ , function ( e , t ) { var n = e . require ; e . bindToController && ! Ya ( n ) && y ( n ) && c ( b [ t ] . instance , J ( t , n , I , b ) ) } ) , a ( b , function ( e ) { var t = e . instance ; if ( S ( t . $onChanges ) ) try { t . $onChanges ( e . bindingInfo . initialChanges ) } catch ( n ) { i ( n ) } if ( S ( t . $onInit ) ) try { t . $onInit ( ) } catch ( n ) { i ( n ) } S ( t . $o
if ( e === Object ) throw uo ( "isecobj" , "Referencing Object in Angular expressions is disallowed! Expression: {0}" , t ) } return e } function an ( e , t ) { if ( e ) { if ( e . constructor === e ) throw uo ( "isecfn" , "Referencing Function in Angular expressions is disallowed! Expression: {0}" , t ) ; if ( e === po || e === mo || e === go ) throw uo ( "isecff" , "Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}" , t ) } } function on ( e , t ) { if ( e && ( e === ( 0 ) . constructor || e === ( ! 1 ) . constructor || e === "" . constructor || e === { } . constructor || e === [ ] . constructor || e === Function . constructor ) ) throw uo ( "isecaf" , "Assigning to a constructor is disallowed! Expression: {0}" , t ) } function sn ( e , t ) { return "undefined" != typeof e ? e : t } function rn ( e , t ) { return "undefined" == typeof e ? t : "undefined" == typeof t ? e : e + t } function ln ( e , t ) { var n = e ( t ) ; return ! n . $stateful } function cn ( e , t ) { var n , i ; switch ( e . type ) { case vo . Program : n = ! 0 , a ( e . body , function ( e ) { cn ( e . expression , t ) , n = n && e . expression . constant } ) , e . constant = n ; break ; case vo . Literal : e . constant = ! 0 , e . toWatch = [ ] ; break ; case vo . UnaryExpression : cn ( e . argument , t ) , e . constant = e . argument . constant , e . toWatch = e . argument . toWatch ; break ; case vo . BinaryExpression : cn ( e . left , t ) , cn ( e . right , t ) , e . constant = e . left . constant && e . right . constant , e . toWatch = e . left . toWatch . concat ( e . right . toWatch ) ; break ; case vo . LogicalExpression : cn ( e . left , t ) , cn ( e . right , t ) , e . constant = e . left . constant && e . right . constant , e . toWatch = e . constant ? [ ] : [ e ] ; break ; case vo . ConditionalExpression : cn ( e . test , t ) , cn ( e . alternate , t ) , cn ( e . consequent , t ) , e . constant = e . test . constant && e . alternate . constant && e . consequent . constant , e . toWatch = e . constant ? [ ] : [ e ] ; break ; case vo . Identifier : e . constant = ! 1 , e . toWatch = [ e ] ; break ; case vo . MemberExpression : cn ( e . object , t ) , e . computed && cn ( e . property , t ) , e . constant = e . object . constant && ( ! e . computed || e . property . constant ) , e . toWatch = [ e ] ; break ; case vo . CallExpression : n = ! ! e . filter && ln ( t , e . callee . name ) , i = [ ] , a ( e . arguments , function ( e ) { cn ( e , t ) , n = n && e . constant , e . constant || i . push . apply ( i , e . toWatch ) } ) , e . constant = n , e . toWatch = e . filter && ln ( t , e . callee . name ) ? i : [ e ] ; break ; case vo . AssignmentExpression : cn ( e . left , t ) , cn ( e . right , t ) , e . constant = e . left . constant && e . right . constant , e . toWatch = [ e ] ; break ; case vo . ArrayExpression : n = ! 0 , i = [ ] , a ( e . elements , function ( e ) { cn ( e , t ) , n = n && e . constant , e . constant || i . push . apply ( i , e . toWatch ) } ) , e . constant = n , e . toWatch = i ; break ; case vo . ObjectExpression : n = ! 0 , i = [ ] , a ( e . properties , function ( e ) { cn ( e . value , t ) , n = n && e . value . constant && ! e . computed , e . value . constant || i . push . apply ( i , e . value . toWatch ) } ) , e . constant = n , e . toWatch = i ; break ; case vo . ThisExpression : e . constant = ! 1 , e . toWatch = [ ] ; break ; case vo . LocalsExpression : e . constant = ! 1 , e . toWatch = [ ] } } function dn ( e ) { if ( 1 == e . length ) { var t = e [ 0 ] . expression , n = t . toWatch ; return 1 !== n . length ? n : n [ 0 ] !== t ? n : void 0 } } function un ( e ) { return e . type === vo . Identifier || e . type === vo . MemberExpression } function pn ( e ) { if ( 1 === e . body . length && un ( e . body [ 0 ] . expression ) ) return { type : vo . AssignmentExpression , left : e . body [ 0 ] . expression , right : { type : vo . NGValueParameter } , operator : "=" } } function mn ( e ) { return 0 === e . body . length || 1 === e . body . length && ( e . body [ 0 ] . expression . type === vo . Literal || e . body [ 0 ] . expression . type === vo . ArrayExpression || e . body [ 0 ] . expression . type === vo . ObjectExpression ) } function gn ( e ) { return e . constant } function hn ( e , t ) { this . astBuilder = e , this . $filter = t } function fn ( e , t ) { this . astBuilder = e , this . $filter = t } function _n ( e ) { return "constructor" == e } function vn ( e ) { return S ( e . valueOf ) ? e . valueOf ( ) : bo . call ( e ) } function yn ( ) { var e , t , n = ge ( ) , i = ge ( ) , o = { "true" : ! 0 , "false" : ! 1 , "null" : null , undefined : void 0 } ; this . addLiteral = function ( e , t ) { o [ e ] = t } , this . setIdentifierFns = function ( n , a ) { return e = n , t = a , this } , this . $get = [ "$filter" , function ( s ) { function r ( e , t , a ) { var o , r , c ; switch ( a = a || b , typeof e ) { case "string" : e = e . trim ( ) , c = e ; var f = a ? i : n ; if ( o = f [ c ] , ! o ) { ":" === e . charAt ( 0 ) && ":" === e . charAt ( 1 ) && ( r = ! 0 , e = e . substring ( 2 ) ) ; var v = a ? y : _ , w = new _o ( v ) , k = new yo ( w , s , v ) ; o = k . parse ( e ) , o . constant ? o . $$watchDelegate = g : r ? o . $$watchDelegate = o . literal ? p : u : o . inputs && ( o . $$watchDelegate = d ) , a && ( o = l ( o ) ) , f [ c ] = o } return h ( o , t ) ; case "function" : return h ( e , t ) ; default : return h ( m , t ) } } function l ( e ) { function t ( t , n , a , i ) { var o = b ; b = ! 0 ; try { return e ( t , n , a , i ) } finally { b = o } } if ( ! e ) return e ; t . $$watchDelegate =
if ( ! l ) { var t = this [ Ta ] , n = t . badInput , a = t . typeMismatch ; l = o . defer ( function ( ) { l = null , t . badInput === n && t . typeMismatch === a || c ( e ) } ) } } ) , a . $render = function ( ) { var e = a . $isEmpty ( a . $viewValue ) ? "" : a . $viewValue ; t . val ( ) !== e && t . val ( e ) } } function fa ( e , t ) { if ( $ ( e ) ) return e ; if ( w ( e ) ) { Go . lastIndex = 0 ; var n = Go . exec ( e ) ; if ( n ) { var a = + n [ 1 ] , i = + n [ 2 ] , o = 0 , s = 0 , r = 0 , l = 0 , c = Qn ( a ) , d = 7 * ( i - 1 ) ; return t && ( o = t . getHours ( ) , s = t . getMinutes ( ) , r = t . getSeconds ( ) , l = t . getMilliseconds ( ) ) , new Date ( a , 0 , c . getDate ( ) + d , o , s , r , l ) } } return NaN } function _a ( e , t ) { return function ( n , i ) { var o , s ; if ( $ ( n ) ) return n ; if ( w ( n ) ) { if ( '"' == n . charAt ( 0 ) && '"' == n . charAt ( n . length - 1 ) && ( n = n . substring ( 1 , n . length - 1 ) ) , jo . test ( n ) ) return new Date ( n ) ; if ( e . lastIndex = 0 , o = e . exec ( n ) ) return o . shift ( ) , s = i ? { yyyy : i . getFullYear ( ) , MM : i . getMonth ( ) + 1 , dd : i . getDate ( ) , HH : i . getHours ( ) , mm : i . getMinutes ( ) , ss : i . getSeconds ( ) , sss : i . getMilliseconds ( ) / 1e3 } : { yyyy : 1970 , MM : 1 , dd : 1 , HH : 0 , mm : 0 , ss : 0 , sss : 0 } , a ( o , function ( e , n ) { n < t . length && ( s [ t [ n ] ] = + e ) } ) , new Date ( s . yyyy , s . MM - 1 , s . dd , s . HH , s . mm , s . ss || 0 , 1e3 * s . sss || 0 ) } return NaN } } function va ( e , t , n , a ) { return function ( i , o , s , r , l , c , d ) { function u ( e ) { return e && ! ( e . getTime && e . getTime ( ) !== e . getTime ( ) ) } function p ( e ) { return v ( e ) && ! $ ( e ) ? n ( e ) || void 0 : e } ya ( i , o , s , r ) , ha ( i , o , s , r , l , c ) ; var m , g = r && r . $options && r . $options . timezone ; if ( r . $$parserName = e , r . $parsers . push ( function ( e ) { if ( r . $isEmpty ( e ) ) return null ; if ( t . test ( e ) ) { var a = n ( e , m ) ; return g && ( a = Y ( a , g ) ) , a } } ) , r . $formatters . push ( function ( e ) { if ( e && ! $ ( e ) ) throw xs ( "datefmt" , "Expected `{0}` to be a date" , e ) ; return u ( e ) ? ( m = e , m && g && ( m = Y ( m , g , ! 0 ) ) , d ( "date" ) ( e , a , g ) ) : ( m = null , "" ) } ) , v ( s . min ) || s . ngMin ) { var h ; r . $validators . min = function ( e ) { return ! u ( e ) || _ ( h ) || n ( e ) >= h } , s . $observe ( "min" , function ( e ) { h = p ( e ) , r . $validate ( ) } ) } if ( v ( s . max ) || s . ngMax ) { var f ; r . $validators . max = function ( e ) { return ! u ( e ) || _ ( f ) || n ( e ) <= f } , s . $observe ( "max" , function ( e ) { f = p ( e ) , r . $validate ( ) } ) } } } function ya ( e , t , n , a ) { var i = t [ 0 ] , o = a . $$hasNativeValidators = y ( i . validity ) ; o && a . $parsers . push ( function ( e ) { var n = t . prop ( Ta ) || { } ; return n . badInput || n . typeMismatch ? void 0 : e } ) } function ba ( e , t , n , a , i , o ) { if ( ya ( e , t , n , a ) , ha ( e , t , n , a , i , o ) , a . $$parserName = "number" , a . $parsers . push ( function ( e ) { return a . $isEmpty ( e ) ? null : Vo . test ( e ) ? parseFloat ( e ) : void 0 } ) , a . $formatters . push ( function ( e ) { if ( ! a . $isEmpty ( e ) ) { if ( ! k ( e ) ) throw xs ( "numfmt" , "Expected `{0}` to be a number" , e ) ; e = e . toString ( ) } return e } ) , v ( n . min ) || n . ngMin ) { var s ; a . $validators . min = function ( e ) { return a . $isEmpty ( e ) || _ ( s ) || e >= s } , n . $observe ( "min" , function ( e ) { v ( e ) && ! k ( e ) && ( e = parseFloat ( e , 10 ) ) , s = k ( e ) && ! isNaN ( e ) ? e : void 0 , a . $validate ( ) } ) } if ( v ( n . max ) || n . ngMax ) { var r ; a . $validators . max = function ( e ) { return a . $isEmpty ( e ) || _ ( r ) || e <= r } , n . $observe ( "max" , function ( e ) { v ( e ) && ! k ( e ) && ( e = parseFloat ( e , 10 ) ) , r = k ( e ) && ! isNaN ( e ) ? e : void 0 , a . $validate ( ) } ) } } function wa ( e , t , n , a , i , o ) { ha ( e , t , n , a , i , o ) , ma ( a ) , a . $$parserName = "url" , a . $validators . url = function ( e , t ) { var n = e || t ; return a . $isEmpty ( n ) || Ho . test ( n ) } } function ka ( e , t , n , a , i , o ) { ha ( e , t , n , a , i , o ) , ma ( a ) , a . $$parserName = "email" , a . $validators . email = function ( e , t ) { var n = e || t ; return a . $isEmpty ( n ) || qo . test ( n ) } } function $a ( e , t , n , a ) { _ ( n . name ) && t . attr ( "name" , s ( ) ) ; var i = function ( e ) { t [ 0 ] . checked && a . $setViewValue ( n . value , e && e . type ) } ; t . on ( "click" , i ) , a . $render = function ( ) { var e = n . value ; t [ 0 ] . checked = e == a . $viewValue } , n . $observe ( "value" , a . $render ) } function Sa ( e , t , n , a , i ) { var o ; if ( v ( a ) ) { if ( o = e ( a ) , ! o . constant ) throw xs ( "constexpr" , "Expected constant expression for `{0}`, but saw `{1}`." , n , a ) ; return o ( t ) } return i } function Ca ( e , t , n , a , i , o , s , r ) { var l = Sa ( r , e , "ngTrueValue" , n . ngTrueValue , ! 0 ) , c = Sa ( r , e , "ngFalseValue" , n . ngFalseValue , ! 1 ) , d = function ( e ) { a . $setViewValue ( t [ 0 ] . checked , e && e . type ) } ; t . on ( "click" , d ) , a . $render = function ( ) { t [ 0 ] . checked = a . $viewValue } , a . $isEmpty = function ( e ) { return e === ! 1 } , a . $formatters . push ( function ( e ) { return B ( e , l ) } ) , a . $parsers . push ( function ( e ) { return e ? l : c } ) } function Ma ( e , t ) { return e = "ngClass" + e , [ "$animate" , function ( n ) { function i ( e , t ) { var n = [ ] ; e : for ( var a = 0 ; a < e . length ; a ++ ) { for ( var i = e [ a ] , o = 0 ; o < t . length ; o ++ ) if ( i == t [ o ] ) continue e ; n . push ( i ) } return n } function o ( e ) { var t = [ ] ; return Ya ( e ) ? ( a ( e , function ( e ) { t = t . concat ( o ( e ) ) } ) , t ) : w ( e ) ? e . split ( " " ) : y ( e ) ? ( a ( e , function ( e , n ) { e && ( t = t . concat ( n . split ( " " ) ) ) } ) , t ) : e } return { restrict
switch ( e . type ) { case vo . Program : a ( e . body , function ( t , n ) { p . recurse ( t . expression , void 0 , void 0 , function ( e ) { l = e } ) , n !== e . body . length - 1 ? p . current ( ) . body . push ( l , ";" ) : p . return _ ( l ) } ) ; break ; case vo . Literal : d = this . escape ( e . value ) , this . assign ( t , d ) , i ( d ) ; break ; case vo . UnaryExpression : this . recurse ( e . argument , void 0 , void 0 , function ( e ) { l = e } ) , d = e . operator + "(" + this . ifDefined ( l , 0 ) + ")" , this . assign ( t , d ) , i ( d ) ; break ; case vo . BinaryExpression : this . recurse ( e . left , void 0 , void 0 , function ( e ) { r = e } ) , this . recurse ( e . right , void 0 , void 0 , function ( e ) { l = e } ) , d = "+" === e . operator ? this . plus ( r , l ) : "-" === e . operator ? this . ifDefined ( r , 0 ) + e . operator + this . ifDefined ( l , 0 ) : "(" + r + ")" + e . operator + "(" + l + ")" , this . assign ( t , d ) , i ( d ) ; break ; case vo . LogicalExpression : t = t || this . nextId ( ) , p . recurse ( e . left , t ) , p . if _ ( "&&" === e . operator ? t : p . not ( t ) , p . lazyRecurse ( e . right , t ) ) , i ( t ) ; break ; case vo . ConditionalExpression : t = t || this . nextId ( ) , p . recurse ( e . test , t ) , p . if _ ( t , p . lazyRecurse ( e . alternate , t ) , p . lazyRecurse ( e . consequent , t ) ) , i ( t ) ; break ; case vo . Identifier : t = t || this . nextId ( ) , n && ( n . context = "inputs" === p . stage ? "s" : this . assign ( this . nextId ( ) , this . getHasOwnProperty ( "l" , e . name ) + "?l:s" ) , n . computed = ! 1 , n . name = e . name ) , en ( e . name ) , p . if _ ( "inputs" === p . stage || p . not ( p . getHasOwnProperty ( "l" , e . name ) ) , function ( ) { p . if _ ( "inputs" === p . stage || "s" , function ( ) { o && 1 !== o && p . if _ ( p . not ( p . nonComputedMember ( "s" , e . name ) ) , p . lazyAssign ( p . nonComputedMember ( "s" , e . name ) , "{}" ) ) , p . assign ( t , p . nonComputedMember ( "s" , e . name ) ) } ) } , t && p . lazyAssign ( t , p . nonComputedMember ( "l" , e . name ) ) ) , ( p . state . expensiveChecks || _n ( e . name ) ) && p . addEnsureSafeObject ( t ) , i ( t ) ; break ; case vo . MemberExpression : r = n && ( n . context = this . nextId ( ) ) || this . nextId ( ) , t = t || this . nextId ( ) , p . recurse ( e . object , r , void 0 , function ( ) { p . if _ ( p . notNull ( r ) , function ( ) { o && 1 !== o && p . addEnsureSafeAssignContext ( r ) , e . computed ? ( l = p . nextId ( ) , p . recurse ( e . property , l ) , p . getStringValue ( l ) , p . addEnsureSafeMemberName ( l ) , o && 1 !== o && p . if _ ( p . not ( p . computedMember ( r , l ) ) , p . lazyAssign ( p . computedMember ( r , l ) , "{}" ) ) , d = p . ensureSafeObject ( p . computedMember ( r , l ) ) , p . assign ( t , d ) , n && ( n . computed = ! 0 , n . name = l ) ) : ( en ( e . property . name ) , o && 1 !== o && p . if _ ( p . not ( p . nonComputedMember ( r , e . property . name ) ) , p . lazyAssign ( p . nonComputedMember ( r , e . property . name ) , "{}" ) ) , d = p . nonComputedMember ( r , e . property . name ) , ( p . state . expensiveChecks || _n ( e . property . name ) ) && ( d = p . ensureSafeObject ( d ) ) , p . assign ( t , d ) , n && ( n . computed = ! 1 , n . name = e . property . name ) ) } , function ( ) { p . assign ( t , "undefined" ) } ) , i ( t ) } , ! ! o ) ; break ; case vo . CallExpression : t = t || this . nextId ( ) , e . filter ? ( l = p . filter ( e . callee . name ) , c = [ ] , a ( e . arguments , function ( e ) { var t = p . nextId ( ) ; p . recurse ( e , t ) , c . push ( t ) } ) , d = l + "(" + c . join ( "," ) + ")" , p . assign ( t , d ) , i ( t ) ) : ( l = p . nextId ( ) , r = { } , c = [ ] , p . recurse ( e . callee , l , r , function ( ) { p . if _ ( p . notNull ( l ) , function ( ) { p . addEnsureSafeFunction ( l ) , a ( e . arguments , function ( e ) { p . recurse ( e , p . nextId ( ) , void 0 , function ( e ) { c . push ( p . ensureSafeObject ( e ) ) } ) } ) , r . name ? ( p . state . expensiveChecks || p . addEnsureSafeObject ( r . context ) , d = p . member ( r . context , r . name , r . computed ) + "(" + c . join ( "," ) + ")" ) : d = l + "(" + c . join ( "," ) + ")" , d = p . ensureSafeObject ( d ) , p . assign ( t , d ) } , function ( ) { p . assign ( t , "undefined" ) } ) , i ( t ) } ) ) ; break ; case vo . AssignmentExpression : if ( l = this . nextId ( ) , r = { } , ! un ( e . left ) ) throw uo ( "lval" , "Trying to assign a value to a non l-value" ) ; this . recurse ( e . left , void 0 , r , function ( ) { p . if _ ( p . notNull ( r . context ) , function ( ) { p . recurse ( e . right , l ) , p . addEnsureSafeObject ( p . member ( r . context , r . name , r . computed ) ) , p . addEnsureSafeAssignContext ( r . context ) , d = p . member ( r . context , r . name , r . computed ) + e . operator + l , p . assign ( t , d ) , i ( t || d ) } ) } , 1 ) ; break ; case vo . ArrayExpression : c = [ ] , a ( e . elements , function ( e ) { p . recurse ( e , p . nextId ( ) , void 0 , function ( e ) { c . push ( e ) } ) } ) , d = "[" + c . join ( "," ) + "]" , this . assign ( t , d ) , i ( d ) ; break ; case vo . ObjectExpression : c = [ ] , u = ! 1 , a ( e . properties , function ( e ) { e . computed && ( u = ! 0 ) } ) , u ? ( t = t || this . nextId ( ) , this . assign ( t , "{}" ) , a ( e . properties , function ( e ) { e . computed ? ( r = p . nextId ( ) , p . recurse ( e . key , r ) ) : r = e . key . type === vo . Identifier ? e . key . name : "" + e . key . value , l = p . nextId ( ) , p . recurse ( e . value , l ) , p . assign ( p . member ( t , r , e . computed ) , l ) } ) ) : ( a ( e . properties , function ( t ) { p . recurse ( t . value , e . constant ? void 0 : p . nextId ( ) , void 0 , function ( e ) { c . push ( p . escape ( t . key . type === vo . Identifier ? t . key . nam
} ; return { restrict : "A" , multiElement : ! 0 , transclude : "element" , priority : 1e3 , terminal : ! 0 , $$tlb : ! 0 , compile : function ( t , u ) { var p = u . ngRepeat , m = o . $$createComment ( "end ngRepeat" , p ) , g = p . match ( /^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/ ) ; if ( ! g ) throw r ( "iexp" , "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'." , p ) ; var h = g [ 1 ] , f = g [ 2 ] , _ = g [ 3 ] , v = g [ 4 ] ; if ( g = h . match ( /^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/ ) , ! g ) throw r ( "iidexp" , "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'." , h ) ; var y = g [ 3 ] || g [ 1 ] , b = g [ 2 ] ; if ( _ && ( ! /^[$a-zA-Z_][$a-zA-Z0-9_]*$/ . test ( _ ) || /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/ . test ( _ ) ) ) throw r ( "badident" , "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name." , _ ) ; var w , k , $ , S , C = { $id : Xe } ; return v ? w = e ( v ) : ( $ = function ( e , t ) { return Xe ( t ) } , S = function ( e ) { return e } ) , function ( e , t , o , u , g ) { w && ( k = function ( t , n , a ) { return b && ( C [ b ] = t ) , C [ y ] = n , C . $index = a , w ( e , C ) } ) ; var h = ge ( ) ; e . $watchCollection ( f , function ( o ) { var u , f , v , w , C , M , x , I , A , E , T , D , P = t [ 0 ] , F = ge ( ) ; if ( _ && ( e [ _ ] = o ) , n ( o ) ) A = o , I = k || $ ; else { I = k || S , A = [ ] ; for ( var N in o ) Da . call ( o , N ) && "$" !== N . charAt ( 0 ) && A . push ( N ) } for ( w = A . length , T = new Array ( w ) , u = 0 ; u < w ; u ++ ) if ( C = o === A ? u : A [ u ] , M = o [ C ] , x = I ( C , M , u ) , h [ x ] ) E = h [ x ] , delete h [ x ] , F [ x ] = E , T [ u ] = E ; else { if ( F [ x ] ) throw a ( T , function ( e ) { e && e . scope && ( h [ e . id ] = e ) } ) , r ( "dupes" , "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}" , p , x , M ) ; T [ u ] = { id : x , scope : void 0 , clone : void 0 } , F [ x ] = ! 0 } for ( var R in h ) { if ( E = h [ R ] , D = me ( E . clone ) , i . leave ( D ) , D [ 0 ] . parentNode ) for ( u = 0 , f = D . length ; u < f ; u ++ ) D [ u ] [ s ] = ! 0 ; E . scope . $destroy ( ) } for ( u = 0 ; u < w ; u ++ ) if ( C = o === A ? u : A [ u ] , M = o [ C ] , E = T [ u ] , E . scope ) { v = P ; do v = v . nextSibling ; while ( v && v [ s ] ) ; c ( E ) != v && i . move ( me ( E . clone ) , null , P ) , P = d ( E ) , l ( E . scope , u , y , M , b , C , w ) } else g ( function ( e , t ) { E . scope = t ; var n = m . cloneNode ( ! 1 ) ; e [ e . length ++ ] = n , i . enter ( e , null , P ) , P = n , E . clone = e , F [ E . id ] = E , l ( E . scope , u , y , M , b , C , w ) } ) ; h = F } ) } } } } ] , Os = "ng-hide" , Ls = "ng-hide-animate" , Bs = [ "$animate" , function ( e ) { return { restrict : "A" , multiElement : ! 0 , link : function ( t , n , a ) { t . $watch ( a . ngShow , function ( t ) { e [ t ? "removeClass" : "addClass" ] ( n , Os , { tempClasses : Ls } ) } ) } } } ] , js = [ "$animate" , function ( e ) { return { restrict : "A" , multiElement : ! 0 , link : function ( t , n , a ) { t . $watch ( a . ngHide , function ( t ) { e [ t ? "addClass" : "removeClass" ] ( n , Os , { tempClasses : Ls } ) } ) } } } ] , Hs = da ( function ( e , t , n ) { e . $watch ( n . ngStyle , function ( e , n ) { n && e !== n && a ( n , function ( e , n ) { t . css ( n , "" ) } ) , e && t . css ( e ) } , ! 0 ) } ) , qs = [ "$animate" , "$compile" , function ( e , t ) { return { require : "ngSwitch" , controller : [ "$scope" , function ( ) { this . cases = { } } ] , link : function ( n , i , o , s ) { var r = o . ngSwitch || o . on , l = [ ] , c = [ ] , d = [ ] , u = [ ] , p = function ( e , t ) { return function ( ) { e . splice ( t , 1 ) } } ; n . $watch ( r , function ( n ) { var i , o ; for ( i = 0 , o = d . length ; i < o ; ++ i ) e . cancel ( d [ i ] ) ; for ( d . length = 0 , i = 0 , o = u . length ; i < o ; ++ i ) { var r = me ( c [ i ] . clone ) ; u [ i ] . $destroy ( ) ; var m = d [ i ] = e . leave ( r ) ; m . then ( p ( d , i ) ) } c . length = 0 , u . length = 0 , ( l = s . cases [ "!" + n ] || s . cases [ "?" ] ) && a ( l , function ( n ) { n . transclude ( function ( a , i ) { u . push ( i ) ; var o = n . element ; a [ a . length ++ ] = t . $$createComment ( "end ngSwitchWhen" ) ; var s = { clone : a } ; c . push ( s ) , e . enter ( a , o . parent ( ) , o ) } ) } ) } ) } } } ] , Vs = da ( { transclude : "element" , priority : 1200 , require : "^ngSwitch" , multiElement : ! 0 , link : function ( e , t , n , a , i ) { a . cases [ "!" + n . ngSwitchWhen ] = a . cases [ "!" + n . ngSwitchWhen ] || [ ] , a . cases [ "!" + n . ngSwitchWhen ] . push ( { transclude : i , element : t } ) } } ) , zs = da ( { transclude : "element" , priority : 1200 , require : "^ngSwitch" , multiElement : ! 0 , link : function ( e , t , n , a , i ) { a . cases [ "?" ] = a . cases [ "?" ] || [ ] , a . cases [ "?" ] . push ( { transclude : i , element : t } ) } } ) , Ws = t ( "ngTransclude" ) , Gs = da ( { restrict : "EAC" , link : function ( e , t , n , a , i ) { function o ( e ) { e . length && ( t . empty ( ) , t . append ( e ) ) } if ( n . ngTransclude === n . $attr . ngTransclude && ( n . ngTransclude = "" ) , ! i ) throw Ws ( "orphan" , "Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}" , Z ( t ) ) ; var s = n . ngTransclude || n . ngTranscludeSlot ; i ( o , null , s ) } } ) , Ks = [ "$templateCache" , function ( e ) { return { restrict : "
function x ( ) { var e = ! 1 ; return function ( t ) { e ? t ( ) : o . $$postDigest ( function ( ) { e = ! 0 , t ( ) } ) } } function I ( e , t ) { return f ( e , t , { } ) } function A ( e , t , n ) { var a = v ( t ) , i = v ( e ) , o = [ ] , s = Q [ n ] ; return s && j ( s , function ( e ) { ie . call ( e . node , a ) ? o . push ( e . callback ) : "leave" === n && ie . call ( e . node , i ) && o . push ( e . callback ) } ) , o } function E ( e , t , n ) { var a = l ( t ) ; return e . filter ( function ( e ) { var t = e . node === a && ( ! n || e . callback === n ) ; return ! t } ) } function T ( e , t ) { "close" !== e || t [ 0 ] . parentNode || oe . off ( t ) } function D ( e , t , n ) { function a ( t , n , a , o ) { C ( function ( ) { var t = A ( h , e , n ) ; t . length ? i ( function ( ) { j ( t , function ( t ) { t ( e , a , o ) } ) , T ( a , e ) } ) : T ( a , e ) } ) , t . progress ( n , a , o ) } function l ( t ) { b ( e , w ) , ae ( e , w ) , m ( e , w ) , w . domOperation ( ) , S . complete ( ! t ) } var u , h , w = O ( n ) ; e = r ( e ) , e && ( u = v ( e ) , h = e . parent ( ) ) , w = p ( w ) ; var S = new $ , C = x ( ) ; if ( H ( w . addClass ) && ( w . addClass = w . addClass . join ( " " ) ) , w . addClass && ! q ( w . addClass ) && ( w . addClass = null ) , H ( w . removeClass ) && ( w . removeClass = w . removeClass . join ( " " ) ) , w . removeClass && ! q ( w . removeClass ) && ( w . removeClass = null ) , w . from && ! V ( w . from ) && ( w . from = null ) , w . to && ! V ( w . to ) && ( w . to = null ) , ! u ) return l ( ) , S ; var M = [ u . className , w . addClass , w . removeClass ] . join ( " " ) ; if ( ! te ( M ) ) return l ( ) , S ; var E = [ "enter" , "move" , "leave" ] . indexOf ( t ) >= 0 , D = _ [ 0 ] . hidden , N = ! X || D || Z . get ( u ) , L = ! N && G . get ( u ) || { } , B = ! ! L . state ; if ( N || B && L . state == d || ( N = ! R ( e , h , t ) ) , N ) return D && a ( S , t , "start" ) , l ( ) , D && a ( S , t , "close" ) , S ; E && P ( e ) ; var z = { structural : E , element : e , event : t , addClass : w . addClass , removeClass : w . removeClass , close : l , options : w , runner : S } ; if ( B ) { var W = s ( "skip" , e , z , L ) ; if ( W ) return L . state === g ? ( l ( ) , S ) : ( f ( e , L , z ) , L . runner ) ; var K = s ( "cancel" , e , z , L ) ; if ( K ) if ( L . state === g ) L . runner . end ( ) ; else { if ( ! L . structural ) return f ( e , L , z ) , L . runner ; L . close ( ) } else { var Y = s ( "join" , e , z , L ) ; if ( Y ) { if ( L . state !== g ) return y ( e , E ? t : null , w ) , t = z . event = L . event , w = f ( e , L , z ) , L . runner ; I ( e , z ) } } } else I ( e , z ) ; var J = z . structural ; if ( J || ( J = "animate" === z . event && Object . keys ( z . options . to || { } ) . length > 0 || c ( z ) ) , ! J ) return l ( ) , F ( e ) , S ; var Q = ( L . counter || 0 ) + 1 ; return z . counter = Q , U ( e , d , z ) , o . $$postDigest ( function ( ) { var n = G . get ( u ) , i = ! n ; n = n || { } ; var o = e . parent ( ) || [ ] , s = o . length > 0 && ( "animate" === n . event || n . structural || c ( n ) ) ; if ( i || n . counter !== Q || ! s ) return i && ( ae ( e , w ) , m ( e , w ) ) , ( i || E && n . event !== t ) && ( w . domOperation ( ) , S . end ( ) ) , void ( s || F ( e ) ) ; t = ! n . structural && c ( n , ! 0 ) ? "setClass" : n . event , U ( e , g ) ; var r = k ( e , t , n . options ) ; S . setHost ( r ) , a ( S , t , "start" , { } ) , r . done ( function ( n ) { l ( ! n ) ; var i = G . get ( u ) ; i && i . counter === Q && F ( v ( e ) ) , a ( S , t , "close" , { } ) } ) } ) , S } function P ( e ) { var t = v ( e ) , n = t . querySelectorAll ( "[" + Ie + "]" ) ; j ( n , function ( e ) { var t = parseInt ( e . getAttribute ( Ie ) ) , n = G . get ( e ) ; if ( n ) switch ( t ) { case g : n . runner . end ( ) ; case d : G . remove ( e ) } } ) } function F ( e ) { var t = v ( e ) ; t . removeAttribute ( Ie ) , G . remove ( t ) } function N ( e , t ) { return v ( e ) === v ( t ) } function R ( e , t , n ) { var a , i = B ( _ [ 0 ] . body ) , o = N ( e , i ) || "HTML" === e [ 0 ] . nodeName , s = N ( e , h ) , r = ! 1 , l = Z . get ( v ( e ) ) , c = B . data ( e [ 0 ] , Ae ) ; for ( c && ( t = c ) , t = v ( t ) ; t && ( s || ( s = N ( t , h ) ) , t . nodeType === Y ) ; ) { var d = G . get ( t ) || { } ; if ( ! r ) { var u = Z . get ( t ) ; if ( u === ! 0 && l !== ! 1 ) { l = ! 0 ; break } u === ! 1 && ( l = ! 1 ) , r = d . structural } if ( z ( a ) || a === ! 0 ) { var p = B . data ( t , ne ) ; W ( p ) && ( a = p ) } if ( r && a === ! 1 ) break ; if ( o || ( o = N ( t , i ) ) , o && s ) break ; t = s || ! ( c = B . data ( t , Ae ) ) ? t . parentNode : v ( c ) } var m = ( ! r || a ) && l !== ! 0 ; return m && s && o } function U ( e , t , n ) { n = n || { } , n . state = t ; var a = v ( e ) ; a . setAttribute ( Ie , t ) ; var i = G . get ( a ) , o = i ? L ( i , n ) : n ; G . put ( a , o ) } var G = new w , Z = new w , X = null , J = o . $watch ( function ( ) { return 0 === S . totalPendingRequests } , function ( e ) { e && ( J ( ) , o . $$postDigest ( function ( ) { o . $$postDigest ( function ( ) { null === X && ( X = ! 0 ) } ) } ) ) } ) , Q = { } , ee = a . classNameFilter ( ) , te = ee ? function ( e ) { return ee . test ( e ) } : function ( ) { return ! 0 } , ae = u ( C ) , ie = e . Node . prototype . contains || function ( e ) { return this === e || ! ! ( 16 & this . compareDocumentPosition ( e ) ) } , oe = { on : function ( e , t , n ) { var a = l ( t ) ; Q [ e ] = Q [ e ] || [ ] , Q [ e ] . push ( { node : a , callback : n } ) , B ( t ) . on ( "$destroy" , function ( ) { var i = G . get ( a ) ; i || oe . off ( e , t , n ) } ) } , off : function ( e , n , a ) { if ( 1 !== arguments . length || t . isString ( arguments [ 0 ] ) ) { var i = Q [ e ] ; i && ( Q [ e ] = 1 === arguments . length ? null : E ( i , n , a ) ) } else { n = arguments [ 0 ] ; for ( var o in Q ) Q [ o ] = E ( Q [ o ] , n ) } } , pin : function ( e , t ) { n ( K ( e ) , "element" , "not an element" ) , n ( K ( t ) , "parentElement" , "not an element" ) , e . data ( Ae , t ) } , push : function ( e , t , n , a ) { return n = n || { } , n . domOperation = a , D ( e , t , n ) } , enabled : function ( e , t ) { var n = arguments . length ; if
} ] ) , angular . module ( "template/modal/window.html" , [ ] ) . run ( [ "$templateCache" , function ( e ) { e . put ( "template/modal/window.html" , '<div tabindex="-1" role="dialog" class="modal fade" ng-class="{in: animate}" ng-style="{\'z-index\': 1050 + index*10, display: hiddenBySingle ? \'none\' : \'block\'}">\n <div class="modal_close_wrap" ng-click="close($event)">\n <div class="modal_close"></div>\n </div>\n <div class="modal-dialog" ng-class="{\'modal-sm\': size == \'sm\', \'modal-lg\': size == \'lg\'}"><div class="modal-content" modal-transclude></div></div>\n</div>' ) } ] ) , angular . module ( "mediaPlayer" , [ "mediaPlayer.helpers" ] ) . constant ( "mp.playerDefaults" , { currentTrack : 0 , ended : void 0 , network : void 0 , playing : ! 1 , seeking : ! 1 , tracks : 0 , volume : 1 , formatDuration : "00:00" , formatTime : "00:00" , loadPercent : 0 } ) . directive ( "mediaPlayer" , [ "$rootScope" , "$interpolate" , "$timeout" , "mp.throttle" , "mp.playerDefaults" , function ( e , t , n , a , i ) { function o ( e ) { return function ( t , a , i ) { var o , s = null ; if ( e . $attachPlaylist ( t ) , void 0 === t && void 0 !== a ) return e . pause ( ) ; if ( e . currentTrack ) { o = a ? a [ e . currentTrack - 1 ] : - 1 ; for ( var r = 0 ; r < t . length ; r ++ ) if ( angular . equals ( t [ r ] , o ) ) { s = r ; break } null !== s ? ( e . currentTrack = s + 1 , e . tracks = t . length ) : ( e . pause ( ) , t . length ? n ( function ( ) { e . $clearSourceList ( ) , e . $addSourceList ( t [ 0 ] ) , e . load ( ) , e . tracks = t . length } ) : e . reset ( ) ) } else t . length ? ( e . $clearSourceList ( ) , e . $addSourceList ( t [ 0 ] ) , e . load ( ) , e . tracks = t . length ) : e . reset ( ) } } var s = { load : function ( e , t ) { "boolean" == typeof e ? ( t = e , e = null ) : "object" == typeof e && ( this . $clearSourceList ( ) , this . $addSourceList ( e ) ) , this . $domEl . load ( ) , this . ended = void 0 , t && this . $element . one ( "canplay" , this . play . bind ( this ) ) } , reset : function ( e ) { angular . extend ( this , i ) , this . $clearSourceList ( ) , this . load ( this . $playlist , e ) } , play : function ( e , t ) { return "boolean" == typeof e && ( t = e , e = void 0 ) , t && ( this . $selective = ! 0 ) , this . $playlist . length > e ? ( this . currentTrack = e + 1 , this . load ( this . $playlist [ e ] , ! 0 ) ) : ( ! this . currentTrack && this . $domEl . readyState && this . currentTrack ++ , void ( this . ended ? this . load ( ! 0 ) : this . $domEl . play ( ) ) ) } , playPause : function ( e , t ) { "boolean" == typeof e && ( t = e , e = void 0 ) , t && ( this . $selective = ! 0 ) , "number" == typeof e && e + 1 !== this . currentTrack ? this . play ( e ) : this . playing ? this . pause ( ) : this . play ( ) } , pause : function ( ) { this . $domEl . pause ( ) } , stop : function ( ) { this . reset ( ) } , toggleMute : function ( ) { this . muted = this . $domEl . muted = ! this . $domEl . muted } , next : function ( e ) { var t = this ; if ( t . currentTrack && t . currentTrack < t . tracks ) { var a = e || t . playing ; t . pause ( ) , n ( function ( ) { t . $clearSourceList ( ) , t . $addSourceList ( t . $playlist [ t . currentTrack ] ) , t . load ( a ) , t . currentTrack ++ } ) } } , prev : function ( e ) { var t = this ; if ( t . currentTrack && t . currentTrack - 1 ) { var a = e || t . playing ; t . pause ( ) , n ( function ( ) { t . $clearSourceList ( ) , t . $addSourceList ( t . $playlist [ t . currentTrack - 2 ] ) , t . load ( a ) , t . currentTrack -- } ) } } , setPlaybackRate : function ( e ) { this . $domEl . playbackRate = e } , setVolume : function ( e ) { this . $domEl . volume = e } , seek : function ( e ) { var t , n = 0 ; return "string" != typeof e ? this . $domEl . currentTime = e : ( t = e . split ( ":" ) , n += parseInt ( t . pop ( ) , 10 ) , t . length && ( n += 60 * parseInt ( t . pop ( ) , 10 ) ) , t . length && ( n += 3600 * parseInt ( t . pop ( ) , 10 ) ) , isNaN ( n ) ? void 0 : this . $domEl . currentTime = n ) } , on : function ( e , t ) { return this . $element . on ( e , t ) } , off : function ( e , t ) { return this . $element . off ( e , t ) } , one : function ( e , t ) { return this . $element . one ( e , t ) } , $addSourceList : function ( e ) { var t = this ; if ( angular . isArray ( e ) ) angular . forEach ( e , function ( e , n ) { var a = document . createElement ( "SOURCE" ) ; [ "src" , "type" , "media" ] . forEach ( function ( t ) { void 0 !== e [ t ] && a . setAttribute ( t , e [ t ] ) } ) , t . $element . append ( a ) } ) ; else if ( angular . isObject ( e ) ) { var n = document . createElement ( "SOURCE" ) ; [ "src" , "type" , "media" ] . forEach ( function ( t ) { void 0 !== e [ t ] && n . setAttribute ( t , e [ t ] ) } ) , t . $element . append ( n ) } } , $clearSourceList : function ( ) { this . $element . contents ( ) . remove ( ) } , $formatTime : function ( e ) { if ( e === 1 / 0 ) return "∞" ; var t , n = parseInt ( e / 3600 , 10 ) % 24 , a = parseInt ( e / 60 , 10 ) % 60 , i = parseInt ( e % 60 , 10 ) , o = ( a < 10 ? "0" + a : a ) + ":" + ( i < 10 ? "0" + i : i ) ; return t = n > 0 ? ( n < 10 ? "0" + n : n ) + ":" + o : o } , $attachPlaylist : function ( e ) { void 0 === e || null === e ? this . playlist = [ ] : this . $playlist = e } } , r = function ( e , t , n ) { var i = { playing : function ( ) { e . $apply ( function ( e ) { e . playing = ! 0 , e . ended = ! 1 } ) } , pause : function ( ) { e . $apply ( funct
a . prototype . getName = function ( ) { return this . name } , a . prototype . getData = function ( ) { return this . data } , a . prototype . G = function ( ) { return this . H } , t ( "Zlib.GunzipMember" , a ) , t ( "Zlib.GunzipMember.prototype.getName" , a . prototype . getName ) , t ( "Zlib.GunzipMember.prototype.getData" , a . prototype . getData ) , t ( "Zlib.GunzipMember.prototype.getMtime" , a . prototype . G ) ; var v , y = [ ] ; for ( v = 0 ; 288 > v ; v ++ ) switch ( ! 0 ) { case 143 >= v : y . push ( [ v + 48 , 8 ] ) ; break ; case 255 >= v : y . push ( [ v - 144 + 400 , 9 ] ) ; break ; case 279 >= v : y . push ( [ v - 256 + 0 , 7 ] ) ; break ; case 287 >= v : y . push ( [ v - 280 + 192 , 8 ] ) ; break ; default : e ( "invalid literal: " + v ) } var b = function ( ) { function t ( t ) { switch ( ! 0 ) { case 3 === t : return [ 257 , t - 3 , 0 ] ; case 4 === t : return [ 258 , t - 4 , 0 ] ; case 5 === t : return [ 259 , t - 5 , 0 ] ; case 6 === t : return [ 260 , t - 6 , 0 ] ; case 7 === t : return [ 261 , t - 7 , 0 ] ; case 8 === t : return [ 262 , t - 8 , 0 ] ; case 9 === t : return [ 263 , t - 9 , 0 ] ; case 10 === t : return [ 264 , t - 10 , 0 ] ; case 12 >= t : return [ 265 , t - 11 , 1 ] ; case 14 >= t : return [ 266 , t - 13 , 1 ] ; case 16 >= t : return [ 267 , t - 15 , 1 ] ; case 18 >= t : return [ 268 , t - 17 , 1 ] ; case 22 >= t : return [ 269 , t - 19 , 2 ] ; case 26 >= t : return [ 270 , t - 23 , 2 ] ; case 30 >= t : return [ 271 , t - 27 , 2 ] ; case 34 >= t : return [ 272 , t - 31 , 2 ] ; case 42 >= t : return [ 273 , t - 35 , 3 ] ; case 50 >= t : return [ 274 , t - 43 , 3 ] ; case 58 >= t : return [ 275 , t - 51 , 3 ] ; case 66 >= t : return [ 276 , t - 59 , 3 ] ; case 82 >= t : return [ 277 , t - 67 , 4 ] ; case 98 >= t : return [ 278 , t - 83 , 4 ] ; case 114 >= t : return [ 279 , t - 99 , 4 ] ; case 130 >= t : return [ 280 , t - 115 , 4 ] ; case 162 >= t : return [ 281 , t - 131 , 5 ] ; case 194 >= t : return [ 282 , t - 163 , 5 ] ; case 226 >= t : return [ 283 , t - 195 , 5 ] ; case 257 >= t : return [ 284 , t - 227 , 5 ] ; case 258 === t : return [ 285 , t - 258 , 0 ] ; default : e ( "invalid length: " + t ) } } var n , a , i = [ ] ; for ( n = 3 ; 258 >= n ; n ++ ) a = t ( n ) , i [ n ] = a [ 2 ] << 24 | a [ 1 ] << 16 | a [ 0 ] ; return i } ( ) ; p && new Uint32Array ( b ) ; var w = 0 , k = 1 ; o . prototype . g = function ( ) { for ( ; ! this . o ; ) { var t = s ( this , 3 ) ; switch ( 1 & t && ( this . o = ! 0 ) , t >>>= 1 ) { case 0 : var n = this . input , a = this . c , i = this . b , o = this . a , r = d , c = d , u = d , m = i . length , g = d ; switch ( this . d = this . f = 0 , r = n [ a ++ ] , r === d && e ( Error ( "invalid uncompressed block header: LEN (first byte)" ) ) , c = r , r = n [ a ++ ] , r === d && e ( Error ( "invalid uncompressed block header: LEN (second byte)" ) ) , c |= r << 8 , r = n [ a ++ ] , r === d && e ( Error ( "invalid uncompressed block header: NLEN (first byte)" ) ) , u = r , r = n [ a ++ ] , r === d && e ( Error ( "invalid uncompressed block header: NLEN (second byte)" ) ) , u |= r << 8 , c === ~ u && e ( Error ( "invalid uncompressed block header: length verify" ) ) , a + c > n . length && e ( Error ( "input buffer is broken" ) ) , this . k ) { case w : for ( ; o + c > i . length ; ) { if ( g = m - o , c -= g , p ) i . set ( n . subarray ( a , a + g ) , o ) , o += g , a += g ; else for ( ; g -- ; ) i [ o ++ ] = n [ a ++ ] ; this . a = o , i = this . e ( ) , o = this . a } break ; case k : for ( ; o + c > i . length ; ) i = this . e ( { t : 2 } ) ; break ; default : e ( Error ( "invalid inflate mode" ) ) } if ( p ) i . set ( n . subarray ( a , a + c ) , o ) , o += c , a += c ; else for ( ; c -- ; ) i [ o ++ ] = n [ a ++ ] ; this . c = a , this . a = o , this . b = i ; break ; case 1 : this . l ( O , B ) ; break ; case 2 : l ( this ) ; break ; default : e ( Error ( "unknown BTYPE: " + t ) ) } } return this . q ( ) } ; var $ , S , C = [ 16 , 17 , 18 , 0 , 8 , 7 , 9 , 6 , 10 , 5 , 11 , 4 , 12 , 3 , 13 , 2 , 14 , 1 , 15 ] , M = p ? new Uint16Array ( C ) : C , x = [ 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 13 , 15 , 17 , 19 , 23 , 27 , 31 , 35 , 43 , 51 , 59 , 67 , 83 , 99 , 115 , 131 , 163 , 195 , 227 , 258 , 258 , 258 ] , I = p ? new Uint16Array ( x ) : x , A = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 0 , 0 , 0 ] , E = p ? new Uint8Array ( A ) : A , T = [ 1 , 2 , 3 , 4 , 5 , 7 , 9 , 13 , 17 , 25 , 33 , 49 , 65 , 97 , 129 , 193 , 257 , 385 , 513 , 769 , 1025 , 1537 , 2049 , 3073 , 4097 , 6145 , 8193 , 12289 , 16385 , 24577 ] , D = p ? new Uint16Array ( T ) : T , P = [ 0 , 0 , 0 , 0 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , 9 , 10 , 10 , 11 , 11 , 12 , 12 , 13 , 13 ] , F = p ? new Uint8Array ( P ) : P , N = new ( p ? Uint8Array : Array ) ( 288 ) ; for ( $ = 0 , S = N . length ; $ < S ; ++ $ ) N [ $ ] = 143 >= $ ? 8 : 255 >= $ ? 9 : 279 >= $ ? 7 : 8 ; var R , U , O = i ( N ) , L = new ( p ? Uint8Array : Array ) ( 30 ) ; for ( R = 0 , U = L . length ; R < U ; ++ R ) L [ R ] = 5 ; var B = i ( L ) ; o . prototype . l = function ( e , t ) { var n = this . b , a = this . a ; this . r = e ; for ( var i , o , l , c , d = n . length - 258 ; 256 !== ( i = r ( this , e ) ) ; ) if ( 256 > i ) a >= d && ( this . a = a , n = this . e ( ) , a = this . a ) , n [ a ++ ] = i ; else for ( o = i - 257 , c = I [ o ] , 0 < E [ o ] && ( c += s ( this , E [ o ] ) ) , i = r ( this , t ) , l = D [ i ] , 0 < F [ i ] && ( l += s ( this , F [ i ] ) ) , a >= d && ( this . a = a , n = this . e ( ) , a = this . a ) ; c -- ; ) n [ a ] = n [ a ++ - l ] ; for ( ; 8 <= this . d ; ) this . d -= 8 , this . c -- ; this . a = a } , o . prototype . C = function ( e , t ) { var n = this . b , a = this . a ; this . r = e ; for ( var i , o , l , c , d = n . length ; 256 !== ( i = r ( this , e ) ) ; ) if ( 256 > i ) a >= d && ( n = this . e ( ) , d = n . length ) , n [ a ++ ] = i ; else for ( o = i - 257 , c = I [ o ] , 0 < E [ o ] && ( c += s ( this , E [ o ] ) ) , i = r ( this , t ) , l = D [ i ] , 0 < F [ i ] && ( l += s ( this , F [ i ] ) ) , a + c > d && ( n = this . e ( ) , d = n . length ) ; c
Te [ 2 * Oe + Ue ] = ( 1 < Qe ) + 0 , Ae [ Ae . length - 1 ] += 16 ; Fe [ Le + Oe ] = Je } Re |= ke ( De , 8 - 2 * Le ) , Ne |= ke ( Te , 8 - 2 * Le ) } $e |= ke ( Pe , 20 ) , Ce |= ke ( Fe , 20 ) , Y . X = $e , Ee . X = Ce , j . z = Ae , j . Oa = Ne + 0 , j . ja = Ne | Re , Y . Nb = ! j . ja + 0 } B = ! H . Ab } if ( ! B ) { l = ye ( e , "VP8_STATUS_NOT_ENOUGH_DATA" , "Premature end-of-file encountered." + e . i + " " + e . d ) ; break e } var et = e , tt = et . Ea , nt = ga , at = et . Ea , it = ha , ot = et . Ea , st = fa ; if ( 0 < et . i ) { for ( var rt = m , rt = - 1 ; 16 > rt ; ++ rt ) he ( tt , nt + rt * pa - 4 , tt , nt + rt * pa + 12 ) ; for ( rt = - 1 ; 8 > rt ; ++ rt ) he ( at , it + rt * pa - 4 , at , it + rt * pa + 4 ) , he ( ot , st + rt * pa - 4 , ot , st + rt * pa + 4 ) } else { for ( rt = 0 ; 16 > rt ; ++ rt ) tt [ nt + rt * pa - 1 ] = 129 ; for ( rt = 0 ; 8 > rt ; ++ rt ) at [ it + rt * pa - 1 ] = 129 , ot [ st + rt * pa - 1 ] = 129 ; 0 < et . d && ( tt [ nt - 1 - pa ] = at [ it - 1 - pa ] = ot [ st - 1 - pa ] = 129 ) } var lt = et . Xc , ct = 16 * + et . i , dt = et . Sc , ut = 8 * + et . i , pt = et . Vc , mt = 8 * + et . i , gt = et . z , ht = m ; if ( 0 < et . d ) t ( tt , nt - pa , lt , ct , 16 ) , t ( at , it - pa , dt , ut , 8 ) , t ( ot , st - pa , pt , mt , 8 ) ; else if ( 0 == et . i ) { for ( i = 0 ; 21 > i ; ++ i ) tt [ nt - pa - 1 + i ] = 127 ; for ( i = 0 ; 9 > i ; ++ i ) at [ it - pa - 1 + i ] = 127 ; for ( i = 0 ; 9 > i ; ++ i ) ot [ st - pa - 1 + i ] = 127 } if ( et . wa ) { var ft = nt - pa + 16 ; 0 < et . d && ( et . i >= et . Ma - 1 ? tt [ ft + 0 ] = tt [ ft + 1 ] = tt [ ft + 2 ] = tt [ ft + 3 ] = lt [ ct + 15 ] : t ( tt , ft + 0 , lt , ct + 16 , 4 ) ) ; for ( var _t = 0 ; 4 > _t ; ++ _t ) tt [ _t + ft + 4 * pa ] = tt [ _t + ft + 4 * pa ] = tt [ _t + ft + 8 * pa ] = tt [ _t + ft + 12 * pa ] = tt [ _t + ft + 0 ] ; for ( ht = 0 ; 16 > ht ; ht ++ ) { var vt = tt , yt = nt + hi [ ht ] ; li [ et . Eb [ ht ] ] ( vt , yt ) , et . Oa & 1 << ht ? Oa ( gt , 16 * + ht , vt , yt , 0 ) : et . ja & 1 << ht && Ba ( gt , 16 * + ht , vt , yt ) } } else { var bt = ge ( et , et . Eb [ 0 ] ) ; if ( ci [ bt ] ( tt , nt ) , et . ja ) for ( ht = 0 ; 16 > ht ; ht ++ ) vt = tt , yt = nt + hi [ ht ] , et . Oa & 1 << ht ? Oa ( gt , 16 * + ht , vt , yt , 0 ) : et . ja & 1 << ht && Ba ( gt , 16 * + ht , vt , yt ) } if ( bt = ge ( et , et . Tc ) , di [ bt ] ( at , it ) , di [ bt ] ( ot , st ) , 983040 & et . ja ) { var wt = et . z , kt = 256 ; 983040 & et . Oa ? La ( wt , kt , at , it ) : ja ( wt , kt , at , it ) } if ( 15728640 & et . ja ) { var $t = et . z , kt = 320 ; 15728640 & et . Oa ? La ( $t , kt , ot , st ) : ja ( $t , kt , ot , st ) } et . d < et . hb - 1 && ( t ( lt , ct , tt , nt + 15 * pa , 16 ) , t ( dt , ut , at , it + 7 * pa , 8 ) , t ( pt , mt , ot , st + 7 * pa , 8 ) ) ; var St = e ; if ( 0 < St . A ) { var Ct = St . M [ 1 + St . i ] , Mt = St . La [ 1 + St . i ] . Nb , xt = St . Zb [ St . Lb ] ; St . ga . oc && ( xt += St . ga . Lc [ 0 ] , St . wa && ( xt += St . ga . Gc [ 0 ] ) ) , xt = 0 > xt ? 0 : 63 < xt ? 63 : xt , Ct . zc = xt , 0 < St . ga . kb && ( xt = 4 < St . ga . kb ? xt >> 2 : xt >> 1 , xt > 9 - St . ga . kb && ( xt = 9 - St . ga . kb ) ) , Ct . yc = 1 > xt ? 1 : xt , Ct . ab = ( ! Mt || St . wa ) + 0 } for ( var It = m , At = 8 * St . Ja * St . r , Et = St . ca , Tt = St . da + 16 * St . i + 16 * St . Ja * St . H , Dt = St . aa , Pt = St . ba + 8 * St . i + At , Ft = St . ra , Nt = St . sa + 8 * St . i + At , It = 0 ; 16 > It ; ++ It ) t ( Et , Tt + It * St . H , St . Ea , + ga + It * pa , 16 ) ; for ( It = 0 ; 8 > It ; ++ It ) t ( Dt , Pt + It * St . r , St . Ea , + ha + It * pa , 8 ) , t ( Ft , Nt + It * St . r , St . Ea , + fa + It * pa , 8 ) } var Rt = e , Ut = s , Ot = 1 , Lt = Rt . oa ; if ( Rt . qb ) { var Bt = Rt . rc , Ot = Ot & WebPWorkerSync ( Bt ) ; if ( p ( Bt . a == OK ) , Ot ) { if ( Lt . N = Ut , Lt . ha = Rt . Ja , Lt . d = Rt . d , Lt . W = Rt . W , Lt . W ) { var jt = Lt . M ; Lt . M = Rt . M , Rt . M = jt } WebPWorkerLaunch ( Bt ) , ++ Rt . Ja == Rt . jb && ( Rt . Ja = 0 ) } } else { Lt . d = Rt . d , Lt . W = Rt . W ; t : { var Ht = 1 , qt = Rt . oa , Vt = pi [ Rt . A ] , zt = Vt * Rt . H , Wt = parseInt ( Vt / 2 ) * Rt . r , Gt = 16 * qt . ha * Rt . H , Kt = 8 * qt . ha * Rt . r , Yt = Rt . ca , Zt = Rt . da - zt + Gt , Xt = Rt . aa , Jt = Rt . ba - Wt + Kt , tn = Rt . ra , an = Rt . sa - Wt + Kt , on = 0 == qt . d , rn = ( qt . d >= Rt . hb - 1 ) + 0 , ln = 16 * qt . d , cn = 16 * ( qt . d + 1 ) ; if ( qt . W ) { var dn = Rt , un = h , pn = dn . oa . d ; for ( p ( dn . oa . W ) , un = dn . lb ; un < dn . wb ; ++ un ) { var mn = dn , gn = un , hn = pn , fn = mn . oa , _n = mn . H , vn = fn . M [ 1 + gn ] , yn = mn . ca , bn = mn . da + 16 * fn . ha * _n + 16 * gn , wn = vn . zc , kn = vn . yc , $n = 2 * wn + kn ; if ( 0 != wn ) if ( 1 == mn . A ) 0 < gn && Xa ( yn , bn , _n , $n + 4 ) , vn . ab && Qa ( yn , bn , _n , $n ) , 0 < hn && Za ( yn , bn , _n , $n + 4 ) , vn . ab && Ja ( yn , bn , _n , $n ) ; else { var Sn = mn . r , Cn = mn . aa , Mn = mn . ba + 8 * fn . ha * Sn + 8 * gn , xn = mn . ra , In = mn . sa + 8 * fn . ha * Sn + 8 * gn , An = mn . Ac . fb ? 40 <= wn ? 2 : 15 <= wn ? 1 : 0 : 40 <= wn ? 3 : 20 <= wn ? 2 : 15 <= wn ? 1 : 0 ; 0 < gn && ( qa ( yn , bn , _n , $n + 4 , kn , An ) , za ( Cn , Mn , xn , In , Sn , $n + 4 , kn , An ) ) , vn . ab && ( Ga ( yn , bn , _n , $n , kn , An ) , Ya ( Cn , Mn , xn , In , Sn , $n , kn , An ) ) , 0 < hn && ( Ha ( yn , bn , _n , $n + 4 , kn , An ) , Va ( Cn , Mn , xn , In , Sn , $n + 4 , kn , An ) ) , vn . ab && ( Wa ( yn , bn , _n , $n , kn , An ) , Ka ( Cn , Mn , xn , In , Sn , $n , kn , An ) ) } } } if ( Ut . put ) { if ( on ? ( Ut . y = Rt . ca , Ut . D = Rt . da + Gt , Ut . c = Rt . aa , Ut . B = Rt . ba + Kt , Ut . S = Rt . ra , Ut . C = Rt . sa + Kt ) : ( ln -= Vt , Ut . y = Yt , Ut . D = Zt , Ut . c = Xt , Ut . B = Jt , Ut . S = tn , Ut . C = an ) , rn || ( cn -= Vt ) , cn > Ut . K && ( cn = Ut . K ) , Rt . Ga != g && ln < cn && ( 0 == ln ? ( Ut . p = U ( Rt , ln , cn - ln ) , Ut . q = 0 ) : Ut . q = U ( Rt , ln , cn - ln ) , Ut . p == g ) ) { Ot = ye ( Rt , nn , "Could not decode alpha data." ) ; break t } if ( ln < Ut . k ) { var En = Ut . k - ln , ln = Ut . k ; p ( ! ( 1 & En ) ) , Ut . D += Rt . H * En , Ut . B += Rt . r * ( En >> 1 ) , Ut . C += Rt . r * ( En >> 1 ) , Ut . p != g && ( Ut . q += Ut . width * En ) } ln < cn && ( Ut . D += Ut . t , Ut . B += Ut . t >> 1 , Ut . C += Ut . t >> 1 , Ut . p != g && ( Ut . q += Ut . t ) , Ut . w = ln - Ut . k , Ut . m = Ut . Ka - Ut . t , Ut . h = cn - ln , Ht = Ut . put ( Ut ) ) } qt . ha + 1 == Rt . jb && ! rn && ( t ( Rt . ca , Rt . da - zt , Yt , Zt + 16 * Rt . H , zt ) , t ( Rt . aa , Rt . ba - Wt , Xt , Jt + 8 * Rt . r , Wt ) , t ( Rt . ra , Rt . sa - W
this . WebPGetDecoderVersion = this . Ld = function ( ) { return 512 } ; var ki = [ 0 , 1 , 2 , 3 , 6 , 4 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 0 ] , $i = [ [ 173 , 148 , 140 , 0 ] , [ 176 , 155 , 140 , 135 , 0 ] , [ 180 , 157 , 141 , 134 , 130 , 0 ] , [ 254 , 254 , 243 , 230 , 196 , 177 , 153 , 140 , 133 , 130 , 129 , 0 ] ] , Si = [ 0 , 1 , 4 , 8 , 5 , 2 , 3 , 6 , 9 , 12 , 13 , 10 , 7 , 11 , 14 , 15 ] , Ci = u ( [ da , ua ] , "" ) ; c ( 4 , f ) ; var Mi = [ [ 0 , 0 , 0 , 0 ] , [ 1 , 0 , 0 , 0 ] , [ 0 , 1 , 0 , 0 ] , [ 1 , 1 , 0 , 0 ] , [ 0 , 0 , 1 , 0 ] , [ 1 , 0 , 1 , 0 ] , [ 0 , 1 , 1 , 0 ] , [ 1 , 1 , 1 , 0 ] , [ 0 , 0 , 0 , 1 ] , [ 1 , 0 , 0 , 1 ] , [ 0 , 1 , 0 , 1 ] , [ 1 , 1 , 0 , 1 ] , [ 0 , 0 , 1 , 1 ] , [ 1 , 0 , 1 , 1 ] , [ 0 , 1 , 1 , 1 ] , [ 1 , 1 , 1 , 1 ] ] , xi = 134480385 , Ii = 16 , Ai = - 227 , Ei = 482 , Ti = [ Ue , function ( e ) { return e } , function ( e , t , n ) { return t [ n + 0 ] } , function ( e , t , n ) { return t [ n + 1 ] } , function ( e , t , n ) { return t [ n - 1 ] } , function ( e , t , n ) { return Fe ( Fe ( e , t [ n + 1 ] ) , t [ n + 0 ] ) } , function ( e , t , n ) { return Fe ( e , t [ n - 1 ] ) } , function ( e , t , n ) { return Fe ( e , t [ n + 0 ] ) } , function ( e , t , n ) { return Fe ( t [ n - 1 ] , t [ n + 0 ] ) } , function ( e , t , n ) { return Fe ( t [ n + 0 ] , t [ n + 1 ] ) } , function ( e , t , n ) { return Fe ( Fe ( e , t [ n - 1 ] ) , Fe ( t [ n + 0 ] , t [ n + 1 ] ) ) } , function ( e , t , n ) { return 0 >= Math . abs ( ( e >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) - Math . abs ( ( t [ n + 0 ] >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) + ( Math . abs ( ( e >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) - Math . abs ( ( t [ n + 0 ] >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) ) + ( Math . abs ( ( e >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) - Math . abs ( ( t [ n + 0 ] >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) ) + ( Math . abs ( ( 255 & e ) - ( 255 & t [ n - 1 ] ) ) - Math . abs ( ( 255 & t [ n + 0 ] ) - ( 255 & t [ n - 1 ] ) ) ) ? t [ n + 0 ] : e } , function ( e , t , n ) { return ( Ne ( ( e >> 24 & 255 ) + ( t [ n + 0 ] >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) << 24 | Ne ( ( e >> 16 & 255 ) + ( t [ n + 0 ] >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) << 16 | Ne ( ( e >> 8 & 255 ) + ( t [ n + 0 ] >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) << 8 | Ne ( ( 255 & e ) + ( 255 & t [ n + 0 ] ) - ( 255 & t [ n - 1 ] ) ) ) >>> 0 } , function ( e , t , n ) { var a = t [ n - 1 ] ; return e = Fe ( e , t [ n + 0 ] ) , ( Re ( e >> 24 & 255 , a >> 24 & 255 ) << 24 | Re ( e >> 16 & 255 , a >> 16 & 255 ) << 16 | Re ( e >> 8 & 255 , a >> 8 & 255 ) << 8 | Re ( e >> 0 & 255 , a >> 0 & 255 ) ) >>> 0 } , Ue , Ue ] , Di = { Cc : f , Bc : f , Kc : f } , Pi = 16 , Fi = 16 , Ni = 16 , Ri = [ 2 , 3 , 7 ] , Ui = [ 3 , 3 , 11 ] , Oi = 0 , Li = 1 , Bi = 2 , ji = 3 , Hi = 4 , qi = [ xn + In , xn , xn , xn , 40 ] , Vi = 19 , zi = [ 17 , 18 , 0 , 1 , 2 , 3 , 4 , 5 , 16 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ] , Wi = 120 , Gi = [ 24 , 7 , 23 , 25 , 40 , 6 , 39 , 41 , 22 , 26 , 38 , 42 , 56 , 5 , 55 , 57 , 21 , 27 , 54 , 58 , 37 , 43 , 72 , 4 , 71 , 73 , 20 , 28 , 53 , 59 , 70 , 74 , 36 , 44 , 88 , 69 , 75 , 52 , 60 , 3 , 87 , 89 , 19 , 29 , 86 , 90 , 35 , 45 , 68 , 76 , 85 , 91 , 51 , 61 , 104 , 2 , 103 , 105 , 18 , 30 , 102 , 106 , 34 , 46 , 84 , 92 , 67 , 77 , 101 , 107 , 50 , 62 , 120 , 1 , 119 , 121 , 83 , 93 , 17 , 31 , 100 , 108 , 66 , 78 , 118 , 122 , 33 , 47 , 117 , 123 , 49 , 63 , 99 , 109 , 82 , 94 , 0 , 116 , 124 , 65 , 79 , 16 , 32 , 98 , 110 , 48 , 115 , 125 , 81 , 95 , 64 , 114 , 126 , 97 , 111 , 80 , 113 , 127 , 96 , 112 ] , Ki = 1 << Ii - 1 , Yi = c ( 256 , 0 ) , Zi = c ( 256 , 0 ) , Xi = c ( 256 , _ ) , Ji = c ( 256 , _ ) , Qi = c ( Ei - Ai , f ) , eo = c ( Ei - Ai , f ) , to = 0 , no = Array ( Xt ) , ao = [ function ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , Me , 3 ) } , gt , function ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , Ee , 3 ) } , ht , ft , _t , function ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , xe , 2 ) } , gt , ht , ft , _t ] ; this . Hd = function ( e , t , n , a ) { return Ft ( Ot , e , t , n , a ) } , this . Id = function ( e , t , n , a ) { return Ft ( Lt , e , t , n , a ) } , this . Jd = function ( e , t , n , a ) { return Ft ( qt , e , t , n , a ) } , this . Ed = function ( e , t , n , a ) { return Ft ( Ht , e , t , n , a ) } , this . Fd = function ( e , t , n , a ) { return Ft ( Bt , e , t , n , a ) } , this . Gd = function ( e , t , n , a ) { return Ft ( jt , e , t , n , a ) } , this . WebPDecode = this . Dd = function ( t , n , a ) { var i = e ( un ) , o = "VP8StatusCode" ; return a == g ? tn : ( o = Nt ( t , [ 0 ] , [ n ] , a . input ) , o != Qt ? o == rn ? nn : o : ( i . j = a . j , i . Qa = a . Qa , o = Pt ( t , 0 , [ n ] , i ) ) ) } } } ( ) , function ( e , t ) { "use strict" ; angular . module ( "toaster" , [ ] ) . constant ( "toasterConfig" , { limit : 0 , "tap-to-dismiss" : ! 0 , "close-button" : ! 1 , "close-html" : '<button class="toast-close-button" type="button">×</button>' , "newest-on-top" : ! 0 , "time-out" : 5e3 , "icon-classes" : { error : "toast-error" , info : "toast-info" , wait : "toast-wait" , success : "toast-success" , warning : "toast-warning" } , "body-output-type" : "" , "body-template" : "toasterBodyTmpl.html" , "icon-class" : "toast-info" , "position-class" : "toast-top-right" , "title-class" : "toast-title" , "message-class" : "toast-message" , "prevent-duplicates" : ! 1 , "mouseover-timer-stop" : ! 0 } ) . service ( "toaster" , [ "$rootScope" , "toasterConfig" , function ( e , t ) { function n ( e ) { return function ( t , n , a , i , o , s , r , l , c ) { return angular . isString ( t ) ? this . pop ( e , t , n , a , i , o , s , r , l , c ) : this . pop ( angular . extend ( t , { type : e } ) ) } } var a = function ( ) { var e = { } ; return e . newGuid = function ( ) { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx" . replace ( /[xy]/g , function ( e ) { var t = 16 * Math . random ( ) | 0 , n = "x" == e ? t : 3 & t | 8 ; return n . toString ( 16 ) } ) } , e } ( ) ; this . pop = function ( t , n , i , o , s , r , l , c , d , u ) { if ( angular . isObject ( t ) ) { var p = t ; this . toast = { type : p . type , title : p
g = p . constructors [ u ] ; break } if ( ! g ) throw new Error ( "Constructor not found for predicate: " + e ) } else { var n = this . readInt ( t + "[id]" ) , a = uintToInt ( n ) ; if ( 812830625 == a ) { var i = this . fetchBytes ( t + "[packed_string]" ) , o = gzipUncompress ( i ) , s = bytesToArrayBuffer ( o ) , r = new TLDeserialization ( s ) ; return r . fetchObject ( e , t ) } var f = p . constructorsIndex ; if ( ! f ) { p . constructorsIndex = f = { } ; for ( var u = 0 ; u < p . constructors . length ; u ++ ) f [ p . constructors [ u ] . id ] = u } var u = f [ a ] ; u && ( g = p . constructors [ u ] ) ; var _ = ! 1 ; if ( ! g && this . mtproto ) { var v = Config . Schema . API ; for ( u = 0 ; u < v . constructors . length ; u ++ ) if ( v . constructors [ u ] . id == a ) { g = v . constructors [ u ] , delete this . mtproto , _ = ! 0 ; break } } if ( ! g ) throw new Error ( "Constructor not found: " + n + " " + this . fetchInt ( ) + " " + this . fetchInt ( ) ) } m = g . predicate ; var c = { _ : m } , y = ( this . mtproto ? "mt_" : "" ) + m , b = this ; if ( this . override [ y ] ) this . override [ y ] . apply ( this , [ c , t + "[" + m + "]" ] ) ; else { var u , w , e , k , $ , S , C , l = g . params . length ; for ( u = 0 ; u < l ; u ++ ) { if ( w = g . params [ u ] , e = w . type , "#" == e && void 0 === c . pFlags && ( c . pFlags = { } ) , k = e . indexOf ( "?" ) !== - 1 ) { if ( $ = e . split ( "?" ) , S = $ [ 0 ] . split ( "." ) , ! ( c [ S [ 0 ] ] & 1 << S [ 1 ] ) ) continue ; e = $ [ 1 ] } C = b . fetchObject ( e , t + "[" + m + "][" + w . name + "]" ) , k && "true" === e ? c . pFlags [ w . name ] = C : c [ w . name ] = C } } return _ && ( this . mtproto = ! 0 ) , c } , TLDeserialization . prototype . getOffset = function ( ) { return this . offset } , TLDeserialization . prototype . fetchEnd = function ( ) { if ( this . offset != this . byteView . length ) throw new Error ( "Fetch end with non-empty buffer" ) ; return ! 0 } , angular . module ( "izhukov.utils" , [ ] ) . provider ( "Storage" , function ( ) { this . setPrefix = function ( e ) { ConfigStorage . prefix ( e ) } , this . $get = [ "$q" , function ( e ) { var t = { } ; return angular . forEach ( [ "get" , "set" , "remove" , "clear" ] , function ( n ) { t [ n ] = function ( ) { var t = e . defer ( ) , a = Array . prototype . slice . call ( arguments ) ; return a . push ( function ( e ) { t . resolve ( e ) } ) , ConfigStorage [ n ] . apply ( ConfigStorage , a ) , t . promise } } ) , t . noPrefix = function ( ) { ConfigStorage . noPrefix ( ) } , t } ] } ) . service ( "qSync" , function ( ) { return { when : function ( e ) { return { then : function ( t ) { return t ( e ) } } } , reject : function ( e ) { return { then : function ( t , n ) { if ( n ) return n ( e ) } } } } } ) . service ( "FileManager" , [ "$window" , "$q" , "$timeout" , "qSync" , function ( e , t , n , a ) { function i ( ) { return f } function o ( e , n ) { return l ( n ) . then ( function ( n ) { return s ( n , e ) . then ( function ( ) { return n } , function ( e ) { try { n . truncate ( 0 ) } catch ( a ) { } return t . reject ( e ) } ) } ) } function s ( e , n ) { var a = t . defer ( ) ; if ( e . onwriteend = function ( e ) { a . resolve ( ) } , e . onerror = function ( e ) { a . reject ( e ) } , n . file ) n . file ( function ( t ) { e . write ( t ) } , function ( e ) { a . reject ( e ) } ) ; else if ( n instanceof Blob ) e . write ( n ) ; else try { var i = blobConstruct ( [ bytesToArrayBuffer ( n ) ] ) ; e . write ( i ) } catch ( o ) { a . reject ( o ) } return a . promise } function r ( n , i , o ) { if ( ! e . chrome || ! chrome . fileSystem || ! chrome . fileSystem . chooseEntry ) return a . reject ( ) ; var s = t . defer ( ) ; return chrome . fileSystem . chooseEntry ( { type : "saveFile" , suggestedName : n , accepts : [ { mimeTypes : [ o ] , extensions : [ i ] } ] } , function ( e ) { s . resolve ( e ) } ) , s . promise } function l ( e ) { var n = t . defer ( ) ; return e . createWriter ( function ( e ) { n . resolve ( e ) } , function ( e ) { n . reject ( e ) } ) , n . promise } function c ( e , t ) { var n = [ ] , a = { write : function ( e ) { return f ? ( n . push ( e ) , void setZeroTimeout ( function ( ) { a . onwriteend && a . onwriteend ( ) } ) ) : ( a . onerror && a . onerror ( new Error ( "Blob not supported by browser" ) ) , ! 1 ) } , truncate : function ( ) { n = [ ] } , finalize : function ( ) { var a = blobConstruct ( n , e ) ; return t && t ( a ) , a } } ; return a } function d ( e , t ) { return void 0 !== e . toURL ? e . toURL ( t ) : e instanceof Blob ? URL . createObjectURL ( e ) : "data:" + t + ";base64," + bytesToBase64 ( e ) } function u ( e ) { if ( e instanceof Blob ) { var n = t . defer ( ) ; try { var a = new FileReader ; return a . onloadend = function ( e ) { n . resolve ( new Uint8Array ( e . target . result ) ) } , a . onerror = function ( e ) { n . reject ( e ) } , a . readAsArrayBuffer ( e ) , n . promise } catch ( i ) { return t . reject ( i ) } } else if ( e . file ) { var n = t . defer ( ) ; return e . file ( function ( e ) { u ( e ) . then ( function ( e ) { n . resolve ( e ) } , function ( e ) { n . reject ( e ) } ) } , function ( e ) { n . reject ( e ) } ) , n . promise } return t . when ( e ) } function p ( e ) { var n ; try { var a = new FileReader ; a . onloadend = function ( ) { n . resolve ( a . result ) } , a . readAsDataURL ( e ) } catch ( i ) { return t . reject ( i ) } return n = t . defer ( ) , n . promise } function m ( e , t ) { if ( h && e instanceof Blob ) { var t = e . type || e . mimeType || t || "" ; if ( ! t . match ( /image\/(jpeg|gif|png|bmp)|video\/quicktime/ ) ) return p ( e ) } re
function l ( t , n ) { var i = n . byteLength , r = new Int32Array ( n ) , l = new TLSerialization ; l . storeLongP ( 0 , 0 , "auth_key_id" ) , l . storeLong ( a . generateID ( ) , "msg_id" ) , l . storeInt ( i , "request_length" ) ; var c = l . getBuffer ( ) , d = new Int32Array ( c ) , u = c . byteLength , p = new ArrayBuffer ( u + i ) , m = new Int32Array ( p ) ; m . set ( d ) , m . set ( r , d . length ) ; var g , h = f ? p : m , _ = e . chooseServer ( t ) , v = { code : 406 , type : "NETWORK_BAD_RESPONSE" , url : _ } ; try { g = o . post ( _ , h , { responseType : "arraybuffer" , transformRequest : null } ) } catch ( y ) { g = s . reject ( angular . extend ( v , { originalError : y } ) ) } return g . then ( function ( e ) { if ( ! e . data || ! e . data . byteLength ) return s . reject ( v ) ; try { var t = new TLDeserialization ( e . data , { mtproto : ! 0 } ) ; t . fetchLong ( "auth_key_id" ) , t . fetchLong ( "msg_id" ) , t . fetchInt ( "msg_len" ) } catch ( n ) { return s . reject ( angular . extend ( v , { originalError : n } ) ) } return t } , function ( e ) { return e . message || e . type || ( e = angular . extend ( v , { originalError : e } ) ) , s . reject ( e ) } ) } function c ( e ) { var n = e . deferred , a = new TLSerialization ( { mtproto : ! 0 } ) ; a . storeMethod ( "req_pq" , { nonce : e . nonce } ) , console . log ( dT ( ) , "Send req_pq" , bytesToHex ( e . nonce ) ) , l ( e . dcID , a . getBuffer ( ) ) . then ( function ( a ) { var o = a . fetchObject ( "ResPQ" ) ; if ( "resPQ" != o . _ ) throw new Error ( "resPQ response invalid: " + o . _ ) ; if ( ! bytesCmp ( e . nonce , o . nonce ) ) throw new Error ( "resPQ nonce mismatch" ) ; if ( e . serverNonce = o . server _nonce , e . pq = o . pq , e . fingerprints = o . server _public _key _fingerprints , console . log ( dT ( ) , "Got ResPQ" , bytesToHex ( e . serverNonce ) , bytesToHex ( e . pq ) , e . fingerprints ) , e . publicKey = t . select ( e . fingerprints ) , ! e . publicKey ) throw new Error ( "No public key found" ) ; console . log ( dT ( ) , "PQ factorization start" , e . pq ) , i . factorize ( e . pq ) . then ( function ( t ) { e . p = t [ 0 ] , e . q = t [ 1 ] , console . log ( dT ( ) , "PQ factorization done" , t [ 2 ] ) , d ( e ) } , function ( e ) { console . log ( "Worker error" , e , e . stack ) , n . reject ( e ) } ) } , function ( e ) { console . error ( dT ( ) , "req_pq error" , e . message ) , n . reject ( e ) } ) , r ( function ( ) { t . prepare ( ) } ) } function d ( e ) { var t = e . deferred ; e . newNonce = new Array ( 32 ) , n . nextBytes ( e . newNonce ) ; var a = new TLSerialization ( { mtproto : ! 0 } ) ; a . storeObject ( { _ : "p_q_inner_data" , pq : e . pq , p : e . p , q : e . q , nonce : e . nonce , server _nonce : e . serverNonce , new _nonce : e . newNonce } , "P_Q_inner_data" , "DECRYPTED_DATA" ) ; var i = sha1BytesSync ( a . getBuffer ( ) ) . concat ( a . getBytes ( ) ) , o = new TLSerialization ( { mtproto : ! 0 } ) ; o . storeMethod ( "req_DH_params" , { nonce : e . nonce , server _nonce : e . serverNonce , p : e . p , q : e . q , public _key _fingerprint : e . publicKey . fingerprint , encrypted _data : rsaEncrypt ( e . publicKey , i ) } ) , console . log ( dT ( ) , "Send req_DH_params" ) , l ( e . dcID , o . getBuffer ( ) ) . then ( function ( n ) { var a = n . fetchObject ( "Server_DH_Params" , "RESPONSE" ) ; if ( "server_DH_params_fail" != a . _ && "server_DH_params_ok" != a . _ ) return t . reject ( new Error ( "Server_DH_Params response invalid: " + a . _ ) ) , ! 1 ; if ( ! bytesCmp ( e . nonce , a . nonce ) ) return t . reject ( new Error ( "Server_DH_Params nonce mismatch" ) ) , ! 1 ; if ( ! bytesCmp ( e . serverNonce , a . server _nonce ) ) return t . reject ( new Error ( "Server_DH_Params server_nonce mismatch" ) ) , ! 1 ; if ( "server_DH_params_fail" == a . _ ) { var i = sha1BytesSync ( e . newNonce ) . slice ( - 16 ) ; return bytesCmp ( i , a . new _nonce _hash ) ? ( t . reject ( new Error ( "server_DH_params_fail" ) ) , ! 1 ) : ( t . reject ( new Error ( "server_DH_params_fail new_nonce_hash mismatch" ) ) , ! 1 ) } try { u ( e , a . encrypted _answer ) } catch ( o ) { return t . reject ( o ) , ! 1 } p ( e ) } , function ( e ) { t . reject ( e ) } ) } function u ( e , t ) { e . localTime = tsNow ( ) , e . tmpAesKey = sha1BytesSync ( e . newNonce . concat ( e . serverNonce ) ) . concat ( sha1BytesSync ( e . serverNonce . concat ( e . newNonce ) ) . slice ( 0 , 12 ) ) , e . tmpAesIv = sha1BytesSync ( e . serverNonce . concat ( e . newNonce ) ) . slice ( 12 ) . concat ( sha1BytesSync ( [ ] . concat ( e . newNonce , e . newNonce ) ) , e . newNonce . slice ( 0 , 4 ) ) ; var n = aesDecryptSync ( t , e . tmpAesKey , e . tmpAesIv ) , i = n . slice ( 0 , 20 ) , o = n . slice ( 20 ) , s = bytesToArrayBuffer ( o ) , r = new TLDeserialization ( s , { mtproto : ! 0 } ) , l = r . fetchObject ( "Server_DH_inner_data" ) ; if ( "server_DH_inner_data" != l . _ ) throw new Error ( "server_DH_inner_data response invalid: " + constructor ) ; if ( ! bytesCmp ( e . nonce , l . nonce ) ) throw new Error ( "server_DH_inner_data nonce mismatch" ) ; if ( ! bytesCmp ( e . serverNonce , l . server _nonce ) ) throw new Error ( "server_DH_inner_data serverNonce mismatch" ) ; console . log ( dT ( ) , "Done decrypting answer" ) , e . g = l . g , e . dhPrime = l . dh _prime , e . gA = l . g _a , e . serverTime = l . server _time , e . retry = 0 ; var c = r . getOffset ( ) ; if ( ! bytesCmp (
s = ! 0 ) : ( console . log ( dT ( ) , "Progress" , r * c / a ) , g . notify ( { done : r * c , total : a } ) ) } , h ) ) } , d . readAsArrayBuffer ( v ) , l . promise } , d ) } ( p , f ++ ) ; return g . promise . cancel = function ( ) { console . log ( "cancel upload" , o , s ) , o || s || ( o = ! 0 , h ( { type : "UPLOAD_CANCELED" } ) ) } , g . promise } var v = { } , y = { } , b = { } , w = { } , k = { } , $ = 0 ; return { getCachedFile : u , getDownloadedFile : h , downloadFile : f , downloadSmallFile : g , saveSmallFile : m , uploadFile : _ } } ] ) . service ( "MtpSingleInstanceService" , [ "_" , "$rootScope" , "$compile" , "$timeout" , "$interval" , "$modalStack" , "Storage" , "AppRuntimeManager" , "IdleManager" , "ErrorService" , "MtpNetworkerFactory" , function ( e , t , n , a , i , o , s , r , l , c , d ) { function u ( ) { if ( ! f && ! Config . Navigator . mobile && ! Config . Modes . packed ) { f = ! 0 , l . start ( ) , t . $watch ( "idle.isIDLE" , g ) , i ( g , 5e3 ) , g ( ) ; try { $ ( $window ) . on ( "beforeunload" , p ) } catch ( e ) { } } } function p ( ) { s . remove ( _ ? "xt_instance" : "xt_idle_instance" ) } function m ( ) { if ( _ || y ) return ! 1 ; console . log ( dT ( ) , "deactivate" ) , v = ! 1 , y = ! 0 , p ( ) , o . dismissAll ( ) , document . title = e ( "inactive_tab_title_raw" ) ; var a = n ( "<ng-include src=\"'partials/desktop/inactive.html'\"></ng-include>" ) , i = t . $new ( ! 0 ) ; i . close = function ( ) { r . close ( ) } , i . reload = function ( ) { r . reload ( ) } , a ( i , function ( e ) { $ ( ".page_wrap" ) . hide ( ) , $ ( e ) . appendTo ( $ ( "body" ) ) } ) , t . idle . deactivated = ! 0 } function g ( ) { if ( y ) return ! 1 ; var e = tsNow ( ) , n = t . idle && t . idle . isIDLE , i = { id : h , idle : n , time : e } ; s . get ( "xt_instance" , "xt_idle_instance" ) . then ( function ( t ) { var o = t [ 0 ] , r = t [ 1 ] ; ! n || ! o || o . id == h || o . time < e - 6e4 ? ( r && r . id == h && s . remove ( "xt_idle_instance" ) , s . set ( { xt _instance : i } ) , _ || ( d . startAll ( ) , console . warn ( dT ( ) , "now master instance" , i ) ) , _ = ! 0 , v && ( a . cancel ( v ) , v = ! 1 ) ) : ( s . set ( { xt _idle _instance : i } ) , _ && ( d . stopAll ( ) , console . warn ( dT ( ) , "now idle instance" , i ) , v || ( v = a ( m , 3e4 ) ) ) , _ = ! 1 ) } ) } var h = nextRandomInt ( 4294967295 ) , f = ! 1 , _ = ! 1 , v = ! 1 , y = ! 1 ; return { start : u } } ] ) ; var extraModules = [ ] ; Config . Modes . animations && extraModules . push ( "ngAnimate" ) , angular . module ( "myApp" , [ "ngRoute" , "ngSanitize" , "ngTouch" , "ui.bootstrap" , "mediaPlayer" , "toaster" , "izhukov.utils" , "izhukov.mtproto" , "izhukov.mtproto.wrapper" , "myApp.filters" , "myApp.services" , "myApp.templates" , "myApp.directives" , "myApp.controllers" ] . concat ( extraModules ) ) . config ( [ "$locationProvider" , "$routeProvider" , "$compileProvider" , "StorageProvider" , function ( e , t , n , a ) { n . imgSrcSanitizationWhitelist ( /^\s*(https?|ftp|file|blob|filesystem|chrome-extension|app):|data:image\// ) , n . aHrefSanitizationWhitelist ( /^\s*(https?|ftp|file|tg|mailto|blob|filesystem|chrome-extension|app):|data:/ ) , n . debugInfoEnabled ( ! 1 ) , Config . Modes . test && a . setPrefix ( "t_" ) , t . when ( "/" , { template : "" , controller : "AppWelcomeController" } ) , t . when ( "/login" , { templateUrl : templateUrl ( "login" ) , controller : "AppLoginController" } ) , t . when ( "/im" , { templateUrl : templateUrl ( "im" ) , controller : "AppIMController" , reloadOnSearch : ! 1 } ) , t . otherwise ( { redirectTo : "/" } ) } ] ) , angular . module ( "myApp.services" , [ "myApp.i18n" , "izhukov.utils" ] ) . service ( "AppUsersManager" , [ "$rootScope" , "$modal" , "$modalStack" , "$filter" , "$q" , "qSync" , "MtpApiManager" , "RichTextProcessor" , "ServerTimeManager" , "Storage" , "_" , function ( e , t , n , a , i , o , s , r , l , c , d ) { function u ( ) { return R ? R : R = s . invokeApi ( "contacts.getContacts" , { hash : "" } ) . then ( function ( e ) { var t , n ; U = [ ] , h ( e . users ) ; for ( var n = 0 ; n < e . contacts . length ; n ++ ) t = e . contacts [ n ] . user _id , U . push ( t ) , SearchIndexManager . indexObject ( t , p ( t ) , q ) ; return U } ) } function p ( e ) { var t = L [ e ] ; return ! ! t && ( t . first _name || "" ) + " " + ( t . last _name || "" ) + " " + ( t . phone || "" ) + " " + ( t . username || "" ) } function m ( e ) { return u ( ) . then ( function ( t ) { if ( angular . isString ( e ) && e . length ) { for ( var n = SearchIndexManager . search ( e , q ) , a = [ ] , i = 0 ; i < t . length ; i ++ ) n [ t [ i ] ] && a . push ( t [ i ] ) ; t = a } return t } ) } function g ( e ) { return B [ e ] || 0 } function h ( e ) { angular . forEach ( e , f ) } function f ( t , n ) { if ( angular . isObject ( t ) && ! ( n && angular . isObject ( L [ t . id ] ) && L [ t . id ] . first _name ) ) { var i = t . id , o = L [ i ] ; if ( void 0 === t . pFlags && ( t . pFlags = { } ) , ! t . pFlags . min || void 0 === o ) { if ( t . phone && ( t . rPhone = a ( "phoneNumber" ) ( t . phone ) ) , t . num = Math . abs ( i ) % 8 + 1 , t . first _name ? ( t . rFirstName = r . wrapRichText ( t . first _name , { noLinks : ! 0 , noLinebreaks : ! 0 } ) , t . rFullName = t . last _name ? r . wrapRichText ( t . first _name + " " + ( t . last _name || "" ) , { noLinks : ! 0 , noLinebreaks : ! 0 } ) : t . rFirstName ) : ( t . rFirstName = r . wrapRichText ( t . last _name , { noLinks : ! 0 , noLinebreaks : ! 0 } ) || t . rPhone |
o ( function ( ) { delete d . progress } ) } , function ( e ) { console . log ( "document download failed" , e ) , d . progress . enabled = ! 1 } , function ( e ) { console . log ( "dl progress" , e ) , d . progress . enabled = ! 0 , d . progress . done = e . done , d . progress . percent = Math . max ( 1 , Math . floor ( 100 * e . done / e . total ) ) , t . $broadcast ( "history_update" ) } ) , d . progress . cancel = g . cancel , g } function _ ( e , a ) { var i = t . $new ( ! 0 ) ; i . docID = e , i . messageID = a ; n . open ( { templateUrl : templateUrl ( "document_modal" ) , windowTemplateUrl : templateUrl ( "media_modal_layout" ) , controller : "DocumentModalController" , scope : i , windowClass : "document_modal_window" } ) } function v ( e ) { var t = w [ e ] , n = ( k [ e ] || t || { } , t . mime _type , m ( t ) ) , a = ( n . split ( "." , 2 ) || [ ] ) [ 1 ] || "" ; l . chooseSave ( m ( t ) , a , t . mime _type ) . then ( function ( t ) { t && f ( e , t ) } , function ( ) { f ( e ) . then ( function ( e ) { l . download ( e , t . mime _type , n ) } ) } ) } function y ( e ) { var t = g ( e ) , n = Math . min ( $ ( window ) . width ( ) - ( Config . Mobile ? 0 : 60 ) , 542 ) , a = $ ( window ) . height ( ) - ( Config . Mobile ? 92 : 150 ) , i = { placeholder : "img/placeholders/docThumbModal.gif" , width : n , height : a } ; if ( t . w && t . h ) { var o = calcImageInBox ( t . w , t . h , n , a ) ; i . width = o . w , i . height = o . h } else i . height = i . width = Math . min ( n , a ) ; return t . full = i , t . fullThumb = angular . copy ( t . thumb ) , t . fullThumb . width = i . width , t . fullThumb . height = i . height , t } function b ( e , a ) { var i = t . $new ( ! 0 ) ; return i . docID = e , i . messageID = a , n . open ( { templateUrl : templateUrl ( "video_modal" ) , windowTemplateUrl : templateUrl ( "media_modal_layout" ) , controller : "VideoModalController" , scope : i , windowClass : "video_modal_window" } ) } var w = { } , k = { } , S = $ ( window ) . width ( ) , C = $ ( window ) . height ( ) ; return { saveDoc : d , getDoc : u , hasDoc : p , wrapForHistory : g , wrapVideoForFull : y , updateDocDownloaded : h , downloadDoc : f , openDoc : _ , openVideo : b , saveDocFile : v } } ] ) . service ( "AppStickersManager" , [ "$q" , "$rootScope" , "$modal" , "_" , "FileManager" , "MtpApiManager" , "AppDocsManager" , "Storage" , "ApiUpdatesManager" , function ( e , t , n , a , i , o , s , r , l ) { function c ( ) { b || ( b = ! 0 , setTimeout ( d , 1e3 ) ) } function d ( e ) { return r . get ( "all_stickers" ) . then ( function ( t ) { var n = Config . Schema . API . layer ; return t . layer != n && ( t = ! 1 ) , t && t . date > tsNow ( ! 0 ) && ! e ? u ( t ) : o . invokeApi ( "messages.getAllStickers" , { hash : t && t . hash || "" } ) . then ( function ( e ) { var a = "messages.allStickersNotModified" == e . _ ; return a && ( e = t ) , e . date = tsNow ( ! 0 ) + 3600 , e . layer = n , delete e . _ , a ? ( r . set ( { all _stickers : e } ) , u ( e ) ) : p ( e , t && t . fullSets ) . then ( function ( ) { return r . set ( { all _stickers : e } ) , u ( e ) } ) } ) } ) } function u ( e ) { if ( w !== e . hash ) { w = e . hash ; var t , n , i , o , r , l , c , d ; for ( k = [ ] , i = e . sets . length , t = 0 ; t < i ; t ++ ) if ( l = e . sets [ t ] , ! l . pFlags . disabled ) { for ( d = e . fullSets [ l . id ] . documents , o = d . length , c = [ ] , n = 0 ; n < o ; n ++ ) r = d [ n ] , s . saveDoc ( r ) , c . push ( r . id ) ; l . docIDs = c , k . push ( l ) } } return m ( ) . then ( function ( e ) { var t = k ; if ( e . length ) { t = k . slice ( ) ; var n , i , o = [ ] ; for ( n = 0 , i = e . length ; n < i ; n ++ ) o . push ( e [ n ] . id ) ; t . unshift ( { id : 0 , title : a ( "im_stickers_tab_recent_raw" ) , short _name : "" , docIDs : o } ) } return t } ) } function p ( t , n ) { var a = [ ] , i = n || t . fullSets || { } ; return t . fullSets = { } , angular . forEach ( t . sets , function ( e ) { var n = i [ e . id ] ; if ( n && n . set . hash == e . hash ) t . fullSets [ e . id ] = n ; else { var s = o . invokeApi ( "messages.getStickerSet" , { stickerset : { _ : "inputStickerSetID" , id : e . id , access _hash : e . access _hash } } ) . then ( function ( n ) { t . fullSets [ e . id ] = n } ) ; a . push ( s ) } } ) , e . all ( a ) } function m ( ) { return r . get ( "stickers_popular" ) . then ( function ( e ) { var t , n , a , i = [ ] ; if ( e && e . length ) for ( t = 0 , n = e . length ; t < n ; t ++ ) a = e [ t ] [ 0 ] , s . hasDoc ( a ) && i . push ( { id : a , rate : e [ t ] [ 1 ] } ) ; return i } ) } function g ( e ) { m ( ) . then ( function ( t ) { for ( var n = ! 1 , a = t . length , i = [ ] , o = 0 ; o < a ; o ++ ) t [ o ] . id == e && ( n = ! 0 , t [ o ] . rate ++ ) , i . push ( [ t [ o ] . id , t [ o ] . rate ] ) ; n ? i . sort ( function ( e , t ) { return t [ 1 ] - e [ 1 ] } ) : ( i . length > 15 && ( i = i . slice ( 0 , 15 ) ) , i . push ( [ e , 1 ] ) ) , ConfigStorage . set ( { stickers _popular : i } ) } ) } function h ( e ) { return o . invokeApi ( "messages.getStickerSet" , { stickerset : e } ) . then ( function ( e ) { for ( var t = 0 ; t < e . documents . length ; t ++ ) s . saveDoc ( e . documents [ t ] ) ; return e } ) } function f ( e , t ) { var n = t ? "messages.uninstallStickerSet" : "messages.installStickerSet" , a = { _ : "inputStickerSetID" , id : e . set . id , access _hash : e . set . access _hash } ; return o . invokeApi ( n , { stickerset : a , disabled : ! 1 } ) . then ( function ( n ) { var a ; a = t ? { _ : "updateDelStickerSet" , id : e . set . id } : { _ : "updateNewStickerSet" , stickerset : e } , l . processUpdateMessage ( { _ : "updateShort" , update : a } ) } ) } function _ ( e ) { return v ( { _ : "inputStickerSetShortName" , short _nam
query : "#" + decodeURIComponent ( o [ 1 ] ) } ) , Config . Mobile && t . $broadcast ( "history_focus" , { peerString : "" } ) , ! 0 ; if ( n && ( o = e . match ( /^bot_command\?command=(.+?)(?:&bot=(.+))?$/ ) ) ) { var c = t . selectedPeerID , l = "/" + o [ 1 ] ; return c < 0 && o [ 2 ] && ( l += "@" + o [ 2 ] ) , s . sendText ( c , l ) , t . $broadcast ( "history_focus" , { peerString : a . getPeerString ( c ) } ) , ! 0 } return ! 1 } function h ( e , n ) { if ( console . log ( dT ( ) , "Received activity" , e , n ) , "share" == e && n . url ) v ( n . url , "" ) ; else if ( "view" == e && n . url ) { var o = n . url . match ( b ) ; o && g ( o [ 3 ] ) } else if ( "webrtc-call" == e && n . contact ) { var r = n . contact , l = [ ] ; if ( void 0 != r . tel ) for ( var c = 0 ; c < r . tel . length ; c ++ ) l . push ( r . tel [ c ] . value ) ; var u = ( r . givenName || [ ] ) . join ( " " ) , m = ( r . familyName || [ ] ) . join ( " " ) ; l . length && i . importContact ( l [ 0 ] , u , m ) . then ( function ( e ) { if ( e ) { var n = a . getPeerString ( e ) ; t . $broadcast ( "history_focus" , { peerString : n } ) } else p . show ( { error : { code : 404 , type : "USER_NOT_USING_TELEGRAM" } } ) } ) } else "share" === e && n . blobs && n . blobs . length > 0 && d . selectPeers ( { confirm _type : "EXT_SHARE_PEER" , canSend : ! 0 } ) . then ( function ( e ) { angular . forEach ( e , function ( e ) { var t = a . getPeerID ( e ) ; angular . forEach ( n . blobs , function ( e ) { s . sendFile ( t , e , { isMedia : ! 0 } ) } ) } ) , 1 == e . length && t . $broadcast ( "history_focus" , { peerString : e [ 0 ] } ) } ) } function f ( ) { if ( ! w ) { if ( w = ! 0 , "registerProtocolHandler" in navigator ) { try { navigator . registerProtocolHandler ( "tg" , "#im?tgaddr=%s" , "Telegram Web" ) } catch ( e ) { } try { navigator . registerProtocolHandler ( "web+tg" , "#im?tgaddr=%s" , "Telegram Web" ) } catch ( e ) { } } window . navigator . mozSetMessageHandler && ( console . log ( dT ( ) , "Set activity message handler" ) , window . navigator . mozSetMessageHandler ( "activity" , function ( e ) { h ( e . source . name , e . source . data ) } ) ) , $ ( document ) . on ( "click" , function ( e ) { var t = e . target ; if ( t && "A" == t . tagName && ! t . onclick && ! t . onmousedown ) { var n = $ ( t ) . attr ( "href" ) || t . href || "" , a = n . match ( b ) ; if ( a && g ( a [ 3 ] , ! 0 ) ) return cancelEvent ( e ) } } ) , t . $on ( "$routeUpdate" , m ) , m ( ) } } function _ ( e ) { var t = e . match ( b ) ; if ( t && g ( t [ 3 ] , ! 0 ) ) return ! 0 ; var n = window . open ( e , "_blank" ) ; return ! ! n } function v ( n , a , i ) { var o = { } ; i && ( o . shareLinkPromise = e . when ( n ) ) , d . selectPeer ( o ) . then ( function ( e ) { t . $broadcast ( "history_focus" , { peerString : e , attachment : { _ : "share_url" , url : n , text : a } } ) } ) } function y ( e ) { return l . invokeApi ( "messages.checkChatInvite" , { hash : e } ) . then ( function ( n ) { var a ; if ( "chatInviteAlready" == n . _ ) { o . saveApiChat ( n . chat ) ; var i = ! n . chat . pFlags . left || o . isChannel ( n . chat . id ) && n . chat . username ; if ( i ) return t . $broadcast ( "history_focus" , { peerString : o . getChatString ( n . chat . id ) } ) ; a = n . chat . title } else a = n . title ; p . confirm ( { type : n . pFlags . channel && ! n . pFlags . megagroup ? "JOIN_CHANNEL_BY_LINK" : "JOIN_GROUP_BY_LINK" , title : a } ) . then ( function ( ) { return l . invokeApi ( "messages.importChatInvite" , { hash : e } ) . then ( function ( e ) { if ( c . processUpdateMessage ( e ) , e . chats && 1 == e . chats . length ) t . $broadcast ( "history_focus" , { peerString : o . getChatString ( e . chats [ 0 ] . id ) } ) ; else if ( e . updates && e . updates . length ) for ( var n , a = 0 , i = e . updates . length ; a < i ; a ++ ) if ( n = e . updates [ a ] , "updateNewMessage" == n . _ ) { t . $broadcast ( "history_focus" , { peerString : o . getChatString ( n . message . to _id . chat _id ) } ) ; break } } ) } ) } ) } var b = /^(web\+)?tg:(\/\/)?(.+)/ , w = ! 1 ; return { start : f , shareUrl : v , openUrl : _ } } ] ) . service ( "DraftsManager" , [ "$rootScope" , "qSync" , "MtpApiManager" , "ApiUpdatesManager" , "AppMessagesIDsManager" , "AppChatsManager" , "AppPeersManager" , "RichTextProcessor" , "Storage" , "ServerTimeManager" , function ( e , t , n , a , i , o , s , r , l , c ) { function d ( e , t ) { return console . warn ( dT ( ) , "get draft" , e , t ) , l . get ( "draft" + e ) . then ( function ( n ) { "string" == typeof n && ( n = n . length > 0 && { text : n } ) , n || t ? console . warn ( dT ( ) , "local" , n ) : ( n = u ( e ) , console . warn ( dT ( ) , "server" , n ) ) ; var a = n && n . replyToMsgID ; if ( a ) { var o = ! ! s . isChannel ( e ) && - e ; n . replyToMsgID = i . getFullMessageID ( a , o ) } return n } ) } function u ( e ) { var t = y [ e ] ; return void 0 !== t && t } function p ( t , n , a ) { a = a || { } ; var i = _ ( n ) ; return y [ t ] = i , a . notify && ( console . warn ( dT ( ) , "save draft" , t , n , a ) , m ( t , i ) , e . $broadcast ( "draft_updated" , { peerID : t , draft : i , local : a . local } ) ) , i } function m ( e , t ) { console . warn ( dT ( ) , "change draft" , e , t ) , e || console . trace ( "empty peerID" ) , e < 0 && o . hasRights ( - e , "send" ) && ( t = ! 1 ) , t || ( t = { text : "" , replyToMsgID : 0 } ) , t . replyToMsgID = t . replyToMsgID ? i . getMessageLocalID ( t . replyToMsgID ) : 0 ; var n = "draft" + e ; if ( f ( t ) ) l . remove ( n ) ; else { var a = { } ; a [ n ] = t , l . set ( a ) } } function g ( e , t ) { m
e . togglePeerMuted = F , e . toggleEdit = q , e . toggleMedia = V , e . returnToRecent = z , e . $on ( "history_edit_toggle" , q ) , e . $on ( "history_edit_flush" , O ) , e . $on ( "history_media_toggle" , function ( e , t ) { V ( t ) } ) , e . $on ( "history_return_recent" , z ) ; var W , G = ! 1 , K = ! 1 , Y = ! 1 , Z = ! 1 , X = 0 , J = 0 , Q = ! 1 , ee = { photos : "inputMessagesFilterPhotos" , video : "inputMessagesFilterVideo" , documents : "inputMessagesFilterDocument" , audio : "inputMessagesFilterVoice" } , te = 0 , ne = 0 , ae = ! 1 , ie = ! 1 , oe = 0 , se = ! 1 , re = ! 1 ; e . $on ( "history_update" , angular . noop ) ; var le = ! 1 ; e . $on ( "stateSynchronized" , function ( ) { le && ( le == e . curDialog . peerID && A ( ) , le = ! 1 ) } ) , e . $on ( "reply_button_press" , function ( t , n ) { var a = e . historyState . replyKeyboard ; if ( a ) { var i = { replyToMsgID : W < 0 && a . mid } ; switch ( n . _ ) { case "keyboardButtonRequestPhone" : _ . confirm ( { type : "BOT_ACCESS_PHONE" } ) . then ( function ( ) { var e = l . getSelf ( ) ; d . sendOther ( W , { _ : "inputMediaContact" , phone _number : e . phone , first _name : e . first _name , last _name : e . last _name } , i ) } ) ; break ; case "keyboardButtonRequestGeoLocation" : _ . confirm ( { type : "BOT_ACCESS_GEO" } ) . then ( function ( ) { return v . getPosition ( ) . then ( function ( e ) { d . sendOther ( W , { _ : "inputMediaGeoPoint" , geo _point : { _ : "inputGeoPoint" , lat : e . lat , "long" : e [ "long" ] } } , i ) } , function ( e ) { _ . alert ( s ( "error_modal_bad_request_title_raw" ) , s ( "error_modal_gelocation_na_raw" ) ) } ) } ) ; break ; default : d . sendText ( W , n . text , i ) } } } ) , e . $on ( "history_reload" , function ( t , n ) { n == e . curDialog . peerID && A ( ) } ) , e . $on ( "history_forbidden" , function ( n , a ) { a == e . curDialog . peerID && t . url ( "/im" ) , k ( a ) } ) , e . $on ( "dialog_migrate" , function ( t , n ) { if ( n . migrateFrom == e . curDialog . peerID ) { var a = u . getPeerString ( n . migrateTo ) ; i . $broadcast ( "history_focus" , { peerString : a } ) } k ( n . migrateFrom ) } ) , e . $on ( "notify_settings" , function ( t , n ) { n . peerID == e . curDialog . peerID && C ( ) } ) , e . $on ( "channel_settings" , function ( t , n ) { n . channelID == - e . curDialog . peerID && C ( ) } ) ; var ce = { } ; e . $on ( "history_append" , function ( t , a ) { var o = w ( a . peerID ) ; if ( o ) { var s = a . peerID == e . curDialog . peerID ; if ( s ) { if ( e . historyFilter . mediaType || e . historyState . skipped ) return void ( a . my ? z ( ) : e . historyState . missedCount ++ ) ; e . curDialog . messageID && a . my && z ( ) , delete e . state . empty } var r = d . wrapForHistory ( a . messageID ) ; o . messages . push ( r ) , o . ids . push ( a . messageID ) , d . regroupWrappedHistory ( o . messages , - 3 ) && e . $broadcast ( "messages_regroup" ) , s && ( e . historyState . typing . splice ( 0 , e . historyState . typing . length ) , e . $broadcast ( "ui_history_append_new" , { my : a . my , idleScroll : K && ! r . pFlags . out && i . idle . isIDLE } ) , a . my && e . historyUnreadAfter && ( delete e . historyUnreadAfter , e . $broadcast ( "messages_unread_after" ) ) , i . idle . isIDLE ? ! r . pFlags . unread || r . pFlags . out || ( o . messages [ o . messages . length - 2 ] || { } ) . pFlags . unread || ( e . historyUnreadAfter = r . mid , K = ! 0 , e . $broadcast ( "messages_unread_after" ) ) : n ( function ( ) { d . readHistory ( e . curDialog . peerID ) } ) , S ( ) , C ( ) ) } } ) , e . $on ( "history_multiappend" , function ( t , a ) { var o = ! 1 , s = ! 1 , r = i . idle . isIDLE ; angular . forEach ( a , function ( t , a ) { var i = w ( a ) ; if ( i ) { var l = a == e . curDialog . peerID , c = i . messages . length , u = t . length ; if ( l ) { if ( e . historyFilter . mediaType || e . historyState . skipped ) return void ( e . historyState . missedCount += u ) ; delete e . state . empty } if ( ( ! l || r ) && c > ( u > 10 ? 10 : 100 ) ) return console . warn ( dT ( ) , "Drop too many messages" , u , c , r , l , a ) , void ( l ? ( J = i . messages [ c - 1 ] . mid , e . historyState . skipped = Z = J > 0 , Z && ( le = a , e . $broadcast ( "ui_history_append" ) ) ) : k ( a ) ) ; var p , m , g , h = ! 1 , f = ! 1 , m = i . messages [ i . messages . length - 1 ] , _ = ! m || ! m . pFlags . unread ; for ( g = 0 ; g < u ; g ++ ) p = t [ g ] , p < X || i . ids . indexOf ( p ) !== - 1 || ( m = d . wrapForHistory ( p ) , i . messages . push ( m ) , i . ids . push ( p ) , ! f && r && ( m . pFlags . unread && ! m . pFlags . out && _ ? f = p : _ = ! m . pFlags . unread ) , ! h && m . pFlags . out && ( h = ! 0 ) ) ; d . regroupWrappedHistory ( i . messages , - u - 2 ) && ( o = ! 0 ) , l && ( e . historyState . typing . length && e . historyState . typing . splice ( 0 , e . historyState . typing . length ) , e . $broadcast ( "ui_history_append_new" , { idleScroll : K && ! h && r } ) , r ? f && ( e . historyUnreadAfter = f , K = ! 0 , s = ! 0 ) : n ( function ( ) { d . readHistory ( e . curDialog . peerID ) } ) , S ( ) , C ( ) ) } } ) , o && e . $broadcast ( "messages_regroup" ) , s && e . $broadcast ( "messages_unread_after" ) } ) , e . $on ( "history_delete" , function ( t , n ) { var a = w ( n . peerID ) ; if ( a ) { var i , o = [ ] ; for ( i = 0 ; i < a . messages . length ; i ++ ) n . msgs [ a . messages [ i ] . mid ] || o . push ( a . messages [ i ] ) ; a . messages = o , d . regroupWrappedHistory ( a . messages ) , e . $broadcast ( "messages_regroup" ) , n . peerID == e . curDialog . peerID && ( e . sta
scope : i , windowClass : "md_simple_modal_window" } ) , cancelEvent ( t ) } , e . photo = { } , e . $watch ( "photo.file" , _ ) , e . deletePhoto = function ( ) { e . photo . updating = ! 0 , l . invokeApi ( "channels.editPhoto" , { channel : o . getChannelInput ( e . chatID ) , photo : { _ : "inputChatPhotoEmpty" } } ) . then ( f ) [ "finally" ] ( function ( ) { e . photo . updating = ! 1 } ) } , e . editChannel = function ( ) { var t = n . $new ( ) ; t . chatID = e . chatID , a . open ( { templateUrl : templateUrl ( e . isMegagroup ? "megagroup_edit_modal" : "channel_edit_modal" ) , controller : "ChannelEditModalController" , scope : t , windowClass : "md_simple_modal_window mobile_modal" } ) } , e . goToHistory = function ( ) { n . $broadcast ( "history_focus" , { peerString : e . chatFull . peerString } ) } , e . hasRights = function ( t ) { return o . hasRights ( e . chatID , t ) } } ] ) . controller ( "SettingsModalController" , [ "$rootScope" , "$scope" , "$timeout" , "$modal" , "AppUsersManager" , "AppChatsManager" , "AppPhotosManager" , "MtpApiManager" , "Storage" , "NotificationsManager" , "MtpApiFileManager" , "PasswordManager" , "ApiUpdatesManager" , "ChangelogNotifyService" , "LayoutSwitchService" , "AppRuntimeManager" , "ErrorService" , "_" , function ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f , _ ) { function v ( ) { n . cancel ( b ) , b = ! 1 , u . getState ( ) . then ( function ( e ) { t . password = e , "account.noPassword" == e . _ && e . email _unconfirmed _pattern && ! w && ( b = n ( v , 5e3 ) ) } ) } function y ( e ) { e && e . type && 0 === e . type . indexOf ( "image" ) && ( t . photo . updating = ! 0 , d . uploadFile ( e ) . then ( function ( e ) { r . invokeApi ( "photos.uploadProfilePhoto" , { file : e , caption : "" , geo _point : { _ : "inputGeoPointEmpty" } } ) . then ( function ( e ) { i . saveApiUsers ( e . users ) , r . getUserID ( ) . then ( function ( n ) { s . savePhoto ( e . photo , { user _id : n } ) , p . processUpdateMessage ( { _ : "updateShort" , update : { _ : "updateUserPhoto" , user _id : n , date : tsNow ( ! 0 ) , photo : i . getUser ( n ) . photo , previous : ! 0 } } ) , t . photo = { } } ) } ) } ) [ "finally" ] ( function ( ) { delete t . photo . updating } ) ) } t . profile = { } , t . photo = { } , t . version = Config . App . version , r . getUserID ( ) . then ( function ( e ) { t . profile = i . getUser ( e ) } ) , r . invokeApi ( "users.getFullUser" , { id : { _ : "inputUserSelf" } } ) . then ( function ( e ) { i . saveApiUser ( e . user ) , e . profile _photo && s . savePhoto ( e . profile _photo , { user _id : e . user . id } ) } ) , t . notify = { volume : . 5 } , t . send = { } , t . $watch ( "photo.file" , y ) , t . password = { _ : "account.noPassword" } , v ( ) ; var b = ! 1 , w = ! 1 ; t . changePassword = function ( n ) { if ( n = n || { } , "cancel_email" == n . action ) return f . confirm ( { type : "PASSWORD_ABORT_SETUP" } ) . then ( function ( ) { u . updateSettings ( t . password , { email : "" } ) . then ( v ) } ) ; var i = e . $new ( ) ; i . password = t . password , angular . extend ( i , n ) ; var o = a . open ( { scope : i , templateUrl : templateUrl ( "password_update_modal" ) , controller : "PasswordUpdateModalController" , windowClass : "md_simple_modal_window mobile_modal" } ) ; o . result [ "finally" ] ( v ) } , t . showSessions = function ( ) { a . open ( { templateUrl : templateUrl ( "sessions_list_modal" ) , controller : "SessionsListModalController" , windowClass : "md_simple_modal_window mobile_modal" } ) } , t . $on ( "$destroy" , function ( ) { n . cancel ( b ) , w = ! 0 } ) , t . deletePhoto = function ( ) { t . photo . updating = ! 0 , r . invokeApi ( "photos.updateProfilePhoto" , { id : { _ : "inputPhotoEmpty" } } ) . then ( function ( e ) { r . getUserID ( ) . then ( function ( n ) { p . processUpdateMessage ( { _ : "updateShort" , update : { _ : "updateUserPhoto" , user _id : n , date : tsNow ( ! 0 ) , photo : e , previous : ! 0 } } ) , t . photo = { } } ) } ) [ "finally" ] ( function ( ) { delete t . photo . updating } ) } , t . editProfile = function ( ) { a . open ( { templateUrl : templateUrl ( "profile_edit_modal" ) , controller : "ProfileEditModalController" , windowClass : "md_simple_modal_window mobile_modal" } ) } , t . changeUsername = function ( ) { a . open ( { templateUrl : templateUrl ( "username_edit_modal" ) , controller : "UsernameEditModalController" , windowClass : "md_simple_modal_window mobile_modal" } ) } , t . terminateSessions = function ( ) { f . confirm ( { type : "TERMINATE_SESSIONS" } ) . then ( function ( ) { r . invokeApi ( "auth.resetAuthorizations" , { } ) } ) } , l . get ( "notify_nodesktop" , "send_ctrlenter" , "notify_volume" , "notify_novibrate" , "notify_nopreview" ) . then ( function ( a ) { t . notify . desktop = ! a [ 0 ] , t . send . enter = a [ 1 ] ? "" : "1" , a [ 2 ] !== ! 1 ? t . notify . volume = a [ 2 ] > 0 && a [ 2 ] <= 1 ? a [ 2 ] : 0 : t . notify . volume = . 5 , t . notify . canVibrate = c . getVibrateSupport ( ) , t . notify . vibrate = ! a [ 3 ] , t . notify . preview = ! a [ 4 ] , t . notify . volumeOf4 = function ( ) { return 1 + Math . ceil ( ( t . notify . volume - . 1 ) / . 33 ) } , t . toggleSound = function ( ) { t . notify . volume ? t . notify . volume = 0 : t . notify . volume = . 5 } ; var i ; t . $watch ( "notify.volume" , functi
a || c || t && o . history . indexOf ( t ) == - 1 ? ( a && ( s = - a , n += a ) , F ( u , t , n , s ) . then ( function ( n ) { o . count = n . count || n . messages . length , d && o . count ++ ; var a = [ ] ; return angular . forEach ( n . messages , function ( e ) { a . push ( e . mid ) } ) , ! t && o . pending . length && ( a = o . pending . slice ( ) . concat ( a ) ) , R ( e , { count : o . count , history : a , unreadOffset : l , unreadSkip : c } ) } ) ) : N ( e , t , n , o ) . then ( function ( ) { if ( s = 0 , t > 0 ) for ( s = 0 ; s < o . history . length && ! ( t > o . history [ s ] ) ; s ++ ) ; var a = o . history . slice ( s , s + n ) ; return ! t && o . pending . length && ( a = o . pending . slice ( ) . concat ( a ) ) , R ( e , { count : o . count , history : a , unreadOffset : l , unreadSkip : c } ) } ) } function B ( e ) { return ( Ce [ e ] || { } ) . reply _markup || ! 1 } function j ( e , t ) { if ( ! t . reply _markup && ! t . pFlags . out && ! t . action ) return ! 1 ; if ( t . reply _markup && "replyInlineMarkup" == t . reply _markup . _ ) return ! 1 ; var n = t . reply _markup , a = e . reply _markup ; if ( n ) return ! ( a && a . mid >= t . mid ) && ( ! ( n . pFlags . selective && ! ( 16 & t . flags ) ) && ( e . maxOutID && t . mid < e . maxOutID && n . pFlags . single _use && ( n . pFlags . hidden = ! 0 ) , n = angular . extend ( { mid : t . mid } , n ) , "replyKeyboardHide" != n . _ && ( n . fromID = t . from _id ) , e . reply _markup = n , ! 0 ) ) ; if ( t . pFlags . out ) if ( a ) { if ( a . pFlags . single _use && ! a . pFlags . hidden && ( t . mid > a . mid || t . mid < 0 ) && t . message ) return a . pFlags . hidden = ! 0 , ! 0 } else ( ! e . maxOutID || t . mid > e . maxOutID ) && ( e . maxOutID = t . mid ) ; return ! ( ! t . action || "messageActionChatDeleteUser" != t . action . _ || ( a ? t . action . user _id != a . fromID : ! r . isBot ( t . action . user _id ) ) ) && ( e . reply _markup = { _ : "replyKeyboardHide" , mid : t . mid , flags : 0 , pFlags : { } } , ! 0 ) } function H ( t , n , a , i , o ) { t = t ? parseInt ( t ) : 0 ; var s = [ ] , d = ! n , u = { peer : t , filter : a } , p = d && angular . equals ( Fe , u ) ; if ( d && ! p && ( Fe = u , Ne = [ ] ) , t && ! i && ! n ) { var g = Ce [ t ] ; if ( void 0 !== g && g . history . length ) { var h , f , v , b = { } , w = o || 20 ; switch ( a . _ ) { case "inputMessagesFilterPhotos" : b . messageMediaPhoto = ! 0 ; break ; case "inputMessagesFilterPhotoVideo" : b . messageMediaPhoto = ! 0 , b . messageMediaDocument = ! 0 , h = "video" ; break ; case "inputMessagesFilterVideo" : b . messageMediaDocument = ! 0 , h = "video" ; break ; case "inputMessagesFilterDocument" : b . messageMediaDocument = ! 0 , h = ! 1 ; break ; case "inputMessagesFilterVoice" : b . messageMediaDocument = ! 0 , h = "voice" } for ( f = 0 ; f < g . history . length ; f ++ ) if ( v = ke [ g . history [ f ] ] , v . media && b [ v . media . _ ] ) { if ( void 0 !== h && "messageMediaDocument" == v . media . _ && v . media . document . type != h ) continue ; if ( s . push ( v . mid ) , s . length >= w ) break } } if ( s . length < w && Ne . length && p ) for ( var k = ! ! s . length && s [ s . length - 1 ] , f = 0 ; f < Ne . length && ! ( ( k === ! 1 || Ne [ f ] < k ) && ( s . push ( Ne [ f ] ) , s . length >= w ) ) ; f ++ ) ; } if ( s . length || 1e3 == o ) return d && ( Ne = listMergeSorted ( Ne , s ) ) , e . when ( { count : null , history : s } ) ; var $ ; if ( t || ! n ) $ = _ . invokeApi ( "messages.search" , { flags : 0 , peer : c . getInputPeerByID ( t ) , q : n || "" , filter : a || { _ : "inputMessagesFilterEmpty" } , min _date : 0 , max _date : 0 , limit : o || 20 , max _id : m . getMessageLocalID ( i ) || 0 } , { timeout : 300 , noErrorBox : ! 0 } ) ; else { var S = 0 , C = 0 , M = 0 , x = i && q ( i ) ; x && x . date && ( S = x . date + y . serverTimeOffset , M = x . id , C = oe ( x ) ) , $ = _ . invokeApi ( "messages.searchGlobal" , { q : n , offset _date : S , offset _peer : c . getInputPeerByID ( C ) , offset _id : m . getMessageLocalID ( M ) , limit : o || 20 } , { timeout : 300 , noErrorBox : ! 0 } ) } return $ . then ( function ( e ) { r . saveApiUsers ( e . users ) , l . saveApiChats ( e . chats ) , Z ( e . messages ) ; var t = e . count || e . messages . length ; return s = [ ] , angular . forEach ( e . messages , function ( e ) { var t = oe ( e ) ; if ( t < 0 ) { var n = l . getChat ( - t ) ; n . migrated _to && U ( t , - n . migrated _to . channel _id ) } s . push ( e . mid ) } ) , d && ( ! i || p && Ne . indexOf ( i ) >= 0 ) && ( Ne = listMergeSorted ( Ne , s ) ) , { count : t , history : s } } , function ( t ) { return 400 == t . code && ( t . handled = ! 0 ) , e . reject ( t ) } ) } function q ( e ) { return ke [ e ] || { deleted : ! 0 } } function V ( t ) { var n = m . splitMessageIDsByChannels ( t ) , a = [ ] ; return angular . forEach ( n . msgIDs , function ( e , t ) { var i ; if ( t > 0 ) { var o = l . getChat ( t ) ; if ( ! ( o . pFlags . creator || o . pFlags . editor && o . pFlags . megagroup ) ) { var r = [ ] ; if ( ( o . pFlags . editor || o . pFlags . megagroup ) && angular . forEach ( e , function ( e , a ) { var i = q ( n . mids [ t ] [ a ] ) ; i . pFlags . out && r . push ( e ) } ) , ! r . length ) return ; e = r } i = _ . invokeApi ( "channels.deleteMessages" , { channel : l . getChannelInput ( t ) , id : e } ) . then ( function ( n ) { s . processUpdateMessage ( { _ : "updateShort" , update : { _ : "updateDeleteChannelMessages" , channel _id : t , messages : e , pts : n . pts , pts _count : n . pts _count } } ) } ) } else i = _ . invokeApi ( "messages.deleteMessages" , { id : e } ) . then ( function ( t ) { s . processUpdateMessage ( { _ : "updateShort" , update : { _ : "updateDeleteMessages" , messages : e , pts : t . pts , pts _coun
h . count ++ , h . msgs [ x ] = ! 0 , $e [ x ] && ( $e [ x ] . deleted = ! 0 , delete $e [ x ] ) , Se [ x ] && ( Se [ x ] . deleted = ! 0 , delete Se [ x ] ) , u . deleted = ! 0 , ke [ x ] = { deleted : ! 0 , id : x , from _id : u . from _id , to _id : u . to _id , flags : u . flags , pFlags : u . pFlags , date : u . date } , B = Xe [ s ] , B && B . length && ( H = B . indexOf ( x ) , H != - 1 && B . splice ( H ) ) ) ; angular . forEach ( V , function ( e , n ) { var a = Ce [ n ] ; if ( void 0 !== a ) { for ( var i = [ ] , o = [ ] , s = 0 ; s < a . history . length ; s ++ ) e . msgs [ a . history [ s ] ] || i . push ( a . history [ s ] ) ; a . history = i , e . count && null !== a . count && a . count > 0 && ( a . count -= e . count , a . count < 0 && ( a . count = 0 ) ) ; for ( var s = 0 ; s < a . pending . length ; s ++ ) e . msgs [ a . pending [ s ] ] || o . push ( a . pending [ s ] ) ; a . pending = o , t . $broadcast ( "history_delete" , { peerID : n , msgs : e . msgs } ) } var r = A ( n ) [ 0 ] ; r && ( e . unread && ( r . unread _count -= e . unread , t . $broadcast ( "dialog_unread" , { peerID : n , count : r . unread _count } ) ) , e . msgs [ r . top _message ] && we ( n ) ) } ) ; break ; case "updateChannel" : var d = n . channel _id , s = - d , z = l . getChat ( d ) , W = "channel" == z . _ && ! z . pFlags . left && ! z . pFlags . kicked , y = A ( s ) , G = y . length > 0 , K = "channel" == z . _ && ( z . username || ! z . pFlags . left && ! z . pFlags . kicked ) && ! 0 || ! 1 , Y = void 0 !== Ce [ s ] ; K != Y && ( delete Ce [ s ] , t . $broadcast ( "history_forbidden" , s ) ) , G != W && ( W ? we ( - d ) : y [ 0 ] && ( Me . dialogs . splice ( y [ 1 ] , 1 ) , t . $broadcast ( "dialog_drop" , { peerID : s } ) ) ) ; break ; case "updateChannelReload" : var d = n . channel _id , s = - d , y = A ( s ) ; y [ 0 ] && Me . dialogs . splice ( y [ 1 ] , 1 ) , delete Ce [ s ] , we ( - d ) . then ( function ( ) { t . $broadcast ( "history_reload" , s ) } ) ; break ; case "updateChannelMessageViews" : var X = n . views , S = m . getFullMessageID ( n . id , n . channel _id ) , u = q ( S ) ; u && u . views && u . views < X && ( u . views = X , t . $broadcast ( "message_views" , { mid : S , views : X } ) ) } } ) , t . $on ( "webpage_updated" , function ( e , n ) { angular . forEach ( n . msgs , function ( e ) { var a = $e [ e ] ; a && ( a . media = { _ : "messageMediaWebPage" , webpage : h . wrapForHistory ( n . id ) } , t . $broadcast ( "message_edit" , { peerID : oe ( a ) , id : a . id , mid : e , justMedia : ! 0 } ) ) } ) } ) , t . $on ( "draft_updated" , function ( e , n ) { var a = n . peerID , i = n . draft , o = A ( a ) [ 0 ] ; if ( o ) { var s ; if ( i && i . date ) s = i . date ; else { var r = c . isChannel ( a ) ? - a : 0 , s = q ( o . top _message ) . date ; if ( r ) { var d = l . getChat ( r ) ; ( ! s || d . date && d . date > s ) && ( s = d . date ) } } o . index = D ( s ) , P ( o ) , t . $broadcast ( "dialog_draft" , { peerID : a , draft : i , index : o . index } ) } } ) , { getConversations : I , getHistory : L , getSearch : H , getMessage : q , getReplyKeyboard : B , readHistory : W , readMessages : G , flushHistory : Y , deleteMessages : V , sendText : X , sendFile : J , sendOther : Q , forwardMessages : ee , startBot : te , shareGame : ne , convertMigratedPeer : O , getMessagePeer : oe , getMessageThumb : he , getMessageShareLink : z , clearDialogCache : le , wrapForDialog : se , wrapForHistory : ce , wrapReplyMarkup : de , wrapSingleMessage : re , wrapMessageText : ue , regroupWrappedHistory : ge } } ] ) . service ( "AppMessagesIDsManager" , function ( ) { function e ( e , t ) { if ( ! t || e <= 0 ) return e ; e = n ( e ) ; var a = i [ t ] ; return a || ( a = ++ s * r , o [ a ] = t , i [ t ] = a ) , a + e } function t ( e ) { if ( e < r ) return [ e , 0 ] ; var t = e % r , n = o [ e - t ] ; return [ t , n ] } function n ( e ) { return e ? e % r : 0 } function a ( e ) { var n , a , i , o , s = { } , r = { } ; for ( n = 0 ; n < e . length ; n ++ ) a = e [ n ] , i = t ( a ) , o = i [ 1 ] , void 0 === s [ o ] && ( s [ o ] = [ ] , r [ o ] = [ ] ) , s [ o ] . push ( i [ 0 ] ) , r [ o ] . push ( a ) ; return { msgIDs : s , mids : r } } var i = { } , o = { } , s = 0 , r = 4294967296 ; return { getFullMessageID : e , getMessageIDInfo : t , getMessageLocalID : n , splitMessageIDsByChannels : a , fullMsgIDModulus : r } } ) , angular . module ( "myApp.templates" , [ ] ) . run ( [ "$templateCache" , function ( e ) { e . put ( "partials/desktop/audio_player.html" , ' < div class = "audio_player_wrap clearfix" > \ n \ t < a class = "im_message_file_button" ng - click = "togglePlay()" ng - class = "{im_message_file_button_dl_audio: audio.downloaded}" > \ n \ t < i class = "im_message_file_button_icon" ng - class = "{audio_player_btn_icon_pause: mediaPlayer.player.playing}" > < / i > \ n \ t < / a > \ n \ t < d i v c l a s s = " a u d i o _ p l a y e r _ t i t l e _ w r a p " > \ n \ t \ t < d i v c l a s s = " a u d i o _ p l a y e r _ m e t a p u l l - r i g h t " n g - i f = " a u d i o . d o w n l o a d e d & a m p ; & a m p ; ( m e d i a P l a y e r . p l a y e r . d u r a t i o n | | a u d i o . d u r a t i o n ) " n g - s w i t c h = " m e d i a P l a y e r . p l a y e r . p l a y i n g | | m e d i a P l a y e r . p l a y e r . c u r r e n t T i m e > 0 " > \ n \ t \ t \ t < s p a n n g - s w i t c h - w h e n = " t r u e " c l a s s = " a u d i o _ p l a y e r _ d u r a t i o n " n g - b i n d = " m e d i a P l a y e r . p l a y e r . c u r r e n t T i m e | d u r a t i o n R e m a i n s : ( m e d i a P l a y e r . p l a y e r . d u r a t i o n | | a u d i o . d u r a t i o n ) " > < / s p a n > \ n \ t \ t \ t < s p a n n g - s w i t c h - d e f a u l t c l a s s = " a u d i o _ p l a y e r _ d u r a t i o n " n g - b i n d = " m e d i a P l a y e r . p l a y e r . d u r a t i o n | | a u d i o . d u r a t i o n | d u r a t i o n " > < / s p a n > \ n \ t \ t < / d i v > \ n \ t \ t < s p a n c l a s s = " c o p y o n l y " > [ < / s p a n > \ n \ t \ t < a n g - a t t r - t i t l e = " { { a u d i o . f i
e . put ( "partials/desktop/chat_create_modal.html" , '<div class="md_simple_modal_wrap" my-modal-position>\n\n <div class="md_simple_modal_body">\n\n <form class="modal_simple_form" ng-submit="updateGroup()">\n\n <h4 my-i18n="group_create_modal_title"></h4>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="group_create_name"></label>\n <input class="md-input" my-focused type="text" ng-model="group.name" />\n </div>\n\n </form>\n\n </div>\n\n <div class="md_simple_modal_footer">\n <button class="btn btn-md" ng-click="$dismiss()" my-i18n="modal_cancel"></button>\n <button class="btn btn-md btn-md-primary" ng-class="{disabled: group.creating}" ng-click="createGroup()" ng-bind="group.creating ? \'group_create_submit_active\' : \'group_create_submit\' | i18n" ng-disabled="group.creating"></button>\n </div>\n\n</div>' ) , e . put ( "partials/desktop/chat_edit_modal.html" , '<div class="md_simple_modal_wrap" my-modal-position>\n\n <div class="md_simple_modal_body">\n\n <form class="modal_simple_form" ng-submit="updateGroup()">\n\n <h4 my-i18n="group_edit_modal_title"></h4>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="group_edit_name"></label>\n <input class="md-input" my-focused type="text" ng-model="group.name" />\n </div>\n\n </form>\n\n </div>\n\n <div class="md_simple_modal_footer">\n <button class="btn btn-md" ng-click="$dismiss()" my-i18n="modal_cancel"></button>\n <button class="btn btn-md btn-md-primary" ng-class="{disabled: group.updating}" ng-click="updateGroup()" ng-bind="group.updating ? \'group_edit_submit_active\' : \'group_edit_submit\' | i18n" ng-disabled="group.updating"></button>\n </div>\n\n</div>' ) , e . put ( "partials/desktop/chat_invite_link_modal.html" , '<div class="md_simple_modal_wrap" my-modal-position>\n\n <div class="md_simple_modal_body">\n\n <div class="modal_simple_form">\n\n <h4 my-i18n="group_invite_link_modal_title"></h4>\n\n <div ng-switch="exportedInvite.canRevoke">\n <div ng-switch-when="true">\n <div class="md-input-group md-textarea-group" my-labeled-input>\n <label class="md-input-label" my-i18n="group_invite_link_link_label"></label>\n <textarea class="md-input" ng-model="exportedInvite.link" rows="2" my-copy-field="\'ui_invite_select\'"></textarea>\n </div>\n </div>\n\n <div ng-switch-default>\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="group_invite_link_link_label"></label>\n <input class="md-input" type="text" ng-model="exportedInvite.link" my-copy-field="\'ui_invite_select\'" />\n </div>\n </div>\n\n </div>\n\n </div>\n\n </div>\n\n <div class="md_simple_modal_footer" ng-switch="exportedInvite.canRevoke">\n <div ng-switch-when="true">\n <button class="btn btn-md" ng-click="$dismiss()" my-i18n="modal_cancel"></button>\n <button class="btn btn-md btn-md-primary" ng-class="{disabled: exportedInvite.revoking}" ng-click="revokeLink()" ng-bind="exportedInvite.revoking ? \'group_invite_revoke_active\' : \'group_invite_revoke\' | i18n" ng-disabled="exportedInvite.revoking"></button>\n </div>\n </div>\n\n</div>' ) , e . put ( "partials/desktop/chat_modal.html" , '<div class="chat_modal_wrap md_modal_wrap" my-modal-position>\n\n <div class="md_modal_head">\n <div class="md_modal_title_wrap">\n <div class="md_modal_actions_wrap clearfix">\n <a class="md_modal_action md_modal_action_close" ng-click="$close()" my-i18n="modal_close"></a>\n <a class="md_modal_action" ng-if="hasRights(\'edit_title\' ) " ng-click=" editTitle ( ) " my-i18n=" modal _edit "></a>\n </div>\n <div class=" md _modal _title " my-i18n=" group _modal _info "></div>\n </div>\n\n <div class=" peer _modal _profile _wrap clearfix ">\n <div class=" peer _modal _photo _wrap pull - left " ng-switch=" photo . updating ">\n <div ng-switch-when=" true " class=" peer _modal _photo md _phot
e . put ( "partials/desktop/emoji_btn_tooltip.html" , '<div class="composer_emoji_btn_wrap">\n\n <div class="composer_emoji_tooltip_wrap">\n <div class="composer_emoji_tooltip">\n\n <div class="composer_emoji_tooltip_tabs">\n <a ng-repeat="tab in ::tabs" href="" class="composer_emoji_tooltip_tab" ng-class="[\'composer_emoji_tooltip_tab_\' + tab, curTab == tab ? \'active\' : \'\']" ng-click="tabSelect(tab)"></a>\n </div>\n\n <div class="composer_emoji_content" ng-switch="curTab == \'stickers\'">\n <div ng-switch-when="true" class="composer_emoji_content_emoticons">\n <a class="composer_emoticon_option" href="" ng-repeat="emoji in emojis" ng-click="emojiSelect(emoji)"></a>\n </div>\n <div ng-switch-default class="composer_emoji_content_stickers">\n <a class="composer_sticker_option" href="" ng-repeat="sticker in stickers" ng-click="stickerSelect(sticker)"></a>\n </div>\n </div>\n\n </div>\n </div>\n\n <a class="composer_emoji_btn">\n <i class="icon icon-emoji"></i>\n </a>\n\n</div>' ) , e . put ( "partials/desktop/error_modal.html" , '<div class="error_modal_wrap md_simple_modal_wrap" my-modal-position>\n\n <div class="md_simple_modal_body" ng-class="{md_simple_modal_alert_body: alert}">\n\n <h4 ng-if="error" class="md_simple_header" ng-switch="error.type">\n <span ng-switch-when="MEDIA_TYPE_NOT_SUPPORTED" my-i18n="error_modal_media_not_supported_title"></span>\n <span ng-switch-when="USERNAME_NOT_OCCUPIED" my-i18n="error_modal_not_found_title"></span>\n <span ng-switch-when="PASSWORD_RECOVERY_NA" my-i18n="error_modal_recovery_na_title"></span>\n <span ng-switch-default ng-switch="error.code">\n <span ng-switch-when="400" my-i18n="error_modal_bad_request_title"></span>\n <span ng-switch-when="401" my-i18n="error_modal_unauthorized_title"></span>\n <span ng-switch-when="403" my-i18n="error_modal_forbidden_title"></span>\n <span ng-switch-when="404" my-i18n="error_modal_not_found_title"></span>\n <span ng-switch-when="406" my-i18n="error_modal_network_title"></span>\n <span ng-switch-when="420" my-i18n="error_modal_flood_title"></span>\n <span ng-switch-default my-i18n="error_modal_internal_title"></span>\n </span>\n <span ng-switch-when="CALLBACK_RESPONSE"><!-- empty --></span>\n </h4>\n <h4 ng-if="!error" class="md_simple_header" ng-switch="title_html !== undefined ? \'html\' : (title.length > 0 ? \'text\' : \'default\' ) ">\n <span ng-switch-when=" html " ng-bind-html=" title _html "></span>\n <span ng-switch-when=" text " ng-bind=" title "></span>\n <span ng-switch-default my-i18n=" error _modal _alert "></span>\n </h4>\n\n <div ng-if=" error " class=" error _modal _description " ng-switch=" error . type ">\n <span ng-switch-when=" NETWORK _BAD _REQUEST " my-i18n=" error _modal _network _description "></span>\n <span ng-switch-when=" NETWORK _BAD _RESPONSE " my-i18n=" error _modal _network _description "></span>\n <span ng-switch-when=" FIRSTNAME _INVALID " my-i18n=" error _modal _firstname _invali _description "></span>\n <span ng-switch-when=" LASTNAME _INVALID " my-i18n=" error _modal _lastname _invalid _description "></span>\n <span ng-switch-when=" PHONE _NUMBER _INVALID " my-i18n=" error _modal _phone _invalid _description "></span>\n <span ng-switch-when=" USERS _TOO _MUCH " my-i18n=" error _modal _users _too _much _description "></span>\n <span ng-switch-when=" PHOTO _INVALID _DIMENSIONS " my-i18n=" error _modal _photo _dimensions _invalid _description "></span>\n <span ng-switch-when=" VIDEO _EXT _INVALID " my-i18n=" error _modal _video _file _invalid _description "></span>\n <span ng-switch-when=" PHOTO _CROP _SIZE _SMALL " my-i18n=" error _modal _photo _too _small _description "></span>\n <span ng-switch-when=" USER _NOT _USING _TELEGRAM " my-i18n=" error _modal _no _phone _user _description _md "></span>\n <span ng-switch-when=" USERS _NOT _USING _TELEGRAM " my-i18n=" error _modal _no _phone _users _description _md "></span>\n <span ng-switch-when=" PHONEBOOK _GET _CONTACTS _FAILED " my-i18n=" error _modal _phonebook _r
e . put ( "partials/desktop/import_contact_modal.html" , '<div class="md_simple_modal_wrap" my-modal-position>\n\n <div class="md_simple_modal_body">\n\n <form class="modal_simple_form" ng-submit="doImport()" name="importContactForm">\n\n <h4 my-i18n="contact_import_modal_title"></h4>\n\n <div class="md-input-group" my-labeled-input ng-class="{\'md-input-error\': importContactForm.phone.$invalid && importContactForm.phone.$touched}" my-labeled-input>\n <label class="md-input-label" ng-switch="importContactForm.phone.$invalid && importContactForm.phone.$touched">\n <span ng-switch-when="true" my-i18n="login_incorrect_number"></span>\n <span ng-switch-default my-i18n="contact_import_modal_phone"></span>\n </label>\n <input class="md-input" my-focused type="tel" ng-model="importContact.phone" ng-pattern="/^[-\\+\\(\\)\\d\\s]{7,32}$/" my-submit-on-enter name="phone" />\n </div>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="contact_edit_modal_first_name"></label>\n <input class="md-input" type="text" ng-model="importContact.first_name" my-submit-on-enter />\n </div>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="contact_edit_modal_last_name"></label>\n <input class="md-input" type="text" ng-model="importContact.last_name" my-submit-on-enter />\n </div>\n\n </form>\n\n </div>\n\n <div class="md_simple_modal_footer">\n <button class="btn btn-md" ng-click="$dismiss()" my-i18n="modal_cancel"></button>\n <button class="btn btn-md btn-md-primary" ng-class="{disabled: progress.enabled}" ng-click="doImport()" ng-bind="progress.enabled ? \'contact_import_modal_submit_active\' : \'contact_import_modal_submit\' | i18n" ng-disabled="progress.enabled"></button>\n </div>\n\n</div>' ) , e . put ( "partials/desktop/inactive.html" , '<div class="inactive_page_wrap">\n <div class="tg_head_split inactive_head"></div>\n <div class="im_page_wrap">\n <div class="inactive_page_content" my-vertical-position="0.35">\n <a class="inactive_image" ng-click="reload()"></a>\n <h3 class="inactive_title" my-i18n="inactive_title"></h3>\n <div class="inactive_description" my-i18n="inactive_description_md"></div>\n <div class="inactive_actions">\n <button class="btn btn-lg btn-md btn-md-primary" ng-click="reload()" my-i18n="inactive_reload_btn" my-focused></button>\n </div>\n </div>\n </div>\n</div>' ) , e . put ( "partials/desktop/inline_results.html" , '<a ng-if="botResults.switch_pm !== undefined" class="inline_switch_pm" ng-bind-html="botResults.switch_pm.rText" data-inlineid="_switch_pm_{{botResults.switch_pm.start_param}}"></a>\n\n<ul class="inline_results_wrap composer_dropdown">\n <li class="inline_result_wrap" ng-class="\'inline_result_\' + result.type" ng-repeat="result in botResults.results track by result.qID" ng-switch="result.type">\n\n <a ng-switch-when="gif" class="img_gif_with_progress_wrap" data-inlineid="{{result.qID}}" ng-style="::{width: result.thumbW, height: result.thumbH}" ng-switch="result._">\n <div class="inline_result_ind"></div>\n <div ng-switch-when="botInlineMediaResult" ng-switch="result.document.url !== undefined" class="inline_result_gif_mtproto">\n <div ng-switch-when="true" ng-switch="result.document.mime_type == \'video/mp4\' ">\n <video ng-switch-when=" true " width=" { { result . thumbW } } " height=" { { result . thumbH } } " loop autoplay class=" img _gif _video ">\n <source ng-src=" { { result . document . url } } " type=" video / mp4 ">\n </video>\n <img ng-switch-default class=" img _gif _image " ng-src=" { { result . document . url } } " width=" { { result . thumbW } } " height=" { { result . thumbH } } " />\n </div>\n <div ng-switch-default class=" img _gif _image _wrap ">\n <img class=" img _gif _thumb " my-load-thumb thumb=" result . document . thumb " width=" { { result . thumbW } } " height=" { { result . thumbH } } " />\n </div>\n </div>\n <div ng-switch-default ng-switch=" result . content
e . put ( "partials/desktop/message_attach_venue.html" , '<div class="im_message_venue clearfix">\n\n <a ng-href="{{::media.mapUrl}}" target="_blank" rel="noopener noreferrer" class="im_message_venue_geopoint_wrap">\n <img\n class="im_message_venue_geopoint_image"\n my-geo-point-map="media.geo"\n width="100"\n height="100"\n alt="[{{::\'conversation_media_location\' | i18n}} {{::media.mapUrl}}]"\n />\n </a>\n\n <div class="im_message_venue_info">\n <div class="im_message_venue_title_wrap">\n <a ng-href="{{::media.mapUrl}}" target="_blank" rel="noopener noreferrer" class="im_message_document_name" ng-bind="::media.title"></a>\n </div>\n <div class="im_message_venue_address" ng-bind="::media.address"></div>\n </div>\n\n</div>\n' ) , e . put ( "partials/desktop/message_attach_webpage.html" , '<div ng-show="media.webpage._ == \'webPage\'" class="im_message_webpage_wrap clearfix" ng-switch="media.webpage.type">\n <div ng-switch-when="photo" class="im_message_webpage_photo">\n <div class="im_message_webpage_title">\n <a href="{{media.webpage.url}}" target="_blank" rel="noopener noreferrer" ng-bind-html="media.webpage.rTitle"></a>\n </div>\n <div ng-if="media.webpage.description.length" class="im_message_webpage_description" ng-bind-html="media.webpage.rDescription"></div>\n <a class="im_message_photo_thumb" ng-click="openPhoto(media.webpage.photo.id, {w: media.webpage.id, m: messageId})" ng-style="::{width: media.webpage.photo.thumb.width + \'px\'}" ng-mouseover="preloadPhoto(media.webpage.photo.id)">\n <img\n class="im_message_photo_thumb"\n my-load-thumb\n thumb="media.webpage.photo.thumb"\n alt="[{{::\'conversation_media_photo\' | i18n}}]"\n />\n </a>\n </div>\n <div ng-switch-when="video" class="im_message_webpage_video">\n <div class="im_message_webpage_site" ng-bind="media.webpage.site_name || media.webpage.display_url"></div>\n <div class="im_message_webpage_title">\n <a ng-click="openEmbed($event)" href="{{media.webpage.url}}" target="_blank" rel="noopener noreferrer" ng-bind-html="media.webpage.rTitle"></a>\n </div>\n <div ng-if="media.webpage.description.length" class="im_message_webpage_description" ng-bind-html="media.webpage.rDescription"></div>\n <a class="im_message_video_thumb" ng-click="openEmbed($event)" ng-href="{{media.webpage.url}}" target="_blank" rel="noopener noreferrer" ng-style="::{width: video.thumb.width + \'px\'}">\n <span ng-if="media.webpage.duration > 0" class="im_message_video_duration nocopy" data-content="{{::media.webpage.duration | duration}}"></span>\n <i class="icon icon-videoplay"></i>\n <img\n class="im_message_video_thumb"\n my-load-thumb\n thumb="media.webpage.photo.thumb"\n alt="[{{::\'conversation_media_video\' | i18n } } ] "\n />\n </a>\n </div>\n\n <div ng-switch-when=" document " class=" im _message _webpage _document ">\n <div my-message-document=" media . webpage " message-id=" messageId "></div>\n </div>\n\n <div ng-switch-when=" gif " class=" im _message _webpage _gif ">\n <div class=" im _message _webpage _title ">\n <a href=" { { media . webpage . url } } " target=" _blank " rel=" noopener noreferrer " ng-bind-html=" media . webpage . rTitle "></a>\n </div>\n <div my-message-document=" media . webpage " message-id=" messageId "></div>\n </div>\n\n <div ng-switch-default class=" im _message _webpage _article ">\n <a ng-if=" media . webpage . photo " href=" { { media . webpage . url } } " target=" _blank " rel=" noopener noreferrer " class=" im _message _webpage _article _photo pull - right ">\n <img\n class=" im _message _article _thumb "\n my-load-thumb\n thumb=" media . webpage . photo . thumb "\n />\n </a>\n <div ng-if=" media . webpage . site _name " class=" im _message _webpage _site " ng-bind=" media . webpage . site _name "></div>\n <div class=" im _message _webpage _title ">\n <a ng-click=" openEmbed ( $event ) " href=" { { media . webpage . url } } " target=" _blank " ng-bind-html=" media . webpage . rTitle "></a>\n </div>\n <div ng-if=" media . webpage . description . length " c
e . put ( "partials/desktop/short_message.html" , '<span class="im_short_message_media" ng-if="message.media" ng-switch="message.media._">\n <span ng-switch-when="messageMediaPhoto" my-i18n="conversation_media_photo"></span>\n <span ng-switch-when="messageMediaDocument" ng-switch="message.media.document.type || false">\n <span ng-switch-when="sticker">\n <span ng-bind-html="message.media.document.stickerEmoji"></span>\n <my-i18n msgid="conversation_media_sticker"></my-i18n>\n </span>\n <span ng-switch-when="gif" my-i18n="conversation_media_gif"></span>\n <span ng-switch-when="audio" my-i18n="conversation_media_audio"></span>\n <span ng-switch-when="voice" my-i18n="conversation_media_audio"></span>\n <span ng-switch-when="video" my-i18n="conversation_media_video"></span>\n <span ng-switch-default ng-bind="message.media.document.file_name"></span>\n </span>\n <span ng-switch-when="messageMediaGeo" my-i18n="conversation_media_location"></span>\n <span ng-switch-when="messageMediaVenue" my-i18n="conversation_media_location"></span>\n <span ng-switch-when="messageMediaContact" my-i18n="conversation_media_contact"></span>\n <span ng-switch-when="messageMediaGame">\n <span my-emoji-image="🎮"></span>\n <span ng-bind-html="message.media.game.rTitle"></span>\n </span>\n</span><span class="im_short_message_service" ng-if="message._ == \'messageService\'" ng-switch="message.action._">\n <span ng-switch-when="messageActionChatCreate" my-i18n="conversation_group_created"></span>\n <span ng-switch-when="messageActionChatEditTitle" my-i18n="conversation_group_renamed"></span>\n <span ng-switch-when="messageActionChatEditPhoto" my-i18n="conversation_group_photo_updated"></span>\n <span ng-switch-when="messageActionChatDeletePhoto" my-i18n="conversation_group_photo_removed"></span>\n <span ng-switch-when="messageActionChatJoinedByLink" my-i18n="conversation_joined_by_link"></span>\n <span ng-switch-when="messageActionChatReturn" my-i18n="conversation_returned_to_group"></span>\n <span ng-switch-when="messageActionChatJoined" my-i18n="conversation_joined_group"></span>\n <span ng-switch-when="messageActionChatAddUser" my-i18n="conversation_invited_user">\n <my-i18n-param name="user"><span my-peer-link="message.action.user_id"></span></my-i18n-param>\n </span>\n <span ng-switch-when="messageActionChatAddUsers" my-i18n="">\n <ng-pluralize count="message.action.users.length"\n when="conversation_invited_users">\n </ng-pluralize>\n </span>\n <span ng-switch-when="messageActionChatLeave" my-i18n="conversation_left_group"></span>\n <span ng-switch-when="messageActionChatDeleteUser" my-i18n="conversation_kicked_user">\n <my-i18n-param name="user"><span my-peer-link="message.action.user_id"></span></my-i18n-param>\n </span>\n <span ng-switch-when="messageActionChatMigrateTo" my-i18n="conversation_converted_to_supergroup"></span>\n <span ng-switch-when="messageActionChannelMigrateFrom" my-i18n="conversation_converted_to_supergroup"></span>\n <span ng-switch-when="messageActionChannelCreate" my-i18n="conversation_created_channel"></span>\n <span ng-switch-when="messageActionChannelEditTitle" my-i18n="conversation_changed_channel_name"></span>\n <span ng-switch-when="messageActionChannelEditPhoto" my-i18n="conversation_changed_channel_photo"></span>\n <span ng-switch-when="messageActionPinMessage" my-i18n="conversation_pinned_message"></span>\n <span ng-switch-when="messageActionGameScore">\n <ng-pluralize count="message.action.score"\n when="conversation_scored_X"></ng-pluralize>\n </my-i18n-param>\n </span>\n\n</span><span class="im_short_message_text" ng-if="message.message.length && (!message.media || message.media._ == \'messageMediaWebPage\')" ng-bind-html="message.richMessage"></span>' ) , e . put ( "partials/desktop/slider.html" , '<div class="tg_slider_wrap">\n\t<div class="tg_slider_thumb"></div>\n\t<div class="tg_slider_track">\n\t\t<div class="tg_slider_track_fill"></div>\n\t</div>\n</div>' ) , e . put ( " partials / desktop / stickerset
e . put ( "partials/mobile/channel_modal.html" , '<div class="chat_modal_wrap">\n\n <div class="tg_page_head tg_modal_head">\n <div class="navbar navbar-static-top navbar-inverse">\n <div class="container">\n\n <div class="navbar-toggle-wrap dropdown" dropdown ng-if="chatFull.chat.pFlags.creator || !chatFull.chat.pFlags.left && !chatFull.chat.pFlags.kicked">\n <a class="dropdown-toggle navbar-toggle" dropdown-toggle>\n <span class="icon-bar"></span>\n <span class="icon-bar"></span>\n <span class="icon-bar"></span>\n </a>\n <ul class="dropdown-menu">\n <li ng-if="hasRights(\'edit_photo\')">\n <a ng-click="deletePhoto()" my-i18n="group_modal_menu_delete_photo"></a>\n </li>\n <li ng-if="hasRights(\'edit_title\')">\n <a ng-click="editChannel()" my-i18n="modal_edit"></a>\n </li>\n <li ng-if="chatFull.chat.pFlags.creator">\n <a ng-click="deleteChannel()" my-i18n="channel_modal_delete_channel"></a>\n </li>\n <li ng-if="!chatFull.chat.pFlags.creator && !chatFull.chat.pFlags.left && !chatFull.chat.pFlags.kicked">\n <a ng-click="leaveChannel()" my-i18n="group_modal_menu_leave"></a>\n </li>\n </ul>\n </div>\n\n <div class="navbar-header">\n\n <ul class="nav navbar-nav navbar-quick-nav">\n <li>\n <a ng-click="$close()" class="navbar-quick-media-back">\n <i class="icon icon-back"></i>\n <div class="navbar-quick-back-title">\n <h4 my-i18n="channel_modal_info"></h4>\n </div>\n </a>\n </li>\n </ul>\n\n </div>\n\n </div>\n </div>\n </div>\n\n <div class="modal-body mobile_modal_body">\n\n <div class="mobile_user_modal_photo_profile_wrap">\n\n <a ng-click="openPhoto(chatFull.chat_photo.id, {p: -chatFull.chat.id})" class="mobile_user_modal_image_wrap pull-left" my-peer-photolink="::-chatFull.chat.id" img-class="mobile_user_modal_image mobile_chat_modal_image" no-open="true" watch="true" ng-class="{disabled: !chatFull.chat.photo.photo_small}" ng-disabled="!chatFull.chat.photo.photo_small"></a>\n\n <div class="mobile_user_modal_info_wrap clearfix">\n <h4 class="mobile_user_modal_header" my-peer-link="-chatFull.chat.id" verified="true"></h4>\n <p class="mobile_user_modal_status" ng-if="chatFull.participants_count > 0">\n <ng-pluralize count="chatFull.participants_count"\n when="group_modal_pluralize_participants">\n </ng-pluralize>\n </p>\n </div>\n\n </div>\n\n <div class="mobile_modal_section" ng-if="chatFull.rAbout">\n <h4 class="mobile_modal_section_header" my-i18n="channel_modal_description"></h4>\n <div class="mobile_modal_section_value" ng-bind-html="chatFull.rAbout"></div>\n </div>\n\n <div class="mobile_modal_section" ng-if="chatFull.chat.username || chatFull.chat.pFlags.creator">\n <h4 class="mobile_modal_section_header" my-i18n="channel_modal_share_link"></h4>\n <div class="mobile_modal_section_value" ng-switch="chatFull.chat.username.length > 0">\n <a ng-switch-when="true" class="settings_modal_username_link" ng-click="shareLink($event)" ng-bind="\'https://telegram.me/\' + chatFull.chat.username" ng-href="https://telegram.me/{{chatFull.chat.username}}" target="_blank"></a>\n <a ng-switch-default ng-click="shareLink($event)" ng-bind="chatFull.exported_invite.link" ng-href="{{chatFull.exported_invite.link}}" target="_blank"></a>\n </div>\n </div>\n\n <div class="mobile_modal_action_wrap" ng-if="hasRights(\'invite\' ) ">\n <a class=" mobile _modal _action " ng-click=" inviteToChannel ( ) " my-i18n=" channel _modal _add _member "></a>\n </div>\n\n <div class=" mobile _modal _action _wrap " ng-if=" chatFull . chat . pFlags . left ">\n <a class=" mobile _modal _action " ng-click=" joinChannel ( ) " my-i18n=" channel _modal _join " > < / a > \ n < / d i v > \
e . put ( "partials/mobile/im.html" , '<div my-head></div>\n\n<div class="im_page_wrap" ng-class="{im_page_peer_not_selected: !curDialog.peer}">\n\n <div class="im_page_split clearfix">\n\n <div ng-controller="AppImDialogsController" my-dialogs class="im_dialogs_col_wrap" ng-class="search.query.length > 0 ? \'im_dialogs_col_search\' : \'\'">\n <div class="im_dialogs_panel">\n <div class="im_dialogs_search">\n <input class="form-control im_dialogs_search_field no_outline" type="search" placeholder="{{\'modal_search\' | i18n}}" ng-model="search.query" autocomplete="off" />\n <a class="im_dialogs_search_clear tg_search_clear" ng-click="searchClear()" ng-show="search.query.length">\n <i class="icon icon-search-clear"></i>\n </a>\n </div>\n </div>\n\n <div my-dialogs-list-mobile class="im_dialogs_col im_dialogs_scrollable_wrap mobile_scrollable_wrap">\n\n <div class="im_dialogs_empty_wrap" ng-if="isEmpty.contacts" my-vertical-position="0.4">\n <h3 class="im_dialogs_empty_header" my-i18n="im_no_contacts"></h3>\n <p class="im_dialogs_empty_lead" my-i18n="im_get_started_long"></p>\n <button type="button" class="btn btn-primary btn-block im_dialogs_add_contact" ng-click="importContact()" my-i18n="im_add_contact"></button>\n <button ng-if="phonebookAvailable" type="button" class="btn btn-primary btn-block im_dialogs_import_phonebook" ng-click="importPhonebook()" my-i18n="im_import_phonebook"></button>\n </div>\n\n <ul class="nav nav-pills nav-stacked">\n <li class="im_dialog_wrap" my-dialog dialog-message="dialogMessage" ng-repeat="dialogMessage in dialogs track by dialogMessage.peerID" ng-class="{active: curDialog.peerID == dialogMessage.peerID}"></li>\n </ul>\n\n <div class="im_dialogs_contacts_wrap" ng-show="contacts.length > 0">\n <h5 my-i18n="im_contacts_title"></h5>\n <ul class="nav nav-pills nav-stacked">\n <li class="im_dialog_wrap" ng-repeat="contact in contacts | orderBy:\'user.sortName\' track by contact.userID" ng-class="{active: curDialog.peerID == contact.userID}">\n <a class="im_dialog" ng-mousedown="dialogSelect(contact.peerString)">\n <div class="im_dialog_photo pull-left" my-peer-photolink="contact.userID" img-class="im_dialog_photo" watch="true"></div>\n <div class="im_dialog_message_wrap">\n <div class="im_dialog_peer">\n <span class="im_dialog_user" my-peer-link="contact.userID" verified="true"></span>\n </div>\n <div class="im_dialog_message">\n <span class="im_dialog_message_text" my-user-status="::contact.userID"></span>\n </div>\n </div>\n </a>\n </li>\n </ul>\n </div>\n\n <div class="im_dialogs_contacts_wrap" ng-show="foundPeers.length > 0">\n <h5 my-i18n="im_found_title"></h5>\n <ul class="nav nav-pills nav-stacked">\n <li class="im_dialog_wrap" ng-repeat="foundPeer in foundPeers track by foundPeer.id" ng-class="{active: curDialog.peerID == foundPeer.id}">\n <a class="im_dialog" ng-mousedown="dialogSelect(foundPeer.peerString)">\n <div class="im_dialog_photo pull-left" my-peer-photolink="foundPeer.id" img-class="im_dialog_photo" watch="true"></div>\n <div class="im_dialog_message_wrap">\n <div class="im_dialog_peer">\n <span class="im_dialog_user" my-peer-link="foundPeer.id" verified="true"></span>\n </div>\n <div class="im_dialog_message">\n <span class="im_dialog_message_text" ng-bind="::\'@\' + foundPeer . username "></span>\n </div>\n </div>\n </a>\n </li>\n </ul>\n </div>\n\n <div class=" im _dialogs _messages _wrap " ng-show=" foundMessages . length > 0 ">\n <h5 my-i18n=" im _messages " > <
e . put ( "partials/mobile/message_attach_geo.html" , '<a ng-href="{{::media.mapUrl}}" target="_blank" class="im_message_geopoint">\n <img\n class="im_message_venue_geopoint_image"\n my-geo-point-map="media.geo"\n width="200"\n height="100"\n />\n</a>' ) , e . put ( "partials/mobile/message_attach_pending.html" , '<div class="im_message_document im_message_upload_file" ng-class="::\'im_message_upload_\' + media.type">\n <div class="im_message_file_button im_message_file_button_upload">\n <i class="im_message_file_button_icon"></i>\n </div>\n <div class="im_message_document_info">\n <div class="im_message_document_name_wrap">\n <span class="im_message_document_name" ng-bind="::media.file_name"></span>\n <span class="im_message_document_size" ng-if="media.progress" ng-bind="media.progress | formatSizeProgress"></span>\n </div>\n <div class="clearfix im_message_cancelable_progress_wrap">\n <a class="im_message_media_progress_cancel pull-right" ng-click="media.progress.cancel()" my-i18n="modal_cancel"></a>\n <div class="im_message_download_progress_wrap">\n <div class="progress tg_down_progress">\n <div class="progress-bar progress-bar-success" role="progressbar" ng-style="{width: media.progress.percent + \'%\'}"></div>\n </div>\n </div>\n </div>\n </div>\n</div>\n' ) , e . put ( "partials/mobile/message_attach_photo.html" , '<a class="im_message_photo_thumb" ng-click="openPhoto(media.photo.id, {m: messageId})" ng-style="::{width: media.photo.thumb.width + \'px\'}" ng-mouseover="preloadPhoto(media.photo.id)">\n <img\n class="im_message_photo_thumb"\n my-load-thumb\n thumb="media.photo.thumb"\n />\n</a>\n<div ng-if="::media.rCaption" class="im_message_photo_caption" ng-bind-html="::media.rCaption"></div>' ) , e . put ( "partials/mobile/message_attach_venue.html" , '<div class="im_message_venue clearfix">\n\n <a ng-href="{{::media.mapUrl}}" target="_blank" rel="noopener noreferrer" class="im_message_venue_geopoint_wrap">\n <img\n class="im_message_venue_geopoint_image"\n my-geo-point-map="media.geo"\n width="100"\n height="100"\n alt="[{{::\'conversation_media_location\' | i18n}} {{::media.mapUrl}}]"\n />\n </a>\n\n <div class="im_message_venue_info">\n <div class="im_message_venue_title_wrap">\n <a ng-href="{{::media.mapUrl}}" target="_blank" rel="noopener noreferrer" class="im_message_document_name" ng-bind="::media.title"></a>\n </div>\n <div class="im_message_venue_address" ng-bind="::media.address"></div>\n </div>\n\n</div>\n' ) , e . put ( "partials/mobile/message_attach_webpage.html" , '<div ng-show="webpage._ == \'webPage\'" class="im_message_webpage_wrap clearfix" ng-switch="webpage.type">\n <div ng-switch-when="photo" class="im_message_webpage_photo">\n <div class="im_message_webpage_site" ng-bind="webpage.site_name || webpage.display_url"></div>\n <div class="im_message_webpage_title">\n <a href="{{webpage.url}}" target="_blank" rel="noopener noreferrer" ng-bind-html="webpage.rTitle"></a>\n </div>\n <div ng-if="webpage.description.length" class="im_message_webpage_description" ng-bind-html="webpage.rDescription"></div>\n <a class="im_message_photo_thumb" ng-click="openPhoto(webpage.photo.id, {w: webpage.id, m: messageId})" ng-style="::{width: webpage.photo.thumb.width + \'px\' } " ng-mouseover=" preloadPhoto ( webpage . photo . id ) ">\n <img\n class=" im _message _photo _thumb "\n my-load-thumb\n thumb=" webpage . photo . thumb "\n />\n </a>\n </div>\n <div ng-switch-when=" video " class=" im _message _webpage _video ">\n <div class=" im _message _webpage _site " ng-bind=" webpage . site _name || webpage . display _url "></div>\n <div class=" im _message _webpage _title ">\n <a ng-click=" openEmbed ( $event ) " href=" { { webpage . url } } " target=" _blank " rel=" noopener noreferrer " ng-bind-html=" webpage . rTitle "></a>\n </div>\n <div ng-if=" webpage . description . length " class=" im _message _webpage _description " ng-bind-html=" webpage . rDescription "></div>\n <a class=" im _message _video _thumb " ng-click=" openEmb
e . put ( "partials/mobile/stickerset_modal.html" , '<div class="stickerset_modal_wrap">\n\n <div class="tg_page_head tg_modal_head">\n <div class="navbar navbar-static-top navbar-inverse">\n <div class="container">\n\n <div class="navbar-header">\n\n <ul class="nav navbar-nav navbar-quick-nav">\n <li class="navbar-quick-right" ng-if="stickersetLoaded" ng-switch="stickersetInstalled">\n <a ng-switch-when="true" my-i18n="stickerset_modal_uninstall" ng-click="toggleInstalled(false)"></a>\n <a ng-switch-when="false" my-i18n="stickerset_modal_install" ng-click="toggleInstalled(true)"></a>\n </li>\n <li>\n <a ng-click="$dismiss()" class="navbar-quick-media-back">\n <i class="icon icon-back"></i>\n <div class="navbar-quick-back-title">\n <h4 ng-switch="!stickersetLoaded">\n <span ng-switch-when="true" my-i18n="stickerset_modal_title_loading"></span>\n <span ng-switch-default ng-bind="stickerset.title"></span>\n </h4>\n </div>\n </a>\n </li>\n </ul>\n\n </div>\n\n </div>\n </div>\n </div>\n\n <div class="modal-body">\n\n <div my-stickers-list class="stickerset_modal_col">\n\n <div class="stickerset_wrap nano" my-infinite-scroller>\n <div class="stickerset_scrollable_wrap nano-content" ng-switch="!stickersetLoaded">\n\n <div ng-switch-when="true" class="stickerset_modal_loading" my-vertical-position="0.2" padding="true" my-i18n="stickerset_modal_loading">\n <my-i18n-param name="dots">\n <span my-loading-dots></span>\n </my-i18n-param>\n </div>\n\n <div ng-switch-default class="stickerset_modal_stickers_list clearfix">\n <div class="stickerset_modal_sticker_wrap" ng-repeat="sticker in documents | limitTo: slice.limit">\n <div class="stickerset_modal_sticker" my-load-sticker document="sticker" thumb="true"></div>\n <div class="stickerset_modal_sticker_alt" ng-bind-html="sticker.stickerEmoji"></div>\n </div>\n </div>\n\n </div>\n </div>\n\n </div>\n\n </div>\n\n</div>' ) , e . put ( "partials/mobile/user_modal.html" , ' < div class = "mobile_user_modal_wrap" > \ n \ n < div class = "tg_page_head tg_modal_head" > \ n < div class = "navbar navbar-static-top navbar-inverse" > \ n < div class = "container" > \ n \ n < div class = "navbar-toggle-wrap dropdown" dropdown > \ n < a class = "dropdown-toggle navbar-toggle" dropdown - toggle > \ n < span class = "icon-bar" > < / s p a n > \ n < s p a n c l a s s = " i c o n - b a r " > < / s p a n > \ n < s p a n c l a s s = " i c o n - b a r " > < / s p a n > \ n < / a > \ n < u l c l a s s = " d r o p d o w n - m e n u " > \ n < l i n g - i f = " u s e r . p F l a g s . c o n t a c t " > \ n < a n g - c l i c k = " i m p o r t C o n t a c t ( t r u e ) " m y - i 1 8 n = " u s e r _ m o d a l _ e d i t _ c o n t a c t " > < / a > \ n < / l i > \ n < l i n g - i f = " u s e r . p F l a g s . c o n t a c t " > \ n < a n g - c l i c k = " d e l e t e C o n t a c t ( ) " m y - i 1 8 n = " u s e r _ m o d a l _ d e l e t e _ c o n t a c t " > < / a > \ n < / l i > \ n < l i n g - i f = " u s e r . p h o n e . l e n g t h > 0 & a m p ; & a m p ; ! u s e r . p F l a g s . c o n t a c t & a m p ; & a m p ; ! u s e r . p F l a g s . s e l f " > \ n < a n g - c l i c k = " i m p o r t C o n t a c t ( ) " m y - i 1 8 n = " u s e r _ m o d a l _ a d d _ c o n t a c t " > < / a > \ n < / l i > \ n < l i > \ n < a n g - c l i c k = " f l u s h H i s t o r y ( t r u e ) " m y - i 1 8 n = " u s e r _ m o d a l _ c l e a r _ h i s t o r y " > < / a > \ n < / l i > \ n < l i > \ n < a n g - c l i c k = " f l u s h H i s t o r y ( ) " m y - i 1 8 n = " u s e r _ m o d a l _ d e l e t e _ c h a t " > < / a > \ n < / l i > \ n < / u l > \ n < / d i v > \ n \ n < d i v c l a s s = " n a v b a r - h e a d e r " > \ n \ n < u l c l a s s = " n a v n a v b a r - n a v n a v b a r - q u i c k - n a v " > \ n < l i > \ n < a n g - c l i c k = " $ c l o s e ( ) " c l a s s = " n a v b a r - q u i c k - m e d i a - b a c k " > \ n < i c l a s s = " i c o n i c o n - b a c k " > < / i > \ n < d i v c l a s s = " n a v b a r - q u i c k - b a c k - t i t l e " > \ n < h 4 m y - i 1 8 n = " u s e r _ m o d a l _ c o n t a c t _ i n f o " > < / h 4 > \ n < / d i v > \ n < / a > \ n < / l i > \ n < / u l > \ n \ n < / d i v > \ n \ n < / d i v > \ n <
h . setStartAfter ( g ) , h . collapse ( ! 0 ) , p . removeAllRanges ( ) , p . addRange ( h ) } , 0 ) } } else document . selection && "Control" != document . selection . type && document . selection . createRange ( ) . pasteHTML ( u ) } } else { var n = this . textareaEl [ 0 ] , o = n . value , s = this . isActive ? getFieldSelection ( n ) : o . length , r = o . substr ( s ) , l = o . substr ( 0 , s ) , c = t && l . match ( /:([\S]*)$/ ) , d = EmojiHelper . emojis [ e ] ; if ( c && c [ 0 ] ) var f = l . substr ( 0 , c . index ) + ":" + d [ 1 ] + ": " + r , _ = c . index + d [ 1 ] . length + 3 ; else var f = l + ":" + d [ 1 ] + ": " + r , _ = l . length + d [ 1 ] . length + 3 ; n . value = f , setFieldSelection ( n , _ ) } this . hideSuggestions ( ) , this . onChange ( ) } , MessageComposer . prototype . onMentionsUpdated = function ( e ) { delete this . previousQuery , this . isActive && this . checkAutocomplete ( ) } , MessageComposer . prototype . onMentionSelected = function ( e , t ) { var n = ! 0 ; if ( "#" == e . charAt ( 0 ) && ( n = ! 1 , e = e . substr ( 1 ) , t = t . replace ( /\(\)@/ , "" ) ) , this . richTextareaEl ) { var a = this . richTextareaEl [ 0 ] ; this . isActive || this . restoreSelection ( ) || setRichFocus ( a ) ; var i , o = getRichValueWithCaret ( a ) , s = o [ 0 ] , r = o [ 1 ] >= 0 ? o [ 1 ] : s . length , l = s . substr ( r ) , c = s . substr ( 0 , r ) , d = c . match ( /@([\S]*)$/ ) ; i = d && d [ 0 ] ? c . substr ( 0 , d . index ) + "@" + e : c + "@" + e ; var u ; n ? l . length ? ( this . selId = ( this . selId || 0 ) + 1 , u = this . getRichHtml ( i ) + ' <span id="composer_sel' + this . selId + '"></span>' + this . getRichHtml ( l ) , this . richTextareaEl . html ( u ) , setRichFocus ( a , $ ( "#composer_sel" + this . selId ) [ 0 ] ) ) : ( u = this . getRichHtml ( i ) + " " , this . richTextareaEl . html ( u ) , setRichFocus ( a ) ) : ( this . selId = ( this . selId || 0 ) + 1 , u = this . getRichHtml ( i ) + ' (<span id="composer_sel' + this . selId + '">' + encodeEntities ( t ) + "</span>) " + this . getRichHtml ( l ) , this . richTextareaEl . html ( u ) , setRichFocus ( a , $ ( "#composer_sel" + this . selId ) [ 0 ] , ! 0 ) ) } else { var i , p , m , g , a = this . textareaEl [ 0 ] , s = a . value , r = this . isActive ? getFieldSelection ( a ) : s . length , l = s . substr ( r ) , c = s . substr ( 0 , r ) , d = c . match ( /@([\S]*)$/ ) ; i = d && d [ 0 ] ? c . substr ( 0 , d . index ) + "@" + e : c + "@" + e , n ? ( p = i + "@" + e + " " + l , m = d . index + e . length + 2 ) : ( p = i + "@" + e + " (" + t + ") " + l , m = d . index + e . length + 2 , g = m + t . length ) , a . value = p , setFieldSelection ( a , m , g ) } this . hideSuggestions ( ) , this . onChange ( ) } , MessageComposer . prototype . onCommandSelected = function ( e , t ) { if ( t ) if ( this . richTextareaEl ) this . richTextareaEl . html ( encodeEntities ( e ) + " " ) , setRichFocus ( this . richTextareaEl [ 0 ] ) ; else { var n = this . textareaEl [ 0 ] ; n . value = e + " " , setFieldSelection ( n ) } else this . onCommandSend ( e ) ; this . hideSuggestions ( ) , this . onChange ( ) } , MessageComposer . prototype . onChange = function ( e ) { if ( this . richTextareaEl ) { delete this . keyupStarted ; var t = getRichValue ( this . richTextareaEl [ 0 ] ) ; this . textareaEl . val ( t ) . trigger ( "change" ) } this . updateInlinePlaceholder ( ) } , MessageComposer . prototype . getEmojiHtml = function ( e , t ) { t = t || EmojiHelper . emojis [ e ] ; var n = 20 , a = EmojiHelper . spritesheetPositions [ e ] , i = a [ 0 ] , o = ( a [ 1 ] , n * a [ 3 ] ) , s = n * a [ 2 ] ; return '<img src="img/blank.gif" alt=":' + encodeEntities ( t [ 1 ] ) + ':" data-code="' + encodeEntities ( e ) + '" class="emoji emoji-w20 emoji-spritesheet-' + i + '" style="background-position: -' + o + "px -" + s + 'px;" onresizestart="return false" />' } , MessageComposer . prototype . setValue = function ( e ) { this . richTextareaEl ? ( this . richTextareaEl . html ( this . getRichHtml ( e ) ) , this . lastLength = e . length , this . wasEmpty = ! e . length , this . onKeyEvent ( { type : "keyup" } ) ) : this . textareaEl . val ( e ) } , MessageComposer . prototype . setFocusedValue = function ( e ) { var t = e [ 0 ] , n = e [ 1 ] , a = e [ 2 ] ; if ( this . richTextareaEl ) { this . selId = ( this . selId || 0 ) + 1 ; var i = this . getRichHtml ( t ) + '<span id="composer_sel' + this . selId + '">' + this . getRichHtml ( n ) + "</span>" + this . getRichHtml ( a ) ; this . richTextareaEl . html ( i ) , setRichFocus ( this . richTextareaEl [ 0 ] , $ ( "#composer_sel" + this . selId ) [ 0 ] , ! 0 ) } else this . textareaEl . val ( t + n + a ) , setFieldSelection ( this . textareaEl [ 0 ] , t . length , t . length + n . length ) } , MessageComposer . prototype . getRichHtml = function ( e ) { var t = $ ( "<div>" ) . text ( e ) . html ( ) ; return t = t . replace ( /\n/g , "<br/>" ) , t = t . replace ( /:([A-Za-z0-9\-\+\*_]+?):/gi , function ( e , t ) { var n = EmojiHelper . shortcuts [ t ] ; return void 0 !== n ? this . getEmojiHtml ( n ) : e } . bind ( this ) ) , t = t . replace ( / /g , " " ) . replace ( /^ | $/g , " " ) } , MessageComposer . prototype . focus = function ( ) { this . richTextareaEl ? setZeroTimeout ( function ( ) { setRichFocus ( this . richTextareaEl [ 0 ] ) } . bind ( this ) ) : setFieldSelection ( this . textareaEl [ 0 ] ) } , MessageComposer . prototype . blur = function ( ) { this . richTextareaEl
if ( a && ! isInDOM ( a [ 0 ] ) ) return a . attr ( "data-category" , n ) , void e . replaceWith ( a ) ; var i = o . $new ( ! 0 ) ; i . document = c . getDoc ( t ) , N ( i , function ( a ) { R [ t ] = a , a . attr ( "data-category" , n ) , e . replaceWith ( a ) } ) } , onStickersetSelected : function ( e ) { l . openStickersetLink ( e ) } , onEmojiSelected : function ( e ) { o . $apply ( function ( ) { L . onEmojiSelected ( e ) } ) } , onStickerSelected : function ( e ) { o . $apply ( function ( ) { o . draftMessage . sticker = e } ) } , langpack : { im _emoji _tab : e ( "im_emoji_tab" ) , im _stickers _tab : e ( "im_stickers_tab" ) } } ) ; o . $on ( "stickers_changed" , function ( ) { U . onStickersChanged ( ) } ) ; var O ; E && ( O = new EmojiPanel ( E , { onEmojiSelected : function ( e ) { L . onEmojiSelected ( e ) } } ) ) ; var L = new MessageComposer ( I , { onTyping : function ( ) { o . $emit ( "ui_typing" ) } , getSendOnEnter : function ( ) { return j } , dropdownDirective : function ( e , t ) { var n = o . $new ( ! 0 ) ; a ( "<div><div my-composer-dropdown></div></div>" ) ( n , function ( n , a ) { e . replaceWith ( n ) , t ( a , n ) } ) } , mentions : o . mentions , commands : o . commands , onMessageSubmit : f , onInlineResultSend : _ , onFilePaste : k , onCommandSend : function ( e ) { o . $apply ( function ( ) { o . draftMessage . command = e } ) } } ) , B = L . richTextareaEl && L . richTextareaEl [ 0 ] ; B && $ ( B ) . on ( "keydown keyup" , y ) , o . $on ( "inline_results" , function ( e , t ) { var n = Config . Mobile ? $ ( window ) . width ( ) : ( P . offsetWidth || 382 ) - 2 , a = 80 ; t && u . regroupWrappedResults ( t . results , n , a ) , setZeroTimeout ( function ( ) { L . setInlineSuggestions ( t ) } ) } ) , o . $on ( "inline_placeholder" , function ( e , t ) { L . setInlinePlaceholder ( t . prefix , t . placeholder ) } ) , T . on ( "change" , function ( ) { var e = this ; o . $apply ( function ( ) { o . draftMessage . files = Array . prototype . slice . call ( e . files ) , o . draftMessage . isMedia = $ ( e ) . hasClass ( "im_media_attach_input" ) || Config . Mobile , setTimeout ( function ( ) { try { e . value = "" } catch ( t ) { } } , 1e3 ) } ) } ) ; var j = ! 0 ; o . $on ( "settings_changed" , h ) , h ( ) , $ ( F ) . on ( "mousedown touchstart" , f ) ; var H = B && B . offsetHeight ; $ ( document ) . on ( "keydown" , b ) , $ ( "body" ) . on ( "dragenter dragleave dragover drop" , C ) , $ ( document ) . on ( "paste" , S ) , m && ( o . $on ( "ui_peer_change" , w ) , o . $on ( "ui_history_focus" , w ) , o . $on ( "ui_history_change" , w ) ) , o . $on ( "ui_peer_change" , L . resetTyping . bind ( L ) ) , o . $on ( "ui_peer_draft" , function ( t , n ) { n = n || { } ; var a = o . draftMessage . isBroadcast ; L . setPlaceholder ( e ( a ? "im_broadcast_field_placeholder_raw" : "im_message_field_placeholder_raw" ) ) , n . customSelection ? ( L . setFocusedValue ( n . customSelection ) , y ( ) ) : ( B && ( L . setValue ( o . draftMessage . text || "" ) , y ( ) ) , ( m || n && n . focus ) && L . focus ( ) ) , onContentLoaded ( function ( ) { L . checkAutocomplete ( ! 0 ) } ) , U && Config . Mobile && U . hide ( ) } ) , o . $on ( "ui_peer_reply" , function ( ) { onContentLoaded ( function ( ) { o . $emit ( "ui_editor_resize" ) , m && L . focus ( ) } ) } ) , o . $on ( "mentions_update" , function ( ) { L . onMentionsUpdated ( ) } ) , o . $on ( "ui_message_before_send" , function ( ) { v ( ) } ) , o . $on ( "ui_message_send" , function ( ) { m && w ( ) } ) , o . $on ( "ui_message_blur" , function ( ) { L . blur ( ) } ) , o . $on ( "$destroy" , function ( ) { $ ( document ) . off ( "paste" , S ) , $ ( document ) . off ( "keydown" , b ) , $ ( "body" ) . off ( "dragenter dragleave dragover drop" , C ) , $ ( F ) . off ( "mousedown touchstart" ) , T . off ( "change" ) } ) , m && w ( ) } return { link : g , scope : { draftMessage : "=" , mentions : "=" , commands : "=" } } } ] ) . directive ( "myLoadThumb" , [ "MtpApiFileManager" , "FileManager" , function ( e , t ) { function n ( n , a , i ) { var o = 0 , s = e . getCachedFile ( n . thumb && n . thumb . location && ! n . thumb . location . empty && n . thumb . location ) ; s && a . attr ( "src" , t . getUrl ( s , "image/jpeg" ) ) , n . thumb && n . thumb . width && n . thumb . height && ( a . attr ( "width" , n . thumb . width ) , a . attr ( "height" , n . thumb . height ) ) ; var r = n . $watchCollection ( "thumb.location" , function ( i ) { n . thumb && n . thumb . width && n . thumb . height && ( a . attr ( "width" , n . thumb . width ) , a . attr ( "height" , n . thumb . height ) , n . $emit ( "ui_height" ) ) ; var s = ++ o ; if ( ! i || i . empty ) return a . attr ( "src" , n . thumb && n . thumb . placeholder || "img/blank.gif" ) , void l ( ) ; var r = e . getCachedFile ( i ) ; return r ? ( a . attr ( "src" , t . getUrl ( r , "image/jpeg" ) ) , void l ( ) ) : ( a . attr ( "src" ) || a . attr ( "src" , n . thumb . placeholder || "img/blank.gif" ) , void e . downloadSmallFile ( n . thumb . location ) . then ( function ( e ) { s == o && ( a . attr ( "src" , t . getUrl ( e , "image/jpeg" ) ) , l ( ) ) } , function ( e ) { console . log ( "Download image failed" , e , n . thumb . location , a [ 0 ] ) , s == o && ( a . attr ( "src" , n . thumb . placeholder || "img/blank.gif" ) , l ( ) ) } ) ) } ) , l = i . watch ? angular . noop : function ( ) { setTimeout ( function ( ) { n . $destroy ( ) , r ( ) } , 0 ) } } return { link : n , scope : { thumb : "=" } } } ] ) . directive ( "myLoadFullPhoto"
onContentLoaded ( function ( ) { c . scrollTop = c . scrollHeight } ) , n . $on ( "ui_history_append_new" , function ( e , t ) { if ( _ || t . my ) { var n = parseInt ( $ ( c ) . css ( "paddingRight" ) ) ; $ ( c ) . addClass ( "im_history_to_bottom" ) , $ ( d ) . css ( { bottom : 0 , marginLeft : - Math . ceil ( n / 2 ) } ) , onContentLoaded ( function ( ) { $ ( c ) . removeClass ( "im_history_to_bottom" ) , $ ( d ) . css ( { bottom : "" , marginLeft : "" } ) , c . scrollTop = c . scrollHeight , r ( ) } ) } } ) , n . $on ( "ui_history_change" , function ( ) { var e = parseInt ( $ ( c ) . css ( "paddingRight" ) ) ; $ ( c ) . addClass ( "im_history_to_bottom" ) , $ ( d ) . css ( { bottom : 0 , marginLeft : - Math . ceil ( e / 2 ) } ) , onContentLoaded ( function ( ) { $ ( c ) . removeClass ( "im_history_to_bottom" ) , $ ( d ) . css ( { bottom : "" , marginLeft : "" } ) , s ( ! 0 ) , h = ! 1 , f = ! 1 , o ( ) } ) } ) , n . $on ( "ui_history_change_scroll" , function ( ) { onContentLoaded ( o ) } ) , n . $on ( "ui_history_focus" , function ( ) { _ || ( c . scrollTop = c . scrollHeight , _ = ! 0 ) } ) , n . $on ( "ui_history_prepend" , function ( ) { var e = c . scrollHeight , a = c . scrollTop , i = parseInt ( $ ( c ) . css ( "paddingRight" ) ) , s = c . clientHeight ; $ ( c ) . addClass ( "im_history_to_bottom" ) , c . scrollHeight , $ ( d ) . css ( { bottom : - ( e - a - s ) , marginLeft : - Math . ceil ( i / 2 ) } ) ; var l = function ( ) { $ ( c ) . removeClass ( "im_history_to_bottom" ) , $ ( d ) . css ( { bottom : "" , marginLeft : "" } ) , v >= 0 ? o ( ) : c . scrollTop = a + c . scrollHeight - e , r ( ) , h = ! 1 , t ( function ( ) { c . scrollHeight != e && $ ( c ) . trigger ( "scroll" ) } ) , clearTimeout ( u ) , p ( ) } , u = setTimeout ( l , 0 ) , p = n . $on ( "$viewContentLoaded" , l ) } ) , n . $on ( "ui_history_append" , function ( ) { var e = c . scrollHeight ; onContentLoaded ( function ( ) { _ = ! 1 , r ( ) , f = ! 1 , v >= 0 && o ( ) , t ( function ( ) { c . scrollHeight != e && $ ( c ) . trigger ( "scroll" ) } ) } ) } ) , n . $on ( "ui_panel_update" , function ( e , a ) { onContentLoaded ( function ( ) { s ( ) , a && a . blur ? n . $broadcast ( "ui_message_blur" ) : n . $broadcast ( "ui_message_send" ) , t ( function ( ) { $ ( c ) . trigger ( "scroll" ) } ) } ) } ) , n . $on ( "ui_selection_clear" , function ( ) { window . getSelection ? window . getSelection ( ) . empty ? window . getSelection ( ) . empty ( ) : window . getSelection ( ) . removeAllRanges && window . getSelection ( ) . removeAllRanges ( ) : document . selection && document . selection . empty ( ) } ) , n . $on ( "ui_editor_resize" , s ) , n . $on ( "ui_height" , function ( ) { onContentLoaded ( s ) } ) ; var _ = ! 0 , v = - 1 ; $ ( c ) . on ( "scroll" , function ( e ) { if ( a . is ( ":visible" ) && ! $ ( c ) . hasClass ( "im_history_to_bottom" ) ) { var t = c . scrollTop ; _ = t >= c . scrollHeight - c . clientHeight , v >= 0 && v != t && ( v = - 1 ) , ! h && t <= 300 ? ( h = ! 0 , n . $emit ( "history_need_more" ) ) : ! f && t >= c . scrollHeight - c . clientHeight - 300 && ( f = ! 0 , n . $emit ( "history_need_less" ) ) } } ) , $ ( e ) . on ( "resize" , s ) , s ( ) , onContentLoaded ( s ) } return { link : i } } ] ) . directive ( "myContactsListMobile" , [ "$window" , "$timeout" , function ( e , t ) { function n ( t , n , a ) { function i ( ) { $ ( n ) . css ( { height : $ ( e ) . height ( ) - ( s && s . offsetHeight || 0 ) - ( o && o . offsetHeight || 0 ) - 64 } ) } var o = $ ( ".contacts_modal_search" ) [ 0 ] , s = $ ( ".contacts_modal_panel" ) [ 0 ] ; $ ( e ) . on ( "resize" , i ) , t . $on ( "contacts_change" , function ( ) { onContentLoaded ( i ) } ) , onContentLoaded ( i ) } return { link : n } } ] ) . directive ( "myCountriesListMobile" , [ "$window" , "$timeout" , function ( e , t ) { function n ( t , n , a ) { function i ( ) { $ ( n ) . css ( { height : $ ( e ) . height ( ) - ( s && s . offsetHeight || 0 ) - ( o && o . offsetHeight || 0 ) - 64 } ) } var o = $ ( ".countries_modal_search" ) [ 0 ] , s = $ ( ".countries_modal_panel" ) [ 0 ] ; $ ( e ) . on ( "resize" , i ) , onContentLoaded ( i ) } return { link : n } } ] ) . directive ( "myInfiniteScrollerMobile" , function ( ) { function e ( e , t , n ) { var a = t [ 0 ] , i = ! 1 ; $ ( a ) . on ( "scroll" , function ( n ) { t . is ( ":visible" ) && ! i && a . scrollTop >= a . scrollHeight - a . clientHeight - 300 && ( i = ! 0 , e . $apply ( function ( ) { e . slice . limit += e . slice . limitDelta || 20 } ) , onContentLoaded ( function ( ) { i = ! 1 } ) ) } ) } return { link : e , scope : ! 0 } } ) ;