tweb/public/mtproto.worker.bc438cfffb55cdecbb8b.bundle.worker.js.map
Eduard Kuzmenko 30b79bac6d Build
2021-07-19 21:03:19 +03:00

1 line
1008 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/pako/dist/pako_inflate.min.js","webpack:///./src/helpers/bytes.ts","webpack:///./src/helpers/random.ts","webpack:///./src/lib/polyfill.ts","webpack:///./src/config/modes.ts","webpack:///./src/config/debug.ts","webpack:///./src/helpers/context.ts","webpack:///./src/lib/localStorage.ts","webpack:///./src/lib/sessionStorage.ts","webpack:///./src/vendor/leemon.ts","webpack:///./src/lib/mtproto/bin_utils.ts","webpack:///./src/lib/mtproto/schema.ts","webpack:///./node_modules/@cryptography/aes/dist/es/aes.js","webpack:///./src/lib/crypto/crypto_utils.ts","webpack:///./src/lib/mtproto/tl_utils.ts","webpack:///./src/lib/logger.ts","webpack:///./src/lib/crypto/srp.ts","webpack:///./src/lib/crypto/cryptoworker.ts","webpack:///./src/lib/crypto/crypto_methods.ts","webpack:///./src/lib/mtproto/timeManager.ts","webpack:///./src/config/app.ts","webpack:///./src/lib/mtproto/connectionStatus.ts","webpack:///./src/lib/mtproto/networker.ts","webpack:///./src/helpers/array.ts","webpack:///./src/lib/mtproto/networkerFactory.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/lib/mtproto/transports/websocket.ts","webpack:///./src/lib/mtproto/transports/obfuscation.ts","webpack:///./src/lib/mtproto/transports/intermediate.ts","webpack:///./src/lib/mtproto/transports/tcpObfuscated.ts","webpack:///./src/helpers/userAgent.ts","webpack:///./src/lib/mtproto/transports/socketProxied.ts","webpack:///./src/lib/mtproto/dcConfigurator.ts","webpack:///./src/lib/mtproto/rsaKeysManager.ts","webpack:///./src/lib/mtproto/authorizer.ts","webpack:///./src/helpers/cancellablePromise.ts","webpack:///./src/helpers/blob.ts","webpack:///./src/lib/idb.ts","webpack:///./src/helpers/object.ts","webpack:///./src/lib/mtproto/apiManager.ts","webpack:///./src/lib/filemanager.ts","webpack:///./src/lib/cacheStorage.ts","webpack:///./src/lib/mtproto/apiFileManager.ts","webpack:///./src/helpers/fileName.ts","webpack:///./src/lib/mtproto/mtproto.worker.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","e","a","Uint32Array","f","h","u","w","b","k","_","g","v","y","x","E","R","A","state","next_in","input","avail_in","next_out","output","avail_out","dmax","wsize","whave","wnext","window","hold","bits","lencode","distcode","lenbits","distbits","msg","sane","Uint16Array","Uint8Array","Z","S","O","U","T","D","I","B","N","C","z","F","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","this","last","wrap","havedict","flags","check","total","head","wbits","length","offset","extra","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","total_in","total_out","adler","Int32Array","set","subarray","L","M","H","j","K","P","Y","G","X","W","done","text","time","xflags","os","extra_len","String","fromCharCode","comment","hcrc","data_type","apply","Array","2","1","0","toString","q","J","Q","V","$","ee","te","ie","ne","options","slice","arguments","shift","TypeError","chunkSize","windowBits","to","raw","err","ended","chunks","strm","Error","header","dictionary","charCodeAt","ae","push","result","onEnd","onData","join","re","se","oe","le","de","fe","Inflate","inflate","inflateRaw","ungzip","constants","default","bytesToHex","bytes","arr","bytesFromHex","hexString","len","Math","ceil","start","parseInt","charAt","substr","bytesCmp","bytes1","bytes2","bytesXor","convertToUint8Array","TextEncoder","encode","bufferConcats","args","reduce","acc","byteLength","tmp","lastLength","forEach","ArrayBuffer","bytesFromWordss","bytesToWordss","words","nextRandomInt","maxValue","floor","random","str","configurable","randomize","concat","toJSON","findAndSplice","verify","index","findIndex","splice","undefined","toHHMMSS","leadZero","sec_num","hours","minutes","seconds","Promise","finally","fn","onFinally","callback","resolve","then","reason","reject","test","location","search","indexOf","debug","http","ssl","multipleConnections","asServiceWorker","DEBUG","MOUNT_CLASS_TO","self","isWebWorker","WorkerGlobalScope","isServiceWorker","ServiceWorkerGlobalScope","isWorker","notifyServiceWorker","all","clients","matchAll","includeUncontrolled","type","listeners","listener","postMessage","notifyWorker","noop","notifySomeone","notifyAll","prefix","cache","useStorage","useCache","localStorage","getItem","JSON","parse","obj","onlyLocal","stringified","stringify","setItem","saveLocal","removeItem","keys","delete","enabled","clear","taskId","tasks","STORAGES","storage","id","payload","proxy","sessionStorage","appStorage","radix","bpe","mask","digitsStr","one","int2bigInt","s0","s3","s4","s5","s6","s7","sa","eg_u","eg_A","eg_B","eg_C","eg_D","bitSize","expand","ans","copy_","mod","dup","mod_","trim","mult","mult_","powMod","powMod_","sub","sub_","add","add_","inverseModInt","eGCD_","max","halve_","copyInt_","greater","equalsInt","negative","multInt_","leftShift_","greaterShift","kx","ky","divide_","y1","y2","subShift_","linCombShift_","addShift_","rightShift_","modInt","minSize","buff","str2bigInt","base","kk","substring","addInt_","equals","isZero","bigInt2str","divInt_","bigInt2bytes","littleEndian","out","reverse","cmp","ys","multMod_","squareMod_","k1","k2","kn","np","mont_","ui","ks","isObject","intToUint","val","longFromInts","high","low","bigInt","addPadding","blockSize","zeroes","blockSizeAsTotalLength","prepend","needPadding","padding","buffer","Si","T1","T2","T3","T4","T5","T6","T7","T8","getWords","buf","pos","xor","left","right","x2","x4","tEnc","tDec","xInv","computeTables","AES","_key","encKey","decKey","rcon","encrypt","_message","a2","b2","c2","message","rounds","decrypt","AES_IGE","iv","cipher","cipherText","prevX","prevY","yXOR","counter","incrementCounter","carry","subtle","crypto","sha1HashSync","digest","sha256HashSync","aesEncryptSync","keyBytes","ivBytes","aesDecryptSync","rsaEncrypt","publicKey","modulus","exponent","hash_pbkdf2","salt","iterations","importKey","deriveBits","hash","pqPrimeFactorization","pqBytes","what","lim","minLen","it","pqPrimeLeemon","console","error","bytesModPow","xBigInt","yBigInt","mBigInt","gzipUncompress","boolFalse","API","constructors","find","predicate","boolTrue","vector","gzipPacked","MTProto","maxLength","mtproto","startMaxLength","createBuffer","intView","byteView","resultBuffer","resultInt32","getArray","typed","resultArray","needBytes","previousBuffer","previousArray","field","log","checkLength","writeInt","iHigh","iLow","sLong","isArray","storeLongP","storeIntBytes","Float64Array","sUTF8","unescape","encodeURIComponent","methodName","params","methodData","methods","method","storeInt","pFlags","flagsOffsets","param","condType","split","fieldBit","storeObject","paramName","storeLong","storeString","storeBytes","storeDouble","storeBool","itemType","toLowerCase","schema","isBare","constructorData","override","hex","readInt","doubleView","fetchObject","decodeURIComponent","escape","fetchInt","fetchLong","fetchIntBytes","fetchString","fetchBytes","fetchDouble","fetchBool","constructorCmp","uncompressed","fallback","checkType","constructorsIndex","schemaFallback","int1","int2","overrideKey","isCond","TLDeserialization","TLSerialization","LogTypes","LOG_LEVELS","None","Warn","Log","Debug","_logTimer","Date","now","dT","toFixed","logger","warn","info","trace","setPrefix","_prefix","setLevel","level","computeSRP","password","isNew","algo","new_algo","current_algo","srp_B","client_salt","server_salt","invokeCrypto","makePasswordHash","salt1","salt2","padArray","pForHash","gForHash","b_for_hash","flipper","k_v","is_good_mod_exp_first","modexp","prime","diff","a_for_hash","secure_random","generate_and_check_random","g_b","h1","M1","srp_id","performTaskWorker","super","webWorker","awaiting","pending","utils","task","timeManager","lastMessageId","timeOffset","timeTicks","messageId","serverTime","localTime","newTimeOffset","changed","abs","server_time_offset","App","version","langPackVersion","langPack","langPackCode","domains","baseDcId","isMainDomain","hostname","suffix","ConnectionStatus","invokeAfterMsgConstructor","dcId","authKey","authKeyId","serverSalt","transport","lastServerMessages","sentMessages","pendingMessages","pendingAcks","pendingResends","connectionInited","nextReq","seqNo","lastResendReq","isOnline","status","Closed","lastResponseTime","activeRequests","authKeyUint8","isFileUpload","fileUpload","isFileDownload","fileDownload","isFileNetworker","updateSession","networker","connected","setConnectionStatus","Connected","prevSessionId","sessionId","sentMessageId","sentMessage","container","array","forEachReverse","inner","innerSentMessageId","idx","innerSentMessage","updateSentMessage","msg_id","generateId","seq_no","generateSeqNo","notContentRelated","serializer","storeMethod","body","getBytes","pushMessage","invokeWithLayer","layer","initConnection","userAgent","navigator","platform","language","afterMessageId","resultType","isAPI","destroy","reconnect","forceReconnect","promise","assign","deferred","noSchedule","scheduleRequest","noResponse","timeout","setTimeout","TimedOut","clearTimeout","setDrainTimeout","onDrainTimeout","onDrain","retryAt","willChange","onConnectionStatusChange","delay","innerMsgId","acked","dataWithPadding","isOut","msgKeyLargePlain","msgKeyLarge","msgKey","sha2aText","sha2bText","promises","results","aesKey","aesIv","sha2a","sha2b","akStopped","isStopped","ackMsgIds","wrapMtpMessage","msg_ids","resendMsgIds","resendOpts","req_msg_id","resend_msg_ids","outMessage","messages","messagesByteLen","lengthOverflow","map","long","sort","messageByteLength","generateContainerMessage","messageWithBody","sendEncryptedRequest","cleanupSent","innerMessages","storeRawBytes","getMsgKey","keyIv","getAesKeyIv","encryptedData","data","dataBuffer","getBuffer","paddingLength","getOffset","getEncryptedMessage","encryptedResult","request","getEncryptedOutput","requestData","send","responseBuffer","deserializer","fetchRawBytes","getDecryptedMessage","calcMsgKey","totalLength","messageBodyLength","messageBody","mt_message","seqno","stack","setOffset","mt_rpc_result","response","newServerSalt","nextReqTimeout","cb","performScheduledRequest","msgId","notEmpty","rawError","matches","error_message","match","error_code","code","description","originalError","pushResend","innerMessage","processMessage","applyServerSalt","new_server_salt","bad_msg_id","ackMessage","changedOffset","applyServerTime","badMessage","processMessageAck","first_msg_id","updatesProcessor","answer_msg_id","reqResendMessage","badMsgId","processError","networkerFactory","networkers","stoppedNetworkers","filter","langCode","forceReconnectTimeout","EventListenerBase","reuseResults","_constructor","listenerResults","once","pop","addEventListener","removeEventListener","url","logSuffix","handleOpen","dispatchEvent","handleError","close","handleClose","removeListeners","handleMessage","event","ws","logTypes","connect","WebSocket","binaryType","Counter","initialValue","_counter","_remainingCounter","_remainingCounterIndex","_aes","encrypted","increment","Obfuscation","codec","initPayload","val2","reversedPayload","encIv","decIv","encNew","decNew","obfuscateTag","update","tag","Connection","retryTimeout","intermediate","obfuscation","autoReconnect","onOpen","init","connection","resend","encoded","encodeBody","releasePending","onMessage","decode","readPacket","parseResponse","catch","onClose","needTimeout","lastCloseTime","isNaN","reconnectTimeout","Connecting","bodySent","setAutoReconnect","enable","toEncode","encodePacket","vendor","isSafari","maxTouchPoints","MSStream","socketId","socketsProxied","Map","TEST_SUFFIX","sslSubdomains","dcOptions","host","port","chosenServers","transportSocket","connectionType","path","chosenServer","transportType","reuse","client","download","upload","servers","transports","testPublicKeysHex","publisKeysHex","publicKeysParsed","prepared","preparePromise","keyParsed","RSAPublicKey","fingerprintBytes","fingerprints","prepare","fingerprintHex","fill","foundKey","fingerprint","cached","requestArray","requestLength","headerArray","dcConfigurator","chooseServer","baseError","errorCode","auth_key_id","msg_len","auth","nonce","sendPlainRequest","rsaKeysManager","serverNonce","server_nonce","pq","server_public_key_fingerprints","select","pAndQ","sendReqDhParams","newNonce","p_q_inner_data_dc","new_nonce","dc","pQInnerDataSerialization","dataPadReversed","keyAesEncrypted","tempKey","dataWithHash","aesEncrypted","getKeyAesEncrypted","req_DH_params","public_key_fingerprint","encrypted_data","requestBytes","new_nonce_hash","decryptServerDhDataAnswer","encrypted_answer","sendSetClientDhParams","encryptedAnswer","tmpAesKey","tmpAesIv","answerWithHash","answerWithPadding","dhPrime","dh_prime","gA","g_a","server_time","retry","verifyDhParams","dhPrimeHex","_gABigInt","_dhPrimeBigInt","_twoPow","pow","gBytes","gB","retry_id","authKeyHash","authKeyAux","new_nonce_hash1","new_nonce_hash2","new_nonce_hash3","sendReqPQ","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","lastNotify","addNotifyListener","cancel","readBlobAs","blob","reader","FileReader","target","readBlobAsArrayBuffer","blobConstruct","blobParts","mimeType","safeMimeType","blobSafeMimeType","Blob","bb","BlobBuilder","blobPart","append","getBlob","db","storeName","storageIsAvailable","fromObject","safeAssign","openDatabase","preserve","onclose","createNew","openDbPromise","indexedDB","open","finished","onerror","onsuccess","calledNew","onabort","transaction","onversionchange","onupgradeneeded","oldVersion","newVersion","stores","store","objectStoreNames","contains","createObjectStore","indexes","createIndex","indexName","keyPath","objectParameters","entryName","getObjectStore","objectStore","put","fileName","save","perf","performance","oncomplete","requests","getAll","apiManager","cachedNetworkers","cachedExportPromise","gettingNetworkers","afterMessageTempIds","setBaseDcId","userAuth","dcID","getBaseDcId","user_auth","wasDcId","getNetworker","setOnDrainIfNeeded","storageKeys","storageResult","logoutPromises","invokeApi","ignoreErrors","closeDatabases","handled","maxNetworkers","found","unshift","getKey","ak","ss","authKeyHex","serverSaltHex","authorizer","storeObj","canRelease","removeNetworker","removeTransport","prepareTempMessageId","startTime","interval","setInterval","cachedNetworker","clearInterval","rejectPromise","logOut","noErrorBox","performRequest","after","wrapApiCall","exportResolve","exportReject","dc_id","exportedAuth","newDcId","includes","stopTime","waitTime","min","floodMaxTimeout","blobSupported","fileWriter","write","saveFileCallback","part","truncate","finalize","saveToStorage","dbName","caches","timeoutOperation","Response","headers","size","rejected","res","fakeWriter","getFakeFileWriter","saveFile","deleteAll","apiFileManager","cacheStorage","cachedDownloadPromises","uploadPromises","downloadPulls","downloadActives","webpConvertPromises","refreshReferencePromises","tempId","queueId","uncompressTGS","convertWebp","convertPromise","activeDelta","downloadPull","downloadCheck","from","canceled","limit","checkCancel","downloadRequest","invoke","refreshReference","reference","file_reference","checkedReference","getDelta","inputFileLocation","isAvailable","process","isWebpSupported","ext","thumb_size","Boolean","photo_id","big","stickerset","short_name","emoticon","thumb_version","volume_id","local_id","getFileNameByLocation","cachedPromise","fileStorage","getFileStorage","deleteFile","downloadFile","cacheFileWriter","resolved","errorHandler","getFile","getFileWriter","limitPart","getLimitPart","writeFileDeferred","writeFilePromise","processDownloaded","delayed","superpuper","requestFilePart","isFinal","processedResult","Infinity","progress","file","fileSize","isBigFile","doneParts","partSize","totalParts","fileId","_part","resultInputFile","parts","md5_checksum","details","file_id","file_part","file_total_parts","generator","Set","webpSupported","setUpdatesProcessor","taskListeners","webpSupport","socketProxy","socketTask","socketProxied","localStorageProxy","finishTask","online","toggleStorage","originalPayload"],"mappings":"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","file":"mtproto.worker.bc438cfffb55cdecbb8b.bundle.worker.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","/*! pako 2.0.3 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).pako={})}(this,(function(e){\"use strict\";var t=(e,t,i,n)=>{let a=65535&e|0,r=e>>>16&65535|0,s=0;for(;0!==i;){s=i>2e3?2e3:i,i-=s;do{a=a+t[n++]|0,r=r+a|0}while(--s);a%=65521,r%=65521}return a|r<<16|0};const i=new Uint32Array((()=>{let e,t=[];for(var i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t})());var n=(e,t,n,a)=>{const r=i,s=a+n;e^=-1;for(let i=a;i<s;i++)e=e>>>8^r[255&(e^t[i])];return-1^e};var a=function(e,t){let i,n,a,r,s,o,l,d,f,h,c,u,w,b,k,m,_,g,v,p,y,x,E,R;const A=e.state;i=e.next_in,E=e.input,n=i+(e.avail_in-5),a=e.next_out,R=e.output,r=a-(t-e.avail_out),s=a+(e.avail_out-257),o=A.dmax,l=A.wsize,d=A.whave,f=A.wnext,h=A.window,c=A.hold,u=A.bits,w=A.lencode,b=A.distcode,k=(1<<A.lenbits)-1,m=(1<<A.distbits)-1;e:do{u<15&&(c+=E[i++]<<u,u+=8,c+=E[i++]<<u,u+=8),_=w[c&k];t:for(;;){if(g=_>>>24,c>>>=g,u-=g,g=_>>>16&255,0===g)R[a++]=65535&_;else{if(!(16&g)){if(0==(64&g)){_=w[(65535&_)+(c&(1<<g)-1)];continue t}if(32&g){A.mode=12;break e}e.msg=\"invalid literal/length code\",A.mode=30;break e}v=65535&_,g&=15,g&&(u<g&&(c+=E[i++]<<u,u+=8),v+=c&(1<<g)-1,c>>>=g,u-=g),u<15&&(c+=E[i++]<<u,u+=8,c+=E[i++]<<u,u+=8),_=b[c&m];i:for(;;){if(g=_>>>24,c>>>=g,u-=g,g=_>>>16&255,!(16&g)){if(0==(64&g)){_=b[(65535&_)+(c&(1<<g)-1)];continue i}e.msg=\"invalid distance code\",A.mode=30;break e}if(p=65535&_,g&=15,u<g&&(c+=E[i++]<<u,u+=8,u<g&&(c+=E[i++]<<u,u+=8)),p+=c&(1<<g)-1,p>o){e.msg=\"invalid distance too far back\",A.mode=30;break e}if(c>>>=g,u-=g,g=a-r,p>g){if(g=p-g,g>d&&A.sane){e.msg=\"invalid distance too far back\",A.mode=30;break e}if(y=0,x=h,0===f){if(y+=l-g,g<v){v-=g;do{R[a++]=h[y++]}while(--g);y=a-p,x=R}}else if(f<g){if(y+=l+f-g,g-=f,g<v){v-=g;do{R[a++]=h[y++]}while(--g);if(y=0,f<v){g=f,v-=g;do{R[a++]=h[y++]}while(--g);y=a-p,x=R}}}else if(y+=f-g,g<v){v-=g;do{R[a++]=h[y++]}while(--g);y=a-p,x=R}for(;v>2;)R[a++]=x[y++],R[a++]=x[y++],R[a++]=x[y++],v-=3;v&&(R[a++]=x[y++],v>1&&(R[a++]=x[y++]))}else{y=a-p;do{R[a++]=R[y++],R[a++]=R[y++],R[a++]=R[y++],v-=3}while(v>2);v&&(R[a++]=R[y++],v>1&&(R[a++]=R[y++]))}break}}break}}while(i<n&&a<s);v=u>>3,i-=v,u-=v<<3,c&=(1<<u)-1,e.next_in=i,e.next_out=a,e.avail_in=i<n?n-i+5:5-(i-n),e.avail_out=a<s?s-a+257:257-(a-s),A.hold=c,A.bits=u};const r=15,s=new Uint16Array([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,0,0]),o=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),l=new Uint16Array([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,0,0]),d=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]);var f=(e,t,i,n,a,f,h,c)=>{const u=c.bits;let w,b,k,m,_,g,v=0,p=0,y=0,x=0,E=0,R=0,A=0,Z=0,S=0,O=0,U=null,T=0;const D=new Uint16Array(16),I=new Uint16Array(16);let B,N,C,z=null,F=0;for(v=0;v<=r;v++)D[v]=0;for(p=0;p<n;p++)D[t[i+p]]++;for(E=u,x=r;x>=1&&0===D[x];x--);if(E>x&&(E=x),0===x)return a[f++]=20971520,a[f++]=20971520,c.bits=1,0;for(y=1;y<x&&0===D[y];y++);for(E<y&&(E=y),Z=1,v=1;v<=r;v++)if(Z<<=1,Z-=D[v],Z<0)return-1;if(Z>0&&(0===e||1!==x))return-1;for(I[1]=0,v=1;v<r;v++)I[v+1]=I[v]+D[v];for(p=0;p<n;p++)0!==t[i+p]&&(h[I[t[i+p]]++]=p);if(0===e?(U=z=h,g=19):1===e?(U=s,T-=257,z=o,F-=257,g=256):(U=l,z=d,g=-1),O=0,p=0,v=y,_=f,R=E,A=0,k=-1,S=1<<E,m=S-1,1===e&&S>852||2===e&&S>592)return 1;for(;;){B=v-A,h[p]<g?(N=0,C=h[p]):h[p]>g?(N=z[F+h[p]],C=U[T+h[p]]):(N=96,C=0),w=1<<v-A,b=1<<R,y=b;do{b-=w,a[_+(O>>A)+b]=B<<24|N<<16|C|0}while(0!==b);for(w=1<<v-1;O&w;)w>>=1;if(0!==w?(O&=w-1,O+=w):O=0,p++,0==--D[v]){if(v===x)break;v=t[i+h[p]]}if(v>E&&(O&m)!==k){for(0===A&&(A=E),_+=y,R=v-A,Z=1<<R;R+A<x&&(Z-=D[R+A],!(Z<=0));)R++,Z<<=1;if(S+=1<<R,1===e&&S>852||2===e&&S>592)return 1;k=O&m,a[k]=E<<24|R<<16|_-f|0}}return 0!==O&&(a[_+O]=v-A<<24|64<<16|0),c.bits=E,0},h={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{Z_FINISH:c,Z_BLOCK:u,Z_TREES:w,Z_OK:b,Z_STREAM_END:k,Z_NEED_DICT:m,Z_STREAM_ERROR:_,Z_DATA_ERROR:g,Z_MEM_ERROR:v,Z_BUF_ERROR:p,Z_DEFLATED:y}=h,x=12,E=30,R=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function A(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Z=e=>{if(!e||!e.state)return _;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,b},S=e=>{if(!e||!e.state)return _;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,Z(e)},O=(e,t)=>{let i;if(!e||!e.state)return _;const n=e.state;return t<0?(i=0,t=-t):(i=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?_:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,S(e))},U=(e,t)=>{if(!e)return _;const i=new A;e.state=i,i.window=null;const n=O(e,t);return n!==b&&(e.state=null),n};let T,D,I=!0;const B=e=>{if(I){T=new Int32Array(512),D=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(f(1,e.lens,0,288,T,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;f(2,e.lens,0,32,D,0,e.work,{bits:5}),I=!1}e.lencode=T,e.lenbits=9,e.distcode=D,e.distbits=5},N=(e,t,i,n)=>{let a;const r=e.state;return null===r.window&&(r.wsize=1<<r.wbits,r.wnext=0,r.whave=0,r.window=new Uint8Array(r.wsize)),n>=r.wsize?(r.window.set(t.subarray(i-r.wsize,i),0),r.wnext=0,r.whave=r.wsize):(a=r.wsize-r.wnext,a>n&&(a=n),r.window.set(t.subarray(i-n,i-n+a),r.wnext),(n-=a)?(r.window.set(t.subarray(i-n,i),0),r.wnext=n,r.whave=r.wsize):(r.wnext+=a,r.wnext===r.wsize&&(r.wnext=0),r.whave<r.wsize&&(r.whave+=a))),0};var C={inflateReset:S,inflateReset2:O,inflateResetKeep:Z,inflateInit:e=>U(e,15),inflateInit2:U,inflate:(e,i)=>{let r,s,o,l,d,h,A,Z,S,O,U,T,D,I,C,z,F,L,M,H,j,K,P=0;const Y=new Uint8Array(4);let G,X;const W=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return _;r=e.state,r.mode===x&&(r.mode=13),d=e.next_out,o=e.output,A=e.avail_out,l=e.next_in,s=e.input,h=e.avail_in,Z=r.hold,S=r.bits,O=h,U=A,K=b;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(2&r.wrap&&35615===Z){r.check=0,Y[0]=255&Z,Y[1]=Z>>>8&255,r.check=n(r.check,Y,2,0),Z=0,S=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&Z)<<8)+(Z>>8))%31){e.msg=\"incorrect header check\",r.mode=E;break}if((15&Z)!==y){e.msg=\"unknown compression method\",r.mode=E;break}if(Z>>>=4,S-=4,j=8+(15&Z),0===r.wbits)r.wbits=j;else if(j>r.wbits){e.msg=\"invalid window size\",r.mode=E;break}r.dmax=1<<r.wbits,e.adler=r.check=1,r.mode=512&Z?10:x,Z=0,S=0;break;case 2:for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(r.flags=Z,(255&r.flags)!==y){e.msg=\"unknown compression method\",r.mode=E;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=E;break}r.head&&(r.head.text=Z>>8&1),512&r.flags&&(Y[0]=255&Z,Y[1]=Z>>>8&255,r.check=n(r.check,Y,2,0)),Z=0,S=0,r.mode=3;case 3:for(;S<32;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}r.head&&(r.head.time=Z),512&r.flags&&(Y[0]=255&Z,Y[1]=Z>>>8&255,Y[2]=Z>>>16&255,Y[3]=Z>>>24&255,r.check=n(r.check,Y,4,0)),Z=0,S=0,r.mode=4;case 4:for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}r.head&&(r.head.xflags=255&Z,r.head.os=Z>>8),512&r.flags&&(Y[0]=255&Z,Y[1]=Z>>>8&255,r.check=n(r.check,Y,2,0)),Z=0,S=0,r.mode=5;case 5:if(1024&r.flags){for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}r.length=Z,r.head&&(r.head.extra_len=Z),512&r.flags&&(Y[0]=255&Z,Y[1]=Z>>>8&255,r.check=n(r.check,Y,2,0)),Z=0,S=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(T=r.length,T>h&&(T=h),T&&(r.head&&(j=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(s.subarray(l,l+T),j)),512&r.flags&&(r.check=n(r.check,s,T,l)),h-=T,l+=T,r.length-=T),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===h)break e;T=0;do{j=s[l+T++],r.head&&j&&r.length<65536&&(r.head.name+=String.fromCharCode(j))}while(j&&T<h);if(512&r.flags&&(r.check=n(r.check,s,T,l)),h-=T,l+=T,j)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===h)break e;T=0;do{j=s[l+T++],r.head&&j&&r.length<65536&&(r.head.comment+=String.fromCharCode(j))}while(j&&T<h);if(512&r.flags&&(r.check=n(r.check,s,T,l)),h-=T,l+=T,j)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(Z!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=E;break}Z=0,S=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=x;break;case 10:for(;S<32;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}e.adler=r.check=R(Z),Z=0,S=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=d,e.avail_out=A,e.next_in=l,e.avail_in=h,r.hold=Z,r.bits=S,m;e.adler=r.check=1,r.mode=x;case x:if(i===u||i===w)break e;case 13:if(r.last){Z>>>=7&S,S-=7&S,r.mode=27;break}for(;S<3;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}switch(r.last=1&Z,Z>>>=1,S-=1,3&Z){case 0:r.mode=14;break;case 1:if(B(r),r.mode=20,i===w){Z>>>=2,S-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=E}Z>>>=2,S-=2;break;case 14:for(Z>>>=7&S,S-=7&S;S<32;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if((65535&Z)!=(Z>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=E;break}if(r.length=65535&Z,Z=0,S=0,r.mode=15,i===w)break e;case 15:r.mode=16;case 16:if(T=r.length,T){if(T>h&&(T=h),T>A&&(T=A),0===T)break e;o.set(s.subarray(l,l+T),d),h-=T,l+=T,A-=T,d+=T,r.length-=T;break}r.mode=x;break;case 17:for(;S<14;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(r.nlen=257+(31&Z),Z>>>=5,S-=5,r.ndist=1+(31&Z),Z>>>=5,S-=5,r.ncode=4+(15&Z),Z>>>=4,S-=4,r.nlen>286||r.ndist>30){e.msg=\"too many length or distance symbols\",r.mode=E;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;S<3;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}r.lens[W[r.have++]]=7&Z,Z>>>=3,S-=3}for(;r.have<19;)r.lens[W[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,G={bits:r.lenbits},K=f(0,r.lens,0,19,r.lencode,0,r.work,G),r.lenbits=G.bits,K){e.msg=\"invalid code lengths set\",r.mode=E;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;P=r.lencode[Z&(1<<r.lenbits)-1],C=P>>>24,z=P>>>16&255,F=65535&P,!(C<=S);){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(F<16)Z>>>=C,S-=C,r.lens[r.have++]=F;else{if(16===F){for(X=C+2;S<X;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(Z>>>=C,S-=C,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=E;break}j=r.lens[r.have-1],T=3+(3&Z),Z>>>=2,S-=2}else if(17===F){for(X=C+3;S<X;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}Z>>>=C,S-=C,j=0,T=3+(7&Z),Z>>>=3,S-=3}else{for(X=C+7;S<X;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}Z>>>=C,S-=C,j=0,T=11+(127&Z),Z>>>=7,S-=7}if(r.have+T>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=E;break}for(;T--;)r.lens[r.have++]=j}}if(r.mode===E)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=E;break}if(r.lenbits=9,G={bits:r.lenbits},K=f(1,r.lens,0,r.nlen,r.lencode,0,r.work,G),r.lenbits=G.bits,K){e.msg=\"invalid literal/lengths set\",r.mode=E;break}if(r.distbits=6,r.distcode=r.distdyn,G={bits:r.distbits},K=f(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,G),r.distbits=G.bits,K){e.msg=\"invalid distances set\",r.mode=E;break}if(r.mode=20,i===w)break e;case 20:r.mode=21;case 21:if(h>=6&&A>=258){e.next_out=d,e.avail_out=A,e.next_in=l,e.avail_in=h,r.hold=Z,r.bits=S,a(e,U),d=e.next_out,o=e.output,A=e.avail_out,l=e.next_in,s=e.input,h=e.avail_in,Z=r.hold,S=r.bits,r.mode===x&&(r.back=-1);break}for(r.back=0;P=r.lencode[Z&(1<<r.lenbits)-1],C=P>>>24,z=P>>>16&255,F=65535&P,!(C<=S);){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(z&&0==(240&z)){for(L=C,M=z,H=F;P=r.lencode[H+((Z&(1<<L+M)-1)>>L)],C=P>>>24,z=P>>>16&255,F=65535&P,!(L+C<=S);){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}Z>>>=L,S-=L,r.back+=L}if(Z>>>=C,S-=C,r.back+=C,r.length=F,0===z){r.mode=26;break}if(32&z){r.back=-1,r.mode=x;break}if(64&z){e.msg=\"invalid literal/length code\",r.mode=E;break}r.extra=15&z,r.mode=22;case 22:if(r.extra){for(X=r.extra;S<X;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}r.length+=Z&(1<<r.extra)-1,Z>>>=r.extra,S-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;P=r.distcode[Z&(1<<r.distbits)-1],C=P>>>24,z=P>>>16&255,F=65535&P,!(C<=S);){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(0==(240&z)){for(L=C,M=z,H=F;P=r.distcode[H+((Z&(1<<L+M)-1)>>L)],C=P>>>24,z=P>>>16&255,F=65535&P,!(L+C<=S);){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}Z>>>=L,S-=L,r.back+=L}if(Z>>>=C,S-=C,r.back+=C,64&z){e.msg=\"invalid distance code\",r.mode=E;break}r.offset=F,r.extra=15&z,r.mode=24;case 24:if(r.extra){for(X=r.extra;S<X;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}r.offset+=Z&(1<<r.extra)-1,Z>>>=r.extra,S-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=E;break}r.mode=25;case 25:if(0===A)break e;if(T=U-A,r.offset>T){if(T=r.offset-T,T>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=E;break}T>r.wnext?(T-=r.wnext,D=r.wsize-T):D=r.wnext-T,T>r.length&&(T=r.length),I=r.window}else I=o,D=d-r.offset,T=r.length;T>A&&(T=A),A-=T,r.length-=T;do{o[d++]=I[D++]}while(--T);0===r.length&&(r.mode=21);break;case 26:if(0===A)break e;o[d++]=r.length,A--,r.mode=21;break;case 27:if(r.wrap){for(;S<32;){if(0===h)break e;h--,Z|=s[l++]<<S,S+=8}if(U-=A,e.total_out+=U,r.total+=U,U&&(e.adler=r.check=r.flags?n(r.check,o,U,d-U):t(r.check,o,U,d-U)),U=A,(r.flags?Z:R(Z))!==r.check){e.msg=\"incorrect data check\",r.mode=E;break}Z=0,S=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;S<32;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(Z!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=E;break}Z=0,S=0}r.mode=29;case 29:K=k;break e;case E:K=g;break e;case 31:return v;case 32:default:return _}return e.next_out=d,e.avail_out=A,e.next_in=l,e.avail_in=h,r.hold=Z,r.bits=S,(r.wsize||U!==e.avail_out&&r.mode<E&&(r.mode<27||i!==c))&&N(e,e.output,e.next_out,U-e.avail_out),O-=e.avail_in,U-=e.avail_out,e.total_in+=O,e.total_out+=U,r.total+=U,r.wrap&&U&&(e.adler=r.check=r.flags?n(r.check,o,U,e.next_out-U):t(r.check,o,U,e.next_out-U)),e.data_type=r.bits+(r.last?64:0)+(r.mode===x?128:0)+(20===r.mode||15===r.mode?256:0),(0===O&&0===U||i===c)&&K===b&&(K=p),K},inflateEnd:e=>{if(!e||!e.state)return _;let t=e.state;return t.window&&(t.window=null),e.state=null,b},inflateGetHeader:(e,t)=>{if(!e||!e.state)return _;const i=e.state;return 0==(2&i.wrap)?_:(i.head=t,t.done=!1,b)},inflateSetDictionary:(e,i)=>{const n=i.length;let a,r,s;return e&&e.state?(a=e.state,0!==a.wrap&&11!==a.mode?_:11===a.mode&&(r=1,r=t(r,i,n,0),r!==a.check)?g:(s=N(e,i,n,n),s?(a.mode=31,v):(a.havedict=1,b))):_},inflateInfo:\"pako inflate (from Nodeca project)\"};const z=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var F=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const i=t.shift();if(i){if(\"object\"!=typeof i)throw new TypeError(i+\"must be non-object\");for(const t in i)z(i,t)&&(e[t]=i[t])}}return e},L=e=>{let t=0;for(let i=0,n=e.length;i<n;i++)t+=e[i].length;const i=new Uint8Array(t);for(let t=0,n=0,a=e.length;t<a;t++){let a=e[t];i.set(a,n),n+=a.length}return i};let M=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){M=!1}const H=new Uint8Array(256);for(let e=0;e<256;e++)H[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;H[254]=H[254]=1;var j=e=>{let t,i,n,a,r,s=e.length,o=0;for(a=0;a<s;a++)i=e.charCodeAt(a),55296==(64512&i)&&a+1<s&&(n=e.charCodeAt(a+1),56320==(64512&n)&&(i=65536+(i-55296<<10)+(n-56320),a++)),o+=i<128?1:i<2048?2:i<65536?3:4;for(t=new Uint8Array(o),r=0,a=0;r<o;a++)i=e.charCodeAt(a),55296==(64512&i)&&a+1<s&&(n=e.charCodeAt(a+1),56320==(64512&n)&&(i=65536+(i-55296<<10)+(n-56320),a++)),i<128?t[r++]=i:i<2048?(t[r++]=192|i>>>6,t[r++]=128|63&i):i<65536?(t[r++]=224|i>>>12,t[r++]=128|i>>>6&63,t[r++]=128|63&i):(t[r++]=240|i>>>18,t[r++]=128|i>>>12&63,t[r++]=128|i>>>6&63,t[r++]=128|63&i);return t},K=(e,t)=>{let i,n;const a=t||e.length,r=new Array(2*a);for(n=0,i=0;i<a;){let t=e[i++];if(t<128){r[n++]=t;continue}let s=H[t];if(s>4)r[n++]=65533,i+=s-1;else{for(t&=2===s?31:3===s?15:7;s>1&&i<a;)t=t<<6|63&e[i++],s--;s>1?r[n++]=65533:t<65536?r[n++]=t:(t-=65536,r[n++]=55296|t>>10&1023,r[n++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&M)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let i=\"\";for(let n=0;n<t;n++)i+=String.fromCharCode(e[n]);return i})(r,n)},P=(e,t)=>{(t=t||e.length)>e.length&&(t=e.length);let i=t-1;for(;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+H[e[i]]>t?i:t},Y={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"};var G=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0};var X=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1};const W=Object.prototype.toString,{Z_NO_FLUSH:q,Z_FINISH:J,Z_OK:Q,Z_STREAM_END:V,Z_NEED_DICT:$,Z_STREAM_ERROR:ee,Z_DATA_ERROR:te,Z_MEM_ERROR:ie}=h;function ne(e){this.options=F({chunkSize:65536,windowBits:15,to:\"\"},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new G,this.strm.avail_out=0;let i=C.inflateInit2(this.strm,t.windowBits);if(i!==Q)throw new Error(Y[i]);if(this.header=new X,C.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=j(t.dictionary):\"[object ArrayBuffer]\"===W.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=C.inflateSetDictionary(this.strm,t.dictionary),i!==Q)))throw new Error(Y[i])}function ae(e,t){const i=new ne(t);if(i.push(e),i.err)throw i.msg||Y[i.err];return i.result}ne.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize,a=this.options.dictionary;let r,s,o;if(this.ended)return!1;for(s=t===~~t?t:!0===t?J:q,\"[object ArrayBuffer]\"===W.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),r=C.inflate(i,s),r===$&&a&&(r=C.inflateSetDictionary(i,a),r===Q?r=C.inflate(i,s):r===te&&(r=$));i.avail_in>0&&r===V&&i.state.wrap>0&&0!==e[i.next_in];)C.inflateReset(i),r=C.inflate(i,s);switch(r){case ee:case te:case $:case ie:return this.onEnd(r),this.ended=!0,!1}if(o=i.avail_out,i.next_out&&(0===i.avail_out||r===V))if(\"string\"===this.options.to){let e=P(i.output,i.next_out),t=i.next_out-e,a=K(i.output,e);i.next_out=t,i.avail_out=n-t,t&&i.output.set(i.output.subarray(e,e+t),0),this.onData(a)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(r!==Q||0!==o){if(r===V)return r=C.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,!0;if(0===i.avail_in)break}}return!0},ne.prototype.onData=function(e){this.chunks.push(e)},ne.prototype.onEnd=function(e){e===Q&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=L(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var re=ne,se=ae,oe=function(e,t){return(t=t||{}).raw=!0,ae(e,t)},le=ae,de=h,fe={Inflate:re,inflate:se,inflateRaw:oe,ungzip:le,constants:de};e.Inflate=re,e.constants=de,e.default=fe,e.inflate=se,e.inflateRaw=oe,e.ungzip=le,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function bytesToHex(bytes: ArrayLike<number>) {\r\n const arr: string[] = new Array(bytes.length);\r\n for(let i = 0; i < bytes.length; ++i) {\r\n arr[i] = (bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16);\r\n }\r\n return arr.join('');\r\n}\r\n\r\nexport function bytesFromHex(hexString: string) {\r\n const len = hexString.length;\r\n const bytes = new Uint8Array(Math.ceil(len / 2));\r\n let start = 0;\r\n\r\n if(len % 2) { // read 0x581 as 0x0581\r\n bytes[start++] = parseInt(hexString.charAt(0), 16);\r\n }\r\n\r\n for(let i = start; i < len; i += 2) {\r\n bytes[start++] = parseInt(hexString.substr(i, 2), 16);\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\nexport function bytesToBase64(bytes: number[] | Uint8Array) {\r\n let mod3: number;\r\n let result = '';\r\n\r\n for(let nLen = bytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; ++nIdx) {\r\n mod3 = nIdx % 3;\r\n nUint24 |= bytes[nIdx] << (16 >>> mod3 & 24);\r\n if(mod3 === 2 || nLen - nIdx === 1) {\r\n result += String.fromCharCode(\r\n uint6ToBase64(nUint24 >>> 18 & 63),\r\n uint6ToBase64(nUint24 >>> 12 & 63),\r\n uint6ToBase64(nUint24 >>> 6 & 63),\r\n uint6ToBase64(nUint24 & 63)\r\n );\r\n nUint24 = 0;\r\n }\r\n }\r\n\r\n return result.replace(/A(?=A$|$)/g, '=');\r\n}\r\n\r\nexport function uint6ToBase64(nUint6: number) {\r\n return nUint6 < 26\r\n ? nUint6 + 65\r\n : nUint6 < 52\r\n ? nUint6 + 71\r\n : nUint6 < 62\r\n ? nUint6 - 4\r\n : nUint6 === 62\r\n ? 43\r\n : nUint6 === 63\r\n ? 47\r\n : 65;\r\n}\r\n\r\nexport function bytesCmp(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) {\r\n const len = bytes1.length;\r\n if(len !== bytes2.length) {\r\n return false;\r\n }\r\n\r\n for(let i = 0; i < len; ++i) {\r\n if(bytes1[i] !== bytes2[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function bytesXor(bytes1: Uint8Array, bytes2: Uint8Array) {\r\n const len = bytes1.length;\r\n const bytes = new Uint8Array(len);\r\n\r\n for(let i = 0; i < len; ++i) {\r\n bytes[i] = bytes1[i] ^ bytes2[i];\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\n/* export function bytesToArrayBuffer(b: number[]) {\r\n return (new Uint8Array(b)).buffer;\r\n}\r\n\r\nexport function convertToArrayBuffer(bytes: any | ArrayBuffer | Uint8Array) {\r\n // Be careful with converting subarrays!!\r\n if(bytes instanceof ArrayBuffer) {\r\n return bytes;\r\n }\r\n if(bytes.buffer !== undefined &&\r\n bytes.buffer.byteLength === bytes.length * bytes.BYTES_PER_ELEMENT) {\r\n return bytes.buffer;\r\n }\r\n return bytesToArrayBuffer(bytes);\r\n} */\r\n\r\nexport function convertToUint8Array(bytes: Uint8Array | ArrayBuffer | number[] | string): Uint8Array {\r\n if(bytes instanceof Uint8Array) {\r\n return bytes;\r\n } else if(typeof(bytes) === 'string') {\r\n return new TextEncoder().encode(bytes);\r\n }\r\n\r\n return new Uint8Array(bytes);\r\n}\r\n\r\n/* export function bytesFromArrayBuffer(buffer: ArrayBuffer) {\r\n const len = buffer.byteLength;\r\n const byteView = new Uint8Array(buffer);\r\n const bytes: number[] = [];\r\n\r\n for(let i = 0; i < len; ++i) {\r\n bytes[i] = byteView[i];\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\nexport function bufferConcat(buffer1: any, buffer2: any) {\r\n const l1 = buffer1.byteLength || buffer1.length;\r\n const l2 = buffer2.byteLength || buffer2.length;\r\n const tmp = new Uint8Array(l1 + l2);\r\n tmp.set(buffer1 instanceof ArrayBuffer ? new Uint8Array(buffer1) : buffer1, 0);\r\n tmp.set(buffer2 instanceof ArrayBuffer ? new Uint8Array(buffer2) : buffer2, l1);\r\n\r\n return tmp.buffer;\r\n} */\r\n\r\nexport function bufferConcats(...args: (ArrayBuffer | Uint8Array | number[])[]) {\r\n const length = args.reduce((acc, v) => acc + ((v as ArrayBuffer).byteLength || (v as Uint8Array).length), 0);\r\n\r\n const tmp = new Uint8Array(length);\r\n \r\n let lastLength = 0;\r\n args.forEach(b => {\r\n tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength);\r\n lastLength += (b as ArrayBuffer).byteLength || (b as Uint8Array).length;\r\n });\r\n\r\n return tmp/* .buffer */;\r\n}\r\n\r\nexport function bytesFromWordss(input: Uint32Array) {\r\n const o = new Uint8Array(input.byteLength);\r\n for(let i = 0, length = input.length * 4; i < length; ++i) {\r\n o[i] = ((input[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);\r\n }\r\n\r\n return o;\r\n}\r\n\r\nexport function bytesToWordss(input: Parameters<typeof convertToUint8Array>[0]) {\r\n const bytes = convertToUint8Array(input);\r\n\r\n const words: number[] = [];\r\n for(let i = 0, len = bytes.length; i < len; ++i) {\r\n words[i >>> 2] |= bytes[i] << (24 - (i % 4) * 8);\r\n }\r\n\r\n return new Uint32Array(words);\r\n}\r\n\r\n// * https://stackoverflow.com/a/52827031\r\n/* export const isBigEndian = (() => {\r\n const array = new Uint8Array(4);\r\n const view = new Uint32Array(array.buffer);\r\n return !((view[0] = 1) & array[0]);\r\n})(); */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport function nextRandomInt(maxValue: number) {\r\n return Math.floor(Math.random() * maxValue);\r\n}\r\n\r\nexport function randomLong() {\r\n return '' + nextRandomInt(0xFFFFFFFF) + nextRandomInt(0xFFFFFF);\r\n //return '' + parseInt(nextRandomInt(0xFFFFFFFF).toString(16) + nextRandomInt(0xFFFFFFFF).toString(16), 16);\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { bytesToHex, bytesFromHex, bufferConcats } from '../helpers/bytes';\r\nimport { nextRandomInt } from '../helpers/random';\r\n\r\n//export const secureRandom = new SecureRandom();\r\n\r\nObject.defineProperty(Uint8Array.prototype, 'hex', {\r\n get: function(): string {\r\n return bytesToHex([...this]);\r\n },\r\n \r\n set: function(str: string) {\r\n this.set(bytesFromHex(str));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n});\r\n\r\nUint8Array.prototype.randomize = function() {\r\n //secureRandom.nextBytes(this);\r\n for(let i = 0; i < this.length; ++i) {\r\n this[i] = nextRandomInt(255);\r\n }\r\n return this;\r\n};\r\n\r\nUint8Array.prototype.concat = function(...args: Array<Uint8Array | ArrayBuffer | number[]>) {\r\n return bufferConcats(this, ...args);\r\n};\r\n\r\n/* Uint8Array.prototype.toString = function() {\r\n return String.fromCharCode.apply(null, [...this]);\r\n}; */\r\n\r\nUint8Array.prototype.toJSON = function() {\r\n return [...this];\r\n //return {type: 'bytes', value: [...this]};\r\n};\r\n\r\nArray.prototype.findAndSplice = function<T>(verify: (value: T, index?: number, array?: Array<T>) => boolean) {\r\n let index = this.findIndex(verify);\r\n return index !== -1 ? this.splice(index, 1)[0] : undefined;\r\n};\r\n\r\nString.prototype.toHHMMSS = function(leadZero = false) {\r\n const sec_num = parseInt(this + '', 10);\r\n const hours = Math.floor(sec_num / 3600);\r\n let minutes: any = Math.floor((sec_num - (hours * 3600)) / 60);\r\n let seconds: any = sec_num - (hours * 3600) - (minutes * 60);\r\n \r\n if(hours) leadZero = true;\r\n if(minutes < 10) minutes = leadZero ? \"0\" + minutes : minutes;\r\n if(seconds < 10) seconds = \"0\" + seconds;\r\n return (hours ? /* ('0' + hours).slice(-2) */hours + ':' : '') + minutes + ':' + seconds;\r\n};\r\n\r\n/* Promise.prototype.finally = Promise.prototype.finally || {\r\n finally(fn: () => any) {\r\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\r\n return this.then(\r\n result => onFinally(() => result),\r\n reason => onFinally(() => Promise.reject(reason))\r\n );\r\n }\r\n}.finally; */\r\nPromise.prototype.finally = Promise.prototype.finally || function<T>(this: Promise<T>, fn: () => any) {\r\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\r\n return this.then(\r\n result => onFinally(() => result),\r\n reason => onFinally(() => Promise.reject(reason))\r\n );\r\n};\r\n\r\ndeclare global {\r\n interface Uint8Array {\r\n hex: string;\r\n randomize: () => Uint8Array,\r\n concat: (...args: Array<Uint8Array | ArrayBuffer | number[]>) => Uint8Array,\r\n //toString: () => string,\r\n toJSON: () => number[],\r\n //toJSON: () => {type: 'bytes', value: number[]},\r\n }\r\n \r\n interface Array<T> {\r\n findAndSplice(verify: (value: T, index?: number, array?: Array<T>) => boolean): T;\r\n }\r\n \r\n interface String {\r\n toHHMMSS(leadZero?: boolean): string;\r\n }\r\n\r\n interface Promise<T> {\r\n finally: (onfinally?: () => void) => Promise<T>;\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n \r\n \r\n \r\n\r\nexport default Modes;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport const isWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\r\nexport const isServiceWorker = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\r\nexport const isWorker = isWebWorker || isServiceWorker;\r\n\r\n// в SW может быть сразу две переменных TRUE, поэтому проверяю по последней\r\n\r\nexport const getWindowClients = () => {\r\n return (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({ includeUncontrolled: false, type: 'window' });\r\n};\r\n\r\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\r\n (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({ includeUncontrolled: false, type: 'window' })\r\n .then((listeners) => {\r\n if(!listeners.length) {\r\n //console.trace('no listeners?', self, listeners);\r\n return;\r\n }\r\n\r\n listeners.slice(all ? 0 : -1).forEach(listener => {\r\n // @ts-ignore\r\n listener.postMessage(...args);\r\n });\r\n });\r\n};\r\n\r\nconst notifyWorker = (...args: any[]) => {\r\n // @ts-ignore\r\n (self as any as DedicatedWorkerGlobalScope).postMessage(...args);\r\n};\r\n\r\nconst noop = () => {};\r\n\r\nexport const notifySomeone = isServiceWorker ? notifyServiceWorker.bind(null, false) : (isWebWorker ? notifyWorker : noop);\r\nexport const notifyAll = isServiceWorker ? notifyServiceWorker.bind(null, true) : (isWebWorker ? notifyWorker : noop);\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from '../config/modes';\r\nimport { notifySomeone, isWorker } from '../helpers/context';\r\nimport { WorkerTaskTemplate } from '../types';\r\n//import { stringify } from '../helpers/json';\r\n\r\nclass LocalStorage<Storage extends Record<string, any>> {\r\n private prefix = '';\r\n private cache: Partial<Storage> = {};\r\n private useStorage = true;\r\n\r\n constructor(/* private preserveKeys: (keyof Storage)[] */) {\r\n if(Modes.test) {\r\n this.prefix = 't_';\r\n }\r\n }\r\n\r\n public get<T extends keyof Storage>(key: T, useCache = true): Storage[T] {\r\n if(this.cache.hasOwnProperty(key) && useCache) {\r\n return this.cache[key];\r\n } else if(this.useStorage) {\r\n let value: Storage[T];\r\n try {\r\n value = localStorage.getItem(this.prefix + key as string) as any;\r\n } catch(err) {\r\n this.useStorage = false;\r\n }\r\n\r\n if(value !== null) {\r\n try {\r\n value = JSON.parse(value);\r\n } catch(err) {\r\n //console.error(err);\r\n }\r\n } else {\r\n value = undefined;\r\n }\r\n\r\n return value;\r\n }/* else {\r\n throw 'something went wrong';\r\n } */\r\n }\r\n\r\n public set(obj: Partial<Storage>, onlyLocal = false) {\r\n for(const key in obj) {\r\n if(obj.hasOwnProperty(key)) {\r\n const value = obj[key];\r\n this.cache[key] = value;\r\n\r\n if(this.useStorage && !onlyLocal) {\r\n try {\r\n const stringified = JSON.stringify(value);\r\n localStorage.setItem(this.prefix + key, stringified);\r\n } catch(err) {\r\n this.useStorage = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal = false) {\r\n // ! it is needed here\r\n key = '' + key;\r\n\r\n if(!saveLocal) {\r\n delete this.cache[key];\r\n }\r\n \r\n //if(this.useStorage) {\r\n try {\r\n localStorage.removeItem(this.prefix + key);\r\n } catch(err) {\r\n \r\n }\r\n //}\r\n }\r\n\r\n /* public clear(preserveKeys: (keyof Storage)[] = this.preserveKeys) {\r\n // if(this.useStorage) {\r\n try {\r\n let obj: Partial<Storage> = {};\r\n if(preserveKeys) {\r\n preserveKeys.forEach(key => {\r\n const value = this.get(key);\r\n if(value !== undefined) {\r\n obj[key] = value;\r\n }\r\n });\r\n }\r\n \r\n localStorage.clear();\r\n\r\n if(preserveKeys) {\r\n this.set(obj);\r\n }\r\n } catch(err) {\r\n\r\n }\r\n // }\r\n } */\r\n\r\n public clear() {\r\n const keys: string[] = ['dc', 'server_time_offset', 'xt_instance', 'user_auth', 'state_id'];\r\n for(let i = 1; i <= 5; ++i) {\r\n keys.push(`dc${i}_server_salt`);\r\n keys.push(`dc${i}_auth_key`);\r\n }\r\n\r\n for(let key of keys) {\r\n this.delete(key, true);\r\n }\r\n }\r\n\r\n public toggleStorage(enabled: boolean) {\r\n this.useStorage = enabled;\r\n\r\n if(!enabled) {\r\n this.clear();\r\n } else {\r\n return this.set(this.cache);\r\n }\r\n }\r\n}\r\n\r\nexport interface LocalStorageProxyTask extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: {\r\n type: 'set' | 'get' | 'delete' | 'clear' | 'toggleStorage',\r\n args: any[]\r\n }\r\n};\r\n\r\nexport interface LocalStorageProxyTaskResponse extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: any\r\n};\r\n\r\nexport default class LocalStorageController<Storage extends Record<string, any>> {\r\n private static STORAGES: LocalStorageController<any>[] = [];\r\n private taskId = 0;\r\n private tasks: {[taskID: number]: (result: any) => void} = {};\r\n //private log = (...args: any[]) => console.log('[SW LS]', ...args);\r\n //private log = (...args: any[]) => {};\r\n\r\n private storage: LocalStorage<Storage>;\r\n\r\n constructor(/* private preserveKeys: (keyof Storage)[] = [] */) {\r\n LocalStorageController.STORAGES.push(this);\r\n\r\n if(!isWorker) {\r\n this.storage = new LocalStorage(/* preserveKeys */);\r\n }\r\n }\r\n\r\n public finishTask(taskId: number, result: any) {\r\n //this.log('finishTask:', taskID, result, Object.keys(this.tasks));\r\n\r\n if(!this.tasks.hasOwnProperty(taskId)) {\r\n //this.log('no such task:', taskID, result);\r\n return;\r\n }\r\n\r\n this.tasks[taskId](result);\r\n delete this.tasks[taskId];\r\n }\r\n\r\n private proxy<T>(type: LocalStorageProxyTask['payload']['type'], ...args: LocalStorageProxyTask['payload']['args']) {\r\n return new Promise<T>((resolve, reject) => {\r\n if(isWorker) {\r\n const taskId = this.taskId++;\r\n\r\n this.tasks[taskId] = resolve;\r\n const task: LocalStorageProxyTask = {\r\n type: 'localStorageProxy', \r\n id: taskId,\r\n payload: {\r\n type,\r\n args\r\n }\r\n };\r\n\r\n notifySomeone(task);\r\n } else {\r\n args = Array.prototype.slice.call(args);\r\n\r\n // @ts-ignore\r\n const result: any = this.storage[type].apply(this.storage, args as any);\r\n resolve(result);\r\n }\r\n });\r\n }\r\n\r\n public get<T extends keyof Storage>(key: T, useCache?: boolean) {\r\n return this.proxy<Storage[T]>('get', key, useCache);\r\n }\r\n\r\n public set(obj: Partial<Storage>, onlyLocal?: boolean) {\r\n return this.proxy<void>('set', obj, onlyLocal);\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal?: boolean) {\r\n return this.proxy<void>('delete', key, saveLocal);\r\n }\r\n\r\n public clear(/* preserveKeys?: (keyof Storage)[] */) {\r\n return this.proxy<void>('clear'/* , preserveKeys */);\r\n }\r\n\r\n public toggleStorage(enabled: boolean) {\r\n return this.proxy<void>('toggleStorage', enabled);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppInstance } from './mtproto/singleInstance';\r\nimport type { UserAuth } from './mtproto/mtproto_config';\r\nimport type { DcId } from '../types';\r\nimport { MOUNT_CLASS_TO } from '../config/debug';\r\nimport LocalStorageController from './localStorage';\r\n\r\nconst sessionStorage = new LocalStorageController<{\r\n dc: DcId,\r\n user_auth: UserAuth,\r\n state_id: number,\r\n dc1_auth_key: string,\r\n dc2_auth_key: string,\r\n dc3_auth_key: string,\r\n dc4_auth_key: string,\r\n dc5_auth_key: string,\r\n dc1_server_salt: string,\r\n dc2_server_salt: string,\r\n dc3_server_salt: string,\r\n dc4_server_salt: string,\r\n dc5_server_salt: string,\r\n server_time_offset: number,\r\n xt_instance: AppInstance,\r\n kz_version: 'K' | 'Z',\r\n tgme_sync: {\r\n canRedirect: boolean,\r\n ts: number\r\n }\r\n}>(/* ['kz_version'] */);\r\nMOUNT_CLASS_TO.appStorage = sessionStorage;\r\nexport default sessionStorage;\r\n","'use strict'\r\n//@flow\r\n\r\n/** * * * * * * * * * *\r\n * Big Integer Library *\r\n * Created 2000 *\r\n * Leemon Baird *\r\n * www.leemon.com *\r\n * * * * * * * * * * * */\r\n\r\n////////////////////////////////////////////////////////////////////////////////////////\r\n// These functions are designed to avoid frequent dynamic memory allocation in the inner loop.\r\n// For most functions, if it needs a BigInt as a local variable it will actually use\r\n// a global, and will only allocate to it only when it's not the right size. This ensures\r\n// that when a function is called repeatedly with same-sized parameters, it only allocates\r\n// memory on the first call.\r\n//\r\n// Note that for cryptographic purposes, the calls to Math.random() must\r\n// be replaced with calls to a better pseudorandom number generator.\r\n//\r\n// In the following, \"bigInt\" means a bigInt with at least one leading zero element,\r\n// and \"integer\" means a nonnegative integer less than radix. In some cases, integer\r\n// can be negative. Negative bigInts are 2s complement.\r\n//\r\n// The following functions do not modify their inputs.\r\n// Those returning a bigInt, string, or Array will dynamically allocate memory for that value.\r\n// Those returning a boolean will return the integer 0 (false) or 1 (true).\r\n// Those returning boolean or int will not allocate memory except possibly on the first\r\n// time they're called with a given parameter size.\r\n//\r\n// bigInt add(x,y) //return (x+y) for bigInts x and y.\r\n// bigInt addInt(x,n) //return (x+n) where x is a bigInt and n is an integer.\r\n// string bigInt2str(x,base) //return a string form of bigInt x in a given base, with 2 <= base <= 95\r\n// int bitSize(x) //return how many bits long the bigInt x is, not counting leading zeros\r\n// bigInt dup(x) //return a copy of bigInt x\r\n// boolean equals(x,y) //is the bigInt x equal to the bigint y?\r\n// boolean equalsInt(x,y) //is bigint x equal to integer y?\r\n// bigInt expand(x,n) //return a copy of x with at least n elements, adding leading zeros if needed\r\n// Array findPrimes(n) //return array of all primes less than integer n\r\n// bigInt GCD(x,y) //return greatest common divisor of bigInts x and y (each with same number of elements).\r\n// boolean greater(x,y) //is x>y? (x and y are nonnegative bigInts)\r\n// boolean greaterShift(x,y,shift)//is (x <<(shift*bpe)) > y?\r\n// bigInt int2bigInt(t,n,m) //return a bigInt equal to integer t, with at least n bits and m array elements\r\n// bigInt inverseMod(x,n) //return (x**(-1) mod n) for bigInts x and n. If no inverse exists, it returns null\r\n// int inverseModInt(x,n) //return x**(-1) mod n, for integers x and n. Return 0 if there is no inverse\r\n// boolean isZero(x) //is the bigInt x equal to zero?\r\n// boolean millerRabin(x,b) //does one round of Miller-Rabin base integer b say that bigInt x is possibly prime? (b is bigInt, 1<b<x)\r\n// boolean millerRabinInt(x,b) //does one round of Miller-Rabin base integer b say that bigInt x is possibly prime? (b is int, 1<b<x)\r\n// bigInt mod(x,n) //return a new bigInt equal to (x mod n) for bigInts x and n.\r\n// int modInt(x,n) //return x mod n for bigInt x and integer n.\r\n// bigInt mult(x,y) //return x*y for bigInts x and y. This is faster when y<x.\r\n// bigInt multMod(x,y,n) //return (x*y mod n) for bigInts x,y,n. For greater speed, let y<x.\r\n// boolean negative(x) //is bigInt x negative?\r\n// bigInt powMod(x,y,n) //return (x**y mod n) where x,y,n are bigInts and ** is exponentiation. 0**0=1. Faster for odd n.\r\n// bigInt randBigInt(n,s) //return an n-bit random BigInt (n>=1). If s=1, then the most significant of those n bits is set to 1.\r\n// bigInt randTruePrime(k) //return a new, random, k-bit, true prime bigInt using Maurer's algorithm.\r\n// bigInt randProbPrime(k) //return a new, random, k-bit, probable prime bigInt (probability it's composite less than 2^-80).\r\n// bigInt str2bigInt(s,b,n,m) //return a bigInt for number represented in string s in base b with at least n bits and m array elements\r\n// bigInt sub(x,y) //return (x-y) for bigInts x and y. Negative answers will be 2s complement\r\n// bigInt trim(x,k) //return a copy of x with exactly k leading zero elements\r\n//\r\n//\r\n// The following functions each have a non-underscored version, which most users should call instead.\r\n// These functions each write to a single parameter, and the caller is responsible for ensuring the array\r\n// passed in is large enough to hold the result.\r\n//\r\n// void addInt_(x,n) //do x=x+n where x is a bigInt and n is an integer\r\n// void add_(x,y) //do x=x+y for bigInts x and y\r\n// void copy_(x,y) //do x=y on bigInts x and y\r\n// void copyInt_(x,n) //do x=n on bigInt x and integer n\r\n// void GCD_(x,y) //set x to the greatest common divisor of bigInts x and y, (y is destroyed). (This never overflows its array).\r\n// boolean inverseMod_(x,n) //do x=x**(-1) mod n, for bigInts x and n. Returns 1 (0) if inverse does (doesn't) exist\r\n// void mod_(x,n) //do x=x mod n for bigInts x and n. (This never overflows its array).\r\n// void mult_(x,y) //do x=x*y for bigInts x and y.\r\n// void multMod_(x,y,n) //do x=x*y mod n for bigInts x,y,n.\r\n// void powMod_(x,y,n) //do x=x**y mod n, where x,y,n are bigInts (n is odd) and ** is exponentiation. 0**0=1.\r\n// void randBigInt_(b,n,s) //do b = an n-bit random BigInt. if s=1, then nth bit (most significant bit) is set to 1. n>=1.\r\n// void randTruePrime_(ans,k) //do ans = a random k-bit true random prime (not just probable prime) with 1 in the msb.\r\n// void sub_(x,y) //do x=x-y for bigInts x and y. Negative answers will be 2s complement.\r\n//\r\n// The following functions do NOT have a non-underscored version.\r\n// They each write a bigInt result to one or more parameters. The caller is responsible for\r\n// ensuring the arrays passed in are large enough to hold the results.\r\n//\r\n// void addShift_(x,y,ys) //do x=x+(y<<(ys*bpe))\r\n// void carry_(x) //do carries and borrows so each element of the bigInt x fits in bpe bits.\r\n// void divide_(x,y,q,r) //divide x by y giving quotient q and remainder r\r\n// int divInt_(x,n) //do x=floor(x/n) for bigInt x and integer n, and return the remainder. (This never overflows its array).\r\n// void eGCD_(x,y,d,a,b) //sets a,b,d to positive bigInts such that d = GCD_(x,y) = a*x-b*y\r\n// void halve_(x) //do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement. (This never overflows its array).\r\n// void leftShift_(x,n) //left shift bigInt x by n bits. n<bpe.\r\n// void linComb_(x,y,a,b) //do x=a*x+b*y for bigInts x and y and integers a and b\r\n// void linCombShift_(x,y,b,ys) //do x=x+b*(y<<(ys*bpe)) for bigInts x and y, and integers b and ys\r\n// void mont_(x,y,n,np) //Montgomery multiplication (see comments where the function is defined)\r\n// void multInt_(x,n) //do x=x*n where x is a bigInt and n is an integer.\r\n// void rightShift_(x,n) //right shift bigInt x by n bits. 0 <= n < bpe. (This never overflows its array).\r\n// void squareMod_(x,n) //do x=x*x mod n for bigInts x,n\r\n// void subShift_(x,y,ys) //do x=x-(y<<(ys*bpe)). Negative answers will be 2s complement.\r\n//\r\n// The following functions are based on algorithms from the _Handbook of Applied Cryptography_\r\n// powMod_() = algorithm 14.94, Montgomery exponentiation\r\n// eGCD_,inverseMod_() = algorithm 14.61, Binary extended GCD_\r\n// GCD_() = algorothm 14.57, Lehmer's algorithm\r\n// mont_() = algorithm 14.36, Montgomery multiplication\r\n// divide_() = algorithm 14.20 Multiple-precision division\r\n// squareMod_() = algorithm 14.16 Multiple-precision squaring\r\n// randTruePrime_() = algorithm 4.62, Maurer's algorithm\r\n// millerRabin() = algorithm 4.24, Miller-Rabin algorithm\r\n//\r\n// Profiling shows:\r\n// randTruePrime_() spends:\r\n// 10% of its time in calls to powMod_()\r\n// 85% of its time in calls to millerRabin()\r\n// millerRabin() spends:\r\n// 99% of its time in calls to powMod_() (always with a base of 2)\r\n// powMod_() spends:\r\n// 94% of its time in calls to mont_() (almost always with x==y)\r\n//\r\n// This suggests there are several ways to speed up this library slightly:\r\n// - convert powMod_ to use a Montgomery form of k-ary window (or maybe a Montgomery form of sliding window)\r\n// -- this should especially focus on being fast when raising 2 to a power mod n\r\n// - convert randTruePrime_() to use a minimum r of 1/3 instead of 1/2 with the appropriate change to the test\r\n// - tune the parameters in randTruePrime_(), including c, m, and recLimit\r\n// - speed up the single loop in mont_() that takes 95% of the runtime, perhaps by reducing checking\r\n// within the loop when all the parameters are the same length.\r\n//\r\n// There are several ideas that look like they wouldn't help much at all:\r\n// - replacing trial division in randTruePrime_() with a sieve (that speeds up something taking almost no time anyway)\r\n// - increase bpe from 15 to 30 (that would help if we had a 32*32->64 multiplier, but not with JavaScript's 32*32->32)\r\n// - speeding up mont_(x,y,n,np) when x==y by doing a non-modular, non-Montgomery square\r\n// followed by a Montgomery reduction. The intermediate answer will be twice as long as x, so that\r\n// method would be slower. This is unfortunate because the code currently spends almost all of its time\r\n// doing mont_(x,x,...), both for randTruePrime_() and powMod_(). A faster method for Montgomery squaring\r\n// would have a large impact on the speed of randTruePrime_() and powMod_(). HAC has a couple of poorly-worded\r\n// sentences that seem to imply it's faster to do a non-modular square followed by a single\r\n// Montgomery reduction, but that's obviously wrong.\r\n////////////////////////////////////////////////////////////////////////////////////////\r\n\r\nexport type Bool = 1 | 0\r\n\r\n//globals\r\nexport var bpe = 0 //bits stored per array element\r\nvar mask = 0 //AND this with an array element to chop it down to bpe bits\r\nvar radix = mask + 1 //equals 2^bpe. A single 1 bit to the left of the last bit of mask.\r\n\r\n//the digits for converting to different bases\r\nvar digitsStr =\r\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\\\\\'\"+-'\r\n\r\n//initialize the global variables\r\n\r\n//bpe=number of bits in the mantissa on this platform\r\nfor (bpe = 0; 1 << (bpe + 1) > 1 << bpe; bpe++);\r\nbpe >>= 1 //bpe=number of bits in one element of the array representing the bigInt\r\nmask = (1 << bpe) - 1 //AND the mask with an integer to get its bpe least significant bits\r\nradix = mask + 1 //2^bpe. a single 1 bit to the left of the first bit of mask\r\nexport var one = int2bigInt(1, 1, 1) //constant used in powMod_()\r\nexport var zero = int2bigInt(0, 1, 1)\r\n\r\n//the following global variables are scratchpad memory to\r\n//reduce dynamic memory allocation in the inner loop\r\nvar t: number[] | number = new Array(0)\r\nvar ss = t //used in mult_()\r\nvar s0 = t //used in multMod_(), squareMod_()\r\n// var s1=t; //used in powMod_(), multMod_(), squareMod_()\r\n// var s2=t; //used in powMod_(), multMod_()\r\nvar s3 = t //used in powMod_()\r\nvar s4 = t,\r\n s5 = t //used in mod_()\r\nvar s6 = t //used in bigInt2str()\r\nvar s7 = t //used in powMod_()\r\nvar T = t //used in GCD_()\r\nvar sa = t //used in mont_()\r\nvar mr_x1 = t,\r\n mr_r = t,\r\n mr_a = t, //used in millerRabin()\r\n eg_v = t,\r\n eg_u = t,\r\n eg_A = t,\r\n eg_B = t,\r\n eg_C = t,\r\n eg_D = t, //used in eGCD_(), inverseMod_()\r\n //, md_q1=t, md_q2=t, md_q3=t, md_r=t, md_r1=t, md_r2=t, md_tt=t, //used in mod_()\r\n\r\n primes = t,\r\n pows = t,\r\n s_i = t,\r\n s_i2 = t,\r\n s_R = t,\r\n s_rm = t,\r\n s_q = t,\r\n s_n1 = t,\r\n s_a = t,\r\n s_r2 = t,\r\n s_n = t,\r\n s_b = t,\r\n s_d = t,\r\n s_x1 = t,\r\n s_x2 = t,\r\n s_aa = t, //used in randTruePrime_()\r\n rpprb = t //used in randProbPrimeRounds() (which also uses \"primes\")\r\n\r\n////////////////////////////////////////////////////////////////////////////////////////\r\n\r\nvar k, buff\r\n\r\n/**\r\n * return array of all primes less than integer n\r\n *\r\n * @param {number} n\r\n * @returns {number[]}\r\n */\r\nexport function findPrimes(n: number): number[] {\r\n var i, s, p, ans\r\n s = new Array(n)\r\n for (i = 0; i < n; i++) s[i] = 0\r\n s[0] = 2\r\n p = 0 //first p elements of s are primes, the rest are a sieve\r\n for (; s[p] < n; ) {\r\n //s[p] is the pth prime\r\n for (\r\n i = s[p] * s[p];\r\n i < n;\r\n i += s[p] //mark multiples of s[p]\r\n )\r\n s[i] = 1\r\n p++\r\n s[p] = s[p - 1] + 1\r\n for (; s[p] < n && s[s[p]]; s[p]++); //find next prime (where s[p]==0)\r\n }\r\n ans = new Array(p)\r\n for (i = 0; i < p; i++) ans[i] = s[i]\r\n return ans\r\n}\r\n\r\n/**\r\n * does a single round of Miller-Rabin base b consider x to be a possible prime?\r\n *\r\n * x is a bigInt, and b is an integer, with b<x\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} b\r\n * @returns {(0 | 1)}\r\n */\r\nexport function millerRabinInt(x: number[], b: number): Bool {\r\n if (mr_x1.length !== x.length) {\r\n mr_x1 = dup(x)\r\n mr_r = dup(x)\r\n mr_a = dup(x)\r\n }\r\n\r\n copyInt_(mr_a, b)\r\n return millerRabin(x, mr_a)\r\n}\r\n\r\n/**\r\n * does a single round of Miller-Rabin base b consider x to be a possible prime?\r\n *\r\n * x and b are bigInts with b<x\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} b\r\n * @returns {(0 | 1)}\r\n */\r\nexport function millerRabin(x: number[], b: number[]): Bool {\r\n var i, j, k, s\r\n\r\n if (mr_x1.length !== x.length) {\r\n mr_x1 = dup(x)\r\n mr_r = dup(x)\r\n mr_a = dup(x)\r\n }\r\n\r\n copy_(mr_a, b)\r\n copy_(mr_r, x)\r\n copy_(mr_x1, x)\r\n\r\n addInt_(mr_r, -1)\r\n addInt_(mr_x1, -1)\r\n\r\n //s=the highest power of two that divides mr_r\r\n k = 0\r\n for (i = 0; i < mr_r.length; i++)\r\n for (j = 1; j < mask; j <<= 1)\r\n if (x[i] & j) {\r\n s = k < mr_r.length + bpe ? k : 0\r\n i = mr_r.length\r\n j = mask\r\n } else k++\r\n\r\n if (s) rightShift_(mr_r, s)\r\n\r\n powMod_(mr_a, mr_r, x)\r\n\r\n if (!equalsInt(mr_a, 1) && !equals(mr_a, mr_x1)) {\r\n j = 1\r\n //$off\r\n while (j <= s - 1 && !equals(mr_a, mr_x1)) {\r\n squareMod_(mr_a, x)\r\n if (equalsInt(mr_a, 1)) {\r\n return 0\r\n }\r\n j++\r\n }\r\n if (!equals(mr_a, mr_x1)) {\r\n return 0\r\n }\r\n }\r\n return 1\r\n}\r\n\r\n/**\r\n * returns how many bits long the bigInt is, not counting leading zeros.\r\n *\r\n * @param {number[]} x\r\n * @returns {number}\r\n */\r\nexport function bitSize(x: number[]): number {\r\n var j, z, w\r\n for (j = x.length - 1; x[j] == 0 && j > 0; j--);\r\n for (z = 0, w = x[j]; w; w >>= 1, z++);\r\n z += bpe * j\r\n return z\r\n}\r\n\r\n/**\r\n * return a copy of x with at least n elements, adding leading zeros if needed\r\n *\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {number[]}\r\n */\r\nexport function expand(x: number[], n: number): number[] {\r\n var ans = int2bigInt(0, (x.length > n ? x.length : n) * bpe, 0)\r\n copy_(ans, x)\r\n return ans\r\n}\r\n\r\n/**\r\n * return a k-bit true random prime using Maurer's algorithm.\r\n *\r\n * @export\r\n * @param {number} k\r\n * @returns {number[]}\r\n */\r\nexport function randTruePrime(k: number): number[] {\r\n var ans = int2bigInt(0, k, 0)\r\n randTruePrime_(ans, k)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return a k-bit random probable prime with probability of error < 2^-80\r\n *\r\n * @export\r\n * @param {number} k\r\n * @returns {number[]}\r\n */\r\nexport function randProbPrime(k: number): number[] {\r\n if (k >= 600) return randProbPrimeRounds(k, 2) //numbers from HAC table 4.3\r\n if (k >= 550) return randProbPrimeRounds(k, 4)\r\n if (k >= 500) return randProbPrimeRounds(k, 5)\r\n if (k >= 400) return randProbPrimeRounds(k, 6)\r\n if (k >= 350) return randProbPrimeRounds(k, 7)\r\n if (k >= 300) return randProbPrimeRounds(k, 9)\r\n if (k >= 250) return randProbPrimeRounds(k, 12) //numbers from HAC table 4.4\r\n if (k >= 200) return randProbPrimeRounds(k, 15)\r\n if (k >= 150) return randProbPrimeRounds(k, 18)\r\n if (k >= 100) return randProbPrimeRounds(k, 27)\r\n return randProbPrimeRounds(k, 40) //number from HAC remark 4.26 (only an estimate)\r\n}\r\n\r\n/**\r\n * return a k-bit probable random prime using n rounds of Miller Rabin\r\n * (after trial division with small primes)\r\n *\r\n * @export\r\n * @param {number} k\r\n * @param {number} n\r\n * @returns {number[]}\r\n */\r\nexport function randProbPrimeRounds(k: number, n: number): number[] {\r\n var ans, i, divisible, B\r\n B = 30000 //B is largest prime to use in trial division\r\n ans = int2bigInt(0, k, 0)\r\n\r\n //optimization: try larger and smaller B to find the best limit.\r\n\r\n if (primes.length === 0) primes = findPrimes(30000) //check for divisibility by primes <=30000\r\n\r\n if (rpprb.length !== ans.length) rpprb = dup(ans)\r\n\r\n for (;;) {\r\n //keep trying random values for ans until one appears to be prime\r\n //optimization: pick a random number times L=2*3*5*...*p, plus a\r\n // random element of the list of all numbers in [0,L) not divisible by any prime up to p.\r\n // This can reduce the amount of random number generation.\r\n\r\n randBigInt_(ans, k, 0) //ans = a random odd number to check\r\n ans[0] |= 1\r\n divisible = 0\r\n\r\n //check ans for divisibility by small primes up to B\r\n for (i = 0; i < primes.length && primes[i] <= B; i++)\r\n if (modInt(ans, primes[i]) === 0 && !equalsInt(ans, primes[i])) {\r\n divisible = 1\r\n break\r\n }\r\n\r\n //optimization: change millerRabin so the base can be bigger than the number being checked, then eliminate the while here.\r\n\r\n //do n rounds of Miller Rabin, with random bases less than ans\r\n for (i = 0; i < n && !divisible; i++) {\r\n randBigInt_(rpprb, k, 0)\r\n while (\r\n !greater(ans, rpprb) //pick a random rpprb that's < ans\r\n )\r\n randBigInt_(rpprb, k, 0)\r\n if (!millerRabin(ans, rpprb)) divisible = 1\r\n }\r\n\r\n if (!divisible) return ans\r\n }\r\n /*::\r\n declare var never: empty\r\n return never\r\n */\r\n}\r\n\r\n/**\r\n * return a new bigInt equal to (x mod n) for bigInts x and n.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @returns {number[]}\r\n */\r\nexport function mod(x: number[], n: number[]): number[] {\r\n var ans = dup(x)\r\n mod_(ans, n)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return (x+n) where x is a bigInt and n is an integer.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {number[]}\r\n */\r\nexport function addInt(x: number[], n: number): number[] {\r\n var ans = expand(x, x.length + 1)\r\n addInt_(ans, n)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return x*y for bigInts x and y. This is faster when y<x.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {number[]}\r\n */\r\nexport function mult(x: number[], y: number[]): number[] {\r\n var ans = expand(x, x.length + y.length)\r\n mult_(ans, y)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return (x**y mod n) where x,y,n are bigInts and ** is exponentiation.\r\n *\r\n * 0**0=1.\r\n *\r\n * Faster for odd n.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @returns {number[]}\r\n */\r\nexport function powMod(x: number[], y: number[], n: number[]): number[] {\r\n var ans = expand(x, n.length)\r\n powMod_(\r\n //this should work without the trim, but doesn't\r\n ans,\r\n trim(y, 2),\r\n trim(n, 2),\r\n )\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * Simple pow with no optimizations (in 40x times slower than jsbn's pow)\r\n * @param x bigInt\r\n * @param e\r\n */\r\nexport function pow(x: number[], e: number) {\r\n let ans = dup(x);\r\n e -= 1;\r\n for(let i = 0; i < e; ++i) {\r\n ans = mult(ans, x);\r\n }\r\n return trim(ans, 1);\r\n}\r\n\r\n/**\r\n * return (x-y) for bigInts x and y\r\n *\r\n * Negative answers will be 2s complement\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {number[]}\r\n */\r\nexport function sub(x: number[], y: number[]): number[] {\r\n var ans = expand(x, x.length > y.length ? x.length + 1 : y.length + 1)\r\n sub_(ans, y)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return (x+y) for bigInts x and y\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {number[]}\r\n */\r\nexport function add(x: number[], y: number[]): number[] {\r\n var ans = expand(x, x.length > y.length ? x.length + 1 : y.length + 1)\r\n add_(ans, y)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return (x**(-1) mod n) for bigInts x and n.\r\n *\r\n * If no inverse exists, it returns null\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @returns {(number[] | null)}\r\n */\r\nexport function inverseMod(x: number[], n: number[]): number[] | null {\r\n var ans = expand(x, n.length)\r\n var s = inverseMod_(ans, n)\r\n return s ? trim(ans, 1) : null\r\n}\r\n\r\n/**\r\n * return (x*y mod n) for bigInts x,y,n.\r\n *\r\n * For greater speed, let y<x.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @returns {number[]}\r\n */\r\nexport function multMod(x: number[], y: number[], n: number[]): number[] {\r\n var ans = expand(x, n.length)\r\n multMod_(ans, y, n)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * generate a k-bit true random prime using Maurer's algorithm, and put it into ans.\r\n *\r\n * The bigInt ans must be large enough to hold it.\r\n *\r\n * @export\r\n * @param {number[]} ans\r\n * @param {number} k\r\n * @return {void}\r\n */\r\nexport function randTruePrime_(ans: number[], k: number): void {\r\n var c, m, pm, dd, j, r, B, divisible, z, zz, recSize\r\n var w\r\n if (primes.length == 0) primes = findPrimes(30000) //check for divisibility by primes <=30000\r\n\r\n if (pows.length == 0) {\r\n pows = new Array(512)\r\n for (j = 0; j < 512; j++) {\r\n pows[j] = Math.pow(2, j / 511 - 1)\r\n }\r\n }\r\n\r\n //c and m should be tuned for a particular machine and value of k, to maximize speed\r\n c = 0.1 //c=0.1 in HAC\r\n m = 20 //generate this k-bit number by first recursively generating a number that has between k/2 and k-m bits\r\n var recLimit = 20 //stop recursion when k <=recLimit. Must have recLimit >= 2\r\n\r\n if (s_i2.length != ans.length) {\r\n s_i2 = dup(ans)\r\n s_R = dup(ans)\r\n s_n1 = dup(ans)\r\n s_r2 = dup(ans)\r\n s_d = dup(ans)\r\n s_x1 = dup(ans) //TODO Seems like a bug in eslint, reports as unused\r\n s_x2 = dup(ans)\r\n s_b = dup(ans)\r\n s_n = dup(ans)\r\n s_i = dup(ans)\r\n s_rm = dup(ans)\r\n s_q = dup(ans)\r\n s_a = dup(ans)\r\n s_aa = dup(ans)\r\n }\r\n\r\n if (k <= recLimit) {\r\n //generate small random primes by trial division up to its square root\r\n pm = (1 << ((k + 2) >> 1)) - 1 //pm is binary number with all ones, just over sqrt(2^k)\r\n copyInt_(ans, 0)\r\n for (dd = 1; dd; ) {\r\n dd = 0\r\n ans[0] = 1 | (1 << (k - 1)) | Math.floor(Math.random() * (1 << k)) //random, k-bit, odd integer, with msb 1\r\n for (j = 1; j < primes.length && (primes[j] & pm) == primes[j]; j++) {\r\n //trial division by all primes 3...sqrt(2^k)\r\n if (0 == ans[0] % primes[j]) {\r\n dd = 1\r\n break\r\n }\r\n }\r\n }\r\n carry_(ans)\r\n return\r\n }\r\n\r\n B = c * k * k //try small primes up to B (or all the primes[] array if the largest is less than B).\r\n if (k > 2 * m)\r\n //generate this k-bit number by first recursively generating a number that has between k/2 and k-m bits\r\n for (r = 1; k - k * r <= m; ) r = pows[Math.floor(Math.random() * 512)] //r=Math.pow(2,Math.random()-1);\r\n else r = 0.5\r\n\r\n //simulation suggests the more complex algorithm using r=.333 is only slightly faster.\r\n\r\n recSize = Math.floor(r * k) + 1\r\n\r\n randTruePrime_(s_q, recSize)\r\n copyInt_(s_i2, 0)\r\n s_i2[Math.floor((k - 2) / bpe)] |= 1 << ((k - 2) % bpe) //s_i2=2^(k-2)\r\n divide_(s_i2, s_q, s_i, s_rm) //s_i=floor((2^(k-1))/(2q))\r\n\r\n z = bitSize(s_i)\r\n\r\n for (;;) {\r\n for (;;) {\r\n //generate z-bit numbers until one falls in the range [0,s_i-1]\r\n randBigInt_(s_R, z, 0)\r\n if (greater(s_i, s_R)) break\r\n } //now s_R is in the range [0,s_i-1]\r\n addInt_(s_R, 1) //now s_R is in the range [1,s_i]\r\n add_(s_R, s_i) //now s_R is in the range [s_i+1,2*s_i]\r\n\r\n copy_(s_n, s_q)\r\n mult_(s_n, s_R)\r\n multInt_(s_n, 2)\r\n addInt_(s_n, 1) //s_n=2*s_R*s_q+1\r\n\r\n copy_(s_r2, s_R)\r\n multInt_(s_r2, 2) //s_r2=2*s_R\r\n\r\n //check s_n for divisibility by small primes up to B\r\n for (divisible = 0, j = 0; j < primes.length && primes[j] < B; j++)\r\n if (modInt(s_n, primes[j]) == 0 && !equalsInt(s_n, primes[j])) {\r\n divisible = 1\r\n break\r\n }\r\n\r\n if (!divisible)\r\n if (!millerRabinInt(s_n, 2))\r\n //if it passes small primes check, then try a single Miller-Rabin base 2\r\n //this line represents 75% of the total runtime for randTruePrime_\r\n divisible = 1\r\n\r\n if (!divisible) {\r\n //if it passes that test, continue checking s_n\r\n addInt_(s_n, -3)\r\n for (j = s_n.length - 1; s_n[j] == 0 && j > 0; j--); //strip leading zeros\r\n for (zz = 0, w = s_n[j]; w; w >>= 1, zz++);\r\n zz += bpe * j //zz=number of bits in s_n, ignoring leading zeros\r\n for (;;) {\r\n //generate z-bit numbers until one falls in the range [0,s_n-1]\r\n randBigInt_(s_a, zz, 0)\r\n if (greater(s_n, s_a)) break\r\n } //now s_a is in the range [0,s_n-1]\r\n addInt_(s_n, 3) //now s_a is in the range [0,s_n-4]\r\n addInt_(s_a, 2) //now s_a is in the range [2,s_n-2]\r\n copy_(s_b, s_a)\r\n copy_(s_n1, s_n)\r\n addInt_(s_n1, -1)\r\n powMod_(s_b, s_n1, s_n) //s_b=s_a^(s_n-1) modulo s_n\r\n addInt_(s_b, -1)\r\n if (isZero(s_b)) {\r\n copy_(s_b, s_a)\r\n powMod_(s_b, s_r2, s_n)\r\n addInt_(s_b, -1)\r\n copy_(s_aa, s_n)\r\n copy_(s_d, s_b)\r\n GCD_(s_d, s_n) //if s_b and s_n are relatively prime, then s_n is a prime\r\n if (equalsInt(s_d, 1)) {\r\n copy_(ans, s_aa)\r\n return //if we've made it this far, then s_n is absolutely guaranteed to be prime\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Return an n-bit random BigInt (n>=1). If s=1, then the most significant of those n bits is set to 1.\r\n *\r\n * @export\r\n * @param {number} n\r\n * @param {number} s\r\n * @returns {number[]}\r\n */\r\nexport function randBigInt(n: number, s: number): number[] {\r\n var a, b\r\n a = Math.floor((n - 1) / bpe) + 2 //# array elements to hold the BigInt with a leading 0 element\r\n b = int2bigInt(0, 0, a)\r\n randBigInt_(b, n, s)\r\n return b\r\n}\r\n\r\n/**\r\n * Set b to an n-bit random BigInt. If s=1, then the most significant of those n bits is set to 1.\r\n *\r\n * Array b must be big enough to hold the result. Must have n>=1\r\n *\r\n * @export\r\n * @param {number[]} b\r\n * @param {number} n\r\n * @param {number} s\r\n * @return {void}\r\n */\r\nexport function randBigInt_(b: number[], n: number, s: number): void {\r\n var i, a\r\n for (i = 0; i < b.length; i++) b[i] = 0\r\n a = Math.floor((n - 1) / bpe) + 1 //# array elements to hold the BigInt\r\n for (i = 0; i < a; i++) {\r\n b[i] = Math.floor(Math.random() * (1 << (bpe - 1)))\r\n }\r\n b[a - 1] &= (2 << ((n - 1) % bpe)) - 1\r\n if (s == 1) b[a - 1] |= 1 << ((n - 1) % bpe)\r\n}\r\n\r\n/**\r\n * Return the greatest common divisor of bigInts x and y (each with same number of elements).\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {number[]}\r\n */\r\nexport function GCD(x: number[], y: number[]): number[] {\r\n var xc, yc\r\n xc = dup(x)\r\n yc = dup(y)\r\n GCD_(xc, yc)\r\n return xc\r\n}\r\n\r\n/**\r\n * set x to the greatest common divisor of bigInts x and y (each with same number of elements).\r\n *\r\n * y is destroyed.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n */\r\nexport function GCD_(x: number[], y: number[]): void {\r\n var i: number, xp: number, yp: number, A: number, B, C: number, D: number, q, sing\r\n var qp\r\n if (T.length !== x.length) T = dup(x)\r\n\r\n sing = 1\r\n while (sing) {\r\n //while y has nonzero elements other than y[0]\r\n sing = 0\r\n for (\r\n i = 1;\r\n i < y.length;\r\n i++ //check if y has nonzero elements other than 0\r\n )\r\n if (y[i]) {\r\n sing = 1\r\n break\r\n }\r\n if (!sing) break //quit when y all zero elements except possibly y[0]\r\n\r\n for (i = x.length; !x[i] && i >= 0; i--); //find most significant element of x\r\n xp = x[i]\r\n yp = y[i]\r\n A = 1\r\n B = 0\r\n C = 0\r\n D = 1\r\n while (yp + C && yp + D) {\r\n q = Math.floor((xp + A) / (yp + C))\r\n qp = Math.floor((xp + B) / (yp + D))\r\n if (q != qp) break\r\n t = A - q * C\r\n A = C\r\n C = t // do (A,B,xp, C,D,yp) = (C,D,yp, A,B,xp) - q*(0,0,0, C,D,yp)\r\n t = B - q * D\r\n B = D\r\n D = t\r\n t = xp - q * yp\r\n xp = yp\r\n yp = t\r\n }\r\n if (B) {\r\n copy_(T, x)\r\n linComb_(x, y, A, B) //x=A*x+B*y\r\n linComb_(y, T, D, C) //y=D*y+C*T\r\n } else {\r\n mod_(x, y)\r\n copy_(T, x)\r\n copy_(x, y)\r\n copy_(y, T)\r\n }\r\n }\r\n if (y[0] === 0) return\r\n t = modInt(x, y[0])\r\n copyInt_(x, y[0])\r\n y[0] = t\r\n while (y[0]) {\r\n x[0] %= y[0]\r\n t = x[0]\r\n x[0] = y[0]\r\n y[0] = t\r\n }\r\n}\r\n\r\n/**\r\n * do x=x**(-1) mod n, for bigInts x and n.\r\n *\r\n * If no inverse exists, it sets x to zero and returns 0, else it returns 1.\r\n * The x array must be at least as large as the n array.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @returns {(0 | 1)}\r\n */\r\nexport function inverseMod_(x: number[], n: number[]): Bool {\r\n var k = 1 + 2 * Math.max(x.length, n.length)\r\n\r\n if (!(x[0] & 1) && !(n[0] & 1)) {\r\n //if both inputs are even, then inverse doesn't exist\r\n copyInt_(x, 0)\r\n return 0\r\n }\r\n\r\n if (eg_u.length != k) {\r\n eg_u = new Array(k)\r\n eg_v = new Array(k)\r\n eg_A = new Array(k)\r\n eg_B = new Array(k)\r\n eg_C = new Array(k)\r\n eg_D = new Array(k)\r\n }\r\n\r\n copy_(eg_u, x)\r\n copy_(eg_v, n)\r\n copyInt_(eg_A, 1)\r\n copyInt_(eg_B, 0)\r\n copyInt_(eg_C, 0)\r\n copyInt_(eg_D, 1)\r\n for (;;) {\r\n while (!(eg_u[0] & 1)) {\r\n //while eg_u is even\r\n halve_(eg_u)\r\n if (!(eg_A[0] & 1) && !(eg_B[0] & 1)) {\r\n //if eg_A==eg_B==0 mod 2\r\n halve_(eg_A)\r\n halve_(eg_B)\r\n } else {\r\n add_(eg_A, n)\r\n halve_(eg_A)\r\n sub_(eg_B, x)\r\n halve_(eg_B)\r\n }\r\n }\r\n\r\n while (!(eg_v[0] & 1)) {\r\n //while eg_v is even\r\n halve_(eg_v)\r\n if (!(eg_C[0] & 1) && !(eg_D[0] & 1)) {\r\n //if eg_C==eg_D==0 mod 2\r\n halve_(eg_C)\r\n halve_(eg_D)\r\n } else {\r\n add_(eg_C, n)\r\n halve_(eg_C)\r\n sub_(eg_D, x)\r\n halve_(eg_D)\r\n }\r\n }\r\n\r\n if (!greater(eg_v, eg_u)) {\r\n //eg_v <= eg_u\r\n sub_(eg_u, eg_v)\r\n sub_(eg_A, eg_C)\r\n sub_(eg_B, eg_D)\r\n } else {\r\n //eg_v > eg_u\r\n sub_(eg_v, eg_u)\r\n sub_(eg_C, eg_A)\r\n sub_(eg_D, eg_B)\r\n }\r\n\r\n if (equalsInt(eg_u, 0)) {\r\n while (\r\n negative(eg_C) //make sure answer is nonnegative\r\n )\r\n add_(eg_C, n)\r\n copy_(x, eg_C)\r\n\r\n if (!equalsInt(eg_v, 1)) {\r\n //if GCD_(x,n)!=1, then there is no inverse\r\n copyInt_(x, 0)\r\n return 0\r\n }\r\n return 1\r\n }\r\n }\r\n /*::\r\n declare var never: empty\r\n return never\r\n */\r\n}\r\n\r\n/**\r\n * return x**(-1) mod n, for integers x and n.\r\n *\r\n * Return 0 if there is no inverse\r\n *\r\n * @param {number} x\r\n * @param {number} n\r\n * @returns {number}\r\n */\r\nexport function inverseModInt(x: number, n: number): number {\r\n var a = 1,\r\n b = 0,\r\n t\r\n for (;;) {\r\n if (x === 1) return a\r\n if (x === 0) return 0\r\n b -= a * Math.floor(n / x)\r\n //$off\r\n n %= x\r\n\r\n if (n === 1) return b //to avoid negatives, change this b to n-b, and each -= to +=\r\n if (n === 0) return 0\r\n a -= b * Math.floor(x / n)\r\n //$off\r\n x %= n\r\n }\r\n /*::\r\n declare var never: empty\r\n return never\r\n */\r\n}\r\n\r\n//this deprecated function is for backward compatibility only.\r\nfunction inverseModInt_(x: number, n: number) {\r\n return inverseModInt(x, n)\r\n}\r\n\r\n/**\r\n * Given positive bigInts x and y, change the bigints v, a, and b to positive bigInts such that:\r\n *\r\n * v = GCD_(x,y) = a*x-b*y\r\n *\r\n * The bigInts v, a, b, must have exactly as many elements as the larger of x and y.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} v\r\n * @param {number[]} a\r\n * @param {number[]} b\r\n * @return {void}\r\n */\r\nexport function eGCD_(\r\n x: number[],\r\n y: number[],\r\n v: number[],\r\n a: number[],\r\n b: number[],\r\n): void {\r\n var g = 0\r\n var k = Math.max(x.length, y.length)\r\n if (eg_u.length != k) {\r\n eg_u = new Array(k)\r\n eg_A = new Array(k)\r\n eg_B = new Array(k)\r\n eg_C = new Array(k)\r\n eg_D = new Array(k)\r\n }\r\n while (!(x[0] & 1) && !(y[0] & 1)) {\r\n //while x and y both even\r\n halve_(x)\r\n halve_(y)\r\n g++\r\n }\r\n copy_(eg_u, x)\r\n copy_(v, y)\r\n copyInt_(eg_A, 1)\r\n copyInt_(eg_B, 0)\r\n copyInt_(eg_C, 0)\r\n copyInt_(eg_D, 1)\r\n for (;;) {\r\n while (!(eg_u[0] & 1)) {\r\n //while u is even\r\n halve_(eg_u)\r\n if (!(eg_A[0] & 1) && !(eg_B[0] & 1)) {\r\n //if A==B==0 mod 2\r\n halve_(eg_A)\r\n halve_(eg_B)\r\n } else {\r\n add_(eg_A, y)\r\n halve_(eg_A)\r\n sub_(eg_B, x)\r\n halve_(eg_B)\r\n }\r\n }\r\n\r\n while (!(v[0] & 1)) {\r\n //while v is even\r\n halve_(v)\r\n if (!(eg_C[0] & 1) && !(eg_D[0] & 1)) {\r\n //if C==D==0 mod 2\r\n halve_(eg_C)\r\n halve_(eg_D)\r\n } else {\r\n add_(eg_C, y)\r\n halve_(eg_C)\r\n sub_(eg_D, x)\r\n halve_(eg_D)\r\n }\r\n }\r\n\r\n if (!greater(v, eg_u)) {\r\n //v<=u\r\n sub_(eg_u, v)\r\n sub_(eg_A, eg_C)\r\n sub_(eg_B, eg_D)\r\n } else {\r\n //v>u\r\n sub_(v, eg_u)\r\n sub_(eg_C, eg_A)\r\n sub_(eg_D, eg_B)\r\n }\r\n if (equalsInt(eg_u, 0)) {\r\n while (negative(eg_C)) {\r\n //make sure a (C) is nonnegative\r\n add_(eg_C, y)\r\n sub_(eg_D, x)\r\n }\r\n multInt_(eg_D, -1) ///make sure b (D) is nonnegative\r\n copy_(a, eg_C)\r\n copy_(b, eg_D)\r\n leftShift_(v, g)\r\n return\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * is bigInt x negative?\r\n *\r\n * @param {number[]} x\r\n * @returns {(1 | 0)}\r\n */\r\nexport function negative(x: number[]) {\r\n //TODO Flow Bool type inference\r\n return (x[x.length - 1] >> (bpe - 1)) & 1\r\n}\r\n\r\n/**\r\n * is (x << (shift*bpe)) > y?\r\n *\r\n * x and y are nonnegative bigInts\r\n * shift is a nonnegative integer\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} shift\r\n * @returns {(1 | 0)}\r\n */\r\nexport function greaterShift(x: number[], y: number[], shift: number): Bool {\r\n var i,\r\n kx = x.length,\r\n ky = y.length\r\n k = kx + shift < ky ? kx + shift : ky\r\n for (i = ky - 1 - shift; i < kx && i >= 0; i++) if (x[i] > 0) return 1 //if there are nonzeros in x to the left of the first column of y, then x is bigger\r\n for (i = kx - 1 + shift; i < ky; i++) if (y[i] > 0) return 0 //if there are nonzeros in y to the left of the first column of x, then x is not bigger\r\n for (i = k - 1; i >= shift; i--)\r\n if (x[i - shift] > y[i]) return 1\r\n else if (x[i - shift] < y[i]) return 0\r\n return 0\r\n}\r\n\r\n/**\r\n * is x > y?\r\n *\r\n * x and y both nonnegative\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {(1 | 0)}\r\n */\r\nexport function greater(x: number[], y: number[]): Bool {\r\n var i\r\n var k = x.length < y.length ? x.length : y.length\r\n\r\n for (i = x.length; i < y.length; i++) if (y[i]) return 0 //y has more digits\r\n\r\n for (i = y.length; i < x.length; i++) if (x[i]) return 1 //x has more digits\r\n\r\n for (i = k - 1; i >= 0; i--)\r\n if (x[i] > y[i]) return 1\r\n else if (x[i] < y[i]) return 0\r\n return 0\r\n}\r\n\r\n/**\r\n * divide x by y giving quotient q and remainder r.\r\n *\r\n * q = floor(x/y)\r\n * r = x mod y\r\n *\r\n * All 4 are bigints.\r\n *\r\n * * x must have at least one leading zero element.\r\n * * y must be nonzero.\r\n * * q and r must be arrays that are exactly the same length as x. (Or q can have more).\r\n * * Must have x.length >= y.length >= 2.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} q\r\n * @param {number[]} r\r\n * @return {void}\r\n */\r\nexport function divide_(\r\n x: number[],\r\n y: number[],\r\n q: number[],\r\n r: number[],\r\n): void {\r\n var kx, ky\r\n var i, j, y1, y2, c, a, b\r\n copy_(r, x)\r\n for (ky = y.length; y[ky - 1] === 0; ky--); //ky is number of elements in y, not including leading zeros\r\n\r\n //normalize: ensure the most significant element of y has its highest bit set\r\n b = y[ky - 1]\r\n for (a = 0; b; a++) b >>= 1\r\n a = bpe - a //a is how many bits to shift so that the high order bit of y is leftmost in its array element\r\n leftShift_(y, a) //multiply both by 1<<a now, then divide both by that at the end\r\n leftShift_(r, a)\r\n\r\n //Rob Visser discovered a bug: the following line was originally just before the normalization.\r\n for (kx = r.length; r[kx - 1] === 0 && kx > ky; kx--); //kx is number of elements in normalized x, not including leading zeros\r\n\r\n copyInt_(q, 0) // q=0\r\n while (!greaterShift(y, r, kx - ky)) {\r\n // while (leftShift_(y,kx-ky) <= r) {\r\n subShift_(r, y, kx - ky) // r=r-leftShift_(y,kx-ky)\r\n q[kx - ky]++ // q[kx-ky]++;\r\n } // }\r\n\r\n for (i = kx - 1; i >= ky; i--) {\r\n if (r[i] == y[ky - 1]) q[i - ky] = mask\r\n else q[i - ky] = Math.floor((r[i] * radix + r[i - 1]) / y[ky - 1])\r\n\r\n //The following for(;;) loop is equivalent to the commented while loop,\r\n //except that the uncommented version avoids overflow.\r\n //The commented loop comes from HAC, which assumes r[-1]==y[-1]==0\r\n // while (q[i-ky]*(y[ky-1]*radix+y[ky-2]) > r[i]*radix*radix+r[i-1]*radix+r[i-2])\r\n // q[i-ky]--;\r\n for (;;) {\r\n y2 = (ky > 1 ? y[ky - 2] : 0) * q[i - ky]\r\n c = y2 >> bpe\r\n y2 = y2 & mask\r\n y1 = c + q[i - ky] * y[ky - 1]\r\n c = y1 >> bpe\r\n y1 = y1 & mask\r\n\r\n if (\r\n c == r[i]\r\n ? y1 == r[i - 1] ? y2 > (i > 1 ? r[i - 2] : 0) : y1 > r[i - 1]\r\n : c > r[i]\r\n )\r\n q[i - ky]--\r\n else break\r\n }\r\n\r\n linCombShift_(r, y, -q[i - ky], i - ky) //r=r-q[i-ky]*leftShift_(y,i-ky)\r\n if (negative(r)) {\r\n addShift_(r, y, i - ky) //r=r+leftShift_(y,i-ky)\r\n q[i - ky]--\r\n }\r\n }\r\n\r\n rightShift_(y, a) //undo the normalization step\r\n rightShift_(r, a) //undo the normalization step\r\n}\r\n\r\n/**\r\n * do carries and borrows so each element of the bigInt x fits in bpe bits.\r\n *\r\n * @param {number[]} x\r\n */\r\nexport function carry_(x: number[]): void {\r\n var i, k, c, b\r\n k = x.length\r\n c = 0\r\n for (i = 0; i < k; i++) {\r\n c += x[i]\r\n b = 0\r\n if (c < 0) {\r\n b = -(c >> bpe)\r\n c += b * radix\r\n }\r\n x[i] = c & mask\r\n c = (c >> bpe) - b\r\n }\r\n}\r\n\r\n/**\r\n * return x mod n for bigInt x and integer n.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {number}\r\n */\r\nexport function modInt(x: number[], n: number): number {\r\n var i,\r\n c = 0\r\n for (i = x.length - 1; i >= 0; i--) c = (c * radix + x[i]) % n\r\n return c\r\n}\r\n\r\n/**\r\n * convert the integer t into a bigInt with at least the given number of bits.\r\n * the returned array stores the bigInt in bpe-bit chunks, little endian (buff[0] is least significant word)\r\n * Pad the array with leading zeros so that it has at least minSize elements.\r\n *\r\n * There will always be at least one leading 0 element.\r\n *\r\n * @export\r\n * @param {number} t\r\n * @param {number} bits\r\n * @param {number} minSize\r\n * @returns {number[]}\r\n */\r\nexport function int2bigInt(t: number, bits: number, minSize: number): number[] {\r\n var i, k\r\n k = Math.ceil(bits / bpe) + 1\r\n k = minSize > k ? minSize : k\r\n var buff = new Array(k)\r\n copyInt_(buff, t)\r\n return buff\r\n}\r\n\r\n/**\r\n * return the bigInt given a string representation in a given base.\r\n * Pad the array with leading zeros so that it has at least minSize elements.\r\n * If base=-1, then it reads in a space-separated list of array elements in decimal.\r\n *\r\n * The array will always have at least one leading zero, unless base=-1.\r\n *\r\n * @export\r\n * @param {string} s\r\n * @param {number} base\r\n * @param {number} [minSize]\r\n * @returns {number[]}\r\n */\r\nexport function str2bigInt(\r\n s: string,\r\n base: number,\r\n minSize?: number,\r\n): number[] {\r\n var d, i, x, y, kk\r\n var k = s.length\r\n if (base === -1) {\r\n //comma-separated list of array elements in decimal\r\n x = new Array(0)\r\n for (;;) {\r\n y = new Array(x.length + 1)\r\n for (i = 0; i < x.length; i++) y[i + 1] = x[i]\r\n y[0] = parseInt(s, 10) //TODO PERF Should we replace that with ~~ (not not)? https://jsperf.com/number-vs-parseint-vs-plus/7\r\n x = y\r\n d = s.indexOf(',', 0)\r\n if (d < 1) break\r\n //$off\r\n s = s.substring(d + 1)\r\n if (s.length == 0) break\r\n }\r\n //$off\r\n if (x.length < minSize) {\r\n //$off\r\n y = new Array(minSize)\r\n copy_(y, x)\r\n return y\r\n }\r\n return x\r\n }\r\n\r\n x = int2bigInt(0, base * k, 0)\r\n for (i = 0; i < k; i++) {\r\n d = digitsStr.indexOf(s.substring(i, i + 1), 0)\r\n if (base <= 36 && d >= 36)\r\n //convert lowercase to uppercase if base<=36\r\n d -= 26\r\n if (d >= base || d < 0) {\r\n //stop at first illegal character\r\n break\r\n }\r\n multInt_(x, base)\r\n addInt_(x, d)\r\n }\r\n\r\n for (k = x.length; k > 0 && !x[k - 1]; k--); //strip off leading zeros\r\n //$off\r\n k = minSize > k + 1 ? minSize : k + 1\r\n //$off\r\n y = new Array(k)\r\n //$off\r\n kk = k < x.length ? k : x.length\r\n //$off\r\n for (i = 0; i < kk; i++) y[i] = x[i]\r\n //$off\r\n for (; i < k; i++) y[i] = 0\r\n return y\r\n}\r\n\r\n//return the bigInt given a string representation in a given base.\r\n//Pad the array with leading zeros so that it has at least minSize elements.\r\n//If base=-1, then it reads in a space-separated list of array elements in decimal.\r\n//The array will always have at least one leading zero, unless base=-1.\r\n// function str2bigInt(s,b,minSize) {\r\n// var d, i, j, base, str, x, y, kk;\r\n// if (typeof b === 'string') {\r\n// base = b.length;\r\n// str = b;\r\n// } else {\r\n// base = b;\r\n// str = digitsStr;\r\n// }\r\n// var k=s.length;\r\n// if (base==-1) { //comma-separated list of array elements in decimal\r\n// x=new Array(0);\r\n// for (;;) {\r\n// y=new Array(x.length+1);\r\n// for (i=0;i<x.length;i++)\r\n// y[i+1]=x[i];\r\n// y[0]=parseInt(s,10);\r\n// x=y;\r\n// d=s.indexOf(',',0);\r\n// if (d<1)\r\n// break;\r\n// s=s.substring(d+1);\r\n// if (s.length==0)\r\n// break;\r\n// }\r\n// if (x.length<minSize) {\r\n// y=new Array(minSize);\r\n// copy_(y,x);\r\n// return y;\r\n// }\r\n// return x;\r\n// }\r\n\r\n// x=int2bigInt(0,base*k,0);\r\n// for (i=0;i<k;i++) {\r\n// d=str.indexOf(s.substring(i,i+1),0);\r\n// if (base<=36 && d>=36) { //convert lowercase to uppercase if base<=36\r\n// d-=26;\r\n// }\r\n// if (d>=base || d<0) { //ignore illegal characters\r\n// continue;\r\n// }\r\n// multInt_(x,base);\r\n// addInt_(x,d);\r\n// }\r\n\r\n// for (k=x.length;k>0 && !x[k-1];k--); //strip off leading zeros\r\n// k=minSize>k+1 ? minSize : k+1;\r\n// y=new Array(k);\r\n// kk=k<x.length ? k : x.length;\r\n// for (i=0;i<kk;i++)\r\n// y[i]=x[i];\r\n// for (;i<k;i++)\r\n// y[i]=0;\r\n// return y;\r\n// }\r\n\r\n/**\r\n * is bigint x equal to integer y?\r\n *\r\n * y must have less than bpe bits\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} y\r\n * @returns {(1 | 0)}\r\n */\r\nexport function equalsInt(x: number[], y: number): Bool {\r\n var i\r\n if (x[0] != y) return 0\r\n for (i = 1; i < x.length; i++) if (x[i]) return 0\r\n return 1\r\n}\r\n\r\n/**\r\n * are bigints x and y equal?\r\n *\r\n * this works even if x and y are different lengths and have arbitrarily many leading zeros\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {(1 | 0)}\r\n */\r\nexport function equals(x: number[], y: number[]): Bool {\r\n var i\r\n var k = x.length < y.length ? x.length : y.length\r\n for (i = 0; i < k; i++) if (x[i] !== y[i]) return 0\r\n if (x.length > y.length) {\r\n for (; i < x.length; i++) if (x[i]) return 0\r\n } else {\r\n for (; i < y.length; i++) if (y[i]) return 0\r\n }\r\n return 1\r\n}\r\n\r\n/**\r\n * is the bigInt x equal to zero?\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @returns {(1 | 0)}\r\n */\r\nexport function isZero(x: number[]): Bool {\r\n var i\r\n for (i = 0; i < x.length; i++) if (x[i]) return 0\r\n return 1\r\n}\r\n\r\n/**\r\n * Convert a bigInt into a string in a given base, from base 2 up to base 95.\r\n *\r\n * Base -1 prints the contents of the array representing the number.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} base\r\n * @returns {string}\r\n */\r\nexport function bigInt2str(x: number[], base: number): string {\r\n var i,\r\n t,\r\n s = ''\r\n\r\n if (s6.length !== x.length) s6 = dup(x)\r\n else copy_(s6, x)\r\n\r\n if (base === -1) {\r\n //return the list of array contents\r\n for (i = x.length - 1; i > 0; i--) s += x[i] + ','\r\n s += x[0]\r\n } else {\r\n //return it in the given base\r\n while (!isZero(s6)) {\r\n t = divInt_(s6, base) //t=s6 % base; s6=floor(s6/base);\r\n s = digitsStr.substring(t, t + 1) + s\r\n }\r\n }\r\n if (s.length === 0) s = '0'\r\n return s\r\n}\r\n\r\n/**\r\n * Convert a bigInt into bytes\r\n * @param x bigInt\r\n * @param littleEndian byte order by default\r\n */\r\nexport function bigInt2bytes(x: number[], littleEndian = true) {\r\n if(s6.length !== x.length) s6 = dup(x);\r\n else copy_(s6, x);\r\n\r\n const out: number[] = [];\r\n\r\n //console.log('bigInt2bytes');\r\n while(!isZero(s6)) {\r\n t = divInt_(s6, 256); //t=s6 % base; s6=floor(s6/base);\r\n out.push(t);\r\n //console.log('bigInt2bytes', t);\r\n }\r\n\r\n if(littleEndian) {\r\n out.reverse();\r\n }\r\n\r\n //console.log('bigInt2bytes', out);\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Compare two bigInts and return -1 if x is less, 0 if equals, 1 if greater\r\n * @param x bigInt\r\n * @param y bigInt\r\n */\r\nexport function cmp(x: number[], y: number[]) {\r\n return greater(x, y) ? 1 : (equals(x, y) ? 0 : -1);\r\n}\r\n\r\n/* Object.assign(self, {\r\n cmp,\r\n str2bigInt,\r\n int2bigInt,\r\n bigInt2str,\r\n one,\r\n divide_,\r\n divInt_,\r\n dup,\r\n negative\r\n}); */\r\n\r\n/**\r\n * Returns a duplicate of bigInt x\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @returns {number[]}\r\n */\r\nexport function dup(x: number[]): number[] {\r\n var i\r\n buff = Array(x.length)\r\n copy_(buff, x)\r\n return buff\r\n}\r\n\r\n/**\r\n * do x=y on bigInts x and y.\r\n *\r\n * x must be an array at least as big as y (not counting the leading zeros in y).\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {void}\r\n */\r\nexport function copy_(x: number[], y: number[]): void {\r\n var i\r\n var k = x.length < y.length ? x.length : y.length\r\n for (i = 0; i < k; i++) x[i] = y[i]\r\n for (i = k; i < x.length; i++) x[i] = 0\r\n}\r\n\r\n/**\r\n * do x=y on bigInt x and integer y.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {void}\r\n */\r\nexport function copyInt_(x: number[], n: number): void {\r\n var i, c\r\n var len = x.length //TODO .length in for loop have perfomance costs. Bench this\r\n for (c = n, i = 0; i < len; i++) {\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x+n where x is a bigInt and n is an integer.\r\n *\r\n * x must be large enough to hold the result.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {void}\r\n */\r\nexport function addInt_(x: number[], n: number): void {\r\n var i, k, c, b\r\n x[0] += n\r\n k = x.length\r\n c = 0\r\n for (i = 0; i < k; i++) {\r\n c += x[i]\r\n b = 0\r\n if (c < 0) {\r\n b = -(c >> bpe)\r\n c += b * radix\r\n }\r\n x[i] = c & mask\r\n c = (c >> bpe) - b\r\n if (!c) return //stop carrying as soon as the carry is zero\r\n }\r\n}\r\n\r\n/**\r\n * right shift bigInt x by n bits.\r\n *\r\n * 0 <= n < bpe.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n */\r\nexport function rightShift_(x: number[], n: number): void {\r\n var i\r\n var k = Math.floor(n / bpe)\r\n if (k) {\r\n for (\r\n i = 0;\r\n i < x.length - k;\r\n i++ //right shift x by k elements\r\n )\r\n x[i] = x[i + k]\r\n for (; i < x.length; i++) x[i] = 0\r\n //$off\r\n n %= bpe\r\n }\r\n for (i = 0; i < x.length - 1; i++) {\r\n x[i] = mask & ((x[i + 1] << (bpe - n)) | (x[i] >> n))\r\n }\r\n x[i] >>= n\r\n}\r\n\r\n/**\r\n * do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement\r\n *\r\n * @param {number[]} x\r\n * @returns {void}\r\n */\r\nexport function halve_(x: number[]): void {\r\n var i\r\n for (i = 0; i < x.length - 1; i++) {\r\n x[i] = mask & ((x[i + 1] << (bpe - 1)) | (x[i] >> 1))\r\n }\r\n x[i] = (x[i] >> 1) | (x[i] & (radix >> 1)) //most significant bit stays the same\r\n}\r\n\r\n/**\r\n * left shift bigInt x by n bits\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {void}\r\n */\r\nexport function leftShift_(x: number[], n: number): void {\r\n var i\r\n var k = Math.floor(n / bpe)\r\n if (k) {\r\n for (\r\n i = x.length;\r\n i >= k;\r\n i-- //left shift x by k elements\r\n )\r\n x[i] = x[i - k]\r\n for (; i >= 0; i--) x[i] = 0\r\n //$off\r\n n %= bpe\r\n }\r\n if (!n) return\r\n for (i = x.length - 1; i > 0; i--) {\r\n x[i] = mask & ((x[i] << n) | (x[i - 1] >> (bpe - n)))\r\n }\r\n x[i] = mask & (x[i] << n)\r\n}\r\n\r\n/**\r\n * do x=x*n where x is a bigInt and n is an integer.\r\n *\r\n * x must be large enough to hold the result.\r\n *\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {void}\r\n */\r\nexport function multInt_(x: number[], n: number): void {\r\n var i, k, c, b\r\n if (!n) return\r\n k = x.length\r\n c = 0\r\n for (i = 0; i < k; i++) {\r\n c += x[i] * n\r\n b = 0\r\n if (c < 0) {\r\n b = -(c >> bpe)\r\n c += b * radix\r\n }\r\n x[i] = c & mask\r\n c = (c >> bpe) - b\r\n }\r\n}\r\n\r\n/**\r\n * do x=floor(x/n) for bigInt x and integer n, and return the remainder\r\n *\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {number} remainder\r\n */\r\nexport function divInt_(x: number[], n: number): number {\r\n var i,\r\n r = 0,\r\n s\r\n for (i = x.length - 1; i >= 0; i--) {\r\n s = r * radix + x[i]\r\n x[i] = Math.floor(s / n)\r\n r = s % n\r\n }\r\n return r\r\n}\r\n\r\n/**\r\n * do the linear combination x=a*x+b*y for bigInts x and y, and integers a and b.\r\n *\r\n * x must be large enough to hold the answer.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} a\r\n * @param {number} b\r\n * @returns {void}\r\n */\r\nexport function linComb_(x: number[], y: number[], a: number, b: number): void {\r\n var i, c, k, kk\r\n k = x.length < y.length ? x.length : y.length\r\n kk = x.length\r\n for (c = 0, i = 0; i < k; i++) {\r\n c += a * x[i] + b * y[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; i < kk; i++) {\r\n c += a * x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do the linear combination x=a*x+b*(y<<(ys*bpe)) for bigInts x and y, and integers a, b and ys.\r\n *\r\n * x must be large enough to hold the answer.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} b\r\n * @param {number} ys\r\n * @returns {void}\r\n */\r\nexport function linCombShift_(\r\n x: number[],\r\n y: number[],\r\n b: number,\r\n ys: number,\r\n): void {\r\n var i, c, k, kk\r\n k = x.length < ys + y.length ? x.length : ys + y.length\r\n kk = x.length\r\n for (c = 0, i = ys; i < k; i++) {\r\n c += x[i] + b * y[i - ys]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < kk; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x+(y<<(ys*bpe)) for bigInts x and y, and integer ys.\r\n *\r\n * x must be large enough to hold the answer.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} ys\r\n * @return {void}\r\n */\r\nexport function addShift_(x: number[], y: number[], ys: number): void {\r\n var i, c, k, kk\r\n k = x.length < ys + y.length ? x.length : ys + y.length\r\n kk = x.length\r\n for (c = 0, i = ys; i < k; i++) {\r\n c += x[i] + y[i - ys]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < kk; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x-(y<<(ys*bpe)) for bigInts x and y, and integer ys\r\n *\r\n * x must be large enough to hold the answer\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} ys\r\n * @return {void}\r\n */\r\nexport function subShift_(x: number[], y: number[], ys: number): void {\r\n var i, c, k, kk\r\n k = x.length < ys + y.length ? x.length : ys + y.length\r\n kk = x.length\r\n for (c = 0, i = ys; i < k; i++) {\r\n c += x[i] - y[i - ys]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < kk; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x-y for bigInts x and y\r\n *\r\n * x must be large enough to hold the answer\r\n *\r\n * negative answers will be 2s complement\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @return {void}\r\n */\r\nexport function sub_(x: number[], y: number[]): void {\r\n var i, c, k, kk\r\n k = x.length < y.length ? x.length : y.length\r\n for (c = 0, i = 0; i < k; i++) {\r\n c += x[i] - y[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < x.length; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x+y for bigInts x and y\r\n *\r\n * x must be large enough to hold the answer\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @return {void}\r\n */\r\nexport function add_(x: number[], y: number[]): void {\r\n var i, c, k, kk\r\n k = x.length < y.length ? x.length : y.length\r\n for (c = 0, i = 0; i < k; i++) {\r\n c += x[i] + y[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < x.length; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x*y for bigInts x and y.\r\n *\r\n * This is faster when y<x.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @return {void}\r\n */\r\nexport function mult_(x: number[], y: number[]): void {\r\n var i\r\n if (ss.length != 2 * x.length) ss = new Array(2 * x.length)\r\n copyInt_(ss, 0)\r\n for (i = 0; i < y.length; i++) if (y[i]) linCombShift_(ss, x, y[i], i) //ss=1*ss+y[i]*(x<<(i*bpe))\r\n copy_(x, ss)\r\n}\r\n\r\n/**\r\n * do x=x mod n for bigInts x and n\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @return {void}\r\n */\r\nexport function mod_(x: number[], n: number[]): void {\r\n if (s4.length !== x.length) s4 = dup(x)\r\n else copy_(s4, x)\r\n if (s5.length !== x.length) s5 = dup(x)\r\n divide_(s4, n, s5, x) //x = remainder of s4 / n\r\n}\r\n\r\n/**\r\n * do x=x*y mod n for bigInts x,y,n.\r\n *\r\n * for greater speed, let y<x.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @return {void}\r\n */\r\nexport function multMod_(x: number[], y: number[], n: number[]): void {\r\n var i\r\n if (s0.length != 2 * x.length) s0 = new Array(2 * x.length)\r\n copyInt_(s0, 0)\r\n for (i = 0; i < y.length; i++) if (y[i]) linCombShift_(s0, x, y[i], i) //s0=1*s0+y[i]*(x<<(i*bpe))\r\n mod_(s0, n)\r\n copy_(x, s0)\r\n}\r\n\r\n/**\r\n * do x=x*x mod n for bigInts x,n.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @return {void}\r\n */\r\nexport function squareMod_(x: number[], n: number[]): void {\r\n var i, j, d, c, kx, kn, k\r\n for (kx = x.length; kx > 0 && !x[kx - 1]; kx--); //ignore leading zeros in x\r\n k = kx > n.length ? 2 * kx : 2 * n.length //k=# elements in the product, which is twice the elements in the larger of x and n\r\n if (s0.length != k) s0 = new Array(k)\r\n copyInt_(s0, 0)\r\n for (i = 0; i < kx; i++) {\r\n c = s0[2 * i] + x[i] * x[i]\r\n s0[2 * i] = c & mask\r\n c >>= bpe\r\n for (j = i + 1; j < kx; j++) {\r\n c = s0[i + j] + 2 * x[i] * x[j] + c\r\n s0[i + j] = c & mask\r\n c >>= bpe\r\n }\r\n s0[i + kx] = c\r\n }\r\n mod_(s0, n)\r\n copy_(x, s0)\r\n}\r\n\r\n/**\r\n * return x with exactly k leading zero elements\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} k\r\n * @returns {number[]}\r\n */\r\nexport function trim(x: number[], k: number): number[] {\r\n var i, y\r\n for (i = x.length; i > 0 && !x[i - 1]; i--);\r\n y = new Array(i + k)\r\n copy_(y, x)\r\n return y\r\n}\r\n\r\n/**\r\n * do `x=x**y mod n`, where x,y,n are bigInts and `**` is exponentiation. `0**0=1`.\r\n *\r\n * this is faster when n is odd.\r\n *\r\n * x usually needs to have as many elements as n.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @return {void}\r\n */\r\nexport function powMod_(x: number[], y: number[], n: number[]): void {\r\n var k1, k2, kn, np\r\n if (s7.length != n.length) s7 = dup(n)\r\n\r\n //for even modulus, use a simple square-and-multiply algorithm,\r\n //rather than using the more complex Montgomery algorithm.\r\n if ((n[0] & 1) == 0) {\r\n copy_(s7, x)\r\n copyInt_(x, 1)\r\n while (!equalsInt(y, 0)) {\r\n if (y[0] & 1) multMod_(x, s7, n)\r\n divInt_(y, 2)\r\n squareMod_(s7, n)\r\n }\r\n return\r\n }\r\n\r\n //calculate np from n for the Montgomery multiplications\r\n copyInt_(s7, 0)\r\n for (kn = n.length; kn > 0 && !n[kn - 1]; kn--);\r\n np = radix - inverseModInt(modInt(n, radix), radix)\r\n s7[kn] = 1\r\n multMod_(x, s7, n) // x = x * 2**(kn*bp) mod n\r\n\r\n if (s3.length != x.length) s3 = dup(x)\r\n else copy_(s3, x)\r\n //$off\r\n // @ts-ignore\r\n for (k1 = y.length - 1; (k1 > 0) & !y[k1]; k1--); //k1=first nonzero element of y\r\n if (y[k1] == 0) {\r\n //anything to the 0th power is 1\r\n copyInt_(x, 1)\r\n return\r\n }\r\n for (k2 = 1 << (bpe - 1); k2 && !(y[k1] & k2); k2 >>= 1); //k2=position of first 1 bit in y[k1]\r\n for (;;) {\r\n if (!(k2 >>= 1)) {\r\n //look at next bit of y\r\n k1--\r\n if (k1 < 0) {\r\n mont_(x, one, n, np)\r\n return\r\n }\r\n k2 = 1 << (bpe - 1)\r\n }\r\n mont_(x, x, n, np)\r\n\r\n if (k2 & y[k1])\r\n //if next bit is a 1\r\n mont_(x, s3, n, np)\r\n }\r\n}\r\n\r\n/**\r\n * do x=x*y*Ri mod n for bigInts x,y,n,\r\n * where Ri = 2**(-kn*bpe) mod n, and kn is the\r\n * number of elements in the n array, not\r\n * counting leading zeros.\r\n *\r\n * x array must have at least as many elemnts as the n array\r\n * It's OK if x and y are the same variable.\r\n *\r\n * must have:\r\n * * x,y < n\r\n * * n is odd\r\n * * np = -(n^(-1)) mod radix\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @param {number} np\r\n * @return {void}\r\n */\r\nexport function mont_(x: number[], y: number[], n: number[], np: number): void {\r\n var i, j, c, ui, t, ks\r\n var kn = n.length\r\n var ky = y.length\r\n\r\n if (sa.length != kn) sa = new Array(kn)\r\n\r\n copyInt_(sa, 0)\r\n\r\n for (; kn > 0 && n[kn - 1] == 0; kn--); //ignore leading zeros of n\r\n for (; ky > 0 && y[ky - 1] == 0; ky--); //ignore leading zeros of y\r\n ks = sa.length - 1 //sa will never have more than this many nonzero elements.\r\n\r\n //the following loop consumes 95% of the runtime for randTruePrime_() and powMod_() for large numbers\r\n for (i = 0; i < kn; i++) {\r\n t = sa[0] + x[i] * y[0]\r\n ui = ((t & mask) * np) & mask //the inner \"& mask\" was needed on Safari (but not MSIE) at one time\r\n c = (t + ui * n[0]) >> bpe\r\n t = x[i]\r\n\r\n //do sa=(sa+x[i]*y+ui*n)/b where b=2**bpe. Loop is unrolled 5-fold for speed\r\n j = 1\r\n for (; j < ky - 4; ) {\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n for (; j < ky; ) {\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n for (; j < kn - 4; ) {\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n for (; j < kn; ) {\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n for (; j < ks; ) {\r\n c += sa[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n sa[j - 1] = c & mask\r\n }\r\n\r\n if (!greater(n, sa)) sub_(sa, n)\r\n copy_(x, sa)\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { bufferConcats } from '../../helpers/bytes';\r\nimport { add_, bigInt2str, cmp, leftShift_, str2bigInt } from '../../vendor/leemon';\r\nimport { nextRandomInt } from '../../helpers/random';\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\nexport function isObject(object: any) {\r\n return typeof(object) === 'object' && object !== null;\r\n}\r\n\r\n/* export function bigint(num: number) {\r\n return new BigInteger(num.toString(16), 16);\r\n} */\r\n\r\n/* export function bigStringInt(strNum: string) {\r\n return new BigInteger(strNum, 10);\r\n} */\r\n\r\n/* export function base64ToBlob(base64str: string, mimeType: string) {\r\n var sliceSize = 1024;\r\n var byteCharacters = atob(base64str);\r\n var bytesLength = byteCharacters.length;\r\n var slicesCount = Math.ceil(bytesLength / sliceSize);\r\n var byteArrays = new Array(slicesCount);\r\n\r\n for(var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\r\n var begin = sliceIndex * sliceSize;\r\n var end = Math.min(begin + sliceSize, bytesLength);\r\n\r\n var bytes = new Array(end - begin);\r\n for(var offset = begin, i = 0; offset < end; ++i, ++offset) {\r\n bytes[i] = byteCharacters[offset].charCodeAt(0);\r\n }\r\n byteArrays[sliceIndex] = new Uint8Array(bytes);\r\n }\r\n\r\n return blobConstruct(byteArrays, mimeType);\r\n}\r\n\r\nexport function dataUrlToBlob(url: string) {\r\n // var name = 'b64blob ' + url.length\r\n // console.time(name)\r\n var urlParts = url.split(',');\r\n var base64str = urlParts[1];\r\n var mimeType = urlParts[0].split(':')[1].split(';')[0];\r\n var blob = base64ToBlob(base64str, mimeType);\r\n // console.timeEnd(name)\r\n return blob;\r\n} */\r\n\r\nexport function intToUint(val: number) {\r\n // return val < 0 ? val + 4294967296 : val; // 0 <= val <= Infinity\r\n return val >>> 0; // (4294967296 >>> 0) === 0; 0 <= val <= 4294967295\r\n}\r\n\r\n/* export function bytesFromBigInt(bigInt: BigInteger, len?: number) {\r\n var bytes = bigInt.toByteArray();\r\n\r\n if(len && bytes.length < len) {\r\n var padding = [];\r\n for(var i = 0, needPadding = len - bytes.length; i < needPadding; i++) {\r\n padding[i] = 0;\r\n }\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = bufferConcat(padding, bytes);\r\n } else {\r\n bytes = padding.concat(bytes);\r\n }\r\n } else {\r\n while (!bytes[0] && (!len || bytes.length > len)) {\r\n bytes = bytes.slice(1);\r\n }\r\n }\r\n\r\n return bytes;\r\n} */\r\n\r\nexport function longFromInts(high: number, low: number): string {\r\n //let perf = performance.now();\r\n //let str = bigint(high).shiftLeft(32).add(bigint(low)).toString(10);\r\n //console.log('longFromInts jsbn', performance.now() - perf);\r\n high = intToUint(high);\r\n low = intToUint(low);\r\n \r\n //perf = performance.now();\r\n const bigInt = str2bigInt(high.toString(16), 16, 32);//int2bigInt(high, 64, 64);\r\n //console.log('longFromInts construct high', bigint(high).toString(10), bigInt2str(bigInt, 10));\r\n leftShift_(bigInt, 32);\r\n //console.log('longFromInts shiftLeft', bigint(high).shiftLeft(32).toString(10), bigInt2str(bigInt, 10));\r\n add_(bigInt, str2bigInt(low.toString(16), 16, 32));\r\n const _str = bigInt2str(bigInt, 10);\r\n\r\n //console.log('longFromInts leemon', performance.now() - perf);\r\n\r\n //console.log('longFromInts', high, low, str, _str, str === _str);\r\n\r\n return _str;\r\n}\r\n\r\nexport function sortLongsArray(arr: string[]) {\r\n return arr.map(long => {\r\n return str2bigInt(long, 10);\r\n }).sort((a, b) => {\r\n return cmp(a, b);\r\n }).map(bigInt => {\r\n return bigInt2str(bigInt, 10);\r\n });\r\n}\r\n\r\nexport function addPadding<T extends number[] | ArrayBuffer | Uint8Array>(\r\n bytes: T, \r\n blockSize: number = 16, \r\n zeroes?: boolean, \r\n blockSizeAsTotalLength = false, \r\n prepend = false\r\n): T {\r\n const len = (bytes as ArrayBuffer).byteLength || (bytes as Uint8Array).length;\r\n const needPadding = blockSizeAsTotalLength ? blockSize - len : blockSize - (len % blockSize);\r\n if(needPadding > 0 && needPadding < blockSize) {\r\n ////console.log('addPadding()', len, blockSize, needPadding);\r\n const padding: number[] = new Array(needPadding);\r\n if(zeroes) {\r\n for(let i = 0; i < needPadding; ++i) {\r\n padding[i] = 0;\r\n }\r\n } else {\r\n for(let i = 0; i < needPadding; ++i) {\r\n padding[i] = nextRandomInt(255);\r\n }\r\n }\r\n\r\n if(bytes instanceof ArrayBuffer) {\r\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)).buffer as T;\r\n } else if(bytes instanceof Uint8Array) {\r\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)) as T;\r\n } else {\r\n // @ts-ignore\r\n return (prepend ? padding.concat(bytes) : bytes.concat(padding)) as T;\r\n }\r\n }\r\n\r\n return bytes;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport type MTProtoConstructor = {\r\n id: number,\r\n predicate: string,\r\n params: Array<{\r\n name: string,\r\n type: string\r\n }>,\r\n type: string\r\n};\r\n\r\nexport type MTProtoMethod = {\r\n id: number,\r\n method: string,\r\n params: Array<{\r\n name: string,\r\n type: string\r\n }>,\r\n type: string\r\n};\r\n\r\nexport default {\"MTProto\":{\"constructors\":[{\"id\":481674261,\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":85337187,\"predicate\":\"resPQ\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"server_public_key_fingerprints\",\"type\":\"Vector<long>\"}],\"type\":\"ResPQ\"},{\"id\":-1443537003,\"predicate\":\"p_q_inner_data_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":1459478408,\"predicate\":\"p_q_inner_data_temp_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"},{\"name\":\"expires_in\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":-790100132,\"predicate\":\"server_DH_params_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_answer\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":-1249309254,\"predicate\":\"server_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"dh_prime\",\"type\":\"bytes\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"server_time\",\"type\":\"int\"}],\"type\":\"Server_DH_inner_data\"},{\"id\":1715713620,\"predicate\":\"client_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"retry_id\",\"type\":\"long\"},{\"name\":\"g_b\",\"type\":\"bytes\"}],\"type\":\"Client_DH_Inner_Data\"},{\"id\":1003222836,\"predicate\":\"dh_gen_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash1\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1188831161,\"predicate\":\"dh_gen_retry\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash2\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":-1499615742,\"predicate\":\"dh_gen_fail\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash3\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1973679973,\"predicate\":\"bind_auth_key_inner\",\"params\":[{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"temp_auth_key_id\",\"type\":\"long\"},{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"temp_session_id\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"}],\"type\":\"BindAuthKeyInner\"},{\"id\":-212046591,\"predicate\":\"rpc_result\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"result\",\"type\":\"Object\"}],\"type\":\"RpcResult\"},{\"id\":558156313,\"predicate\":\"rpc_error\",\"params\":[{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"error_message\",\"type\":\"string\"}],\"type\":\"RpcError\"},{\"id\":1579864942,\"predicate\":\"rpc_answer_unknown\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":-847714938,\"predicate\":\"rpc_answer_dropped_running\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":-1539647305,\"predicate\":\"rpc_answer_dropped\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seq_no\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"}],\"type\":\"RpcDropAnswer\"},{\"id\":155834844,\"predicate\":\"future_salt\",\"params\":[{\"name\":\"valid_since\",\"type\":\"int\"},{\"name\":\"valid_until\",\"type\":\"int\"},{\"name\":\"salt\",\"type\":\"long\"}],\"type\":\"FutureSalt\"},{\"id\":-1370486635,\"predicate\":\"future_salts\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"now\",\"type\":\"int\"},{\"name\":\"salts\",\"type\":\"vector<future_salt>\"}],\"type\":\"FutureSalts\"},{\"id\":880243653,\"predicate\":\"pong\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":-501201412,\"predicate\":\"destroy_session_ok\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":1658015945,\"predicate\":\"destroy_session_none\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":-1631450872,\"predicate\":\"new_session_created\",\"params\":[{\"name\":\"first_msg_id\",\"type\":\"long\"},{\"name\":\"unique_id\",\"type\":\"long\"},{\"name\":\"server_salt\",\"type\":\"long\"}],\"type\":\"NewSession\"},{\"id\":1945237724,\"predicate\":\"msg_container\",\"params\":[{\"name\":\"messages\",\"type\":\"vector<%Message>\"}],\"type\":\"MessageContainer\"},{\"id\":1538843921,\"predicate\":\"message\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seqno\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"body\",\"type\":\"Object\"}],\"type\":\"Message\"},{\"id\":-530561358,\"predicate\":\"msg_copy\",\"params\":[{\"name\":\"orig_message\",\"type\":\"Message\"}],\"type\":\"MessageCopy\"},{\"id\":812830625,\"predicate\":\"gzip_packed\",\"params\":[{\"name\":\"packed_data\",\"type\":\"bytes\"}],\"type\":\"Object\"},{\"id\":1658238041,\"predicate\":\"msgs_ack\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"}],\"type\":\"MsgsAck\"},{\"id\":-1477445615,\"predicate\":\"bad_msg_notification\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"}],\"type\":\"BadMsgNotification\"},{\"id\":-307542917,\"predicate\":\"bad_server_salt\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"new_server_salt\",\"type\":\"long\"}],\"type\":\"BadMsgNotification\"},{\"id\":2105940488,\"predicate\":\"msg_resend_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"}],\"type\":\"MsgResendReq\"},{\"id\":-630588590,\"predicate\":\"msgs_state_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"}],\"type\":\"MsgsStateReq\"},{\"id\":81704317,\"predicate\":\"msgs_state_info\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsStateInfo\"},{\"id\":-1933520591,\"predicate\":\"msgs_all_info\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsAllInfo\"},{\"id\":661470918,\"predicate\":\"msg_detailed_info\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":-2137147681,\"predicate\":\"msg_new_detailed_info\",\"params\":[{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":-161422892,\"predicate\":\"destroy_auth_key_ok\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":178201177,\"predicate\":\"destroy_auth_key_none\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":-368010477,\"predicate\":\"destroy_auth_key_fail\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"}],\"methods\":[{\"id\":-1099002127,\"method\":\"req_pq_multi\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"}],\"type\":\"ResPQ\"},{\"id\":-686627650,\"method\":\"req_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"public_key_fingerprint\",\"type\":\"long\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":-184262881,\"method\":\"set_client_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1491380032,\"method\":\"rpc_drop_answer\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"}],\"type\":\"RpcDropAnswer\"},{\"id\":-1188971260,\"method\":\"get_future_salts\",\"params\":[{\"name\":\"num\",\"type\":\"int\"}],\"type\":\"FutureSalts\"},{\"id\":2059302892,\"method\":\"ping\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":-213746804,\"method\":\"ping_delay_disconnect\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"},{\"name\":\"disconnect_delay\",\"type\":\"int\"}],\"type\":\"Pong\"},{\"id\":-414113498,\"method\":\"destroy_session\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":-1835453025,\"method\":\"http_wait\",\"params\":[{\"name\":\"max_delay\",\"type\":\"int\"},{\"name\":\"wait_after\",\"type\":\"int\"},{\"name\":\"max_wait\",\"type\":\"int\"}],\"type\":\"HttpWait\"},{\"id\":-784117408,\"method\":\"destroy_auth_key\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"}]},\"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\":505969924,\"predicate\":\"inputMediaUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector<InputDocument>\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":-1279654347,\"predicate\":\"inputMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"InputPhoto\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":-104578748,\"predicate\":\"inputMediaGeoPoint\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"}],\"type\":\"InputMedia\"},{\"id\":-122978821,\"predicate\":\"inputMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":480546647,\"predicate\":\"inputChatPhotoEmpty\",\"params\":[],\"type\":\"InputChatPhoto\"},{\"id\":-968723890,\"predicate\":\"inputChatUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"}],\"type\":\"InputChatPhoto\"},{\"id\":-1991004873,\"predicate\":\"inputChatPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputChatPhoto\"},{\"id\":-457104426,\"predicate\":\"inputGeoPointEmpty\",\"params\":[],\"type\":\"InputGeoPoint\"},{\"id\":1210199983,\"predicate\":\"inputGeoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"InputGeoPoint\"},{\"id\":483901197,\"predicate\":\"inputPhotoEmpty\",\"params\":[],\"type\":\"InputPhoto\"},{\"id\":1001634122,\"predicate\":\"inputPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputPhoto\"},{\"id\":-539317279,\"predicate\":\"inputFileLocation\",\"params\":[{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputFileLocation\"},{\"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\":1086091090,\"predicate\":\"storage.filePartial\",\"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\":-1278304028,\"predicate\":\"storage.fileMp4\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":276907596,\"predicate\":\"storage.fileWebp\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":537022650,\"predicate\":\"userEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"User\"},{\"id\":1326562017,\"predicate\":\"userProfilePhotoEmpty\",\"params\":[],\"type\":\"UserProfilePhoto\"},{\"id\":-2100168954,\"predicate\":\"userProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"stripped_thumb\",\"type\":\"flags.1?bytes\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"UserProfilePhoto\"},{\"id\":164646985,\"predicate\":\"userStatusEmpty\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":-306628279,\"predicate\":\"userStatusOnline\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":9203775,\"predicate\":\"userStatusOffline\",\"params\":[{\"name\":\"was_online\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":-1683826688,\"predicate\":\"chatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"Chat\"},{\"id\":1004149726,\"predicate\":\"chat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"kicked\",\"type\":\"flags.1?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"deactivated\",\"type\":\"flags.5?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"migrated_to\",\"type\":\"flags.6?InputChannel\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"}],\"type\":\"Chat\"},{\"id\":120753115,\"predicate\":\"chatForbidden\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Chat\"},{\"id\":-1977734781,\"predicate\":\"chatFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_set_username\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants\",\"type\":\"ChatParticipants\"},{\"name\":\"chat_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.13?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"flags.3?Vector<BotInfo>\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"call\",\"type\":\"flags.12?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.15?Peer\"}],\"type\":\"ChatFull\"},{\"id\":-925415106,\"predicate\":\"chatParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-57668565,\"predicate\":\"chatParticipantsForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"self_participant\",\"type\":\"flags.0?ChatParticipant\"}],\"type\":\"ChatParticipants\"},{\"id\":1061556205,\"predicate\":\"chatParticipants\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector<ChatParticipant>\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"ChatParticipants\"},{\"id\":935395612,\"predicate\":\"chatPhotoEmpty\",\"params\":[],\"type\":\"ChatPhoto\"},{\"id\":476978193,\"predicate\":\"chatPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"stripped_thumb\",\"type\":\"flags.1?bytes\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"ChatPhoto\"},{\"id\":-1868117372,\"predicate\":\"messageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"peer_id\",\"type\":\"flags.0?Peer\"}],\"type\":\"Message\"},{\"id\":-1125940270,\"predicate\":\"message\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"from_scheduled\",\"type\":\"flags.18?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"edit_hide\",\"type\":\"flags.21?true\"},{\"name\":\"pinned\",\"type\":\"flags.24?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.6?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector<MessageEntity>\"},{\"name\":\"views\",\"type\":\"flags.10?int\"},{\"name\":\"forwards\",\"type\":\"flags.10?int\"},{\"name\":\"replies\",\"type\":\"flags.23?MessageReplies\"},{\"name\":\"edit_date\",\"type\":\"flags.15?int\"},{\"name\":\"post_author\",\"type\":\"flags.16?string\"},{\"name\":\"grouped_id\",\"type\":\"flags.17?long\"},{\"name\":\"restriction_reason\",\"type\":\"flags.22?Vector<RestrictionReason>\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":721967202,\"predicate\":\"messageService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"MessageAction\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":1038967584,\"predicate\":\"messageMediaEmpty\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":1766936791,\"predicate\":\"messageMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":1457575028,\"predicate\":\"messageMediaGeo\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"}],\"type\":\"MessageMedia\"},{\"id\":-873313984,\"predicate\":\"messageMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageMedia\"},{\"id\":-1618676578,\"predicate\":\"messageMediaUnsupported\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":-1230047312,\"predicate\":\"messageActionEmpty\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1503425638,\"predicate\":\"messageActionChatCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"MessageAction\"},{\"id\":-1247687078,\"predicate\":\"messageActionChatEditTitle\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":2144015272,\"predicate\":\"messageActionChatEditPhoto\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"}],\"type\":\"MessageAction\"},{\"id\":-1780220945,\"predicate\":\"messageActionChatDeletePhoto\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1217033015,\"predicate\":\"messageActionChatAddUser\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"MessageAction\"},{\"id\":-1297179892,\"predicate\":\"messageActionChatDeleteUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":739712882,\"predicate\":\"dialog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"unread_mark\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"unread_mentions_count\",\"type\":\"int\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"},{\"name\":\"draft\",\"type\":\"flags.1?DraftMessage\"},{\"name\":\"folder_id\",\"type\":\"flags.4?int\"}],\"type\":\"Dialog\"},{\"id\":590459437,\"predicate\":\"photoEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Photo\"},{\"id\":-82216347,\"predicate\":\"photo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_stickers\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector<PhotoSize>\"},{\"name\":\"video_sizes\",\"type\":\"flags.1?Vector<VideoSize>\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"Photo\"},{\"id\":236446268,\"predicate\":\"photoSizeEmpty\",\"params\":[{\"name\":\"type\",\"type\":\"string\"}],\"type\":\"PhotoSize\"},{\"id\":1976012384,\"predicate\":\"photoSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"}],\"type\":\"PhotoSize\"},{\"id\":35527382,\"predicate\":\"photoCachedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":286776671,\"predicate\":\"geoPointEmpty\",\"params\":[],\"type\":\"GeoPoint\"},{\"id\":-1297942941,\"predicate\":\"geoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"GeoPoint\"},{\"id\":1577067778,\"predicate\":\"auth.sentCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"auth.SentCodeType\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"next_type\",\"type\":\"flags.1?auth.CodeType\"},{\"name\":\"timeout\",\"type\":\"flags.2?int\"}],\"type\":\"auth.SentCode\"},{\"id\":-855308010,\"predicate\":\"auth.authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"auth.Authorization\"},{\"id\":-543777747,\"predicate\":\"auth.exportedAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":-1195615476,\"predicate\":\"inputNotifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputNotifyPeer\"},{\"id\":423314455,\"predicate\":\"inputNotifyUsers\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":1251338318,\"predicate\":\"inputNotifyChats\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":-1673717362,\"predicate\":\"inputPeerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"sound\",\"type\":\"flags.3?string\"}],\"type\":\"InputPeerNotifySettings\"},{\"id\":-1353671392,\"predicate\":\"peerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"sound\",\"type\":\"flags.3?string\"}],\"type\":\"PeerNotifySettings\"},{\"id\":1933519201,\"predicate\":\"peerSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"report_spam\",\"type\":\"flags.0?true\"},{\"name\":\"add_contact\",\"type\":\"flags.1?true\"},{\"name\":\"block_contact\",\"type\":\"flags.2?true\"},{\"name\":\"share_contact\",\"type\":\"flags.3?true\"},{\"name\":\"need_contacts_exception\",\"type\":\"flags.4?true\"},{\"name\":\"report_geo\",\"type\":\"flags.5?true\"},{\"name\":\"autoarchived\",\"type\":\"flags.7?true\"},{\"name\":\"invite_members\",\"type\":\"flags.8?true\"},{\"name\":\"geo_distance\",\"type\":\"flags.6?int\"}],\"type\":\"PeerSettings\"},{\"id\":-1539849235,\"predicate\":\"wallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"pattern\",\"type\":\"flags.3?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"Document\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":1490799288,\"predicate\":\"inputReportReasonSpam\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":505595789,\"predicate\":\"inputReportReasonViolence\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":777640226,\"predicate\":\"inputReportReasonPornography\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1376497949,\"predicate\":\"inputReportReasonChildAbuse\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1041980751,\"predicate\":\"inputReportReasonOther\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":328899191,\"predicate\":\"userFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blocked\",\"type\":\"flags.0?true\"},{\"name\":\"phone_calls_available\",\"type\":\"flags.4?true\"},{\"name\":\"phone_calls_private\",\"type\":\"flags.5?true\"},{\"name\":\"can_pin_message\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.12?true\"},{\"name\":\"video_calls_available\",\"type\":\"flags.13?true\"},{\"name\":\"user\",\"type\":\"User\"},{\"name\":\"about\",\"type\":\"flags.1?string\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"},{\"name\":\"profile_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"bot_info\",\"type\":\"flags.3?BotInfo\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"common_chats_count\",\"type\":\"int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"}],\"type\":\"UserFull\"},{\"id\":-116274796,\"predicate\":\"contact\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"mutual\",\"type\":\"Bool\"}],\"type\":\"Contact\"},{\"id\":-805141448,\"predicate\":\"importedContact\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"client_id\",\"type\":\"long\"}],\"type\":\"ImportedContact\"},{\"id\":-748155807,\"predicate\":\"contactStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"ContactStatus\"},{\"id\":-1219778094,\"predicate\":\"contacts.contactsNotModified\",\"params\":[],\"type\":\"contacts.Contacts\"},{\"id\":-353862078,\"predicate\":\"contacts.contacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector<Contact>\"},{\"name\":\"saved_count\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.Contacts\"},{\"id\":2010127419,\"predicate\":\"contacts.importedContacts\",\"params\":[{\"name\":\"imported\",\"type\":\"Vector<ImportedContact>\"},{\"name\":\"popular_invites\",\"type\":\"Vector<PopularContact>\"},{\"name\":\"retry_contacts\",\"type\":\"Vector<long>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":182326673,\"predicate\":\"contacts.blocked\",\"params\":[{\"name\":\"blocked\",\"type\":\"Vector<PeerBlocked>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.Blocked\"},{\"id\":-513392236,\"predicate\":\"contacts.blockedSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"blocked\",\"type\":\"Vector<PeerBlocked>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.Blocked\"},{\"id\":364538944,\"predicate\":\"messages.dialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector<Dialog>\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Dialogs\"},{\"id\":1910543603,\"predicate\":\"messages.dialogsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"dialogs\",\"type\":\"Vector<Dialog>\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Dialogs\"},{\"id\":-1938715001,\"predicate\":\"messages.messages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Messages\"},{\"id\":978610270,\"predicate\":\"messages.messagesSlice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"next_rate\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Messages\"},{\"id\":1694474197,\"predicate\":\"messages.chats\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<Chat>\"}],\"type\":\"messages.Chats\"},{\"id\":-438840932,\"predicate\":\"messages.chatFull\",\"params\":[{\"name\":\"full_chat\",\"type\":\"ChatFull\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ChatFull\"},{\"id\":-1269012015,\"predicate\":\"messages.affectedHistory\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1474492012,\"predicate\":\"inputMessagesFilterEmpty\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1777752804,\"predicate\":\"inputMessagesFilterPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1614803355,\"predicate\":\"inputMessagesFilterVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1458172132,\"predicate\":\"inputMessagesFilterPhotoVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1629621880,\"predicate\":\"inputMessagesFilterDocument\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2129714567,\"predicate\":\"inputMessagesFilterUrl\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-3644025,\"predicate\":\"inputMessagesFilterGif\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":522914557,\"predicate\":\"updateNewMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1318109142,\"predicate\":\"updateMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-1576161051,\"predicate\":\"updateDeleteMessages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1548249383,\"predicate\":\"updateUserTyping\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":-2033525908,\"predicate\":\"updateChatUserTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":125178264,\"predicate\":\"updateChatParticipants\",\"params\":[{\"name\":\"participants\",\"type\":\"ChatParticipants\"}],\"type\":\"Update\"},{\"id\":469489699,\"predicate\":\"updateUserStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"Update\"},{\"id\":-1489818765,\"predicate\":\"updateUserName\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":-1791935732,\"predicate\":\"updateUserPhoto\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"photo\",\"type\":\"UserProfilePhoto\"},{\"name\":\"previous\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"id\":-1519637954,\"predicate\":\"updates.state\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"}],\"type\":\"updates.State\"},{\"id\":1567990072,\"predicate\":\"updates.differenceEmpty\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":16030880,\"predicate\":\"updates.difference\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector<Message>\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector<EncryptedMessage>\"},{\"name\":\"other_updates\",\"type\":\"Vector<Update>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":-1459938943,\"predicate\":\"updates.differenceSlice\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector<Message>\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector<EncryptedMessage>\"},{\"name\":\"other_updates\",\"type\":\"Vector<Update>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"intermediate_state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":-484987010,\"predicate\":\"updatesTooLong\",\"params\":[],\"type\":\"Updates\"},{\"id\":-84936653,\"predicate\":\"updateShortMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector<MessageEntity>\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":290961496,\"predicate\":\"updateShortChatMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"int\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector<MessageEntity>\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":2027216577,\"predicate\":\"updateShort\",\"params\":[{\"name\":\"update\",\"type\":\"Update\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1918567619,\"predicate\":\"updatesCombined\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector<Update>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq_start\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1957577280,\"predicate\":\"updates\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector<Update>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1916114267,\"predicate\":\"photos.photos\",\"params\":[{\"name\":\"photos\",\"type\":\"Vector<Photo>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"photos.Photos\"},{\"id\":352657236,\"predicate\":\"photos.photosSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"photos\",\"type\":\"Vector<Photo>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"photos.Photos\"},{\"id\":539045032,\"predicate\":\"photos.photo\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"photos.Photo\"},{\"id\":157948117,\"predicate\":\"upload.file\",\"params\":[{\"name\":\"type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.File\"},{\"id\":414687501,\"predicate\":\"dcOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"ipv6\",\"type\":\"flags.0?true\"},{\"name\":\"media_only\",\"type\":\"flags.1?true\"},{\"name\":\"tcpo_only\",\"type\":\"flags.2?true\"},{\"name\":\"cdn\",\"type\":\"flags.3?true\"},{\"name\":\"static\",\"type\":\"flags.4?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"ip_address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"flags.10?bytes\"}],\"type\":\"DcOption\"},{\"id\":856375399,\"predicate\":\"config\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phonecalls_enabled\",\"type\":\"flags.1?true\"},{\"name\":\"default_p2p_contacts\",\"type\":\"flags.3?true\"},{\"name\":\"preload_featured_stickers\",\"type\":\"flags.4?true\"},{\"name\":\"ignore_phone_entities\",\"type\":\"flags.5?true\"},{\"name\":\"revoke_pm_inbox\",\"type\":\"flags.6?true\"},{\"name\":\"blocked_mode\",\"type\":\"flags.8?true\"},{\"name\":\"pfs_enabled\",\"type\":\"flags.13?true\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"test_mode\",\"type\":\"Bool\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"dc_options\",\"type\":\"Vector<DcOption>\"},{\"name\":\"dc_txt_domain_name\",\"type\":\"string\"},{\"name\":\"chat_size_max\",\"type\":\"int\"},{\"name\":\"megagroup_size_max\",\"type\":\"int\"},{\"name\":\"forwarded_count_max\",\"type\":\"int\"},{\"name\":\"online_update_period_ms\",\"type\":\"int\"},{\"name\":\"offline_blur_timeout_ms\",\"type\":\"int\"},{\"name\":\"offline_idle_timeout_ms\",\"type\":\"int\"},{\"name\":\"online_cloud_timeout_ms\",\"type\":\"int\"},{\"name\":\"notify_cloud_delay_ms\",\"type\":\"int\"},{\"name\":\"notify_default_delay_ms\",\"type\":\"int\"},{\"name\":\"push_chat_period_ms\",\"type\":\"int\"},{\"name\":\"push_chat_limit\",\"type\":\"int\"},{\"name\":\"saved_gifs_limit\",\"type\":\"int\"},{\"name\":\"edit_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_pm_time_limit\",\"type\":\"int\"},{\"name\":\"rating_e_decay\",\"type\":\"int\"},{\"name\":\"stickers_recent_limit\",\"type\":\"int\"},{\"name\":\"stickers_faved_limit\",\"type\":\"int\"},{\"name\":\"channels_read_media_period\",\"type\":\"int\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"pinned_dialogs_count_max\",\"type\":\"int\"},{\"name\":\"pinned_infolder_count_max\",\"type\":\"int\"},{\"name\":\"call_receive_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_ring_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_connect_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_packet_timeout_ms\",\"type\":\"int\"},{\"name\":\"me_url_prefix\",\"type\":\"string\"},{\"name\":\"autoupdate_url_prefix\",\"type\":\"flags.7?string\"},{\"name\":\"gif_search_username\",\"type\":\"flags.9?string\"},{\"name\":\"venue_search_username\",\"type\":\"flags.10?string\"},{\"name\":\"img_search_username\",\"type\":\"flags.11?string\"},{\"name\":\"static_maps_provider\",\"type\":\"flags.12?string\"},{\"name\":\"caption_length_max\",\"type\":\"int\"},{\"name\":\"message_length_max\",\"type\":\"int\"},{\"name\":\"webfile_dc_id\",\"type\":\"int\"},{\"name\":\"suggested_lang_code\",\"type\":\"flags.2?string\"},{\"name\":\"lang_pack_version\",\"type\":\"flags.2?int\"},{\"name\":\"base_lang_pack_version\",\"type\":\"flags.2?int\"}],\"type\":\"Config\"},{\"id\":-1910892683,\"predicate\":\"nearestDc\",\"params\":[{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"nearest_dc\",\"type\":\"int\"}],\"type\":\"NearestDc\"},{\"id\":-860107216,\"predicate\":\"help.appUpdate\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_not_skip\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector<MessageEntity>\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"sticker\",\"type\":\"flags.3?Document\"}],\"type\":\"help.AppUpdate\"},{\"id\":-1000708810,\"predicate\":\"help.noAppUpdate\",\"params\":[],\"type\":\"help.AppUpdate\"},{\"id\":415997816,\"predicate\":\"help.inviteText\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"help.InviteText\"},{\"id\":314359194,\"predicate\":\"updateNewEncryptedMessage\",\"params\":[{\"name\":\"message\",\"type\":\"EncryptedMessage\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":386986326,\"predicate\":\"updateEncryptedChatTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1264392051,\"predicate\":\"updateEncryption\",\"params\":[{\"name\":\"chat\",\"type\":\"EncryptedChat\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":956179895,\"predicate\":\"updateEncryptedMessagesRead\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1417756512,\"predicate\":\"encryptedChatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":1006044124,\"predicate\":\"encryptedChatWaiting\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":1651608194,\"predicate\":\"encryptedChatRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":-94974410,\"predicate\":\"encryptedChat\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":505183301,\"predicate\":\"encryptedChatDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"history_deleted\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":-247351839,\"predicate\":\"inputEncryptedChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedChat\"},{\"id\":-1038136962,\"predicate\":\"encryptedFileEmpty\",\"params\":[],\"type\":\"EncryptedFile\"},{\"id\":1248893260,\"predicate\":\"encryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"EncryptedFile\"},{\"id\":406307684,\"predicate\":\"inputEncryptedFileEmpty\",\"params\":[],\"type\":\"InputEncryptedFile\"},{\"id\":1690108678,\"predicate\":\"inputEncryptedFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":1511503333,\"predicate\":\"inputEncryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedFile\"},{\"id\":-182231723,\"predicate\":\"inputEncryptedFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":-317144808,\"predicate\":\"encryptedMessage\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"EncryptedMessage\"},{\"id\":594758406,\"predicate\":\"encryptedMessageService\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"EncryptedMessage\"},{\"id\":-1058912715,\"predicate\":\"messages.dhConfigNotModified\",\"params\":[{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":740433629,\"predicate\":\"messages.dhConfig\",\"params\":[{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":1443858741,\"predicate\":\"messages.sentEncryptedMessage\",\"params\":[{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":-1802240206,\"predicate\":\"messages.sentEncryptedFile\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":-95482955,\"predicate\":\"inputFileBig\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":767652808,\"predicate\":\"inputEncryptedFileBigUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":-364179876,\"predicate\":\"updateChatParticipantAdd\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1851755554,\"predicate\":\"updateChatParticipantDelete\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1906403213,\"predicate\":\"updateDcOptions\",\"params\":[{\"name\":\"dc_options\",\"type\":\"Vector<DcOption>\"}],\"type\":\"Update\"},{\"id\":1530447553,\"predicate\":\"inputMediaUploadedDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nosound_video\",\"type\":\"flags.3?true\"},{\"name\":\"force_file\",\"type\":\"flags.4?true\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector<InputDocument>\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":860303448,\"predicate\":\"inputMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"},{\"name\":\"query\",\"type\":\"flags.1?string\"}],\"type\":\"InputMedia\"},{\"id\":-1666158377,\"predicate\":\"messageMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":1928391342,\"predicate\":\"inputDocumentEmpty\",\"params\":[],\"type\":\"InputDocument\"},{\"id\":448771445,\"predicate\":\"inputDocument\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputDocument\"},{\"id\":-1160743548,\"predicate\":\"inputDocumentFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":922273905,\"predicate\":\"documentEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Document\"},{\"id\":512177195,\"predicate\":\"document\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"thumbs\",\"type\":\"flags.0?Vector<PhotoSize>\"},{\"name\":\"video_thumbs\",\"type\":\"flags.1?Vector<VideoSize>\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"}],\"type\":\"Document\"},{\"id\":398898678,\"predicate\":\"help.support\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"help.Support\"},{\"id\":-1613493288,\"predicate\":\"notifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"NotifyPeer\"},{\"id\":-1261946036,\"predicate\":\"notifyUsers\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-1073230141,\"predicate\":\"notifyChats\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-1094555409,\"predicate\":\"updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"NotifyPeer\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"}],\"type\":\"Update\"},{\"id\":381645902,\"predicate\":\"sendMessageTypingAction\",\"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\":-1290580579,\"predicate\":\"contacts.found\",\"params\":[{\"name\":\"my_results\",\"type\":\"Vector<Peer>\"},{\"name\":\"results\",\"type\":\"Vector<Peer>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.Found\"},{\"id\":-337352679,\"predicate\":\"updateServiceNotification\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"inbox_date\",\"type\":\"flags.1?int\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"MessageMedia\"},{\"name\":\"entities\",\"type\":\"Vector<MessageEntity>\"}],\"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\":1352683077,\"predicate\":\"account.privacyRules\",\"params\":[{\"name\":\"rules\",\"type\":\"Vector<PrivacyRule>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"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\":250621158,\"predicate\":\"documentAttributeVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"round_message\",\"type\":\"flags.0?true\"},{\"name\":\"supports_streaming\",\"type\":\"flags.1?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"DocumentAttribute\"},{\"id\":-1739392570,\"predicate\":\"documentAttributeAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"voice\",\"type\":\"flags.10?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"performer\",\"type\":\"flags.1?string\"},{\"name\":\"waveform\",\"type\":\"flags.2?bytes\"}],\"type\":\"DocumentAttribute\"},{\"id\":358154344,\"predicate\":\"documentAttributeFilename\",\"params\":[{\"name\":\"file_name\",\"type\":\"string\"}],\"type\":\"DocumentAttribute\"},{\"id\":-244016606,\"predicate\":\"messages.stickersNotModified\",\"params\":[],\"type\":\"messages.Stickers\"},{\"id\":-463889475,\"predicate\":\"messages.stickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"stickers\",\"type\":\"Vector<Document>\"}],\"type\":\"messages.Stickers\"},{\"id\":313694676,\"predicate\":\"stickerPack\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"documents\",\"type\":\"Vector<long>\"}],\"type\":\"StickerPack\"},{\"id\":-395967805,\"predicate\":\"messages.allStickersNotModified\",\"params\":[],\"type\":\"messages.AllStickers\"},{\"id\":-302170017,\"predicate\":\"messages.allStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector<StickerSet>\"}],\"type\":\"messages.AllStickers\"},{\"id\":-1667805217,\"predicate\":\"updateReadHistoryInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":791617983,\"predicate\":\"updateReadHistoryOutbox\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-2066640507,\"predicate\":\"messages.affectedMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":2139689491,\"predicate\":\"updateWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-350980120,\"predicate\":\"webPageEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"WebPage\"},{\"id\":-981018084,\"predicate\":\"webPagePending\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":-392411726,\"predicate\":\"webPage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"display_url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"type\",\"type\":\"flags.0?string\"},{\"name\":\"site_name\",\"type\":\"flags.1?string\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"photo\",\"type\":\"flags.4?Photo\"},{\"name\":\"embed_url\",\"type\":\"flags.5?string\"},{\"name\":\"embed_type\",\"type\":\"flags.5?string\"},{\"name\":\"embed_width\",\"type\":\"flags.6?int\"},{\"name\":\"embed_height\",\"type\":\"flags.6?int\"},{\"name\":\"duration\",\"type\":\"flags.7?int\"},{\"name\":\"author\",\"type\":\"flags.8?string\"},{\"name\":\"document\",\"type\":\"flags.9?Document\"},{\"name\":\"cached_page\",\"type\":\"flags.10?Page\"},{\"name\":\"attributes\",\"type\":\"flags.12?Vector<WebPageAttribute>\"}],\"type\":\"WebPage\"},{\"id\":-1557277184,\"predicate\":\"messageMediaWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"}],\"type\":\"MessageMedia\"},{\"id\":-1392388579,\"predicate\":\"authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"current\",\"type\":\"flags.0?true\"},{\"name\":\"official_app\",\"type\":\"flags.1?true\"},{\"name\":\"password_pending\",\"type\":\"flags.2?true\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"app_name\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"Authorization\"},{\"id\":307276766,\"predicate\":\"account.authorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector<Authorization>\"}],\"type\":\"account.Authorizations\"},{\"id\":408623183,\"predicate\":\"account.password\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_recovery\",\"type\":\"flags.0?true\"},{\"name\":\"has_secure_values\",\"type\":\"flags.1?true\"},{\"name\":\"has_password\",\"type\":\"flags.2?true\"},{\"name\":\"current_algo\",\"type\":\"flags.2?PasswordKdfAlgo\"},{\"name\":\"srp_B\",\"type\":\"flags.2?bytes\"},{\"name\":\"srp_id\",\"type\":\"flags.2?long\"},{\"name\":\"hint\",\"type\":\"flags.3?string\"},{\"name\":\"email_unconfirmed_pattern\",\"type\":\"flags.4?string\"},{\"name\":\"new_algo\",\"type\":\"PasswordKdfAlgo\"},{\"name\":\"new_secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_random\",\"type\":\"bytes\"},{\"name\":\"pending_reset_date\",\"type\":\"flags.5?int\"}],\"type\":\"account.Password\"},{\"id\":-1705233435,\"predicate\":\"account.passwordSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"email\",\"type\":\"flags.0?string\"},{\"name\":\"secure_settings\",\"type\":\"flags.1?SecureSecretSettings\"}],\"type\":\"account.PasswordSettings\"},{\"id\":-1036572727,\"predicate\":\"account.passwordInputSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"new_algo\",\"type\":\"flags.0?PasswordKdfAlgo\"},{\"name\":\"new_password_hash\",\"type\":\"flags.0?bytes\"},{\"name\":\"hint\",\"type\":\"flags.0?string\"},{\"name\":\"email\",\"type\":\"flags.1?string\"},{\"name\":\"new_secure_settings\",\"type\":\"flags.2?SecureSecretSettings\"}],\"type\":\"account.PasswordInputSettings\"},{\"id\":326715557,\"predicate\":\"auth.passwordRecovery\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"}],\"type\":\"auth.PasswordRecovery\"},{\"id\":-1052959727,\"predicate\":\"inputMediaVenue\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":784356159,\"predicate\":\"messageMediaVenue\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":-1551583367,\"predicate\":\"receivedNotifyMessage\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"flags\",\"type\":\"int\"}],\"type\":\"ReceivedNotifyMessage\"},{\"id\":1847917725,\"predicate\":\"chatInviteExported\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.0?true\"},{\"name\":\"permanent\",\"type\":\"flags.5?true\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"start_date\",\"type\":\"flags.4?int\"},{\"name\":\"expire_date\",\"type\":\"flags.1?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.2?int\"},{\"name\":\"usage\",\"type\":\"flags.3?int\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1516793212,\"predicate\":\"chatInviteAlready\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"}],\"type\":\"ChatInvite\"},{\"id\":-540871282,\"predicate\":\"chatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"flags.0?true\"},{\"name\":\"broadcast\",\"type\":\"flags.1?true\"},{\"name\":\"public\",\"type\":\"flags.2?true\"},{\"name\":\"megagroup\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"flags.4?Vector<User>\"}],\"type\":\"ChatInvite\"},{\"id\":-123931160,\"predicate\":\"messageActionChatJoinedByLink\",\"params\":[{\"name\":\"inviter_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":1757493555,\"predicate\":\"updateReadMessagesContents\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-4838507,\"predicate\":\"inputStickerSetEmpty\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":-1645763991,\"predicate\":\"inputStickerSetID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputStickerSet\"},{\"id\":-2044933984,\"predicate\":\"inputStickerSetShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":-673242758,\"predicate\":\"stickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archived\",\"type\":\"flags.1?true\"},{\"name\":\"official\",\"type\":\"flags.2?true\"},{\"name\":\"masks\",\"type\":\"flags.3?true\"},{\"name\":\"animated\",\"type\":\"flags.5?true\"},{\"name\":\"installed_date\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumbs\",\"type\":\"flags.4?Vector<PhotoSize>\"},{\"name\":\"thumb_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"thumb_version\",\"type\":\"flags.4?int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"StickerSet\"},{\"id\":-1240849242,\"predicate\":\"messages.stickerSet\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"packs\",\"type\":\"Vector<StickerPack>\"},{\"name\":\"documents\",\"type\":\"Vector<Document>\"}],\"type\":\"messages.StickerSet\"},{\"id\":-1820043071,\"predicate\":\"user\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"self\",\"type\":\"flags.10?true\"},{\"name\":\"contact\",\"type\":\"flags.11?true\"},{\"name\":\"mutual_contact\",\"type\":\"flags.12?true\"},{\"name\":\"deleted\",\"type\":\"flags.13?true\"},{\"name\":\"bot\",\"type\":\"flags.14?true\"},{\"name\":\"bot_chat_history\",\"type\":\"flags.15?true\"},{\"name\":\"bot_nochats\",\"type\":\"flags.16?true\"},{\"name\":\"verified\",\"type\":\"flags.17?true\"},{\"name\":\"restricted\",\"type\":\"flags.18?true\"},{\"name\":\"min\",\"type\":\"flags.20?true\"},{\"name\":\"bot_inline_geo\",\"type\":\"flags.21?true\"},{\"name\":\"support\",\"type\":\"flags.23?true\"},{\"name\":\"scam\",\"type\":\"flags.24?true\"},{\"name\":\"apply_min_photo\",\"type\":\"flags.25?true\"},{\"name\":\"fake\",\"type\":\"flags.26?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"flags.0?long\"},{\"name\":\"first_name\",\"type\":\"flags.1?string\"},{\"name\":\"last_name\",\"type\":\"flags.2?string\"},{\"name\":\"username\",\"type\":\"flags.3?string\"},{\"name\":\"phone\",\"type\":\"flags.4?string\"},{\"name\":\"photo\",\"type\":\"flags.5?UserProfilePhoto\"},{\"name\":\"status\",\"type\":\"flags.6?UserStatus\"},{\"name\":\"bot_info_version\",\"type\":\"flags.14?int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.18?Vector<RestrictionReason>\"},{\"name\":\"bot_inline_placeholder\",\"type\":\"flags.19?string\"},{\"name\":\"lang_code\",\"type\":\"flags.22?string\"}],\"type\":\"User\"},{\"id\":-1032140601,\"predicate\":\"botCommand\",\"params\":[{\"name\":\"command\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"BotCommand\"},{\"id\":-1729618630,\"predicate\":\"botInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"commands\",\"type\":\"Vector<BotCommand>\"}],\"type\":\"BotInfo\"},{\"id\":-1560655744,\"predicate\":\"keyboardButton\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":2002815875,\"predicate\":\"keyboardButtonRow\",\"params\":[{\"name\":\"buttons\",\"type\":\"Vector<KeyboardButton>\"}],\"type\":\"KeyboardButtonRow\"},{\"id\":-1606526075,\"predicate\":\"replyKeyboardHide\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"}],\"type\":\"ReplyMarkup\"},{\"id\":-2035021048,\"predicate\":\"replyKeyboardForceReply\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"placeholder\",\"type\":\"flags.3?string\"}],\"type\":\"ReplyMarkup\"},{\"id\":-2049074735,\"predicate\":\"replyKeyboardMarkup\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"resize\",\"type\":\"flags.0?true\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"rows\",\"type\":\"Vector<KeyboardButtonRow>\"},{\"name\":\"placeholder\",\"type\":\"flags.3?string\"}],\"type\":\"ReplyMarkup\"},{\"id\":2072935910,\"predicate\":\"inputPeerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-668391402,\"predicate\":\"inputUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputUser\"},{\"id\":-1148011883,\"predicate\":\"messageEntityUnknown\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-100378723,\"predicate\":\"messageEntityMention\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1868782349,\"predicate\":\"messageEntityHashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1827637959,\"predicate\":\"messageEntityBotCommand\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1859134776,\"predicate\":\"messageEntityUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1692693954,\"predicate\":\"messageEntityEmail\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1117713463,\"predicate\":\"messageEntityBold\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-2106619040,\"predicate\":\"messageEntityItalic\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":681706865,\"predicate\":\"messageEntityCode\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1938967520,\"predicate\":\"messageEntityPre\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":1990644519,\"predicate\":\"messageEntityTextUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":-1877614335,\"predicate\":\"updateShortSentMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector<MessageEntity>\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":-292807034,\"predicate\":\"inputChannelEmpty\",\"params\":[],\"type\":\"InputChannel\"},{\"id\":-1343524562,\"predicate\":\"inputChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputChannel\"},{\"id\":-1109531342,\"predicate\":\"peerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":548253432,\"predicate\":\"inputPeerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-753232354,\"predicate\":\"channel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"verified\",\"type\":\"flags.7?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"restricted\",\"type\":\"flags.9?true\"},{\"name\":\"signatures\",\"type\":\"flags.11?true\"},{\"name\":\"min\",\"type\":\"flags.12?true\"},{\"name\":\"scam\",\"type\":\"flags.19?true\"},{\"name\":\"has_link\",\"type\":\"flags.20?true\"},{\"name\":\"has_geo\",\"type\":\"flags.21?true\"},{\"name\":\"slowmode_enabled\",\"type\":\"flags.22?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"fake\",\"type\":\"flags.25?true\"},{\"name\":\"gigagroup\",\"type\":\"flags.26?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"flags.13?long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"username\",\"type\":\"flags.6?string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.9?Vector<RestrictionReason>\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"banned_rights\",\"type\":\"flags.15?ChatBannedRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"},{\"name\":\"participants_count\",\"type\":\"flags.17?int\"}],\"type\":\"Chat\"},{\"id\":681420594,\"predicate\":\"channelForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"until_date\",\"type\":\"flags.16?int\"}],\"type\":\"Chat\"},{\"id\":2131196633,\"predicate\":\"contacts.resolvedPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":1418477459,\"predicate\":\"channelFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_view_participants\",\"type\":\"flags.3?true\"},{\"name\":\"can_set_username\",\"type\":\"flags.6?true\"},{\"name\":\"can_set_stickers\",\"type\":\"flags.7?true\"},{\"name\":\"hidden_prehistory\",\"type\":\"flags.10?true\"},{\"name\":\"can_set_location\",\"type\":\"flags.16?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.19?true\"},{\"name\":\"can_view_stats\",\"type\":\"flags.20?true\"},{\"name\":\"blocked\",\"type\":\"flags.22?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants_count\",\"type\":\"flags.0?int\"},{\"name\":\"admins_count\",\"type\":\"flags.1?int\"},{\"name\":\"kicked_count\",\"type\":\"flags.2?int\"},{\"name\":\"banned_count\",\"type\":\"flags.2?int\"},{\"name\":\"online_count\",\"type\":\"flags.13?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"chat_photo\",\"type\":\"Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.23?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"Vector<BotInfo>\"},{\"name\":\"migrated_from_chat_id\",\"type\":\"flags.4?int\"},{\"name\":\"migrated_from_max_id\",\"type\":\"flags.4?int\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.5?int\"},{\"name\":\"stickerset\",\"type\":\"flags.8?StickerSet\"},{\"name\":\"available_min_id\",\"type\":\"flags.9?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"linked_chat_id\",\"type\":\"flags.14?int\"},{\"name\":\"location\",\"type\":\"flags.15?ChannelLocation\"},{\"name\":\"slowmode_seconds\",\"type\":\"flags.17?int\"},{\"name\":\"slowmode_next_send_date\",\"type\":\"flags.18?int\"},{\"name\":\"stats_dc\",\"type\":\"flags.12?int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"call\",\"type\":\"flags.21?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.24?int\"},{\"name\":\"pending_suggestions\",\"type\":\"flags.25?Vector<string>\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.26?Peer\"}],\"type\":\"ChatFull\"},{\"id\":182649427,\"predicate\":\"messageRange\",\"params\":[{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"MessageRange\"},{\"id\":1682413576,\"predicate\":\"messages.channelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Messages\"},{\"id\":-1781355374,\"predicate\":\"messageActionChannelCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-352032773,\"predicate\":\"updateChannelTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":-1227598250,\"predicate\":\"updateChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1656358105,\"predicate\":\"updateNewChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":856380452,\"predicate\":\"updateReadChannelInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1015733815,\"predicate\":\"updateDeleteChannelMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1734268085,\"predicate\":\"updateChannelMessageViews\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1041346555,\"predicate\":\"updates.channelDifferenceEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1531132162,\"predicate\":\"updates.channelDifferenceTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"dialog\",\"type\":\"Dialog\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":543450958,\"predicate\":\"updates.channelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"new_messages\",\"type\":\"Vector<Message>\"},{\"name\":\"other_updates\",\"type\":\"Vector<Update>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1798033689,\"predicate\":\"channelMessagesFilterEmpty\",\"params\":[],\"type\":\"ChannelMessagesFilter\"},{\"id\":-847783593,\"predicate\":\"channelMessagesFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_new_messages\",\"type\":\"flags.1?true\"},{\"name\":\"ranges\",\"type\":\"Vector<MessageRange>\"}],\"type\":\"ChannelMessagesFilter\"},{\"id\":367766557,\"predicate\":\"channelParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":-1557620115,\"predicate\":\"channelParticipantSelf\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":1149094475,\"predicate\":\"channelParticipantCreator\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.0?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":-566281095,\"predicate\":\"channelParticipantsRecent\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1268741783,\"predicate\":\"channelParticipantsAdmins\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1548400251,\"predicate\":\"channelParticipantsKicked\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1699676497,\"predicate\":\"channels.channelParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector<ChannelParticipant>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":-541588713,\"predicate\":\"channels.channelParticipant\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":-636267638,\"predicate\":\"chatParticipantCreator\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-489233354,\"predicate\":\"chatParticipantAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-1232070311,\"predicate\":\"updateChatParticipantAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"is_admin\",\"type\":\"Bool\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1371385889,\"predicate\":\"messageActionChatMigrateTo\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-1336546578,\"predicate\":\"messageActionChannelMigrateFrom\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-1328445861,\"predicate\":\"channelParticipantsBots\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":2013922064,\"predicate\":\"help.termsOfService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"DataJSON\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector<MessageEntity>\"},{\"name\":\"min_age_confirm\",\"type\":\"flags.1?int\"}],\"type\":\"help.TermsOfService\"},{\"id\":1753886890,\"predicate\":\"updateNewStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"messages.StickerSet\"}],\"type\":\"Update\"},{\"id\":196268545,\"predicate\":\"updateStickerSetsOrder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"order\",\"type\":\"Vector<long>\"}],\"type\":\"Update\"},{\"id\":1135492588,\"predicate\":\"updateStickerSets\",\"params\":[],\"type\":\"Update\"},{\"id\":-402498398,\"predicate\":\"messages.savedGifsNotModified\",\"params\":[],\"type\":\"messages.SavedGifs\"},{\"id\":772213157,\"predicate\":\"messages.savedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"gifs\",\"type\":\"Vector<Document>\"}],\"type\":\"messages.SavedGifs\"},{\"id\":-1821035490,\"predicate\":\"updateSavedGifs\",\"params\":[],\"type\":\"Update\"},{\"id\":864077702,\"predicate\":\"inputBotInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector<MessageEntity>\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":1036876423,\"predicate\":\"inputBotInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector<MessageEntity>\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-2000710887,\"predicate\":\"inputBotInlineResult\",\"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\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?InputWebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?InputWebDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":1984755728,\"predicate\":\"botInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector<MessageEntity>\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1937807902,\"predicate\":\"botInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector<MessageEntity>\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":295067450,\"predicate\":\"botInlineResult\",\"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\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?WebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?WebDocument\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":-1803769784,\"predicate\":\"messages.botResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"next_offset\",\"type\":\"flags.1?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.2?InlineBotSwitchPM\"},{\"name\":\"results\",\"type\":\"Vector<BotInlineResult>\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.BotResults\"},{\"id\":1059076315,\"predicate\":\"updateBotInlineQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"peer_type\",\"type\":\"flags.1?InlineQueryPeerType\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":239663460,\"predicate\":\"updateBotInlineSend\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"msg_id\",\"type\":\"flags.1?InputBotInlineMessageID\"}],\"type\":\"Update\"},{\"id\":1358283666,\"predicate\":\"inputMessagesFilterVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":928101534,\"predicate\":\"inputMessagesFilterMusic\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1107622874,\"predicate\":\"inputPrivacyKeyChatInvite\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1343122938,\"predicate\":\"privacyKeyChatInvite\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1571494644,\"predicate\":\"exportedMessageLink\",\"params\":[{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"html\",\"type\":\"string\"}],\"type\":\"ExportedMessageLink\"},{\"id\":1601666510,\"predicate\":\"messageFwdHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"imported\",\"type\":\"flags.7?true\"},{\"name\":\"from_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"from_name\",\"type\":\"flags.5?string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"channel_post\",\"type\":\"flags.2?int\"},{\"name\":\"post_author\",\"type\":\"flags.3?string\"},{\"name\":\"saved_from_peer\",\"type\":\"flags.4?Peer\"},{\"name\":\"saved_from_msg_id\",\"type\":\"flags.4?int\"},{\"name\":\"psa_type\",\"type\":\"flags.6?string\"}],\"type\":\"MessageFwdHeader\"},{\"id\":457133559,\"predicate\":\"updateEditChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1799538451,\"predicate\":\"messageActionPinMessage\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1923290508,\"predicate\":\"auth.codeTypeSms\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":1948046307,\"predicate\":\"auth.codeTypeCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":577556219,\"predicate\":\"auth.codeTypeFlashCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":1035688326,\"predicate\":\"auth.sentCodeTypeApp\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1073693790,\"predicate\":\"auth.sentCodeTypeSms\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":1398007207,\"predicate\":\"auth.sentCodeTypeCall\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1425815847,\"predicate\":\"auth.sentCodeTypeFlashCall\",\"params\":[{\"name\":\"pattern\",\"type\":\"string\"}],\"type\":\"auth.SentCodeType\"},{\"id\":629866245,\"predicate\":\"keyboardButtonUrl\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":901503851,\"predicate\":\"keyboardButtonCallback\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requires_password\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"KeyboardButton\"},{\"id\":-1318425559,\"predicate\":\"keyboardButtonRequestPhone\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-59151553,\"predicate\":\"keyboardButtonRequestGeoLocation\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":90744648,\"predicate\":\"keyboardButtonSwitchInline\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"same_peer\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"query\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1218642516,\"predicate\":\"replyInlineMarkup\",\"params\":[{\"name\":\"rows\",\"type\":\"Vector<KeyboardButtonRow>\"}],\"type\":\"ReplyMarkup\"},{\"id\":911761060,\"predicate\":\"messages.botCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"has_url\",\"type\":\"flags.3?true\"},{\"name\":\"native_ui\",\"type\":\"flags.4?true\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":-415938591,\"predicate\":\"updateBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":649453030,\"predicate\":\"messages.messageEditData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"caption\",\"type\":\"flags.0?true\"}],\"type\":\"messages.MessageEditData\"},{\"id\":-469536605,\"predicate\":\"updateEditMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1768777083,\"predicate\":\"inputBotInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":1098628881,\"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\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-1494368259,\"predicate\":\"inputBotInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":85477117,\"predicate\":\"botInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1970903652,\"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\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":416402882,\"predicate\":\"botInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"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\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"peers\",\"type\":\"Vector<TopPeer>\"}],\"type\":\"TopPeerCategoryPeers\"},{\"id\":-567906571,\"predicate\":\"contacts.topPeersNotModified\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":1891070632,\"predicate\":\"contacts.topPeers\",\"params\":[{\"name\":\"categories\",\"type\":\"Vector<TopPeerCategoryPeers>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.TopPeers\"},{\"id\":892193368,\"predicate\":\"messageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":546203849,\"predicate\":\"inputMessageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"MessageEntity\"},{\"id\":975236280,\"predicate\":\"inputMessagesFilterChatPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":634833351,\"predicate\":\"updateReadChannelOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-299124375,\"predicate\":\"updateDraftMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"draft\",\"type\":\"DraftMessage\"}],\"type\":\"Update\"},{\"id\":453805082,\"predicate\":\"draftMessageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"flags.0?int\"}],\"type\":\"DraftMessage\"},{\"id\":-40996577,\"predicate\":\"draftMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"DraftMessage\"},{\"id\":-1615153660,\"predicate\":\"messageActionHistoryClear\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-958657434,\"predicate\":\"messages.featuredStickersNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-1230257343,\"predicate\":\"messages.featuredStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector<StickerSetCovered>\"},{\"name\":\"unread\",\"type\":\"Vector<long>\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":1461528386,\"predicate\":\"updateReadFeaturedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":186120336,\"predicate\":\"messages.recentStickersNotModified\",\"params\":[],\"type\":\"messages.RecentStickers\"},{\"id\":586395571,\"predicate\":\"messages.recentStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"packs\",\"type\":\"Vector<StickerPack>\"},{\"name\":\"stickers\",\"type\":\"Vector<Document>\"},{\"name\":\"dates\",\"type\":\"Vector<int>\"}],\"type\":\"messages.RecentStickers\"},{\"id\":-1706939360,\"predicate\":\"updateRecentStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":1338747336,\"predicate\":\"messages.archivedStickers\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector<StickerSetCovered>\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":946083368,\"predicate\":\"messages.stickerSetInstallResultSuccess\",\"params\":[],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":904138920,\"predicate\":\"messages.stickerSetInstallResultArchive\",\"params\":[{\"name\":\"sets\",\"type\":\"Vector<StickerSetCovered>\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":1678812626,\"predicate\":\"stickerSetCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"cover\",\"type\":\"Document\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1574314746,\"predicate\":\"updateConfig\",\"params\":[],\"type\":\"Update\"},{\"id\":861169551,\"predicate\":\"updatePtsChanged\",\"params\":[],\"type\":\"Update\"},{\"id\":-440664550,\"predicate\":\"inputMediaPhotoExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":-78455655,\"predicate\":\"inputMediaDocumentExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":872932635,\"predicate\":\"stickerSetMultiCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"covers\",\"type\":\"Vector<Document>\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1361650766,\"predicate\":\"maskCoords\",\"params\":[{\"name\":\"n\",\"type\":\"int\"},{\"name\":\"x\",\"type\":\"double\"},{\"name\":\"y\",\"type\":\"double\"},{\"name\":\"zoom\",\"type\":\"double\"}],\"type\":\"MaskCoords\"},{\"id\":-1744710921,\"predicate\":\"documentAttributeHasStickers\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":1251549527,\"predicate\":\"inputStickeredMediaPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputStickeredMedia\"},{\"id\":70813275,\"predicate\":\"inputStickeredMediaDocument\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"}],\"type\":\"InputStickeredMedia\"},{\"id\":-1107729093,\"predicate\":\"game\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"}],\"type\":\"Game\"},{\"id\":1336154098,\"predicate\":\"inputBotInlineResultGame\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":1262639204,\"predicate\":\"inputBotInlineMessageGame\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-38694904,\"predicate\":\"messageMediaGame\",\"params\":[{\"name\":\"game\",\"type\":\"Game\"}],\"type\":\"MessageMedia\"},{\"id\":-750828557,\"predicate\":\"inputMediaGame\",\"params\":[{\"name\":\"id\",\"type\":\"InputGame\"}],\"type\":\"InputMedia\"},{\"id\":53231223,\"predicate\":\"inputGameID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGame\"},{\"id\":-1020139510,\"predicate\":\"inputGameShortName\",\"params\":[{\"name\":\"bot_id\",\"type\":\"InputUser\"},{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputGame\"},{\"id\":1358175439,\"predicate\":\"keyboardButtonGame\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1834538890,\"predicate\":\"messageActionGameScore\",\"params\":[{\"name\":\"game_id\",\"type\":\"long\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":1493171408,\"predicate\":\"highScore\",\"params\":[{\"name\":\"pos\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"HighScore\"},{\"id\":-1707344487,\"predicate\":\"messages.highScores\",\"params\":[{\"name\":\"scores\",\"type\":\"Vector<HighScore>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.HighScores\"},{\"id\":1258196845,\"predicate\":\"updates.differenceTooLong\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":1081547008,\"predicate\":\"updateChannelWebPage\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1663561404,\"predicate\":\"messages.chatsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"}],\"type\":\"messages.Chats\"},{\"id\":-599948721,\"predicate\":\"textEmpty\",\"params\":[],\"type\":\"RichText\"},{\"id\":1950782688,\"predicate\":\"textPlain\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":1730456516,\"predicate\":\"textBold\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-653089380,\"predicate\":\"textItalic\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-1054465340,\"predicate\":\"textUnderline\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-1678197867,\"predicate\":\"textStrike\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":1816074681,\"predicate\":\"textFixed\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":1009288385,\"predicate\":\"textUrl\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"}],\"type\":\"RichText\"},{\"id\":-564523562,\"predicate\":\"textEmail\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":2120376535,\"predicate\":\"textConcat\",\"params\":[{\"name\":\"texts\",\"type\":\"Vector<RichText>\"}],\"type\":\"RichText\"},{\"id\":324435594,\"predicate\":\"pageBlockUnsupported\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":1890305021,\"predicate\":\"pageBlockTitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1879401953,\"predicate\":\"pageBlockSubtitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1162877472,\"predicate\":\"pageBlockAuthorDate\",\"params\":[{\"name\":\"author\",\"type\":\"RichText\"},{\"name\":\"published_date\",\"type\":\"int\"}],\"type\":\"PageBlock\"},{\"id\":-1076861716,\"predicate\":\"pageBlockHeader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-248793375,\"predicate\":\"pageBlockSubheader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1182402406,\"predicate\":\"pageBlockParagraph\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1066346178,\"predicate\":\"pageBlockPreformatted\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":1216809369,\"predicate\":\"pageBlockFooter\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-618614392,\"predicate\":\"pageBlockDivider\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":-837994576,\"predicate\":\"pageBlockAnchor\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":-454524911,\"predicate\":\"pageBlockList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector<PageListItem>\"}],\"type\":\"PageBlock\"},{\"id\":641563686,\"predicate\":\"pageBlockBlockquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1329878739,\"predicate\":\"pageBlockPullquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":391759200,\"predicate\":\"pageBlockPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"},{\"name\":\"url\",\"type\":\"flags.0?string\"},{\"name\":\"webpage_id\",\"type\":\"flags.0?long\"}],\"type\":\"PageBlock\"},{\"id\":2089805750,\"predicate\":\"pageBlockVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autoplay\",\"type\":\"flags.0?true\"},{\"name\":\"loop\",\"type\":\"flags.1?true\"},{\"name\":\"video_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":972174080,\"predicate\":\"pageBlockCover\",\"params\":[{\"name\":\"cover\",\"type\":\"PageBlock\"}],\"type\":\"PageBlock\"},{\"id\":-1468953147,\"predicate\":\"pageBlockEmbed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"full_width\",\"type\":\"flags.0?true\"},{\"name\":\"allow_scrolling\",\"type\":\"flags.3?true\"},{\"name\":\"url\",\"type\":\"flags.1?string\"},{\"name\":\"html\",\"type\":\"flags.2?string\"},{\"name\":\"poster_photo_id\",\"type\":\"flags.4?long\"},{\"name\":\"w\",\"type\":\"flags.5?int\"},{\"name\":\"h\",\"type\":\"flags.5?int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":-229005301,\"predicate\":\"pageBlockEmbedPost\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"author_photo_id\",\"type\":\"long\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1705048653,\"predicate\":\"pageBlockCollage\",\"params\":[{\"name\":\"items\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":52401552,\"predicate\":\"pageBlockSlideshow\",\"params\":[{\"name\":\"items\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1930545681,\"predicate\":\"webPageNotModified\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"cached_page_views\",\"type\":\"flags.0?int\"}],\"type\":\"WebPage\"},{\"id\":-88417185,\"predicate\":\"inputPrivacyKeyPhoneCall\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1030105979,\"predicate\":\"privacyKeyPhoneCall\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-580219064,\"predicate\":\"sendMessageGamePlayAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-2048646399,\"predicate\":\"phoneCallDiscardReasonMissed\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":-527056480,\"predicate\":\"phoneCallDiscardReasonDisconnect\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1471006352,\"predicate\":\"phoneCallDiscardReasonHangup\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":-84416311,\"predicate\":\"phoneCallDiscardReasonBusy\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1852826908,\"predicate\":\"updateDialogPinned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":-99664734,\"predicate\":\"updatePinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"order\",\"type\":\"flags.0?Vector<DialogPeer>\"}],\"type\":\"Update\"},{\"id\":2104790276,\"predicate\":\"dataJSON\",\"params\":[{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"DataJSON\"},{\"id\":-2095595325,\"predicate\":\"updateBotWebhookJSON\",\"params\":[{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":-1684914010,\"predicate\":\"updateBotWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"},{\"name\":\"timeout\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-886477832,\"predicate\":\"labeledPrice\",\"params\":[{\"name\":\"label\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"LabeledPrice\"},{\"id\":215516896,\"predicate\":\"invoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"test\",\"type\":\"flags.0?true\"},{\"name\":\"name_requested\",\"type\":\"flags.1?true\"},{\"name\":\"phone_requested\",\"type\":\"flags.2?true\"},{\"name\":\"email_requested\",\"type\":\"flags.3?true\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.4?true\"},{\"name\":\"flexible\",\"type\":\"flags.5?true\"},{\"name\":\"phone_to_provider\",\"type\":\"flags.6?true\"},{\"name\":\"email_to_provider\",\"type\":\"flags.7?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector<LabeledPrice>\"},{\"name\":\"max_tip_amount\",\"type\":\"flags.8?long\"},{\"name\":\"suggested_tip_amounts\",\"type\":\"flags.8?Vector<long>\"}],\"type\":\"Invoice\"},{\"id\":-646342540,\"predicate\":\"inputMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"start_param\",\"type\":\"flags.1?string\"}],\"type\":\"InputMedia\"},{\"id\":-368917890,\"predicate\":\"paymentCharge\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"provider_charge_id\",\"type\":\"string\"}],\"type\":\"PaymentCharge\"},{\"id\":-1892568281,\"predicate\":\"messageActionPaymentSentMe\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"charge\",\"type\":\"PaymentCharge\"}],\"type\":\"MessageAction\"},{\"id\":-2074799289,\"predicate\":\"messageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"receipt_msg_id\",\"type\":\"flags.2?int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":512535275,\"predicate\":\"postAddress\",\"params\":[{\"name\":\"street_line1\",\"type\":\"string\"},{\"name\":\"street_line2\",\"type\":\"string\"},{\"name\":\"city\",\"type\":\"string\"},{\"name\":\"state\",\"type\":\"string\"},{\"name\":\"country_iso2\",\"type\":\"string\"},{\"name\":\"post_code\",\"type\":\"string\"}],\"type\":\"PostAddress\"},{\"id\":-1868808300,\"predicate\":\"paymentRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"name\",\"type\":\"flags.0?string\"},{\"name\":\"phone\",\"type\":\"flags.1?string\"},{\"name\":\"email\",\"type\":\"flags.2?string\"},{\"name\":\"shipping_address\",\"type\":\"flags.3?PostAddress\"}],\"type\":\"PaymentRequestedInfo\"},{\"id\":-1344716869,\"predicate\":\"keyboardButtonBuy\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1080663248,\"predicate\":\"messageActionPaymentSent\",\"params\":[{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-842892769,\"predicate\":\"paymentSavedCredentialsCard\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"PaymentSavedCredentials\"},{\"id\":475467473,\"predicate\":\"webDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"}],\"type\":\"WebDocument\"},{\"id\":-1678949555,\"predicate\":\"inputWebDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"}],\"type\":\"InputWebDocument\"},{\"id\":-1036396922,\"predicate\":\"inputWebFileLocation\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWebFileLocation\"},{\"id\":568808380,\"predicate\":\"upload.webFile\",\"params\":[{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"file_type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.WebFile\"},{\"id\":-1928649707,\"predicate\":\"payments.paymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_save_credentials\",\"type\":\"flags.2?true\"},{\"name\":\"password_missing\",\"type\":\"flags.3?true\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"provider_id\",\"type\":\"int\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"native_provider\",\"type\":\"flags.4?string\"},{\"name\":\"native_params\",\"type\":\"flags.4?DataJSON\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"saved_credentials\",\"type\":\"flags.1?PaymentSavedCredentials\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"payments.PaymentForm\"},{\"id\":-784000893,\"predicate\":\"payments.validatedRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector<ShippingOption>\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":1314881805,\"predicate\":\"payments.paymentResult\",\"params\":[{\"name\":\"updates\",\"type\":\"Updates\"}],\"type\":\"payments.PaymentResult\"},{\"id\":280319440,\"predicate\":\"payments.paymentReceipt\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"provider_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.2?WebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping\",\"type\":\"flags.1?ShippingOption\"},{\"name\":\"tip_amount\",\"type\":\"flags.3?long\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"credentials_title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":-74456004,\"predicate\":\"payments.savedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_saved_credentials\",\"type\":\"flags.1?true\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"}],\"type\":\"payments.SavedInfo\"},{\"id\":-1056001329,\"predicate\":\"inputPaymentCredentialsSaved\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"tmp_password\",\"type\":\"bytes\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":873977640,\"predicate\":\"inputPaymentCredentials\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":-614138572,\"predicate\":\"account.tmpPassword\",\"params\":[{\"name\":\"tmp_password\",\"type\":\"bytes\"},{\"name\":\"valid_until\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":-1239335713,\"predicate\":\"shippingOption\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector<LabeledPrice>\"}],\"type\":\"ShippingOption\"},{\"id\":-523384512,\"predicate\":\"updateBotShippingQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"shipping_address\",\"type\":\"PostAddress\"}],\"type\":\"Update\"},{\"id\":1563376297,\"predicate\":\"updateBotPrecheckoutQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-6249322,\"predicate\":\"inputStickerSetItem\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"emoji\",\"type\":\"string\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"InputStickerSetItem\"},{\"id\":-1425052898,\"predicate\":\"updatePhoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"}],\"type\":\"Update\"},{\"id\":506920429,\"predicate\":\"inputPhoneCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPhoneCall\"},{\"id\":1399245077,\"predicate\":\"phoneCallEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"PhoneCall\"},{\"id\":462375633,\"predicate\":\"phoneCallWaiting\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"receive_date\",\"type\":\"flags.0?int\"}],\"type\":\"PhoneCall\"},{\"id\":-2014659757,\"predicate\":\"phoneCallRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":-1719909046,\"predicate\":\"phoneCallAccepted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":-2025673089,\"predicate\":\"phoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"p2p_allowed\",\"type\":\"flags.5?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"connections\",\"type\":\"Vector<PhoneConnection>\"},{\"name\":\"start_date\",\"type\":\"int\"}],\"type\":\"PhoneCall\"},{\"id\":1355435489,\"predicate\":\"phoneCallDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"need_rating\",\"type\":\"flags.2?true\"},{\"name\":\"need_debug\",\"type\":\"flags.3?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"PhoneCall\"},{\"id\":-1655957568,\"predicate\":\"phoneConnection\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"peer_tag\",\"type\":\"bytes\"}],\"type\":\"PhoneConnection\"},{\"id\":-58224696,\"predicate\":\"phoneCallProtocol\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"udp_p2p\",\"type\":\"flags.0?true\"},{\"name\":\"udp_reflector\",\"type\":\"flags.1?true\"},{\"name\":\"min_layer\",\"type\":\"int\"},{\"name\":\"max_layer\",\"type\":\"int\"},{\"name\":\"library_versions\",\"type\":\"Vector<string>\"}],\"type\":\"PhoneCallProtocol\"},{\"id\":-326966976,\"predicate\":\"phone.phoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"phone.PhoneCall\"},{\"id\":-2134272152,\"predicate\":\"inputMessagesFilterPhoneCalls\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"missed\",\"type\":\"flags.0?true\"}],\"type\":\"MessagesFilter\"},{\"id\":-2132731265,\"predicate\":\"messageActionPhoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.2?true\"},{\"name\":\"call_id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"MessageAction\"},{\"id\":2054952868,\"predicate\":\"inputMessagesFilterRoundVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1253451181,\"predicate\":\"inputMessagesFilterRoundVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1997373508,\"predicate\":\"sendMessageRecordRoundAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":608050278,\"predicate\":\"sendMessageUploadRoundAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-242427324,\"predicate\":\"upload.fileCdnRedirect\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"encryption_key\",\"type\":\"bytes\"},{\"name\":\"encryption_iv\",\"type\":\"bytes\"},{\"name\":\"file_hashes\",\"type\":\"Vector<FileHash>\"}],\"type\":\"upload.File\"},{\"id\":-290921362,\"predicate\":\"upload.cdnFileReuploadNeeded\",\"params\":[{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":-1449145777,\"predicate\":\"upload.cdnFile\",\"params\":[{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":-914167110,\"predicate\":\"cdnPublicKey\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"CdnPublicKey\"},{\"id\":1462101002,\"predicate\":\"cdnConfig\",\"params\":[{\"name\":\"public_keys\",\"type\":\"Vector<CdnPublicKey>\"}],\"type\":\"CdnConfig\"},{\"id\":-283684427,\"predicate\":\"pageBlockChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"Chat\"}],\"type\":\"PageBlock\"},{\"id\":-892239370,\"predicate\":\"langPackString\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":1816636575,\"predicate\":\"langPackStringPluralized\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"zero_value\",\"type\":\"flags.0?string\"},{\"name\":\"one_value\",\"type\":\"flags.1?string\"},{\"name\":\"two_value\",\"type\":\"flags.2?string\"},{\"name\":\"few_value\",\"type\":\"flags.3?string\"},{\"name\":\"many_value\",\"type\":\"flags.4?string\"},{\"name\":\"other_value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":695856818,\"predicate\":\"langPackStringDeleted\",\"params\":[{\"name\":\"key\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":-209337866,\"predicate\":\"langPackDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"strings\",\"type\":\"Vector<LangPackString>\"}],\"type\":\"LangPackDifference\"},{\"id\":-288727837,\"predicate\":\"langPackLanguage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"official\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.2?true\"},{\"name\":\"beta\",\"type\":\"flags.3?true\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"native_name\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"base_lang_code\",\"type\":\"flags.1?string\"},{\"name\":\"plural_code\",\"type\":\"string\"},{\"name\":\"strings_count\",\"type\":\"int\"},{\"name\":\"translated_count\",\"type\":\"int\"},{\"name\":\"translations_url\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":1180041828,\"predicate\":\"updateLangPackTooLong\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":1442983757,\"predicate\":\"updateLangPack\",\"params\":[{\"name\":\"difference\",\"type\":\"LangPackDifference\"}],\"type\":\"Update\"},{\"id\":-859915345,\"predicate\":\"channelParticipantAdmin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_edit\",\"type\":\"flags.0?true\"},{\"name\":\"self\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"flags.1?int\"},{\"name\":\"promoted_by\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.2?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":1352785878,\"predicate\":\"channelParticipantBanned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"left\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"kicked_by\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelParticipant\"},{\"id\":338142689,\"predicate\":\"channelParticipantsBanned\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":106343499,\"predicate\":\"channelParticipantsSearch\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-421545947,\"predicate\":\"channelAdminLogEventActionChangeTitle\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1427671598,\"predicate\":\"channelAdminLogEventActionChangeAbout\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1783299128,\"predicate\":\"channelAdminLogEventActionChangeUsername\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1129042607,\"predicate\":\"channelAdminLogEventActionChangePhoto\",\"params\":[{\"name\":\"prev_photo\",\"type\":\"Photo\"},{\"name\":\"new_photo\",\"type\":\"Photo\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":460916654,\"predicate\":\"channelAdminLogEventActionToggleInvites\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":648939889,\"predicate\":\"channelAdminLogEventActionToggleSignatures\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-370660328,\"predicate\":\"channelAdminLogEventActionUpdatePinned\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1889215493,\"predicate\":\"channelAdminLogEventActionEditMessage\",\"params\":[{\"name\":\"prev_message\",\"type\":\"Message\"},{\"name\":\"new_message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1121994683,\"predicate\":\"channelAdminLogEventActionDeleteMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":405815507,\"predicate\":\"channelAdminLogEventActionParticipantJoin\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-124291086,\"predicate\":\"channelAdminLogEventActionParticipantLeave\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-484690728,\"predicate\":\"channelAdminLogEventActionParticipantInvite\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-422036098,\"predicate\":\"channelAdminLogEventActionParticipantToggleBan\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-714643696,\"predicate\":\"channelAdminLogEventActionParticipantToggleAdmin\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":995769920,\"predicate\":\"channelAdminLogEvent\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"ChannelAdminLogEventAction\"}],\"type\":\"ChannelAdminLogEvent\"},{\"id\":-309659827,\"predicate\":\"channels.adminLogResults\",\"params\":[{\"name\":\"events\",\"type\":\"Vector<ChannelAdminLogEvent>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":-368018716,\"predicate\":\"channelAdminLogEventsFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join\",\"type\":\"flags.0?true\"},{\"name\":\"leave\",\"type\":\"flags.1?true\"},{\"name\":\"invite\",\"type\":\"flags.2?true\"},{\"name\":\"ban\",\"type\":\"flags.3?true\"},{\"name\":\"unban\",\"type\":\"flags.4?true\"},{\"name\":\"kick\",\"type\":\"flags.5?true\"},{\"name\":\"unkick\",\"type\":\"flags.6?true\"},{\"name\":\"promote\",\"type\":\"flags.7?true\"},{\"name\":\"demote\",\"type\":\"flags.8?true\"},{\"name\":\"info\",\"type\":\"flags.9?true\"},{\"name\":\"settings\",\"type\":\"flags.10?true\"},{\"name\":\"pinned\",\"type\":\"flags.11?true\"},{\"name\":\"edit\",\"type\":\"flags.12?true\"},{\"name\":\"delete\",\"type\":\"flags.13?true\"},{\"name\":\"group_call\",\"type\":\"flags.14?true\"},{\"name\":\"invites\",\"type\":\"flags.15?true\"}],\"type\":\"ChannelAdminLogEventsFilter\"},{\"id\":511092620,\"predicate\":\"topPeerCategoryPhoneCalls\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-2143067670,\"predicate\":\"pageBlockAudio\",\"params\":[{\"name\":\"audio_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1558266229,\"predicate\":\"popularContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"importers\",\"type\":\"int\"}],\"type\":\"PopularContact\"},{\"id\":1200788123,\"predicate\":\"messageActionScreenshotTaken\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1634752813,\"predicate\":\"messages.favedStickersNotModified\",\"params\":[],\"type\":\"messages.FavedStickers\"},{\"id\":-209768682,\"predicate\":\"messages.favedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"packs\",\"type\":\"Vector<StickerPack>\"},{\"name\":\"stickers\",\"type\":\"Vector<Document>\"}],\"type\":\"messages.FavedStickers\"},{\"id\":-451831443,\"predicate\":\"updateFavedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":-1987495099,\"predicate\":\"updateChannelReadMessagesContents\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"}],\"type\":\"Update\"},{\"id\":-1040652646,\"predicate\":\"inputMessagesFilterMyMentions\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1887741886,\"predicate\":\"updateContactsReset\",\"params\":[],\"type\":\"Update\"},{\"id\":-1312568665,\"predicate\":\"channelAdminLogEventActionChangeStickerSet\",\"params\":[{\"name\":\"prev_stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"new_stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-85549226,\"predicate\":\"messageActionCustomAction\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":178373535,\"predicate\":\"inputPaymentCredentialsApplePay\",\"params\":[{\"name\":\"payment_data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":-419271411,\"predicate\":\"inputMessagesFilterGeo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-530392189,\"predicate\":\"inputMessagesFilterContacts\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1893427255,\"predicate\":\"updateChannelAvailableMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"available_min_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1599903217,\"predicate\":\"channelAdminLogEventActionTogglePreHistoryHidden\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1759532989,\"predicate\":\"inputMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"stopped\",\"type\":\"flags.0?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.2?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"}],\"type\":\"InputMedia\"},{\"id\":-1186937242,\"predicate\":\"messageMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.1?int\"}],\"type\":\"MessageMedia\"},{\"id\":1189204285,\"predicate\":\"recentMeUrlUnknown\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1917045962,\"predicate\":\"recentMeUrlUser\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1608834311,\"predicate\":\"recentMeUrlChat\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"RecentMeUrl\"},{\"id\":-347535331,\"predicate\":\"recentMeUrlChatInvite\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_invite\",\"type\":\"ChatInvite\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1140172836,\"predicate\":\"recentMeUrlStickerSet\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"set\",\"type\":\"StickerSetCovered\"}],\"type\":\"RecentMeUrl\"},{\"id\":235081943,\"predicate\":\"help.recentMeUrls\",\"params\":[{\"name\":\"urls\",\"type\":\"Vector<RecentMeUrl>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":-266911767,\"predicate\":\"channels.channelParticipantsNotModified\",\"params\":[],\"type\":\"channels.ChannelParticipants\"},{\"id\":1951620897,\"predicate\":\"messages.messagesNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":482797855,\"predicate\":\"inputSingleMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.0?Vector<MessageEntity>\"}],\"type\":\"InputSingleMedia\"},{\"id\":-892779534,\"predicate\":\"webAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"domain\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"WebAuthorization\"},{\"id\":-313079300,\"predicate\":\"account.webAuthorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector<WebAuthorization>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"account.WebAuthorizations\"},{\"id\":-1502174430,\"predicate\":\"inputMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":-1160215659,\"predicate\":\"inputMessageReplyTo\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":-2037963464,\"predicate\":\"inputMessagePinned\",\"params\":[],\"type\":\"InputMessage\"},{\"id\":-1687559349,\"predicate\":\"messageEntityPhone\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1280209983,\"predicate\":\"messageEntityCashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1410748418,\"predicate\":\"messageActionBotAllowed\",\"params\":[{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-55902537,\"predicate\":\"inputDialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputDialogPeer\"},{\"id\":-445792507,\"predicate\":\"dialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"DialogPeer\"},{\"id\":223655517,\"predicate\":\"messages.foundStickerSetsNotModified\",\"params\":[],\"type\":\"messages.FoundStickerSets\"},{\"id\":1359533640,\"predicate\":\"messages.foundStickerSets\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector<StickerSetCovered>\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":1648543603,\"predicate\":\"fileHash\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"FileHash\"},{\"id\":-104284986,\"predicate\":\"webDocumentNoProxy\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"}],\"type\":\"WebDocument\"},{\"id\":1968737087,\"predicate\":\"inputClientProxy\",\"params\":[{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"}],\"type\":\"InputClientProxy\"},{\"id\":-483352705,\"predicate\":\"help.termsOfServiceUpdateEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":686618977,\"predicate\":\"help.termsOfServiceUpdate\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"terms_of_service\",\"type\":\"help.TermsOfService\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":859091184,\"predicate\":\"inputSecureFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"InputSecureFile\"},{\"id\":1399317950,\"predicate\":\"inputSecureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputSecureFile\"},{\"id\":-876089816,\"predicate\":\"inputSecureFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":1679398724,\"predicate\":\"secureFileEmpty\",\"params\":[],\"type\":\"SecureFile\"},{\"id\":-534283678,\"predicate\":\"secureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureFile\"},{\"id\":-1964327229,\"predicate\":\"secureData\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureData\"},{\"id\":2103482845,\"predicate\":\"securePlainPhone\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":569137759,\"predicate\":\"securePlainEmail\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":-1658158621,\"predicate\":\"secureValueTypePersonalDetails\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":1034709504,\"predicate\":\"secureValueTypePassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":115615172,\"predicate\":\"secureValueTypeDriverLicense\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1596951477,\"predicate\":\"secureValueTypeIdentityCard\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1717268701,\"predicate\":\"secureValueTypeInternalPassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-874308058,\"predicate\":\"secureValueTypeAddress\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-63531698,\"predicate\":\"secureValueTypeUtilityBill\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1995211763,\"predicate\":\"secureValueTypeBankStatement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1954007928,\"predicate\":\"secureValueTypeRentalAgreement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1713143702,\"predicate\":\"secureValueTypePassportRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-368907213,\"predicate\":\"secureValueTypeTemporaryRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1289704741,\"predicate\":\"secureValueTypePhone\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1908627474,\"predicate\":\"secureValueTypeEmail\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":411017418,\"predicate\":\"secureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?SecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?SecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?SecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector<SecureFile>\"},{\"name\":\"files\",\"type\":\"flags.4?Vector<SecureFile>\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValue\"},{\"id\":-618540889,\"predicate\":\"inputSecureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?InputSecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?InputSecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?InputSecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector<InputSecureFile>\"},{\"name\":\"files\",\"type\":\"flags.4?Vector<InputSecureFile>\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"}],\"type\":\"InputSecureValue\"},{\"id\":-316748368,\"predicate\":\"secureValueHash\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValueHash\"},{\"id\":-391902247,\"predicate\":\"secureValueErrorData\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"field\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":12467706,\"predicate\":\"secureValueErrorFrontSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-2037765467,\"predicate\":\"secureValueErrorReverseSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-449327402,\"predicate\":\"secureValueErrorSelfie\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":2054162547,\"predicate\":\"secureValueErrorFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":1717706985,\"predicate\":\"secureValueErrorFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector<bytes>\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":871426631,\"predicate\":\"secureCredentialsEncrypted\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureCredentialsEncrypted\"},{\"id\":-1389486888,\"predicate\":\"account.authorizationForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"required_types\",\"type\":\"Vector<SecureRequiredType>\"},{\"name\":\"values\",\"type\":\"Vector<SecureValue>\"},{\"name\":\"errors\",\"type\":\"Vector<SecureValueError>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"privacy_policy_url\",\"type\":\"flags.0?string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":-2128640689,\"predicate\":\"account.sentEmailCode\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"account.SentEmailCode\"},{\"id\":455635795,\"predicate\":\"messageActionSecureValuesSentMe\",\"params\":[{\"name\":\"values\",\"type\":\"Vector<SecureValue>\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"MessageAction\"},{\"id\":-648257196,\"predicate\":\"messageActionSecureValuesSent\",\"params\":[{\"name\":\"types\",\"type\":\"Vector<SecureValueType>\"}],\"type\":\"MessageAction\"},{\"id\":1722786150,\"predicate\":\"help.deepLinkInfoEmpty\",\"params\":[],\"type\":\"help.DeepLinkInfo\"},{\"id\":1783556146,\"predicate\":\"help.deepLinkInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"update_app\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector<MessageEntity>\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":289586518,\"predicate\":\"savedPhoneContact\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"SavedContact\"},{\"id\":1304052993,\"predicate\":\"account.takeout\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"account.Takeout\"},{\"id\":700340377,\"predicate\":\"inputTakeoutFileLocation\",\"params\":[],\"type\":\"InputFileLocation\"},{\"id\":-513517117,\"predicate\":\"updateDialogUnreadMark\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":-253500010,\"predicate\":\"messages.dialogsNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":-1625153079,\"predicate\":\"inputWebFileGeoPointLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"scale\",\"type\":\"int\"}],\"type\":\"InputWebFileLocation\"},{\"id\":-1255369827,\"predicate\":\"contacts.topPeersDisabled\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":-1685456582,\"predicate\":\"inputReportReasonCopyright\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-732254058,\"predicate\":\"passwordKdfAlgoUnknown\",\"params\":[],\"type\":\"PasswordKdfAlgo\"},{\"id\":4883767,\"predicate\":\"securePasswordKdfAlgoUnknown\",\"params\":[],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":-1141711456,\"predicate\":\"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":-2042159726,\"predicate\":\"securePasswordKdfAlgoSHA512\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":354925740,\"predicate\":\"secureSecretSettings\",\"params\":[{\"name\":\"secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_secret\",\"type\":\"bytes\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureSecretSettings\"},{\"id\":982592842,\"predicate\":\"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow\",\"params\":[{\"name\":\"salt1\",\"type\":\"bytes\"},{\"name\":\"salt2\",\"type\":\"bytes\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"}],\"type\":\"PasswordKdfAlgo\"},{\"id\":-1736378792,\"predicate\":\"inputCheckPasswordEmpty\",\"params\":[],\"type\":\"InputCheckPasswordSRP\"},{\"id\":-763367294,\"predicate\":\"inputCheckPasswordSRP\",\"params\":[{\"name\":\"srp_id\",\"type\":\"long\"},{\"name\":\"A\",\"type\":\"bytes\"},{\"name\":\"M1\",\"type\":\"bytes\"}],\"type\":\"InputCheckPasswordSRP\"},{\"id\":-2036501105,\"predicate\":\"secureValueError\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-1592506512,\"predicate\":\"secureValueErrorTranslationFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":878931416,\"predicate\":\"secureValueErrorTranslationFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector<bytes>\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-2103600678,\"predicate\":\"secureRequiredType\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"native_names\",\"type\":\"flags.0?true\"},{\"name\":\"selfie_required\",\"type\":\"flags.1?true\"},{\"name\":\"translation_required\",\"type\":\"flags.2?true\"},{\"name\":\"type\",\"type\":\"SecureValueType\"}],\"type\":\"SecureRequiredType\"},{\"id\":41187252,\"predicate\":\"secureRequiredTypeOneOf\",\"params\":[{\"name\":\"types\",\"type\":\"Vector<SecureRequiredType>\"}],\"type\":\"SecureRequiredType\"},{\"id\":-1078332329,\"predicate\":\"help.passportConfigNotModified\",\"params\":[],\"type\":\"help.PassportConfig\"},{\"id\":-1600596305,\"predicate\":\"help.passportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"countries_langs\",\"type\":\"DataJSON\"}],\"type\":\"help.PassportConfig\"},{\"id\":488313413,\"predicate\":\"inputAppEvent\",\"params\":[{\"name\":\"time\",\"type\":\"double\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"peer\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"JSONValue\"}],\"type\":\"InputAppEvent\"},{\"id\":-1059185703,\"predicate\":\"jsonObjectValue\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"JSONValue\"}],\"type\":\"JSONObjectValue\"},{\"id\":1064139624,\"predicate\":\"jsonNull\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":-952869270,\"predicate\":\"jsonBool\",\"params\":[{\"name\":\"value\",\"type\":\"Bool\"}],\"type\":\"JSONValue\"},{\"id\":736157604,\"predicate\":\"jsonNumber\",\"params\":[{\"name\":\"value\",\"type\":\"double\"}],\"type\":\"JSONValue\"},{\"id\":-1222740358,\"predicate\":\"jsonString\",\"params\":[{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"JSONValue\"},{\"id\":-146520221,\"predicate\":\"jsonArray\",\"params\":[{\"name\":\"value\",\"type\":\"Vector<JSONValue>\"}],\"type\":\"JSONValue\"},{\"id\":-1715350371,\"predicate\":\"jsonObject\",\"params\":[{\"name\":\"value\",\"type\":\"Vector<JSONObjectValue>\"}],\"type\":\"JSONValue\"},{\"id\":-1311015810,\"predicate\":\"inputNotifyBroadcasts\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":-703403793,\"predicate\":\"notifyBroadcasts\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-311786236,\"predicate\":\"textSubscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-939827711,\"predicate\":\"textSuperscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":55281185,\"predicate\":\"textMarked\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":483104362,\"predicate\":\"textPhone\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":136105807,\"predicate\":\"textImage\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"RichText\"},{\"id\":504660880,\"predicate\":\"pageBlockKicker\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":878078826,\"predicate\":\"pageTableCell\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"header\",\"type\":\"flags.0?true\"},{\"name\":\"align_center\",\"type\":\"flags.3?true\"},{\"name\":\"align_right\",\"type\":\"flags.4?true\"},{\"name\":\"valign_middle\",\"type\":\"flags.5?true\"},{\"name\":\"valign_bottom\",\"type\":\"flags.6?true\"},{\"name\":\"text\",\"type\":\"flags.7?RichText\"},{\"name\":\"colspan\",\"type\":\"flags.1?int\"},{\"name\":\"rowspan\",\"type\":\"flags.2?int\"}],\"type\":\"PageTableCell\"},{\"id\":-524237339,\"predicate\":\"pageTableRow\",\"params\":[{\"name\":\"cells\",\"type\":\"Vector<PageTableCell>\"}],\"type\":\"PageTableRow\"},{\"id\":-1085412734,\"predicate\":\"pageBlockTable\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bordered\",\"type\":\"flags.0?true\"},{\"name\":\"striped\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"rows\",\"type\":\"Vector<PageTableRow>\"}],\"type\":\"PageBlock\"},{\"id\":1869903447,\"predicate\":\"pageCaption\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"credit\",\"type\":\"RichText\"}],\"type\":\"PageCaption\"},{\"id\":-1188055347,\"predicate\":\"pageListItemText\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListItem\"},{\"id\":635466748,\"predicate\":\"pageListItemBlocks\",\"params\":[{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"}],\"type\":\"PageListItem\"},{\"id\":1577484359,\"predicate\":\"pageListOrderedItemText\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListOrderedItem\"},{\"id\":-1730311882,\"predicate\":\"pageListOrderedItemBlocks\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"}],\"type\":\"PageListOrderedItem\"},{\"id\":-1702174239,\"predicate\":\"pageBlockOrderedList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector<PageListOrderedItem>\"}],\"type\":\"PageBlock\"},{\"id\":1987480557,\"predicate\":\"pageBlockDetails\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"open\",\"type\":\"flags.0?true\"},{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"title\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1282352120,\"predicate\":\"pageRelatedArticle\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"description\",\"type\":\"flags.1?string\"},{\"name\":\"photo_id\",\"type\":\"flags.2?long\"},{\"name\":\"author\",\"type\":\"flags.3?string\"},{\"name\":\"published_date\",\"type\":\"flags.4?int\"}],\"type\":\"PageRelatedArticle\"},{\"id\":370236054,\"predicate\":\"pageBlockRelatedArticles\",\"params\":[{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"articles\",\"type\":\"Vector<PageRelatedArticle>\"}],\"type\":\"PageBlock\"},{\"id\":-1538310410,\"predicate\":\"pageBlockMap\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":-1738178803,\"predicate\":\"page\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"part\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.1?true\"},{\"name\":\"v2\",\"type\":\"flags.2?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"photos\",\"type\":\"Vector<Photo>\"},{\"name\":\"documents\",\"type\":\"Vector<Document>\"},{\"name\":\"views\",\"type\":\"flags.3?int\"}],\"type\":\"Page\"},{\"id\":-610373422,\"predicate\":\"inputPrivacyKeyPhoneP2P\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":961092808,\"predicate\":\"privacyKeyPhoneP2P\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":894777186,\"predicate\":\"textAnchor\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":-1945767479,\"predicate\":\"help.supportName\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"help.SupportName\"},{\"id\":-206688531,\"predicate\":\"help.userInfoEmpty\",\"params\":[],\"type\":\"help.UserInfo\"},{\"id\":32192344,\"predicate\":\"help.userInfo\",\"params\":[{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector<MessageEntity>\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"help.UserInfo\"},{\"id\":-202219658,\"predicate\":\"messageActionContactSignUp\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1398708869,\"predicate\":\"updateMessagePoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"poll\",\"type\":\"flags.0?Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"Update\"},{\"id\":1823064809,\"predicate\":\"pollAnswer\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"option\",\"type\":\"bytes\"}],\"type\":\"PollAnswer\"},{\"id\":-2032041631,\"predicate\":\"poll\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"closed\",\"type\":\"flags.0?true\"},{\"name\":\"public_voters\",\"type\":\"flags.1?true\"},{\"name\":\"multiple_choice\",\"type\":\"flags.2?true\"},{\"name\":\"quiz\",\"type\":\"flags.3?true\"},{\"name\":\"question\",\"type\":\"string\"},{\"name\":\"answers\",\"type\":\"Vector<PollAnswer>\"},{\"name\":\"close_period\",\"type\":\"flags.4?int\"},{\"name\":\"close_date\",\"type\":\"flags.5?int\"}],\"type\":\"Poll\"},{\"id\":997055186,\"predicate\":\"pollAnswerVoters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chosen\",\"type\":\"flags.0?true\"},{\"name\":\"correct\",\"type\":\"flags.1?true\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"voters\",\"type\":\"int\"}],\"type\":\"PollAnswerVoters\"},{\"id\":-1159937629,\"predicate\":\"pollResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"min\",\"type\":\"flags.0?true\"},{\"name\":\"results\",\"type\":\"flags.1?Vector<PollAnswerVoters>\"},{\"name\":\"total_voters\",\"type\":\"flags.2?int\"},{\"name\":\"recent_voters\",\"type\":\"flags.3?Vector<int>\"},{\"name\":\"solution\",\"type\":\"flags.4?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.4?Vector<MessageEntity>\"}],\"type\":\"PollResults\"},{\"id\":261416433,\"predicate\":\"inputMediaPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"correct_answers\",\"type\":\"flags.0?Vector<bytes>\"},{\"name\":\"solution\",\"type\":\"flags.1?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.1?Vector<MessageEntity>\"}],\"type\":\"InputMedia\"},{\"id\":1272375192,\"predicate\":\"messageMediaPoll\",\"params\":[{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"MessageMedia\"},{\"id\":-264117680,\"predicate\":\"chatOnlines\",\"params\":[{\"name\":\"onlines\",\"type\":\"int\"}],\"type\":\"ChatOnlines\"},{\"id\":1202287072,\"predicate\":\"statsURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"id\":-525288402,\"predicate\":\"photoStrippedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":1605510357,\"predicate\":\"chatAdminRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"change_info\",\"type\":\"flags.0?true\"},{\"name\":\"post_messages\",\"type\":\"flags.1?true\"},{\"name\":\"edit_messages\",\"type\":\"flags.2?true\"},{\"name\":\"delete_messages\",\"type\":\"flags.3?true\"},{\"name\":\"ban_users\",\"type\":\"flags.4?true\"},{\"name\":\"invite_users\",\"type\":\"flags.5?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.7?true\"},{\"name\":\"add_admins\",\"type\":\"flags.9?true\"},{\"name\":\"anonymous\",\"type\":\"flags.10?true\"},{\"name\":\"manage_call\",\"type\":\"flags.11?true\"},{\"name\":\"other\",\"type\":\"flags.12?true\"}],\"type\":\"ChatAdminRights\"},{\"id\":-1626209256,\"predicate\":\"chatBannedRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"view_messages\",\"type\":\"flags.0?true\"},{\"name\":\"send_messages\",\"type\":\"flags.1?true\"},{\"name\":\"send_media\",\"type\":\"flags.2?true\"},{\"name\":\"send_stickers\",\"type\":\"flags.3?true\"},{\"name\":\"send_gifs\",\"type\":\"flags.4?true\"},{\"name\":\"send_games\",\"type\":\"flags.5?true\"},{\"name\":\"send_inline\",\"type\":\"flags.6?true\"},{\"name\":\"embed_links\",\"type\":\"flags.7?true\"},{\"name\":\"send_polls\",\"type\":\"flags.8?true\"},{\"name\":\"change_info\",\"type\":\"flags.10?true\"},{\"name\":\"invite_users\",\"type\":\"flags.15?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.17?true\"},{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"ChatBannedRights\"},{\"id\":1421875280,\"predicate\":\"updateChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"default_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-433014407,\"predicate\":\"inputWallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":1913199744,\"predicate\":\"inputWallPaperSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputWallPaper\"},{\"id\":-1150621555,\"predicate\":\"channelParticipantsContacts\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":771095562,\"predicate\":\"channelAdminLogEventActionDefaultBannedRights\",\"params\":[{\"name\":\"prev_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"new_banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1895328189,\"predicate\":\"channelAdminLogEventActionStopPoll\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":471437699,\"predicate\":\"account.wallPapersNotModified\",\"params\":[],\"type\":\"account.WallPapers\"},{\"id\":1881892265,\"predicate\":\"account.wallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"wallpapers\",\"type\":\"Vector<WallPaper>\"}],\"type\":\"account.WallPapers\"},{\"id\":-557924733,\"predicate\":\"codeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"allow_flashcall\",\"type\":\"flags.0?true\"},{\"name\":\"current_number\",\"type\":\"flags.1?true\"},{\"name\":\"allow_app_hash\",\"type\":\"flags.4?true\"}],\"type\":\"CodeSettings\"},{\"id\":499236004,\"predicate\":\"wallPaperSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blur\",\"type\":\"flags.1?true\"},{\"name\":\"motion\",\"type\":\"flags.2?true\"},{\"name\":\"background_color\",\"type\":\"flags.0?int\"},{\"name\":\"second_background_color\",\"type\":\"flags.4?int\"},{\"name\":\"third_background_color\",\"type\":\"flags.5?int\"},{\"name\":\"fourth_background_color\",\"type\":\"flags.6?int\"},{\"name\":\"intensity\",\"type\":\"flags.3?int\"},{\"name\":\"rotation\",\"type\":\"flags.4?int\"}],\"type\":\"WallPaperSettings\"},{\"id\":-532532493,\"predicate\":\"autoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"disabled\",\"type\":\"flags.0?true\"},{\"name\":\"video_preload_large\",\"type\":\"flags.1?true\"},{\"name\":\"audio_preload_next\",\"type\":\"flags.2?true\"},{\"name\":\"phonecalls_less_data\",\"type\":\"flags.3?true\"},{\"name\":\"photo_size_max\",\"type\":\"int\"},{\"name\":\"video_size_max\",\"type\":\"int\"},{\"name\":\"file_size_max\",\"type\":\"int\"},{\"name\":\"video_upload_maxbitrate\",\"type\":\"int\"}],\"type\":\"AutoDownloadSettings\"},{\"id\":1674235686,\"predicate\":\"account.autoDownloadSettings\",\"params\":[{\"name\":\"low\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"medium\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"high\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"account.AutoDownloadSettings\"},{\"id\":-709641735,\"predicate\":\"emojiKeyword\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector<string>\"}],\"type\":\"EmojiKeyword\"},{\"id\":594408994,\"predicate\":\"emojiKeywordDeleted\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector<string>\"}],\"type\":\"EmojiKeyword\"},{\"id\":1556570557,\"predicate\":\"emojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"keywords\",\"type\":\"Vector<EmojiKeyword>\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":-1519029347,\"predicate\":\"emojiURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":-1275374751,\"predicate\":\"emojiLanguage\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiLanguage\"},{\"id\":-1529000952,\"predicate\":\"inputPrivacyKeyForwards\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1777096355,\"predicate\":\"privacyKeyForwards\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1461304012,\"predicate\":\"inputPrivacyKeyProfilePhoto\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-1777000467,\"predicate\":\"privacyKeyProfilePhoto\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1075322878,\"predicate\":\"inputPhotoFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":-667654413,\"predicate\":\"inputPhotoLegacyFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":925204121,\"predicate\":\"inputPeerPhotoFileLocation\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":-1652231205,\"predicate\":\"inputStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb_version\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":-11252123,\"predicate\":\"folder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autofill_new_broadcasts\",\"type\":\"flags.0?true\"},{\"name\":\"autofill_public_groups\",\"type\":\"flags.1?true\"},{\"name\":\"autofill_new_correspondents\",\"type\":\"flags.2?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.3?ChatPhoto\"}],\"type\":\"Folder\"},{\"id\":1908216652,\"predicate\":\"dialogFolder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"folder\",\"type\":\"Folder\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"unread_muted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_muted_messages_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_messages_count\",\"type\":\"int\"}],\"type\":\"Dialog\"},{\"id\":1684014375,\"predicate\":\"inputDialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputDialogPeer\"},{\"id\":1363483106,\"predicate\":\"dialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"DialogPeer\"},{\"id\":-70073706,\"predicate\":\"inputFolderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputFolderPeer\"},{\"id\":-373643672,\"predicate\":\"folderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"FolderPeer\"},{\"id\":422972864,\"predicate\":\"updateFolderPeers\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector<FolderPeer>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":756118935,\"predicate\":\"inputUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"InputUser\"},{\"id\":707290417,\"predicate\":\"inputChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"InputChannel\"},{\"id\":398123750,\"predicate\":\"inputPeerUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":-1667893317,\"predicate\":\"inputPeerChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":55761658,\"predicate\":\"inputPrivacyKeyPhoneNumber\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-778378131,\"predicate\":\"privacyKeyPhoneNumber\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-1472172887,\"predicate\":\"topPeerCategoryForwardUsers\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-68239120,\"predicate\":\"topPeerCategoryForwardChats\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-1569748965,\"predicate\":\"channelAdminLogEventActionChangeLinkedChat\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-398136321,\"predicate\":\"messages.searchCounter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.SearchCounter\"},{\"id\":280464681,\"predicate\":\"keyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"button_id\",\"type\":\"int\"}],\"type\":\"KeyboardButton\"},{\"id\":-802258988,\"predicate\":\"inputKeyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.1?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"bot\",\"type\":\"InputUser\"}],\"type\":\"KeyboardButton\"},{\"id\":-1831650802,\"predicate\":\"urlAuthResultRequest\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"bot\",\"type\":\"User\"},{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1886646706,\"predicate\":\"urlAuthResultAccepted\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1445536993,\"predicate\":\"urlAuthResultDefault\",\"params\":[],\"type\":\"UrlAuthResult\"},{\"id\":1283572154,\"predicate\":\"inputPrivacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<int>\"}],\"type\":\"InputPrivacyRule\"},{\"id\":-668769361,\"predicate\":\"inputPrivacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<int>\"}],\"type\":\"InputPrivacyRule\"},{\"id\":415136107,\"predicate\":\"privacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<int>\"}],\"type\":\"PrivacyRule\"},{\"id\":-1397881200,\"predicate\":\"privacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<int>\"}],\"type\":\"PrivacyRule\"},{\"id\":-1672577397,\"predicate\":\"messageEntityUnderline\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1090087980,\"predicate\":\"messageEntityStrike\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":34469328,\"predicate\":\"messageEntityBlockquote\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1786671974,\"predicate\":\"updatePeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"}],\"type\":\"Update\"},{\"id\":-1078612597,\"predicate\":\"channelLocationEmpty\",\"params\":[],\"type\":\"ChannelLocation\"},{\"id\":547062491,\"predicate\":\"channelLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"GeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"ChannelLocation\"},{\"id\":-901375139,\"predicate\":\"peerLocated\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":-1263546448,\"predicate\":\"updatePeerLocated\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector<PeerLocated>\"}],\"type\":\"Update\"},{\"id\":241923758,\"predicate\":\"channelAdminLogEventActionChangeLocation\",\"params\":[{\"name\":\"prev_value\",\"type\":\"ChannelLocation\"},{\"name\":\"new_value\",\"type\":\"ChannelLocation\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-606798099,\"predicate\":\"inputReportReasonGeoIrrelevant\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":1401984889,\"predicate\":\"channelAdminLogEventActionToggleSlowMode\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1148485274,\"predicate\":\"auth.authorizationSignUpRequired\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"terms_of_service\",\"type\":\"flags.0?help.TermsOfService\"}],\"type\":\"auth.Authorization\"},{\"id\":-666824391,\"predicate\":\"payments.paymentVerificationNeeded\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.PaymentResult\"},{\"id\":42402760,\"predicate\":\"inputStickerSetAnimatedEmoji\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":967122427,\"predicate\":\"updateNewScheduledMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"Update\"},{\"id\":-1870238482,\"predicate\":\"updateDeleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"}],\"type\":\"Update\"},{\"id\":-797791052,\"predicate\":\"restrictionReason\",\"params\":[{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"reason\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RestrictionReason\"},{\"id\":1012306921,\"predicate\":\"inputTheme\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputTheme\"},{\"id\":-175567375,\"predicate\":\"inputThemeSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputTheme\"},{\"id\":42930452,\"predicate\":\"theme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?Document\"},{\"name\":\"settings\",\"type\":\"flags.3?ThemeSettings\"},{\"name\":\"installs_count\",\"type\":\"int\"}],\"type\":\"Theme\"},{\"id\":-199313886,\"predicate\":\"account.themesNotModified\",\"params\":[],\"type\":\"account.Themes\"},{\"id\":2137482273,\"predicate\":\"account.themes\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"themes\",\"type\":\"Vector<Theme>\"}],\"type\":\"account.Themes\"},{\"id\":-2112423005,\"predicate\":\"updateTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"Theme\"}],\"type\":\"Update\"},{\"id\":-786326563,\"predicate\":\"inputPrivacyKeyAddedByPhone\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1124062251,\"predicate\":\"privacyKeyAddedByPhone\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-2027964103,\"predicate\":\"updateGeoLiveViewed\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1448076945,\"predicate\":\"updateLoginToken\",\"params\":[],\"type\":\"Update\"},{\"id\":1654593920,\"predicate\":\"auth.loginToken\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":110008598,\"predicate\":\"auth.loginTokenMigrateTo\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":957176926,\"predicate\":\"auth.loginTokenSuccess\",\"params\":[{\"name\":\"authorization\",\"type\":\"auth.Authorization\"}],\"type\":\"auth.LoginToken\"},{\"id\":1474462241,\"predicate\":\"account.contentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"},{\"name\":\"sensitive_can_change\",\"type\":\"flags.1?true\"}],\"type\":\"account.ContentSettings\"},{\"id\":-1456996667,\"predicate\":\"messages.inactiveChats\",\"params\":[{\"name\":\"dates\",\"type\":\"Vector<int>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.InactiveChats\"},{\"id\":-1012849566,\"predicate\":\"baseThemeClassic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-69724536,\"predicate\":\"baseThemeDay\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-1212997976,\"predicate\":\"baseThemeNight\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1834973166,\"predicate\":\"baseThemeTinted\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1527845466,\"predicate\":\"baseThemeArctic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-1770371538,\"predicate\":\"inputWallPaperNoFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":-528465642,\"predicate\":\"wallPaperNoFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":-1118798639,\"predicate\":\"inputThemeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"message_top_color\",\"type\":\"flags.0?int\"},{\"name\":\"message_bottom_color\",\"type\":\"flags.0?int\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?InputWallPaper\"},{\"name\":\"wallpaper_settings\",\"type\":\"flags.1?WallPaperSettings\"}],\"type\":\"InputThemeSettings\"},{\"id\":-1676371894,\"predicate\":\"themeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"message_top_color\",\"type\":\"flags.0?int\"},{\"name\":\"message_bottom_color\",\"type\":\"flags.0?int\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?WallPaper\"}],\"type\":\"ThemeSettings\"},{\"id\":1421174295,\"predicate\":\"webPageAttributeTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"documents\",\"type\":\"flags.0?Vector<Document>\"},{\"name\":\"settings\",\"type\":\"flags.1?ThemeSettings\"}],\"type\":\"WebPageAttribute\"},{\"id\":938909451,\"predicate\":\"updateMessagePollVote\",\"params\":[{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector<bytes>\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1567730343,\"predicate\":\"messageUserVote\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":909603888,\"predicate\":\"messageUserVoteInputOption\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":244310238,\"predicate\":\"messageUserVoteMultiple\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector<bytes>\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":136574537,\"predicate\":\"messages.votesList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"votes\",\"type\":\"Vector<MessageUserVote>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"messages.VotesList\"},{\"id\":-1144565411,\"predicate\":\"keyboardButtonRequestPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"quiz\",\"type\":\"flags.0?Bool\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1981704948,\"predicate\":\"messageEntityBankCard\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-177732982,\"predicate\":\"bankCardOpenUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"BankCardOpenUrl\"},{\"id\":1042605427,\"predicate\":\"payments.bankCardData\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"open_urls\",\"type\":\"Vector<BankCardOpenUrl>\"}],\"type\":\"payments.BankCardData\"},{\"id\":-118740917,\"predicate\":\"peerSelfLocated\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":1949890536,\"predicate\":\"dialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"non_contacts\",\"type\":\"flags.1?true\"},{\"name\":\"groups\",\"type\":\"flags.2?true\"},{\"name\":\"broadcasts\",\"type\":\"flags.3?true\"},{\"name\":\"bots\",\"type\":\"flags.4?true\"},{\"name\":\"exclude_muted\",\"type\":\"flags.11?true\"},{\"name\":\"exclude_read\",\"type\":\"flags.12?true\"},{\"name\":\"exclude_archived\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"emoticon\",\"type\":\"flags.25?string\"},{\"name\":\"pinned_peers\",\"type\":\"Vector<InputPeer>\"},{\"name\":\"include_peers\",\"type\":\"Vector<InputPeer>\"},{\"name\":\"exclude_peers\",\"type\":\"Vector<InputPeer>\"}],\"type\":\"DialogFilter\"},{\"id\":2004110666,\"predicate\":\"dialogFilterSuggested\",\"params\":[{\"name\":\"filter\",\"type\":\"DialogFilter\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"DialogFilterSuggested\"},{\"id\":654302845,\"predicate\":\"updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Update\"},{\"id\":-1512627963,\"predicate\":\"updateDialogFilterOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector<int>\"}],\"type\":\"Update\"},{\"id\":889491791,\"predicate\":\"updateDialogFilters\",\"params\":[],\"type\":\"Update\"},{\"id\":-1237848657,\"predicate\":\"statsDateRangeDays\",\"params\":[{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"StatsDateRangeDays\"},{\"id\":-884757282,\"predicate\":\"statsAbsValueAndPrev\",\"params\":[{\"name\":\"current\",\"type\":\"double\"},{\"name\":\"previous\",\"type\":\"double\"}],\"type\":\"StatsAbsValueAndPrev\"},{\"id\":-875679776,\"predicate\":\"statsPercentValue\",\"params\":[{\"name\":\"part\",\"type\":\"double\"},{\"name\":\"total\",\"type\":\"double\"}],\"type\":\"StatsPercentValue\"},{\"id\":1244130093,\"predicate\":\"statsGraphAsync\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":-1092839390,\"predicate\":\"statsGraphError\",\"params\":[{\"name\":\"error\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":-1901828938,\"predicate\":\"statsGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"json\",\"type\":\"DataJSON\"},{\"name\":\"zoom_token\",\"type\":\"flags.0?string\"}],\"type\":\"StatsGraph\"},{\"id\":-1387279939,\"predicate\":\"messageInteractionCounters\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"MessageInteractionCounters\"},{\"id\":-1107852396,\"predicate\":\"stats.broadcastStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"followers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"views_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"shares_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"enabled_notifications\",\"type\":\"StatsPercentValue\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"followers_graph\",\"type\":\"StatsGraph\"},{\"name\":\"mute_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"iv_interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"views_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_followers_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"recent_message_interactions\",\"type\":\"Vector<MessageInteractionCounters>\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":-428884101,\"predicate\":\"inputMediaDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":1065280907,\"predicate\":\"messageMediaDice\",\"params\":[{\"name\":\"value\",\"type\":\"int\"},{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":-427863538,\"predicate\":\"inputStickerSetDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":-1728664459,\"predicate\":\"help.promoDataEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.PromoData\"},{\"id\":-1942390465,\"predicate\":\"help.promoData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"proxy\",\"type\":\"flags.0?true\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"psa_type\",\"type\":\"flags.1?string\"},{\"name\":\"psa_message\",\"type\":\"flags.2?string\"}],\"type\":\"help.PromoData\"},{\"id\":-567037804,\"predicate\":\"videoSize\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"video_start_ts\",\"type\":\"flags.0?double\"}],\"type\":\"VideoSize\"},{\"id\":643940105,\"predicate\":\"updatePhoneCallSignalingData\",\"params\":[{\"name\":\"phone_call_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Update\"},{\"id\":1634294960,\"predicate\":\"chatInvitePeek\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"},{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"ChatInvite\"},{\"id\":418631927,\"predicate\":\"statsGroupTopPoster\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"int\"},{\"name\":\"avg_chars\",\"type\":\"int\"}],\"type\":\"StatsGroupTopPoster\"},{\"id\":1611985938,\"predicate\":\"statsGroupTopAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"deleted\",\"type\":\"int\"},{\"name\":\"kicked\",\"type\":\"int\"},{\"name\":\"banned\",\"type\":\"int\"}],\"type\":\"StatsGroupTopAdmin\"},{\"id\":831924812,\"predicate\":\"statsGroupTopInviter\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"invitations\",\"type\":\"int\"}],\"type\":\"StatsGroupTopInviter\"},{\"id\":-276825834,\"predicate\":\"stats.megagroupStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"members\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"messages\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"viewers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"posters\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"members_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_members_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"messages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"actions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"weekdays_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_posters\",\"type\":\"Vector<StatsGroupTopPoster>\"},{\"name\":\"top_admins\",\"type\":\"Vector<StatsGroupTopAdmin>\"},{\"name\":\"top_inviters\",\"type\":\"Vector<StatsGroupTopInviter>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":-1096616924,\"predicate\":\"globalPrivacySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archive_and_mute_new_noncontact_peers\",\"type\":\"flags.0?Bool\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":1667228533,\"predicate\":\"phoneConnectionWebrtc\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"turn\",\"type\":\"flags.0?true\"},{\"name\":\"stun\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"password\",\"type\":\"string\"}],\"type\":\"PhoneConnection\"},{\"id\":1107543535,\"predicate\":\"help.countryCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"country_code\",\"type\":\"string\"},{\"name\":\"prefixes\",\"type\":\"flags.0?Vector<string>\"},{\"name\":\"patterns\",\"type\":\"flags.1?Vector<string>\"}],\"type\":\"help.CountryCode\"},{\"id\":-1014526429,\"predicate\":\"help.country\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"hidden\",\"type\":\"flags.0?true\"},{\"name\":\"iso2\",\"type\":\"string\"},{\"name\":\"default_name\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"flags.1?string\"},{\"name\":\"country_codes\",\"type\":\"Vector<help.CountryCode>\"}],\"type\":\"help.Country\"},{\"id\":-1815339214,\"predicate\":\"help.countriesListNotModified\",\"params\":[],\"type\":\"help.CountriesList\"},{\"id\":-2016381538,\"predicate\":\"help.countriesList\",\"params\":[{\"name\":\"countries\",\"type\":\"Vector<help.Country>\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":1163625789,\"predicate\":\"messageViews\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"views\",\"type\":\"flags.0?int\"},{\"name\":\"forwards\",\"type\":\"flags.1?int\"},{\"name\":\"replies\",\"type\":\"flags.2?MessageReplies\"}],\"type\":\"MessageViews\"},{\"id\":1854571743,\"predicate\":\"updateChannelMessageForwards\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-96535659,\"predicate\":\"photoSizeProgressive\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector<int>\"}],\"type\":\"PhotoSize\"},{\"id\":-1228606141,\"predicate\":\"messages.messageViews\",\"params\":[{\"name\":\"views\",\"type\":\"Vector<MessageViews>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.MessageViews\"},{\"id\":482860628,\"predicate\":\"updateReadChannelDiscussionInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"},{\"name\":\"broadcast_id\",\"type\":\"flags.0?int\"},{\"name\":\"broadcast_post\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":1178116716,\"predicate\":\"updateReadChannelDiscussionOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-170029155,\"predicate\":\"messages.discussionMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"max_id\",\"type\":\"flags.0?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"flags.1?int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"flags.2?int\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":-1495959709,\"predicate\":\"messageReplyHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"reply_to_peer_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"reply_to_top_id\",\"type\":\"flags.1?int\"}],\"type\":\"MessageReplyHeader\"},{\"id\":1093204652,\"predicate\":\"messageReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"comments\",\"type\":\"flags.0?true\"},{\"name\":\"replies\",\"type\":\"int\"},{\"name\":\"replies_pts\",\"type\":\"int\"},{\"name\":\"recent_repliers\",\"type\":\"flags.1?Vector<Peer>\"},{\"name\":\"channel_id\",\"type\":\"flags.0?int\"},{\"name\":\"max_id\",\"type\":\"flags.2?int\"},{\"name\":\"read_max_id\",\"type\":\"flags.3?int\"}],\"type\":\"MessageReplies\"},{\"id\":610945826,\"predicate\":\"updatePeerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"blocked\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"id\":-386039788,\"predicate\":\"peerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"PeerBlocked\"},{\"id\":1796675352,\"predicate\":\"updateChannelUserTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":-1392895362,\"predicate\":\"inputMessageCallbackQuery\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"query_id\",\"type\":\"long\"}],\"type\":\"InputMessage\"},{\"id\":453242886,\"predicate\":\"channelParticipantLeft\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"ChannelParticipant\"},{\"id\":-531931925,\"predicate\":\"channelParticipantsMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"q\",\"type\":\"flags.0?string\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-309990731,\"predicate\":\"updatePinnedMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-2054649973,\"predicate\":\"updatePinnedChannelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":464520273,\"predicate\":\"inputMessagesFilterPinned\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1986399595,\"predicate\":\"stats.messageStats\",\"params\":[{\"name\":\"views_graph\",\"type\":\"StatsGraph\"}],\"type\":\"stats.MessageStats\"},{\"id\":-1730095465,\"predicate\":\"messageActionGeoProximityReached\",\"params\":[{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"to_id\",\"type\":\"Peer\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-668906175,\"predicate\":\"photoPathSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":-651419003,\"predicate\":\"speakingInGroupCallAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":2004925620,\"predicate\":\"groupCallDiscarded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"duration\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":-711498484,\"predicate\":\"groupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join_muted\",\"type\":\"flags.1?true\"},{\"name\":\"can_change_join_muted\",\"type\":\"flags.2?true\"},{\"name\":\"join_date_asc\",\"type\":\"flags.6?true\"},{\"name\":\"schedule_start_subscribed\",\"type\":\"flags.8?true\"},{\"name\":\"can_start_video\",\"type\":\"flags.9?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.3?string\"},{\"name\":\"stream_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"record_start_date\",\"type\":\"flags.5?int\"},{\"name\":\"schedule_date\",\"type\":\"flags.7?int\"},{\"name\":\"unmuted_video_count\",\"type\":\"flags.10?int\"},{\"name\":\"unmuted_video_limit\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":-659913713,\"predicate\":\"inputGroupCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGroupCall\"},{\"id\":2047704898,\"predicate\":\"messageActionGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"duration\",\"type\":\"flags.0?int\"}],\"type\":\"MessageAction\"},{\"id\":1991897370,\"predicate\":\"messageActionInviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"MessageAction\"},{\"id\":-341428482,\"predicate\":\"groupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.1?true\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.2?true\"},{\"name\":\"just_joined\",\"type\":\"flags.4?true\"},{\"name\":\"versioned\",\"type\":\"flags.5?true\"},{\"name\":\"min\",\"type\":\"flags.8?true\"},{\"name\":\"muted_by_you\",\"type\":\"flags.9?true\"},{\"name\":\"volume_by_admin\",\"type\":\"flags.10?true\"},{\"name\":\"self\",\"type\":\"flags.12?true\"},{\"name\":\"video_joined\",\"type\":\"flags.15?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"active_date\",\"type\":\"flags.3?int\"},{\"name\":\"source\",\"type\":\"int\"},{\"name\":\"volume\",\"type\":\"flags.7?int\"},{\"name\":\"about\",\"type\":\"flags.11?string\"},{\"name\":\"raise_hand_rating\",\"type\":\"flags.13?long\"},{\"name\":\"video\",\"type\":\"flags.6?GroupCallParticipantVideo\"},{\"name\":\"presentation\",\"type\":\"flags.14?GroupCallParticipantVideo\"}],\"type\":\"GroupCallParticipant\"},{\"id\":321954198,\"predicate\":\"updateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-219423922,\"predicate\":\"updateGroupCallParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participants\",\"type\":\"Vector<GroupCallParticipant>\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1537295973,\"predicate\":\"updateGroupCall\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"call\",\"type\":\"GroupCall\"}],\"type\":\"Update\"},{\"id\":-1636664659,\"predicate\":\"phone.groupCall\",\"params\":[{\"name\":\"call\",\"type\":\"GroupCall\"},{\"name\":\"participants\",\"type\":\"Vector<GroupCallParticipant>\"},{\"name\":\"participants_next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"phone.GroupCall\"},{\"id\":-193506890,\"predicate\":\"phone.groupParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector<GroupCallParticipant>\"},{\"name\":\"next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":813821341,\"predicate\":\"inlineQueryPeerTypeSameBotPM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-2093215828,\"predicate\":\"inlineQueryPeerTypePM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-681130742,\"predicate\":\"inlineQueryPeerTypeChat\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1589952067,\"predicate\":\"inlineQueryPeerTypeMegagroup\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1664413338,\"predicate\":\"inlineQueryPeerTypeBroadcast\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":589338437,\"predicate\":\"channelAdminLogEventActionStartGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-610299584,\"predicate\":\"channelAdminLogEventActionDiscardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-115071790,\"predicate\":\"channelAdminLogEventActionParticipantMute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-431740480,\"predicate\":\"channelAdminLogEventActionParticipantUnmute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1456906823,\"predicate\":\"channelAdminLogEventActionToggleGroupCallSetting\",\"params\":[{\"name\":\"join_muted\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1966921727,\"predicate\":\"inputPaymentCredentialsGooglePay\",\"params\":[{\"name\":\"payment_token\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":375566091,\"predicate\":\"messages.historyImport\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"messages.HistoryImport\"},{\"id\":-606432698,\"predicate\":\"sendMessageHistoryImportAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":1578088377,\"predicate\":\"messages.historyImportParsed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pm\",\"type\":\"flags.0?true\"},{\"name\":\"group\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"flags.2?string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":-170010905,\"predicate\":\"inputReportReasonFake\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-275956116,\"predicate\":\"messages.affectedFoundMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":-1441072131,\"predicate\":\"messageActionSetMessagesTTL\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-1147422299,\"predicate\":\"updatePeerHistoryTTL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"ttl_period\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":-206342113,\"predicate\":\"updateChatParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChatParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChatParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2146218476,\"predicate\":\"updateChannelParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChannelParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":133777546,\"predicate\":\"updateBotStopped\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"stopped\",\"type\":\"Bool\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":507405952,\"predicate\":\"chatInviteImporter\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatInviteImporter\"},{\"id\":-1111085620,\"predicate\":\"messages.exportedChatInvites\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"invites\",\"type\":\"Vector<ExportedChatInvite>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":410107472,\"predicate\":\"messages.exportedChatInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":572915951,\"predicate\":\"messages.exportedChatInviteReplaced\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":-2118733814,\"predicate\":\"messages.chatInviteImporters\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"importers\",\"type\":\"Vector<ChatInviteImporter>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":-539872497,\"predicate\":\"chatAdminWithInvites\",\"params\":[{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"invites_count\",\"type\":\"int\"},{\"name\":\"revoked_invites_count\",\"type\":\"int\"}],\"type\":\"ChatAdminWithInvites\"},{\"id\":-1231326505,\"predicate\":\"messages.chatAdminsWithInvites\",\"params\":[{\"name\":\"admins\",\"type\":\"Vector<ChatAdminWithInvites>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":1557846647,\"predicate\":\"channelAdminLogEventActionParticipantJoinByInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1515256996,\"predicate\":\"channelAdminLogEventActionExportedInviteDelete\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1091179342,\"predicate\":\"channelAdminLogEventActionExportedInviteRevoke\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-384910503,\"predicate\":\"channelAdminLogEventActionExportedInviteEdit\",\"params\":[{\"name\":\"prev_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1048537159,\"predicate\":\"channelAdminLogEventActionParticipantVolume\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1855199800,\"predicate\":\"channelAdminLogEventActionChangeHistoryTTL\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1571952873,\"predicate\":\"messages.checkedHistoryImportPeer\",\"params\":[{\"name\":\"confirm_text\",\"type\":\"string\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":-1146808775,\"predicate\":\"inputGroupCallStream\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"time_ms\",\"type\":\"long\"},{\"name\":\"scale\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":-1343921601,\"predicate\":\"phone.joinAsPeers\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector<Peer>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":541839704,\"predicate\":\"phone.exportedGroupCallInvite\",\"params\":[{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"phone.ExportedGroupCallInvite\"},{\"id\":-672693723,\"predicate\":\"inputBotInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":894081801,\"predicate\":\"botInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1281329567,\"predicate\":\"messageActionGroupCallScheduled\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"schedule_date\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-592373577,\"predicate\":\"groupCallParticipantVideoSourceGroup\",\"params\":[{\"name\":\"semantics\",\"type\":\"string\"},{\"name\":\"sources\",\"type\":\"Vector<int>\"}],\"type\":\"GroupCallParticipantVideoSourceGroup\"},{\"id\":1735736008,\"predicate\":\"groupCallParticipantVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"paused\",\"type\":\"flags.0?true\"},{\"name\":\"endpoint\",\"type\":\"string\"},{\"name\":\"source_groups\",\"type\":\"Vector<GroupCallParticipantVideoSourceGroup>\"},{\"name\":\"audio_source\",\"type\":\"flags.1?int\"}],\"type\":\"GroupCallParticipantVideo\"},{\"id\":192428418,\"predicate\":\"updateGroupCallConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"presentation\",\"type\":\"flags.0?true\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":-2046910401,\"predicate\":\"stickers.suggestedShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"stickers.SuggestedShortName\"},{\"id\":795652779,\"predicate\":\"botCommandScopeDefault\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":1011811544,\"predicate\":\"botCommandScopeUsers\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":1877059713,\"predicate\":\"botCommandScopeChats\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":-1180016534,\"predicate\":\"botCommandScopeChatAdmins\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":-610432643,\"predicate\":\"botCommandScopePeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"BotCommandScope\"},{\"id\":1071145937,\"predicate\":\"botCommandScopePeerAdmins\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"BotCommandScope\"},{\"id\":169026035,\"predicate\":\"botCommandScopePeerUser\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"BotCommandScope\"},{\"id\":-478701471,\"predicate\":\"account.resetPasswordFailedWait\",\"params\":[{\"name\":\"retry_date\",\"type\":\"int\"}],\"type\":\"account.ResetPasswordResult\"},{\"id\":-370148227,\"predicate\":\"account.resetPasswordRequestedWait\",\"params\":[{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"account.ResetPasswordResult\"},{\"id\":-383330754,\"predicate\":\"account.resetPasswordOk\",\"params\":[],\"type\":\"account.ResetPasswordResult\"},{\"id\":-813823885,\"predicate\":\"updateBotCommands\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"commands\",\"type\":\"Vector<BotCommand>\"}],\"type\":\"Update\"}],\"methods\":[{\"id\":-878758099,\"method\":\"invokeAfterMsg\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":1036301552,\"method\":\"invokeAfterMsgs\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1502141361,\"method\":\"auth.sendCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":-2131827673,\"method\":\"auth.signUp\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-1126886015,\"method\":\"auth.signIn\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":1461180992,\"method\":\"auth.logOut\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1616179942,\"method\":\"auth.resetAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":-440401971,\"method\":\"auth.exportAuthorization\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":-470837741,\"method\":\"auth.importAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.Authorization\"},{\"id\":-841733627,\"method\":\"auth.bindTempAuthKey\",\"params\":[{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"},{\"name\":\"encrypted_message\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":1754754159,\"method\":\"account.registerDevice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_muted\",\"type\":\"flags.0?true\"},{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"app_sandbox\",\"type\":\"Bool\"},{\"name\":\"secret\",\"type\":\"bytes\"},{\"name\":\"other_uids\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":813089983,\"method\":\"account.unregisterDevice\",\"params\":[{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"other_uids\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":-2067899501,\"method\":\"account.updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"},{\"name\":\"settings\",\"type\":\"InputPeerNotifySettings\"}],\"type\":\"Bool\"},{\"id\":313765169,\"method\":\"account.getNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"}],\"type\":\"PeerNotifySettings\"},{\"id\":-612493497,\"method\":\"account.resetNotifySettings\",\"params\":[],\"type\":\"Bool\"},{\"id\":2018596725,\"method\":\"account.updateProfile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"first_name\",\"type\":\"flags.0?string\"},{\"name\":\"last_name\",\"type\":\"flags.1?string\"},{\"name\":\"about\",\"type\":\"flags.2?string\"}],\"type\":\"User\"},{\"id\":1713919532,\"method\":\"account.updateStatus\",\"params\":[{\"name\":\"offline\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1430579357,\"method\":\"account.getWallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"account.WallPapers\"},{\"id\":-977650298,\"method\":\"account.reportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":227648840,\"method\":\"users.getUsers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputUser>\"}],\"type\":\"Vector<User>\"},{\"id\":-902781519,\"method\":\"users.getFullUser\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"UserFull\"},{\"id\":749357634,\"method\":\"contacts.getContactIDs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"Vector<int>\"},{\"id\":-995929106,\"method\":\"contacts.getStatuses\",\"params\":[],\"type\":\"Vector<ContactStatus>\"},{\"id\":-1071414113,\"method\":\"contacts.getContacts\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"contacts.Contacts\"},{\"id\":746589157,\"method\":\"contacts.importContacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector<InputContact>\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":157945344,\"method\":\"contacts.deleteContacts\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputUser>\"}],\"type\":\"Updates\"},{\"id\":269745566,\"method\":\"contacts.deleteByPhones\",\"params\":[{\"name\":\"phones\",\"type\":\"Vector<string>\"}],\"type\":\"Bool\"},{\"id\":1758204945,\"method\":\"contacts.block\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1096393392,\"method\":\"contacts.unblock\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-176409329,\"method\":\"contacts.getBlocked\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Blocked\"},{\"id\":1673946374,\"method\":\"messages.getMessages\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputMessage>\"}],\"type\":\"messages.Messages\"},{\"id\":-1594999949,\"method\":\"messages.getDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":-591691168,\"method\":\"messages.getHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":204812012,\"method\":\"messages.search\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"from_id\",\"type\":\"flags.0?InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":238054714,\"method\":\"messages.readHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":469850889,\"method\":\"messages.deleteHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"just_clear\",\"type\":\"flags.0?true\"},{\"name\":\"revoke\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-443640366,\"method\":\"messages.deleteMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":94983360,\"method\":\"messages.receivedMessages\",\"params\":[{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Vector<ReceivedNotifyMessage>\"},{\"id\":1486110434,\"method\":\"messages.setTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Bool\"},{\"id\":1376532592,\"method\":\"messages.sendMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"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\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":881978281,\"method\":\"messages.sendMedia\",\"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\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":-637606386,\"method\":\"messages.forwardMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"with_my_score\",\"type\":\"flags.8?true\"},{\"name\":\"from_peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"},{\"name\":\"random_id\",\"type\":\"Vector<long>\"},{\"name\":\"to_peer\",\"type\":\"InputPeer\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":-820669733,\"method\":\"messages.reportSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":913498268,\"method\":\"messages.getPeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"PeerSettings\"},{\"id\":-1991005362,\"method\":\"messages.report\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1013621127,\"method\":\"messages.getChats\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.Chats\"},{\"id\":998448230,\"method\":\"messages.getFullChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"messages.ChatFull\"},{\"id\":-599447467,\"method\":\"messages.editChatTitle\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-900957736,\"method\":\"messages.editChatPhoto\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":-106911223,\"method\":\"messages.addChatUser\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"fwd_limit\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-986430054,\"method\":\"messages.deleteChatUser\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":164303470,\"method\":\"messages.createChat\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<InputUser>\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-304838614,\"method\":\"updates.getState\",\"params\":[],\"type\":\"updates.State\"},{\"id\":630429265,\"method\":\"updates.getDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_total_limit\",\"type\":\"flags.0?int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":1926525996,\"method\":\"photos.updateProfilePhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"photos.Photo\"},{\"id\":-1980559511,\"method\":\"photos.uploadProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"}],\"type\":\"photos.Photo\"},{\"id\":-2016444625,\"method\":\"photos.deletePhotos\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputPhoto>\"}],\"type\":\"Vector<long>\"},{\"id\":-1291540959,\"method\":\"upload.saveFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1319462148,\"method\":\"upload.getFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"precise\",\"type\":\"flags.0?true\"},{\"name\":\"cdn_supported\",\"type\":\"flags.1?true\"},{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.File\"},{\"id\":-990308245,\"method\":\"help.getConfig\",\"params\":[],\"type\":\"Config\"},{\"id\":531836966,\"method\":\"help.getNearestDc\",\"params\":[],\"type\":\"NearestDc\"},{\"id\":1378703997,\"method\":\"help.getAppUpdate\",\"params\":[{\"name\":\"source\",\"type\":\"string\"}],\"type\":\"help.AppUpdate\"},{\"id\":1295590211,\"method\":\"help.getInviteText\",\"params\":[],\"type\":\"help.InviteText\"},{\"id\":-1848823128,\"method\":\"photos.getUserPhotos\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"photos.Photos\"},{\"id\":651135312,\"method\":\"messages.getDhConfig\",\"params\":[{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random_length\",\"type\":\"int\"}],\"type\":\"messages.DhConfig\"},{\"id\":-162681021,\"method\":\"messages.requestEncryption\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":1035731989,\"method\":\"messages.acceptEncryption\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":-208425312,\"method\":\"messages.discardEncryption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":2031374829,\"method\":\"messages.setEncryptedTyping\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"typing\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2135648522,\"method\":\"messages.readEncryptedHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1157265941,\"method\":\"messages.sendEncrypted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":1431914525,\"method\":\"messages.sendEncryptedFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":852769188,\"method\":\"messages.sendEncryptedService\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":1436924774,\"method\":\"messages.receivedQueue\",\"params\":[{\"name\":\"max_qts\",\"type\":\"int\"}],\"type\":\"Vector<long>\"},{\"id\":1259113487,\"method\":\"messages.reportEncryptedSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"}],\"type\":\"Bool\"},{\"id\":-562337987,\"method\":\"upload.saveBigFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"file_total_parts\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1043505495,\"method\":\"initConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"system_lang_code\",\"type\":\"string\"},{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"proxy\",\"type\":\"flags.0?InputClientProxy\"},{\"name\":\"params\",\"type\":\"flags.1?JSONValue\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1663104819,\"method\":\"help.getSupport\",\"params\":[],\"type\":\"help.Support\"},{\"id\":916930423,\"method\":\"messages.readMessageContents\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":655677548,\"method\":\"account.checkUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1040964988,\"method\":\"account.updateUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":301470424,\"method\":\"contacts.search\",\"params\":[{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Found\"},{\"id\":-623130288,\"method\":\"account.getPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-906486552,\"method\":\"account.setPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector<InputPrivacyRule>\"}],\"type\":\"account.PrivacyRules\"},{\"id\":1099779595,\"method\":\"account.deleteAccount\",\"params\":[{\"name\":\"reason\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":150761757,\"method\":\"account.getAccountTTL\",\"params\":[],\"type\":\"AccountDaysTTL\"},{\"id\":608323678,\"method\":\"account.setAccountTTL\",\"params\":[{\"name\":\"ttl\",\"type\":\"AccountDaysTTL\"}],\"type\":\"Bool\"},{\"id\":-627372787,\"method\":\"invokeWithLayer\",\"params\":[{\"name\":\"layer\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-113456221,\"method\":\"contacts.resolveUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":-2108208411,\"method\":\"account.sendChangePhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1891839707,\"method\":\"account.changePhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":71126828,\"method\":\"messages.getStickers\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Stickers\"},{\"id\":479598769,\"method\":\"messages.getAllStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AllStickers\"},{\"id\":954152242,\"method\":\"account.updateDeviceLocked\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1738800940,\"method\":\"auth.importBotAuthorization\",\"params\":[{\"name\":\"flags\",\"type\":\"int\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"bot_auth_token\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-1956073268,\"method\":\"messages.getWebPagePreview\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"}],\"type\":\"MessageMedia\"},{\"id\":-484392616,\"method\":\"account.getAuthorizations\",\"params\":[],\"type\":\"account.Authorizations\"},{\"id\":-545786948,\"method\":\"account.resetAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1418342645,\"method\":\"account.getPassword\",\"params\":[],\"type\":\"account.Password\"},{\"id\":-1663767815,\"method\":\"account.getPasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"account.PasswordSettings\"},{\"id\":-1516564433,\"method\":\"account.updatePasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"new_settings\",\"type\":\"account.PasswordInputSettings\"}],\"type\":\"Bool\"},{\"id\":-779399914,\"method\":\"auth.checkPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"auth.Authorization\"},{\"id\":-661144474,\"method\":\"auth.requestPasswordRecovery\",\"params\":[],\"type\":\"auth.PasswordRecovery\"},{\"id\":923364464,\"method\":\"auth.recoverPassword\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"code\",\"type\":\"string\"},{\"name\":\"new_settings\",\"type\":\"flags.0?account.PasswordInputSettings\"}],\"type\":\"auth.Authorization\"},{\"id\":-1080796745,\"method\":\"invokeWithoutUpdates\",\"params\":[{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":347716823,\"method\":\"messages.exportChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"legacy_revoke_permanent\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1051570619,\"method\":\"messages.checkChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"ChatInvite\"},{\"id\":1817183516,\"method\":\"messages.importChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":639215886,\"method\":\"messages.getStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"messages.StickerSet\"},{\"id\":-946871200,\"method\":\"messages.installStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"archived\",\"type\":\"Bool\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":-110209570,\"method\":\"messages.uninstallStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":-421563528,\"method\":\"messages.startBot\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-1877938321,\"method\":\"help.getAppChangelog\",\"params\":[{\"name\":\"prev_app_version\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1468322785,\"method\":\"messages.getMessagesViews\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"},{\"name\":\"increment\",\"type\":\"Bool\"}],\"type\":\"messages.MessageViews\"},{\"id\":-871347913,\"method\":\"channels.readHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-2067661490,\"method\":\"channels.deleteMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":-787622117,\"method\":\"channels.deleteUserHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-32999408,\"method\":\"channels.reportSpam\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":-1383294429,\"method\":\"channels.getMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector<InputMessage>\"}],\"type\":\"messages.Messages\"},{\"id\":306054633,\"method\":\"channels.getParticipants\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelParticipantsFilter\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":-1599378234,\"method\":\"channels.getParticipant\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":176122811,\"method\":\"channels.getChannels\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputChannel>\"}],\"type\":\"messages.Chats\"},{\"id\":141781513,\"method\":\"channels.getFullChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"messages.ChatFull\"},{\"id\":1029681423,\"method\":\"channels.createChannel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.0?true\"},{\"name\":\"megagroup\",\"type\":\"flags.1?true\"},{\"name\":\"for_import\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"geo_point\",\"type\":\"flags.2?InputGeoPoint\"},{\"name\":\"address\",\"type\":\"flags.2?string\"}],\"type\":\"Updates\"},{\"id\":-751007486,\"method\":\"channels.editAdmin\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1450044624,\"method\":\"channels.editTitle\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-248621111,\"method\":\"channels.editPhoto\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":283557164,\"method\":\"channels.checkUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":890549214,\"method\":\"channels.updateUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":615851205,\"method\":\"channels.joinChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":-130635115,\"method\":\"channels.leaveChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":429865580,\"method\":\"channels.inviteToChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"users\",\"type\":\"Vector<InputUser>\"}],\"type\":\"Updates\"},{\"id\":-1072619549,\"method\":\"channels.deleteChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":51854712,\"method\":\"updates.getChannelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelMessagesFilter\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1444503762,\"method\":\"messages.editChatAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"is_admin\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":363051235,\"method\":\"messages.migrateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1271290010,\"method\":\"messages.searchGlobal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":2016638777,\"method\":\"messages.reorderStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"order\",\"type\":\"Vector<long>\"}],\"type\":\"Bool\"},{\"id\":864953444,\"method\":\"messages.getDocumentByHash\",\"params\":[{\"name\":\"sha256\",\"type\":\"bytes\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":-2084618926,\"method\":\"messages.getSavedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.SavedGifs\"},{\"id\":846868683,\"method\":\"messages.saveGif\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1364105629,\"method\":\"messages.getInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"geo_point\",\"type\":\"flags.0?InputGeoPoint\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"messages.BotResults\"},{\"id\":-346119674,\"method\":\"messages.setInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"private\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"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\":570955184,\"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\":\"hide_via\",\"type\":\"flags.11?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\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":-432034325,\"method\":\"channels.exportMessageLink\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"grouped\",\"type\":\"flags.0?true\"},{\"name\":\"thread\",\"type\":\"flags.1?true\"},{\"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\":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\":1224152952,\"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\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"},{\"name\":\"schedule_date\",\"type\":\"flags.15?int\"}],\"type\":\"Updates\"},{\"id\":-2091549254,\"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\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"}],\"type\":\"Bool\"},{\"id\":-1824339449,\"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\"},{\"name\":\"password\",\"type\":\"flags.2?InputCheckPasswordSRP\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":-712043766,\"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\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"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\":\"phone_calls\",\"type\":\"flags.3?true\"},{\"name\":\"forward_users\",\"type\":\"flags.4?true\"},{\"name\":\"forward_chats\",\"type\":\"flags.5?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\":-462373635,\"method\":\"messages.getPeerDialogs\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector<InputDialogPeer>\"}],\"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\":\"messages.getRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.RecentStickers\"},{\"id\":958863608,\"method\":\"messages.saveRecentSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1986437075,\"method\":\"messages.clearRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":1475442322,\"method\":\"messages.getArchivedStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"offset_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":457157256,\"method\":\"account.sendConfirmPhoneCode\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1596029123,\"method\":\"account.confirmPhone\",\"params\":[{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-122669393,\"method\":\"channels.getAdminedPublicChannels\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"by_location\",\"type\":\"flags.0?true\"},{\"name\":\"check_limit\",\"type\":\"flags.1?true\"}],\"type\":\"messages.Chats\"},{\"id\":1706608543,\"method\":\"messages.getMaskStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AllStickers\"},{\"id\":-866424884,\"method\":\"messages.getAttachedStickers\",\"params\":[{\"name\":\"media\",\"type\":\"InputStickeredMedia\"}],\"type\":\"Vector<StickerSetCovered>\"},{\"id\":-1907842680,\"method\":\"auth.dropTempAuthKeys\",\"params\":[{\"name\":\"except_auth_keys\",\"type\":\"Vector<long>\"}],\"type\":\"Bool\"},{\"id\":-1896289088,\"method\":\"messages.setGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":363700068,\"method\":\"messages.setInlineGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-400399203,\"method\":\"messages.getGameHighScores\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":258170395,\"method\":\"messages.getInlineGameHighScores\",\"params\":[{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":218777796,\"method\":\"messages.getCommonChats\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":-341307408,\"method\":\"messages.getAllChats\",\"params\":[{\"name\":\"except_ids\",\"type\":\"Vector<int>\"}],\"type\":\"messages.Chats\"},{\"id\":-333262899,\"method\":\"help.setBotUpdatesStatus\",\"params\":[{\"name\":\"pending_updates_count\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":852135825,\"method\":\"messages.getWebPage\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":-1489903017,\"method\":\"messages.toggleDialogPin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":991616823,\"method\":\"messages.reorderPinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"int\"},{\"name\":\"order\",\"type\":\"Vector<InputDialogPeer>\"}],\"type\":\"Bool\"},{\"id\":-692498958,\"method\":\"messages.getPinnedDialogs\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-1440257555,\"method\":\"bots.sendCustomRequest\",\"params\":[{\"name\":\"custom_method\",\"type\":\"string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"DataJSON\"},{\"id\":-434028723,\"method\":\"bots.answerWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":619086221,\"method\":\"upload.getWebFile\",\"params\":[{\"name\":\"location\",\"type\":\"InputWebFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.WebFile\"},{\"id\":-1976353651,\"method\":\"payments.getPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"theme_params\",\"type\":\"flags.0?DataJSON\"}],\"type\":\"payments.PaymentForm\"},{\"id\":611897804,\"method\":\"payments.getPaymentReceipt\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":-619695760,\"method\":\"payments.validateRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"info\",\"type\":\"PaymentRequestedInfo\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":818134173,\"method\":\"payments.sendPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"requested_info_id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"credentials\",\"type\":\"InputPaymentCredentials\"},{\"name\":\"tip_amount\",\"type\":\"flags.2?long\"}],\"type\":\"payments.PaymentResult\"},{\"id\":1151208273,\"method\":\"account.getTmpPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":578650699,\"method\":\"payments.getSavedInfo\",\"params\":[],\"type\":\"payments.SavedInfo\"},{\"id\":-667062079,\"method\":\"payments.clearSavedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"credentials\",\"type\":\"flags.0?true\"},{\"name\":\"info\",\"type\":\"flags.1?true\"}],\"type\":\"Bool\"},{\"id\":-436833542,\"method\":\"messages.setBotShippingResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector<ShippingOption>\"}],\"type\":\"Bool\"},{\"id\":163765653,\"method\":\"messages.setBotPrecheckoutResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"}],\"type\":\"Bool\"},{\"id\":-1876841625,\"method\":\"stickers.createStickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"animated\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"stickers\",\"type\":\"Vector<InputStickerSetItem>\"},{\"name\":\"software\",\"type\":\"flags.3?string\"}],\"type\":\"messages.StickerSet\"},{\"id\":-143257775,\"method\":\"stickers.removeStickerFromSet\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":-4795190,\"method\":\"stickers.changeStickerPosition\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"},{\"name\":\"position\",\"type\":\"int\"}],\"type\":\"messages.StickerSet\"},{\"id\":-2041315650,\"method\":\"stickers.addStickerToSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"sticker\",\"type\":\"InputStickerSetItem\"}],\"type\":\"messages.StickerSet\"},{\"id\":1369162417,\"method\":\"messages.uploadMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":1430593449,\"method\":\"phone.getCallConfig\",\"params\":[],\"type\":\"DataJSON\"},{\"id\":1124046573,\"method\":\"phone.requestCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":1003664544,\"method\":\"phone.acceptCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":788404002,\"method\":\"phone.confirmCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":399855457,\"method\":\"phone.receivedCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"}],\"type\":\"Bool\"},{\"id\":-1295269440,\"method\":\"phone.discardCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"reason\",\"type\":\"PhoneCallDiscardReason\"},{\"name\":\"connection_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":1508562471,\"method\":\"phone.setCallRating\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_initiative\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"rating\",\"type\":\"int\"},{\"name\":\"comment\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":662363518,\"method\":\"phone.saveCallDebug\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"debug\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":536919235,\"method\":\"upload.getCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.CdnFile\"},{\"id\":-1691921240,\"method\":\"upload.reuploadCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"Vector<FileHash>\"},{\"id\":1375900482,\"method\":\"help.getCdnConfig\",\"params\":[],\"type\":\"CdnConfig\"},{\"id\":-219008246,\"method\":\"langpack.getLangPack\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackDifference\"},{\"id\":-269862909,\"method\":\"langpack.getStrings\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"keys\",\"type\":\"Vector<string>\"}],\"type\":\"Vector<LangPackString>\"},{\"id\":-845657435,\"method\":\"langpack.getDifference\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"LangPackDifference\"},{\"id\":1120311183,\"method\":\"langpack.getLanguages\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"}],\"type\":\"Vector<LangPackLanguage>\"},{\"id\":-1763259007,\"method\":\"channels.editBanned\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":870184064,\"method\":\"channels.getAdminLog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"events_filter\",\"type\":\"flags.0?ChannelAdminLogEventsFilter\"},{\"name\":\"admins\",\"type\":\"flags.1?Vector<InputUser>\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"min_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":1302676017,\"method\":\"upload.getCdnFileHashes\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"Vector<FileHash>\"},{\"id\":-914493408,\"method\":\"messages.sendScreenshotNotification\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":-359881479,\"method\":\"channels.setStickers\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":567151374,\"method\":\"messages.getFavedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FavedStickers\"},{\"id\":-1174420133,\"method\":\"messages.faveSticker\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unfave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-357180360,\"method\":\"channels.readMessageContents\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":-2020263951,\"method\":\"contacts.resetSaved\",\"params\":[],\"type\":\"Bool\"},{\"id\":1180140658,\"method\":\"messages.getUnreadMentions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1355375294,\"method\":\"channels.deleteHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1036054804,\"method\":\"help.getRecentMeUrls\",\"params\":[{\"name\":\"referer\",\"type\":\"string\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":-356796084,\"method\":\"channels.togglePreHistoryHidden\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":251759059,\"method\":\"messages.readMentions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-1144759543,\"method\":\"messages.getRecentLocations\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-872345397,\"method\":\"messages.sendMultiMedia\",\"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\":\"multi_media\",\"type\":\"Vector<InputSingleMedia>\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":1347929239,\"method\":\"messages.uploadEncryptedFile\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"EncryptedFile\"},{\"id\":405695855,\"method\":\"account.getWebAuthorizations\",\"params\":[],\"type\":\"account.WebAuthorizations\"},{\"id\":755087855,\"method\":\"account.resetWebAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1747789204,\"method\":\"account.resetWebAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1028140917,\"method\":\"messages.searchStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_featured\",\"type\":\"flags.0?true\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":-956147407,\"method\":\"upload.getFileHashes\",\"params\":[{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"Vector<FileHash>\"},{\"id\":749019089,\"method\":\"help.getTermsOfServiceUpdate\",\"params\":[],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":-294455398,\"method\":\"help.acceptTermsOfService\",\"params\":[{\"name\":\"id\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":-1299661699,\"method\":\"account.getAllSecureValues\",\"params\":[],\"type\":\"Vector<SecureValue>\"},{\"id\":1936088002,\"method\":\"account.getSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector<SecureValueType>\"}],\"type\":\"Vector<SecureValue>\"},{\"id\":-1986010339,\"method\":\"account.saveSecureValue\",\"params\":[{\"name\":\"value\",\"type\":\"InputSecureValue\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureValue\"},{\"id\":-1199522741,\"method\":\"account.deleteSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector<SecureValueType>\"}],\"type\":\"Bool\"},{\"id\":-1865902923,\"method\":\"users.setSecureValueErrors\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"errors\",\"type\":\"Vector<SecureValueError>\"}],\"type\":\"Bool\"},{\"id\":-1200903967,\"method\":\"account.getAuthorizationForm\",\"params\":[{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":-419267436,\"method\":\"account.acceptAuthorization\",\"params\":[{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"},{\"name\":\"value_hashes\",\"type\":\"Vector<SecureValueHash>\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"Bool\"},{\"id\":-1516022023,\"method\":\"account.sendVerifyPhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1305716726,\"method\":\"account.verifyPhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1880182943,\"method\":\"account.sendVerifyEmailCode\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"account.SentEmailCode\"},{\"id\":-323339813,\"method\":\"account.verifyEmail\",\"params\":[{\"name\":\"email\",\"type\":\"string\"},{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1072547679,\"method\":\"help.getDeepLinkInfo\",\"params\":[{\"name\":\"path\",\"type\":\"string\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":-2098076769,\"method\":\"contacts.getSaved\",\"params\":[],\"type\":\"Vector<SavedContact>\"},{\"id\":-2092831552,\"method\":\"channels.getLeftChannels\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":-262453244,\"method\":\"account.initTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"message_users\",\"type\":\"flags.1?true\"},{\"name\":\"message_chats\",\"type\":\"flags.2?true\"},{\"name\":\"message_megagroups\",\"type\":\"flags.3?true\"},{\"name\":\"message_channels\",\"type\":\"flags.4?true\"},{\"name\":\"files\",\"type\":\"flags.5?true\"},{\"name\":\"file_max_size\",\"type\":\"flags.5?int\"}],\"type\":\"account.Takeout\"},{\"id\":489050862,\"method\":\"account.finishTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":486505992,\"method\":\"messages.getSplitRanges\",\"params\":[],\"type\":\"Vector<MessageRange>\"},{\"id\":911373810,\"method\":\"invokeWithMessagesRange\",\"params\":[{\"name\":\"range\",\"type\":\"MessageRange\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1398145746,\"method\":\"invokeWithTakeout\",\"params\":[{\"name\":\"takeout_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1031349873,\"method\":\"messages.markDialogUnread\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":585256482,\"method\":\"messages.getDialogUnreadMarks\",\"params\":[],\"type\":\"Vector<DialogPeer>\"},{\"id\":-2062238246,\"method\":\"contacts.toggleTopPeers\",\"params\":[{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2119757468,\"method\":\"messages.clearAllDrafts\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1735311088,\"method\":\"help.getAppConfig\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":1862465352,\"method\":\"help.saveAppLog\",\"params\":[{\"name\":\"events\",\"type\":\"Vector<InputAppEvent>\"}],\"type\":\"Bool\"},{\"id\":-966677240,\"method\":\"help.getPassportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.PassportConfig\"},{\"id\":1784243458,\"method\":\"langpack.getLanguage\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":-760547348,\"method\":\"messages.updatePinnedMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"unpin\",\"type\":\"flags.1?true\"},{\"name\":\"pm_oneside\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1881204448,\"method\":\"account.confirmPasswordEmail\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":2055154197,\"method\":\"account.resendPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1043606090,\"method\":\"account.cancelPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":-748624084,\"method\":\"help.getSupportName\",\"params\":[],\"type\":\"help.SupportName\"},{\"id\":59377875,\"method\":\"help.getUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"help.UserInfo\"},{\"id\":1723407216,\"method\":\"help.editUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector<MessageEntity>\"}],\"type\":\"help.UserInfo\"},{\"id\":-1626880216,\"method\":\"account.getContactSignUpNotification\",\"params\":[],\"type\":\"Bool\"},{\"id\":-806076575,\"method\":\"account.setContactSignUpNotification\",\"params\":[{\"name\":\"silent\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1398240377,\"method\":\"account.getNotifyExceptions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"compare_sound\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"flags.0?InputNotifyPeer\"}],\"type\":\"Updates\"},{\"id\":283795844,\"method\":\"messages.sendVote\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector<bytes>\"}],\"type\":\"Updates\"},{\"id\":1941660731,\"method\":\"messages.getPollResults\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1848369232,\"method\":\"messages.getOnlines\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"ChatOnlines\"},{\"id\":-2127811866,\"method\":\"messages.getStatsURL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"params\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"id\":-554301545,\"method\":\"messages.editChatAbout\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"about\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-1517917375,\"method\":\"messages.editChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":-57811990,\"method\":\"account.getWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"}],\"type\":\"WallPaper\"},{\"id\":-578472351,\"method\":\"account.uploadWallPaper\",\"params\":[{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":1817860919,\"method\":\"account.saveWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"unsave\",\"type\":\"Bool\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":-18000023,\"method\":\"account.installWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":-1153722364,\"method\":\"account.resetWallPapers\",\"params\":[],\"type\":\"Bool\"},{\"id\":1457130303,\"method\":\"account.getAutoDownloadSettings\",\"params\":[],\"type\":\"account.AutoDownloadSettings\"},{\"id\":1995661875,\"method\":\"account.saveAutoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"low\",\"type\":\"flags.0?true\"},{\"name\":\"high\",\"type\":\"flags.1?true\"},{\"name\":\"settings\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"Bool\"},{\"id\":899735650,\"method\":\"messages.getEmojiKeywords\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":352892591,\"method\":\"messages.getEmojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":1318675378,\"method\":\"messages.getEmojiKeywordsLanguages\",\"params\":[{\"name\":\"lang_codes\",\"type\":\"Vector<string>\"}],\"type\":\"Vector<EmojiLanguage>\"},{\"id\":-709817306,\"method\":\"messages.getEmojiURL\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":1749536939,\"method\":\"folders.editPeerFolders\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector<InputFolderPeer>\"}],\"type\":\"Updates\"},{\"id\":472471681,\"method\":\"folders.deleteFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1932455680,\"method\":\"messages.getSearchCounters\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"filters\",\"type\":\"Vector<MessagesFilter>\"}],\"type\":\"Vector<messages.SearchCounter>\"},{\"id\":-170208392,\"method\":\"channels.getGroupsForDiscussion\",\"params\":[],\"type\":\"messages.Chats\"},{\"id\":1079520178,\"method\":\"channels.setDiscussionGroup\",\"params\":[{\"name\":\"broadcast\",\"type\":\"InputChannel\"},{\"name\":\"group\",\"type\":\"InputChannel\"}],\"type\":\"Bool\"},{\"id\":428848198,\"method\":\"messages.requestUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1322487515,\"method\":\"messages.acceptUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"write_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":1336717624,\"method\":\"messages.hidePeerSettingsBar\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-386636848,\"method\":\"contacts.addContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"add_phone_privacy_exception\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-130964977,\"method\":\"contacts.acceptContact\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":-1892102881,\"method\":\"channels.editCreator\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"Updates\"},{\"id\":-750207932,\"method\":\"contacts.getLocated\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"background\",\"type\":\"flags.1?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"self_expires\",\"type\":\"flags.0?int\"}],\"type\":\"Updates\"},{\"id\":1491484525,\"method\":\"channels.editLocation\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-304832784,\"method\":\"channels.toggleSlowMode\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"seconds\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-490575781,\"method\":\"messages.getScheduledHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1111817116,\"method\":\"messages.getScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.Messages\"},{\"id\":-1120369398,\"method\":\"messages.sendScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"Updates\"},{\"id\":1504586518,\"method\":\"messages.deleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"Updates\"},{\"id\":473805619,\"method\":\"account.uploadTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.0?InputFile\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":-2077048289,\"method\":\"account.createTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?InputThemeSettings\"}],\"type\":\"Theme\"},{\"id\":1555261397,\"method\":\"account.updateTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"slug\",\"type\":\"flags.0?string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?InputThemeSettings\"}],\"type\":\"Theme\"},{\"id\":-229175188,\"method\":\"account.saveTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2061776695,\"method\":\"account.installTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"format\",\"type\":\"flags.1?string\"},{\"name\":\"theme\",\"type\":\"flags.1?InputTheme\"}],\"type\":\"Bool\"},{\"id\":-1919060949,\"method\":\"account.getTheme\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"Theme\"},{\"id\":676939512,\"method\":\"account.getThemes\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"account.Themes\"},{\"id\":-1313598185,\"method\":\"auth.exportLoginToken\",\"params\":[{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"except_ids\",\"type\":\"Vector<int>\"}],\"type\":\"auth.LoginToken\"},{\"id\":-1783866140,\"method\":\"auth.importLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":-392909491,\"method\":\"auth.acceptLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"Authorization\"},{\"id\":-1250643605,\"method\":\"account.setContentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":-1952756306,\"method\":\"account.getContentSettings\",\"params\":[],\"type\":\"account.ContentSettings\"},{\"id\":300429806,\"method\":\"channels.getInactiveChannels\",\"params\":[],\"type\":\"messages.InactiveChats\"},{\"id\":1705865692,\"method\":\"account.getMultiWallPapers\",\"params\":[{\"name\":\"wallpapers\",\"type\":\"Vector<InputWallPaper>\"}],\"type\":\"Vector<WallPaper>\"},{\"id\":-1200736242,\"method\":\"messages.getPollVotes\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"option\",\"type\":\"flags.0?bytes\"},{\"name\":\"offset\",\"type\":\"flags.1?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.VotesList\"},{\"id\":-1257951254,\"method\":\"messages.toggleStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"uninstall\",\"type\":\"flags.0?true\"},{\"name\":\"archive\",\"type\":\"flags.1?true\"},{\"name\":\"unarchive\",\"type\":\"flags.2?true\"},{\"name\":\"stickersets\",\"type\":\"Vector<InputStickerSet>\"}],\"type\":\"Bool\"},{\"id\":779736953,\"method\":\"payments.getBankCardData\",\"params\":[{\"name\":\"number\",\"type\":\"string\"}],\"type\":\"payments.BankCardData\"},{\"id\":-241247891,\"method\":\"messages.getDialogFilters\",\"params\":[],\"type\":\"Vector<DialogFilter>\"},{\"id\":-1566780372,\"method\":\"messages.getSuggestedDialogFilters\",\"params\":[],\"type\":\"Vector<DialogFilterSuggested>\"},{\"id\":450142282,\"method\":\"messages.updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Bool\"},{\"id\":-983318044,\"method\":\"messages.updateDialogFiltersOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":-1421720550,\"method\":\"stats.getBroadcastStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":1646092192,\"method\":\"stats.loadAsyncGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"x\",\"type\":\"flags.0?long\"}],\"type\":\"StatsGraph\"},{\"id\":-1707717072,\"method\":\"stickers.setStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":85399130,\"method\":\"bots.setBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"commands\",\"type\":\"Vector<BotCommand>\"}],\"type\":\"Bool\"},{\"id\":1608974939,\"method\":\"messages.getOldFeaturedStickers\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-1063816159,\"method\":\"help.getPromoData\",\"params\":[],\"type\":\"help.PromoData\"},{\"id\":505748629,\"method\":\"help.hidePromoData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-8744061,\"method\":\"phone.sendSignalingData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-589330937,\"method\":\"stats.getMegagroupStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":-349483786,\"method\":\"account.getGlobalPrivacySettings\",\"params\":[],\"type\":\"GlobalPrivacySettings\"},{\"id\":517647042,\"method\":\"account.setGlobalPrivacySettings\",\"params\":[{\"name\":\"settings\",\"type\":\"GlobalPrivacySettings\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":-183649631,\"method\":\"help.dismissSuggestion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"suggestion\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1935116200,\"method\":\"help.getCountriesList\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":615875002,\"method\":\"messages.getReplies\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":1147761405,\"method\":\"messages.getDiscussionMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":-147740172,\"method\":\"messages.readDiscussion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":698914348,\"method\":\"contacts.blockFromReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_message\",\"type\":\"flags.0?true\"},{\"name\":\"delete_history\",\"type\":\"flags.1?true\"},{\"name\":\"report_spam\",\"type\":\"flags.2?true\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1445996571,\"method\":\"stats.getMessagePublicForwards\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1226791947,\"method\":\"stats.getMessageStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"stats.MessageStats\"},{\"id\":-265962357,\"method\":\"messages.unpinAllMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1221445336,\"method\":\"phone.createGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"schedule_date\",\"type\":\"flags.1?int\"}],\"type\":\"Updates\"},{\"id\":-1322057861,\"method\":\"phone.joinGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"video_stopped\",\"type\":\"flags.2?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"},{\"name\":\"invite_hash\",\"type\":\"flags.1?string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":1342404601,\"method\":\"phone.leaveGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"source\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":2067345760,\"method\":\"phone.inviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector<InputUser>\"}],\"type\":\"Updates\"},{\"id\":2054648117,\"method\":\"phone.discardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":1958458429,\"method\":\"phone.toggleGroupCallSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reset_invite_hash\",\"type\":\"flags.1?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_muted\",\"type\":\"flags.0?Bool\"}],\"type\":\"Updates\"},{\"id\":68699611,\"method\":\"phone.getGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupCall\"},{\"id\":-984033109,\"method\":\"phone.getGroupParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"ids\",\"type\":\"Vector<InputPeer>\"},{\"name\":\"sources\",\"type\":\"Vector<int>\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":-1248003721,\"method\":\"phone.checkGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"sources\",\"type\":\"Vector<int>\"}],\"type\":\"Vector<int>\"},{\"id\":-2094760687,\"method\":\"messages.deleteChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-104078327,\"method\":\"messages.deletePhoneCallHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":1140726259,\"method\":\"messages.checkHistoryImport\",\"params\":[{\"name\":\"import_head\",\"type\":\"string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":873008187,\"method\":\"messages.initHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"media_count\",\"type\":\"int\"}],\"type\":\"messages.HistoryImport\"},{\"id\":713433234,\"method\":\"messages.uploadImportedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":-1271008444,\"method\":\"messages.startHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":-1565154314,\"method\":\"messages.getExportedChatInvites\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"},{\"name\":\"offset_date\",\"type\":\"flags.2?int\"},{\"name\":\"offset_link\",\"type\":\"flags.2?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":1937010524,\"method\":\"messages.getExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":48562110,\"method\":\"messages.editExportedChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":1452833749,\"method\":\"messages.deleteRevokedExportedChatInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"}],\"type\":\"Bool\"},{\"id\":-731601877,\"method\":\"messages.deleteExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":958457583,\"method\":\"messages.getAdminsWithInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":654013065,\"method\":\"messages.getChatInviteImporters\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_user\",\"type\":\"InputUser\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":-1207017500,\"method\":\"messages.setHistoryTTL\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-91437323,\"method\":\"account.reportProfilePhoto\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"InputPhoto\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":187239529,\"method\":\"channels.convertToGigagroup\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":1573261059,\"method\":\"messages.checkHistoryImportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":-1070962985,\"method\":\"phone.toggleGroupCallRecord\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"start\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"flags.1?string\"}],\"type\":\"Updates\"},{\"id\":-1524155713,\"method\":\"phone.editGroupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"muted\",\"type\":\"flags.0?Bool\"},{\"name\":\"volume\",\"type\":\"flags.1?int\"},{\"name\":\"raise_hand\",\"type\":\"flags.2?Bool\"},{\"name\":\"video_stopped\",\"type\":\"flags.3?Bool\"},{\"name\":\"video_paused\",\"type\":\"flags.4?Bool\"},{\"name\":\"presentation_paused\",\"type\":\"flags.5?Bool\"}],\"type\":\"Updates\"},{\"id\":480685066,\"method\":\"phone.editGroupCallTitle\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-277077702,\"method\":\"phone.getGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":-425040769,\"method\":\"phone.exportGroupCallInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"phone.ExportedGroupCallInvite\"},{\"id\":563885286,\"method\":\"phone.toggleGroupCallStartSubscription\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"subscribed\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1451287362,\"method\":\"phone.startScheduledGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":1465786252,\"method\":\"phone.saveDefaultGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-873829436,\"method\":\"phone.joinGroupCallPresentation\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":475058500,\"method\":\"phone.leaveGroupCallPresentation\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":676017721,\"method\":\"stickers.checkShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1303364867,\"method\":\"stickers.suggestShortName\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"stickers.SuggestedShortName\"},{\"id\":1032708345,\"method\":\"bots.resetBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-481554986,\"method\":\"bots.getBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Vector<BotCommand>\"},{\"id\":-1828139493,\"method\":\"account.resetPassword\",\"params\":[],\"type\":\"account.ResetPasswordResult\"},{\"id\":1284770294,\"method\":\"account.declinePasswordReset\",\"params\":[],\"type\":\"Bool\"},{\"id\":221691769,\"method\":\"auth.checkRecoveryPassword\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"}]},\"layer\":131} as {\r\n MTProto: {\r\n constructors: MTProtoConstructor[],\r\n methods: MTProtoMethod[],\r\n constructorsIndex?: {[id: number]: number}\r\n },\r\n API: {\r\n constructors: MTProtoConstructor[],\r\n methods: MTProtoMethod[],\r\n constructorsIndex?: {[id: number]: number}\r\n },\r\n layer: number,\r\n};\r\n","var S = new Uint8Array(256);\nvar Si = new Uint8Array(256);\nvar T1 = new Uint32Array(256);\nvar T2 = new Uint32Array(256);\nvar T3 = new Uint32Array(256);\nvar T4 = new Uint32Array(256);\nvar T5 = new Uint32Array(256);\nvar T6 = new Uint32Array(256);\nvar T7 = new Uint32Array(256);\nvar T8 = new Uint32Array(256);\nfunction computeTables() {\n var d = new Uint8Array(256);\n var t = new Uint8Array(256);\n var x2;\n var x4;\n var x8;\n var s;\n var tEnc;\n var tDec;\n var x = 0;\n var xInv = 0;\n // Compute double and third tables\n for (var i = 0; i < 256; i++) {\n d[i] = i << 1 ^ (i >> 7) * 283;\n t[d[i] ^ i] = i;\n }\n for (; !S[x]; x ^= x2 || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n S[x] = s;\n Si[s] = x;\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n T1[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T2[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T3[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T4[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T5[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T6[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T7[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T8[s] = tDec = tDec << 24 ^ tDec >>> 8;\n xInv = t[xInv] || 1;\n }\n}\n\n/**\n * Gets a uint32 from string in big-endian order order\n */\nfunction s2i(str, pos) {\n return (str.charCodeAt(pos) << 24\n ^ str.charCodeAt(pos + 1) << 16\n ^ str.charCodeAt(pos + 2) << 8\n ^ str.charCodeAt(pos + 3));\n}\n\n/* eslint-disable import/prefer-default-export */\n/**\n * Helper function for transforming string key to Uint32Array\n */\nfunction getWords(key) {\n if (key instanceof Uint32Array) {\n return key;\n }\n if (typeof key === 'string') {\n if (key.length % 4 !== 0)\n for (var i = key.length % 4; i <= 4; i++)\n key += '\\0x00';\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4)\n buf[i / 4] = s2i(key, i);\n return buf;\n }\n if (key instanceof Uint8Array) {\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4) {\n buf[i / 4] = (key[i] << 24\n ^ key[i + 1] << 16\n ^ key[i + 2] << 8\n ^ key[i + 3]);\n }\n return buf;\n }\n throw new Error('Unable to create 32-bit words');\n}\nfunction xor(left, right, to) {\n if (to === void 0) { to = left; }\n for (var i = 0; i < left.length; i++)\n to[i] = left[i] ^ right[i];\n}\n\ncomputeTables();\n/**\n * Low-level AES Cipher\n */\nvar AES = /** @class */ (function () {\n function AES(_key) {\n var key = getWords(_key);\n if (key.length !== 4 && key.length !== 6 && key.length !== 8) {\n throw new Error('Invalid key size');\n }\n this.encKey = new Uint32Array(4 * key.length + 28);\n this.decKey = new Uint32Array(4 * key.length + 28);\n this.encKey.set(key);\n var rcon = 1;\n var i = key.length;\n var tmp;\n // schedule encryption keys\n for (; i < 4 * key.length + 28; i++) {\n tmp = this.encKey[i - 1];\n // apply sbox\n if (i % key.length === 0 || (key.length === 8 && i % key.length === 4)) {\n tmp = S[tmp >>> 24] << 24 ^ S[(tmp >> 16) & 255] << 16 ^ S[(tmp >> 8) & 255] << 8 ^ S[tmp & 255];\n // shift rows and add rcon\n if (i % key.length === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ (rcon << 24);\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n this.encKey[i] = this.encKey[i - key.length] ^ tmp;\n }\n // schedule decryption keys\n for (var j = 0; i; j++, i--) {\n tmp = this.encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n this.decKey[j] = tmp;\n }\n else {\n this.decKey[j] = (T5[S[tmp >>> 24]]\n ^ T6[S[(tmp >> 16) & 255]]\n ^ T7[S[(tmp >> 8) & 255]]\n ^ T8[S[tmp & 255]]);\n }\n }\n }\n AES.prototype.encrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.encKey[0];\n var b = message[1] ^ this.encKey[1];\n var c = message[2] ^ this.encKey[2];\n var d = message[3] ^ this.encKey[3];\n var rounds = this.encKey.length / 4 - 2;\n var k = 4;\n var a2;\n var b2;\n var c2;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T1[a >>> 24] ^ T2[(b >> 16) & 255] ^ T3[(c >> 8) & 255] ^ T4[d & 255] ^ this.encKey[k];\n b2 = T1[b >>> 24] ^ T2[(c >> 16) & 255] ^ T3[(d >> 8) & 255] ^ T4[a & 255] ^ this.encKey[k + 1];\n c2 = T1[c >>> 24] ^ T2[(d >> 16) & 255] ^ T3[(a >> 8) & 255] ^ T4[b & 255] ^ this.encKey[k + 2];\n d = T1[d >>> 24] ^ T2[(a >> 16) & 255] ^ T3[(b >> 8) & 255] ^ T4[c & 255] ^ this.encKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n // console.log(a, b, c, d);\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[i] = (S[a >>> 24] << 24\n ^ S[(b >> 16) & 255] << 16\n ^ S[(c >> 8) & 255] << 8\n ^ S[d & 255]\n ^ this.encKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n AES.prototype.decrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.decKey[0];\n var b = message[3] ^ this.decKey[1];\n var c = message[2] ^ this.decKey[2];\n var d = message[1] ^ this.decKey[3];\n var rounds = this.decKey.length / 4 - 2;\n var a2;\n var b2;\n var c2;\n var k = 4;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T5[a >>> 24] ^ T6[(b >> 16) & 255] ^ T7[(c >> 8) & 255] ^ T8[d & 255] ^ this.decKey[k];\n b2 = T5[b >>> 24] ^ T6[(c >> 16) & 255] ^ T7[(d >> 8) & 255] ^ T8[a & 255] ^ this.decKey[k + 1];\n c2 = T5[c >>> 24] ^ T6[(d >> 16) & 255] ^ T7[(a >> 8) & 255] ^ T8[b & 255] ^ this.decKey[k + 2];\n d = T5[d >>> 24] ^ T6[(a >> 16) & 255] ^ T7[(b >> 8) & 255] ^ T8[c & 255] ^ this.decKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[3 & -i] = (Si[a >>> 24] << 24\n ^ Si[(b >> 16) & 255] << 16\n ^ Si[(c >> 8) & 255] << 8\n ^ Si[d & 255]\n ^ this.decKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n return AES;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE = /** @class */ (function () {\n function AES_IGE(key, iv, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.key = getWords(key);\n this.iv = getWords(iv);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var prevX = this.iv.subarray(this.blockSize, this.iv.length);\n var prevY = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = text.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.encrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n cipherText[j] = y[k];\n }\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n var cipherText = getWords(message);\n var text = buf || new Uint32Array(cipherText.length);\n var prevY = this.iv.subarray(this.blockSize, this.iv.length);\n var prevX = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = cipherText.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.decrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n text[j] = y[k];\n }\n return text;\n };\n return AES_IGE;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE$1 = /** @class */ (function () {\n function AES_IGE(key, counter, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.offset = 0;\n this.key = getWords(key);\n this.counter = getWords(counter);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n if (this.counter.length !== 4) {\n throw new Error('AES-CTR mode counter must be 16 bytes length');\n }\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var offset = this.offset;\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = this.cipher.encrypt(this.counter);\n for (var j = i, k = offset; j < text.length && k < this.blockSize; j++, k++)\n cipherText[j] = x[k] ^ text[j];\n if (text.length - i >= this.blockSize)\n this.incrementCounter();\n if (offset) {\n i -= offset;\n offset = 0;\n }\n }\n this.offset = (this.offset + (text.length % 4)) % 4;\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n return this.encrypt(message, buf);\n };\n AES_IGE.prototype.incrementCounter = function () {\n // increment counter\n for (var carry = this.counter.length - 1; carry >= 0; carry--) {\n if (++this.counter[carry] < 0xFFFFFFFF)\n break; // If overflowing, it'll be 0 and we'll have to continue propagating the carry\n }\n };\n return AES_IGE;\n}());\n\nexport default AES;\nexport { AES_IGE$1 as CTR, AES_IGE as IGE };\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\n//import sha1 from '@cryptography/sha1';\r\n//import sha256 from '@cryptography/sha256';\r\nimport {IGE} from '@cryptography/aes';\r\n\r\n// @ts-ignore\r\nimport pako from 'pako/dist/pako_inflate.min.js';\r\n\r\nimport {str2bigInt, bpe, equalsInt, greater, \r\n copy_, eGCD_, add_, rightShift_, sub_, copyInt_, isZero,\r\n divide_, one, bigInt2str, powMod, bigInt2bytes} from '../../vendor/leemon';//from 'leemon';\r\n\r\nimport { addPadding } from '../mtproto/bin_utils';\r\nimport { bytesToWordss, bytesFromWordss, bytesToHex, bytesFromHex, convertToUint8Array } from '../../helpers/bytes';\r\nimport { nextRandomInt } from '../../helpers/random';\r\nimport type { RSAPublicKeyHex } from '../mtproto/rsaKeysManager';\r\n\r\nconst subtle = typeof(window) !== 'undefined' && 'crypto' in window ? window.crypto.subtle : self.crypto.subtle;\r\n\r\nexport function longToBytes(sLong: string) {\r\n /* let perf = performance.now();\r\n for(let i = 0; i < 1000000; ++i) {\r\n bytesFromWords({words: longToInts(sLong), sigBytes: 8}).reverse();\r\n }\r\n console.log('longToBytes JSBN', sLong, performance.now() - perf);\r\n \r\n //const bytes = bytesFromWords({words: longToInts(sLong), sigBytes: 8}).reverse();\r\n \r\n perf = performance.now();\r\n for(let i = 0; i < 1000000; ++i) {\r\n bigInt2bytes(str2bigInt(sLong, 10));\r\n }\r\n console.log('longToBytes LEEMON', sLong, performance.now() - perf); */\r\n\r\n const bigIntBytes = new Uint8Array(bigInt2bytes(str2bigInt(sLong, 10), false));\r\n const bytes = addPadding(bigIntBytes, 8, true, false, false);\r\n //console.log('longToBytes', bytes, b);\r\n \r\n return bytes;\r\n}\r\n\r\nexport function sha1HashSync(bytes: Parameters<typeof convertToUint8Array>[0]) {\r\n return subtle.digest('SHA-1', convertToUint8Array(bytes)).then(b => {\r\n return new Uint8Array(b);\r\n });\r\n /* //console.trace(dT(), 'SHA-1 hash start', bytes);\r\n\r\n const hashBytes: number[] = [];\r\n\r\n let hash = sha1(String.fromCharCode.apply(null, \r\n bytes instanceof Uint8Array ? [...bytes] : [...new Uint8Array(bytes)]));\r\n for(let i = 0; i < hash.length; ++i) {\r\n hashBytes.push(hash.charCodeAt(i));\r\n }\r\n\r\n //console.log(dT(), 'SHA-1 hash finish', hashBytes, bytesToHex(hashBytes));\r\n\r\n return new Uint8Array(hashBytes); */\r\n}\r\n\r\nexport function sha256HashSync(bytes: Parameters<typeof convertToUint8Array>[0]) {\r\n return subtle.digest('SHA-256', convertToUint8Array(bytes)).then(b => {\r\n //console.log('legacy', performance.now() - perfS);\r\n return new Uint8Array(b);\r\n });\r\n /* //console.log('SHA-256 hash start');\r\n\r\n let perfS = performance.now();\r\n \r\n\r\n let perfD = performance.now();\r\n let words = typeof(bytes) === 'string' ? bytes : bytesToWordss(bytes as any);\r\n let hash = sha256(words);\r\n console.log('darutkin', performance.now() - perfD);\r\n\r\n //console.log('SHA-256 hash finish', hash, sha256(words, 'hex'));\r\n\r\n return bytesFromWordss(hash); */\r\n}\r\n\r\nexport function aesEncryptSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array) {\r\n //console.log(dT(), 'AES encrypt start', bytes, keyBytes, ivBytes);\r\n // console.log('aes before padding bytes:', bytesToHex(bytes));\r\n bytes = addPadding(bytes);\r\n // console.log('aes after padding bytes:', bytesToHex(bytes));\r\n\r\n const cipher = new IGE(bytesToWordss(keyBytes), bytesToWordss(ivBytes));\r\n const encryptedBytes = cipher.encrypt(bytesToWordss(bytes));\r\n //console.log(dT(), 'AES encrypt finish');\r\n\r\n return bytesFromWordss(encryptedBytes);\r\n}\r\n\r\nexport function aesDecryptSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array) {\r\n //console.log(dT(), 'AES decrypt start', bytes, keyBytes, ivBytes);\r\n\r\n const cipher = new IGE(bytesToWordss(keyBytes), bytesToWordss(ivBytes));\r\n const decryptedBytes = cipher.decrypt(bytesToWordss(bytes));\r\n\r\n //console.log(dT(), 'AES decrypt finish');\r\n\r\n return bytesFromWordss(decryptedBytes);\r\n}\r\n\r\nexport function rsaEncrypt(bytes: Uint8Array, publicKey: RSAPublicKeyHex) {\r\n //console.log(dT(), 'RSA encrypt start', publicKey, bytes);\r\n\r\n const N = str2bigInt(publicKey.modulus, 16);\r\n const E = str2bigInt(publicKey.exponent, 16);\r\n const X = str2bigInt(bytesToHex(bytes), 16);\r\n\r\n const encryptedBigInt = powMod(X, E, N);\r\n const encryptedBytes = bytesFromHex(bigInt2str(encryptedBigInt, 16));\r\n\r\n //console.log(dT(), 'RSA encrypt finish');\r\n\r\n return encryptedBytes;\r\n}\r\n\r\nexport async function hash_pbkdf2(buffer: Parameters<SubtleCrypto['importKey']>[1], salt: HkdfParams['salt'], iterations: number) {\r\n const importKey = await subtle.importKey(\r\n 'raw',\r\n buffer,\r\n {name: 'PBKDF2'},\r\n false,\r\n [/* 'deriveKey', */'deriveBits']\r\n );\r\n \r\n /* await subtle.deriveKey(\r\n {\r\n name: 'PBKDF2',\r\n salt,\r\n iterations,\r\n hash: {name: 'SHA-512'}\r\n },\r\n importKey,\r\n {\r\n name: 'AES-CTR',\r\n length: 256\r\n },\r\n false,\r\n ['encrypt', 'decrypt']\r\n ); */\r\n\r\n let bits = subtle.deriveBits({\r\n name: 'PBKDF2',\r\n salt,\r\n iterations,\r\n hash: {name: 'SHA-512'},\r\n },\r\n importKey,\r\n 512\r\n );\r\n\r\n return bits.then(buffer => new Uint8Array(buffer));\r\n}\r\n\r\nexport function pqPrimeFactorization(pqBytes: Uint8Array | number[]) {\r\n let result: ReturnType<typeof pqPrimeLeemon>;\r\n\r\n //console.log('PQ start', pqBytes, bytesToHex(pqBytes));\r\n\r\n try {\r\n //console.time('PQ leemon');\r\n result = pqPrimeLeemon(str2bigInt(bytesToHex(pqBytes), 16, Math.ceil(64 / bpe) + 1));\r\n //console.timeEnd('PQ leemon');\r\n } catch(e) {\r\n console.error('Pq leemon Exception', e);\r\n }\r\n\r\n //console.log('PQ finish', result);\r\n\r\n return result;\r\n}\r\n\r\nexport function pqPrimeLeemon(what: number[]): [Uint8Array, Uint8Array, number] {\r\n var minBits = 64;\r\n var minLen = Math.ceil(minBits / bpe) + 1;\r\n var it = 0;\r\n var i, q;\r\n var j, lim;\r\n var P;\r\n var Q;\r\n var a = new Array(minLen);\r\n var b = new Array(minLen);\r\n var c = new Array(minLen);\r\n var g = new Array(minLen);\r\n var z = new Array(minLen);\r\n var x = new Array(minLen);\r\n var y = new Array(minLen);\r\n\r\n for(i = 0; i < 3; ++i) {\r\n q = (nextRandomInt(128) & 15) + 17;\r\n copyInt_(x, nextRandomInt(1000000000) + 1);\r\n copy_(y, x);\r\n lim = 1 << (i + 18);\r\n\r\n for (j = 1; j < lim; ++j) {\r\n ++it;\r\n copy_(a, x);\r\n copy_(b, x);\r\n copyInt_(c, q);\r\n\r\n while(!isZero(b)) {\r\n if(b[0] & 1) {\r\n add_(c, a);\r\n if(greater(c, what)) {\r\n sub_(c, what);\r\n }\r\n }\r\n add_(a, a);\r\n if(greater(a, what)) {\r\n sub_(a, what);\r\n }\r\n rightShift_(b, 1);\r\n }\r\n\r\n copy_(x, c);\r\n if(greater(x, y)) {\r\n copy_(z, x);\r\n sub_(z, y);\r\n } else {\r\n copy_(z, y);\r\n sub_(z, x);\r\n }\r\n eGCD_(z, what, g, a, b);\r\n if(!equalsInt(g, 1)) {\r\n break;\r\n }\r\n if((j & (j - 1)) === 0) {\r\n copy_(y, x);\r\n }\r\n }\r\n if(greater(g, one)) {\r\n break;\r\n }\r\n }\r\n\r\n divide_(what, g, x, y);\r\n\r\n if(greater(g, x)) {\r\n P = x;\r\n Q = g;\r\n } else {\r\n P = g;\r\n Q = x;\r\n }\r\n\r\n // console.log(dT(), 'done', bigInt2str(what, 10), bigInt2str(P, 10), bigInt2str(Q, 10))\r\n\r\n return [new Uint8Array(bigInt2bytes(P)), new Uint8Array(bigInt2bytes(Q)), it];\r\n}\r\n\r\nexport function bytesModPow(x: number[] | Uint8Array, y: number[] | Uint8Array, m: number[] | Uint8Array) {\r\n try {\r\n const xBigInt = str2bigInt(bytesToHex(x), 16);\r\n const yBigInt = str2bigInt(bytesToHex(y), 16);\r\n const mBigInt = str2bigInt(bytesToHex(m), 16);\r\n const resBigInt = powMod(xBigInt, yBigInt, mBigInt);\r\n\r\n return bytesFromHex(bigInt2str(resBigInt, 16));\r\n } catch(e) {\r\n console.error('mod pow error', e);\r\n }\r\n\r\n //return bytesFromBigInt(new BigInteger(x).modPow(new BigInteger(y), new BigInteger(m)), 256);\r\n}\r\n\r\n//export function gzipUncompress(bytes: ArrayBuffer, toString: true): string;\r\n//export function gzipUncompress(bytes: ArrayBuffer, toString?: false): Uint8Array;\r\nexport function gzipUncompress(bytes: ArrayBuffer, toString?: boolean): string | Uint8Array {\r\n //console.log(dT(), 'Gzip uncompress start');\r\n const result = pako.inflate(bytes, toString ? {to: 'string'} : undefined);\r\n //console.log(dT(), 'Gzip uncompress finish'/* , result */);\r\n return result;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { bytesToHex } from '../../helpers/bytes';\r\nimport { isObject, longFromInts } from './bin_utils';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport { str2bigInt, dup, divide_, bigInt2str } from '../../vendor/leemon';\r\nimport Schema, { MTProtoConstructor } from './schema';\r\n\r\n \r\n// @ts-ignore\r\nimport { gzipUncompress } from '../crypto/crypto_utils';\r\n \r\n\r\nconst boolFalse = +Schema.API.constructors.find(c => c.predicate === 'boolFalse').id;\r\nconst boolTrue = +Schema.API.constructors.find(c => c.predicate === 'boolTrue').id;\r\nconst vector = +Schema.API.constructors.find(c => c.predicate === 'vector').id;\r\nconst gzipPacked = +Schema.MTProto.constructors.find(c => c.predicate === 'gzip_packed').id;\r\n\r\n//console.log('boolFalse', boolFalse === 0xbc799737);\r\n\r\nclass TLSerialization {\r\n private maxLength = 2048; // 2Kb\r\n private offset = 0; // in bytes\r\n private mtproto = false;\r\n private debug = false;//Modes.debug;\r\n\r\n private buffer: ArrayBuffer;\r\n private intView: Int32Array;\r\n private byteView: Uint8Array;\r\n\r\n constructor(options: Partial<{startMaxLength: number, mtproto: true}> = {}) {\r\n this.maxLength = options.startMaxLength || 2048; // 2Kb\r\n this.mtproto = options.mtproto || false;\r\n this.createBuffer();\r\n }\r\n\r\n public createBuffer() {\r\n this.buffer = new ArrayBuffer(this.maxLength);\r\n this.intView = new Int32Array(this.buffer);\r\n this.byteView = new Uint8Array(this.buffer);\r\n }\r\n\r\n public getArray() {\r\n const resultBuffer = new ArrayBuffer(this.offset);\r\n\r\n //let perf = performance.now();\r\n /* const resultUint8: any = new Uint8Array(resultBuffer);\r\n resultUint8.set(this.byteView.subarray(0, this.offset)); */\r\n //console.log('perf uint8', performance.now() - perf);\r\n\r\n //perf = performance.now();\r\n const resultInt32 = new Int32Array(resultBuffer);\r\n resultInt32.set(this.intView.subarray(0, this.offset / 4));\r\n //console.log('perf int32', performance.now() - perf);\r\n\r\n /* if(resultUint8.buffer.byteLength !== resultInt32.buffer.byteLength) {\r\n console.error(resultUint8, resultInt32);\r\n } */\r\n \r\n return resultInt32;\r\n }\r\n\r\n public getBuffer() {\r\n return this.getArray().buffer;\r\n }\r\n\r\n public getBytes(typed: true): Uint8Array;\r\n public getBytes(typed?: false): number[];\r\n public getBytes(typed: boolean = true): number[] | Uint8Array {\r\n if(typed) {\r\n const resultBuffer = new ArrayBuffer(this.offset);\r\n const resultArray = new Uint8Array(resultBuffer);\r\n \r\n resultArray.set(this.byteView.subarray(0, this.offset));\r\n \r\n return resultArray;\r\n }\r\n \r\n const bytes: number[] = new Array(this.offset);\r\n for(let i = 0; i < this.offset; i++) {\r\n bytes[i] = this.byteView[i];\r\n }\r\n return bytes;\r\n }\r\n\r\n public getOffset() {\r\n return this.offset;\r\n }\r\n\r\n public checkLength(needBytes: number) {\r\n if(this.offset + needBytes < this.maxLength) {\r\n return;\r\n }\r\n \r\n //console.log('Increase buffer start', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32));\r\n this.maxLength = Math.ceil(Math.max(this.maxLength * 2, this.offset + needBytes + 16) / 4) * 4;\r\n const previousBuffer = this.buffer;\r\n //const previousByteView = this.byteView;\r\n const previousArray = new Int32Array(previousBuffer);\r\n \r\n this.createBuffer();\r\n \r\n new Int32Array(this.buffer).set(previousArray);\r\n /* console.log('Increase buffer end', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32), \r\n bytesCmp(previousByteView, this.byteView.slice(0, previousByteView.length))); */\r\n }\r\n\r\n public writeInt(i: number, field: string) {\r\n this.debug && console.log('>>>', i.toString(16), i, field);\r\n \r\n const offset = this.offset / 4;\r\n this.checkLength(4);\r\n this.intView[offset] = i;\r\n this.offset += 4;\r\n\r\n return offset;\r\n }\r\n \r\n public storeInt(i: number, field?: string) {\r\n return this.writeInt(i, (field || '') + ':int');\r\n }\r\n \r\n public storeBool(i: boolean, field?: string) {\r\n if(i) {\r\n this.writeInt(boolTrue, (field || '') + ':bool');\r\n } else {\r\n this.writeInt(boolFalse, (field || '') + ':bool');\r\n }\r\n }\r\n \r\n public storeLongP(iHigh: number, iLow: number, field?: string) {\r\n this.writeInt(iLow, (field || '') + ':long[low]');\r\n this.writeInt(iHigh, (field || '') + ':long[high]');\r\n }\r\n\r\n public storeLong(sLong: Array<number> | string | number, field?: string) {\r\n if(Array.isArray(sLong)) {\r\n if(sLong.length === 2) {\r\n return this.storeLongP(sLong[0], sLong[1], field);\r\n } else {\r\n return this.storeIntBytes(sLong, 64, field);\r\n }\r\n }\r\n \r\n if(typeof sLong !== 'string') {\r\n sLong = sLong ? sLong.toString() : '0';\r\n }\r\n\r\n const R = 0x100000000;\r\n //const divRem = bigStringInt(sLong).divideAndRemainder(bigint(R));\r\n\r\n const a = str2bigInt(sLong, 10, 64);\r\n const q = dup(a);\r\n const r = dup(a);\r\n divide_(a, str2bigInt((R).toString(16), 16, 64), q, r);\r\n //divInt_(a, R);\r\n\r\n const high = +bigInt2str(q, 10);\r\n let low = +bigInt2str(r, 10);\r\n\r\n if(high < low) {\r\n low -= R; \r\n }\r\n\r\n //console.log('storeLong', sLong, divRem[0].intValue(), divRem[1].intValue(), high, low);\r\n \r\n //this.writeInt(divRem[1].intValue(), (field || '') + ':long[low]');\r\n //this.writeInt(divRem[0].intValue(), (field || '') + ':long[high]');\r\n this.writeInt(low, (field || '') + ':long[low]');\r\n this.writeInt(high, (field || '') + ':long[high]');\r\n }\r\n \r\n public storeDouble(f: any, field?: string) {\r\n const buffer = new ArrayBuffer(8);\r\n const intView = new Int32Array(buffer);\r\n const doubleView = new Float64Array(buffer);\r\n \r\n doubleView[0] = f;\r\n \r\n this.writeInt(intView[0], (field || '') + ':double[low]');\r\n this.writeInt(intView[1], (field || '') + ':double[high]');\r\n }\r\n \r\n public storeString(s: string, field?: string) {\r\n this.debug && console.log('>>>', s, (field || '') + ':string');\r\n \r\n if(s === undefined) {\r\n s = '';\r\n }\r\n const sUTF8 = unescape(encodeURIComponent(s));\r\n \r\n this.checkLength(sUTF8.length + 8);\r\n \r\n const len = sUTF8.length;\r\n if(len <= 253) {\r\n this.byteView[this.offset++] = len;\r\n } else {\r\n this.byteView[this.offset++] = 254;\r\n this.byteView[this.offset++] = len & 0xFF;\r\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\r\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\r\n }\r\n for(let i = 0; i < len; i++) {\r\n this.byteView[this.offset++] = sUTF8.charCodeAt(i);\r\n }\r\n \r\n // Padding\r\n while(this.offset % 4) {\r\n this.byteView[this.offset++] = 0;\r\n }\r\n }\r\n \r\n public storeBytes(bytes: ArrayBuffer | Uint8Array | number[], field?: string) {\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = new Uint8Array(bytes);\r\n } else if(bytes === undefined) {\r\n bytes = [];\r\n }\r\n\r\n this.debug && console.log('>>>', bytesToHex(bytes as number[]), (field || '') + ':bytes');\r\n \r\n // if uint8array was json.stringified, then will be: {'0': 123, '1': 123}\r\n const len = (bytes as Uint8Array).length;\r\n this.checkLength(len + 8);\r\n if(len <= 253) {\r\n this.byteView[this.offset++] = len;\r\n } else {\r\n this.byteView[this.offset++] = 254;\r\n this.byteView[this.offset++] = len & 0xFF;\r\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\r\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\r\n }\r\n \r\n this.byteView.set(bytes as Uint8Array, this.offset);\r\n this.offset += len;\r\n \r\n // Padding\r\n while(this.offset % 4) {\r\n this.byteView[this.offset++] = 0;\r\n }\r\n }\r\n \r\n public storeIntBytes(bytes: ArrayBuffer | Uint8Array | number[], bits: number, field?: string) {\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = new Uint8Array(bytes);\r\n }\r\n\r\n const len = (bytes as Uint8Array).length;\r\n if((bits % 32) || (len * 8) !== bits) {\r\n const error = new Error('Invalid bits: ' + bits + ', ' + len);\r\n console.error(error, bytes, field);\r\n throw error;\r\n }\r\n \r\n this.debug && console.log('>>>', bytesToHex(bytes as Uint8Array), (field || '') + ':int' + bits);\r\n this.checkLength(len);\r\n \r\n this.byteView.set(bytes as Uint8Array, this.offset);\r\n this.offset += len;\r\n }\r\n \r\n public storeRawBytes(bytes: ArrayLike<number>, field?: string) {\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = new Uint8Array(bytes);\r\n }\r\n\r\n const len = bytes.length;\r\n \r\n this.debug && console.log('>>>', bytesToHex(bytes), (field || ''));\r\n this.checkLength(len);\r\n \r\n this.byteView.set(bytes, this.offset);\r\n this.offset += len;\r\n }\r\n \r\n public storeMethod(methodName: string, params: any) {\r\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\r\n const methodData = schema.methods.find(m => m.method === methodName);\r\n\r\n if(!methodData) {\r\n throw new Error('No method ' + methodName + ' found');\r\n }\r\n \r\n this.storeInt(methodData.id, methodName + '[id]');\r\n\r\n const pFlags = params.pFlags || params; // * support pFlags, though am not expecting it to be there\r\n const flagsOffsets: {[paramName: string]: number} = {};\r\n //console.log('storeMethod', len, methodData);\r\n for(const param of methodData.params) {\r\n let type = param.type;\r\n\r\n if(type.indexOf('?') !== -1) {\r\n const condType = type.split('?');\r\n const fieldBit = condType[0].split('.');\r\n\r\n if(!(params[fieldBit[0]] & (1 << +fieldBit[1]))) {\r\n if(condType[1] === 'true' ? pFlags[param.name] : params[param.name] !== undefined) {\r\n //console.log('storeMethod autocompleting', methodName, param.name, params[param.name], type);\r\n params[fieldBit[0]] |= 1 << +fieldBit[1];\r\n } else {\r\n continue;\r\n }\r\n }\r\n \r\n //console.log('storeMethod', methodName, fieldBit, params[fieldBit[0]], params, param, condType, !!(params[fieldBit[0]] & (1 << +fieldBit[1])));\r\n type = condType[1];\r\n }\r\n \r\n //console.log('storeMethod', methodName, param.name, params[param.name], type);\r\n const result = this.storeObject(params[param.name], type, methodName + '[' + param.name + ']');\r\n\r\n if(type === '#') {\r\n params[param.name] = params[param.name] || 0;\r\n flagsOffsets[param.name] = result as number;\r\n }\r\n }\r\n\r\n for(let paramName in flagsOffsets) {\r\n this.intView[flagsOffsets[paramName]] = params[paramName];\r\n }\r\n\r\n return methodData.type;\r\n }\r\n \r\n public storeObject(obj: any, type: string, field?: string) {\r\n //console.log('storeObject', obj, type, field, this.offset, this.getBytes(true).hex);\r\n switch(type) {\r\n case '#':\r\n obj = obj || 0;\r\n case 'int':\r\n return this.storeInt(obj, field);\r\n case 'long':\r\n return this.storeLong(obj, field);\r\n case 'int128':\r\n return this.storeIntBytes(obj, 128, field);\r\n case 'int256':\r\n return this.storeIntBytes(obj, 256, field);\r\n case 'int512':\r\n return this.storeIntBytes(obj, 512, field);\r\n case 'string':\r\n return this.storeString(obj, field);\r\n case 'bytes':\r\n return this.storeBytes(obj, field);\r\n case 'double':\r\n return this.storeDouble(obj, field);\r\n case 'Bool':\r\n return this.storeBool(obj, field);\r\n case 'true':\r\n return\r\n }\r\n \r\n if(Array.isArray(obj)) {\r\n if(type.substr(0, 6) === 'Vector') {\r\n this.writeInt(vector, field + '[id]');\r\n } else if (type.substr(0, 6) !== 'vector') {\r\n throw new Error('Invalid vector type ' + type);\r\n }\r\n\r\n const itemType = type.substr(7, type.length - 8); // for \"Vector<itemType>\"\r\n this.writeInt(obj.length, field + '[count]');\r\n for(let i = 0; i < obj.length; i++) {\r\n this.storeObject(obj[i], itemType, field + '[' + i + ']');\r\n }\r\n\r\n return true;\r\n } else if (type.substr(0, 6).toLowerCase() === 'vector') {\r\n throw new Error('Invalid vector object');\r\n }\r\n \r\n if(!isObject(obj)) {\r\n throw new Error('Invalid object for type ' + type);\r\n }\r\n \r\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\r\n const predicate = obj['_'];\r\n let isBare = false;\r\n const constructorData: MTProtoConstructor = schema.constructors.find(c => c.predicate === predicate);\r\n \r\n if(isBare = (type.charAt(0) === '%')) {\r\n type = type.substr(1);\r\n }\r\n\r\n if(!constructorData) {\r\n throw new Error('No predicate ' + predicate + ' found');\r\n }\r\n \r\n if(predicate === type) {\r\n isBare = true;\r\n }\r\n \r\n if(!isBare) {\r\n this.writeInt(constructorData.id, field + '[' + predicate + '][id]');\r\n }\r\n\r\n const pFlags = obj.pFlags;\r\n const flagsOffsets: {[paramName: string]: number} = {};\r\n //console.log('storeObject', len, constructorData);\r\n for(const param of constructorData.params) {\r\n let type = param.type;\r\n\r\n //console.log('storeObject', param, type);\r\n if(type.indexOf('?') !== -1) {\r\n const condType = type.split('?');\r\n const fieldBit = condType[0].split('.');\r\n\r\n //console.log('storeObject fieldBit', fieldBit, obj[fieldBit[0]]);\r\n\r\n if(!(obj[fieldBit[0]] & (1 << +fieldBit[1]))) {\r\n if(condType[1] === 'true' ? pFlags && pFlags[param.name] : obj[param.name] !== undefined) {\r\n //console.log('storeObject autocompleting', param.name, obj[param.name], type);\r\n obj[fieldBit[0]] |= 1 << +fieldBit[1];\r\n } else {\r\n continue;\r\n }\r\n }\r\n\r\n type = condType[1];\r\n }\r\n //console.log('storeObject', param, type);\r\n \r\n const result = this.storeObject(obj[param.name], type, field + '[' + predicate + '][' + param.name + ']');\r\n\r\n if(type === '#') {\r\n obj[param.name] = obj[param.name] || 0;\r\n flagsOffsets[param.name] = result as number;\r\n }\r\n }\r\n\r\n for(let paramName in flagsOffsets) {\r\n this.intView[flagsOffsets[paramName]] = obj[paramName];\r\n }\r\n \r\n return constructorData.type;\r\n }\r\n}\r\n\r\nclass TLDeserialization {\r\n private offset = 0; // in bytes\r\n private override: {[key: string]: (result: any, field: string) => void};\r\n\r\n private buffer: ArrayBuffer;\r\n private intView: Int32Array;\r\n private byteView: Uint8Array;\r\n\r\n // this.debug = \r\n private mtproto: boolean = false;\r\n private debug: boolean;\r\n\r\n constructor(buffer: ArrayBuffer | Uint8Array, options: Partial<{override: any, mtproto: true, debug: true}> = {}) {\r\n //buffer = addPadding(buffer, 4, true); // fix 21.01.2020 for wss\r\n if(buffer instanceof ArrayBuffer) {\r\n this.buffer = buffer;\r\n this.intView = new Int32Array(buffer);\r\n this.byteView = new Uint8Array(this.buffer);\r\n } else {\r\n this.buffer = buffer.buffer;\r\n this.intView = new Int32Array(buffer.buffer);\r\n this.byteView = buffer;\r\n }\r\n\r\n //console.log(this.intView);\r\n\r\n this.override = 'override' in options ? options.override : {};\r\n this.mtproto = 'mtproto' in options ? options.mtproto : false;\r\n this.debug = options.debug !== undefined ? options.debug : /* Modes.debug */false;\r\n }\r\n\r\n private readInt(field: string) {\r\n //if(this.offset >= this.intView.length * 4) {\r\n if((this.byteView.length - this.offset) < 4) {\r\n console.error(this.byteView, this.offset);\r\n throw new Error('Nothing to fetch: ' + field);\r\n }\r\n \r\n const i = this.intView[this.offset / 4];\r\n // const i = new Uint32Array(this.byteView.buffer.slice(this.offset, this.offset + 4))[0];\r\n \r\n this.debug/* || field.includes('[dialog][read_outbox_max_id]') */ \r\n && console.log('<<<', i.toString(16), i, field, \r\n this.byteView.slice(this.offset - 16, this.offset + 16), \r\n this.byteView.slice(this.offset - 16, this.offset + 16).hex);\r\n \r\n this.offset += 4;\r\n \r\n return i;\r\n }\r\n \r\n public fetchInt(field?: string) {\r\n return this.readInt((field || '') + ':int');\r\n }\r\n \r\n public fetchDouble(field?: string) {\r\n const buffer = new ArrayBuffer(8);\r\n const intView = new Int32Array(buffer);\r\n const doubleView = new Float64Array(buffer);\r\n \r\n intView[0] = this.readInt((field || '') + ':double[low]'),\r\n intView[1] = this.readInt((field || '') + ':double[high]');\r\n \r\n return doubleView[0];\r\n }\r\n \r\n public fetchLong(field?: string): string {\r\n const iLow = this.readInt((field || '') + ':long[low]');\r\n const iHigh = this.readInt((field || '') + ':long[high]');\r\n \r\n //const longDec = bigint(iHigh).shiftLeft(32).add(bigint(iLow)).toString();\r\n const longDec = longFromInts(iHigh, iLow);\r\n \r\n return longDec;\r\n }\r\n \r\n public fetchBool(field?: string): boolean {\r\n const i = this.readInt((field || '') + ':bool');\r\n if(i === boolTrue) {\r\n return true;\r\n } else if(i === boolFalse) {\r\n return false;\r\n }\r\n\r\n this.offset -= 4;\r\n return this.fetchObject('Object', field);\r\n }\r\n \r\n public fetchString(field?: string): string {\r\n let len = this.byteView[this.offset++];\r\n \r\n if(len === 254) {\r\n len = this.byteView[this.offset++] |\r\n (this.byteView[this.offset++] << 8) |\r\n (this.byteView[this.offset++] << 16);\r\n }\r\n \r\n let sUTF8 = '';\r\n for(let i = 0; i < len; i++) {\r\n sUTF8 += String.fromCharCode(this.byteView[this.offset++]);\r\n }\r\n \r\n // Padding\r\n while(this.offset % 4) {\r\n this.offset++;\r\n }\r\n \r\n let s: string;\r\n try {\r\n s = decodeURIComponent(escape(sUTF8));\r\n } catch (e) {\r\n s = sUTF8;\r\n }\r\n \r\n this.debug && console.log('<<<', s, (field || '') + ':string');\r\n \r\n return s;\r\n }\r\n \r\n public fetchBytes(field?: string) {\r\n let len = this.byteView[this.offset++];\r\n \r\n if(len === 254) {\r\n len = this.byteView[this.offset++] |\r\n (this.byteView[this.offset++] << 8) |\r\n (this.byteView[this.offset++] << 16);\r\n }\r\n \r\n const bytes = this.byteView.subarray(this.offset, this.offset + len);\r\n this.offset += len;\r\n \r\n // Padding\r\n while(this.offset % 4) {\r\n this.offset++;\r\n }\r\n \r\n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':bytes');\r\n \r\n return bytes;\r\n }\r\n \r\n public fetchIntBytes(bits: number, typed: true, field?: string): Uint8Array;\r\n public fetchIntBytes(bits: number, typed?: false, field?: string): number[];\r\n public fetchIntBytes(bits: number, typed: boolean = true, field?: string) {\r\n if(bits % 32) {\r\n throw new Error('Invalid bits: ' + bits);\r\n }\r\n \r\n const len = bits / 8;\r\n if(typed) {\r\n const result = this.byteView.subarray(this.offset, this.offset + len);\r\n this.offset += len;\r\n return result;\r\n }\r\n \r\n const bytes: number[] = new Array(len);\r\n for(let i = 0; i < len; i++) {\r\n bytes[i] = this.byteView[this.offset++];\r\n }\r\n \r\n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':int' + bits);\r\n \r\n return bytes;\r\n }\r\n \r\n public fetchRawBytes(len: number | false, typed: true, field: string): Uint8Array;\r\n public fetchRawBytes(len: number | false, typed: false, field: string): number[];\r\n public fetchRawBytes(len: number | false, typed: boolean = true, field: string) {\r\n if(len === false) {\r\n len = this.readInt((field || '') + '_length');\r\n if(len > this.byteView.byteLength) {\r\n throw new Error('Invalid raw bytes length: ' + len + ', buffer len: ' + this.byteView.byteLength);\r\n }\r\n }\r\n \r\n if(typed) {\r\n const bytes = new Uint8Array(len);\r\n bytes.set(this.byteView.subarray(this.offset, this.offset + len));\r\n this.offset += len;\r\n return bytes;\r\n }\r\n \r\n const bytes: number[] = new Array(len);\r\n for(let i = 0; i < len; i++) {\r\n bytes[i] = this.byteView[this.offset++];\r\n }\r\n \r\n this.debug && console.log('<<<', bytesToHex(bytes), (field || ''));\r\n \r\n return bytes;\r\n }\r\n \r\n public fetchObject(type: string, field?: string): any {\r\n switch(type) {\r\n case '#':\r\n case 'int':\r\n return this.fetchInt(field);\r\n case 'long':\r\n return this.fetchLong(field);\r\n case 'int128':\r\n return this.fetchIntBytes(128, true, field);\r\n case 'int256':\r\n return this.fetchIntBytes(256, true, field);\r\n case 'int512':\r\n return this.fetchIntBytes(512, true, field);\r\n case 'string':\r\n return this.fetchString(field);\r\n case 'bytes':\r\n return this.fetchBytes(field);\r\n case 'double':\r\n return this.fetchDouble(field);\r\n case 'Bool':\r\n return this.fetchBool(field);\r\n case 'true':\r\n return true;\r\n }\r\n \r\n field = field || type || 'Object';\r\n \r\n if(type.charAt(0).toLowerCase() === 'v' && type.substr(1, 5) === 'ector') {\r\n if(type.charAt(0) === 'V') {\r\n const constructorCmp = this.readInt(field + '[id]');\r\n \r\n if(constructorCmp === gzipPacked) { // Gzip packed\r\n const compressed = this.fetchBytes(field + '[packed_string]');\r\n const uncompressed = gzipUncompress(compressed) as Uint8Array;\r\n const newDeserializer = new TLDeserialization(uncompressed);\r\n \r\n return newDeserializer.fetchObject(type, field);\r\n }\r\n\r\n if(constructorCmp !== vector) {\r\n throw new Error('Invalid vector constructor ' + constructorCmp);\r\n }\r\n }\r\n\r\n const len = this.readInt(field + '[count]');\r\n const result: any[] = new Array(len);\r\n if(len > 0) {\r\n const itemType = type.substr(7, type.length - 8); // for \"Vector<itemType>\"\r\n for(let i = 0; i < len; ++i) {\r\n result[i] = this.fetchObject(itemType, field + '[' + i + ']');\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n \r\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\r\n let constructorData: MTProtoConstructor = null;\r\n let fallback = false;\r\n \r\n if(type.charAt(0) === '%') {\r\n const checkType = type.substr(1);\r\n constructorData = schema.constructors.find(c => c.type === checkType);\r\n if(!constructorData) {\r\n throw new Error('Constructor not found for type: ' + type);\r\n }\r\n }/* else if(type.charAt(0) >= 97 && type.charAt(0) <= 122) {\r\n constructorData = schema.constructors.find(c => c.predicate === type);\r\n if(!constructorData) {\r\n throw new Error('Constructor not found for predicate: ' + type);\r\n }\r\n } */ else {\r\n const constructorCmp = this.readInt(field + '[id]');\r\n \r\n if(constructorCmp === gzipPacked) { // Gzip packed\r\n const compressed = this.fetchBytes(field + '[packed_string]');\r\n const uncompressed = gzipUncompress(compressed) as Uint8Array;\r\n const newDeserializer = new TLDeserialization(uncompressed);\r\n \r\n return newDeserializer.fetchObject(type, field);\r\n }\r\n \r\n let index = schema.constructorsIndex;\r\n if(!index) {\r\n schema.constructorsIndex = index = {};\r\n for(let i = 0, len = schema.constructors.length; i < len; i++) {\r\n index[schema.constructors[i].id] = i;\r\n }\r\n }\r\n\r\n const i = index[constructorCmp];\r\n if(i !== undefined) {\r\n constructorData = schema.constructors[i];\r\n }\r\n \r\n if(!constructorData && this.mtproto) {\r\n const schemaFallback = Schema.API;\r\n for(let i = 0, len = schemaFallback.constructors.length; i < len; i++) {\r\n if(+schemaFallback.constructors[i].id === constructorCmp) {\r\n constructorData = schemaFallback.constructors[i];\r\n \r\n delete this.mtproto;\r\n fallback = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if(!constructorData) {\r\n console.error('Constructor not found:', constructorCmp);\r\n \r\n let int1: number, int2: number;\r\n try {\r\n int1 = this.fetchInt(field);\r\n int2 = this.fetchInt(field);\r\n } catch(err) {\r\n\r\n }\r\n\r\n throw new Error('Constructor not found: ' + constructorCmp + ' ' + int1 + ' ' + int2 + ' ' + field);\r\n }\r\n }\r\n \r\n const predicate = constructorData.predicate;\r\n \r\n const result: any = {'_': predicate};\r\n const overrideKey = (this.mtproto ? 'mt_' : '') + predicate;\r\n if(this.override[overrideKey]) {\r\n this.override[overrideKey](result, field + '[' + predicate + ']');\r\n } else {\r\n for(let i = 0, len = constructorData.params.length; i < len; i++) {\r\n const param = constructorData.params[i];\r\n let type = param.type;\r\n\r\n if(type === '#' && result.pFlags === undefined) {\r\n result.pFlags = {};\r\n }\r\n\r\n const isCond = (type.indexOf('?') !== -1);\r\n if(isCond) {\r\n const condType = type.split('?');\r\n const fieldBit = condType[0].split('.');\r\n\r\n if(!(result[fieldBit[0]] & (1 << +fieldBit[1]))) {\r\n //console.log('fetchObject bad', constructorData, result[fieldBit[0]], fieldBit);\r\n continue;\r\n }\r\n\r\n //console.log('fetchObject good', constructorData, result[fieldBit[0]], fieldBit);\r\n\r\n type = condType[1];\r\n }\r\n \r\n const value = this.fetchObject(type, field + '[' + predicate + '][' + param.name + ']');\r\n \r\n if(isCond && type === 'true') {\r\n result.pFlags[param.name] = value;\r\n } else {\r\n /* if(param.name === 'read_outbox_max_id') {\r\n console.log(result, param.name, value, field + '[' + predicate + '][' + param.name + ']');\r\n } */\r\n \r\n result[param.name] = value;\r\n }\r\n }\r\n }\r\n \r\n if(fallback) {\r\n this.mtproto = true;\r\n }\r\n \r\n return result;\r\n }\r\n \r\n public getOffset() {\r\n return this.offset;\r\n }\r\n\r\n public setOffset(offset: number) {\r\n this.offset = offset;\r\n }\r\n \r\n /* public fetchEnd() {\r\n if(this.offset !== this.byteView.length) {\r\n throw new Error('Fetch end with non-empty buffer');\r\n }\r\n\r\n return true;\r\n } */\r\n}\r\n\r\nMOUNT_CLASS_TO.TLDeserialization = TLDeserialization;\r\nMOUNT_CLASS_TO.TLSerialization = TLSerialization;\r\nexport { TLDeserialization, TLSerialization };\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport DEBUG from \"../config/debug\";\r\n\r\nexport enum LogTypes {\r\n None = 0,\r\n Error = 1,\r\n Warn = 2,\r\n Log = 4,\r\n Debug = 8\r\n};\r\n\r\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\r\n\r\nconst _logTimer = Date.now();\r\nfunction dT() {\r\n return '[' + ((Date.now() - _logTimer) / 1000).toFixed(3) + ']';\r\n}\r\n\r\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error) {\r\n if(!DEBUG/* || true */) {\r\n type = LogTypes.Error;\r\n }\r\n\r\n //level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\r\n\r\n function Log(...args: any[]) {\r\n return type & LogTypes.Log && console.log(dT(), prefix, ...args);\r\n }\r\n \r\n Log.warn = function(...args: any[]) {\r\n return type & LogTypes.Warn && console.warn(dT(), prefix, ...args);\r\n };\r\n \r\n Log.info = function(...args: any[]) {\r\n return type & LogTypes.Log && console.info(dT(), prefix, ...args);\r\n };\r\n \r\n Log.error = function(...args: any[]) {\r\n return type & LogTypes.Error && console.error(dT(), prefix, ...args);\r\n };\r\n \r\n Log.trace = function(...args: any[]) {\r\n return type & LogTypes.Log && console.trace(dT(), prefix, ...args);\r\n };\r\n\r\n /* Log.debug = function(...args: any[]) {\r\n return level & LogLevels.debug && console.log(dT(), prefix, ...args);\r\n }; */\r\n\r\n Log.debug = function(...args: any[]) {\r\n return type & LogTypes.Debug && console.debug(dT(), prefix, ...args);\r\n };\r\n\r\n Log.setPrefix = function(_prefix: string) {\r\n prefix = '[' + _prefix + ']:';\r\n };\r\n\r\n Log.setPrefix(prefix);\r\n\r\n Log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\r\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\r\n };\r\n \r\n return Log;\r\n};\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport CryptoWorker from \"../crypto/cryptoworker\";\r\nimport {str2bigInt, isZero,\r\n bigInt2str, powMod, int2bigInt, mult, mod, sub, bitSize, negative, add, greater} from '../../vendor/leemon';\r\n\r\nimport {logger, LogTypes} from '../logger';\r\nimport { AccountPassword, InputCheckPasswordSRP, PasswordKdfAlgo } from \"../../layer\";\r\nimport { bufferConcats, bytesToHex, bytesFromHex, bytesXor, convertToUint8Array } from \"../../helpers/bytes\";\r\nimport { addPadding } from \"../mtproto/bin_utils\";\r\n//import { MOUNT_CLASS_TO } from \"../../config/debug\";\r\n\r\nconst log = logger('SRP', LogTypes.Error);\r\n\r\n//MOUNT_CLASS_TO && Object.assign(MOUNT_CLASS_TO, {str2bigInt, bigInt2str, int2bigInt});\r\n\r\nexport async function makePasswordHash(password: string, client_salt: Uint8Array, server_salt: Uint8Array) {\r\n // ! look into crypto_methods.test.ts\r\n let buffer = await CryptoWorker.invokeCrypto('sha256-hash', bufferConcats(client_salt, new TextEncoder().encode(password), client_salt));\r\n //log('encoded 1', bytesToHex(new Uint8Array(buffer)));\r\n\r\n buffer = bufferConcats(server_salt, buffer, server_salt);\r\n\r\n buffer = await CryptoWorker.invokeCrypto('sha256-hash', buffer);\r\n //log('encoded 2', buffer, bytesToHex(new Uint8Array(buffer)));\r\n\r\n let hash = await CryptoWorker.invokeCrypto('pbkdf2', new Uint8Array(buffer), client_salt, 100000);\r\n //log('encoded 3', hash, bytesToHex(new Uint8Array(hash)));\r\n\r\n hash = bufferConcats(server_salt, hash, server_salt);\r\n\r\n buffer = await CryptoWorker.invokeCrypto('sha256-hash', hash);\r\n //log('got password hash:', buffer, bytesToHex(new Uint8Array(buffer)));\r\n\r\n return buffer;\r\n}\r\n\r\nexport async function computeSRP(password: string, state: AccountPassword, isNew: boolean) {\r\n const algo = (isNew ? state.new_algo : state.current_algo) as PasswordKdfAlgo.passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow;\r\n //console.log('computeSRP:', password, state, isNew, algo);\r\n\r\n const p = str2bigInt(bytesToHex(algo.p), 16);\r\n const B = str2bigInt(bytesToHex(state.srp_B), 16);\r\n const g = int2bigInt(algo.g, 32, 256);\r\n\r\n //log('p', bigInt2str(p, 16));\r\n //log('B', bigInt2str(B, 16));\r\n\r\n /* if(B.compareTo(BigInteger.ZERO) < 0) {\r\n console.error('srp_B < 0')\r\n }\r\n\r\n if(B.compareTo(p) <= 0) {\r\n console.error('srp_B <= p');\r\n } */\r\n\r\n /* let check_prime_and_good = (bytes: any, g: number) => {\r\n let good_prime = 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b';\r\n \r\n if(bytesToHex(bytes) === good_prime && [3, 4, 5, 7].indexOf(g) !== -1) {\r\n return true;\r\n }\r\n\r\n // TO-DO check_prime_and_good_check\r\n }; */\r\n\r\n //check_prime_and_good(algo.p, g);\r\n\r\n const pw_hash = await makePasswordHash(password, algo.salt1, algo.salt2);\r\n const x = str2bigInt(bytesToHex(pw_hash), 16);\r\n\r\n //log('computed pw_hash:', pw_hash, x, bytesToHex(new Uint8Array(pw_hash)));\r\n\r\n const padArray = function(arr: number[] | Uint8Array, len: number) {\r\n if(!(arr instanceof Uint8Array)) {\r\n arr = convertToUint8Array(arr);\r\n }\r\n\r\n return addPadding(arr, len, true, true, true);\r\n };\r\n\r\n const pForHash = padArray(bytesFromHex(bigInt2str(p, 16)), 256);\r\n const gForHash = padArray(bytesFromHex(bigInt2str(g, 16)), 256); // like uint8array\r\n const b_for_hash = padArray(bytesFromHex(bigInt2str(B, 16)), 256);\r\n\r\n /* log(bytesToHex(pForHash));\r\n log(bytesToHex(gForHash));\r\n log(bytesToHex(b_for_hash)); */\r\n\r\n const v = powMod(g, x, p);\r\n\r\n const flipper = (arr: Uint8Array | number[]) => {\r\n const out = new Uint8Array(arr.length);\r\n for(let i = 0; i < arr.length; i += 4) {\r\n out[i] = arr[i + 3];\r\n out[i + 1] = arr[i + 2];\r\n out[i + 2] = arr[i + 1];\r\n out[i + 3] = arr[i];\r\n }\r\n \r\n return out;\r\n };\r\n\r\n // * https://core.telegram.org/api/srp#setting-a-new-2fa-password\r\n if(isNew) {\r\n const bytes = bytesFromHex(bigInt2str(v, 16));\r\n return padArray(/* (isBigEndian ? bytes.reverse() : bytes) */bytes, 256);\r\n }\r\n\r\n //log('g_x', bigInt2str(g_x, 16));\r\n\r\n const kHash = await CryptoWorker.invokeCrypto('sha256-hash', bufferConcats(pForHash, gForHash));\r\n const k = str2bigInt(bytesToHex(kHash), 16);\r\n\r\n //log('k', bigInt2str(k, 16));\r\n\r\n // kg_x = (k * g_x) % p\r\n const k_v = mod(mult(k, v), p);\r\n\r\n // good\r\n\r\n //log('kg_x', bigInt2str(kg_x, 16));\r\n\r\n const is_good_mod_exp_first = (modexp: any, prime: any) => {\r\n const diff = sub(prime, modexp);\r\n const min_diff_bits_count = 2048 - 64;\r\n const max_mod_exp_size = 256;\r\n if(negative(diff) ||\r\n bitSize(diff) < min_diff_bits_count || \r\n bitSize(modexp) < min_diff_bits_count || \r\n Math.floor((bitSize(modexp) + 7) / 8) > max_mod_exp_size)\r\n return false;\r\n return true;\r\n };\r\n\r\n const generate_and_check_random = async() => {\r\n while(true) {\r\n const a = str2bigInt(bytesToHex(flipper(state.secure_random)), 16);\r\n //const a = str2bigInt('9153faef8f2bb6da91f6e5bc96bc00860a530a572a0f45aac0842b4602d711f8bda8d59fb53705e4ae3e31a3c4f0681955425f224297b8e9efd898fec22046debb7ba8a0bcf2be1ada7b100424ea318fdcef6ccfe6d7ab7d978c0eb76a807d4ab200eb767a22de0d828bc53f42c5a35c2df6e6ceeef9a3487aae8e9ef2271f2f6742e83b8211161fb1a0e037491ab2c2c73ad63c8bd1d739de1b523fe8d461270cedcf240de8da75f31be4933576532955041dc5770c18d3e75d0b357df9da4a5c8726d4fced87d15752400883dc57fa1937ac17608c5446c4774dcd123676d683ce3a1ab9f7e020ca52faafc99969822717c8e07ea383d5fb1a007ba0d170cb', 16);\r\n\r\n //console.log('ITERATION');\r\n\r\n //log('g a p', bigInt2str(g, 16), bigInt2str(a, 16), bigInt2str(p, 16));\r\n\r\n const A = powMod(g, a, p);\r\n //log('A MODPOW', bigInt2str(A, 16));\r\n if(is_good_mod_exp_first(A, p)) {\r\n const a_for_hash = bytesFromHex(bigInt2str(A, 16));\r\n\r\n const s = await CryptoWorker.invokeCrypto('sha256-hash', bufferConcats(a_for_hash, b_for_hash));\r\n const u = str2bigInt(s.hex, 16);\r\n if(!isZero(u) && !negative(u))\r\n return {a, a_for_hash, u};\r\n } \r\n }\r\n }\r\n \r\n\r\n const {a, a_for_hash, u} = await generate_and_check_random();\r\n\r\n /* log('a', bigInt2str(a, 16));\r\n log('a_for_hash', bytesToHex(a_for_hash));\r\n log('u', bigInt2str(u, 16)); */\r\n\r\n // g_b = (B - kg_x) % p\r\n /* log('B - kg_x', bigInt2str(sub(B, kg_x), 16));\r\n log('subtract', bigInt2str(B, 16), bigInt2str(kg_x, 16));\r\n log('B - kg_x', bigInt2str(sub(B, kg_x), 16)); */\r\n\r\n let g_b: number[];\r\n if(!greater(B, k_v)) {\r\n //log('negative');\r\n g_b = add(B, p);\r\n } else g_b = B;\r\n g_b = mod(sub(g_b, k_v), p);\r\n /* let g_b = sub(B, kg_x);\r\n if(negative(g_b)) g_b = add(g_b, p); */\r\n \r\n //log('g_b', bigInt2str(g_b, 16));\r\n\r\n /* if(!is_good_mod_exp_first(g_b, p))\r\n throw new Error('bad g_b'); */\r\n\r\n const ux = mult(u, x);\r\n //log('u and x multiply', bigInt2str(u, 16), bigInt2str(x, 16), bigInt2str(ux, 16));\r\n const a_ux = add(a, ux);\r\n const S = powMod(g_b, a_ux, p);\r\n\r\n const K = await CryptoWorker.invokeCrypto('sha256-hash', padArray(bytesFromHex(bigInt2str(S, 16)), 256));\r\n\r\n //log('K', bytesToHex(K), new Uint32Array(new Uint8Array(K).buffer));\r\n\r\n let h1 = await CryptoWorker.invokeCrypto('sha256-hash', pForHash);\r\n const h2 = await CryptoWorker.invokeCrypto('sha256-hash', gForHash);\r\n h1 = bytesXor(h1, h2);\r\n\r\n const buff = bufferConcats(h1, \r\n await CryptoWorker.invokeCrypto('sha256-hash', algo.salt1),\r\n await CryptoWorker.invokeCrypto('sha256-hash', algo.salt2),\r\n a_for_hash,\r\n b_for_hash,\r\n K\r\n );\r\n\r\n const M1 = await CryptoWorker.invokeCrypto('sha256-hash', buff);\r\n\r\n const out = {\r\n _: 'inputCheckPasswordSRP', \r\n srp_id: state.srp_id, \r\n A: new Uint8Array(a_for_hash), \r\n M1\r\n } as InputCheckPasswordSRP.inputCheckPasswordSRP;\r\n\r\n\r\n //log('out', bytesToHex(out.A), bytesToHex(out.M1));\r\n return out;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\n// import { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport CryptoWorkerMethods, { CryptoMethods } from './crypto_methods';\r\n\r\n \r\nimport { aesDecryptSync, aesEncryptSync, bytesModPow, gzipUncompress, hash_pbkdf2, pqPrimeFactorization, rsaEncrypt, sha1HashSync, sha256HashSync } from './crypto_utils';\r\nimport { computeSRP } from './srp';\r\n \r\n\r\ntype Task = {\r\n taskId: number,\r\n task: string,\r\n args: any[]\r\n};\r\n\r\nclass CryptoWorker extends CryptoWorkerMethods {\r\n private webWorker: Worker | boolean = false;\r\n private taskId = 0;\r\n private awaiting: {\r\n [id: number]: {\r\n resolve: any,\r\n reject: any,\r\n taskName: string\r\n }\r\n } = {} as any;\r\n private pending: Array<Task> = [];\r\n private debug = false;\r\n\r\n private utils: CryptoMethods;\r\n\r\n constructor() {\r\n super();\r\n console.log('CW constructor');\r\n\r\n \r\n this.utils = {\r\n 'sha1-hash': sha1HashSync,\r\n 'sha256-hash': sha256HashSync,\r\n 'pbkdf2': hash_pbkdf2,\r\n 'aes-encrypt': aesEncryptSync,\r\n 'aes-decrypt': aesDecryptSync,\r\n 'rsa-encrypt': rsaEncrypt,\r\n 'factorize': pqPrimeFactorization,\r\n 'mod-pow': bytesModPow,\r\n 'gzipUncompress': gzipUncompress,\r\n 'computeSRP': computeSRP\r\n };\r\n\r\n // Promise.all([\r\n // import('./crypto_utils').then(utils => {\r\n // Object.assign(this.utils, {\r\n // 'sha1-hash': utils.sha1HashSync,\r\n // 'sha256-hash': utils.sha256HashSync,\r\n // 'pbkdf2': utils.hash_pbkdf2,\r\n // 'aes-encrypt': utils.aesEncryptSync,\r\n // 'aes-decrypt': utils.aesDecryptSync,\r\n // 'rsa-encrypt': utils.rsaEncrypt,\r\n // 'factorize': utils.pqPrimeFactorization,\r\n // 'mod-pow': utils.bytesModPow,\r\n // 'gzipUncompress': utils.gzipUncompress,\r\n // });\r\n // }),\r\n\r\n // import('./srp').then(srp => {\r\n // this.utils.computeSRP = srp.computeSRP;\r\n // })/* ,\r\n\r\n // import('../bin_utils').then(utils => {\r\n // this.utils.unzip = utils.gzipUncompress;\r\n // }) */\r\n // ]);\r\n\r\n return;\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n public performTaskWorker<T>(task: string, ...args: any[]) {\r\n this.debug && console.log('CW start', task, args);\r\n\r\n \r\n // @ts-ignore\r\n return Promise.resolve<T>(this.utils[task](...args));\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n}\r\n\r\nconst cryptoWorker = new CryptoWorker();\r\n// MOUNT_CLASS_TO.CryptoWorker = cryptoWorker;\r\nexport default cryptoWorker;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { Awaited } from \"../../types\";\r\nimport type { aesEncryptSync, aesDecryptSync, sha256HashSync, sha1HashSync, bytesModPow, hash_pbkdf2, rsaEncrypt, pqPrimeFactorization, gzipUncompress } from \"./crypto_utils\";\r\nimport type { computeSRP } from \"./srp\";\r\n\r\nexport type CryptoMethods = {\r\n 'sha1-hash': typeof sha1HashSync,\r\n 'sha256-hash': typeof sha256HashSync,\r\n 'pbkdf2': typeof hash_pbkdf2,\r\n 'aes-encrypt': typeof aesEncryptSync,\r\n 'aes-decrypt': typeof aesDecryptSync,\r\n 'rsa-encrypt': typeof rsaEncrypt,\r\n 'factorize': typeof pqPrimeFactorization,\r\n 'mod-pow': typeof bytesModPow,\r\n 'gzipUncompress': typeof gzipUncompress,\r\n 'computeSRP': typeof computeSRP\r\n};\r\n\r\nexport default abstract class CryptoWorkerMethods {\r\n abstract performTaskWorker<T>(task: string, ...args: any[]): Promise<T>;\r\n\r\n public invokeCrypto<Method extends keyof CryptoMethods>(method: Method, ...args: Parameters<CryptoMethods[typeof method]>): Promise<Awaited<ReturnType<CryptoMethods[typeof method]>>> {\r\n return this.performTaskWorker<Awaited<ReturnType<CryptoMethods[typeof method]>>>(method, ...args as any[]);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport sessionStorage from '../sessionStorage';\r\nimport { longFromInts } from './bin_utils';\r\nimport { nextRandomInt } from '../../helpers/random';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport { WorkerTaskVoidTemplate } from '../../types';\r\nimport { notifySomeone } from '../../helpers/context';\r\n\r\n/*\r\nlet lol: any = {};\r\nfor(var i = 0; i < 100; i++) {\r\n timeManager.generateId();\r\n}\r\n*/\r\n\r\nexport interface ApplyServerTimeOffsetTask extends WorkerTaskVoidTemplate {\r\n type: 'applyServerTimeOffset',\r\n payload: TimeManager['timeOffset']\r\n};\r\n\r\nexport class TimeManager {\r\n private lastMessageId: [number, number] = [0, 0];\r\n private timeOffset: number = 0;\r\n\r\n constructor() {\r\n sessionStorage.get('server_time_offset').then((to) => {\r\n if(to) {\r\n this.timeOffset = to;\r\n }\r\n });\r\n }\r\n\r\n public generateId(): string {\r\n const timeTicks = Date.now(),\r\n timeSec = Math.floor(timeTicks / 1000) + this.timeOffset,\r\n timeMSec = timeTicks % 1000,\r\n random = nextRandomInt(0xFFFF);\r\n\r\n let messageId: TimeManager['lastMessageId'] = [timeSec, (timeMSec << 21) | (random << 3) | 4];\r\n if(this.lastMessageId[0] > messageId[0] ||\r\n this.lastMessageId[0] === messageId[0] && this.lastMessageId[1] >= messageId[1]) {\r\n messageId = [this.lastMessageId[0], this.lastMessageId[1] + 4];\r\n }\r\n\r\n this.lastMessageId = messageId;\r\n\r\n const ret = longFromInts(messageId[0], messageId[1]);\r\n\r\n // if(lol[ret]) {\r\n // console.error('[TimeManager]: Generated SAME msg id', messageId, this.timeOffset, ret);\r\n // }\r\n // lol[ret] = true;\r\n\r\n // console.log('[TimeManager]: Generated msg id', messageId, this.timeOffset, ret);\r\n\r\n return ret\r\n }\r\n\r\n public applyServerTime(serverTime: number, localTime?: number) {\r\n localTime = (localTime || Date.now()) / 1000 | 0;\r\n const newTimeOffset = serverTime - localTime;\r\n const changed = Math.abs(this.timeOffset - newTimeOffset) > 10;\r\n sessionStorage.set({\r\n server_time_offset: newTimeOffset\r\n });\r\n\r\n this.lastMessageId = [0, 0];\r\n this.timeOffset = newTimeOffset;\r\n \r\n //console.log('[TimeManager]: Apply server time', serverTime, localTime, newTimeOffset, changed);\r\n\r\n \r\n const task: ApplyServerTimeOffsetTask = {\r\n type: 'applyServerTimeOffset',\r\n payload: newTimeOffset\r\n };\r\n notifySomeone(task);\r\n \r\n\r\n return changed;\r\n }\r\n}\r\n\r\nconst timeManager = new TimeManager();\r\nMOUNT_CLASS_TO.timeManager = timeManager;\r\nexport default timeManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { DcId } from \"../types\";\r\n\r\nexport const MAIN_DOMAIN = 'web.telegram.org';\r\n\r\nconst App = {\r\n id: 1025907,\r\n hash: '452b0359b988148995f22ff0f4229750',\r\n version: '0.6.1',\r\n langPackVersion: '0.3.2',\r\n langPack: 'macos',\r\n langPackCode: 'en',\r\n domains: [MAIN_DOMAIN] as string[],\r\n baseDcId: 2 as DcId,\r\n isMainDomain: location.hostname === MAIN_DOMAIN,\r\n suffix: 'K'\r\n};\r\n\r\nif(App.isMainDomain) { // use Webogram credentials then\r\n App.id = 2496;\r\n App.hash = '8da85b0d5bfe62527e5b244c209159c3';\r\n}\r\n\r\nexport default App;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport enum ConnectionStatus {\r\n Connected,\r\n Connecting,\r\n Closed,\r\n TimedOut\r\n};\r\n\r\nexport type ConnectionStatusChange = {\r\n _: 'networkerStatus', \r\n status: ConnectionStatus,\r\n dcId: number,\r\n name: string,\r\n isFileNetworker: boolean,\r\n isFileDownload: boolean,\r\n isFileUpload: boolean,\r\n retryAt?: number\r\n};\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport {isObject, sortLongsArray} from './bin_utils';\r\nimport {TLDeserialization, TLSerialization} from './tl_utils';\r\nimport CryptoWorker from '../crypto/cryptoworker';\r\nimport sessionStorage from '../sessionStorage';\r\nimport Schema from './schema';\r\nimport timeManager from './timeManager';\r\nimport networkerFactory from './networkerFactory';\r\nimport { logger, LogTypes } from '../logger';\r\nimport { InvokeApiOptions } from '../../types';\r\nimport { longToBytes } from '../crypto/crypto_utils';\r\nimport MTTransport from './transports/transport';\r\nimport { convertToUint8Array, bytesCmp, bytesToHex, bufferConcats } from '../../helpers/bytes';\r\nimport { nextRandomInt } from '../../helpers/random';\r\nimport App from '../../config/app';\r\nimport DEBUG from '../../config/debug';\r\nimport Modes from '../../config/modes';\r\n\r\n \r\n \r\n \r\n\r\nimport type TcpObfuscated from './transports/tcpObfuscated';\r\nimport { bigInt2str, rightShift_, str2bigInt } from '../../vendor/leemon';\r\nimport { forEachReverse } from '../../helpers/array';\r\nimport { ConnectionStatus } from './connectionStatus';\r\n\r\n//console.error('networker included!', new Error().stack);\r\n\r\nexport type MTMessageOptions = InvokeApiOptions & Partial<{\r\n noResponse: true, // http_wait\r\n longPoll: true,\r\n \r\n notContentRelated: true, // ACK\r\n noSchedule: true,\r\n messageId: string,\r\n}>;\r\n\r\nexport type MTMessage = InvokeApiOptions & MTMessageOptions & {\r\n msg_id: string,\r\n seq_no: number,\r\n body?: Uint8Array | number[],\r\n isAPI?: boolean,\r\n // only these four are important\r\n\r\n acked?: boolean,\r\n\r\n deferred?: {\r\n resolve: any,\r\n reject: any\r\n },\r\n\r\n container?: boolean,\r\n inner?: string[],\r\n\r\n // below - options\r\n\r\n notContentRelated?: true,\r\n noSchedule?: true,\r\n\r\n resultType?: string,\r\n\r\n longPoll?: true,\r\n noResponse?: true, // only with http (http_wait for longPoll)\r\n};\r\n\r\nconst CONNECTION_TIMEOUT = 5000;\r\nconst DRAIN_TIMEOUT = 10000;\r\nlet invokeAfterMsgConstructor: number;\r\n\r\nexport default class MTPNetworker {\r\n private authKeyUint8: Uint8Array;\r\n\r\n public isFileNetworker: boolean;\r\n private isFileUpload: boolean;\r\n private isFileDownload: boolean;\r\n\r\n private lastServerMessages: Array<string> = [];\r\n\r\n private sentMessages: {\r\n [msgId: string]: MTMessage\r\n } = {};\r\n\r\n private pendingMessages: {[msgId: string]: number} = {};\r\n private pendingAcks: Array<string> = [];\r\n private pendingResends: Array<string> = [];\r\n public connectionInited = false;\r\n\r\n private nextReqTimeout: number;\r\n private nextReq: number = 0;\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n private seqNo: number = 0;\r\n private prevSessionId: Uint8Array;\r\n private sessionId: Uint8Array;\r\n private serverSalt: Uint8Array;\r\n\r\n private lastResendReq: {\r\n req_msg_id: string,\r\n resend_msg_ids: Array<string>\r\n } | null = null;\r\n\r\n private name: string;\r\n private log: ReturnType<typeof logger>;\r\n \r\n public isOnline = false;\r\n public status: ConnectionStatus = ConnectionStatus.Closed;\r\n private lastResponseTime = 0;\r\n\r\n private debug = DEBUG /* && false */ || Modes.debug;\r\n\r\n public activeRequests = 0;\r\n\r\n public onDrain: () => void;\r\n private onDrainTimeout: number;\r\n\r\n //private disconnectDelay: number;\r\n //private pingPromise: CancellablePromise<any>;\r\n //public onConnectionStatusChange: (online: boolean) => void;\r\n\r\n //private debugRequests: Array<{before: Uint8Array, after: Uint8Array}> = [];\r\n\r\n constructor(public dcId: number, private authKey: Uint8Array, private authKeyId: Uint8Array,\r\n serverSalt: Uint8Array, public transport: MTTransport, options: InvokeApiOptions = {}) {\r\n this.authKeyUint8 = convertToUint8Array(this.authKey);\r\n this.serverSalt = convertToUint8Array(serverSalt);\r\n\r\n this.isFileUpload = !!options.fileUpload;\r\n this.isFileDownload = !!options.fileDownload;\r\n this.isFileNetworker = this.isFileUpload || this.isFileDownload;\r\n\r\n const suffix = this.isFileUpload ? '-U' : this.isFileDownload ? '-D' : '';\r\n this.name = 'NET-' + dcId + suffix;\r\n //this.log = logger(this.name, this.upload && this.dcId === 2 ? LogLevels.debug | LogLevels.warn | LogLevels.log | LogLevels.error : LogLevels.error);\r\n this.log = logger(this.name, LogTypes.Log | /* LogTypes.Debug | */LogTypes.Error | LogTypes.Warn);\r\n this.log('constructor'/* , this.authKey, this.authKeyID, this.serverSalt */);\r\n\r\n // Test resend after bad_server_salt\r\n /* if(this.dcId === 2 && this.upload) {\r\n //timeManager.applyServerTime((Date.now() / 1000 - 86400) | 0);\r\n this.serverSalt[0] = 0;\r\n } */\r\n\r\n this.updateSession();\r\n\r\n // if(!NetworkerFactory.offlineInited) {\r\n // NetworkerFactory.offlineInited = true;\r\n // /* rootScope.offline = true\r\n // rootScope.offlineConnecting = true */\r\n // }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n //} else {\r\n (this.transport as TcpObfuscated).networker = this;\r\n //}\r\n \r\n\r\n // * handle outcoming dead socket, server will close the connection\r\n // if((this.transport as TcpObfuscated).networker) {\r\n // this.disconnectDelay = /* (this.transport as TcpObfuscated).retryTimeout */75;\r\n // //setInterval(this.sendPingDelayDisconnect, (this.disconnectDelay - 5) * 1000);\r\n // this.sendPingDelayDisconnect();\r\n // }\r\n\r\n if((this.transport as TcpObfuscated).connected) {\r\n this.setConnectionStatus(ConnectionStatus.Connected);\r\n }\r\n }\r\n\r\n private updateSession() {\r\n this.seqNo = 0;\r\n this.prevSessionId = this.sessionId;\r\n this.sessionId = new Uint8Array(8).randomize();\r\n }\r\n\r\n /* private clearContainers() {\r\n for(const messageId in this.sentMessages) {\r\n const message = this.sentMessages[messageId];\r\n if(message.container) {\r\n delete this.sentMessages[messageId];\r\n }\r\n }\r\n } */\r\n\r\n private updateSentMessage(sentMessageId: string) {\r\n const sentMessage = this.sentMessages[sentMessageId];\r\n if(!sentMessage) {\r\n return false;\r\n }\r\n\r\n if(sentMessage.container) {\r\n forEachReverse(sentMessage.inner, (innerSentMessageId, idx) => {\r\n const innerSentMessage = this.updateSentMessage(innerSentMessageId);\r\n if(!innerSentMessage) {\r\n sentMessage.inner.splice(idx, 1);\r\n } else {\r\n sentMessage.inner[idx] = innerSentMessage.msg_id;\r\n }\r\n });\r\n }\r\n \r\n sentMessage.msg_id = timeManager.generateId();\r\n sentMessage.seq_no = this.generateSeqNo(sentMessage.notContentRelated || sentMessage.container);\r\n\r\n /* if(DEBUG) {\r\n this.log('updateSentMessage', sentMessage.msg_id, sentMessageId);\r\n } */\r\n\r\n this.sentMessages[sentMessage.msg_id] = sentMessage;\r\n delete this.sentMessages[sentMessageId];\r\n \r\n return sentMessage;\r\n }\r\n\r\n private generateSeqNo(notContentRelated?: boolean) {\r\n let seqNo = this.seqNo * 2;\r\n \r\n if(!notContentRelated) {\r\n seqNo++;\r\n this.seqNo++;\r\n }\r\n \r\n return seqNo;\r\n }\r\n\r\n public wrapMtpCall(method: string, params: any, options: MTMessageOptions) {\r\n const serializer = new TLSerialization({mtproto: true});\r\n \r\n serializer.storeMethod(method, params);\r\n \r\n const messageId = timeManager.generateId();\r\n const seqNo = this.generateSeqNo();\r\n const message = {\r\n msg_id: messageId,\r\n seq_no: seqNo,\r\n body: serializer.getBytes(true)\r\n };\r\n \r\n if(Modes.debug) {\r\n this.log('MT call', method, params, messageId, seqNo);\r\n }\r\n \r\n return this.pushMessage(message, options);\r\n }\r\n \r\n public wrapMtpMessage(object: any, options: MTMessageOptions) {\r\n const serializer = new TLSerialization({mtproto: true});\r\n serializer.storeObject(object, 'Object');\r\n \r\n const messageId = timeManager.generateId();\r\n const seqNo = this.generateSeqNo(options.notContentRelated);\r\n const message = {\r\n msg_id: messageId,\r\n seq_no: seqNo,\r\n body: serializer.getBytes(true)\r\n };\r\n \r\n if(Modes.debug) {\r\n this.log('MT message', object, messageId, seqNo);\r\n }\r\n \r\n return this.pushMessage(message, options);\r\n }\r\n\r\n public wrapApiCall(method: string, params: any = {}, options: InvokeApiOptions = {}) {\r\n const serializer = new TLSerialization(options);\r\n \r\n if(!this.connectionInited) { // this will call once for each new session\r\n ///////this.log('Wrap api call !this.connectionInited');\r\n\r\n const invokeWithLayer = Schema.API.methods.find(m => m.method === 'invokeWithLayer');\r\n if(!invokeWithLayer) throw new Error('no invokeWithLayer!');\r\n serializer.storeInt(+invokeWithLayer.id, 'invokeWithLayer');\r\n\r\n // @ts-ignore\r\n serializer.storeInt(Schema.layer, 'layer');\r\n \r\n const initConnection = Schema.API.methods.find(m => m.method === 'initConnection');\r\n if(!initConnection) throw new Error('no initConnection!');\r\n \r\n serializer.storeInt(+initConnection.id, 'initConnection');\r\n serializer.storeInt(0x0, 'flags');\r\n serializer.storeInt(App.id, 'api_id');\r\n serializer.storeString(networkerFactory.userAgent || 'Unknown UserAgent', 'device_model');\r\n serializer.storeString(navigator.platform || 'Unknown Platform', 'system_version');\r\n serializer.storeString(App.version + (App.isMainDomain ? ' ' + App.suffix : ''), 'app_version');\r\n serializer.storeString(navigator.language || 'en', 'system_lang_code');\r\n serializer.storeString(App.langPack, 'lang_pack');\r\n serializer.storeString(networkerFactory.language, 'lang_code');\r\n //serializer.storeInt(0x0, 'proxy');\r\n /* serializer.storeMethod('initConnection', {\r\n 'flags': 0,\r\n 'api_id': App.id,\r\n 'device_model': navigator.userAgent || 'Unknown UserAgent',\r\n 'system_version': navigator.platform || 'Unknown Platform',\r\n 'app_version': App.version,\r\n 'system_lang_code': navigator.language || 'en',\r\n 'lang_pack': '',\r\n 'lang_code': navigator.language || 'en'\r\n }); */\r\n }\r\n \r\n if(options.afterMessageId) {\r\n if(invokeAfterMsgConstructor === undefined) {\r\n const m = Schema.API.methods.find(m => m.method === 'invokeAfterMsg');\r\n invokeAfterMsgConstructor = m ? +m.id : 0;\r\n }\r\n \r\n if(invokeAfterMsgConstructor) {\r\n // if(this.debug) {\r\n // this.log('invokeApi: store invokeAfterMsg');\r\n // }\r\n \r\n serializer.storeInt(invokeAfterMsgConstructor, 'invokeAfterMsg');\r\n serializer.storeLong(options.afterMessageId, 'msg_id');\r\n } else {\r\n this.log.error('no invokeAfterMsg!');\r\n }\r\n }\r\n \r\n options.resultType = serializer.storeMethod(method, params);\r\n\r\n /* if(method === 'account.updateNotifySettings') {\r\n this.log('api call body:', serializer.getBytes(true));\r\n } */\r\n \r\n const messageId = timeManager.generateId();\r\n const seqNo = this.generateSeqNo();\r\n const message = {\r\n msg_id: messageId,\r\n seq_no: seqNo,\r\n body: serializer.getBytes(true),\r\n isAPI: true\r\n };\r\n \r\n if(Modes.debug/* || true */) {\r\n this.log('Api call', method, message, params, options);\r\n } else if(this.debug) {\r\n this.log('Api call', method, params, options);\r\n }\r\n \r\n return this.pushMessage(message, options);\r\n }\r\n\r\n public destroy() {\r\n //assumeType<TcpObfuscated>(this.transport);\r\n (this.transport as TcpObfuscated).destroy();\r\n }\r\n\r\n public forceReconnectTimeout() {\r\n if((this.transport as TcpObfuscated).reconnect) {\r\n (this.transport as TcpObfuscated).reconnect();\r\n }\r\n }\r\n\r\n public forceReconnect() {\r\n if((this.transport as TcpObfuscated).forceReconnect) {\r\n (this.transport as TcpObfuscated).forceReconnect();\r\n }\r\n }\r\n\r\n // private sendPingDelayDisconnect = () => {\r\n // if(this.pingPromise || true) return;\r\n\r\n // if(!this.isOnline) {\r\n // if((this.transport as TcpObfuscated).connected) {\r\n // (this.transport as TcpObfuscated).handleClose();\r\n // }\r\n\r\n // return;\r\n // }\r\n\r\n // this.log('sendPingDelayDisconnect', this.sentPingTimes);\r\n\r\n // /* if(this.tt) clearTimeout(this.tt);\r\n // this.tt = self.setTimeout(() => { \r\n // (this.transport as any).ws.close(1000);\r\n // this.tt = 0;\r\n // }, this.disconnectDelay * 1000); */\r\n // /* this.wrapMtpCall('ping_delay_disconnect', {\r\n // ping_id: randomLong(),\r\n // disconnect_delay: this.disconnectDelay\r\n // }, {\r\n // noResponse: true,\r\n // notContentRelated: true\r\n // }); */\r\n // const deferred = this.pingPromise = deferredPromise<void>();\r\n\r\n // const timeoutTime = this.disconnectDelay * 1000;\r\n\r\n // /* if(!this.sentPingTimes || true) {\r\n // ++this.sentPingTimes; */\r\n // const startTime = Date.now();\r\n // this.wrapMtpCall('ping', {\r\n // ping_id: randomLong()\r\n // }, {}).then(pong => {\r\n // const elapsedTime = Date.now() - startTime;\r\n // this.log('sendPingDelayDisconnect: response', pong, elapsedTime > timeoutTime);\r\n\r\n // if(elapsedTime > timeoutTime) {\r\n // deferred.reject();\r\n // } else {\r\n // setTimeout(deferred.resolve, timeoutTime - elapsedTime);\r\n // }\r\n // }, deferred.reject).finally(() => {\r\n // clearTimeout(rejectTimeout);\r\n // //--this.sentPingTimes;\r\n // });\r\n // //}\r\n\r\n // const rejectTimeout = self.setTimeout(deferred.reject, timeoutTime);\r\n\r\n // deferred.catch(() => {\r\n // (this.transport as Socket).handleClose();\r\n // });\r\n\r\n // deferred.finally(() => {\r\n // this.pingPromise = null;\r\n // this.sendPingDelayDisconnect();\r\n // });\r\n // };\r\n\r\n // private sendPingDelayDisconnect = () => {\r\n // if(this.pingPromise || true) return;\r\n\r\n // /* if(!this.isOnline) {\r\n // if((this.transport as TcpObfuscated).connected) {\r\n // (this.transport as TcpObfuscated).connection.close();\r\n // }\r\n\r\n // return;\r\n // } */\r\n\r\n // const deferred = this.pingPromise = deferredPromise<void>();\r\n\r\n // const timeoutTime = this.disconnectDelay * 1000;\r\n\r\n // const startTime = Date.now();\r\n // this.wrapMtpCall('ping_delay_disconnect', {\r\n // ping_id: randomLong(),\r\n // disconnect_delay: this.disconnectDelay\r\n // }, {}).then(pong => {\r\n // const elapsedTime = Date.now() - startTime;\r\n // this.log('sendPingDelayDisconnect: response', pong, elapsedTime > timeoutTime);\r\n\r\n // if(elapsedTime > timeoutTime) {\r\n // deferred.reject();\r\n // } else {\r\n // setTimeout(deferred.resolve, timeoutTime - elapsedTime);\r\n // }\r\n // }, deferred.reject).finally(() => {\r\n // clearTimeout(rejectTimeout);\r\n // //--this.sentPingTimes;\r\n // });\r\n\r\n // const rejectTimeout = self.setTimeout(deferred.reject, timeoutTime);\r\n\r\n // deferred.catch(() => {\r\n // this.log.error('sendPingDelayDisconnect: catch, closing connection if exists');\r\n // (this.transport as TcpObfuscated).connection.close();\r\n // });\r\n\r\n // deferred.finally(() => {\r\n // this.pingPromise = null;\r\n // this.sendPingDelayDisconnect();\r\n // });\r\n // };\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n // тут можно сделать таймаут и выводить дисконнект\r\n private pushMessage(message: {\r\n msg_id: string,\r\n seq_no: number,\r\n body: Uint8Array | number[],\r\n isAPI?: boolean\r\n }, options: MTMessageOptions) {\r\n const promise = new Promise((resolve, reject) => {\r\n this.sentMessages[message.msg_id] = Object.assign(message, options, options.notContentRelated \r\n ? undefined \r\n : {\r\n deferred: {resolve, reject}\r\n }\r\n );\r\n\r\n //this.log.error('Networker pushMessage:', this.sentMessages[message.msg_id]);\r\n\r\n this.pendingMessages[message.msg_id] = 0;\r\n \r\n if(!options.noSchedule) {\r\n this.scheduleRequest();\r\n }\r\n\r\n if(isObject(options)) {\r\n options.messageId = message.msg_id;\r\n }\r\n });\r\n\r\n if(!options.notContentRelated && !options.noResponse) {\r\n const timeout = setTimeout(() => {\r\n if(this.lastResponseTime && (Date.now() - this.lastResponseTime) < CONNECTION_TIMEOUT) {\r\n return;\r\n }\r\n\r\n this.log.error('timeout', message);\r\n if(this.isOnline) {\r\n this.setConnectionStatus(ConnectionStatus.TimedOut);\r\n }\r\n\r\n /* this.getEncryptedOutput(message).then(bytes => {\r\n this.log.error('timeout encrypted', bytes);\r\n }); */\r\n }, CONNECTION_TIMEOUT);\r\n \r\n promise.finally(() => {\r\n clearTimeout(timeout);\r\n this.setConnectionStatus(ConnectionStatus.Connected);\r\n\r\n --this.activeRequests;\r\n this.setDrainTimeout();\r\n });\r\n \r\n ++this.activeRequests;\r\n if(this.onDrainTimeout !== undefined) {\r\n clearTimeout(this.onDrainTimeout);\r\n this.onDrainTimeout = undefined;\r\n }\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n public setDrainTimeout() {\r\n if(!this.activeRequests && this.onDrain && this.onDrainTimeout === undefined) {\r\n this.onDrainTimeout = self.setTimeout(() => {\r\n this.onDrainTimeout = undefined;\r\n this.log('drain');\r\n this.onDrain();\r\n }, DRAIN_TIMEOUT);\r\n }\r\n }\r\n\r\n public setConnectionStatus(status: ConnectionStatus, retryAt?: number) {\r\n const isOnline = status === ConnectionStatus.Connected;\r\n const willChange = this.status !== status;\r\n this.isOnline = isOnline;\r\n this.status = status;\r\n\r\n if(willChange) {\r\n if(networkerFactory.onConnectionStatusChange) {\r\n networkerFactory.onConnectionStatusChange({\r\n _: 'networkerStatus',\r\n status,\r\n dcId: this.dcId,\r\n name: this.name,\r\n isFileNetworker: this.isFileNetworker,\r\n isFileDownload: this.isFileDownload,\r\n isFileUpload: this.isFileUpload,\r\n retryAt\r\n });\r\n }\r\n\r\n if(this.isOnline) {\r\n this.scheduleRequest();\r\n }\r\n\r\n // if((this.transport as TcpObfuscated).networker) {\r\n // this.sendPingDelayDisconnect();\r\n // }\r\n /* this.sentPingTimes = 0;\r\n this.sendPingDelayDisconnect(); */\r\n }\r\n /* if(this.onConnectionStatusChange) {\r\n this.onConnectionStatusChange(this.isOnline);\r\n } */\r\n }\r\n\r\n private pushResend(messageId: string, delay = 100) {\r\n const value = delay ? Date.now() + delay : 0;\r\n const sentMessage = this.sentMessages[messageId];\r\n if(sentMessage.container) {\r\n for(const innerMsgId of sentMessage.inner) {\r\n this.pendingMessages[innerMsgId] = value;\r\n }\r\n } else {\r\n this.pendingMessages[messageId] = value;\r\n }\r\n\r\n if(sentMessage.acked) {\r\n this.log.error('pushResend: acked message?', sentMessage);\r\n }\r\n \r\n if(this.debug) {\r\n this.log.debug('pushResend:', messageId, sentMessage, this.pendingMessages, delay);\r\n }\r\n \r\n this.scheduleRequest(delay);\r\n }\r\n\r\n // * correct, fully checked\r\n private async getMsgKey(dataWithPadding: Uint8Array, isOut: boolean) {\r\n const x = isOut ? 0 : 8;\r\n const msgKeyLargePlain = bufferConcats(this.authKeyUint8.subarray(88 + x, 88 + x + 32), dataWithPadding);\r\n\r\n const msgKeyLarge = await CryptoWorker.invokeCrypto('sha256-hash', msgKeyLargePlain);\r\n const msgKey = new Uint8Array(msgKeyLarge).subarray(8, 24);\r\n return msgKey;\r\n };\r\n\r\n // * correct, fully checked\r\n private getAesKeyIv(msgKey: Uint8Array, isOut: boolean): Promise<[Uint8Array, Uint8Array]> {\r\n const x = isOut ? 0 : 8;\r\n const sha2aText = new Uint8Array(52);\r\n const sha2bText = new Uint8Array(52);\r\n const promises: Array<Promise<Uint8Array>> = [];\r\n \r\n sha2aText.set(msgKey, 0);\r\n sha2aText.set(this.authKeyUint8.subarray(x, x + 36), 16);\r\n promises.push(CryptoWorker.invokeCrypto('sha256-hash', sha2aText));\r\n \r\n sha2bText.set(this.authKeyUint8.subarray(40 + x, 40 + x + 36), 0);\r\n sha2bText.set(msgKey, 36);\r\n promises.push(CryptoWorker.invokeCrypto('sha256-hash', sha2bText));\r\n\r\n return Promise.all(promises).then((results) => {\r\n const aesKey = new Uint8Array(32);\r\n const aesIv = new Uint8Array(32);\r\n const sha2a = new Uint8Array(results[0]);\r\n const sha2b = new Uint8Array(results[1]);\r\n \r\n aesKey.set(sha2a.subarray(0, 8));\r\n aesKey.set(sha2b.subarray(8, 24), 8);\r\n aesKey.set(sha2a.subarray(24, 32), 24);\r\n \r\n aesIv.set(sha2b.subarray(0, 8));\r\n aesIv.set(sha2a.subarray(8, 24), 8);\r\n aesIv.set(sha2b.subarray(24, 32), 24);\r\n \r\n return [aesKey, aesIv];\r\n });\r\n }\r\n\r\n public isStopped() {\r\n return networkerFactory.akStopped && !this.isFileNetworker;\r\n }\r\n\r\n private performScheduledRequest() {\r\n // this.log('scheduled', this.dcId, this.iii)\r\n\r\n if(this.isStopped()) {\r\n return false;\r\n }\r\n\r\n if(this.pendingAcks.length) {\r\n const ackMsgIds: Array<string> = this.pendingAcks.slice();\r\n\r\n // this.log('acking messages', ackMsgIDs)\r\n this.wrapMtpMessage({\r\n _: 'msgs_ack',\r\n msg_ids: ackMsgIds\r\n }, {\r\n notContentRelated: true,\r\n noSchedule: true\r\n });\r\n }\r\n \r\n if(this.pendingResends.length) {\r\n const resendMsgIds: Array<string> = this.pendingResends.slice();\r\n const resendOpts: MTMessageOptions = {\r\n noSchedule: true,\r\n notContentRelated: true,\r\n messageId: '' // will set in wrapMtpMessage->pushMessage\r\n };\r\n\r\n //this.log('resendReq messages', resendMsgIds);\r\n this.wrapMtpMessage({\r\n _: 'msg_resend_req',\r\n msg_ids: resendMsgIds\r\n }, resendOpts);\r\n\r\n this.lastResendReq = {\r\n req_msg_id: resendOpts.messageId,\r\n resend_msg_ids: resendMsgIds\r\n };\r\n }\r\n \r\n let outMessage: MTPNetworker['sentMessages'][keyof MTPNetworker['sentMessages']];\r\n const messages: typeof outMessage[] = [];\r\n \r\n //const currentTime = Date.now();\r\n let messagesByteLen = 0;\r\n\r\n \r\n \r\n \r\n \r\n\r\n let lengthOverflow = false;\r\n\r\n // * Сюда никогда не попадут контейнеры, так как их не будет в pendingMessages\r\n const keys = sortLongsArray(Object.keys(this.pendingMessages));\r\n for(const messageId of keys) {\r\n //const value = this.pendingMessages[messageId];\r\n\r\n //if(!value || value <= currentTime) {\r\n const message = this.sentMessages[messageId];\r\n if(message && message.body) {\r\n /* if(message.fileUpload) {\r\n this.log('performScheduledRequest message:', message, message.body.length, (message.body as Uint8Array).byteLength, (message.body as Uint8Array).buffer.byteLength);\r\n } */\r\n\r\n const messageByteLength = message.body.length + 32;\r\n\r\n if((messagesByteLen + messageByteLength) > 655360) { // 640 Kb\r\n this.log.warn('lengthOverflow', message, messages);\r\n lengthOverflow = true;\r\n\r\n if(outMessage) { // if it's not a first message\r\n break;\r\n }\r\n }\r\n\r\n messages.push(message);\r\n messagesByteLen += messageByteLength;\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n outMessage = message;\r\n } else {\r\n // this.log(message, messageId)\r\n }\r\n\r\n delete this.pendingMessages[messageId];\r\n //}\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n if(!messages.length) {\r\n // this.log('no scheduled messages')\r\n return;\r\n }\r\n \r\n \r\n \r\n \r\n \r\n if(messages.length > 1) {\r\n const container = this.generateContainerMessage(messagesByteLen, messages);\r\n outMessage = container.messageWithBody;\r\n \r\n this.sentMessages[outMessage.msg_id] = container.message;\r\n } else {\r\n this.sentMessages[outMessage.msg_id] = outMessage;\r\n }\r\n \r\n this.pendingAcks = [];\r\n\r\n const promise = this.sendEncryptedRequest(outMessage);\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n this.cleanupSent(); // ! WARNING\r\n \r\n \r\n \r\n \r\n \r\n if(lengthOverflow) {\r\n this.scheduleRequest();\r\n }\r\n }\r\n\r\n private generateContainerMessage(messagesByteLen: number, messages: MTMessage[]) {\r\n const container = new TLSerialization({\r\n mtproto: true,\r\n startMaxLength: messagesByteLen + 64\r\n });\r\n\r\n container.storeInt(0x73f1f8dc, 'CONTAINER[id]');\r\n container.storeInt(messages.length, 'CONTAINER[count]');\r\n\r\n const innerMessages: string[] = [];\r\n messages.forEach((message, i) => {\r\n innerMessages.push(message.msg_id);\r\n // this.log('Pushing to container:', message.msg_id);\r\n container.storeLong(message.msg_id, 'CONTAINER[' + i + '][msg_id]');\r\n container.storeInt(message.seq_no, 'CONTAINER[' + i + '][seq_no]');\r\n container.storeInt(message.body.length, 'CONTAINER[' + i + '][bytes]');\r\n container.storeRawBytes(message.body, 'CONTAINER[' + i + '][body]');\r\n });\r\n\r\n const message: MTMessage = {\r\n msg_id: timeManager.generateId(),\r\n seq_no: this.generateSeqNo(true),\r\n container: true,\r\n inner: innerMessages\r\n };\r\n\r\n if(Modes.debug/* || true */) {\r\n this.log.warn('Container', innerMessages, message.msg_id, message.seq_no);\r\n }\r\n\r\n return {\r\n message,\r\n messageWithBody: Object.assign({body: container.getBytes(true)}, message),\r\n };\r\n }\r\n\r\n private async getEncryptedMessage(dataWithPadding: Uint8Array) {\r\n const msgKey = await this.getMsgKey(dataWithPadding, true);\r\n const keyIv = await this.getAesKeyIv(msgKey, true);\r\n // this.log('after msg key iv')\r\n\r\n const encryptedBytes = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithPadding, keyIv[0], keyIv[1]);\r\n // this.log('Finish encrypt')\r\n\r\n return {\r\n bytes: encryptedBytes,\r\n msgKey\r\n };\r\n }\r\n\r\n private getDecryptedMessage(msgKey: Uint8Array, encryptedData: Uint8Array) {\r\n // this.log('get decrypted start')\r\n return this.getAesKeyIv(msgKey, false).then((keyIv) => {\r\n // this.log('after msg key iv')\r\n return CryptoWorker.invokeCrypto('aes-decrypt', encryptedData, keyIv[0], keyIv[1]);\r\n });\r\n }\r\n\r\n private getEncryptedOutput(message: MTMessage) {\r\n /* if(DEBUG) {\r\n this.log.debug('Send encrypted', message, this.authKeyId);\r\n } */\r\n /* if(!this.isOnline) {\r\n this.log('trying to send message when offline:', Object.assign({}, message));\r\n //debugger;\r\n } */\r\n\r\n const data = new TLSerialization({\r\n startMaxLength: message.body.length + 2048\r\n });\r\n\r\n data.storeIntBytes(this.serverSalt, 64, 'salt');\r\n data.storeIntBytes(this.sessionId, 64, 'session_id');\r\n \r\n data.storeLong(message.msg_id, 'message_id');\r\n data.storeInt(message.seq_no, 'seq_no');\r\n\r\n data.storeInt(message.body.length, 'message_data_length');\r\n data.storeRawBytes(message.body, 'message_data');\r\n\r\n /* const des = new TLDeserialization(data.getBuffer().slice(16));\r\n const desSalt = des.fetchLong();\r\n const desSessionId = des.fetchLong();\r\n\r\n if(!this.isOnline) {\r\n this.log.error('trying to send message when offline', message, new Uint8Array(des.buffer), desSalt, desSessionId);\r\n } */\r\n\r\n /* const messageDataLength = message.body.length;\r\n let canBeLength = 0; // bytes\r\n canBeLength += 8;\r\n canBeLength += 8;\r\n canBeLength += 8;\r\n canBeLength += 4;\r\n canBeLength += 4;\r\n canBeLength += message.body.length; */\r\n \r\n const dataBuffer = data.getBuffer();\r\n\r\n /* if(dataBuffer.byteLength !== canBeLength || !bytesCmp(new Uint8Array(dataBuffer.slice(dataBuffer.byteLength - message.body.length)), new Uint8Array(message.body))) {\r\n this.log.error('wrong length', dataBuffer, canBeLength, message.msg_id);\r\n } */\r\n\r\n const paddingLength = (16 - (data.getOffset() % 16)) + 16 * (1 + nextRandomInt(5));\r\n const padding = /* (message as any).padding || */new Uint8Array(paddingLength).randomize()/* .fill(0) */;\r\n /* const padding = [167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157, \r\n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150, \r\n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28, 167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157, \r\n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150, \r\n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28].slice(0, paddingLength); */\r\n\r\n //(message as any).padding = padding;\r\n\r\n const dataWithPadding = bufferConcats(dataBuffer, padding);\r\n // this.log('Adding padding', dataBuffer, padding, dataWithPadding)\r\n // this.log('auth_key_id', bytesToHex(self.authKeyID))\r\n\r\n /* if(dataWithPadding.byteLength % 16) {\r\n this.log.error('aaa', dataWithPadding, paddingLength);\r\n }\r\n\r\n if(message.fileUpload) {\r\n this.log('Send encrypted: body length:', (message.body as ArrayBuffer).byteLength, paddingLength, dataWithPadding);\r\n } */\r\n\r\n // * full next block is correct\r\n return this.getEncryptedMessage(dataWithPadding).then((encryptedResult) => {\r\n /* if(DEBUG) {\r\n this.log('Got encrypted out message', encryptedResult);\r\n } */\r\n\r\n const request = new TLSerialization({\r\n startMaxLength: encryptedResult.bytes.length + 256\r\n });\r\n request.storeIntBytes(this.authKeyId, 64, 'auth_key_id');\r\n request.storeIntBytes(encryptedResult.msgKey, 128, 'msg_key');\r\n request.storeRawBytes(encryptedResult.bytes, 'encrypted_data');\r\n \r\n const requestData = request.getBytes(true);\r\n\r\n // if(this.isFileNetworker) {\r\n // //this.log('Send encrypted: requestData length:', requestData.length, requestData.length % 16, paddingLength % 16, paddingLength, data.offset, encryptedResult.msgKey.length % 16, encryptedResult.bytes.length % 16);\r\n // //this.log('Send encrypted: messageId:', message.msg_id, requestData.length);\r\n // //this.log('Send encrypted:', message, new Uint8Array(bufferConcat(des.buffer, padding)), requestData, this.serverSalt.hex, this.sessionId.hex/* new Uint8Array(des.buffer) */);\r\n // this.debugRequests.push({before: new Uint8Array(bufferConcat(des.buffer, padding)), after: requestData});\r\n // }\r\n\r\n return requestData;\r\n });\r\n }\r\n\r\n private sendEncryptedRequest(message: MTMessage) {\r\n return this.getEncryptedOutput(message).then(requestData => {\r\n this.debug && this.log.debug('sendEncryptedRequest: launching message into space:', message, [message.msg_id].concat(message.inner || []));\r\n\r\n const promise: Promise<Uint8Array> = this.transport.send(requestData) as any;\r\n \r\n return promise;\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n });\r\n }\r\n\r\n public parseResponse(responseBuffer: Uint8Array) {\r\n //const perf = performance.now();\r\n /* if(this.debug) {\r\n this.log.debug('Start parsing response', responseBuffer);\r\n } */\r\n\r\n this.lastResponseTime = Date.now();\r\n\r\n const deserializer = new TLDeserialization(responseBuffer);\r\n \r\n const authKeyId = deserializer.fetchIntBytes(64, true, 'auth_key_id');\r\n if(!bytesCmp(authKeyId, this.authKeyId)) {\r\n throw new Error('[MT] Invalid server auth_key_id: ' + authKeyId.hex);\r\n }\r\n\r\n const msgKey = deserializer.fetchIntBytes(128, true, 'msg_key');\r\n const encryptedData = deserializer.fetchRawBytes(responseBuffer.byteLength - deserializer.getOffset(), true, 'encrypted_data');\r\n \r\n return this.getDecryptedMessage(msgKey, encryptedData).then((dataWithPadding) => {\r\n // this.log('after decrypt')\r\n return this.getMsgKey(dataWithPadding, false).then((calcMsgKey) => {\r\n if(!bytesCmp(msgKey, calcMsgKey)) {\r\n this.log.warn('[MT] msg_keys', msgKey, calcMsgKey);\r\n this.updateSession(); // fix 28.01.2020\r\n throw new Error('[MT] server msgKey mismatch, updating session');\r\n }\r\n // this.log('after msgKey check')\r\n \r\n let deserializer = new TLDeserialization(dataWithPadding, {mtproto: true});\r\n \r\n /* const salt = */deserializer.fetchIntBytes(64, true, 'salt'); // need\r\n const sessionId = deserializer.fetchIntBytes(64, true, 'session_id');\r\n const messageId = deserializer.fetchLong('message_id');\r\n \r\n if(!bytesCmp(sessionId, this.sessionId) &&\r\n (!this.prevSessionId || !bytesCmp(sessionId, this.prevSessionId))) {\r\n this.log.warn('Sessions', sessionId, this.sessionId, this.prevSessionId, dataWithPadding);\r\n //this.updateSession();\r\n //this.sessionID = sessionID;\r\n throw new Error('[MT] Invalid server session_id: ' + bytesToHex(sessionId));\r\n }\r\n \r\n const seqNo = deserializer.fetchInt('seq_no');\r\n \r\n const totalLength = dataWithPadding.byteLength;\r\n \r\n const messageBodyLength = deserializer.fetchInt('message_data[length]');\r\n let offset = deserializer.getOffset();\r\n \r\n if((messageBodyLength % 4) ||\r\n messageBodyLength > totalLength - offset) {\r\n throw new Error('[MT] Invalid body length: ' + messageBodyLength);\r\n }\r\n const messageBody = deserializer.fetchRawBytes(messageBodyLength, true, 'message_data');\r\n \r\n offset = deserializer.getOffset();\r\n const paddingLength = totalLength - offset;\r\n if(paddingLength < 12 || paddingLength > 1024) {\r\n throw new Error('[MT] Invalid padding length: ' + paddingLength);\r\n }\r\n \r\n //let buffer = bytesToArrayBuffer(messageBody);\r\n deserializer = new TLDeserialization(/* buffer */messageBody, {\r\n mtproto: true, \r\n override: {\r\n mt_message: (result: any, field: string) => {\r\n result.msg_id = deserializer.fetchLong(field + '[msg_id]');\r\n result.seqno = deserializer.fetchInt(field + '[seqno]');\r\n result.bytes = deserializer.fetchInt(field + '[bytes]');\r\n \r\n const offset = deserializer.getOffset();\r\n \r\n //self.log('mt_message!!!!!', result, field);\r\n \r\n try {\r\n result.body = deserializer.fetchObject('Object', field + '[body]');\r\n } catch(e) {\r\n this.log.error('parse error', e.message, e.stack);\r\n result.body = {\r\n _: 'parse_error',\r\n error: e\r\n };\r\n }\r\n\r\n if(deserializer.getOffset() !== offset + result.bytes) {\r\n // console.warn(dT(), 'set offset', this.offset, offset, result.bytes)\r\n // this.log(result)\r\n deserializer.setOffset(offset + result.bytes);\r\n }\r\n // this.log('override message', result)\r\n },\r\n mt_rpc_result: (result: any, field: any) => {\r\n result.req_msg_id = deserializer.fetchLong(field + '[req_msg_id]');\r\n \r\n const sentMessage = this.sentMessages[result.req_msg_id];\r\n const type = sentMessage && sentMessage.resultType || 'Object';\r\n \r\n if(result.req_msg_id && !sentMessage) {\r\n // console.warn(dT(), 'Result for unknown message', result);\r\n return;\r\n }\r\n \r\n result.result = deserializer.fetchObject(type, field + '[result]');\r\n // self.log(dT(), 'override rpc_result', sentMessage, type, result);\r\n }\r\n }\r\n });\r\n\r\n const response = deserializer.fetchObject('', 'INPUT');\r\n //this.log.error('Parse response time:', performance.now() - perf);\r\n return {\r\n response,\r\n messageId,\r\n sessionId,\r\n seqNo\r\n };\r\n });\r\n });\r\n }\r\n\r\n private applyServerSalt(newServerSalt: string) {\r\n const serverSalt = longToBytes(newServerSalt);\r\n \r\n sessionStorage.set({\r\n ['dc' + this.dcId + '_server_salt']: bytesToHex(serverSalt)\r\n });\r\n \r\n this.serverSalt = new Uint8Array(serverSalt);\r\n }\r\n\r\n // ! таймаут очень сильно тормозит скорость работы сокета (даже нулевой) \r\n public scheduleRequest(delay?: number) {\r\n /* if(!this.isOnline) {\r\n return;\r\n } */\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n const nextReq = Date.now() + (delay || 0);\r\n if(this.nextReq && (delay === undefined || this.nextReq <= nextReq)) {\r\n //this.debug && this.log('scheduleRequest: nextReq', this.nextReq, nextReq);\r\n return;\r\n }\r\n \r\n //this.debug && this.log('scheduleRequest: delay', delay);\r\n\r\n /* if(this.nextReqTimeout) {\r\n return;\r\n } */\r\n \r\n //const perf = performance.now();\r\n if(this.nextReqTimeout) {\r\n clearTimeout(this.nextReqTimeout);\r\n }\r\n\r\n const cb = () => {\r\n //this.debug && this.log('scheduleRequest: timeout delay was:', performance.now() - perf);\r\n\r\n this.nextReqTimeout = 0;\r\n this.nextReq = 0;\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n /* if(!this.isOnline) {\r\n return;\r\n } */\r\n\r\n this.performScheduledRequest();\r\n \r\n };\r\n\r\n this.nextReq = nextReq;\r\n\r\n if(delay) {\r\n this.nextReqTimeout = self.setTimeout(cb, delay);\r\n } else {\r\n cb();\r\n }\r\n }\r\n\r\n private ackMessage(msgId: string) {\r\n // this.log('ack message', msgID)\r\n this.pendingAcks.push(msgId);\r\n\r\n \r\n \r\n \r\n this.scheduleRequest();\r\n \r\n }\r\n \r\n private reqResendMessage(msgId: string) {\r\n if(this.debug) {\r\n this.log.debug('Req resend', msgId);\r\n }\r\n\r\n this.pendingResends.push(msgId);\r\n this.scheduleRequest(100);\r\n }\r\n\r\n public cleanupSent() {\r\n let notEmpty = false;\r\n // this.log('clean start', this.dcId/*, this.sentMessages*/)\r\n Object.keys(this.sentMessages).forEach((msgId) => {\r\n const message = this.sentMessages[msgId];\r\n \r\n // this.log('clean iter', msgID, message)\r\n if(message.notContentRelated && this.pendingMessages[msgId] === undefined) {\r\n // this.log('clean notContentRelated', msgID)\r\n delete this.sentMessages[msgId];\r\n } else if(message.container) {\r\n for(const innerMsgId of message.inner) {\r\n if(this.sentMessages[innerMsgId] !== undefined) {\r\n // this.log('clean failed, found', msgID, message.inner[i], this.sentMessages[message.inner[i]].seq_no)\r\n notEmpty = true;\r\n return;\r\n }\r\n }\r\n // this.log('clean container', msgID)\r\n delete this.sentMessages[msgId];\r\n } else {\r\n notEmpty = true;\r\n }\r\n });\r\n \r\n return !notEmpty;\r\n }\r\n\r\n private processMessageAck(messageId: string) {\r\n const sentMessage = this.sentMessages[messageId];\r\n if(sentMessage && !sentMessage.acked) {\r\n //delete sentMessage.body;\r\n sentMessage.acked = true;\r\n }\r\n }\r\n\r\n private processError(rawError: {error_message: string, error_code: number}) {\r\n const matches = (rawError.error_message || '').match(/^([A-Z_0-9]+\\b)(: (.+))?/) || [];\r\n rawError.error_code = rawError.error_code;\r\n \r\n return {\r\n code: !rawError.error_code || rawError.error_code <= 0 ? 500 : rawError.error_code,\r\n type: matches[1] || 'UNKNOWN',\r\n description: matches[3] || ('CODE#' + rawError.error_code + ' ' + rawError.error_message),\r\n originalError: rawError\r\n };\r\n }\r\n\r\n /**\r\n * * только для сокета\r\n * TODO: consider about containers resend\r\n */\r\n public resend() {\r\n for(const id in this.sentMessages) {\r\n const msg = this.sentMessages[id];\r\n if(msg.body || msg.container) {\r\n this.pushResend(id);\r\n }\r\n }\r\n }\r\n\r\n /* public requestMessageStatus() {\r\n const ids: string[] = [];\r\n for(const id in this.sentMessages) {\r\n const message = this.sentMessages[id];\r\n if(message.isAPI && message.fileUpload) {\r\n ids.push(message.msg_id);\r\n }\r\n }\r\n\r\n this.wrapMtpMessage({\r\n _: 'msgs_state_req',\r\n msg_ids: ids\r\n }, {\r\n notContentRelated: true\r\n }).then(res => {\r\n this.log('status', res);\r\n });\r\n } */\r\n\r\n // * https://core.telegram.org/mtproto/service_messages_about_messages#notice-of-ignored-error-message\r\n public processMessage(message: any, messageId: string, sessionId: Uint8Array | number[]) {\r\n if(message._ === 'messageEmpty') {\r\n this.log.warn('processMessage: messageEmpty', message, messageId);\r\n return;\r\n }\r\n\r\n const msgidInt = parseInt(messageId.substr(0, -10), 10);\r\n if(msgidInt % 2) {\r\n this.log.warn('Server even message id: ', messageId, message);\r\n return;\r\n }\r\n\r\n /* if(this.debug) {\r\n this.log('process message', message, messageId, sessionId);\r\n } */\r\n\r\n switch(message._) {\r\n case 'msg_container': {\r\n for(const innerMessage of message.messages) {\r\n this.processMessage(innerMessage, innerMessage.msg_id, sessionId);\r\n }\r\n\r\n break;\r\n }\r\n \r\n case 'bad_server_salt': {\r\n this.log('Bad server salt', message);\r\n\r\n this.applyServerSalt(message.new_server_salt);\r\n\r\n if(this.sentMessages[message.bad_msg_id]) {\r\n this.pushResend(message.bad_msg_id);\r\n }\r\n \r\n this.ackMessage(messageId);\r\n \r\n // simulate disconnect\r\n /* try {\r\n this.log('networker state:', this);\r\n // @ts-ignore\r\n this.transport.ws.close(1000);\r\n } catch(err) {\r\n this.log.error('transport', this.transport, err);\r\n } */\r\n\r\n break;\r\n }\r\n \r\n case 'bad_msg_notification': {\r\n this.log.error('Bad msg notification', message);\r\n\r\n switch(message.error_code) {\r\n case 16: // * msg_id too low\r\n case 17: // * msg_id too high\r\n case 32: // * msg_seqno too low\r\n case 33: // * msg_seqno too high\r\n case 64: { // * invalid container\r\n //const changedOffset = timeManager.applyServerTime(bigStringInt(messageId).shiftRight(32).toString(10));\r\n const bigInt = str2bigInt(messageId, 10);\r\n rightShift_(bigInt, 32);\r\n const changedOffset = timeManager.applyServerTime(+bigInt2str(bigInt, 10));\r\n if(message.error_code === 17 || changedOffset) {\r\n this.log('Update session');\r\n this.updateSession();\r\n }\r\n\r\n const badMessage = this.updateSentMessage(message.bad_msg_id);\r\n if(badMessage) this.pushResend(badMessage.msg_id); // fix 23.01.2020\r\n //this.ackMessage(messageId);\r\n }\r\n\r\n // * invalid container\r\n /* case 64: {\r\n const badMessage = this.sentMessages[message.bad_msg_id];\r\n if(badMessage) {\r\n for(const msgId of badMessage.inner) {\r\n if(this.sentMessages[msgId] !== undefined) {\r\n this.updateSentMessage\r\n }\r\n }\r\n const inner = badMessage.inner;\r\n }\r\n } */\r\n }\r\n\r\n break;\r\n }\r\n \r\n case 'message': {\r\n if(this.lastServerMessages.indexOf(messageId) !== -1) {\r\n // console.warn('[MT] Server same messageId: ', messageId)\r\n this.ackMessage(messageId);\r\n return;\r\n }\r\n\r\n this.lastServerMessages.push(messageId);\r\n if(this.lastServerMessages.length > 100) {\r\n this.lastServerMessages.shift();\r\n }\r\n\r\n this.processMessage(message.body, message.msg_id, sessionId);\r\n break;\r\n }\r\n \r\n case 'new_session_created': {\r\n this.ackMessage(messageId);\r\n\r\n if(this.debug) {\r\n this.log.debug('new_session_created', message);\r\n }\r\n //this.updateSession();\r\n \r\n this.processMessageAck(message.first_msg_id);\r\n this.applyServerSalt(message.server_salt);\r\n \r\n sessionStorage.get('dc').then((baseDcId) => {\r\n if(baseDcId === this.dcId && !this.isFileNetworker && networkerFactory.updatesProcessor) {\r\n networkerFactory.updatesProcessor(message);\r\n }\r\n });\r\n break;\r\n }\r\n \r\n case 'msgs_ack': {\r\n for(const msgId of message.msg_ids) {\r\n this.processMessageAck(msgId);\r\n }\r\n\r\n break;\r\n }\r\n \r\n case 'msg_detailed_info':\r\n if(!this.sentMessages[message.msg_id]) {\r\n this.ackMessage(message.answer_msg_id);\r\n break;\r\n }\r\n case 'msg_new_detailed_info':\r\n if(this.pendingAcks.indexOf(message.answer_msg_id)) {\r\n break;\r\n }\r\n this.reqResendMessage(message.answer_msg_id);\r\n break;\r\n \r\n case 'msgs_state_info': {\r\n this.ackMessage(message.answer_msg_id);\r\n if(this.lastResendReq && \r\n this.lastResendReq.req_msg_id === message.req_msg_id && \r\n this.pendingResends.length\r\n ) {\r\n for(const badMsgId of this.lastResendReq.resend_msg_ids) {\r\n const pos = this.pendingResends.indexOf(badMsgId);\r\n if(pos !== -1) {\r\n this.pendingResends.splice(pos, 1);\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 'rpc_result': {\r\n this.ackMessage(messageId);\r\n \r\n const sentMessageId = message.req_msg_id;\r\n const sentMessage = this.sentMessages[sentMessageId];\r\n\r\n this.processMessageAck(sentMessageId);\r\n if(sentMessage) {\r\n const deferred = sentMessage.deferred;\r\n if(message.result._ === 'rpc_error') {\r\n const error = this.processError(message.result);\r\n this.log('Rpc error', error);\r\n if(deferred) {\r\n deferred.reject(error);\r\n }\r\n } else {\r\n if(deferred) {\r\n /* if(DEBUG) {\r\n this.log.debug('Rpc response', message.result, sentMessage);\r\n } */\r\n\r\n deferred.resolve(message.result);\r\n }\r\n\r\n if(sentMessage.isAPI && !this.connectionInited) {\r\n this.connectionInited = true;\r\n ////this.log('Rpc set connectionInited to:', this.connectionInited);\r\n }\r\n }\r\n \r\n delete this.sentMessages[sentMessageId];\r\n } else {\r\n if(this.debug) {\r\n this.log('Rpc result for unknown message:', sentMessageId, message);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 'pong': { // * https://core.telegram.org/mtproto/service_messages#ping-messages-pingpong - These messages doesn't require acknowledgments\r\n if((this.transport as TcpObfuscated).networker) {\r\n const sentMessageId = message.msg_id;\r\n const sentMessage = this.sentMessages[sentMessageId]; \r\n\r\n if(sentMessage) {\r\n sentMessage.deferred.resolve(message);\r\n delete this.sentMessages[sentMessageId];\r\n }\r\n }\r\n\r\n break;\r\n }\r\n \r\n default:\r\n this.ackMessage(messageId);\r\n\r\n /* if(this.debug) {\r\n this.log.debug('Update', message);\r\n } */\r\n \r\n if(networkerFactory.updatesProcessor !== null) {\r\n networkerFactory.updatesProcessor(message);\r\n }\r\n break;\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n/* import { copy } from \"./object\";\r\n\r\nexport function listMergeSorted(list1: any[] = [], list2: any[] = []) {\r\n const result = copy(list1);\r\n\r\n const minId = list1.length ? list1[list1.length - 1] : 0xFFFFFFFF;\r\n for(let i = 0; i < list2.length; i++) {\r\n if(list2[i] < minId) {\r\n result.push(list2[i]);\r\n }\r\n }\r\n\r\n return result;\r\n} */\r\n\r\nexport const accumulate = (arr: number[], initialValue: number) => arr.reduce((acc, value) => acc + value, initialValue);\r\n\r\nexport function findAndSpliceAll<T>(array: Array<T>, verify: (value: T, index: number, arr: typeof array) => boolean) {\r\n const out: typeof array = [];\r\n let idx = -1;\r\n while((idx = array.findIndex(verify)) !== -1) {\r\n out.push(array.splice(idx, 1)[0]);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function forEachReverse<T>(array: Array<T>, callback: (value: T, index?: number, array?: Array<T>) => void) {\r\n for(let length = array.length, i = length - 1; i >= 0; --i) {\r\n callback(array[i], i, array);\r\n }\r\n};\r\n\r\nexport function insertInDescendSortedArray<T extends {[smth in K]?: number}, K extends keyof T>(array: Array<T>, element: T, property: K, pos?: number) {\r\n if(pos === undefined) {\r\n pos = array.indexOf(element);\r\n if(pos !== -1) {\r\n array.splice(pos, 1);\r\n }\r\n }\r\n\r\n const sortProperty: number = element[property];\r\n const len = array.length;\r\n if(!len || sortProperty <= array[len - 1][property]) {\r\n return array.push(element) - 1;\r\n } else if(sortProperty >= array[0][property]) {\r\n array.unshift(element);\r\n return 0;\r\n } else {\r\n for(let i = 0; i < len; i++) {\r\n if(sortProperty > array[i][property]) {\r\n array.splice(i, 0, element);\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n console.error('wtf', array, element);\r\n return array.indexOf(element);\r\n}\r\n\r\nexport function filterUnique<T extends Array<any>>(arr: T): T {\r\n return [...new Set(arr)] as T;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { ConnectionStatusChange } from \"./connectionStatus\";\r\nimport MTPNetworker from \"./networker\";\r\nimport { InvokeApiOptions } from \"../../types\";\r\nimport MTTransport from \"./transports/transport\";\r\nimport App from \"../../config/app\";\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\n\r\nexport class NetworkerFactory {\r\n private networkers: MTPNetworker[] = [];\r\n public language = navigator.language || App.langPackCode;\r\n public updatesProcessor: (obj: any) => void = null;\r\n public onConnectionStatusChange: (info: ConnectionStatusChange) => void = null;\r\n public akStopped = false;\r\n public userAgent = navigator.userAgent;\r\n\r\n public removeNetworker(networker: MTPNetworker) {\r\n const idx = this.networkers.indexOf(networker);\r\n if(idx !== -1) {\r\n this.networkers.splice(idx, 1);\r\n }\r\n }\r\n\r\n public setUpdatesProcessor(callback: (obj: any) => void) {\r\n this.updatesProcessor = callback;\r\n }\r\n\r\n public getNetworker(dcId: number, authKey: Uint8Array, authKeyId: Uint8Array, serverSalt: Uint8Array, transport: MTTransport, options: InvokeApiOptions) {\r\n //console.log('NetworkerFactory: creating new instance of MTPNetworker:', dcId, options);\r\n const networker = new MTPNetworker(dcId, authKey, authKeyId, serverSalt, transport, options);\r\n this.networkers.push(networker);\r\n return networker;\r\n }\r\n\r\n public startAll() {\r\n if(this.akStopped) {\r\n const stoppedNetworkers = this.networkers.filter(networker => networker.isStopped());\r\n\r\n this.akStopped = false;\r\n this.updatesProcessor && this.updatesProcessor({_: 'new_session_created'});\r\n \r\n for(const networker of stoppedNetworkers) {\r\n networker.scheduleRequest();\r\n }\r\n }\r\n }\r\n\r\n public stopAll() {\r\n this.akStopped = true;\r\n }\r\n\r\n public setLanguage(langCode: string) {\r\n this.language = langCode;\r\n for(const networker of this.networkers) {\r\n if(!networker.isFileNetworker) {\r\n networker.connectionInited = false;\r\n }\r\n }\r\n }\r\n\r\n public forceReconnectTimeout() {\r\n for(const networker of this.networkers) {\r\n networker.forceReconnectTimeout();\r\n }\r\n }\r\n\r\n public forceReconnect() {\r\n for(const networker of this.networkers) {\r\n if(!networker.isFileNetworker) {\r\n networker.forceReconnect();\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst networkerFactory = new NetworkerFactory();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.networkerFactory = networkerFactory);\r\nexport default networkerFactory;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap<any, Record<any, Set<any>>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\n\r\n// type EventLitenerCallback<T> = (data: T) => \r\n// export default class EventListenerBase<Listeners extends {[name: string]: Function}> {\r\nexport default class EventListenerBase<Listeners extends Record<string, Function>> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], options: boolean | AddEventListenerOptions}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes<Listeners[k]>\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener<T extends keyof Listeners>(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, options}); // ! add before because if you don't, you won't be able to delete it from callback\r\n\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if((options as AddEventListenerOptions)?.once) {\r\n this.listeners[name].pop();\r\n return;\r\n }\r\n }\r\n \r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public addMultipleEventsListeners(obj: {\r\n [name in keyof Listeners]?: Listeners[name]\r\n }) {\r\n for(const i in obj) {\r\n this.addEventListener(i, obj[i]);\r\n }\r\n }\r\n\r\n public removeEventListener<T extends keyof Listeners>(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent<T extends keyof Listeners>(name: T, ...args: ArgumentTypes<Listeners[T]>) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array<SuperReturnType<Listeners[typeof name]>> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener) => {\r\n const index = listeners.findIndex((l) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if((listener.options as AddEventListenerOptions)?.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { logger, LogTypes } from '../../logger';\r\nimport Modes from '../../../config/modes';\r\nimport EventListenerBase from '../../../helpers/eventListenerBase';\r\nimport { MTConnection } from './transport';\r\n\r\nexport default class Socket extends EventListenerBase<{\r\n open: () => void,\r\n message: (buffer: ArrayBuffer) => any,\r\n close: () => void,\r\n}> implements MTConnection {\r\n private ws: WebSocket;\r\n private log: ReturnType<typeof logger>;\r\n private debug = Modes.debug && false;\r\n\r\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\r\n super();\r\n\r\n let logTypes = LogTypes.Error | LogTypes.Log;\r\n if(this.debug) logTypes |= LogTypes.Debug;\r\n this.log = logger(`WS-${dcId}` + logSuffix, logTypes);\r\n this.log('constructor');\r\n this.connect();\r\n\r\n return this;\r\n }\r\n\r\n private removeListeners() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.ws.removeEventListener('open', this.handleOpen);\r\n this.ws.removeEventListener('close', this.handleClose);\r\n this.ws.removeEventListener('error', this.handleError);\r\n this.ws.removeEventListener('message', this.handleMessage);\r\n this.ws = undefined;\r\n }\r\n \r\n private connect() {\r\n this.ws = new WebSocket(this.url, 'binary');\r\n this.ws.binaryType = 'arraybuffer';\r\n this.ws.addEventListener('open', this.handleOpen);\r\n this.ws.addEventListener('close', this.handleClose);\r\n this.ws.addEventListener('error', this.handleError);\r\n this.ws.addEventListener('message', this.handleMessage);\r\n }\r\n\r\n public close() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.log('close execution');\r\n\r\n try {\r\n this.ws.close();\r\n } catch(err) {\r\n\r\n }\r\n this.handleClose();\r\n }\r\n \r\n private handleOpen = () => {\r\n this.log('opened');\r\n\r\n this.debug && this.log.debug('sending init packet');\r\n this.dispatchEvent('open');\r\n };\r\n\r\n private handleError = (e: Event) => {\r\n this.log.error('handleError', e);\r\n this.close();\r\n };\r\n\r\n private handleClose = () => {\r\n this.log('closed'/* , event, this.pending, this.ws.bufferedAmount */);\r\n\r\n this.removeListeners();\r\n this.dispatchEvent('close');\r\n };\r\n\r\n private handleMessage = (event: MessageEvent) => {\r\n this.debug && this.log.debug('<-', 'handleMessage', /* event, */event.data.byteLength);\r\n\r\n this.dispatchEvent('message', event.data as ArrayBuffer);\r\n };\r\n\r\n public send = (body: Uint8Array) => {\r\n this.debug && this.log.debug('-> body length to send:', body.length);\r\n\r\n this.ws.send(body);\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import aesjs from 'aes-js';\r\nimport AES from \"@cryptography/aes\";\r\nimport { bytesFromWordss } from \"../../../helpers/bytes\";\r\nimport { Codec } from \"./codec\";\r\n\r\nclass Counter {\r\n _counter: Uint8Array;\r\n\r\n constructor(initialValue: Uint8Array) {\r\n this._counter = initialValue;\r\n }\r\n\r\n increment() {\r\n for(let i = 15; i >= 0; i--) {\r\n if(this._counter[i] === 255) {\r\n this._counter[i] = 0;\r\n } else {\r\n this._counter[i]++;\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass CTR {\r\n _counter: Counter;\r\n _remainingCounter: Uint8Array = null;\r\n _remainingCounterIndex = 16;\r\n _aes: AES;\r\n\r\n constructor(key: Uint8Array, counter: Uint8Array) {\r\n this._counter = new Counter(counter);\r\n this._aes = new AES(key);\r\n }\r\n\r\n update(payload: Uint8Array) {\r\n const encrypted = payload.slice();\r\n\r\n for(let i = 0; i < encrypted.length; i++) {\r\n if(this._remainingCounterIndex === 16) {\r\n this._remainingCounter = new Uint8Array(bytesFromWordss(this._aes.encrypt(this._counter._counter)));\r\n this._remainingCounterIndex = 0;\r\n this._counter.increment();\r\n }\r\n\r\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\r\n }\r\n\r\n return encrypted;\r\n }\r\n}\r\n\r\n/* \r\n@cryptography/aes не работает с массивами которые не кратны 4, поэтому использую intermediate а не abridged\r\n*/\r\nexport default class Obfuscation {\r\n /* public enc: aesjs.ModeOfOperation.ModeOfOperationCTR;\r\n public dec: aesjs.ModeOfOperation.ModeOfOperationCTR; */\r\n\r\n public encNew: CTR;\r\n public decNew: CTR;\r\n\r\n public init(codec: Codec) {\r\n const initPayload = new Uint8Array(64);\r\n initPayload.randomize();\r\n \r\n while(true) {\r\n let val = (initPayload[3] << 24) | (initPayload[2] << 16) | (initPayload[1] << 8) | (initPayload[0]);\r\n let val2 = (initPayload[7] << 24) | (initPayload[6] << 16) | (initPayload[5] << 8) | (initPayload[4]);\r\n if(initPayload[0] !== 0xef &&\r\n val !== 0x44414548 &&\r\n val !== 0x54534f50 &&\r\n val !== 0x20544547 &&\r\n val !== 0x4954504f &&\r\n val !== 0xeeeeeeee &&\r\n val !== 0xdddddddd &&\r\n val2 !== 0x00000000) {\r\n //initPayload[56] = initPayload[57] = initPayload[58] = initPayload[59] = transport;\r\n break;\r\n }\r\n initPayload.randomize();\r\n }\r\n\r\n ////////////////////////initPayload.subarray(60, 62).hex = dcId;\r\n /* initPayload.set(new Uint8Array([161, 208, 67, 71, 118, 109, 20, 111, 113, 255, 134, 10, 159, 241, 7, 44, 217, 82, 187, 76, 108, 131, 200, 186, 33, 57, 177, 251, 52, 34, 18, 54, 65, 105, 37, 89, 38, 20, 47, 168, 126, 181, 24, 138, 212, 68, 60, 150, 225, 37, 181, 4, 201, 50, 72, 151, 168, 143, 204, 169, 81, 187, 241, 23]));\r\n console.log('initPayload', initPayload); */\r\n\r\n const reversedPayload = initPayload.slice().reverse();\r\n\r\n const encKey = initPayload.slice(8, 40);\r\n const encIv = initPayload.slice(40, 56);\r\n const decKey = reversedPayload.slice(8, 40);\r\n const decIv = reversedPayload.slice(40, 56);\r\n\r\n /* this.enc = new aesjs.ModeOfOperation.ctr(encKey, new aesjs.Counter(encIv as any));\r\n this.dec = new aesjs.ModeOfOperation.ctr(decKey, new aesjs.Counter(decIv as any)); */\r\n\r\n // console.log('encKey', encKey.hex, encIv.hex);\r\n // console.log('decKey', decKey.hex, decIv.hex);\r\n\r\n this.encNew = new CTR(encKey, encIv);\r\n this.decNew = new CTR(decKey, decIv);\r\n\r\n initPayload.set(codec.obfuscateTag, 56);\r\n const encrypted = this.encode(initPayload);\r\n\r\n //console.log('encrypted', encrypted);\r\n\r\n initPayload.set(encrypted.slice(56, 64), 56);\r\n\r\n return initPayload;\r\n }\r\n\r\n /* public encode(payload: Uint8Array) {\r\n let startTime = performance.now();\r\n let res = this.enc.encrypt(payload);\r\n let time = performance.now() - startTime;\r\n\r\n try {\r\n startTime = performance.now();\r\n let arr = this.encNew.encrypt(payload);\r\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\r\n let resNew = new Uint8Array(bytesFromWordss(arr));\r\n let time2 = performance.now() - startTime;\r\n console.log('Obfuscation: encode comparison:', res, arr, resNew, res.hex === resNew.hex, time2 < time);\r\n } catch(err) {\r\n console.error('Obfuscation: error:', err);\r\n }\r\n \r\n return res;\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n let res = this.dec.encrypt(payload);\r\n\r\n try {\r\n let arr = this.decNew.decrypt(payload);\r\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\r\n let resNew = new Uint8Array(bytesFromWordss(arr));\r\n console.log('Obfuscation: decode comparison:', res, arr, resNew, res.hex === resNew.hex);\r\n } catch(err) {\r\n console.error('Obfuscation: error:', err);\r\n }\r\n \r\n return res;\r\n } */\r\n public encode(payload: Uint8Array) {\r\n return this.encNew.update(payload);\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n return this.decNew.update(payload);\r\n }\r\n /* public encode(payload: Uint8Array) {\r\n let res = this.encNew.encrypt(payload);\r\n let bytes = new Uint8Array(bytesFromWordss(res));\r\n \r\n return bytes;\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n let res = this.decNew.decrypt(payload);\r\n let bytes = new Uint8Array(bytesFromWordss(res));\r\n \r\n return bytes;\r\n } */\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { Codec } from \"./codec\";\r\n\r\nexport class IntermediatePacketCodec implements Codec {\r\n public tag = 0xee;\r\n public obfuscateTag = new Uint8Array([this.tag, this.tag, this.tag, this.tag]);\r\n\r\n //private lol = 0;\r\n\r\n public encodePacket(data: Uint8Array) {\r\n if((data.length % 4) !== 0) {\r\n console.error('Encode error!', data.length, data);\r\n }\r\n\r\n const len = data.length;\r\n const header = new Uint8Array(new Int32Array([/* ++this.lol >= 25 ? 0x80000001 : */len]).buffer);\r\n\r\n //console.log('got nobody cause im braindead', header, len, /* data, */data.buffer.byteLength === data.length);\r\n return header.concat(data);\r\n }\r\n\r\n public readPacket(data: Uint8Array) {\r\n const length = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);\r\n\r\n return data.slice(4, 4 + length);\r\n }\r\n}\r\n\r\nexport default new IntermediatePacketCodec();\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from \"../../../config/modes\";\nimport { logger, LogTypes } from \"../../logger\";\nimport MTPNetworker from \"../networker\";\nimport Obfuscation from \"./obfuscation\";\nimport MTTransport, { MTConnection, MTConnectionConstructable } from \"./transport\";\nimport intermediatePacketCodec from './intermediate';\nimport { ConnectionStatus } from \"../connectionStatus\";\n\nexport default class TcpObfuscated implements MTTransport {\n private codec = intermediatePacketCodec;\n private obfuscation = new Obfuscation();\n public networker: MTPNetworker;\n\n private pending: Array<Partial<{\n resolve: any, \n reject: any, \n body: Uint8Array, \n encoded?: Uint8Array,\n bodySent: boolean\n }>> = [];\n\n private debug = Modes.debug && false/* true */;\n private log: ReturnType<typeof logger>;\n public connected = false;\n private lastCloseTime: number;\n private connection: MTConnection;\n\n private autoReconnect = true;\n private reconnectTimeout: number;\n\n //private debugPayloads: MTPNetworker['debugRequests'] = [];\n\n constructor(private Connection: MTConnectionConstructable, \n private dcId: number, \n private url: string, \n private logSuffix: string, \n private retryTimeout: number\n ) {\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n this.log = logger(`TCP-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n \n this.connect();\n }\n\n private onOpen = () => {\n this.connected = true;\n\n const initPayload = this.obfuscation.init(this.codec);\n\n this.connection.send(initPayload);\n\n if(this.networker) {\n this.pending.length = 0; // ! clear queue and reformat messages to container, because if sending simultaneously 10+ messages, connection will die\n this.networker.setConnectionStatus(ConnectionStatus.Connected);\n this.networker.cleanupSent();\n this.networker.resend();\n } else {\n for(const pending of this.pending) {\n if(pending.encoded && pending.body) {\n pending.encoded = this.encodeBody(pending.body);\n }\n }\n }\n\n setTimeout(() => {\n this.releasePending();\n }, 0);\n };\n\n private onMessage = (buffer: ArrayBuffer) => {\n let data = this.obfuscation.decode(new Uint8Array(buffer));\n data = this.codec.readPacket(data);\n\n if(this.networker) { // authenticated!\n //this.pending = this.pending.filter(p => p.body); // clear pending\n\n this.debug && this.log.debug('redirecting to networker', data.length);\n this.networker.parseResponse(data).then(response => {\n this.debug && this.log.debug('redirecting to networker response:', response);\n\n try {\n this.networker.processMessage(response.response, response.messageId, response.sessionId);\n } catch(err) {\n this.log.error('handleMessage networker processMessage error', err);\n }\n\n //this.releasePending();\n }).catch(err => {\n this.log.error('handleMessage networker parseResponse error', err);\n });\n\n //this.dd();\n return;\n }\n\n //console.log('got hex:', data.hex);\n const pending = this.pending.shift();\n if(!pending) {\n this.debug && this.log.debug('no pending for res:', data.hex);\n return;\n }\n\n pending.resolve(data);\n };\n\n private onClose = () => {\n this.clear();\n \n let needTimeout: number, retryAt: number;\n if(this.autoReconnect) {\n const time = Date.now();\n const diff = time - this.lastCloseTime;\n needTimeout = !isNaN(diff) && diff < this.retryTimeout ? this.retryTimeout - diff : 0;\n retryAt = time + needTimeout;\n }\n \n if(this.networker) {\n this.networker.setConnectionStatus(ConnectionStatus.Closed, retryAt);\n this.pending.length = 0;\n }\n\n if(this.autoReconnect) {\n this.log('will try to reconnect after timeout:', needTimeout / 1000);\n this.reconnectTimeout = self.setTimeout(this.reconnect, needTimeout);\n } else {\n this.log('reconnect isn\\'t needed');\n }\n };\n\n public clear() {\n this.connected = false;\n\n if(this.connection) {\n this.connection.removeEventListener('open', this.onOpen);\n this.connection.removeEventListener('close', this.onClose);\n this.connection.removeEventListener('message', this.onMessage);\n this.connection = undefined;\n }\n }\n\n /**\n * invoke only when closed\n */\n public reconnect = () => {\n if(this.reconnectTimeout !== undefined) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n\n if(this.connection) {\n return;\n }\n\n this.log('trying to reconnect...');\n this.lastCloseTime = Date.now();\n \n if(!this.networker) {\n for(const pending of this.pending) {\n if(pending.bodySent) {\n pending.bodySent = false;\n }\n }\n } else {\n this.networker.setConnectionStatus(ConnectionStatus.Connecting);\n }\n\n this.connect();\n }\n\n public forceReconnect() {\n this.close();\n this.reconnect();\n }\n\n public destroy() {\n this.setAutoReconnect(false);\n this.close();\n }\n\n public close() {\n const connection = this.connection;\n if(connection) {\n const connected = this.connected;\n this.clear();\n if(connected) { // wait for buffered messages if they are there\n connection.addEventListener('message', this.onMessage);\n connection.addEventListener('close', () => {\n connection.removeEventListener('message', this.onMessage);\n }, {once: true});\n connection.close();\n }\n }\n }\n\n /**\n * Will connect if enable and disconnected \\\n * Will reset reconnection timeout if disable\n */\n public setAutoReconnect(enable: boolean) {\n this.autoReconnect = enable;\n\n if(!enable) {\n if(this.reconnectTimeout !== undefined) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n } else if(!this.connection && this.reconnectTimeout === undefined) {\n this.reconnect();\n }\n }\n\n private connect() {\n if(this.connection) {\n this.close();\n }\n\n this.connection = new this.Connection(this.dcId, this.url, this.logSuffix);\n this.connection.addEventListener('open', this.onOpen);\n this.connection.addEventListener('close', this.onClose);\n this.connection.addEventListener('message', this.onMessage);\n }\n\n private encodeBody(body: Uint8Array) {\n const toEncode = this.codec.encodePacket(body);\n\n //this.log('send before obf:', /* body.hex, nonce.hex, */ toEncode.hex);\n const encoded = this.obfuscation.encode(toEncode);\n //this.log('send after obf:', enc.hex);\n\n return encoded;\n }\n\n public send(body: Uint8Array) {\n this.debug && this.log.debug('-> body length to pending:', body.length);\n\n const encoded: typeof body = this.connected ? this.encodeBody(body) : undefined;\n\n //return;\n\n if(this.networker) {\n this.pending.push({body, encoded});\n this.releasePending();\n } else {\n const promise = new Promise<typeof body>((resolve, reject) => {\n this.pending.push({resolve, reject, body, encoded});\n });\n\n this.releasePending();\n\n return promise;\n }\n }\n\n private releasePending(/* tt = false */) {\n if(!this.connected) {\n //this.connect();\n return;\n }\n\n /* if(!tt) {\n this.releasePendingDebounced();\n return;\n } */\n\n //this.log('-> messages to send:', this.pending.length);\n let length = this.pending.length;\n //for(let i = length - 1; i >= 0; --i) {\n for(let i = 0; i < length; ++i) {\n /* if(this.ws.bufferedAmount) {\n break;\n } */\n\n const pending = this.pending[i];\n const {body, bodySent} = pending;\n let encoded = pending.encoded;\n if(body && !bodySent) {\n\n //this.debugPayloads.push({before: body.slice(), after: enc});\n\n this.debug && this.log.debug('-> body length to send:', body.length);\n /* if(this.ws.bufferedAmount) {\n this.log.error('bufferedAmount:', this.ws.bufferedAmount);\n } */\n\n /* if(this.ws.readyState !== this.ws.OPEN) {\n this.log.error('ws is closed?');\n this.connected = false;\n break;\n } */\n\n if(!encoded) {\n encoded = pending.encoded = this.encodeBody(body);\n }\n\n //this.lol.push(body);\n //setTimeout(() => {\n this.connection.send(encoded);\n //}, 100);\n //this.dd();\n \n if(!pending.resolve) { // remove if no response needed\n this.pending.splice(i--, 1);\n length--;\n } else {\n pending.bodySent = true;\n }\n\n //delete pending.body;\n }\n }\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport const userAgent = navigator ? navigator.userAgent : null;\r\nexport const isApple = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\r\nexport const isAndroid = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\r\nexport const isChromium = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\r\n\r\nexport const ctx = typeof(window) !== 'undefined' ? window : self;\r\n\r\n// https://stackoverflow.com/a/58065241\r\nexport const isAppleMobile = (/iPad|iPhone|iPod/.test(navigator.platform) ||\r\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\r\n !ctx.MSStream;\r\n\r\nexport const isSafari = !!('safari' in ctx) || !!(userAgent && (/\\b(iPad|iPhone|iPod)\\b/.test(userAgent) || (!!userAgent.match('Safari') && !userAgent.match('Chrome'))))/* || true */;\r\nexport const isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n\r\nexport const isMobileSafari = isSafari && isAppleMobile;\r\n\r\nexport const isMobile = /* screen.width && screen.width < 480 || */navigator.maxTouchPoints > 0 && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { notifyAll } from \"../../../helpers/context\";\r\nimport EventListenerBase from \"../../../helpers/eventListenerBase\";\r\nimport { WorkerTaskVoidTemplate } from \"../../../types\";\r\nimport { MTConnection } from \"./transport\";\r\n\r\nlet socketId = 0;\r\nexport interface SocketProxyTask extends WorkerTaskVoidTemplate {\r\n type: 'socketProxy',\r\n payload: SocketProxySetupTask | SocketProxySendTask | SocketProxyCloseTask\r\n};\r\n\r\nexport interface SocketProxySetupTask extends WorkerTaskVoidTemplate {\r\n type: 'setup',\r\n payload: {\r\n dcId: number,\r\n url: string,\r\n logSuffix: string\r\n },\r\n id: number\r\n};\r\n\r\nexport interface SocketProxySendTask extends WorkerTaskVoidTemplate {\r\n type: 'send',\r\n payload: Uint8Array,\r\n id: number\r\n};\r\n\r\nexport interface SocketProxyCloseTask extends WorkerTaskVoidTemplate {\r\n type: 'close',\r\n id: number\r\n};\r\n\r\n \r\nexport default class SocketProxied extends EventListenerBase<{\r\n open: () => void,\r\n message: (buffer: ArrayBuffer) => any,\r\n close: () => void,\r\n}> implements MTConnection {\r\n private id: number;\r\n\r\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\r\n super();\r\n this.id = ++socketId;\r\n socketsProxied.set(this.id, this);\r\n\r\n const task: SocketProxyTask = {\r\n type: 'socketProxy',\r\n payload: {\r\n type: 'setup', \r\n payload: {\r\n dcId, \r\n url,\r\n logSuffix\r\n },\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n\r\n public send(payload: Uint8Array) {\r\n const task: SocketProxyTask = {\r\n type: 'socketProxy', \r\n payload: {\r\n type: 'send',\r\n payload,\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n\r\n public close() {\r\n const task: SocketProxyTask = {\r\n type: 'socketProxy',\r\n payload: {\r\n type: 'close',\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n}\r\n \r\n\r\nexport const socketsProxied: Map<number, SocketProxied> = new Map();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport MTTransport, { MTConnectionConstructable } from './transports/transport';\r\nimport Modes from '../../config/modes';\r\n\r\n \r\n \r\n \r\n\r\n \r\nimport Socket from './transports/websocket';\r\nimport TcpObfuscated from './transports/tcpObfuscated';\r\nimport { isSafari } from '../../helpers/userAgent';\r\nimport { isWebWorker } from '../../helpers/context';\r\nimport SocketProxied from './transports/socketProxied';\r\nimport App from '../../config/app';\r\n \r\n\r\nexport type TransportType = 'websocket' | 'https' | 'http';\r\nexport type ConnectionType = 'client' | 'download' | 'upload';\r\ntype Servers = {\r\n [transportType in TransportType]: {\r\n [connectionType in ConnectionType]: {\r\n [dcId: number]: MTTransport[]\r\n }\r\n }\r\n};\r\n\r\nconst TEST_SUFFIX = Modes.test ? '_test' : '';\r\n\r\nexport class DcConfigurator {\r\n private sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora'];\r\n\r\n private dcOptions = Modes.test\r\n ? [\r\n {id: 1, host: '149.154.175.10', port: 80},\r\n {id: 2, host: '149.154.167.40', port: 80},\r\n {id: 3, host: '149.154.175.117', port: 80}\r\n ]\r\n : [\r\n {id: 1, host: '149.154.175.50', port: 80},\r\n {id: 2, host: '149.154.167.50', port: 80},\r\n {id: 3, host: '149.154.175.100', port: 80},\r\n {id: 4, host: '149.154.167.91', port: 80},\r\n {id: 5, host: '149.154.171.5', port: 80}\r\n ];\r\n\r\n public chosenServers: Servers = {} as any;\r\n\r\n \r\n private transportSocket = (dcId: number, connectionType: ConnectionType, suffix: string) => {\r\n const path = 'apiws' + TEST_SUFFIX;\r\n const chosenServer = `wss://${App.suffix.toLowerCase()}ws${dcId}${suffix}.web.telegram.org/${path}`;\r\n const logSuffix = connectionType === 'upload' ? '-U' : connectionType === 'download' ? '-D' : '';\r\n\r\n const retryTimeout = connectionType === 'client' ? 10000 : 10000;\r\n\r\n const oooohLetMeLive: MTConnectionConstructable = (isSafari && isWebWorker && typeof(SocketProxied) !== 'undefined') /* || true */ ? SocketProxied : Socket;\r\n\r\n return new TcpObfuscated(oooohLetMeLive, dcId, chosenServer, logSuffix, retryTimeout);\r\n };\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n public chooseServer(dcId: number, connectionType: ConnectionType = 'client', transportType: TransportType = 'websocket', reuse = true) {\r\n /* if(transportType === 'websocket' && !Modes.multipleConnections) {\r\n connectionType = 'client';\r\n } */\r\n\r\n if(!this.chosenServers.hasOwnProperty(transportType)) {\r\n this.chosenServers[transportType] = {\r\n client: {},\r\n download: {},\r\n upload: {}\r\n };\r\n }\r\n\r\n const servers = this.chosenServers[transportType][connectionType];\r\n\r\n if(!(dcId in servers)) {\r\n servers[dcId] = [];\r\n }\r\n\r\n const transports = servers[dcId];\r\n\r\n if(!transports.length || !reuse/* || (upload && transports.length < 1) */) {\r\n let transport: MTTransport;\r\n\r\n const suffix = connectionType === 'client' ? '' : '-1';\r\n\r\n \r\n \r\n \r\n transport = this.transportSocket(dcId, connectionType, suffix);\r\n \r\n \r\n \r\n \r\n if(!transport) {\r\n console.error('No chosenServer!', dcId);\r\n return null;\r\n }\r\n \r\n if(reuse) {\r\n transports.push(transport);\r\n }\r\n \r\n return transport;\r\n }\r\n \r\n return transports[0];\r\n }\r\n \r\n public static removeTransport<T>(obj: any, transport: T) {\r\n for(const transportType in obj) {\r\n // @ts-ignore\r\n for(const connectionType in obj[transportType]) {\r\n // @ts-ignore\r\n for(const dcId in obj[transportType][connectionType]) {\r\n // @ts-ignore\r\n const transports: T[] = obj[transportType][connectionType][dcId];\r\n const idx = transports.indexOf(transport);\r\n if(idx !== -1) {\r\n transports.splice(idx, 1);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default new DcConfigurator();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { TLSerialization } from \"./tl_utils\";\r\nimport CryptoWorker from '../crypto/cryptoworker';\r\nimport { bytesFromHex, bytesToHex } from \"../../helpers/bytes\";\r\nimport { bigInt2str, str2bigInt } from \"../../vendor/leemon\";\r\nimport Modes from \"../../config/modes\";\r\n\r\nexport type RSAPublicKeyHex = {\r\n modulus: string,\r\n exponent: string\r\n};\r\n\r\nexport class RSAKeysManager {\r\n\r\n /**\r\n * Server public key, obtained from here: https://core.telegram.org/api/obtaining_api_id\r\n * \r\n * \r\n * -----BEGIN RSA PUBLIC KEY-----\r\n * MIIBCgKCAQEA6LszBcC1LGzyr992NzE0ieY+BSaOW622Aa9Bd4ZHLl+TuFQ4lo4g\r\n * 5nKaMBwK/BIb9xUfg0Q29/2mgIR6Zr9krM7HjuIcCzFvDtr+L0GQjae9H0pRB2OO\r\n * 62cECs5HKhT5DZ98K33vmWiLowc621dQuwKWSQKjWf50XYFw42h21P2KXUGyp2y/\r\n * +aEyZ+uVgLLQbRA1dEjSDZ2iGRy12Mk5gpYc397aYp438fsJoHIgJ2lgMv5h7WY9\r\n * t6N/byY9Nw9p21Og3AoXSL2q/2IJ1WRUhebgAdGVMlV1fkuOQoEzR7EdpqtQD9Cs\r\n * 5+bfo3Nhmcyvk5ftB0WkJ9z6bNZ7yxrP8wIDAQAB\r\n * -----END RSA PUBLIC KEY-----\r\n *\r\n * -----BEGIN RSA PUBLIC KEY-----\r\n * MIIBCgKCAQEBadMIUYSKhyznMh+Pg+OxTLyDZrWEjQIPZC3oJCtuZX7qUxgcWqFX\r\n * Q1952TSY8S8NYuz12sK9Fvp+lil1hIG0U/cuPsK08VB1hB4VA+p0S46fGwVsRovq\r\n * 4qUiUIzQSjSHDASuXTOinlYEHwmg/GaLc5G7qhePWa0p9YmqYR5Ha3xHJywcXZrn\r\n * yE3nC9igL96Aanqv+Prbu1N+r9vAgZeHh9cfbtbV8WWwruOANOTEv2ctQLR0dfr9\r\n * MwQXNePTPQlYsO9HNIGS1LWe7hZFtGBAVJH92F7Kig68WqHM3PIZ6Sq7N0VSzfzL\r\n * b11Z/YHz2UXYtXADwL/m5pTpKBUtJBXkOQIDAQAB\r\n * -----END RSA PUBLIC KEY-----\r\n *\r\n * Bytes can be got via \r\n * $ openssl rsa -in rsa.pem -RSAPublicKey_in -pubout > pub.pem\r\n * $ openssl rsa -pubin -in pub.pem -text -noout\r\n */\r\n\r\n /* private publisKeysHex = [{\r\n modulus: 'c150023e2f70db7985ded064759cfecf0af328e69a41daf4d6f01b538135a6f91f8f8b2a0ec9ba9720ce352efcf6c5680ffc424bd634864902de0b4bd6d49f4e580230e3ae97d95c8b19442b3c0a10d8f5633fecedd6926a7f6dab0ddb7d457f9ea81b8465fcd6fffeed114011df91c059caedaf97625f6c96ecc74725556934ef781d866b34f011fce4d835a090196e9a5f0e4449af7eb697ddb9076494ca5f81104a305b6dd27665722c46b60e5df680fb16b210607ef217652e60236c255f6a28315f4083a96791d7214bf64c1df4fd0db1944fb26a2a57031b32eee64ad15a8ba68885cde74a5bfc920f6abf59ba5c75506373e7130f9042da922179251f',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'bdf2c77d81f6afd47bd30f29ac76e55adfe70e487e5e48297e5a9055c9c07d2b93b4ed3994d3eca5098bf18d978d54f8b7c713eb10247607e69af9ef44f38e28f8b439f257a11572945cc0406fe3f37bb92b79112db69eedf2dc71584a661638ea5becb9e23585074b80d57d9f5710dd30d2da940e0ada2f1b878397dc1a72b5ce2531b6f7dd158e09c828d03450ca0ff8a174deacebcaa22dde84ef66ad370f259d18af806638012da0ca4a70baa83d9c158f3552bc9158e69bf332a45809e1c36905a5caa12348dd57941a482131be7b2355a5f4635374f3bd3ddf5ff925bf4809ee27c1e67d9120c5fe08a9de458b1b4a3c5d0a428437f2beca81f4e2d5ff',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'b3f762b739be98f343eb1921cf0148cfa27ff7af02b6471213fed9daa0098976e667750324f1abcea4c31e43b7d11f1579133f2b3d9fe27474e462058884e5e1b123be9cbbc6a443b2925c08520e7325e6f1a6d50e117eb61ea49d2534c8bb4d2ae4153fabe832b9edf4c5755fdd8b19940b81d1d96cf433d19e6a22968a85dc80f0312f596bd2530c1cfb28b5fe019ac9bc25cd9c2a5d8a0f3a1c0c79bcca524d315b5e21b5c26b46babe3d75d06d1cd33329ec782a0f22891ed1db42a1d6c0dea431428bc4d7aabdcf3e0eb6fda4e23eb7733e7727e9a1915580796c55188d2596d2665ad1182ba7abf15aaa5a8b779ea996317a20ae044b820bff35b6e8a1',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'be6a71558ee577ff03023cfa17aab4e6c86383cff8a7ad38edb9fafe6f323f2d5106cbc8cafb83b869cffd1ccf121cd743d509e589e68765c96601e813dc5b9dfc4be415c7a6526132d0035ca33d6d6075d4f535122a1cdfe017041f1088d1419f65c8e5490ee613e16dbf662698c0f54870f0475fa893fc41eb55b08ff1ac211bc045ded31be27d12c96d8d3cfc6a7ae8aa50bf2ee0f30ed507cc2581e3dec56de94f5dc0a7abee0be990b893f2887bd2c6310a1e0a9e3e38bd34fded2541508dc102a9c9b4c95effd9dd2dfe96c29be647d6c69d66ca500843cfaed6e440196f1dbe0e2e22163c61ca48c79116fa77216726749a976a1c4b0944b5121e8c01',\r\n exponent: '010001'\r\n }]; */\r\n\r\n private testPublicKeysHex: RSAPublicKeyHex[] = [{\r\n modulus: 'c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5',\r\n exponent: '010001'\r\n }];\r\n\r\n private publisKeysHex: RSAPublicKeyHex[] = [{\r\n // modulus: '00e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3',\r\n modulus: 'e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3',\r\n exponent: '010001'\r\n }];\r\n\r\n private publicKeysParsed: {\r\n [hex: string]: RSAPublicKeyHex\r\n } = {};\r\n private prepared = false;\r\n private preparePromise: Promise<void> = null;\r\n\r\n constructor() {\r\n if(Modes.test) {\r\n this.publisKeysHex = this.testPublicKeysHex;\r\n }\r\n }\r\n\r\n public prepare(): Promise<void> {\r\n if(this.preparePromise) return this.preparePromise;\r\n else if(this.prepared) {\r\n return Promise.resolve();\r\n }\r\n\r\n return this.preparePromise = Promise.all(this.publisKeysHex.map(keyParsed => {\r\n const RSAPublicKey = new TLSerialization();\r\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.modulus), 'n');\r\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.exponent), 'e');\r\n\r\n const buffer = RSAPublicKey.getBuffer();\r\n\r\n return CryptoWorker.invokeCrypto('sha1-hash', buffer).then(bytes => {\r\n const fingerprintBytes = bytes.slice(-8);\r\n fingerprintBytes.reverse();\r\n \r\n this.publicKeysParsed[bytesToHex(fingerprintBytes).toLowerCase()] = {\r\n modulus: keyParsed.modulus,\r\n exponent: keyParsed.exponent\r\n };\r\n });\r\n })).then(() => {\r\n this.prepared = true;\r\n\r\n //console.log('[MT] Prepared keys');\r\n this.preparePromise = null;\r\n });\r\n }\r\n\r\n public async select(fingerprints: Array<string>) {\r\n await this.prepare();\r\n\r\n for(let i = 0; i < fingerprints.length; ++i) {\r\n //fingerprintHex = bigStringInt(fingerprints[i]).toString(16);\r\n let fingerprintHex = bigInt2str(str2bigInt(fingerprints[i], 10), 16).toLowerCase();\r\n\r\n if(fingerprintHex.length < 16) {\r\n fingerprintHex = new Array(16 - fingerprintHex.length).fill('0').join('') + fingerprintHex;\r\n }\r\n\r\n //console.log(fingerprintHex, this.publicKeysParsed);\r\n const foundKey = this.publicKeysParsed[fingerprintHex];\r\n if(foundKey) {\r\n return Object.assign({\r\n fingerprint: fingerprints[i]\r\n }, foundKey);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default new RSAKeysManager();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { TLSerialization, TLDeserialization } from \"./tl_utils\";\r\nimport dcConfigurator from \"./dcConfigurator\";\r\nimport rsaKeysManager from \"./rsaKeysManager\";\r\nimport timeManager from \"./timeManager\";\r\n\r\nimport CryptoWorker from \"../crypto/cryptoworker\";\r\n\r\nimport { logger, LogTypes } from \"../logger\";\r\nimport { bytesCmp, bytesToHex, bytesFromHex, bytesXor } from \"../../helpers/bytes\";\r\nimport DEBUG from \"../../config/debug\";\r\nimport { cmp, int2bigInt, one, pow, str2bigInt, sub } from \"../../vendor/leemon\";\r\nimport { addPadding } from \"./bin_utils\";\r\n\r\n/* let fNewNonce: any = bytesFromHex('8761970c24cb2329b5b2459752c502f3057cb7e8dbab200e526e8767fdc73b3c').reverse();\r\nlet fNonce: any = bytesFromHex('b597720d11faa5914ef485c529cde414').reverse();\r\nlet fResult: any = new Uint8Array(bytesFromHex('000000000000000001b473a0661b285e480000006324160514e4cd29c585f44e91a5fa110d7297b5c0c4134c84893db5715ecd56af5ed618082182053cc5de91cd00000015c4b51c02000000a5b7f709355fc30b216be86c022bb4c3'));\r\n\r\nfNewNonce = false;\r\nfNonce = false;\r\nfResult = false; */\r\n\r\ntype AuthOptions = {\r\n dcId: number,\r\n nonce: Uint8Array,\r\n \r\n serverNonce?: Uint8Array,\r\n pq?: Uint8Array,\r\n fingerprints?: string[],\r\n publicKey?: {\r\n modulus: string,\r\n exponent: string,\r\n fingerprint: string\r\n },\r\n \r\n // good\r\n p?: Uint8Array,\r\n q?: Uint8Array,\r\n \r\n newNonce?: Uint8Array,\r\n \r\n retry?: number,\r\n \r\n b?: Uint8Array,\r\n g?: number,\r\n gA?: Uint8Array,\r\n dhPrime?: Uint8Array,\r\n \r\n tmpAesKey?: Uint8Array,\r\n tmpAesIv?: Uint8Array,\r\n \r\n authKeyId?: Uint8Array,\r\n authKey?: Uint8Array,\r\n serverSalt?: Uint8Array,\r\n\r\n localTime?: number,\r\n serverTime?: any\r\n};\r\n\r\ntype ResPQ = {\r\n _: 'resPQ';\r\n nonce: Uint8Array;\r\n pq: Uint8Array;\r\n server_nonce: Uint8Array;\r\n server_public_key_fingerprints: string[];\r\n};\r\n\r\ntype P_Q_inner_data = {\r\n _: 'p_q_inner_data_dc';\r\n pq: Uint8Array;\r\n p: Uint8Array;\r\n q: Uint8Array;\r\n nonce: Uint8Array;\r\n server_nonce: Uint8Array;\r\n new_nonce: Uint8Array;\r\n dc: number;\r\n};\r\n\r\ntype req_DH_params = {\r\n nonce: Uint8Array;\r\n server_nonce: Uint8Array;\r\n p: Uint8Array;\r\n q: Uint8Array;\r\n public_key_fingerprint: string;\r\n encrypted_data: Uint8Array;\r\n};\r\n\r\nexport class Authorizer {\r\n private cached: {\r\n [dcId: number]: Promise<AuthOptions>\r\n } = {};\r\n \r\n private log: ReturnType<typeof logger>;\r\n \r\n constructor() {\r\n this.log = logger(`AUTHORIZER`, LogTypes.Error | LogTypes.Log);\r\n }\r\n \r\n private sendPlainRequest(dcId: number, requestArray: Uint8Array) {\r\n const requestLength = requestArray.byteLength;\r\n \r\n const header = new TLSerialization();\r\n header.storeLongP(0, 0, 'auth_key_id');\r\n header.storeLong(timeManager.generateId(), 'msg_id');\r\n header.storeInt(requestLength, 'request_length');\r\n \r\n const headerArray = header.getBytes(true) as Uint8Array;\r\n const resultArray = new Uint8Array(headerArray.byteLength + requestLength);\r\n resultArray.set(headerArray);\r\n resultArray.set(requestArray, headerArray.length);\r\n\r\n const transport = dcConfigurator.chooseServer(dcId);\r\n const baseError = {\r\n code: 406,\r\n type: 'NETWORK_BAD_RESPONSE',\r\n transport\r\n };\r\n \r\n if(DEBUG) {\r\n this.log('mtpSendPlainRequest: creating requestPromise');\r\n }\r\n \r\n const promise = transport.send(resultArray) as any as Promise<Uint8Array>;\r\n return promise.then(result => {\r\n if(DEBUG) {\r\n this.log('mtpSendPlainRequest: in good sector', result);\r\n }\r\n \r\n if(!result || !result.byteLength) {\r\n throw baseError;\r\n }\r\n \r\n try {\r\n /* result = fResult ? fResult : result;\r\n fResult = new Uint8Array(0); */\r\n \r\n const deserializer = new TLDeserialization(result, {mtproto: true});\r\n\r\n if(result.length === 4) {\r\n const errorCode = deserializer.fetchInt();\r\n this.log.error('mtpSendPlainRequest: wrong response, error code:', errorCode);\r\n throw errorCode;\r\n }\r\n\r\n const auth_key_id = deserializer.fetchLong('auth_key_id');\r\n if(auth_key_id !== '0') this.log.error('auth_key_id !== 0', auth_key_id);\r\n \r\n const msg_id = deserializer.fetchLong('msg_id');\r\n if(msg_id === '0') this.log.error('msg_id === 0', msg_id);\r\n \r\n const msg_len = deserializer.fetchInt('msg_len');\r\n if(!msg_len) this.log.error('no msg_len', msg_len);\r\n \r\n return deserializer;\r\n } catch(e) {\r\n this.log.error('mtpSendPlainRequest: deserialization went bad', e);\r\n const error = Object.assign(baseError, {originalError: e});\r\n throw error;\r\n }\r\n }, (error) => {\r\n if(!error.message && !error.type) {\r\n error = Object.assign(baseError, {\r\n originalError: error\r\n });\r\n }\r\n \r\n throw error;\r\n });\r\n }\r\n \r\n private async sendReqPQ(auth: AuthOptions) {\r\n const request = new TLSerialization({mtproto: true});\r\n \r\n request.storeMethod('req_pq_multi', {nonce: auth.nonce});\r\n\r\n if(DEBUG) {\r\n this.log('Send req_pq', auth.nonce.hex);\r\n }\r\n\r\n let deserializer: TLDeserialization;\r\n try {\r\n const promise = this.sendPlainRequest(auth.dcId, request.getBytes(true));\r\n rsaKeysManager.prepare();\r\n deserializer = await promise;\r\n } catch(error) {\r\n this.log.error('req_pq error', error.message);\r\n throw error;\r\n }\r\n \r\n const response: ResPQ = deserializer.fetchObject('ResPQ');\r\n\r\n if(response._ !== 'resPQ') {\r\n throw new Error('[MT] resPQ response invalid: ' + response._);\r\n }\r\n \r\n if(!bytesCmp(auth.nonce, response.nonce)) {\r\n this.log.error(auth.nonce, response.nonce);\r\n throw new Error('[MT] resPQ nonce mismatch');\r\n }\r\n \r\n auth.serverNonce = response.server_nonce; // need\r\n auth.pq = response.pq;\r\n auth.fingerprints = response.server_public_key_fingerprints;\r\n \r\n if(DEBUG) {\r\n this.log('Got ResPQ', bytesToHex(auth.serverNonce), bytesToHex(auth.pq), auth.fingerprints);\r\n }\r\n \r\n const publicKey = await rsaKeysManager.select(auth.fingerprints);\r\n if(!publicKey) {\r\n throw new Error('[MT] No public key found');\r\n }\r\n \r\n auth.publicKey = publicKey;\r\n \r\n if(DEBUG) {\r\n this.log('PQ factorization start', auth.pq);\r\n }\r\n \r\n // let pAndQ: Awaited<ReturnType<typeof CryptoWorker['factorize']>>;\r\n try {\r\n var pAndQ = await CryptoWorker.invokeCrypto('factorize', auth.pq);\r\n } catch(error) {\r\n this.log.error('worker error factorize', error);\r\n throw error;\r\n }\r\n \r\n auth.p = pAndQ[0];\r\n auth.q = pAndQ[1];\r\n \r\n if(DEBUG) {\r\n this.log('PQ factorization done', pAndQ);\r\n }\r\n \r\n return this.sendReqDhParams(auth);\r\n }\r\n \r\n private async sendReqDhParams(auth: AuthOptions) {\r\n auth.newNonce = new Uint8Array(32).randomize();\r\n\r\n const p_q_inner_data_dc: P_Q_inner_data = {\r\n _: 'p_q_inner_data_dc',\r\n pq: auth.pq,\r\n p: auth.p,\r\n q: auth.q,\r\n nonce: auth.nonce,\r\n server_nonce: auth.serverNonce,\r\n new_nonce: auth.newNonce,\r\n dc: 0\r\n };\r\n \r\n const pQInnerDataSerialization = new TLSerialization({mtproto: true});\r\n pQInnerDataSerialization.storeObject(p_q_inner_data_dc, 'P_Q_inner_data', 'DECRYPTED_DATA');\r\n\r\n const data = pQInnerDataSerialization.getBytes(true);\r\n if(data.length > 144) {\r\n throw 'DH_params: data is more than 144 bytes!';\r\n }\r\n\r\n const dataWithPadding = addPadding(data, 192, false, true, false);\r\n const dataPadReversed = dataWithPadding.slice().reverse();\r\n\r\n const getKeyAesEncrypted = async() => {\r\n for(;;) {\r\n const tempKey = new Uint8Array(32).randomize();\r\n const dataWithHash = dataPadReversed.concat(await CryptoWorker.invokeCrypto('sha256-hash', tempKey.concat(dataWithPadding)));\r\n if(dataWithHash.length !== 224) {\r\n throw 'DH_params: dataWithHash !== 224 bytes!';\r\n }\r\n \r\n const aesEncrypted = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithHash, tempKey, new Uint8Array([0]));\r\n const tempKeyXor = bytesXor(tempKey, await CryptoWorker.invokeCrypto('sha256-hash', aesEncrypted));\r\n const keyAesEncrypted = tempKeyXor.concat(aesEncrypted);\r\n\r\n const keyAesEncryptedBigInt = str2bigInt(bytesToHex(keyAesEncrypted), 16);\r\n const publicKeyModulusBigInt = str2bigInt(auth.publicKey.modulus, 16);\r\n\r\n if(cmp(keyAesEncryptedBigInt, publicKeyModulusBigInt) === -1) {\r\n return keyAesEncrypted;\r\n }\r\n }\r\n };\r\n \r\n const keyAesEncrypted = await getKeyAesEncrypted();\r\n const encryptedData = await CryptoWorker.invokeCrypto('rsa-encrypt', keyAesEncrypted, auth.publicKey);\r\n\r\n const req_DH_params: req_DH_params = {\r\n nonce: auth.nonce,\r\n server_nonce: auth.serverNonce,\r\n p: auth.p,\r\n q: auth.q,\r\n public_key_fingerprint: auth.publicKey.fingerprint,\r\n encrypted_data: encryptedData\r\n };\r\n \r\n const request = new TLSerialization({mtproto: true});\r\n request.storeMethod('req_DH_params', req_DH_params);\r\n \r\n const requestBytes = request.getBytes(true);\r\n \r\n if(DEBUG) {\r\n this.log('Send req_DH_params', req_DH_params/* , requestBytes.hex */);\r\n }\r\n \r\n let deserializer: TLDeserialization;\r\n try {\r\n deserializer = await this.sendPlainRequest(auth.dcId, requestBytes);\r\n } catch(error) {\r\n this.log.error('Send req_DH_params FAIL!', error);\r\n throw error;\r\n }\r\n \r\n const response = deserializer.fetchObject('Server_DH_Params', 'RESPONSE');\r\n \r\n if(DEBUG) {\r\n this.log('Sent req_DH_params, response:', response);\r\n }\r\n \r\n if(response._ !== 'server_DH_params_fail' && response._ !== 'server_DH_params_ok') {\r\n throw new Error('[MT] Server_DH_Params response invalid: ' + response._);\r\n }\r\n \r\n if(!bytesCmp(auth.nonce, response.nonce)) {\r\n throw new Error('[MT] Server_DH_Params nonce mismatch');\r\n }\r\n \r\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\r\n throw new Error('[MT] Server_DH_Params server_nonce mismatch');\r\n }\r\n \r\n if(response._ === 'server_DH_params_fail') {\r\n const newNonceHash = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce)).slice(-16);\r\n if(!bytesCmp(newNonceHash, response.new_nonce_hash)) {\r\n throw new Error('[MT] server_DH_params_fail new_nonce_hash mismatch');\r\n }\r\n \r\n throw new Error('[MT] server_DH_params_fail');\r\n }\r\n \r\n // fill auth object\r\n try {\r\n await this.decryptServerDhDataAnswer(auth, response.encrypted_answer);\r\n } catch(e) {\r\n this.log.error('mtpDecryptServerDhDataAnswer FAILED!', e);\r\n throw e;\r\n }\r\n \r\n //console.log(dT(), 'mtpSendReqDhParams: executing mtpSendSetClientDhParams...');\r\n \r\n return this.sendSetClientDhParams(auth);\r\n }\r\n \r\n private async decryptServerDhDataAnswer(auth: AuthOptions, encryptedAnswer: any) {\r\n auth.localTime = Date.now();\r\n \r\n // ! can't concat Array with Uint8Array!\r\n auth.tmpAesKey = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat(auth.serverNonce)))\r\n .concat((await CryptoWorker.invokeCrypto('sha1-hash', auth.serverNonce.concat(auth.newNonce))).slice(0, 12));\r\n \r\n auth.tmpAesIv = (await CryptoWorker.invokeCrypto('sha1-hash', auth.serverNonce.concat(auth.newNonce))).slice(12)\r\n .concat(await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat(auth.newNonce)), auth.newNonce.slice(0, 4));\r\n \r\n const answerWithHash = new Uint8Array(await CryptoWorker.invokeCrypto('aes-decrypt', encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv));\r\n \r\n const hash = answerWithHash.slice(0, 20);\r\n const answerWithPadding = answerWithHash.slice(20);\r\n\r\n const deserializer = new TLDeserialization(answerWithPadding, {mtproto: true});\r\n const response = deserializer.fetchObject('Server_DH_inner_data');\r\n \r\n if(response._ !== 'server_DH_inner_data') {\r\n throw new Error('[MT] server_DH_inner_data response invalid: ' + response);\r\n }\r\n \r\n if(!bytesCmp(auth.nonce, response.nonce)) {\r\n throw new Error('[MT] server_DH_inner_data nonce mismatch');\r\n }\r\n \r\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\r\n throw new Error('[MT] server_DH_inner_data serverNonce mismatch');\r\n }\r\n \r\n if(DEBUG) {\r\n this.log('Done decrypting answer');\r\n }\r\n auth.g = response.g;\r\n auth.dhPrime = response.dh_prime;\r\n auth.gA = response.g_a;\r\n auth.serverTime = response.server_time;\r\n auth.retry = 0;\r\n \r\n this.verifyDhParams(auth.g, auth.dhPrime, auth.gA);\r\n \r\n const offset = deserializer.getOffset();\r\n \r\n if(!bytesCmp(hash, await CryptoWorker.invokeCrypto('sha1-hash', answerWithPadding.slice(0, offset)))) {\r\n throw new Error('[MT] server_DH_inner_data SHA1-hash mismatch');\r\n }\r\n \r\n timeManager.applyServerTime(auth.serverTime, auth.localTime);\r\n }\r\n \r\n private verifyDhParams(g: number, dhPrime: Uint8Array, gA: Uint8Array) {\r\n if(DEBUG) {\r\n this.log('Verifying DH params', g, dhPrime, gA);\r\n }\r\n\r\n const dhPrimeHex = bytesToHex(dhPrime);\r\n if(g !== 3 || dhPrimeHex !== 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b') {\r\n // The verified value is from https://core.telegram.org/mtproto/security_guidelines\r\n throw new Error('[MT] DH params are not verified: unknown dhPrime');\r\n }\r\n\r\n if(DEBUG) {\r\n this.log('dhPrime cmp OK');\r\n }\r\n \r\n const _gABigInt = str2bigInt(bytesToHex(gA), 16);\r\n const _dhPrimeBigInt = str2bigInt(dhPrimeHex, 16);\r\n\r\n if(cmp(_gABigInt, one) <= 0) {\r\n throw new Error('[MT] DH params are not verified: gA <= 1');\r\n }\r\n\r\n if(cmp(_gABigInt, sub(_dhPrimeBigInt, one)) >= 0) {\r\n throw new Error('[MT] DH params are not verified: gA >= dhPrime - 1');\r\n }\r\n\r\n if(DEBUG) {\r\n this.log('1 < gA < dhPrime-1 OK');\r\n }\r\n \r\n const _two = int2bigInt(2, 32, 0);\r\n const _twoPow = pow(_two, 2048 - 64);\r\n\r\n if(cmp(_gABigInt, _twoPow) < 0) {\r\n throw new Error('[MT] DH params are not verified: gA < 2^{2048-64}');\r\n }\r\n if(cmp(_gABigInt, sub(_dhPrimeBigInt, _twoPow)) >= 0) {\r\n throw new Error('[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}');\r\n }\r\n\r\n if(DEBUG) {\r\n this.log('2^{2048-64} < gA < dhPrime-2^{2048-64} OK');\r\n }\r\n \r\n return true;\r\n }\r\n \r\n private async sendSetClientDhParams(auth: AuthOptions): Promise<AuthOptions> {\r\n const gBytes = bytesFromHex(auth.g.toString(16));\r\n \r\n auth.b = new Uint8Array(256).randomize();\r\n //MTProto.secureRandom.nextBytes(auth.b);\r\n \r\n // let gB: Awaited<ReturnType<typeof CryptoWorker['modPow']>>;\r\n try {\r\n var gB = await CryptoWorker.invokeCrypto('mod-pow', gBytes, auth.b, auth.dhPrime);\r\n } catch(error) {\r\n throw error;\r\n }\r\n \r\n const data = new TLSerialization({mtproto: true});\r\n data.storeObject({\r\n _: 'client_DH_inner_data',\r\n nonce: auth.nonce,\r\n server_nonce: auth.serverNonce,\r\n retry_id: [0, auth.retry++],\r\n g_b: gB\r\n }, 'Client_DH_Inner_Data');\r\n \r\n const dataWithHash = (await CryptoWorker.invokeCrypto('sha1-hash', data.getBuffer())).concat(data.getBytes(true));\r\n const encryptedData = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithHash, auth.tmpAesKey, auth.tmpAesIv);\r\n \r\n const request = new TLSerialization({mtproto: true});\r\n request.storeMethod('set_client_DH_params', {\r\n nonce: auth.nonce,\r\n server_nonce: auth.serverNonce,\r\n encrypted_data: encryptedData\r\n });\r\n \r\n if(DEBUG) {\r\n this.log('Send set_client_DH_params');\r\n }\r\n \r\n let deserializer: TLDeserialization;\r\n try {\r\n deserializer = await this.sendPlainRequest(auth.dcId, request.getBytes(true));\r\n } catch(err) {\r\n throw err;\r\n }\r\n \r\n const response = deserializer.fetchObject('Set_client_DH_params_answer');\r\n \r\n if(response._ !== 'dh_gen_ok' && response._ !== 'dh_gen_retry' && response._ !== 'dh_gen_fail') {\r\n throw new Error('[MT] Set_client_DH_params_answer response invalid: ' + response._);\r\n }\r\n \r\n if(!bytesCmp(auth.nonce, response.nonce)) {\r\n throw new Error('[MT] Set_client_DH_params_answer nonce mismatch');\r\n }\r\n \r\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\r\n throw new Error('[MT] Set_client_DH_params_answer server_nonce mismatch');\r\n }\r\n \r\n // let authKey: Uint8Array;\r\n try {\r\n var authKey = await CryptoWorker.invokeCrypto('mod-pow', auth.gA, auth.b, auth.dhPrime);\r\n } catch(err) {\r\n throw authKey;\r\n }\r\n \r\n const authKeyHash = await CryptoWorker.invokeCrypto('sha1-hash', authKey),\r\n authKeyAux = authKeyHash.slice(0, 8),\r\n authKeyId = authKeyHash.slice(-8);\r\n \r\n if(DEBUG) {\r\n this.log('Got Set_client_DH_params_answer', response._, authKey);\r\n }\r\n switch(response._) {\r\n case 'dh_gen_ok': {\r\n const newNonceHash1 = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat([1], authKeyAux))).slice(-16);\r\n \r\n if(!bytesCmp(newNonceHash1, response.new_nonce_hash1)) {\r\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash1 mismatch');\r\n }\r\n \r\n const serverSalt = bytesXor(auth.newNonce.slice(0, 8), auth.serverNonce.slice(0, 8));\r\n if(DEBUG) {\r\n this.log('Auth successfull!', authKeyId, authKey, serverSalt);\r\n }\r\n \r\n auth.authKeyId = authKeyId;\r\n auth.authKey = authKey;\r\n auth.serverSalt = serverSalt;\r\n \r\n return auth;\r\n }\r\n \r\n case 'dh_gen_retry': {\r\n const newNonceHash2 = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat([2], authKeyAux))).slice(-16);\r\n if(!bytesCmp(newNonceHash2, response.new_nonce_hash2)) {\r\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch');\r\n }\r\n \r\n return this.sendSetClientDhParams(auth);\r\n }\r\n \r\n case 'dh_gen_fail': {\r\n const newNonceHash3 = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat([3], authKeyAux))).slice(-16);\r\n if(!bytesCmp(newNonceHash3, response.new_nonce_hash3)) {\r\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch');\r\n }\r\n \r\n throw new Error('[MT] Set_client_DH_params_answer fail');\r\n }\r\n }\r\n }\r\n \r\n public async auth(dcId: number): Promise<AuthOptions> {\r\n if(dcId in this.cached) {\r\n return this.cached[dcId];\r\n }\r\n \r\n const nonce = /* fNonce ? fNonce : */new Uint8Array(16).randomize();\r\n /* const nonce = new Array(16);\r\n MTProto.secureRandom.nextBytes(nonce); */\r\n \r\n if(!dcConfigurator.chooseServer(dcId)) {\r\n return Promise.reject(new Error('[MT] No server found for dc ' + dcId));\r\n }\r\n\r\n // await new Promise((resolve) => setTimeout(resolve, 2e3));\r\n\r\n try {\r\n const promise = this.sendReqPQ({dcId, nonce});\r\n this.cached[dcId] = promise;\r\n return await promise;\r\n } catch(err) {\r\n delete this.cached[dcId];\r\n throw err;\r\n }\r\n }\r\n}\r\n\r\nexport default new Authorizer();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport interface CancellablePromise<T> extends Promise<T> {\r\n resolve?: (value: T) => void,\r\n reject?: (...args: any[]) => void,\r\n cancel?: () => void,\r\n\r\n notify?: (...args: any[]) => void,\r\n notifyAll?: (...args: any[]) => void,\r\n lastNotify?: any,\r\n listeners?: Array<(...args: any[]) => void>,\r\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\r\n\r\n isFulfilled?: boolean,\r\n isRejected?: boolean\r\n}\r\n\r\nexport function deferredPromise<T>() {\r\n let deferredHelper: any = {\r\n isFulfilled: false, \r\n isRejected: false,\r\n\r\n notify: () => {}, \r\n notifyAll: (...args: any[]) => {\r\n deferredHelper.lastNotify = args;\r\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\r\n }, \r\n\r\n lastNotify: undefined,\r\n listeners: [],\r\n addNotifyListener: (callback: (...args: any[]) => void) => {\r\n if(deferredHelper.lastNotify) {\r\n callback(...deferredHelper.lastNotify);\r\n }\r\n\r\n deferredHelper.listeners.push(callback);\r\n }\r\n };\r\n\r\n let deferred: CancellablePromise<T> = new Promise<T>((resolve, reject) => {\r\n deferredHelper.resolve = (value: T) => {\r\n if(deferred.isFulfilled) return;\r\n\r\n deferred.isFulfilled = true;\r\n resolve(value);\r\n };\r\n \r\n deferredHelper.reject = (...args: any[]) => {\r\n if(deferred.isRejected) return;\r\n \r\n deferred.isRejected = true;\r\n reject(...args);\r\n };\r\n });\r\n\r\n // @ts-ignore\r\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\r\n const n = deferredPromise<ReturnType<typeof resolve>>();\r\n \r\n }; */\r\n\r\n deferred.finally(() => {\r\n deferred.notify = null;\r\n deferred.listeners.length = 0;\r\n deferred.lastNotify = null;\r\n\r\n if(deferred.cancel) {\r\n deferred.cancel = () => {};\r\n }\r\n });\r\n\r\n Object.assign(deferred, deferredHelper);\r\n\r\n return deferred;\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function readBlobAs(blob: Blob, method: 'readAsText'): Promise<string>;\r\nexport function readBlobAs(blob: Blob, method: 'readAsDataURL'): Promise<string>;\r\nexport function readBlobAs(blob: Blob, method: 'readAsArrayBuffer'): Promise<ArrayBuffer>;\r\nexport function readBlobAs(blob: Blob, method: 'readAsArrayBuffer' | 'readAsText' | 'readAsDataURL'): Promise<any> {\r\n return new Promise<any>((resolve) => {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', (e) => resolve(e.target.result));\r\n reader[method](blob);\r\n });\r\n}\r\n\r\nexport function readBlobAsText(blob: Blob) {\r\n return readBlobAs(blob, 'readAsText');\r\n}\r\n\r\nexport function readBlobAsDataURL(blob: Blob) {\r\n return readBlobAs(blob, 'readAsDataURL');\r\n}\r\n\r\nexport function readBlobAsArrayBuffer(blob: Blob) {\r\n return readBlobAs(blob, 'readAsArrayBuffer');\r\n}\r\n\r\nexport function readBlobAsUint8Array(blob: Blob) {\r\n return readBlobAsArrayBuffer(blob).then(buffer => new Uint8Array(buffer));\r\n}\r\n\r\nexport function blobConstruct(blobParts: any, mimeType: string = ''): Blob {\r\n let blob;\r\n const safeMimeType = blobSafeMimeType(mimeType);\r\n try {\r\n blob = new Blob(blobParts, {type: safeMimeType});\r\n } catch(e) {\r\n // @ts-ignore\r\n let bb = new BlobBuilder;\r\n blobParts.forEach((blobPart: any) => {\r\n bb.append(blobPart);\r\n });\r\n blob = bb.getBlob(safeMimeType);\r\n }\r\n return blob;\r\n}\r\n\r\n// https://www.iana.org/assignments/media-types/media-types.xhtml\r\nexport function blobSafeMimeType(mimeType: string) {\r\n if([\r\n 'image/jpeg',\r\n 'image/png',\r\n 'image/gif',\r\n 'image/webp',\r\n 'image/bmp',\r\n 'video/mp4',\r\n 'video/webm',\r\n 'video/quicktime',\r\n 'audio/ogg',\r\n 'audio/mpeg',\r\n 'audio/mp4',\r\n 'application/json',\r\n 'application/pdf'\r\n ].indexOf(mimeType) === -1) {\r\n return 'application/octet-stream';\r\n }\r\n\r\n return mimeType;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { Database } from '../config/databases';\r\nimport Modes from '../config/modes';\r\nimport { blobConstruct } from '../helpers/blob';\r\nimport { safeAssign } from '../helpers/object';\r\nimport { logger } from './logger';\r\n\r\n/**\r\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\r\n */\r\nexport type IDBIndex = {\r\n indexName: string,\r\n keyPath: string,\r\n objectParameters: IDBIndexParameters\r\n};\r\n\r\nexport type IDBStore = {\r\n name: string, \r\n indexes?: IDBIndex[]\r\n};\r\n\r\nexport type IDBOptions = {\r\n name?: string,\r\n storeName: string,\r\n stores?: IDBStore[],\r\n version?: number\r\n};\r\n\r\nconst DEBUG = false;\r\n\r\nexport default class IDBStorage<T extends Database<any>> {\r\n private static STORAGES: IDBStorage<Database<any>>[] = [];\r\n private openDbPromise: Promise<IDBDatabase>;\r\n private db: IDBDatabase;\r\n private storageIsAvailable = true;\r\n\r\n private log: ReturnType<typeof logger>;\r\n \r\n private name: string;\r\n private version: number;\r\n private stores: IDBStore[];\r\n private storeName: T['stores'][0]['name'];\r\n\r\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\r\n safeAssign(this, db);\r\n\r\n if(Modes.test) {\r\n this.name += '_test';\r\n }\r\n\r\n this.storeName = storeName;\r\n\r\n this.log = logger('IDB-' + this.storeName);\r\n\r\n this.openDatabase(true);\r\n\r\n IDBStorage.STORAGES.push(this);\r\n }\r\n\r\n public static closeDatabases(preserve?: IDBStorage<Database<any>>) {\r\n this.STORAGES.forEach(storage => {\r\n if(preserve && preserve === storage) {\r\n return;\r\n }\r\n\r\n const db = storage.db;\r\n if(db) {\r\n db.onclose = () => {};\r\n db.close();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * ! WARNING ! function requires at least one opened connection\r\n */\r\n /* public static clearObjectStores() {\r\n const storage = this.STORAGES[0];\r\n this.closeDatabases(storage);\r\n\r\n const names = Array.from(storage.db.objectStoreNames);\r\n const promises = names.map(name => storage.clear(name));\r\n return Promise.all(promises);\r\n } */\r\n\r\n /* public static deleteDatabase() {\r\n this.closeDatabases();\r\n\r\n const storages = this.STORAGES;\r\n const dbNames = Array.from(new Set(storages.map(storage => storage.name)));\r\n const promises = dbNames.map(dbName => {\r\n return new Promise<void>((resolve, reject) => {\r\n const deleteRequest = indexedDB.deleteDatabase(dbName);\r\n \r\n deleteRequest.onerror = () => {\r\n reject();\r\n };\r\n \r\n deleteRequest.onsuccess = () => {\r\n resolve();\r\n };\r\n });\r\n });\r\n\r\n return Promise.all(promises);\r\n } */\r\n\r\n public isAvailable() {\r\n return this.storageIsAvailable;\r\n }\r\n\r\n public openDatabase(createNew = false): Promise<IDBDatabase> {\r\n if(this.openDbPromise && !createNew) {\r\n return this.openDbPromise;\r\n }\r\n\r\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\r\n const os = db.createObjectStore(store.name);\r\n\r\n if(store.indexes?.length) {\r\n for(const index of store.indexes) {\r\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\r\n }\r\n }\r\n };\r\n\r\n try {\r\n var request = indexedDB.open(this.name, this.version);\r\n\r\n if(!request) {\r\n return Promise.reject();\r\n }\r\n } catch(error) {\r\n this.log.error('error opening db', error.message)\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n let finished = false;\r\n setTimeout(() => {\r\n if(!finished) {\r\n request.onerror({type: 'IDB_CREATE_TIMEOUT'} as Event);\r\n }\r\n }, 3000);\r\n\r\n return this.openDbPromise = new Promise<IDBDatabase>((resolve, reject) => {\r\n request.onsuccess = (event) => {\r\n finished = true;\r\n const db = request.result;\r\n let calledNew = false;\r\n\r\n this.log('Opened');\r\n \r\n db.onerror = (error) => {\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', error);\r\n reject(error);\r\n };\r\n\r\n db.onclose = (e) => {\r\n this.log.error('closed:', e);\r\n !calledNew && this.openDatabase();\r\n };\r\n\r\n db.onabort = (e) => {\r\n this.log.error('abort:', e);\r\n const transaction = e.target as IDBTransaction;\r\n \r\n this.openDatabase(calledNew = true);\r\n\r\n if(transaction.onerror) {\r\n transaction.onerror(e);\r\n }\r\n\r\n db.close();\r\n };\r\n\r\n db.onversionchange = (e) => {\r\n this.log.error('onversionchange, lol?');\r\n };\r\n\r\n resolve(this.db = db);\r\n };\r\n \r\n request.onerror = (event) => {\r\n finished = true;\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', event);\r\n reject(event);\r\n };\r\n \r\n request.onupgradeneeded = (event) => {\r\n finished = true;\r\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\r\n\r\n // @ts-ignore\r\n var db = event.target.result as IDBDatabase;\r\n this.stores.forEach((store) => {\r\n /* if(db.objectStoreNames.contains(store.name)) {\r\n //if(event.oldVersion === 1) {\r\n db.deleteObjectStore(store.name);\r\n //}\r\n } */\r\n \r\n if(!db.objectStoreNames.contains(store.name)) {\r\n createObjectStore(db, store);\r\n }\r\n });\r\n };\r\n });\r\n }\r\n\r\n public delete(entryName: string | string[]): Promise<void> {\r\n //return Promise.resolve();\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n }\r\n\r\n return this.getObjectStore('readwrite', (objectStore) => {\r\n return (entryName as string[]).map((entryName) => objectStore.delete(entryName));\r\n }, DEBUG ? 'delete: ' + entryName.join(', ') : '');\r\n }\r\n\r\n public clear(storeName?: IDBStorage<T>['storeName']) {\r\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'clear' : '', storeName);\r\n }\r\n\r\n public save(entryName: string | string[], value: any | any[]) {\r\n // const handleError = (error: Error) => {\r\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\r\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\r\n // setTimeout(() => {\r\n // this.save(entryName, value);\r\n // }, 2e3);\r\n // } else {\r\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\r\n // }\r\n // };\r\n\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n value = [].concat(value);\r\n }\r\n \r\n return this.getObjectStore('readwrite', (objectStore) => {\r\n return (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\r\n }, DEBUG ? 'save: ' + entryName.join(', ') : '');\r\n }\r\n\r\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\r\n //return Promise.resolve(blobConstruct([blob]));\r\n if(!(blob instanceof Blob)) {\r\n blob = blobConstruct([blob]) as Blob;\r\n }\r\n\r\n return this.save(fileName, blob);\r\n }\r\n\r\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise<Blob> {\r\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\r\n return Promise.reject();\r\n }\r\n\r\n if(!(blob instanceof Blob)) {\r\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\r\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\r\n return this.storagePutB64String(db, fileName, address).then(() => {\r\n return blob;\r\n });\r\n }\r\n\r\n try {\r\n var reader = new FileReader();\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n let promise = new Promise<Blob>((resolve, reject) => {\r\n reader.onloadend = () => {\r\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\r\n resolve(blob);\r\n }, reject);\r\n }\r\n \r\n reader.onerror = reject;\r\n });\r\n \r\n\r\n try {\r\n reader.readAsDataURL(blob);\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\r\n try {\r\n var objectStore = db.transaction([this.storeName], 'readwrite')\r\n .objectStore(this.storeName);\r\n var request = objectStore.put(b64string, fileName);\r\n } catch(error) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n resolve();\r\n };\r\n \r\n request.onerror = reject;\r\n });\r\n }\r\n\r\n public getBlobSize(blob: any) {\r\n return blob.size || blob.byteLength || blob.length;\r\n } */\r\n\r\n public get<T>(entryName: string[]): Promise<T[]>;\r\n public get<T>(entryName: string): Promise<T>;\r\n public get<T>(entryName: string | string[]): Promise<T> | Promise<T[]> {\r\n //return Promise.reject();\r\n\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n }\r\n\r\n return this.getObjectStore<T>('readonly', (objectStore) => {\r\n return (entryName as string[]).map((entryName) => objectStore.get(entryName));\r\n }, DEBUG ? 'get: ' + entryName.join(', ') : '');\r\n }\r\n\r\n private getObjectStore<T>(mode: IDBTransactionMode, objectStore: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[], log?: string, storeName = this.storeName) {\r\n let perf: number;\r\n\r\n if(log) {\r\n perf = performance.now();\r\n this.log(log + ': start');\r\n }\r\n\r\n return this.openDatabase().then((db) => {\r\n return new Promise<T>((resolve, reject) => {\r\n /* if(mode === 'readwrite') {\r\n return;\r\n } */\r\n\r\n const transaction = db.transaction([storeName], mode);\r\n\r\n transaction.onerror = (e) => {\r\n clearTimeout(timeout);\r\n reject(transaction.error);\r\n };\r\n \r\n transaction.oncomplete = (e) => {\r\n clearTimeout(timeout);\r\n\r\n if(log) {\r\n this.log(log + ': end', performance.now() - perf);\r\n }\r\n\r\n const results = r.map(r => r.result);\r\n resolve(isArray ? results : results[0]);\r\n };\r\n \r\n const timeout = setTimeout(() => {\r\n this.log.error('transaction not finished', transaction);\r\n }, 10000);\r\n \r\n /* transaction.addEventListener('abort', (e) => {\r\n //handleError();\r\n this.log.error('IndexedDB: transaction abort!', transaction.error);\r\n }); */\r\n \r\n const requests = objectStore(transaction.objectStore(storeName));\r\n\r\n const isArray = Array.isArray(requests);\r\n const r: IDBRequest[] = isArray ? requests : [].concat(requests) as any;\r\n\r\n // const length = r.length;\r\n // /* let left = length;\r\n\r\n // const onRequestFinished = (error?: Error) => {\r\n // if(!--left) {\r\n // resolve(result);\r\n // clearTimeout(timeout);\r\n // }\r\n // }; */\r\n\r\n // for(let i = 0; i < length; ++i) {\r\n // const request = r[i];\r\n // request.onsuccess = () => {\r\n // onRequestFinished();\r\n // };\r\n\r\n // request.onerror = (e) => {\r\n // onRequestFinished(transaction.error);\r\n // };\r\n // }\r\n });\r\n });\r\n }\r\n\r\n public getAll<T>(): Promise<T[]> {\r\n return this.getObjectStore<T[]>('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '');\r\n }\r\n\r\n /* public getAllKeys(): Promise<Array<string>> {\r\n console.time('getAllEntries');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.getAllKeys();\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var result = event.target.result;\r\n resolve(result);\r\n console.timeEnd('getAllEntries');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public isFileExists(fileName: string): Promise<boolean> {\r\n console.time('isFileExists');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.openCursor(fileName);\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var cursor = event.target.result;\r\n resolve(!!cursor);\r\n console.timeEnd('isFileExists');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public getFileWriter(fileName: string, mimeType: string) {\r\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\r\n return this.saveFile(fileName, blob);\r\n });\r\n\r\n return Promise.resolve(fakeWriter);\r\n } */\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function copy<T>(obj: T): T {\r\n //in case of premitives\r\n if(obj === null || typeof(obj) !== \"object\") {\r\n return obj;\r\n }\r\n \r\n //date objects should be \r\n if(obj instanceof Date) {\r\n return new Date(obj.getTime()) as any;\r\n }\r\n \r\n //handle Array\r\n if(Array.isArray(obj)) {\r\n // @ts-ignore\r\n const clonedArr: T = obj.map(el => copy(el)) as any as T;\r\n return clonedArr;\r\n }\r\n \r\n //lastly, handle objects\r\n // @ts-ignore\r\n let clonedObj = new obj.constructor();\r\n for(var prop in obj){\r\n if(obj.hasOwnProperty(prop)) {\r\n clonedObj[prop] = copy(obj[prop]);\r\n }\r\n }\r\n return clonedObj;\r\n}\r\n\r\nexport function deepEqual(x: any, y: any): boolean {\r\n const ok = Object.keys, tx = typeof x, ty = typeof y;\r\n return x && y && tx === 'object' && tx === ty ? (\r\n ok(x).length === ok(y).length &&\r\n ok(x).every(key => deepEqual(x[key], y[key]))\r\n ) : (x === y);\r\n}\r\n\r\nexport function defineNotNumerableProperties(obj: {[key: string]: any}, names: string[]) {\r\n //const perf = performance.now();\r\n const props = {writable: true, configurable: true};\r\n const out: {[name: string]: typeof props} = {};\r\n names.forEach(name => {\r\n if(obj[name] === undefined) {\r\n out[name] = props;\r\n }\r\n });\r\n Object.defineProperties(obj, out);\r\n //console.log('defineNotNumerableProperties time:', performance.now() - perf);\r\n}\r\n\r\nexport function getObjectKeysAndSort(object: any, sort: 'asc' | 'desc' = 'asc') {\r\n if(!object) return [];\r\n const ids = Object.keys(object).map(i => +i);\r\n if(sort === 'asc') return ids.sort((a, b) => a - b);\r\n else return ids.sort((a, b) => b - a);\r\n}\r\n\r\nexport function safeReplaceObject(wasObject: any, newObject: any) {\r\n if(!wasObject) {\r\n return newObject;\r\n }\r\n\r\n for(var key in wasObject) {\r\n if(!newObject.hasOwnProperty(key)) {\r\n delete wasObject[key];\r\n }\r\n }\r\n\r\n for(var key in newObject) {\r\n //if (newObject.hasOwnProperty(key)) { // useless\r\n wasObject[key] = newObject[key];\r\n //}\r\n }\r\n \r\n return wasObject;\r\n}\r\n\r\n/**\r\n * Will be used for FILE_REFERENCE_EXPIRED\r\n * @param key \r\n * @param wasObject \r\n * @param newObject \r\n */\r\nexport function safeReplaceArrayInObject<K>(key: K, wasObject: any, newObject: any) {\r\n if('byteLength' in newObject[key]) { // Uint8Array\r\n newObject[key] = [...newObject[key]];\r\n }\r\n\r\n if(wasObject && wasObject[key] !== newObject[key]) {\r\n wasObject[key].length = newObject[key].length;\r\n (newObject[key] as any[]).forEach((v, i) => {\r\n wasObject[key][i] = v;\r\n });\r\n\r\n /* wasObject[key].set(newObject[key]); */\r\n newObject[key] = wasObject[key];\r\n }\r\n}\r\n\r\nexport function isObject(object: any) {\r\n return typeof(object) === 'object' && object !== null;\r\n}\r\n\r\nexport function getDeepProperty(object: any, key: string) {\r\n const splitted = key.split('.');\r\n let o: any = object;\r\n splitted.forEach(key => {\r\n if(!key) {\r\n return;\r\n }\r\n \r\n // @ts-ignore\r\n o = o[key];\r\n });\r\n \r\n return o;\r\n}\r\n\r\nexport function setDeepProperty(object: any, key: string, value: any) {\r\n const splitted = key.split('.');\r\n getDeepProperty(object, splitted.slice(0, -1).join('.'))[splitted.pop()] = value;\r\n}\r\n\r\nexport function validateInitObject(initObject: any, currentObject: any, onReplace?: (key: string) => void, previousKey?: string) {\r\n for(const key in initObject) {\r\n if(typeof(currentObject[key]) !== typeof(initObject[key])) {\r\n currentObject[key] = copy(initObject[key]);\r\n onReplace && onReplace(previousKey || key);\r\n } else if(isObject(initObject[key])) {\r\n validateInitObject(initObject[key], currentObject[key], onReplace, previousKey || key);\r\n }\r\n }\r\n}\r\n\r\nexport function safeAssign(object: any, fromObject: any) {\r\n if(!fromObject) return;\r\n \r\n for(let i in fromObject) {\r\n if(fromObject[i] !== undefined) {\r\n object[i] = fromObject[i];\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { UserAuth } from './mtproto_config';\r\nimport sessionStorage from '../sessionStorage';\r\nimport MTPNetworker, { MTMessage } from './networker';\r\nimport { isObject } from './bin_utils';\r\nimport networkerFactory from './networkerFactory';\r\n//import { telegramMeWebService } from './mtproto';\r\nimport authorizer from './authorizer';\r\nimport dcConfigurator, { ConnectionType, DcConfigurator, TransportType } from './dcConfigurator';\r\nimport { logger } from '../logger';\r\nimport type { DcAuthKey, DcId, DcServerSalt, InvokeApiOptions } from '../../types';\r\nimport type { MethodDeclMap } from '../../layer';\r\nimport { CancellablePromise, deferredPromise } from '../../helpers/cancellablePromise';\r\nimport { bytesFromHex, bytesToHex } from '../../helpers/bytes';\r\n//import { clamp } from '../../helpers/number';\r\nimport { ctx, isSafari } from '../../helpers/userAgent';\r\nimport App from '../../config/app';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport IDBStorage from '../idb';\r\nimport CryptoWorker from \"../crypto/cryptoworker\";\r\n\r\n \r\n \r\n \r\n\r\n/* var networker = apiManager.cachedNetworkers.websocket.upload[2];\r\nnetworker.wrapMtpMessage({\r\n _: 'msgs_state_req',\r\n msg_ids: [\"6888292542796810828\"]\r\n}, {\r\n notContentRelated: true\r\n}).then(res => {\r\n console.log('status', res);\r\n}); */\r\n\r\n//console.error('apiManager included!');\r\n// TODO: если запрос словил флуд, нужно сохранять его параметры и возвращать тот же промис на новый такой же запрос, например - загрузка истории\r\n\r\nexport type ApiError = Partial<{\r\n code: number,\r\n type: string,\r\n description: string,\r\n originalError: any,\r\n stack: string,\r\n handled: boolean,\r\n input: string,\r\n message: ApiError\r\n}>;\r\n\r\n/* class RotatableArray<T> {\r\n public array: Array<T> = [];\r\n private lastIndex = -1;\r\n\r\n public get() {\r\n this.lastIndex = clamp(this.lastIndex + 1, 0, this.array.length - 1);\r\n return this.array[this.lastIndex];\r\n }\r\n} */\r\n\r\nexport class ApiManager {\r\n private cachedNetworkers: {\r\n [transportType in TransportType]: {\r\n [connectionType in ConnectionType]: {\r\n [dcId: number]: MTPNetworker[]\r\n }\r\n }\r\n } = {} as any;\r\n \r\n private cachedExportPromise: {[x: number]: Promise<unknown>} = {};\r\n private gettingNetworkers: {[dcIdAndType: string]: Promise<MTPNetworker>} = {};\r\n private baseDcId: DcId = 0 as DcId;\r\n \r\n //public telegramMeNotified = false;\r\n\r\n private log: ReturnType<typeof logger> = logger('API');\r\n\r\n private afterMessageTempIds: {\r\n [tempId: string]: {\r\n messageId: string,\r\n promise: Promise<any>\r\n }\r\n } = {};\r\n\r\n //private lol = false;\r\n \r\n // constructor() {\r\n //MtpSingleInstanceService.start();\r\n \r\n /* AppStorage.get<number>('dc').then((dcId) => {\r\n if(dcId) {\r\n this.baseDcId = dcId;\r\n }\r\n }); */\r\n // }\r\n \r\n /* public telegramMeNotify(newValue: boolean) {\r\n if(this.telegramMeNotified !== newValue) {\r\n this.telegramMeNotified = newValue;\r\n //telegramMeWebService.setAuthorized(this.telegramMeNotified);\r\n }\r\n } */\r\n\r\n public async getBaseDcId() {\r\n if(this.baseDcId) {\r\n return this.baseDcId;\r\n }\r\n\r\n const baseDcId = await sessionStorage.get('dc');\r\n if(!this.baseDcId) {\r\n if(!baseDcId) {\r\n this.setBaseDcId(App.baseDcId);\r\n } else {\r\n this.baseDcId = baseDcId;\r\n }\r\n }\r\n\r\n return this.baseDcId;\r\n }\r\n \r\n public async setUserAuth(userAuth: UserAuth) {\r\n if(!userAuth.dcID) {\r\n const baseDcId = await this.getBaseDcId();\r\n userAuth.dcID = baseDcId;\r\n }\r\n\r\n sessionStorage.set({\r\n user_auth: userAuth\r\n });\r\n \r\n //this.telegramMeNotify(true);\r\n\r\n \r\n \r\n \r\n }\r\n\r\n public setBaseDcId(dcId: DcId) {\r\n const wasDcId = this.baseDcId;\r\n if(wasDcId) { // if migrated set ondrain\r\n this.getNetworker(wasDcId).then(networker => {\r\n this.setOnDrainIfNeeded(networker);\r\n });\r\n }\r\n\r\n this.baseDcId = dcId;\r\n\r\n sessionStorage.set({\r\n dc: this.baseDcId\r\n });\r\n }\r\n \r\n public async logOut() {\r\n const storageKeys: Array<DcAuthKey> = [];\r\n \r\n const prefix = 'dc';\r\n for(let dcId = 1; dcId <= 5; dcId++) {\r\n storageKeys.push(prefix + dcId + '_auth_key' as any);\r\n }\r\n \r\n // WebPushApiManager.forceUnsubscribe(); // WARNING // moved to worker's master\r\n const storageResult = await Promise.all(storageKeys.map(key => sessionStorage.get(key)));\r\n \r\n const logoutPromises: Promise<any>[] = [];\r\n for(let i = 0; i < storageResult.length; i++) {\r\n if(storageResult[i]) {\r\n logoutPromises.push(this.invokeApi('auth.logOut', {}, {dcId: (i + 1) as DcId, ignoreErrors: true}));\r\n }\r\n }\r\n\r\n const clear = () => {\r\n //console.error('apiManager: logOut clear');\r\n \r\n this.baseDcId = undefined;\r\n //this.telegramMeNotify(false);\r\n IDBStorage.closeDatabases();\r\n self.postMessage({type: 'clear'});\r\n };\r\n\r\n setTimeout(clear, 1e3);\r\n\r\n //return;\r\n \r\n return Promise.all(logoutPromises).catch((error) => {\r\n error.handled = true;\r\n }).finally(clear)/* .then(() => {\r\n location.pathname = '/';\r\n }) */;\r\n }\r\n \r\n public getNetworker(dcId: DcId, options: InvokeApiOptions = {}): Promise<MTPNetworker> {\r\n const connectionType: ConnectionType = options.fileDownload ? 'download' : (options.fileUpload ? 'upload' : 'client');\r\n //const connectionType: ConnectionType = 'client';\r\n\r\n \r\n \r\n \r\n \r\n \r\n // @ts-ignore\r\n const transportType = 'websocket';\r\n \r\n\r\n if(!this.cachedNetworkers.hasOwnProperty(transportType)) {\r\n this.cachedNetworkers[transportType] = {\r\n client: {},\r\n download: {},\r\n upload: {}\r\n };\r\n }\r\n\r\n const cache = this.cachedNetworkers[transportType][connectionType];\r\n if(!(dcId in cache)) {\r\n cache[dcId] = [];\r\n }\r\n \r\n const networkers = cache[dcId];\r\n // @ts-ignore\r\n const maxNetworkers = connectionType === 'client' || transportType === 'https' ? 1 : (connectionType === 'download' ? 3 : 3);\r\n if(networkers.length >= maxNetworkers) {\r\n let i = networkers.length - 1, found = false;\r\n for(; i >= 0; --i) {\r\n if(networkers[i].isOnline) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n \r\n const networker = found ? networkers.splice(i, 1)[0] : networkers.pop();\r\n networkers.unshift(networker);\r\n return Promise.resolve(networker);\r\n }\r\n \r\n const getKey = [dcId, transportType, connectionType].join('-');\r\n if(this.gettingNetworkers[getKey]) {\r\n return this.gettingNetworkers[getKey];\r\n }\r\n\r\n const ak: DcAuthKey = `dc${dcId}_auth_key` as any;\r\n const ss: DcServerSalt = `dc${dcId}_server_salt` as any;\r\n \r\n return this.gettingNetworkers[getKey] = Promise.all([ak, ss].map(key => sessionStorage.get(key)))\r\n .then(async([authKeyHex, serverSaltHex]) => {\r\n const transport = dcConfigurator.chooseServer(dcId, connectionType, transportType, connectionType === 'client');\r\n let networker: MTPNetworker;\r\n if(authKeyHex && authKeyHex.length === 512) {\r\n if(!serverSaltHex || serverSaltHex.length !== 16) {\r\n serverSaltHex = 'AAAAAAAAAAAAAAAA';\r\n }\r\n \r\n const authKey = bytesFromHex(authKeyHex);\r\n const authKeyId = (await CryptoWorker.invokeCrypto('sha1-hash', authKey)).slice(-8);\r\n const serverSalt = bytesFromHex(serverSaltHex);\r\n \r\n networker = networkerFactory.getNetworker(dcId, authKey, authKeyId, serverSalt, transport, options);\r\n } else {\r\n try { // if no saved state\r\n const auth = await authorizer.auth(dcId);\r\n \r\n const storeObj = {\r\n [ak]: bytesToHex(auth.authKey),\r\n [ss]: bytesToHex(auth.serverSalt)\r\n };\r\n \r\n sessionStorage.set(storeObj);\r\n \r\n networker = networkerFactory.getNetworker(dcId, auth.authKey, auth.authKeyId, auth.serverSalt, transport, options);\r\n } catch(error) {\r\n this.log('Get networker error', error, error.stack);\r\n delete this.gettingNetworkers[getKey];\r\n throw error;\r\n }\r\n }\r\n\r\n /* networker.onConnectionStatusChange = (online) => {\r\n console.log('status:', online);\r\n }; */\r\n \r\n delete this.gettingNetworkers[getKey];\r\n networkers.unshift(networker);\r\n this.setOnDrainIfNeeded(networker);\r\n return networker;\r\n });\r\n }\r\n\r\n public setOnDrainIfNeeded(networker: MTPNetworker) {\r\n if(networker.onDrain) {\r\n return;\r\n }\r\n \r\n const checkPromise: Promise<boolean> = networker.isFileNetworker ? \r\n Promise.resolve(true) : \r\n this.getBaseDcId().then(baseDcId => networker.dcId !== baseDcId);\r\n checkPromise.then(canRelease => {\r\n if(networker.onDrain) {\r\n return;\r\n }\r\n \r\n if(canRelease) {\r\n networker.onDrain = () => {\r\n this.log('networker drain', networker.dcId);\r\n\r\n networker.onDrain = undefined;\r\n networker.destroy();\r\n networkerFactory.removeNetworker(networker);\r\n DcConfigurator.removeTransport(this.cachedNetworkers, networker);\r\n DcConfigurator.removeTransport(dcConfigurator.chosenServers, networker.transport);\r\n };\r\n\r\n networker.setDrainTimeout();\r\n }\r\n });\r\n }\r\n \r\n public invokeApi<T extends keyof MethodDeclMap>(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): CancellablePromise<MethodDeclMap[T][\"res\"]> {\r\n ///////this.log('Invoke api', method, params, options);\r\n\r\n /* if(!this.lol) {\r\n networkerFactory.updatesProcessor({_: 'new_session_created'}, true);\r\n this.lol = true;\r\n } */\r\n\r\n const deferred = deferredPromise<MethodDeclMap[T]['res']>();\r\n\r\n let {afterMessageId, prepareTempMessageId} = options;\r\n if(prepareTempMessageId) {\r\n deferred.then(() => {\r\n delete this.afterMessageTempIds[prepareTempMessageId];\r\n });\r\n }\r\n\r\n if(MOUNT_CLASS_TO) {\r\n const startTime = Date.now();\r\n const interval = ctx.setInterval(() => {\r\n if(!cachedNetworker || !cachedNetworker.isStopped()) {\r\n this.log.error('Request is still processing:', method, params, options, 'time:', (Date.now() - startTime) / 1000);\r\n }\r\n //this.cachedUploadNetworkers[2].requestMessageStatus();\r\n }, 5e3);\r\n\r\n deferred.finally(() => {\r\n clearInterval(interval);\r\n });\r\n }\r\n\r\n const rejectPromise = (error: ApiError) => {\r\n if(!error) {\r\n error = {type: 'ERROR_EMPTY'};\r\n } else if(!isObject(error)) {\r\n error = {message: error};\r\n }\r\n \r\n deferred.reject(error);\r\n\r\n if((error.code === 401 && error.type === 'SESSION_REVOKED') || \r\n (error.code === 406 && error.type === 'AUTH_KEY_DUPLICATED')) {\r\n this.logOut();\r\n }\r\n\r\n if(options.ignoreErrors) {\r\n return;\r\n }\r\n \r\n if(error.code === 406) {\r\n error.handled = true;\r\n }\r\n \r\n if(!options.noErrorBox) {\r\n error.input = method;\r\n error.stack = stack || (error.originalError && error.originalError.stack) || error.stack || (new Error()).stack;\r\n setTimeout(() => {\r\n if(!error.handled) {\r\n if(error.code === 401) {\r\n this.logOut();\r\n } else {\r\n // ErrorService.show({error: error}); // WARNING\r\n }\r\n \r\n error.handled = true;\r\n }\r\n }, 100);\r\n }\r\n };\r\n \r\n let dcId: DcId;\r\n \r\n let cachedNetworker: MTPNetworker;\r\n let stack = (new Error()).stack || 'empty stack';\r\n const performRequest = (networker: MTPNetworker) => {\r\n if(afterMessageId) {\r\n const after = this.afterMessageTempIds[afterMessageId];\r\n if(after) {\r\n options.afterMessageId = after.messageId;\r\n }\r\n }\r\n\r\n const promise = (cachedNetworker = networker).wrapApiCall(method, params, options);\r\n\r\n if(prepareTempMessageId) {\r\n this.afterMessageTempIds[prepareTempMessageId] = {\r\n messageId: (options as MTMessage).messageId,\r\n promise: deferred\r\n };\r\n }\r\n\r\n return promise.then(deferred.resolve, (error: ApiError) => {\r\n //if(!options.ignoreErrors) {\r\n if(error.type !== 'FILE_REFERENCE_EXPIRED'/* && error.type !== 'MSG_WAIT_FAILED' */) {\r\n this.log.error('Error', error.code, error.type, this.baseDcId, dcId, method, params);\r\n }\r\n \r\n if(error.code === 401 && this.baseDcId === dcId) {\r\n if(error.type !== 'SESSION_PASSWORD_NEEDED') {\r\n sessionStorage.delete('dc')\r\n sessionStorage.delete('user_auth'); // ! возможно тут вообще не нужно это делать, но нужно проверить случай с USER_DEACTIVATED (https://core.telegram.org/api/errors)\r\n //this.telegramMeNotify(false);\r\n }\r\n \r\n rejectPromise(error);\r\n } else if(error.code === 401 && this.baseDcId && dcId !== this.baseDcId) {\r\n if(this.cachedExportPromise[dcId] === undefined) {\r\n const promise = new Promise((exportResolve, exportReject) => {\r\n this.invokeApi('auth.exportAuthorization', {dc_id: dcId}, {noErrorBox: true}).then((exportedAuth) => {\r\n this.invokeApi('auth.importAuthorization', {\r\n id: exportedAuth.id,\r\n bytes: exportedAuth.bytes\r\n }, {dcId, noErrorBox: true}).then(exportResolve, exportReject);\r\n }, exportReject);\r\n });\r\n \r\n this.cachedExportPromise[dcId] = promise;\r\n }\r\n \r\n this.cachedExportPromise[dcId].then(() => {\r\n //(cachedNetworker = networker).wrapApiCall(method, params, options).then(deferred.resolve, rejectPromise);\r\n this.invokeApi(method, params, options).then(deferred.resolve, rejectPromise);\r\n }, rejectPromise);\r\n } else if(error.code === 303) {\r\n const newDcId = +error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_|FILE_MIGRATE_)(\\d+)/)[2] as DcId;\r\n if(newDcId !== dcId) {\r\n if(options.dcId) {\r\n options.dcId = newDcId;\r\n } else {\r\n this.setBaseDcId(newDcId);\r\n }\r\n \r\n this.getNetworker(newDcId, options).then((networker) => {\r\n networker.wrapApiCall(method, params, options).then(deferred.resolve, rejectPromise);\r\n }, rejectPromise);\r\n }\r\n } else if(!options.rawError && error.code === 420) {\r\n const waitTime = +error.type.match(/^FLOOD_WAIT_(\\d+)/)[1] || 1;\r\n \r\n if(waitTime > (options.floodMaxTimeout !== undefined ? options.floodMaxTimeout : 60) && !options.prepareTempMessageId) {\r\n return rejectPromise(error);\r\n }\r\n \r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, waitTime/* (waitTime + 5) */ * 1000); // 03.02.2020\r\n } else if(!options.rawError && ['MSG_WAIT_FAILED', 'MSG_WAIT_TIMEOUT'].includes(error.type)) {\r\n const after = this.afterMessageTempIds[afterMessageId];\r\n\r\n afterMessageId = undefined;\r\n delete options.afterMessageId;\r\n\r\n if(after) after.promise.then(() => performRequest(cachedNetworker));\r\n else performRequest(cachedNetworker);\r\n } else if(!options.rawError && error.code === 500) {\r\n const now = Date.now();\r\n if(options.stopTime) {\r\n if(now >= options.stopTime) {\r\n return rejectPromise(error);\r\n }\r\n }\r\n \r\n options.waitTime = options.waitTime ? Math.min(60, options.waitTime * 1.5) : 1;\r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, options.waitTime * 1000);\r\n } else if(error.type === 'UNKNOWN') {\r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, 1000);\r\n } else {\r\n rejectPromise(error);\r\n }\r\n });\r\n }\r\n \r\n if(dcId = (options.dcId || this.baseDcId)) {\r\n this.getNetworker(dcId, options).then(performRequest, rejectPromise);\r\n } else {\r\n this.getBaseDcId().then(baseDcId => {\r\n this.getNetworker(dcId = baseDcId, options).then(performRequest, rejectPromise);\r\n });\r\n }\r\n\r\n return deferred;\r\n }\r\n}\r\n\r\nconst apiManager = new ApiManager();\r\nMOUNT_CLASS_TO.apiManager = apiManager;\r\nexport default apiManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { blobConstruct, readBlobAsUint8Array } from \"../helpers/blob\";\r\n\r\nexport class FileManager {\r\n public blobSupported = true;\r\n \r\n constructor() {\r\n try {\r\n blobConstruct([], '');\r\n } catch(e) {\r\n this.blobSupported = false;\r\n }\r\n }\r\n \r\n public isAvailable() {\r\n return this.blobSupported;\r\n }\r\n \r\n public write(fileWriter: ReturnType<FileManager['getFakeFileWriter']>, bytes: Uint8Array | Blob | string): Promise<void> {\r\n if(bytes instanceof Blob) { // is file bytes\r\n return readBlobAsUint8Array(bytes).then(arr => {\r\n return fileWriter.write(arr);\r\n });\r\n } else {\r\n return fileWriter.write(bytes);\r\n }\r\n }\r\n\r\n public getFakeFileWriter(mimeType: string, saveFileCallback?: (blob: Blob) => Promise<Blob>) {\r\n const blobParts: Array<Uint8Array | string> = [];\r\n const fakeFileWriter = {\r\n write: async(part: Uint8Array | string) => {\r\n if(!this.blobSupported) {\r\n throw false;\r\n }\r\n \r\n blobParts.push(part);\r\n },\r\n truncate: () => {\r\n blobParts.length = 0;\r\n },\r\n finalize: (saveToStorage = true) => {\r\n const blob = blobConstruct(blobParts, mimeType);\r\n\r\n if(saveToStorage && saveFileCallback) {\r\n saveFileCallback(blob);\r\n }\r\n \r\n return blob;\r\n }\r\n };\r\n \r\n return fakeFileWriter;\r\n }\r\n}\r\n\r\nexport default new FileManager();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from '../config/modes';\r\nimport { blobConstruct } from '../helpers/blob';\r\nimport FileManager from './filemanager';\r\n//import { MOUNT_CLASS_TO } from './mtproto/mtproto_config';\r\n//import { logger } from './polyfill';\r\n\r\nexport type CacheStorageDbName = 'cachedFiles' | 'cachedStreamChunks' | 'cachedAssets';\r\n\r\nexport default class CacheStorageController {\r\n private static STORAGES: CacheStorageController[] = [];\r\n private openDbPromise: Promise<Cache>;\r\n\r\n private useStorage = true;\r\n\r\n //private log: ReturnType<typeof logger> = logger('CS');\r\n\r\n constructor(private dbName: CacheStorageDbName) {\r\n if(Modes.test) {\r\n this.dbName += '_test';\r\n }\r\n\r\n if(CacheStorageController.STORAGES.length) {\r\n this.useStorage = CacheStorageController.STORAGES[0].useStorage;\r\n }\r\n \r\n this.openDatabase();\r\n CacheStorageController.STORAGES.push(this);\r\n }\r\n\r\n private openDatabase(): Promise<Cache> {\r\n return this.openDbPromise ?? (this.openDbPromise = caches.open(this.dbName));\r\n }\r\n\r\n public delete(entryName: string) {\r\n return this.timeoutOperation((cache) => cache.delete('/' + entryName));\r\n }\r\n\r\n public deleteAll() {\r\n return caches.delete(this.dbName);\r\n }\r\n\r\n public get(entryName: string) {\r\n return this.timeoutOperation((cache) => cache.match('/' + entryName));\r\n }\r\n\r\n public save(entryName: string, response: Response) {\r\n // return new Promise((resolve) => {}); // DEBUG\r\n return this.timeoutOperation((cache) => cache.put('/' + entryName, response));\r\n }\r\n\r\n public getFile(fileName: string, method: 'blob' | 'json' | 'text' = 'blob'): Promise<any> {\r\n /* if(method === 'blob') {\r\n return Promise.reject();\r\n } */\r\n\r\n // const str = `get fileName: ${fileName}`;\r\n // console.time(str);\r\n return this.get(fileName).then((response) => {\r\n if(!response) {\r\n //console.warn('getFile:', response, fileName);\r\n throw 'NO_ENTRY_FOUND';\r\n }\r\n\r\n const promise = response[method]();\r\n // promise.then(() => {\r\n // console.timeEnd(str);\r\n // });\r\n return promise;\r\n });\r\n }\r\n\r\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\r\n //return Promise.resolve(blobConstruct([blob]));\r\n if(!(blob instanceof Blob)) {\r\n blob = blobConstruct(blob) as Blob;\r\n }\r\n\r\n const response = new Response(blob, {\r\n headers: {\r\n 'Content-Length': '' + blob.size\r\n }\r\n });\r\n \r\n return this.save(fileName, response).then(() => blob as Blob);\r\n }\r\n\r\n public timeoutOperation<T>(callback: (cache: Cache) => Promise<T>) {\r\n if(!this.useStorage) {\r\n return Promise.reject('STORAGE_OFFLINE');\r\n }\r\n\r\n return new Promise<T>(async(resolve, reject) => {\r\n let rejected = false;\r\n const timeout = setTimeout(() => {\r\n reject();\r\n //console.warn('CACHESTORAGE TIMEOUT');\r\n rejected = true;\r\n }, 15e3);\r\n\r\n try {\r\n const cache = await this.openDatabase();\r\n if(!cache) {\r\n this.useStorage = false;\r\n this.openDbPromise = undefined;\r\n throw 'no cache?';\r\n }\r\n\r\n const res = await callback(cache);\r\n\r\n if(rejected) return;\r\n resolve(res);\r\n } catch(err) {\r\n reject(err);\r\n }\r\n\r\n clearTimeout(timeout);\r\n });\r\n }\r\n\r\n public getFileWriter(fileName: string, mimeType: string) {\r\n const fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\r\n return this.saveFile(fileName, blob).catch(() => blob);\r\n });\r\n\r\n return Promise.resolve(fakeWriter);\r\n }\r\n\r\n public static toggleStorage(enabled: boolean) {\r\n return Promise.all(this.STORAGES.map(storage => {\r\n storage.useStorage = enabled;\r\n \r\n if(!enabled) {\r\n return storage.deleteAll();\r\n }\r\n }));\r\n }\r\n}\r\n\r\n//const cacheStorage = new CacheStorageController(); \r\n//MOUNT_CLASS_TO.cacheStorage = cacheStorage;\r\n//export default cacheStorage;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { ReferenceBytes } from \"./referenceDatabase\";\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\nimport Modes from \"../../config/modes\";\r\nimport { readBlobAsArrayBuffer } from \"../../helpers/blob\";\r\nimport { CancellablePromise, deferredPromise } from \"../../helpers/cancellablePromise\";\r\nimport { notifyAll, notifySomeone } from \"../../helpers/context\";\r\nimport { getFileNameByLocation } from \"../../helpers/fileName\";\r\nimport { nextRandomInt } from \"../../helpers/random\";\r\nimport { InputFile, InputFileLocation, UploadFile } from \"../../layer\";\r\nimport { DcId, WorkerTaskVoidTemplate } from \"../../types\";\r\nimport CacheStorageController from \"../cacheStorage\";\r\nimport cryptoWorker from \"../crypto/cryptoworker\";\r\nimport FileManager from \"../filemanager\";\r\nimport { logger, LogTypes } from \"../logger\";\r\nimport apiManager from \"./apiManager\";\r\nimport { isWebpSupported } from \"./mtproto.worker\";\r\nimport { bytesToHex } from \"../../helpers/bytes\";\r\nimport assumeType from \"../../helpers/assumeType\";\r\nimport { ctx } from \"../../helpers/userAgent\";\r\n\r\ntype Delayed = {\r\n offset: number, \r\n writeFilePromise: CancellablePromise<void>, \r\n writeFileDeferred: CancellablePromise<void>\r\n};\r\n\r\nexport type DownloadOptions = {\r\n dcId: DcId, \r\n location: InputFileLocation, \r\n size?: number,\r\n fileName?: string,\r\n mimeType?: string,\r\n limitPart?: number,\r\n queueId?: number,\r\n onlyCache?: boolean,\r\n};\r\n\r\ntype MyUploadFile = UploadFile.uploadFile;\r\n\r\nexport interface RefreshReferenceTask extends WorkerTaskVoidTemplate {\r\n type: 'refreshReference',\r\n payload: ReferenceBytes,\r\n};\r\n\r\nexport interface RefreshReferenceTaskResponse extends WorkerTaskVoidTemplate {\r\n type: 'refreshReference',\r\n payload: ReferenceBytes,\r\n originalPayload: ReferenceBytes\r\n};\r\n\r\nconst MAX_FILE_SAVE_SIZE = 20e6;\r\n\r\nexport class ApiFileManager {\r\n private cacheStorage = new CacheStorageController('cachedFiles');\r\n\r\n private cachedDownloadPromises: {\r\n [fileName: string]: CancellablePromise<Blob>\r\n } = {};\r\n\r\n private uploadPromises: {\r\n [fileName: string]: Set<CancellablePromise<InputFile>>\r\n } = {};\r\n\r\n private downloadPulls: {\r\n [dcId: string]: Array<{\r\n id: number,\r\n queueId: number,\r\n cb: () => Promise<MyUploadFile | void>,\r\n deferred: {\r\n resolve: (...args: any[]) => void,\r\n reject: (...args: any[]) => void\r\n },\r\n activeDelta: number\r\n }>\r\n } = {};\r\n private downloadActives: {[dcId: string]: number} = {};\r\n\r\n public webpConvertPromises: {[fileName: string]: CancellablePromise<Uint8Array>} = {};\r\n public refreshReferencePromises: {\r\n [referenceHex: string]: {\r\n deferred: CancellablePromise<ReferenceBytes>,\r\n timeout: number\r\n }\r\n } = {};\r\n\r\n private log: ReturnType<typeof logger> = logger('AFM', LogTypes.Error | LogTypes.Log);\r\n private tempId = 0;\r\n private queueId = 0;\r\n private debug = Modes.debug;\r\n\r\n constructor() {\r\n setInterval(() => { // clear old promises\r\n for(const hex in this.refreshReferencePromises) {\r\n const {deferred} = this.refreshReferencePromises[hex];\r\n if(deferred.isFulfilled || deferred.isRejected) {\r\n delete this.refreshReferencePromises[hex];\r\n }\r\n }\r\n }, 1800e3);\r\n }\r\n\r\n private downloadRequest(dcId: 'upload', id: number, cb: () => Promise<void>, activeDelta: number, queueId?: number): Promise<void>;\r\n private downloadRequest(dcId: number, id: number, cb: () => Promise<MyUploadFile>, activeDelta: number, queueId?: number): Promise<MyUploadFile>;\r\n private downloadRequest(dcId: number | string, id: number, cb: () => Promise<MyUploadFile | void>, activeDelta: number, queueId: number = 0) {\r\n if(this.downloadPulls[dcId] === undefined) {\r\n this.downloadPulls[dcId] = [];\r\n this.downloadActives[dcId] = 0;\r\n }\r\n\r\n const downloadPull = this.downloadPulls[dcId];\r\n\r\n const promise = new Promise<MyUploadFile | void>((resolve, reject) => {\r\n downloadPull.push({id, queueId, cb, deferred: {resolve, reject}, activeDelta});\r\n });\r\n\r\n setTimeout(() => {\r\n this.downloadCheck(dcId);\r\n }, 0);\r\n\r\n return promise;\r\n }\r\n\r\n private downloadCheck(dcId: string | number) {\r\n const downloadPull = this.downloadPulls[dcId];\r\n const downloadLimit = dcId === 'upload' ? 24 : 24;\r\n //const downloadLimit = Infinity;\r\n\r\n if(this.downloadActives[dcId] >= downloadLimit || !downloadPull || !downloadPull.length) {\r\n return false;\r\n }\r\n\r\n //const data = downloadPull.shift();\r\n const data = downloadPull.findAndSplice(d => d.queueId === 0) || downloadPull.findAndSplice(d => d.queueId === this.queueId) || downloadPull.shift();\r\n const activeDelta = data.activeDelta || 1;\r\n\r\n this.downloadActives[dcId] += activeDelta;\r\n\r\n data.cb()\r\n .then((result) => {\r\n this.downloadActives[dcId] -= activeDelta;\r\n this.downloadCheck(dcId);\r\n\r\n data.deferred.resolve(result);\r\n }, (error: Error) => {\r\n // @ts-ignore\r\n if(!error || !error.type || (error.type !== 'DOWNLOAD_CANCELED' && error.type !== 'UPLOAD_CANCELED')) {\r\n this.log.error('downloadCheck error:', error);\r\n }\r\n\r\n this.downloadActives[dcId] -= activeDelta;\r\n this.downloadCheck(dcId);\r\n\r\n data.deferred.reject(error);\r\n });\r\n }\r\n\r\n public setQueueId(queueId: number) {\r\n //this.log.error('setQueueId', queueId);\r\n this.queueId = queueId;\r\n }\r\n\r\n private getFileStorage() {\r\n return this.cacheStorage;\r\n }\r\n\r\n public cancelDownload(fileName: string) {\r\n const promises = (this.cachedDownloadPromises[fileName] ? [this.cachedDownloadPromises[fileName]] : []) || \r\n (this.uploadPromises[fileName] ? Array.from(this.uploadPromises[fileName]) : []);\r\n let canceled = false;\r\n for(let i = 0, length = promises.length; i < length; ++i) {\r\n const promise = promises[i];\r\n if(promise && !promise.isRejected && !promise.isFulfilled) {\r\n promise.cancel();\r\n canceled = true;\r\n }\r\n }\r\n\r\n return canceled;\r\n }\r\n\r\n public requestFilePart(dcId: DcId, location: InputFileLocation, offset: number, limit: number, id = 0, queueId = 0, checkCancel?: () => void) {\r\n return this.downloadRequest(dcId, id, () => {\r\n checkCancel && checkCancel();\r\n\r\n const invoke = (): Promise<MyUploadFile> => {\r\n checkCancel && checkCancel();\r\n\r\n const promise = apiManager.invokeApi('upload.getFile', {\r\n location,\r\n offset,\r\n limit\r\n } as any, {\r\n dcId,\r\n fileDownload: true\r\n }) as Promise<MyUploadFile>;\r\n\r\n return promise.catch((err) => {\r\n if(err.type === 'FILE_REFERENCE_EXPIRED') {\r\n return this.refreshReference(location).then(invoke);\r\n }\r\n\r\n throw err;\r\n });\r\n };\r\n\r\n assumeType<InputFileLocation.inputDocumentFileLocation>(location);\r\n const reference = location.file_reference;\r\n if(reference && !location.checkedReference) { // check stream's location because it's new every call\r\n location.checkedReference = true;\r\n const hex = bytesToHex(reference);\r\n if(this.refreshReferencePromises[hex]) {\r\n return this.refreshReference(location).then(invoke);\r\n }\r\n }\r\n\r\n return invoke();\r\n }, this.getDelta(limit), queueId);\r\n }\r\n\r\n /* private convertBlobToBytes(blob: Blob) {\r\n return blob.arrayBuffer().then(buffer => new Uint8Array(buffer));\r\n } */\r\n\r\n private getDelta(bytes: number) {\r\n return bytes / 1024 / 128;\r\n }\r\n\r\n private getLimitPart(size: number): number {\r\n let bytes: number;\r\n\r\n bytes = 512;\r\n /* if(size < 1e6 || !size) bytes = 512;\r\n else if(size < 3e6) bytes = 256;\r\n else bytes = 128; */\r\n\r\n return bytes * 1024;\r\n }\r\n\r\n private uncompressTGS = (bytes: Uint8Array, fileName: string) => {\r\n //this.log('uncompressTGS', bytes, bytes.slice().buffer);\r\n // slice нужен потому что в uint8array - 5053 length, в arraybuffer - 5084\r\n return cryptoWorker.invokeCrypto('gzipUncompress', bytes.slice().buffer, true) as Promise<string>;\r\n };\r\n\r\n private convertWebp = (bytes: Uint8Array, fileName: string) => {\r\n const convertPromise = deferredPromise<Uint8Array>();\r\n\r\n const task = {type: 'convertWebp', payload: {fileName, bytes}};\r\n notifySomeone(task);\r\n return this.webpConvertPromises[fileName] = convertPromise;\r\n };\r\n\r\n private refreshReference(inputFileLocation: InputFileLocation) {\r\n const reference = (inputFileLocation as InputFileLocation.inputDocumentFileLocation).file_reference;\r\n const hex = bytesToHex(reference);\r\n\r\n let r = this.refreshReferencePromises[hex];\r\n if(!r) {\r\n const deferred = deferredPromise<ReferenceBytes>();\r\n\r\n r = this.refreshReferencePromises[hex] = {\r\n deferred,\r\n timeout: ctx.setTimeout(() => {\r\n this.log.error('Didn\\'t refresh the reference:', inputFileLocation);\r\n deferred.reject('REFERENCE_IS_NOT_REFRESHED');\r\n }, 60000)\r\n };\r\n\r\n deferred.finally(() => {\r\n clearTimeout(r.timeout);\r\n });\r\n\r\n const task = {type: 'refreshReference', payload: reference};\r\n notifySomeone(task);\r\n }\r\n\r\n // have to replace file_reference in any way, because location can be different everytime if it's stream\r\n return r.deferred.then(reference => {\r\n if(hex === bytesToHex(reference)) {\r\n throw 'REFERENCE_IS_NOT_REFRESHED';\r\n }\r\n\r\n (inputFileLocation as InputFileLocation.inputDocumentFileLocation).file_reference = reference;\r\n });\r\n }\r\n\r\n public downloadFile(options: DownloadOptions): CancellablePromise<Blob> {\r\n if(!FileManager.isAvailable()) {\r\n return Promise.reject({type: 'BROWSER_BLOB_NOT_SUPPORTED'});\r\n }\r\n\r\n const size = options.size ?? 0;\r\n const {dcId, location} = options;\r\n\r\n let process: ApiFileManager['uncompressTGS'] | ApiFileManager['convertWebp'];\r\n\r\n if(options.mimeType === 'image/webp' && !isWebpSupported()) {\r\n process = this.convertWebp;\r\n options.mimeType = 'image/png';\r\n } else if(options.mimeType === 'application/x-tgsticker') {\r\n process = this.uncompressTGS;\r\n options.mimeType = 'application/json';\r\n }\r\n\r\n const fileName = getFileNameByLocation(location, {fileName: options.fileName});\r\n const cachedPromise = this.cachedDownloadPromises[fileName];\r\n const fileStorage = this.getFileStorage();\r\n\r\n this.debug && this.log('downloadFile', fileName, size, location, options.mimeType);\r\n\r\n /* if(options.queueId) {\r\n this.log.error('downloadFile queueId:', fileName, options.queueId);\r\n } */\r\n\r\n if(cachedPromise) {\r\n //this.log('downloadFile cachedPromise');\r\n\r\n if(size) {\r\n return cachedPromise.then((blob: Blob) => {\r\n if(blob.size < size) {\r\n this.debug && this.log('downloadFile need to deleteFile, wrong size:', blob.size, size);\r\n\r\n return this.deleteFile(fileName).then(() => {\r\n return this.downloadFile(options);\r\n }).catch(() => {\r\n return this.downloadFile(options);\r\n });\r\n } else {\r\n return blob;\r\n }\r\n });\r\n } else {\r\n return cachedPromise;\r\n }\r\n }\r\n\r\n const deferred = deferredPromise<Blob>();\r\n const mimeType = options.mimeType || 'image/jpeg';\r\n\r\n let canceled = false;\r\n let resolved = false;\r\n let cacheFileWriter: ReturnType<typeof FileManager['getFakeFileWriter']>;\r\n let errorHandler = (error: any) => {\r\n delete this.cachedDownloadPromises[fileName];\r\n deferred.reject(error);\r\n errorHandler = () => {};\r\n\r\n if(cacheFileWriter && (!error || error.type !== 'DOWNLOAD_CANCELED')) {\r\n cacheFileWriter.truncate();\r\n }\r\n };\r\n\r\n const id = this.tempId++;\r\n\r\n fileStorage.getFile(fileName).then(async(blob: Blob) => {\r\n //this.log('maybe cached', fileName);\r\n //throw '';\r\n\r\n if(blob.size < size) {\r\n //this.log('downloadFile need to deleteFile 2, wrong size:', blob.size, size);\r\n await this.deleteFile(fileName);\r\n throw false;\r\n }\r\n\r\n deferred.resolve(blob);\r\n }).catch(() => {\r\n //this.log('not cached', fileName);\r\n const fileWriterPromise = fileStorage.getFileWriter(fileName, mimeType);\r\n\r\n fileWriterPromise.then((fileWriter) => {\r\n cacheFileWriter = fileWriter;\r\n const limit = options.limitPart || this.getLimitPart(size);\r\n let offset: number;\r\n let startOffset = 0;\r\n let writeFilePromise: CancellablePromise<void> = Promise.resolve(),\r\n writeFileDeferred: CancellablePromise<void>;\r\n //const maxRequests = 13107200 / limit; // * 100 Mb speed\r\n const maxRequests = Infinity;\r\n\r\n //console.error('maxRequests', maxRequests);\r\n\r\n const processDownloaded = async(bytes: Uint8Array, offset: number) => {\r\n if(process) {\r\n //const perf = performance.now();\r\n const processed = await process(bytes, fileName);\r\n //this.log('downloadFile process downloaded time', performance.now() - perf, mimeType, process);\r\n return processed;\r\n }\r\n \r\n return bytes;\r\n };\r\n\r\n const delayed: Delayed[] = [];\r\n offset = startOffset;\r\n do {\r\n ////this.log('offset:', startOffset);\r\n writeFileDeferred = deferredPromise<void>();\r\n delayed.push({offset, writeFilePromise, writeFileDeferred});\r\n writeFilePromise = writeFileDeferred;\r\n offset += limit;\r\n } while(offset < size);\r\n\r\n let done = 0;\r\n const superpuper = async() => {\r\n //if(!delayed.length) return;\r\n\r\n const {offset, writeFilePromise, writeFileDeferred} = delayed.shift();\r\n try {\r\n const result = await this.requestFilePart(dcId, location, offset, limit, id, options.queueId, checkCancel);\r\n\r\n const bytes: Uint8Array = result.bytes as any;\r\n\r\n if(delayed.length) {\r\n superpuper();\r\n }\r\n\r\n this.debug && this.log('downloadFile requestFilePart result:', fileName, result);\r\n const isFinal = offset + limit >= size || !bytes.byteLength;\r\n if(bytes.byteLength) {\r\n //done += limit;\r\n done += bytes.byteLength;\r\n\r\n //if(!isFinal) {\r\n ////this.log('deferred notify 2:', {done: offset + limit, total: size}, deferred);\r\n deferred.notify({done, offset, total: size});\r\n //}\r\n\r\n const processedResult = await processDownloaded(bytes, offset);\r\n checkCancel();\r\n\r\n await writeFilePromise;\r\n checkCancel();\r\n\r\n await FileManager.write(fileWriter, processedResult);\r\n }\r\n\r\n writeFileDeferred.resolve();\r\n\r\n if(isFinal) {\r\n resolved = true;\r\n\r\n deferred.resolve(fileWriter.finalize(size < MAX_FILE_SAVE_SIZE));\r\n }\r\n } catch(err) {\r\n errorHandler(err);\r\n }\r\n };\r\n\r\n for(let i = 0, length = Math.min(maxRequests, delayed.length); i < length; ++i) {\r\n superpuper();\r\n }\r\n }).catch((err) => {\r\n if(!['STORAGE_OFFLINE'].includes(err)) {\r\n this.log.error('saveFile error:', err);\r\n }\r\n });\r\n });\r\n\r\n const checkCancel = () => {\r\n if(canceled) {\r\n const error = new Error('Canceled');\r\n // @ts-ignore\r\n error.type = 'DOWNLOAD_CANCELED';\r\n throw error;\r\n }\r\n };\r\n\r\n deferred.cancel = () => {\r\n if(!canceled && !resolved) {\r\n canceled = true;\r\n delete this.cachedDownloadPromises[fileName];\r\n errorHandler({type: 'DOWNLOAD_CANCELED'});\r\n }\r\n };\r\n\r\n deferred.notify = (progress: {done: number, total: number, offset: number}) => {\r\n notifyAll({progress: {fileName, ...progress}});\r\n };\r\n\r\n this.cachedDownloadPromises[fileName] = deferred;\r\n\r\n deferred.finally(() => {\r\n delete this.cachedDownloadPromises[fileName];\r\n });\r\n\r\n return deferred;\r\n }\r\n\r\n private deleteFile(fileName: string) {\r\n //this.log('will delete file:', fileName);\r\n delete this.cachedDownloadPromises[fileName];\r\n return this.getFileStorage().delete(fileName);\r\n }\r\n\r\n public uploadFile({file, fileName}: {file: Blob | File, fileName: string}) {\r\n const fileSize = file.size, \r\n isBigFile = fileSize >= 10485760;\r\n\r\n let canceled = false,\r\n resolved = false,\r\n doneParts = 0,\r\n partSize = 262144; // 256 Kb\r\n\r\n /* if(fileSize > (524288 * 3000)) {\r\n partSize = 1024 * 1024;\r\n activeDelta = 8;\r\n } else */if(fileSize > 67108864) {\r\n partSize = 524288;\r\n } else if(fileSize < 102400) {\r\n partSize = 32768;\r\n }\r\n\r\n const activeDelta = this.getDelta(partSize);\r\n\r\n const totalParts = Math.ceil(fileSize / partSize);\r\n const fileId: [number, number] = [nextRandomInt(0xFFFFFFFF), nextRandomInt(0xFFFFFFFF)];\r\n\r\n let _part = 0;\r\n\r\n const resultInputFile: InputFile = {\r\n _: isBigFile ? 'inputFileBig' : 'inputFile',\r\n id: fileId as any,\r\n parts: totalParts,\r\n name: fileName,\r\n md5_checksum: ''\r\n };\r\n\r\n const deferredHelper: {\r\n resolve?: (input: typeof resultInputFile) => void,\r\n reject?: (error: any) => void,\r\n notify?: (details: {done: number, total: number}) => void\r\n } = {\r\n notify: (details: {done: number, total: number}) => {}\r\n };\r\n const deferred: CancellablePromise<typeof resultInputFile> = new Promise((resolve, reject) => {\r\n if(totalParts > 4000) {\r\n return reject({type: 'FILE_TOO_BIG'});\r\n }\r\n\r\n deferredHelper.resolve = resolve;\r\n deferredHelper.reject = reject;\r\n });\r\n Object.assign(deferred, deferredHelper);\r\n\r\n if(totalParts > 4000) {\r\n return deferred;\r\n }\r\n \r\n let errorHandler = (error: any) => {\r\n if(error?.type !== 'UPLOAD_CANCELED') {\r\n this.log.error('Up Error', error);\r\n }\r\n\r\n deferred.reject(error);\r\n canceled = true;\r\n errorHandler = () => {};\r\n };\r\n\r\n const method = isBigFile ? 'upload.saveBigFilePart' : 'upload.saveFilePart';\r\n\r\n const id = this.tempId++;\r\n\r\n /* setInterval(() => {\r\n console.log(file);\r\n }, 1e3); */\r\n\r\n const self = this;\r\n function* generator() {\r\n for(let offset = 0; offset < fileSize; offset += partSize) {\r\n const part = _part++; // 0, 1\r\n yield self.downloadRequest('upload', id, () => {\r\n const blob = file.slice(offset, offset + partSize);\r\n\r\n return readBlobAsArrayBuffer(blob).then(buffer => {\r\n if(canceled) {\r\n throw {type: 'UPLOAD_CANCELED'};\r\n }\r\n\r\n self.debug && self.log('Upload file part, isBig:', isBigFile, part, buffer.byteLength, new Uint8Array(buffer).length, new Uint8Array(buffer).slice().length);\r\n\r\n /* const u = new Uint8Array(buffer.byteLength);\r\n for(let i = 0; i < u.length; ++i) {\r\n //u[i] = Math.random() * 255 | 0;\r\n u[i] = 0;\r\n }\r\n buffer = u.buffer; */\r\n \r\n /* setTimeout(() => {\r\n doneParts++;\r\n uploadResolve();\r\n \r\n //////this.log('Progress', doneParts * partSize / fileSize);\r\n\r\n self.log('done part', part, doneParts);\r\n \r\n deferred.notify({done: doneParts * partSize, total: fileSize});\r\n \r\n if(doneParts >= totalParts) {\r\n deferred.resolve(resultInputFile);\r\n resolved = true;\r\n }\r\n }, 1250);\r\n return; */\r\n\r\n return apiManager.invokeApi(method, {\r\n file_id: fileId,\r\n file_part: part,\r\n file_total_parts: totalParts,\r\n bytes: buffer/* new Uint8Array(buffer) */\r\n } as any, {\r\n //startMaxLength: partSize + 256,\r\n fileUpload: true\r\n }).then((result) => {\r\n doneParts++;\r\n \r\n //////this.log('Progress', doneParts * partSize / fileSize);\r\n \r\n deferred.notify({done: doneParts * partSize, total: fileSize});\r\n \r\n if(doneParts >= totalParts) {\r\n deferred.resolve(resultInputFile);\r\n resolved = true;\r\n }\r\n }, errorHandler);\r\n });\r\n }, activeDelta).catch(errorHandler);\r\n }\r\n }\r\n\r\n const it = generator();\r\n const process = () => {\r\n if(canceled) return;\r\n const r = it.next();\r\n if(r.done || canceled) return;\r\n (r.value as Promise<void>).then(process);\r\n };\r\n\r\n const maxRequests = Infinity;\r\n //const maxRequests = 10;\r\n /* for(let i = 0; i < 10; ++i) {\r\n process();\r\n } */\r\n for(let i = 0, length = Math.min(maxRequests, totalParts); i < length; ++i) {\r\n process();\r\n }\r\n\r\n deferred.cancel = () => {\r\n //this.log('cancel upload', canceled, resolved);\r\n if(!canceled && !resolved) {\r\n canceled = true;\r\n errorHandler({type: 'UPLOAD_CANCELED'});\r\n }\r\n };\r\n\r\n deferred.notify = (progress: {done: number, total: number}) => {\r\n notifyAll({progress: {fileName, ...progress}});\r\n };\r\n\r\n deferred.finally(() => {\r\n set.delete(deferred);\r\n if(!set.size) {\r\n delete this.uploadPromises[fileName];\r\n }\r\n });\r\n\r\n const set = this.uploadPromises[fileName] ?? (this.uploadPromises[fileName] = new Set());\r\n set.add(deferred);\r\n return deferred;\r\n }\r\n}\r\n\r\nconst apiFileManager = new ApiFileManager();\r\nMOUNT_CLASS_TO.apiFileManager = apiFileManager;\r\nexport default apiFileManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { InputFileLocation, InputStickerSet } from \"../layer\";\r\nimport type { DownloadOptions } from \"../lib/mtproto/apiFileManager\";\r\n\r\nconst FILENAME_JOINER = '_';\r\n\r\nexport function getFileNameByLocation(location: InputFileLocation, options?: Partial<{\r\n fileName: string\r\n}>) {\r\n const fileName = '';//(options?.fileName || '').split('.');\r\n const ext = fileName[fileName.length - 1] || '';\r\n\r\n let str: string;\r\n switch(location._) {\r\n case 'inputPhotoFileLocation': {\r\n str = ['photo', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n case 'inputDocumentFileLocation': {\r\n str = ['document', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n case 'inputPeerPhotoFileLocation':\r\n str = ['peerPhoto', location.photo_id, location.pFlags.big ? 'big' : 'small'].join(FILENAME_JOINER);\r\n break;\r\n \r\n case 'inputStickerSetThumb': {\r\n const id = (location.stickerset as InputStickerSet.inputStickerSetID).id || \r\n (location.stickerset as InputStickerSet.inputStickerSetShortName).short_name || \r\n (location.stickerset as InputStickerSet.inputStickerSetDice).emoticon || \r\n location.stickerset._;\r\n str = ['stickerSetThumb', id, location.thumb_version].join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n case 'inputFileLocation': {\r\n str = location.volume_id + '_' + location.local_id;\r\n break;\r\n }\r\n\r\n default: {\r\n console.error('Unrecognized location:', location);\r\n str = '';\r\n break;\r\n }\r\n }\r\n\r\n return str + (ext ? '.' + ext : ext);\r\n}\r\n\r\nexport type FileURLType = 'photo' | 'thumb' | 'document' | 'stream' | 'download';\r\nexport function getFileURL(type: FileURLType, options: DownloadOptions) {\r\n //console.log('getFileURL', location);\r\n //const perf = performance.now();\r\n const encoded = encodeURIComponent(JSON.stringify(options));\r\n //console.log('getFileURL encode:', performance.now() - perf, encoded);\r\n\r\n return '/' + type + '/' + encoded;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n// just to include\r\nimport '../polyfill';\r\n\r\nimport type { LocalStorageProxyTask } from '../localStorage';\r\nimport type { WebpConvertTask } from '../webp/webpWorkerController';\r\nimport type { ToggleStorageTask } from './mtprotoworker';\r\nimport type { RefreshReferenceTaskResponse } from './apiFileManager';\r\nimport apiManager from \"./apiManager\";\r\nimport cryptoWorker from \"../crypto/cryptoworker\";\r\nimport networkerFactory from \"./networkerFactory\";\r\nimport apiFileManager from './apiFileManager';\r\nimport { ctx } from '../../helpers/userAgent';\r\nimport { notifyAll } from '../../helpers/context';\r\nimport CacheStorageController from '../cacheStorage';\r\nimport sessionStorage from '../sessionStorage';\r\nimport { socketsProxied } from './transports/socketProxied';\r\nimport { bytesToHex } from '../../helpers/bytes';\r\n\r\nlet webpSupported = false;\r\nexport const isWebpSupported = () => {\r\n return webpSupported;\r\n};\r\n\r\nnetworkerFactory.setUpdatesProcessor((obj) => {\r\n notifyAll({update: obj});\r\n});\r\n\r\nnetworkerFactory.onConnectionStatusChange = (status) => {\r\n notifyAll({type: 'connectionStatusChange', payload: status});\r\n};\r\n\r\nconst taskListeners = {\r\n convertWebp: (task: WebpConvertTask) => {\r\n const {fileName, bytes} = task.payload;\r\n const deferred = apiFileManager.webpConvertPromises[fileName];\r\n if(deferred) {\r\n deferred.resolve(bytes);\r\n delete apiFileManager.webpConvertPromises[fileName];\r\n }\r\n },\r\n\r\n webpSupport: (task: any) => {\r\n webpSupported = task.payload;\r\n },\r\n\r\n socketProxy: (task: any) => {\r\n const socketTask = task.payload;\r\n const id = socketTask.id;\r\n \r\n const socketProxied = socketsProxied.get(id);\r\n if(socketTask.type === 'message') {\r\n socketProxied.dispatchEvent('message', socketTask.payload);\r\n } else if(socketTask.type === 'open') {\r\n socketProxied.dispatchEvent('open');\r\n } else if(socketTask.type === 'close') {\r\n socketProxied.dispatchEvent('close');\r\n socketsProxied.delete(id);\r\n }\r\n },\r\n\r\n localStorageProxy: (task: LocalStorageProxyTask) => {\r\n sessionStorage.finishTask(task.id, task.payload);\r\n },\r\n\r\n userAgent: (task: any) => {\r\n networkerFactory.userAgent = task.payload;\r\n },\r\n\r\n online: () => {\r\n networkerFactory.forceReconnectTimeout();\r\n },\r\n\r\n forceReconnect: () => {\r\n networkerFactory.forceReconnect();\r\n },\r\n\r\n toggleStorage: (task: ToggleStorageTask) => {\r\n const enabled = task.payload;\r\n // AppStorage.toggleStorage(enabled);\r\n CacheStorageController.toggleStorage(enabled);\r\n },\r\n\r\n refreshReference: (task: RefreshReferenceTaskResponse) => {\r\n const hex = bytesToHex(task.originalPayload);\r\n const r = apiFileManager.refreshReferencePromises[hex];\r\n const deferred = r?.deferred;\r\n if(deferred) {\r\n if(task.error) {\r\n deferred.reject(task.error);\r\n } else {\r\n deferred.resolve(task.payload);\r\n }\r\n }\r\n }\r\n};\r\n\r\nconst onMessage = async(e: any) => {\r\n try {\r\n const task: {\r\n task: string,\r\n taskId: number,\r\n args: any[],\r\n type?: string\r\n } = e.data;\r\n const taskId = task.taskId;\r\n\r\n // @ts-ignore\r\n const f = taskListeners[task.type];\r\n if(f) {\r\n f(task);\r\n return;\r\n }\r\n\r\n if(!task.task) {\r\n return;\r\n }\r\n \r\n switch(task.task) {\r\n case 'computeSRP':\r\n case 'gzipUncompress':\r\n return cryptoWorker.invokeCrypto(task.task, ...task.args as any).then(result => {\r\n notifyAll({taskId, result});\r\n });\r\n \r\n case 'requestFilePart':\r\n case 'setQueueId':\r\n case 'cancelDownload':\r\n case 'uploadFile':\r\n case 'downloadFile': {\r\n try {\r\n // @ts-ignore\r\n let result: any = apiFileManager[task.task].apply(apiFileManager, task.args);\r\n \r\n if(result instanceof Promise) {\r\n /* (result as ReturnType<ApiFileManager['downloadFile']>).notify = (progress: {done: number, total: number, offset: number}) => {\r\n notify({progress: {fileName, ...progress}});\r\n }; */\r\n result = await result;\r\n }\r\n \r\n notifyAll({taskId, result});\r\n } catch(error) {\r\n notifyAll({taskId, error});\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 'getNetworker': {\r\n // @ts-ignore\r\n apiManager[task.task].apply(apiManager, task.args).finally(() => {\r\n notifyAll({taskId, result: null});\r\n });\r\n \r\n break;\r\n }\r\n\r\n case 'setLanguage':\r\n case 'startAll':\r\n case 'stopAll': {\r\n // @ts-ignore\r\n networkerFactory[task.task].apply(networkerFactory, task.args);\r\n break;\r\n }\r\n \r\n default: {\r\n try {\r\n // @ts-ignore\r\n let result = apiManager[task.task].apply(apiManager, task.args);\r\n \r\n if(result instanceof Promise) {\r\n result = await result;\r\n }\r\n\r\n //console.log(notifyAll);\r\n \r\n notifyAll({taskId, result});\r\n } catch(error) {\r\n notifyAll({taskId, error});\r\n }\r\n \r\n //throw new Error('Unknown task: ' + task.task);\r\n break;\r\n }\r\n }\r\n } catch(err) {\r\n console.error('worker task error:', err);\r\n }\r\n};\r\n\r\n//console.log('[WORKER] Will send ready', Date.now() / 1000);\r\nctx.addEventListener('message', onMessage);\r\nnotifyAll('ready');\r\n"],"sourceRoot":""}