Skip to content

Commit a59ac41

Browse files
committed
Merge branch 'release/2.4.48'
2 parents 4007ee5 + f64e6f4 commit a59ac41

File tree

29 files changed

+414
-140
lines changed

29 files changed

+414
-140
lines changed

README.md

Lines changed: 12 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -2,93 +2,26 @@
22

33
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Z9KKEUVYEY6BN" target="_blank"><img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" /></a>
44

5-
## Updates (September 07, 2015)
6-
Yowsup v2.4 is out, See [release notes](https://github.com/tgalal/yowsup/releases/tag/v2.4)
5+
## Updates (December 14, 2015)
6+
Yowsup v2.4.48 is out, See [release notes](https://github.com/tgalal/yowsup/releases/tag/v2.4.48)
77

8-
### Updates (August 01, 2015)
9-
Yowsup v2.3.185 is out, contains fixes in axolotl integration. See [release notes](https://github.com/tgalal/yowsup/releases/tag/v2.3.185)
10-
11-
### Updates (July 27, 2015)
12-
Yowsup v2.3.183, see [release notes](https://github.com/tgalal/yowsup/releases/tag/v2.3.183)
13-
14-
### Updates (July 21, 2015)
15-
Yowsup v2.3.167, see [release notes](https://github.com/tgalal/yowsup/releases/tag/v2.3.167)
16-
17-
### Updates (June 23, 2015)
18-
Yowsup v2.3.123, see [release notes](https://github.com/tgalal/yowsup/releases/tag/v2.3.123)
19-
20-
### Updates (May 29, 2015)
21-
22-
Yowsup v2.3.84, see [release notes](https://github.com/tgalal/yowsup/releases/tag/v2.3.84)
23-
24-
### Updates (February 17, 2015)
25-
26-
Yowsup 2.2.78 is out, see [release notes](https://github.com/tgalal/yowsup/releases/tag/v2.2.78).
27-
28-
### Updates (January 12, 2015)
29-
30-
Yowsup 2.2.15 is out.
31-
32-
Image upload and send is now implemented. [Read here](https://github.com/tgalal/yowsup/wiki/Upload-and-send-Media) how to integrate in your code, or try it out with yowsup-cli
33-
34-
[Read full release notes](https://github.com/tgalal/yowsup/releases/tag/v2.2.15)
35-
36-
### Updates (January 1, 2015)
37-
38-
Happy new year!
39-
40-
P.S: Yowsup's [license changed](https://github.com/tgalal/yowsup#license) to GPLv3 (previously the MIT License was used).
41-
42-
### (December 31, 2014)
43-
44-
New features land in yowsup. You will need to re-install to pull new dependencies. Follow the [updated install instructions for your OS](#installation-updated-dec-31-2014).
45-
46-
A couple of highlights:
47-
48-
### End-to-End encryption
49-
50-
Yowsup now implements the new end-to-end encryption recently introduced in WhatsApp (AKA axolotl) (AKA textsecure). To activate in demos pass in '--moxie' switch.
51-
Example:
52-
53-
> yowsup-cli demos --config /path/to/config --yowsup --moxie
54-
55-
This will make messages communication with WhatsApp platforms which support this feature encrypted. At the moment it's only Android, which means yowsup got this feature even before official WhatsApp clients on other platforms.
56-
57-
For platforms which do not support encryption, they will get plaintext messages as usual.
58-
59-
More technical details about axolotl in yowsup [here](https://github.com/tgalal/yowsup/wiki/End-to-End-encryption)
60-
61-
### New Send client demo
62-
63-
Use the send client demo in yowsup-cli to login, send a message and exit.
64-
65-
> yowsup-cli demos --config /path/to/config --send NUMBER "Hello world"
66-
678
==========================================================
689

6910
## Yowsup opened WhatsApp service under platforms!
7011

7112
Yowsup is a python library that enables you build application which use WhatsApp service. Yowsup has been used to create an unofficial WhatsApp client Nokia N9 through the Wazapp project which was in use by 200K + users as well as another fully featured unofficial client for Blackberry 10
7213

73-
## What's new in Yowsup 2
74-
75-
Everything! The old library code was so messed up that I was disgusted just by looking at it. I rewrote the library from ground up with a much more robust, extensible architecture and a much simpler and easier to read code.
76-
77-
__For devs, the update is breaking for any old code. While old code will stay in "legacy" branch for a while, it's advised that you upgrade your code. Unless your code is a full fledged WhatsApp application, migrating won't be a hard task.__
14+
## Quickstart
7815

79-
Here is what you need to know about Yowsup 2.0 to get started: (Or quickly [jump to installation](#installation)):
80-
81-
* **[The new architecture](https://github.com/tgalal/yowsup/wiki/Architecture)**
16+
* **[yowsup's architecture](https://github.com/tgalal/yowsup/wiki/Architecture)**
8217
* **[Create a sample app](https://github.com/tgalal/yowsup/wiki/Sample-Application)**
83-
* **[yowsup-cli 2.0](https://github.com/tgalal/yowsup/wiki/yowsup-cli-2.0)**
18+
* **[yowsup-cli](https://github.com/tgalal/yowsup/wiki/yowsup-cli-2.0)**
8419
* **[Yowsup development, debugging, maintainance and sanity](https://github.com/tgalal/yowsup/wiki/Yowsup-development,-debugging,-maintainance-and-sanity)**
8520

86-
87-
## Installation
88-
(Updated Jan 12, 2015)
21+
## Installation
8922

9023
- Requires python2.6+, or python3.0 +
91-
- Required python packages: python-dateutil,
24+
- Required python packages: python-dateutil,
9225
- Required python packages for end-to-end encryption: protobuf, pycrypto, python-axolotl-curve25519
9326
- Required python packages for yowsup-cli: argparse, readline (or pyreadline for windows), pillow (for sending images)
9427

@@ -110,14 +43,14 @@ Because of a bug with python-dateutil package you might get permission error for
11043
```
11144
python setup.py install
11245
```
113-
Administrators privileges might be required, if so then run with 'sudo'
46+
Administrators privileges might be required, if so then run with 'sudo'
11447

11548
### Windows
11649

11750
- Install [mingw](http://www.mingw.org/) compiler
11851
- Add mingw to your PATH
11952
- In PYTHONPATH\Lib\distutils create a file called distutils.cfg and add these lines:
120-
53+
12154
```
12255
[build]
12356
compiler=mingw32
@@ -126,7 +59,7 @@ compiler=mingw32
12659
- Install [zlib](http://www.zlib.net/)
12760
- ```python setup.py install```
12861

129-
If pycrypto fails to install with some "chmod error". You can install it separately using something like
62+
If pycrypto fails to install with some "chmod error". You can install it separately using something like
13063
```easy_install http://www.voidspace.org.uk/downloads/pycrypto26/pycrypto-2.6.win32-py2.7.exe```
13164

13265
or for python3 from:
@@ -139,8 +72,8 @@ and then rerun the install command again
13972

14073
Special thanks to:
14174

142-
- [CODeRUS](https://github.com/CODeRUS)
143-
- [mgp25](https://github.com/mgp25)
75+
- [CODeRUS](https://github.com/CODeRUS)
76+
- [mgp25](https://github.com/mgp25)
14477
- [SikiFn](https://github.com/SikiFn)
14578
- [0xTryCatch](https://github.com/0xTryCatch)
14679
- [shirioko](https://github.com/shirioko)

yowsup/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
__version__ = "2.4"
1+
__version__ = "2.4.48"
22
__author__ = "Tarek Galal"

yowsup/common/tools.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,13 @@ class TimeTools:
8585
def parseIso(iso):
8686
d=datetime.datetime(*map(int, re.split('[^\d]', iso)[:-1]))
8787
return d
88-
89-
@staticmethod
88+
89+
@staticmethod
9090
def utcToLocal(dt):
9191
utc = tz.gettz('UTC')
9292
local = tz.tzlocal()
9393
dtUtc = dt.replace(tzinfo=utc)
94-
94+
9595
return dtUtc.astimezone(local)
9696

9797
@staticmethod
@@ -128,6 +128,9 @@ def scaleImage(infile, outfile, imageFormat, width, height):
128128
if ModuleTools.INSTALLED_PIL():
129129
from PIL import Image
130130
im = Image.open(infile)
131+
#Convert P mode images
132+
if im.mode != "RGB":
133+
im = im.convert("RGB")
131134
im.thumbnail((width, height))
132135
im.save(outfile, imageFormat)
133136
return True
@@ -148,10 +151,11 @@ def getImageDimensions(imageFile):
148151
@staticmethod
149152
def generatePreviewFromImage(image):
150153
fd, path = tempfile.mkstemp()
151-
fileObj = os.fdopen(fd, "rb+")
154+
152155
preview = None
153-
if ImageTools.scaleImage(image, fileObj, "JPEG", YowConstants.PREVIEW_WIDTH, YowConstants.PREVIEW_HEIGHT):
156+
if ImageTools.scaleImage(image, path, "JPEG", YowConstants.PREVIEW_WIDTH, YowConstants.PREVIEW_HEIGHT):
157+
fileObj = os.fdopen(fd, "rb+")
154158
fileObj.seek(0)
155159
preview = fileObj.read()
156-
fileObj.close()
157-
return preview
160+
fileObj.close()
161+
return preview

yowsup/demos/cli/layer.py

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def __init__(self):
4747
self.connected = False
4848
self.username = None
4949
self.sendReceipts = True
50+
self.sendRead = True
5051
self.disconnectAction = self.__class__.DISCONNECT_ACTION_PROMPT
5152
self.credentials = None
5253

@@ -223,6 +224,35 @@ def onError(errorIqEntity, originalIqEntity):
223224
else:
224225
logger.error("Python PIL library is not installed, can't set profile picture")
225226

227+
@clicmd("Get profile privacy")
228+
def profile_getPrivacy(self):
229+
if self.assertConnected():
230+
def onSuccess(resultIqEntity, originalIqEntity):
231+
self.output("Profile privacy is: %s" %(resultIqEntity))
232+
233+
def onError(errorIqEntity, originalIqEntity):
234+
logger.error("Error getting profile privacy")
235+
236+
iq = GetPrivacyIqProtocolEntity()
237+
self._sendIq(iq, onSuccess, onError)
238+
239+
@clicmd("Profile privacy. value=all|contacts|none names=profile|status|last. Names are comma separated, defaults to all.")
240+
def profile_setPrivacy(self, value="all", names=None):
241+
if self.assertConnected():
242+
def onSuccess(resultIqEntity, originalIqEntity):
243+
self.output("Profile privacy set to: %s" %(resultIqEntity))
244+
245+
def onError(errorIqEntity, originalIqEntity):
246+
logger.error("Error setting profile privacy")
247+
try:
248+
names = [name for name in names.split(',')] if names else None
249+
iq = SetPrivacyIqProtocolEntity(value, names)
250+
self._sendIq(iq, onSuccess, onError)
251+
except Exception as inst:
252+
self.output(inst.message)
253+
return self.print_usage()
254+
255+
226256
########### groups
227257

228258
@clicmd("List all groups you belong to", 5)
@@ -395,6 +425,12 @@ def state_typing(self, jid):
395425
entity = OutgoingChatstateProtocolEntity(ChatstateProtocolEntity.STATE_TYPING, self.aliasToJid(jid))
396426
self.toLower(entity)
397427

428+
@clicmd("Request contacts statuses")
429+
def statuses_get(self, contacts):
430+
if self.assertConnected():
431+
entity = GetStatusesIqProtocolEntity([self.aliasToJid(c) for c in contacts.split(',')])
432+
self.toLower(entity)
433+
398434
@clicmd("Send paused state")
399435
def state_paused(self, jid):
400436
if self.assertConnected():
@@ -492,8 +528,8 @@ def onMessage(self, message):
492528

493529
self.output(output, tag = None, prompt = not self.sendReceipts)
494530
if self.sendReceipts:
495-
self.toLower(message.ack())
496-
self.output("Sent delivered receipt", tag = "Message %s" % message.getId())
531+
self.toLower(message.ack(self.sendRead))
532+
self.output("Sent delivered receipt"+" and Read" if self.sendRead else "", tag = "Message %s" % message.getId())
497533

498534

499535
def getTextMessageBody(self, message):
@@ -504,7 +540,7 @@ def getMediaMessageBody(self, message):
504540
return self.getDownloadableMediaMessageBody(message)
505541
else:
506542
return "[Media Type: %s]" % message.getMediaType()
507-
543+
508544

509545
def getDownloadableMediaMessageBody(self, message):
510546
return "[Media Type:{media_type}, Size:{media_size}, URL:{media_url}]".format(
@@ -570,4 +606,3 @@ def __str__(self):
570606
@clicmd("Print this message")
571607
def help(self):
572608
self.print_usage()
573-

yowsup/demos/contacts/stack.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
from yowsup.layers.protocol_acks import YowAckProtocolLayer
1010
from yowsup.layers.logger import YowLoggerLayer
1111
from yowsup.layers.protocol_contacts import YowContactsIqProtocolLayer
12-
from yowsup.common import YowConstants
13-
from yowsup import env
12+
from yowsup.layers import YowParallelLayer
1413

1514
class YowsupSyncStack(object):
1615
def __init__(self, credentials, contacts, encryptionEnabled = False):
@@ -24,7 +23,7 @@ def __init__(self, credentials, contacts, encryptionEnabled = False):
2423
from yowsup.layers.axolotl import YowAxolotlLayer
2524
layers = (
2625
SyncLayer,
27-
(YowAuthenticationProtocolLayer, YowContactsIqProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
26+
YowParallelLayer([YowAuthenticationProtocolLayer, YowContactsIqProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer]),
2827
YowAxolotlLayer,
2928
YowLoggerLayer,
3029
YowCoderLayer,
@@ -35,7 +34,7 @@ def __init__(self, credentials, contacts, encryptionEnabled = False):
3534
else:
3635
layers = (
3736
SyncLayer,
38-
(YowAuthenticationProtocolLayer, YowContactsIqProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
37+
YowParallelLayer([YowAuthenticationProtocolLayer, YowContactsIqProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer]),
3938
YowLoggerLayer,
4039
YowCoderLayer,
4140
YowCryptLayer,

yowsup/demos/echoclient/stack.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,15 @@
1212
from yowsup.layers.logger import YowLoggerLayer
1313
from yowsup.layers.protocol_iq import YowIqProtocolLayer
1414
from yowsup.layers.protocol_calls import YowCallsProtocolLayer
15-
from yowsup.common import YowConstants
16-
from yowsup import env
15+
from yowsup.layers import YowParallelLayer
1716

1817
class YowsupEchoStack(object):
1918
def __init__(self, credentials, encryptionEnabled = False):
2019
if encryptionEnabled:
2120
from yowsup.layers.axolotl import YowAxolotlLayer
2221
layers = (
2322
EchoLayer,
24-
(YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer),
23+
YowParallelLayer([YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer]),
2524
YowAxolotlLayer,
2625
YowLoggerLayer,
2726
YowCoderLayer,
@@ -32,7 +31,7 @@ def __init__(self, credentials, encryptionEnabled = False):
3231
else:
3332
layers = (
3433
EchoLayer,
35-
(YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer),
34+
YowParallelLayer([YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer, YowMediaProtocolLayer, YowIqProtocolLayer, YowCallsProtocolLayer]),
3635
YowLoggerLayer,
3736
YowCoderLayer,
3837
YowCryptLayer,

yowsup/demos/sendclient/stack.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
from yowsup.layers.protocol_receipts import YowReceiptProtocolLayer
1010
from yowsup.layers.protocol_acks import YowAckProtocolLayer
1111
from yowsup.layers.logger import YowLoggerLayer
12-
from yowsup.common import YowConstants
13-
from yowsup import env
12+
from yowsup.layers import YowParallelLayer
13+
1414

1515
class YowsupSendStack(object):
1616
def __init__(self, credentials, messages, encryptionEnabled = False):
@@ -24,7 +24,7 @@ def __init__(self, credentials, messages, encryptionEnabled = False):
2424
from yowsup.layers.axolotl import YowAxolotlLayer
2525
layers = (
2626
SendLayer,
27-
(YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
27+
YowParallelLayer([YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer]),
2828
YowAxolotlLayer,
2929
YowLoggerLayer,
3030
YowCoderLayer,
@@ -35,7 +35,7 @@ def __init__(self, credentials, messages, encryptionEnabled = False):
3535
else:
3636
layers = (
3737
SendLayer,
38-
(YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer),
38+
YowParallelLayer([YowAuthenticationProtocolLayer, YowMessagesProtocolLayer, YowReceiptProtocolLayer, YowAckProtocolLayer]),
3939
YowLoggerLayer,
4040
YowCoderLayer,
4141
YowCryptLayer,

yowsup/env/env_android.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
11
from .env import YowsupEnv
22
import base64
33
import hashlib
4+
5+
46
class AndroidYowsupEnv(YowsupEnv):
57
_SIGNATURE = "MIIDMjCCAvCgAwIBAgIETCU2pDALBgcqhkjOOAQDBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFDASBgNV" \
6-
"BAcTC1NhbnRhIENsYXJhMRYwFAYDVQQKEw1XaGF0c0FwcCBJbmMuMRQwEgYDVQQLEwtFbmdpbmVlcmluZzEUMBIGA1UEAxMLQnJ" \
7-
"pYW4gQWN0b24wHhcNMTAwNjI1MjMwNzE2WhcNNDQwMjE1MjMwNzE2WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5" \
8-
"pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExFjAUBgNVBAoTDVdoYXRzQXBwIEluYy4xFDASBgNVBAsTC0VuZ2luZWVyaW5nMRQwEg" \
9-
"YDVQQDEwtCcmlhbiBBY3RvbjCCAbgwggEsBgcqhkjOOAQBMIIBHwKBgQD9f1OBHXUSKVLfSpwu7OTn9hG3UjzvRADDHj+AtlEm" \
10-
"aUVdQCJR+1k9jVj6v8X1ujD2y5tVbNeBO4AdNG/yZmC3a5lQpaSfn+gEexAiwk+7qdf+t8Yb+DtX58aophUPBPuD9tPFHsMCN" \
11-
"VQTWhaRMvZ1864rYdcq7/IiAxmd0UgBxwIVAJdgUI8VIwvMspK5gqLrhAvwWBz1AoGBAPfhoIXWmz3ey7yrXDa4V7l5lK+7+jr" \
12-
"qgvlXTAs9B4JnUVlXjrrUWU/mcQcQgYC0SRZxI+hMKBYTt88JMozIpuE8FnqLVHyNKOCjrh4rs6Z1kW6jfwv6ITVi8ftiegEkO" \
13-
"8yk8b6oUZCJqIPf4VrlnwaSi2ZegHtVJWQBTDv+z0kqA4GFAAKBgQDRGYtLgWh7zyRtQainJfCpiaUbzjJuhMgo4fVWZIvXHaS" \
14-
"HBU1t5w//S0lDK2hiqkj8KpMWGywVov9eZxZy37V26dEqr/c2m5qZ0E+ynSu7sqUD7kGx/zeIcGT0H+KAVgkGNQCo5Uc0koLRW" \
15-
"YHNtYoIvt5R3X6YZylbPftF/8ayWTALBgcqhkjOOAQDBQADLwAwLAIUAKYCp0d6z4QQdyN74JDfQ2WCyi8CFDUM4CaNB+ceVXd" \
16-
"KtOrNTQcc0e+t"
17-
18-
_MD5_CLASSES = "MYFrqqEFgD/DG5Z9E+zaSA=="
8+
"BAcTC1NhbnRhIENsYXJhMRYwFAYDVQQKEw1XaGF0c0FwcCBJbmMuMRQwEgYDVQQLEwtFbmdpbmVlcmluZzEUMBIGA1UEAxMLQnJ" \
9+
"pYW4gQWN0b24wHhcNMTAwNjI1MjMwNzE2WhcNNDQwMjE1MjMwNzE2WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5" \
10+
"pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExFjAUBgNVBAoTDVdoYXRzQXBwIEluYy4xFDASBgNVBAsTC0VuZ2luZWVyaW5nMRQwEg" \
11+
"YDVQQDEwtCcmlhbiBBY3RvbjCCAbgwggEsBgcqhkjOOAQBMIIBHwKBgQD9f1OBHXUSKVLfSpwu7OTn9hG3UjzvRADDHj+AtlEm" \
12+
"aUVdQCJR+1k9jVj6v8X1ujD2y5tVbNeBO4AdNG/yZmC3a5lQpaSfn+gEexAiwk+7qdf+t8Yb+DtX58aophUPBPuD9tPFHsMCN" \
13+
"VQTWhaRMvZ1864rYdcq7/IiAxmd0UgBxwIVAJdgUI8VIwvMspK5gqLrhAvwWBz1AoGBAPfhoIXWmz3ey7yrXDa4V7l5lK+7+jr" \
14+
"qgvlXTAs9B4JnUVlXjrrUWU/mcQcQgYC0SRZxI+hMKBYTt88JMozIpuE8FnqLVHyNKOCjrh4rs6Z1kW6jfwv6ITVi8ftiegEkO" \
15+
"8yk8b6oUZCJqIPf4VrlnwaSi2ZegHtVJWQBTDv+z0kqA4GFAAKBgQDRGYtLgWh7zyRtQainJfCpiaUbzjJuhMgo4fVWZIvXHaS" \
16+
"HBU1t5w//S0lDK2hiqkj8KpMWGywVov9eZxZy37V26dEqr/c2m5qZ0E+ynSu7sqUD7kGx/zeIcGT0H+KAVgkGNQCo5Uc0koLRW" \
17+
"YHNtYoIvt5R3X6YZylbPftF/8ayWTALBgcqhkjOOAQDBQADLwAwLAIUAKYCp0d6z4QQdyN74JDfQ2WCyi8CFDUM4CaNB+ceVXd" \
18+
"KtOrNTQcc0e+t"
19+
20+
_MD5_CLASSES = "vIDGGxIcIxeBP0GoG8yL8g=="
1921
_KEY = "/UIGKU1FVQa+ATM2A0za7G2KI9S/CwPYjgAbc67v7ep42eO/WeTLx1lb1cHwxpsEgF4+PmYpLd2YpGUdX/A2JQitsHzDwgcdBpUf7psX1BU="
2022

21-
_VERSION = "2.12.287"
22-
_OS_NAME= "Android"
23+
_VERSION = "2.12.357"
24+
_OS_NAME = "Android"
2325
_OS_VERSION = "4.3"
2426
_DEVICE_NAME = "GalaxyS3"
2527
_AXOLOTL = True

0 commit comments

Comments
 (0)