Compare commits
1389 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fcbcffe9ba | ||
|
|
501b351f80 | ||
|
|
b72b1cda94 | ||
|
|
074e46b2d9 | ||
|
|
91612cb6f2 | ||
|
|
f193723182 | ||
|
|
a0e23612d4 | ||
|
|
8b12bc9acc | ||
|
|
e2439278f4 | ||
|
|
04f364942e | ||
|
|
0cc5618ba9 | ||
|
|
8208bbf3c0 | ||
|
|
1c8077a7fe | ||
|
|
7c2191f9a0 | ||
|
|
83b1e7ba6c | ||
|
|
ec240a94e6 | ||
|
|
666be5f358 | ||
|
|
7f76bcc976 | ||
|
|
2dbeebac77 | ||
|
|
fa64c5de62 | ||
|
|
0f6823d37e | ||
|
|
172de96ce4 | ||
|
|
f92d768be5 | ||
|
|
52311eb881 | ||
|
|
414a885b54 | ||
|
|
1eccc07673 | ||
|
|
59d3e666fe | ||
|
|
76c28cfa7a | ||
|
|
58273997b9 | ||
|
|
5672701a60 | ||
|
|
711740d156 | ||
|
|
b50a3fa2b8 | ||
|
|
c09c7b6649 | ||
|
|
7e40204eb2 | ||
|
|
d413b80b15 | ||
|
|
73410f64b5 | ||
|
|
cd55feb2b9 | ||
|
|
a9ea672888 | ||
|
|
5455bdffb2 | ||
|
|
0367bf0de4 | ||
|
|
e9ae439b70 | ||
|
|
99d229bb45 | ||
|
|
3d7331159f | ||
|
|
662fe826cb | ||
|
|
ec1a0547d6 | ||
|
|
d507756821 | ||
|
|
ca701df1e4 | ||
|
|
56f85e7f85 | ||
|
|
4509077338 | ||
|
|
4dd5a92817 | ||
|
|
782bd6003b | ||
|
|
15df691017 | ||
|
|
0d6f8a003d | ||
|
|
50cec22aa1 | ||
|
|
b78c05e70b | ||
|
|
e96bf2bdc7 | ||
|
|
1c8c6d5f85 | ||
|
|
1525d0833c | ||
|
|
3fd5e58bd5 | ||
|
|
51d6144591 | ||
|
|
165fae5734 | ||
|
|
dc18f73594 | ||
|
|
12ce92bb83 | ||
|
|
b0b08a37db | ||
|
|
1b75d00de5 | ||
|
|
6ede47d4f7 | ||
|
|
dd3cef5ec2 | ||
|
|
757ccd0c36 | ||
|
|
bfc9ad7761 | ||
|
|
e340f85258 | ||
|
|
89d1232bdc | ||
|
|
cf04b0521e | ||
|
|
a93fb1a0e5 | ||
|
|
50cf9c448a | ||
|
|
da6a00c4dc | ||
|
|
58a5e1f33c | ||
|
|
31e78f5fae | ||
|
|
f4f0a97fc6 | ||
|
|
1c94137f7a | ||
|
|
2e8250f25e | ||
|
|
12062bdfe1 | ||
|
|
bc9a52c510 | ||
|
|
59a2bf8ae7 | ||
|
|
b17cba621e | ||
|
|
5ffee53faa | ||
|
|
869630b7f4 | ||
|
|
291dafa5c8 | ||
|
|
cb670d6783 | ||
|
|
4d889a45e2 | ||
|
|
66d1d88686 | ||
|
|
e4ac1b8dde | ||
|
|
31a549449b | ||
|
|
9bf198bb81 | ||
|
|
03e347bfd9 | ||
|
|
c2796285d5 | ||
|
|
3acfba7bd0 | ||
|
|
9377fb6ce0 | ||
|
|
25c7459464 | ||
|
|
2dceef50b7 | ||
|
|
438a78ed30 | ||
|
|
8e7c7a9c54 | ||
|
|
ad4657df1f | ||
|
|
bc33f8ec02 | ||
|
|
d00671e7a5 | ||
|
|
2b79e131a7 | ||
|
|
c3164a8e84 | ||
|
|
f07ce7b1f1 | ||
|
|
a353ebd834 | ||
|
|
a697fcea04 | ||
|
|
9716849bb9 | ||
|
|
9c5fe77e96 | ||
|
|
0a0203a019 | ||
|
|
8aab61c2e3 | ||
|
|
9d3ff55457 | ||
|
|
19c7fd21a8 | ||
|
|
a5500655a7 | ||
|
|
4a516084a6 | ||
|
|
f583c14e0e | ||
|
|
ddf6126abf | ||
|
|
c389a9d3ce | ||
|
|
cd56f03e07 | ||
|
|
fe1cc3d6d1 | ||
|
|
5f5db5ded7 | ||
|
|
e5a287b4e5 | ||
|
|
13d785894a | ||
|
|
4fd41080ac | ||
|
|
fad697ba2a | ||
|
|
51f27631ef | ||
|
|
04153a3869 | ||
|
|
b0b1cdef35 | ||
|
|
6f6632c08a | ||
|
|
407c5d5ed2 | ||
|
|
b7f9525680 | ||
|
|
68e68508a7 | ||
|
|
e6f693a677 | ||
|
|
6b7174bb35 | ||
|
|
92ea7549d4 | ||
|
|
0a4d1569fb | ||
|
|
4c83e2ce10 | ||
|
|
7c5df81840 | ||
|
|
6afee68831 | ||
|
|
bae549b1cc | ||
|
|
ce9a67d095 | ||
|
|
3356f7c190 | ||
|
|
2ce9eeabed | ||
|
|
5b8e75c068 | ||
|
|
c97fa0d3d1 | ||
|
|
b0bd6ad729 | ||
|
|
d85ddbcd10 | ||
|
|
51807226a7 | ||
|
|
07c8db824e | ||
|
|
75782affd1 | ||
|
|
49117a4138 | ||
|
|
9d52e6af6a | ||
|
|
706835584e | ||
|
|
f7261cc9e7 | ||
|
|
3aae86d20c | ||
|
|
ad0f2830c8 | ||
|
|
056f2717ed | ||
|
|
f67eb5f9f3 | ||
|
|
c69efbffd2 | ||
|
|
3dfc72dad0 | ||
|
|
372cdc4b9f | ||
|
|
01d66087aa | ||
|
|
e0e932df02 | ||
|
|
3ca653627d | ||
|
|
f4acaad407 | ||
|
|
6787a96d71 | ||
|
|
e7f5022a75 | ||
|
|
93e7a626bf | ||
|
|
448335e9bc | ||
|
|
7ad68296dd | ||
|
|
3d28db3453 | ||
|
|
56c0ea0a4f | ||
|
|
b964c74ce8 | ||
|
|
a3445fb2fd | ||
|
|
0d11b3dd26 | ||
|
|
deb96646a3 | ||
|
|
a421630789 | ||
|
|
4f0422ee94 | ||
|
|
0f548a431b | ||
|
|
742b54f32d | ||
|
|
1c9715f700 | ||
|
|
52b1e17c36 | ||
|
|
9273f5cc67 | ||
|
|
a8366387ab | ||
|
|
5e02715a2c | ||
|
|
3506f2db12 | ||
|
|
66c9fd44df | ||
|
|
944f5aad0d | ||
|
|
a41e82bb7d | ||
|
|
94964474b2 | ||
|
|
2f46c6ca1f | ||
|
|
33e0b4fc6d | ||
|
|
bb5e7db57e | ||
|
|
e1d0f2f4e9 | ||
|
|
20af8045e8 | ||
|
|
3127fda7fe | ||
|
|
12b27cc56b | ||
|
|
1683bb4636 | ||
|
|
9d13b9437c | ||
|
|
97c3e8fa3f | ||
|
|
76c41a8295 | ||
|
|
edbd20899e | ||
|
|
8e25689c24 | ||
|
|
057c348d08 | ||
|
|
6866a74d95 | ||
|
|
cbba8c0d76 | ||
|
|
c7c411b3f3 | ||
|
|
c7782c51db | ||
|
|
7ae0f38c45 | ||
|
|
2c1a5aef1c | ||
|
|
defb173ffe | ||
|
|
0095e00bc7 | ||
|
|
ed5faa4ba9 | ||
|
|
1e02d70052 | ||
|
|
b110c8a2cb | ||
|
|
bdcfabf1ee | ||
|
|
cd28cd172f | ||
|
|
3904c76261 | ||
|
|
cb6e048070 | ||
|
|
9b8719e2d5 | ||
|
|
79e925051a | ||
|
|
a37d2f568c | ||
|
|
e92b51ed98 | ||
|
|
cb9f225f59 | ||
|
|
f4a7f354c5 | ||
|
|
8f96cff104 | ||
|
|
1d3f1cc79e | ||
|
|
25daf01307 | ||
|
|
741066a10e | ||
|
|
44bb2c7c72 | ||
|
|
65c05e0388 | ||
|
|
8cd50d1e82 | ||
|
|
2395b79bfc | ||
|
|
76ac95756f | ||
|
|
d9659219de | ||
|
|
bdc464193d | ||
|
|
b43beaab75 | ||
|
|
4ee607878c | ||
|
|
a0489a9f48 | ||
|
|
8aab9b0fc1 | ||
|
|
4bd3841788 | ||
|
|
b27d829013 | ||
|
|
1669731329 | ||
|
|
4112f23f33 | ||
|
|
eddb97013a | ||
|
|
a075bf7505 | ||
|
|
acca4a72d3 | ||
|
|
1b1470aae2 | ||
|
|
d5b7ff58e2 | ||
|
|
d2eebbc55a | ||
|
|
cf891edce9 | ||
|
|
f541e33356 | ||
|
|
aa30f3e410 | ||
|
|
83e31cac07 | ||
|
|
98d223f094 | ||
|
|
917389131c | ||
|
|
e1f09e0437 | ||
|
|
0f820e6beb | ||
|
|
e2d94adfdb | ||
|
|
c594691b93 | ||
|
|
9395f7faa0 | ||
|
|
9c1f7f1657 | ||
|
|
8bf160532e | ||
|
|
1aa2d546d2 | ||
|
|
143fb1fe21 | ||
|
|
d9b42c4369 | ||
|
|
0075940050 | ||
|
|
7d10560575 | ||
|
|
0adce89eec | ||
|
|
be53bc6138 | ||
|
|
e25d31ceb6 | ||
|
|
70d94c0130 | ||
|
|
55c1b6d72c | ||
|
|
42211ccca6 | ||
|
|
0efd6d9341 | ||
|
|
6b737a3d48 | ||
|
|
f3e47f7b60 | ||
|
|
6b8336db06 | ||
|
|
739ee89fb1 | ||
|
|
fb8440f886 | ||
|
|
d92cbfe305 | ||
|
|
5cfd7477ab | ||
|
|
0992d6545e | ||
|
|
7d644ae9c6 | ||
|
|
9a93a8b28d | ||
|
|
8dc6f2b15b | ||
|
|
f148ff8bfa | ||
|
|
2408bd4d65 | ||
|
|
94c61f8af9 | ||
|
|
85aa5c5b97 | ||
|
|
c88a0ba324 | ||
|
|
11463d410d | ||
|
|
53d590947e | ||
|
|
ea0945d406 | ||
|
|
a9651e2e9c | ||
|
|
9afbdaa2be | ||
|
|
bdc8618889 | ||
|
|
a2de60a75c | ||
|
|
b2e93ec502 | ||
|
|
4fb8d1fa49 | ||
|
|
67cab3ce86 | ||
|
|
3be55e36d9 | ||
|
|
cee0edff7c | ||
|
|
15a389c171 | ||
|
|
d46d3b72c8 | ||
|
|
2e16c6cf41 | ||
|
|
03e2075ba4 | ||
|
|
d9f19fe36c | ||
|
|
b575b4e6ae | ||
|
|
342fd37799 | ||
|
|
e2b81c9637 | ||
|
|
aa9d8e4d14 | ||
|
|
4c815db076 | ||
|
|
b677370597 | ||
|
|
f53d64ab7a | ||
|
|
4461ebf662 | ||
|
|
21a0fe3a48 | ||
|
|
dadc8d0183 | ||
|
|
7e51d61c79 | ||
|
|
47aa7979b2 | ||
|
|
da05cf9192 | ||
|
|
970448d43d | ||
|
|
333a0f38e3 | ||
|
|
86df150374 | ||
|
|
235a8472d9 | ||
|
|
183f8742a7 | ||
|
|
e270e8d429 | ||
|
|
7286fd9b06 | ||
|
|
9f2328457e | ||
|
|
f2a9b02b5e | ||
|
|
41c9bed155 | ||
|
|
508a666e76 | ||
|
|
3d6cbdd775 | ||
|
|
4906bdbdcc | ||
|
|
f0b615eda6 | ||
|
|
0a25c3a33d | ||
|
|
bbb8ac113b | ||
|
|
360c2b2a50 | ||
|
|
cfef855d99 | ||
|
|
80503067e9 | ||
|
|
9779604932 | ||
|
|
c6d6e0e97e | ||
|
|
edac0e85c7 | ||
|
|
fd3d02d818 | ||
|
|
25f9bef74c | ||
|
|
4dae4444bc | ||
|
|
49e78d16ba | ||
|
|
cb23e3a930 | ||
|
|
770026d4ee | ||
|
|
7b928476a2 | ||
|
|
a125fcb8fa | ||
|
|
bd819d7d10 | ||
|
|
e5fcc465c9 | ||
|
|
94a29e375f | ||
|
|
ec5ac44cd3 | ||
|
|
ac2626437e | ||
|
|
99b8cfc82b | ||
|
|
6eef1a6ee4 | ||
|
|
4ad989cc38 | ||
|
|
5804213152 | ||
|
|
d599c058c6 | ||
|
|
b7d4294314 | ||
|
|
d280604f1f | ||
|
|
7817e38e5f | ||
|
|
f310dd6047 | ||
|
|
30633c9672 | ||
|
|
16c44812c8 | ||
|
|
1a57ff16cd | ||
|
|
c3451d19db | ||
|
|
bb5dcb7131 | ||
|
|
884d8b7f72 | ||
|
|
57cdbaedd6 | ||
|
|
3861084ea2 | ||
|
|
bb1ab2e929 | ||
|
|
5a6e75a7e1 | ||
|
|
d2be49af42 | ||
|
|
477589b092 | ||
|
|
a6488b3652 | ||
|
|
cde92256a6 | ||
|
|
47f1f0b9a0 | ||
|
|
a3019be7b6 | ||
|
|
373a0f9527 | ||
|
|
a9bd84c69c | ||
|
|
0c6bfdbd0d | ||
|
|
cdf3a849e9 | ||
|
|
4e32fb21fe | ||
|
|
ae40715526 | ||
|
|
7488525641 | ||
|
|
fd00298930 | ||
|
|
f3f2f29b23 | ||
|
|
d35133b3bc | ||
|
|
541718fd11 | ||
|
|
777aeea138 | ||
|
|
c3ab6e6c29 | ||
|
|
c7e373ed55 | ||
|
|
71f8e9eb31 | ||
|
|
899f3af5e4 | ||
|
|
4ff8de0ca8 | ||
|
|
d6d3d1fee4 | ||
|
|
9a1225fe21 | ||
|
|
5d6439030d | ||
|
|
f871d83e68 | ||
|
|
47471f09f4 | ||
|
|
ee07a59950 | ||
|
|
e8555a84ac | ||
|
|
73bf75f65f | ||
|
|
01bc2ebde4 | ||
|
|
b16a27c249 | ||
|
|
791cc4b4f8 | ||
|
|
71276161fc | ||
|
|
a4c17e5325 | ||
|
|
6308e6491a | ||
|
|
f7474362ff | ||
|
|
1b44bdcd3c | ||
|
|
c8fe671f9c | ||
|
|
2197d77ffc | ||
|
|
d9ff5b00b7 | ||
|
|
5d341e175d | ||
|
|
f6cbae602d | ||
|
|
e3a7781392 | ||
|
|
cf01959e16 | ||
|
|
10abd09239 | ||
|
|
3136cadf59 | ||
|
|
09ff8d5865 | ||
|
|
43e1d452c7 | ||
|
|
ed8215de81 | ||
|
|
69b102bfe3 | ||
|
|
8b342ee18b | ||
|
|
e8ae6d67b1 | ||
|
|
9148b7da5f | ||
|
|
ce812ed8ba | ||
|
|
030df09f67 | ||
|
|
794e2cb872 | ||
|
|
0d493a3af9 | ||
|
|
3787551878 | ||
|
|
7c0dacc627 | ||
|
|
8af9b7fd15 | ||
|
|
3e008f6752 | ||
|
|
8fdcff9f20 | ||
|
|
7947222ac5 | ||
|
|
f4b5daabdb | ||
|
|
b55a7ff5c0 | ||
|
|
ca3337232b | ||
|
|
7d98b85ae7 | ||
|
|
c5bf84cf9c | ||
|
|
fd0acf4e00 | ||
|
|
95a6c41b6e | ||
|
|
06325470ce | ||
|
|
cb28e7c1f9 | ||
|
|
92aeafc261 | ||
|
|
0abe56171a | ||
|
|
9064c02fa8 | ||
|
|
f5966af781 | ||
|
|
2d104d3783 | ||
|
|
5d1cfb50a9 | ||
|
|
a3244de587 | ||
|
|
0945b19364 | ||
|
|
06b1045e09 | ||
|
|
0396494d57 | ||
|
|
971bcb8213 | ||
|
|
4bf3632b40 | ||
|
|
469f41b955 | ||
|
|
80a96aa83c | ||
|
|
0e5d71e1a5 | ||
|
|
9d3b764fec | ||
|
|
16f277761e | ||
|
|
9170020141 | ||
|
|
1ef5e5eb52 | ||
|
|
11dbb82bf1 | ||
|
|
2bcbbb0601 | ||
|
|
ab00ce7455 | ||
|
|
b54a271a75 | ||
|
|
23544fae8a | ||
|
|
0a72f6b32e | ||
|
|
b8d938a020 | ||
|
|
2c7fcbed60 | ||
|
|
69d0242574 | ||
|
|
8e9e3847b6 | ||
|
|
66bc5e9f5b | ||
|
|
8d44a145f0 | ||
|
|
8e1970c398 | ||
|
|
38ec5647dd | ||
|
|
ff2cb6935d | ||
|
|
c4fd050b09 | ||
|
|
f85ff090f5 | ||
|
|
21258f244c | ||
|
|
338c0d82e1 | ||
|
|
6708193938 | ||
|
|
e3da0ac908 | ||
|
|
383a266400 | ||
|
|
dbc59bc682 | ||
|
|
4365d7c029 | ||
|
|
c64966c0fb | ||
|
|
6422178baf | ||
|
|
7d1c5a0d40 | ||
|
|
2f9bf27ed7 | ||
|
|
954d795bb5 | ||
|
|
d36d000dc5 | ||
|
|
e6dd5db860 | ||
|
|
18897ffccc | ||
|
|
65b482c7b0 | ||
|
|
da029ebc24 | ||
|
|
549e45e2d6 | ||
|
|
5ed1c9c72b | ||
|
|
314dd9181c | ||
|
|
68b48ebe00 | ||
|
|
8b9e0b7ab8 | ||
|
|
14d73d82c3 | ||
|
|
2b4d41de03 | ||
|
|
4cb4a76e33 | ||
|
|
d00441e20d | ||
|
|
8fe96fc1b7 | ||
|
|
33a79dde06 | ||
|
|
442a8b5c7d | ||
|
|
48d6d1c21d | ||
|
|
666cdb39a4 | ||
|
|
848a25664b | ||
|
|
852634b294 | ||
|
|
0619a4d3cd | ||
|
|
cbbe25c852 | ||
|
|
3ede281e5e | ||
|
|
751830d38f | ||
|
|
bd2fc82360 | ||
|
|
e1b24ab878 | ||
|
|
224ef9785e | ||
|
|
8f256fa285 | ||
|
|
85ea7e1bf4 | ||
|
|
24c99c322c | ||
|
|
677f80b8ef | ||
|
|
3432db37d9 | ||
|
|
32f5bd5336 | ||
|
|
0a569676f7 | ||
|
|
893f106189 | ||
|
|
530b93c318 | ||
|
|
df19cdd4fb | ||
|
|
29548f4019 | ||
|
|
54fc3c5690 | ||
|
|
f961c0574a | ||
|
|
1d8276d148 | ||
|
|
8266730551 | ||
|
|
a23abda5fc | ||
|
|
17c28da2ac | ||
|
|
792d4a5939 | ||
|
|
e6347a38a2 | ||
|
|
53e9b2ad1b | ||
|
|
40332f57ad | ||
|
|
1b04e38377 | ||
|
|
4b3d422443 | ||
|
|
a698477e10 | ||
|
|
e4fccbe26e | ||
|
|
4242ae1b70 | ||
|
|
9a671783c9 | ||
|
|
a370f086c0 | ||
|
|
e7ad77398f | ||
|
|
5bf1707d60 | ||
|
|
db10e5fec6 | ||
|
|
63f7faf5bb | ||
|
|
059ff3e2e1 | ||
|
|
d7e4928f22 | ||
|
|
f03a086191 | ||
|
|
8c631ad765 | ||
|
|
716ed251bc | ||
|
|
643da569ec | ||
|
|
975ae735dc | ||
|
|
474920280c | ||
|
|
263b0921c3 | ||
|
|
7292d08272 | ||
|
|
49a539a985 | ||
|
|
31970c4644 | ||
|
|
209d8148ab | ||
|
|
3aa024e553 | ||
|
|
2a23b53988 | ||
|
|
a8a8ec1d40 | ||
|
|
b94c72ea7f | ||
|
|
a307ff350c | ||
|
|
f2b81d88ba | ||
|
|
f1bd2d9193 | ||
|
|
2f64b84838 | ||
|
|
df2e39f251 | ||
|
|
2e4f8be235 | ||
|
|
8704daa5f8 | ||
|
|
e1898621c9 | ||
|
|
3c99d66ccd | ||
|
|
13c1b15dc2 | ||
|
|
cc1bfec08a | ||
|
|
8c36e20681 | ||
|
|
7b589c4300 | ||
|
|
3b8ec792ee | ||
|
|
4168092f5d | ||
|
|
ec922704f4 | ||
|
|
ec63f7014e | ||
|
|
6a88434338 | ||
|
|
dd986dbc4b | ||
|
|
aa3aa70c6c | ||
|
|
e0f6a92c73 | ||
|
|
6c995aa191 | ||
|
|
94b0176515 | ||
|
|
f0b832e287 | ||
|
|
8c8cd41359 | ||
|
|
9aec80beda | ||
|
|
95b57e22f8 | ||
|
|
021942fd43 | ||
|
|
fd43dbdcdb | ||
|
|
ff1a5a5197 | ||
|
|
bd1dc37bab | ||
|
|
30a0981d4c | ||
|
|
0155d21967 | ||
|
|
2642f4f15d | ||
|
|
432e229698 | ||
|
|
5ce4e5a630 | ||
|
|
a7cbe5e2a2 | ||
|
|
ba960a82e2 | ||
|
|
fa22fb7550 | ||
|
|
24d103df8f | ||
|
|
97ff7a192d | ||
|
|
a2f478570a | ||
|
|
bf806bd717 | ||
|
|
f2c5e904e8 | ||
|
|
ca5bd84a67 | ||
|
|
08e2221dc0 | ||
|
|
f5c90df780 | ||
|
|
25020d114a | ||
|
|
bb498fdfc9 | ||
|
|
ea5dc719c3 | ||
|
|
3d651ef29a | ||
|
|
72064d8827 | ||
|
|
156c5c6e09 | ||
|
|
25d7931358 | ||
|
|
238471b847 | ||
|
|
170a4291de | ||
|
|
0d6b2d899e | ||
|
|
ca2457db8d | ||
|
|
8cf574bb32 | ||
|
|
12957d96e0 | ||
|
|
1575665266 | ||
|
|
03efe02e65 | ||
|
|
df021643aa | ||
|
|
3772293f8e | ||
|
|
02b8eabf57 | ||
|
|
77fb2f520f | ||
|
|
efdb57e76b | ||
|
|
f1cec5a2ca | ||
|
|
5cb7b7a981 | ||
|
|
3a5a7cac73 | ||
|
|
b69c109d6b | ||
|
|
694e6064bd | ||
|
|
6da86e482d | ||
|
|
c1106d98dd | ||
|
|
4c7d2d2c66 | ||
|
|
bc4dd7d002 | ||
|
|
ce12e381a5 | ||
|
|
8c58d031bd | ||
|
|
135762b222 | ||
|
|
cba0ff7750 | ||
|
|
31224014cc | ||
|
|
4a261bcf68 | ||
|
|
1b97756b05 | ||
|
|
7fcd9c36bf | ||
|
|
873a0ab249 | ||
|
|
cf223e9ba2 | ||
|
|
c5bb60611a | ||
|
|
9f2f3df2ea | ||
|
|
847142d0f6 | ||
|
|
058585bf81 | ||
|
|
4049b997ee | ||
|
|
39a0567e52 | ||
|
|
999a7431ac | ||
|
|
3315186773 | ||
|
|
f3f80f0c6e | ||
|
|
2e51073a79 | ||
|
|
1512f6e172 | ||
|
|
1abf39685a | ||
|
|
1e2a45d440 | ||
|
|
df27fa47ed | ||
|
|
d8b197dbc4 | ||
|
|
0067d2628d | ||
|
|
524d06d033 | ||
|
|
759f9d8016 | ||
|
|
83ec4e0627 | ||
|
|
2b359d4642 | ||
|
|
d61e5094de | ||
|
|
759ecbc7b8 | ||
|
|
f9c9068ca8 | ||
|
|
8b46dda004 | ||
|
|
ee9b89c4d4 | ||
|
|
0caad7f348 | ||
|
|
6ad2c4bb29 | ||
|
|
bcf95e50aa | ||
|
|
4fa6680f83 | ||
|
|
94452e7784 | ||
|
|
fd570310e0 | ||
|
|
ed592950c0 | ||
|
|
d238e2bbc5 | ||
|
|
ec53c6ab04 | ||
|
|
ccfea3c834 | ||
|
|
54f1c91def | ||
|
|
b80721ef4a | ||
|
|
e9b53cc164 | ||
|
|
f7e5404cf7 | ||
|
|
e0c3b105e7 | ||
|
|
e79ee7803f | ||
|
|
50c432aaf0 | ||
|
|
67e6031d25 | ||
|
|
50d33be0aa | ||
|
|
7625ba919e | ||
|
|
bde838d35a | ||
|
|
e32736359b | ||
|
|
3efcb5dfa1 | ||
|
|
371ef3ce95 | ||
|
|
09cac1e36b | ||
|
|
43c784f564 | ||
|
|
08b61572e9 | ||
|
|
49f60971bd | ||
|
|
4696837f2f | ||
|
|
b40f0ffeb0 | ||
|
|
57cb68849e | ||
|
|
fe5e101463 | ||
|
|
038f24f394 | ||
|
|
81fa209910 | ||
|
|
c7dd956f45 | ||
|
|
3b80e35547 | ||
|
|
307578eb18 | ||
|
|
8a3762b337 | ||
|
|
ef5a0a0ff3 | ||
|
|
e5cd3e4fd1 | ||
|
|
2bd5b5fd68 | ||
|
|
b8cbfe0b0d | ||
|
|
b23898ee09 | ||
|
|
2cfc86307d | ||
|
|
e4cf4dacd4 | ||
|
|
b41364c709 | ||
|
|
b99c4e3e39 | ||
|
|
6c4df2919c | ||
|
|
73acd1f3a2 | ||
|
|
adda7622f4 | ||
|
|
43aef3ecb0 | ||
|
|
03faff443c | ||
|
|
eebe227a20 | ||
|
|
8fb73a092d | ||
|
|
7c95adc7e6 | ||
|
|
df5c497b5b | ||
|
|
8afdbc1f4d | ||
|
|
8269047c88 | ||
|
|
afb21203b7 | ||
|
|
d0a65f86f5 | ||
|
|
29f4f269fc | ||
|
|
65176c940e | ||
|
|
591ee92e45 | ||
|
|
fa411f5623 | ||
|
|
24360bf5b6 | ||
|
|
9fe1a7c38d | ||
|
|
6de77879db | ||
|
|
adcb29616a | ||
|
|
3bf8052811 | ||
|
|
cdb122d3d1 | ||
|
|
bde6c9092d | ||
|
|
db0b4d43cb | ||
|
|
b07003ae34 | ||
|
|
0a9f28c228 | ||
|
|
946c43940b | ||
|
|
e83827ab75 | ||
|
|
6431773288 | ||
|
|
3319748926 | ||
|
|
2ab0029d49 | ||
|
|
796decdb0f | ||
|
|
64ee669728 | ||
|
|
a8f4dadaf5 | ||
|
|
ec58132b25 | ||
|
|
563f7e6e78 | ||
|
|
e93dcc3991 | ||
|
|
7aac137fb7 | ||
|
|
073be6696b | ||
|
|
54b30c47f5 | ||
|
|
8914c79613 | ||
|
|
785f737244 | ||
|
|
67415a8dcb | ||
|
|
b4e28e219b | ||
|
|
3a5d4e7ebe | ||
|
|
a04e737526 | ||
|
|
3bfb123b33 | ||
|
|
d5bd7bcf5f | ||
|
|
2ef808f406 | ||
|
|
c4f9bc2b5e | ||
|
|
e4e8511b4c | ||
|
|
13328ca0d0 | ||
|
|
6a188248a7 | ||
|
|
5e493c90f8 | ||
|
|
8e735cd66f | ||
|
|
885fc88aad | ||
|
|
69ee4cbc71 | ||
|
|
2790128e9c | ||
|
|
a4f7b78fd0 | ||
|
|
fc5777e904 | ||
|
|
a0beb7f0e0 | ||
|
|
d58f4d1232 | ||
|
|
473e470883 | ||
|
|
4dce79334d | ||
|
|
e914496216 | ||
|
|
9b3457f0b2 | ||
|
|
d21fe517e4 | ||
|
|
8290970d50 | ||
|
|
2e8841c1d6 | ||
|
|
dc1b420fef | ||
|
|
e41f34729e | ||
|
|
4fe6256967 | ||
|
|
d9467ef3c5 | ||
|
|
d5bf1b6137 | ||
|
|
bfe4ad6c34 | ||
|
|
4e8e8978f4 | ||
|
|
7817c7697e | ||
|
|
06f2908d78 | ||
|
|
61386e9ca9 | ||
|
|
4314a4b42b | ||
|
|
945636ac5c | ||
|
|
ba4ebed59b | ||
|
|
7c0bf0c871 | ||
|
|
02c37e815c | ||
|
|
6a99c6c4ac | ||
|
|
a65ade5366 | ||
|
|
332c722f1d | ||
|
|
7aeb4c96ee | ||
|
|
cd085faecd | ||
|
|
1323b49c57 | ||
|
|
9915fa347f | ||
|
|
bcd08956bd | ||
|
|
25da3525fa | ||
|
|
245c0adeea | ||
|
|
0d06e78d25 | ||
|
|
2ce2a0d5c3 | ||
|
|
040f8c81bf | ||
|
|
ce1c6e2372 | ||
|
|
1d8aef1669 | ||
|
|
cca38ddf3f | ||
|
|
ce617fb7cb | ||
|
|
43ebf829ca | ||
|
|
487f8cbb38 | ||
|
|
36426a74c1 | ||
|
|
04f9187c14 | ||
|
|
8efe6e7286 | ||
|
|
745faa12a7 | ||
|
|
0cd4cc67af | ||
|
|
9201d50f05 | ||
|
|
f82a7fee49 | ||
|
|
66578a2c76 | ||
|
|
c4339813e6 | ||
|
|
927aac2c4a | ||
|
|
5a29c61dac | ||
|
|
149ac9f417 | ||
|
|
6c20a4c08b | ||
|
|
8fc690d8e0 | ||
|
|
dd0a952c83 | ||
|
|
ff123943cb | ||
|
|
493bd9be6b | ||
|
|
028a1ab2b0 | ||
|
|
058bcf1f4a | ||
|
|
ae379cd3dd | ||
|
|
f3a4634d30 | ||
|
|
de3106344a | ||
|
|
fecc5e63e8 | ||
|
|
69f5aacd25 | ||
|
|
2a753c7795 | ||
|
|
c17e24250d | ||
|
|
cb60e08da2 | ||
|
|
21f04605c6 | ||
|
|
0c75e652eb | ||
|
|
d3000f384f | ||
|
|
76b0183e0f | ||
|
|
e51e5cdfd4 | ||
|
|
5b1e5b18f9 | ||
|
|
fb9ba8cb8d | ||
|
|
b136fed6f7 | ||
|
|
fb8d6cb538 | ||
|
|
7bec5efe1a | ||
|
|
5c59c3f423 | ||
|
|
181c7dfd85 | ||
|
|
d05097a6fd | ||
|
|
75483299dc | ||
|
|
5333647794 | ||
|
|
e1f9519235 | ||
|
|
7f0b0803bc | ||
|
|
c867316e6a | ||
|
|
b0137c08cb | ||
|
|
534421eb57 | ||
|
|
b97363e407 | ||
|
|
aaf3f70ce5 | ||
|
|
5fd5b1e1ed | ||
|
|
56a3c99289 | ||
|
|
b5b564cfe1 | ||
|
|
0b7b37bf00 | ||
|
|
5b08be8d01 | ||
|
|
8d4f3803df | ||
|
|
56117237b6 | ||
|
|
796940bda5 | ||
|
|
00a18f58a7 | ||
|
|
0ef56fb86d | ||
|
|
381c8820b1 | ||
|
|
a930ec5404 | ||
|
|
e808ae0ddc | ||
|
|
750e25388f | ||
|
|
5757962f95 | ||
|
|
c15d8ebd2e | ||
|
|
09c57f3f44 | ||
|
|
be0ca330f5 | ||
|
|
2941ac0e2c | ||
|
|
d6a061d50f | ||
|
|
59f2446a2b | ||
|
|
60ab71099f | ||
|
|
3f6cdd4133 | ||
|
|
72b9c37ec8 | ||
|
|
5704fad7cc | ||
|
|
849c346a21 | ||
|
|
328a3ff20e | ||
|
|
24bcea393f | ||
|
|
aade4c7af3 | ||
|
|
58406d6b37 | ||
|
|
004a87eba9 | ||
|
|
3fa11d9931 | ||
|
|
cad8ff766a | ||
|
|
5b6f49c993 | ||
|
|
3e798a9863 | ||
|
|
4371708fc4 | ||
|
|
d4887e11be | ||
|
|
d0e852f19f | ||
|
|
8d82033855 | ||
|
|
434ce4f9c9 | ||
|
|
8fd0ea39aa | ||
|
|
08be47c03e | ||
|
|
13bd3c773c | ||
|
|
751fa21f60 | ||
|
|
339d352d6e | ||
|
|
79cb6166d5 | ||
|
|
11a93fabe5 | ||
|
|
05eba8c2f0 | ||
|
|
ac66c41aee | ||
|
|
c70904d7f7 | ||
|
|
bd280ec895 | ||
|
|
02c781eb25 | ||
|
|
50794ba49d | ||
|
|
a086a2471c | ||
|
|
4271732b10 | ||
|
|
79313c8093 | ||
|
|
f80909738d | ||
|
|
15b131d8c2 | ||
|
|
40108d5276 | ||
|
|
ea4def7ea1 | ||
|
|
285bd3de0e | ||
|
|
35bcd30b24 | ||
|
|
3453aadcfd | ||
|
|
758b306527 | ||
|
|
7a0765c1c2 | ||
|
|
f6a5f117b8 | ||
|
|
46def68776 | ||
|
|
f714f5b572 | ||
|
|
a64dba8a7e | ||
|
|
cb3f9a6805 | ||
|
|
c342f0d7e4 | ||
|
|
34b80f91ee | ||
|
|
c258b4c7aa | ||
|
|
474922493f | ||
|
|
a5971da2ad | ||
|
|
8fe5f35b13 | ||
|
|
d70f0f1216 | ||
|
|
a1f46b3aae | ||
|
|
2ce16297ff | ||
|
|
9dc003a753 | ||
|
|
2f568c6400 | ||
|
|
23a2a5e5f3 | ||
|
|
91785e5590 | ||
|
|
5111fe2e95 | ||
|
|
15c6f18750 | ||
|
|
d2f44f6584 | ||
|
|
25e099a309 | ||
|
|
5fd9874ab6 | ||
|
|
4ffb1ea95e | ||
|
|
38d0b5caa8 | ||
|
|
93b82843a7 | ||
|
|
ae97495c47 | ||
|
|
4a3faf9086 | ||
|
|
09e52834a6 | ||
|
|
84fa2d1a34 | ||
|
|
7342d839bc | ||
|
|
450128ed63 | ||
|
|
e4cd2cadf6 | ||
|
|
b960f908dc | ||
|
|
143f786322 | ||
|
|
a0859a71b2 | ||
|
|
399dfb1a98 | ||
|
|
0225db9db5 | ||
|
|
f01cab57c7 | ||
|
|
26f8870344 | ||
|
|
ccbe856ffb | ||
|
|
c041495834 | ||
|
|
c91315c0f1 | ||
|
|
94776c40e1 | ||
|
|
b45e6b6139 | ||
|
|
e0ebe6c858 | ||
|
|
cbfd3af5c2 | ||
|
|
c0a26862f3 | ||
|
|
214629e2db | ||
|
|
77d73fa572 | ||
|
|
a7348f6ae0 | ||
|
|
56ae12a29f | ||
|
|
d071625326 | ||
|
|
ff1f190110 | ||
|
|
cdf982a356 | ||
|
|
c6abb7dc64 | ||
|
|
2eeb7c43da | ||
|
|
7ff8c99055 | ||
|
|
1fd8025cb5 | ||
|
|
003787e4a6 | ||
|
|
0d05a2bf09 | ||
|
|
bd54b1a053 | ||
|
|
3035dc4df9 | ||
|
|
0b20e99cd2 | ||
|
|
5a73884b0b | ||
|
|
e46caa024d | ||
|
|
3bec127020 | ||
|
|
31e20ca87e | ||
|
|
c87012ea69 | ||
|
|
7f59983ce4 | ||
|
|
0402b45480 | ||
|
|
123c7b2119 | ||
|
|
b68691bf05 | ||
|
|
d9a3f5a3b8 | ||
|
|
a0fc948519 | ||
|
|
4044da849e | ||
|
|
7377e6c7da | ||
|
|
cf14b0478d | ||
|
|
ba67f108d4 | ||
|
|
4fb5c6dd9a | ||
|
|
826dc601c1 | ||
|
|
26979b1c62 | ||
|
|
36b7f767b6 | ||
|
|
fdfa15aa4d | ||
|
|
961b9b882f | ||
|
|
d83a3d71bc | ||
|
|
3d4ae60d81 | ||
|
|
ea50714b0a | ||
|
|
92422a939a | ||
|
|
d543c0b36e | ||
|
|
c6e2b5f6c5 | ||
|
|
368f5c8dba | ||
|
|
14f7c2d7a1 | ||
|
|
ffae7a24f7 | ||
|
|
f047df0fe8 | ||
|
|
469c3298cc | ||
|
|
92593d459b | ||
|
|
99d3374d35 | ||
|
|
cbcd53a8a0 | ||
|
|
6ba95446ec | ||
|
|
50f079af8c | ||
|
|
8c96f9fd93 | ||
|
|
e574bcf15c | ||
|
|
7520af749c | ||
|
|
b55df9e186 | ||
|
|
9ea53d7b1e | ||
|
|
6ae38d0718 | ||
|
|
eedbc667c6 | ||
|
|
9b524e0496 | ||
|
|
92b2da0286 | ||
|
|
0794380ca8 | ||
|
|
a7e05c4cd6 | ||
|
|
336962eb55 | ||
|
|
fbc527145c | ||
|
|
2d65464c04 | ||
|
|
415a61a09b | ||
|
|
f95435b0f1 | ||
|
|
e077cc6581 | ||
|
|
551274f167 | ||
|
|
4f7ac59c6f | ||
|
|
0e06e2de97 | ||
|
|
ed1d411bde | ||
|
|
8933e03c02 | ||
|
|
2c48155769 | ||
|
|
16e258bdbc | ||
|
|
c418ca1890 | ||
|
|
3be011bdaf | ||
|
|
526f6e3058 | ||
|
|
21b7dccf1c | ||
|
|
adc6fc8524 | ||
|
|
b5216ed7af | ||
|
|
d4718c373a | ||
|
|
797513b372 | ||
|
|
0b7342ba67 | ||
|
|
103686f89b | ||
|
|
aaf3d6a7c7 | ||
|
|
923d9fb07b | ||
|
|
df164a58c9 | ||
|
|
5ef65f039d | ||
|
|
fd61fcef0d | ||
|
|
d67d985b81 | ||
|
|
a74276d31b | ||
|
|
6d0e783236 | ||
|
|
17cde0cbb7 | ||
|
|
80ce83ef9d | ||
|
|
7e2c9f97e9 | ||
|
|
727c471234 | ||
|
|
201da6f2a2 | ||
|
|
99adbe5784 | ||
|
|
d0fc5268a6 | ||
|
|
0c9d9e8dcf | ||
|
|
1641fd91cf | ||
|
|
835f1efc76 | ||
|
|
d6179bc12b | ||
|
|
3edda51379 | ||
|
|
82b74e8ce7 | ||
|
|
65ac2b3e18 | ||
|
|
ae17b4b24a | ||
|
|
06e137aee9 | ||
|
|
e97255a17f | ||
|
|
58fd6f9273 | ||
|
|
31b2fab6e9 | ||
|
|
9053bccd33 | ||
|
|
edc47247f9 | ||
|
|
107e202ab4 | ||
|
|
3c400f958e | ||
|
|
973ed7686b | ||
|
|
716ed94ca1 | ||
|
|
5fe1a28954 | ||
|
|
a820500ae0 | ||
|
|
f812efff3c | ||
|
|
a3a7f8fb6c | ||
|
|
00eb637e51 | ||
|
|
151eca971b | ||
|
|
f693a04531 | ||
|
|
eae80e2c86 | ||
|
|
f8bb065ffd | ||
|
|
120cde9917 | ||
|
|
d6d7ca19c1 | ||
|
|
ec8b06e96c | ||
|
|
0c14639f9c | ||
|
|
27aabbc4d9 | ||
|
|
09186cd8ad | ||
|
|
52e4abf562 | ||
|
|
324c85cd9f | ||
|
|
a5e3935672 | ||
|
|
c58ba19451 | ||
|
|
b5318ed248 | ||
|
|
964171b26a | ||
|
|
1fa29f89f9 | ||
|
|
68df5f832c | ||
|
|
40a3134b32 | ||
|
|
9f3310f67a | ||
|
|
278214ef86 | ||
|
|
109a6ed599 | ||
|
|
99d3a76b56 | ||
|
|
c72719747a | ||
|
|
a84dcf6a8e | ||
|
|
c36c759c8b | ||
|
|
bbf33f88e0 | ||
|
|
e2e5aa32a8 | ||
|
|
e88a7c3fd7 | ||
|
|
98393ba2e1 | ||
|
|
e145b8171d | ||
|
|
5cf95f5b3d | ||
|
|
8fbc14b191 | ||
|
|
30f2c71861 | ||
|
|
d4fc12f56c | ||
|
|
7c32e5b1fb | ||
|
|
13bad6dfed | ||
|
|
24e14cbc73 | ||
|
|
a2d63d117b | ||
|
|
102a151127 | ||
|
|
cc5d779050 | ||
|
|
2c41394892 | ||
|
|
454c604b86 | ||
|
|
f13ad54ba1 | ||
|
|
a66dd8be82 | ||
|
|
7de1683195 | ||
|
|
b1f336c874 | ||
|
|
39ac2b5042 | ||
|
|
c27459a760 | ||
|
|
0a3b78fec1 | ||
|
|
156a86013f | ||
|
|
20313127f5 | ||
|
|
b0a91ce9e3 | ||
|
|
6c5daf5ed6 | ||
|
|
3bac3c6263 | ||
|
|
74ce839bc1 | ||
|
|
d2a728fc08 | ||
|
|
3e15a5e2db | ||
|
|
4840cdd293 | ||
|
|
f04281ac4a | ||
|
|
4f75ea0fd0 | ||
|
|
12b8eee86f | ||
|
|
90d5e9dccd | ||
|
|
1daea51cfb | ||
|
|
905b4f0a6b | ||
|
|
dcc7ba20e6 | ||
|
|
39dec1059b | ||
|
|
f4104f696e | ||
|
|
f22c9af136 | ||
|
|
13578bb8c0 | ||
|
|
39c0fc0e5a | ||
|
|
cfc9514f89 | ||
|
|
580a3182ab | ||
|
|
83919c087d | ||
|
|
e8712b3a29 | ||
|
|
fda900e95d | ||
|
|
beb3558d01 | ||
|
|
97dbe648f9 | ||
|
|
7ff484c0c7 | ||
|
|
f7e34a707d | ||
|
|
73bc7220db | ||
|
|
f2a323ef7f | ||
|
|
15345f874f | ||
|
|
534ac22fd2 | ||
|
|
b0f7df93a4 | ||
|
|
1b0cba3919 | ||
|
|
ff4929fcce | ||
|
|
1a7ab6346f | ||
|
|
47b21707be | ||
|
|
8b986ae094 | ||
|
|
32cb489d1d | ||
|
|
0e7fcc6893 | ||
|
|
89f2429283 | ||
|
|
1fc3a82d9e | ||
|
|
fe552ba53f | ||
|
|
410ec57f80 | ||
|
|
2ef0054840 | ||
|
|
704f2b91e2 | ||
|
|
d1940fe0f9 | ||
|
|
8d9ae731ef | ||
|
|
b1810e2c44 | ||
|
|
44bfac9fe6 | ||
|
|
e4299178f7 | ||
|
|
8cb952ff3f | ||
|
|
b519fd2533 | ||
|
|
c7599094f5 | ||
|
|
8c63211aaf | ||
|
|
1bea12f746 | ||
|
|
124d728010 | ||
|
|
63515e967e | ||
|
|
5c3b96a947 | ||
|
|
0af902b81c | ||
|
|
b75a04eb08 | ||
|
|
3ae1c5ccc8 | ||
|
|
091ff7e91c | ||
|
|
a44a4bc759 | ||
|
|
7593918006 | ||
|
|
d400f0fb58 | ||
|
|
226646d5b8 | ||
|
|
9b2aabfdc8 | ||
|
|
35159ac456 | ||
|
|
e603142215 | ||
|
|
1bdfb5f382 | ||
|
|
282f139ee9 | ||
|
|
5eaaadad26 | ||
|
|
72735baa11 | ||
|
|
21c8051b02 | ||
|
|
d6d881b0ca | ||
|
|
5fdd5cad4e | ||
|
|
44df1128af | ||
|
|
bc787f20e3 | ||
|
|
c4524ebbd1 | ||
|
|
98b99ef5b1 | ||
|
|
df67471959 | ||
|
|
54a37cc658 | ||
|
|
c4a37e38ab | ||
|
|
13eed3baa7 | ||
|
|
f0b2cc5590 | ||
|
|
69e1252f7f | ||
|
|
ed8f617c81 | ||
|
|
ad8a290ca5 | ||
|
|
00a85c4438 | ||
|
|
9a18be0a61 | ||
|
|
fa62b9bde2 | ||
|
|
20a1507f7a | ||
|
|
b7492ebdfa | ||
|
|
48bf65db74 | ||
|
|
6561365326 | ||
|
|
59c51127f6 | ||
|
|
59772504e3 | ||
|
|
c2e5f4e80a | ||
|
|
daa98107c3 | ||
|
|
140cbe9f25 | ||
|
|
3a9ceb8371 | ||
|
|
4274329867 | ||
|
|
86cf59f9a8 | ||
|
|
4ea40b30a2 | ||
|
|
9bf7562d49 | ||
|
|
ce2f66ad17 | ||
|
|
eacfca37f2 | ||
|
|
7cdc26a8ba | ||
|
|
7d81c41404 | ||
|
|
e5035a9c4b | ||
|
|
fe74ca3529 | ||
|
|
900cbce84f | ||
|
|
78289ded8f | ||
|
|
99c9c73c9d | ||
|
|
db9656c70c | ||
|
|
296796eb54 | ||
|
|
fb9f16ad29 | ||
|
|
64df85f3ee | ||
|
|
8bb47bbdf1 | ||
|
|
d929caf0e6 | ||
|
|
a25bedff28 | ||
|
|
b8039af905 | ||
|
|
6c367ac29c | ||
|
|
af226673da | ||
|
|
957aa2e3d1 | ||
|
|
c920146bff | ||
|
|
2c9c9891c6 | ||
|
|
bf3c1d3745 | ||
|
|
3c41f27298 | ||
|
|
a397f34ec4 | ||
|
|
b4634f30e6 | ||
|
|
2016fa315b | ||
|
|
dc60c011a6 | ||
|
|
408d3a964d | ||
|
|
dbf765ffd7 | ||
|
|
8f92263707 | ||
|
|
a7f63ed9a3 | ||
|
|
fd2fe9ebd7 | ||
|
|
9fc02c8ce1 | ||
|
|
2fb9806f36 | ||
|
|
f2ce1b4032 | ||
|
|
b1568d3eed | ||
|
|
37b9550de6 | ||
|
|
67d8fa26a7 | ||
|
|
485e8455bd | ||
|
|
e16735bbbd | ||
|
|
4feedab02c | ||
|
|
ed0e1c07b9 | ||
|
|
e420861151 | ||
|
|
155cbf686d | ||
|
|
219a403f36 | ||
|
|
ed6ea22947 | ||
|
|
3bb966cf35 | ||
|
|
2b11547eeb | ||
|
|
d98cb7b53f | ||
|
|
d935be7b0a | ||
|
|
aa37d6e7f9 | ||
|
|
f72cd5b0ff | ||
|
|
5116c61f43 | ||
|
|
687beda478 | ||
|
|
bb5fe39d3d | ||
|
|
0e9be13cb6 | ||
|
|
23b274c472 | ||
|
|
a11f6ea1e6 | ||
|
|
c05555c290 | ||
|
|
6caee6b0f0 | ||
|
|
ae4f6b1dd4 | ||
|
|
40af2a81db | ||
|
|
cb3cf7789f | ||
|
|
0f7f458ce0 | ||
|
|
26bcb590a7 | ||
|
|
05894827c1 | ||
|
|
58be07f5b1 | ||
|
|
f1137927d4 | ||
|
|
37fbd769b7 | ||
|
|
3f6aae633e | ||
|
|
85c6957b63 | ||
|
|
c318d42d14 | ||
|
|
455f28ae54 | ||
|
|
b5dda3624f | ||
|
|
11613ad69f | ||
|
|
6d0720c956 | ||
|
|
8999e5fc54 | ||
|
|
82d7300fc0 | ||
|
|
12255ed453 | ||
|
|
5fe7c687f3 | ||
|
|
200fc0c599 | ||
|
|
4d8108f34d | ||
|
|
a0246836a8 | ||
|
|
d6a970133e | ||
|
|
26f77bd00f | ||
|
|
7cc2941053 | ||
|
|
6a1bbedae8 | ||
|
|
e3760630bf | ||
|
|
ce77cb81df | ||
|
|
4dce95142f | ||
|
|
570f79d91a | ||
|
|
a712875830 | ||
|
|
3a07809545 | ||
|
|
bb6b86ad59 | ||
|
|
bd2e984963 | ||
|
|
9408579862 | ||
|
|
0cf9206170 | ||
|
|
86c607a211 | ||
|
|
ec60c24849 | ||
|
|
72bd6d5844 | ||
|
|
f1e8357131 | ||
|
|
21341c5213 | ||
|
|
fa2f9686ce | ||
|
|
05e45e92cf | ||
|
|
ce610e0262 |
41
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
<!-- This is a bug report template. By following the instructions below and filling out the sections with your information, you will help the developers to get all the necessary data to fix your issue.
|
||||
You can also preview your report before submitting it. You may remove sections that aren't relevant to your particular case.
|
||||
|
||||
Before we begin, please note that this tracker is only for issues, not questions or comments.
|
||||
|
||||
If you are looking for support, please see our support center instead:
|
||||
https://support.whispersystems.org/
|
||||
or email support@whispersystems.org
|
||||
|
||||
Let's begin with a checklist: replace the empty checkboxes [ ] below with checked ones [x] accordingly -->
|
||||
|
||||
I have:
|
||||
- [ ] searched open and closed issues for duplicates
|
||||
- [ ] read https://github.com/WhisperSystems/Signal-Android/wiki/Submitting-useful-bug-reports
|
||||
|
||||
----------------------------------------
|
||||
|
||||
### Bug description
|
||||
Describe here the issue that you are experiencing.
|
||||
|
||||
### Steps to reproduce
|
||||
- using hyphens as bullet points
|
||||
- list the steps
|
||||
- that reproduce the bug
|
||||
|
||||
**Actual result:** Describe here what happens after you run the steps above (i.e. the buggy behaviour)
|
||||
**Expected result:** Describe here what should happen after you run the steps above (i.e. what would be the correct behaviour)
|
||||
|
||||
### Screenshots
|
||||
<!-- you can drag and drop images below -->
|
||||
|
||||
|
||||
### Device info
|
||||
<!-- replace the examples with your info -->
|
||||
**Device:** Manufacturer Model XVI
|
||||
**Android version:** 0.0.0
|
||||
**Signal version:** 0.0.0
|
||||
|
||||
### Link to debug log
|
||||
<!-- immediately after the bug has happened capture a debug log via Signal's advanced settings and paste the link below -->
|
||||
|
||||
24
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
<!-- You can remove this first section if you have contributed before -->
|
||||
### First time contributor checklist
|
||||
<!-- replace the empty checkboxes [ ] below with checked ones [x] accordingly -->
|
||||
- [ ] I have read [how to contribute](https://github.com/WhisperSystems/Signal-Android/blob/master/CONTRIBUTING.md) to this project
|
||||
- [ ] I have signed the [Contributor License Agreement](https://whispersystems.org/cla/)
|
||||
|
||||
### Contributor checklist
|
||||
<!-- replace the empty checkboxes [ ] below with checked ones [x] accordingly -->
|
||||
- [ ] I am following the [Code Style Guidelines](https://github.com/WhisperSystems/Signal-Android/wiki/Code-Style-Guidelines)
|
||||
- [ ] I have tested my contribution on these devices:
|
||||
* Device A, Android X.Y.Z
|
||||
* Device B, Android Z.Y
|
||||
* Virtual device W, Android Y.Y.Z
|
||||
- [ ] My contribution is fully baked and ready to be merged as is
|
||||
- [ ] I ensure that all the open issues my contribution fixes are mentioned in the commit message of my first commit using the `Fixes #1234` [syntax](https://help.github.com/articles/closing-issues-via-commit-messages/)
|
||||
- [ ] I have made the choice whether I want the [BitHub reward](https://github.com/WhisperSystems/Signal-Android/wiki/BitHub-Rewards) or not by omitting or adding the word `FREEBIE` in the commit message of my first commit
|
||||
|
||||
----------
|
||||
|
||||
### Description
|
||||
<!--
|
||||
Describe briefly what your pull request proposes to fix. Especially if you have more than one commit, it is helpful to give a summary of what your contribution as a whole is trying to solve.
|
||||
Also, please describe shortly how you tested that your fix actually works.
|
||||
-->
|
||||
4
.gitignore
vendored
@@ -20,3 +20,7 @@ signing.properties
|
||||
library/lib/
|
||||
library/obj/
|
||||
ffpr
|
||||
test/androidTestEspresso/res/values/arrays.xml
|
||||
obj/
|
||||
jni/libspeex/.deps/
|
||||
*.sh
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
language: android
|
||||
android:
|
||||
components:
|
||||
- platform-tools
|
||||
- build-tools-19.1.0
|
||||
- android-19
|
||||
- extra-android-m2repository
|
||||
@@ -1,9 +1,9 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
lang_map = fr_CA:fr-rCA,pt_BR:pt-rBR,pt_PT:pt,zh_CN:zh-rCN,zh_HK:zh-rHK,zh_TW:zh-rTW,da_DK:da-rDK,de_DE:de,tr_TR:tr,fr_FR:fr,es_ES:es,hu_HU:hu,sv_SE:sv-rSE,bg_BG:bg,el_GR:el,kn_IN:kn-rIN,cs_CZ:cs,sr:sr,he:iw,id:in
|
||||
lang_map = fr_CA:fr-rCA,pt_BR:pt-rBR,pt_PT:pt,zh_CN:zh-rCN,zh_HK:zh-rHK,zh_TW:zh-rTW,da_DK:da-rDK,de_DE:de,tr_TR:tr,fr_FR:fr,es_ES:es,hu_HU:hu,sv_SE:sv-rSE,bg_BG:bg,el_GR:el,kn_IN:kn-rIN,cs_CZ:cs,sr:sr,he:iw,id:in,lt_LT:lt,km_KH:km-rKH
|
||||
|
||||
|
||||
[textsecure-official.master]
|
||||
[signal-android.master]
|
||||
file_filter = res/values-<lang>/strings.xml
|
||||
source_file = res/values/strings.xml
|
||||
source_lang = en
|
||||
|
||||
@@ -1,16 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="org.thoughtcrime.securesms"
|
||||
android:versionCode="122"
|
||||
android:versionName="2.16.2">
|
||||
package="org.thoughtcrime.securesms">
|
||||
|
||||
<uses-sdk tools:overrideLibrary="com.amulyakhare.textdrawable,com.astuetz.pagerslidingtabstrip"/>
|
||||
<uses-sdk tools:overrideLibrary="com.amulyakhare.textdrawable,com.astuetz.pagerslidingtabstrip,pl.tajchert.waitingdots,com.h6ah4i.android.multiselectlistpreferencecompat,android.support.v13,com.davemorrissey.labs.subscaleview,com.tomergoldst.tooltips,com.klinker.android.send_message"/>
|
||||
|
||||
<permission android:name="org.thoughtcrime.securesms.ACCESS_SECRETS"
|
||||
android:label="Access to TextSecure Secrets"
|
||||
android:protectionLevel="signature" />
|
||||
|
||||
<uses-feature android:name="android.hardware.camera" android:required="false" />
|
||||
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
|
||||
<uses-feature android:name="android.hardware.location" android:required="false"/>
|
||||
<uses-feature android:name="android.hardware.location.network" android:required="false"/>
|
||||
<uses-feature android:name="android.hardware.location.gps" android:required="false"/>
|
||||
<uses-feature android:name="android.hardware.microphone" android:required="false"/>
|
||||
<uses-feature android:name="android.hardware.wifi" android:required="false"/>
|
||||
<uses-feature android:name="android.hardware.portrait" android:required="false"/>
|
||||
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
|
||||
|
||||
<uses-permission android:name="org.thoughtcrime.securesms.ACCESS_SECRETS"/>
|
||||
<uses-permission android:name="android.permission.READ_PROFILE"/>
|
||||
<uses-permission android:name="android.permission.WRITE_PROFILE"/>
|
||||
@@ -33,16 +41,66 @@
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_CALL_LOG" />
|
||||
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
|
||||
|
||||
<!-- For sending location tiles in the future -->
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
|
||||
<!-- So we can add a TextSecure 'Account' -->
|
||||
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
|
||||
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
|
||||
|
||||
<!-- For conversation 'shortcuts' on the desktop -->
|
||||
<uses-permission android:name="android.permission.INSTALL_SHORTCUT"/>
|
||||
|
||||
<!-- For sending/receiving events -->
|
||||
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
|
||||
<uses-permission android:name="android.permission.READ_CALENDAR"/>
|
||||
|
||||
<!-- For fixing MMS -->
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
|
||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
|
||||
|
||||
<!-- Set image as wallpaper -->
|
||||
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
|
||||
|
||||
<!-- Permissions from RedPhone -->
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
||||
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
|
||||
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
|
||||
<uses-permission android:name="android.permission.CALL_PHONE" />
|
||||
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
|
||||
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
|
||||
<uses-permission android:name="android.permission.RAISED_THREAD_PRIORITY" />
|
||||
<uses-permission android:name="android.permission.READ_CALL_STATE"/>
|
||||
<uses-permission android:name="android.permission.READ_LOGS"/>
|
||||
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
||||
|
||||
<permission android:name="org.thoughtcrime.securesms.permission.C2D_MESSAGE"
|
||||
android:protectionLevel="signature" />
|
||||
<uses-permission android:name="org.thoughtcrime.securesms.permission.C2D_MESSAGE" />
|
||||
|
||||
<application android:name=".ApplicationContext"
|
||||
android:icon="@drawable/icon"
|
||||
android:roundIcon="@drawable/icon_circle"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/TextSecure.LightTheme">
|
||||
android:supportsRtl="true"
|
||||
tools:replace="android:allowBackup"
|
||||
android:allowBackup="false"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:largeHeap="true">
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.android.geo.API_KEY"
|
||||
android:value="AIzaSyCSx9xea86GwDKGznCAULE9Y5a8b-TfN9U"/>
|
||||
|
||||
<meta-data android:name="com.google.android.gms.version"
|
||||
android:value="@integer/google_play_services_version" />
|
||||
@@ -50,12 +108,31 @@
|
||||
<meta-data android:name="org.thoughtcrime.securesms.mms.TextSecureGlideModule"
|
||||
android:value="GlideModule" />
|
||||
|
||||
<meta-data android:name="com.google.android.gms.car.application"
|
||||
android:resource="@xml/automotive_app_desc" />
|
||||
|
||||
<activity android:name="org.thoughtcrime.securesms.WebRtcCallActivity"
|
||||
android:excludeFromRecents="true"
|
||||
android:screenOrientation="portrait"
|
||||
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|screenSize|fontScale"
|
||||
android:launchMode="singleTask"/>
|
||||
|
||||
<activity android:name=".CountrySelectionActivity"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".ImportExportActivity"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".InviteActivity"
|
||||
android:theme="@style/TextSecure.HighlightTheme"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:parentActivityName=".ConversationListActivity"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="org.thoughtcrime.securesms.ConversationListActivity" />
|
||||
</activity>
|
||||
|
||||
<activity android:name=".PromptMmsActivity"
|
||||
android:label="Configure MMS Settings"
|
||||
android:windowSoftInputMode="stateUnchanged"
|
||||
@@ -88,8 +165,15 @@
|
||||
<data android:mimeType="image/*" />
|
||||
<data android:mimeType="text/plain" />
|
||||
<data android:mimeType="video/*" />
|
||||
<data android:mimeType="application/*"/>
|
||||
<data android:mimeType="text/*"/>
|
||||
<data android:mimeType="*/*"/>
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.service.chooser.chooser_target_service"
|
||||
android:value=".service.DirectShareService" />
|
||||
|
||||
</activity>
|
||||
|
||||
<activity android:name=".ConversationListActivity"
|
||||
@@ -105,13 +189,42 @@
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data android:name="com.sec.minimode.icon.portrait.normal"
|
||||
android:resource="@drawable/icon" />
|
||||
<meta-data android:name="com.sec.minimode.icon.landscape.normal"
|
||||
android:resource="@drawable/icon" />
|
||||
|
||||
</activity-alias>
|
||||
|
||||
<activity android:name=".ConversationListArchiveActivity"
|
||||
android:label="@string/AndroidManifest_archived_conversations"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
||||
android:parentActivityName=".ConversationListActivity">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="org.thoughtcrime.securesms.ConversationListActivity" />
|
||||
</activity>
|
||||
|
||||
<activity android:name=".ConversationActivity"
|
||||
android:windowSoftInputMode="stateUnchanged"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
||||
android:parentActivityName=".ConversationListActivity">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="org.thoughtcrime.securesms.ConversationListActivity" />
|
||||
</activity>
|
||||
|
||||
<activity android:name=".ConversationPopupActivity"
|
||||
android:windowSoftInputMode="stateVisible"
|
||||
android:launchMode="singleTask"
|
||||
android:taskAffinity=""
|
||||
android:excludeFromRecents="true"
|
||||
android:theme="@style/TextSecure.LightTheme.Popup"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize" />
|
||||
|
||||
<activity android:name=".MessageDetailsActivity"
|
||||
@@ -134,10 +247,15 @@
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".ExperienceUpgradeActivity"
|
||||
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".PassphraseCreateActivity"
|
||||
android:label="@string/AndroidManifest__create_passphrase"
|
||||
android:windowSoftInputMode="stateUnchanged"
|
||||
android:theme="@style/TextSecure.LightIntroTheme"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
@@ -149,8 +267,8 @@
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".NewConversationActivity"
|
||||
android:label="@string/AndroidManifest__select_contacts"
|
||||
android:windowSoftInputMode="stateVisible"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:windowSoftInputMode="stateAlwaysVisible"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".PushContactSelectionActivity"
|
||||
@@ -158,11 +276,9 @@
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".ViewIdentityActivity"
|
||||
android:label="@string/AndroidManifest__public_identity_key"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".ViewLocalIdentityActivity"
|
||||
<activity android:name=".giph.ui.GiphyActivity"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".PassphraseChangeActivity"
|
||||
@@ -170,7 +286,6 @@
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".VerifyIdentityActivity"
|
||||
android:label="@string/AndroidManifest__verify_identity"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".ApplicationPreferencesActivity"
|
||||
@@ -183,6 +298,10 @@
|
||||
<activity android:name=".RegistrationProgressActivity"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".DeviceActivity"
|
||||
android:label="@string/AndroidManifest__linked_devices"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".LogSubmitActivity"
|
||||
android:label="@string/AndroidManifest__log_submit"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
@@ -196,6 +315,7 @@
|
||||
|
||||
<activity android:name=".MediaOverviewActivity"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".DummyActivity"
|
||||
@@ -210,7 +330,7 @@
|
||||
android:finishOnTaskLaunch="true" />
|
||||
|
||||
<activity android:name=".PlayServicesProblemActivity"
|
||||
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
||||
android:theme="@style/TextSecure.DialogActivity"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".SmsSendtoActivity">
|
||||
@@ -224,10 +344,48 @@
|
||||
<data android:scheme="mms" />
|
||||
<data android:scheme="mmsto" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="vnd.android.cursor.item/vnd.org.thoughtcrime.securesms.contact" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity android:name="org.thoughtcrime.securesms.webrtc.VoiceCallShare"
|
||||
android:excludeFromRecents="true"
|
||||
android:theme="@style/NoAnimation.Theme.BlackScreen"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="vnd.android.cursor.item/vnd.org.thoughtcrime.securesms.call" />
|
||||
</intent-filter>
|
||||
|
||||
</activity>
|
||||
|
||||
<activity android:name=".RecipientPreferenceActivity"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".BlockedContactsActivity"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".scribbles.ScribbleActivity"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".scribbles.StickerSelectActivity"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name="com.soundcloud.android.crop.CropImageActivity" />
|
||||
|
||||
<service android:enabled="true" android:name="org.thoughtcrime.securesms.service.WebRtcCallService"/>
|
||||
|
||||
<service android:enabled="true" android:name=".service.ApplicationMigrationService"/>
|
||||
<service android:enabled="true" android:name=".service.KeyCachingService"/>
|
||||
<service android:enabled="true" android:name=".service.RegistrationService"/>
|
||||
@@ -246,6 +404,27 @@
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<service android:name=".service.AccountAuthenticatorService" android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.accounts.AccountAuthenticator" />
|
||||
</intent-filter>
|
||||
<meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/authenticator" />
|
||||
</service>
|
||||
|
||||
<service android:name=".service.ContactsSyncAdapterService" android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.content.SyncAdapter"/>
|
||||
</intent-filter>
|
||||
<meta-data android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter" />
|
||||
<meta-data android:name="android.provider.CONTACTS_STRUCTURE" android:resource="@xml/contactsformat" />
|
||||
</service>
|
||||
|
||||
<service android:name=".service.DirectShareService"
|
||||
android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
|
||||
<intent-filter>
|
||||
<action android:name="android.service.chooser.ChooserTargetService" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<receiver android:name=".gcm.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" >
|
||||
<intent-filter>
|
||||
@@ -289,18 +468,43 @@
|
||||
|
||||
<receiver android:name=".notifications.MarkReadReceiver"
|
||||
android:enabled="true"
|
||||
android:exported="true">
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="org.thoughtcrime.securesms.notifications.CLEAR"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".notifications.RemoteReplyReceiver"
|
||||
android:enabled="true"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="org.thoughtcrime.securesms.notifications.WEAR_REPLY"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".notifications.AndroidAutoHeardReceiver"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="org.thoughtcrime.securesms.notifications.ANDROID_AUTO_HEARD"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".notifications.AndroidAutoReplyReceiver"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="org.thoughtcrime.securesms.notifications.ANDROID_AUTO_REPLY"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
|
||||
<provider android:name=".providers.PartProvider"
|
||||
android:grantUriPermissions="true"
|
||||
android:exported="false"
|
||||
android:authorities="org.thoughtcrime.provider.securesms" />
|
||||
|
||||
<provider android:name=".providers.MmsBodyProvider"
|
||||
android:grantUriPermissions="true"
|
||||
android:exported="false"
|
||||
android:authorities="org.thoughtcrime.provider.securesms.mms" />
|
||||
|
||||
<receiver android:name=".service.RegistrationNotifier"
|
||||
@@ -312,22 +516,55 @@
|
||||
|
||||
<receiver android:name=".service.DirectoryRefreshListener">
|
||||
<intent-filter>
|
||||
<action android:name="org.whispersystems.whisperpush.DIRECTORY_REFRESH"/>
|
||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".service.RotateSignedPreKeyListener">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".service.PersistentConnectionBootListener">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.BOOT_COMPLETED"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".notifications.MessageNotifier$ReminderReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="org.thoughtcrime.securesms.MessageNotifier.REMINDER_ACTION"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".notifications.MessageNotifier$DeleteReceiver">
|
||||
<receiver android:name=".notifications.DeleteNotificationReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="org.thoughtcrime.securesms.MessageNotifier.DELETE_REMINDER_ACTION"/>
|
||||
<action android:name="org.thoughtcrime.securesms.DELETE_NOTIFICATION"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".ExperienceUpgradeActivity$AppUpgradeReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
|
||||
<data android:scheme="package" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
android:name=".service.PanicResponderListener"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="info.guardianproject.panic.action.TRIGGER" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<uses-library android:name="com.sec.android.app.multiwindow" android:required="false"/>
|
||||
<meta-data android:name="com.sec.android.support.multiwindow" android:value="true" />
|
||||
<meta-data android:name="com.sec.android.multiwindow.DEFAULT_SIZE_W" android:value="632.0dip" />
|
||||
<meta-data android:name="com.sec.android.multiwindow.DEFAULT_SIZE_H" android:value="598.0dip" />
|
||||
<meta-data android:name="com.sec.android.multiwindow.MINIMUM_SIZE_W" android:value="632.0dip" />
|
||||
<meta-data android:name="com.sec.android.multiwindow.MINIMUM_SIZE_H" android:value="598.0dip" />
|
||||
|
||||
</application>
|
||||
</manifest>
|
||||
|
||||
49
BUILDING.md
@@ -1,30 +1,31 @@
|
||||
Building TextSecure
|
||||
=====================
|
||||
Building Signal
|
||||
===============
|
||||
|
||||
Basics
|
||||
------
|
||||
|
||||
TextSecure uses [Gradle](http://gradle.org) to build the project and to maintain
|
||||
dependencies.
|
||||
Signal uses [Gradle](http://gradle.org) to build the project and to maintain
|
||||
dependencies. However, you needn't install it yourself; the
|
||||
"gradle wrapper" `gradlew`, mentioned below, will do that for you.
|
||||
|
||||
Building TextSecure
|
||||
-------------------
|
||||
Building Signal
|
||||
---------------
|
||||
|
||||
The following steps should help you (re)build TextSecure from the command line.
|
||||
The following steps should help you (re)build Signal from the command line.
|
||||
|
||||
1. Checkout the source somewhere on your filesystem with
|
||||
1. Checkout the Signal-Android project source with the command:
|
||||
|
||||
git clone https://github.com/WhisperSystems/TextSecure.git
|
||||
git clone https://github.com/WhisperSystems/Signal-Android.git
|
||||
|
||||
2. Make sure you have the [Android SDK](https://developer.android.com/sdk/index.html) installed somewhere on your system.
|
||||
2. Make sure you have the [Android SDK](https://developer.android.com/sdk/index.html) installed.
|
||||
3. Ensure that the following packages are installed from the Android SDK manager:
|
||||
* Android SDK Build Tools
|
||||
* SDK Platform
|
||||
* Android SDK Build Tools (see buildToolsVersion in build.gradle)
|
||||
* SDK Platform (API level 22)
|
||||
* Android Support Repository
|
||||
* Google Repository
|
||||
4. Create a local.properties file at the root of your source checkout and add an sdk.dir entry to it.
|
||||
4. Create a local.properties file at the root of your source checkout and add an sdk.dir entry to it. For example:
|
||||
|
||||
sdk.dir=\<path to your sdk installation\>
|
||||
sdk.dir=/Application/android-sdk-macosx
|
||||
|
||||
5. Execute Gradle:
|
||||
|
||||
@@ -38,8 +39,8 @@ Source assets tend to be large binary blobs, which are best stored outside of gi
|
||||
Sample command for generating our audio placeholder image:
|
||||
|
||||
```bash
|
||||
pngs_from_svg.py ic_audio.svg /path/to/TextSecure/res/ 150 "#000" 0.54 _light
|
||||
pngs_from_svg.py ic_audio.svg /path/to/TextSecure/res/ 150 "#fff" 1.0 _dark
|
||||
pngs_from_svg.py ic_audio.svg /path/to/Signal/res/ 150 --color #000 --opacity 0.54 --suffix _light
|
||||
pngs_from_svg.py ic_audio.svg /path/to/Signal/res/ 150 --color #fff --opacity 1.00 --suffix _light
|
||||
```
|
||||
|
||||
Setting up a development environment
|
||||
@@ -48,13 +49,14 @@ Setting up a development environment
|
||||
[Android Studio](https://developer.android.com/sdk/installing/studio.html) is the recommended development environment.
|
||||
|
||||
1. Install Android Studio.
|
||||
2. Make sure the "Android Support Repository" is installed in the Android Studio SDK.
|
||||
3. Make sure the latest "Android SDK build-tools" is installed in the Android Studio SDK.
|
||||
4. Create a new Android Studio project. from the Quickstart pannel (use File > Close Project to see it), choose "Checkout from Version Control" then "git".
|
||||
5. Paste the URL for the TextSecure project when prompted (https://github.com/WhisperSystems/TextSecure.git).
|
||||
6. Android studio should detect the presence of a project file and ask you whether to open it. Click "yes".
|
||||
7. Default config options should be good enough.
|
||||
8. Project initialisation and build should proceed.
|
||||
2. Open Android Studio. On a new installation, the Quickstart panel will appear. If you have open projects, close them using "File > Close Project" to see the Quickstart panel.
|
||||
3. From the Quickstart panel, choose "Configure" then "SDK Manager".
|
||||
4. In the SDK Tools tab of the SDK Manager, make sure that the "Android Support Repository" is installed, and that the latest "Android SDK build-tools" are installed. Click "OK" to return to the Quickstart panel.
|
||||
5. From the Quickstart panel, choose "Checkout from Version Control" then "git".
|
||||
6. Paste the URL for the Signal-Android project when prompted (https://github.com/WhisperSystems/Signal-Android.git).
|
||||
7. Android studio should detect the presence of a project file and ask you whether to open it. Click "yes".
|
||||
9. Default config options should be good enough.
|
||||
9. Project initialisation and build should proceed.
|
||||
|
||||
Contributing code
|
||||
-----------------
|
||||
@@ -67,3 +69,4 @@ Mailing list
|
||||
Development discussion happens on the whispersystems mailing list.
|
||||
[To join](https://lists.riseup.net/www/info/whispersystems)
|
||||
Send emails to whispersystems@lists.riseup.net
|
||||
|
||||
|
||||
88
CONTRIBUTING.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# Contributing to Signal Android
|
||||
|
||||
Thank you for deciding to help this project! If you have contributed to other open source projects before please note that some conventions here might be a bit different than what you are used to. Reading this document will save you, other contributors and the developers time.
|
||||
|
||||
|
||||
## Development Ideology
|
||||
|
||||
Truths which we believe to be self-evident:
|
||||
|
||||
1. **The answer is not more options.** If you feel compelled to add a preference that's exposed to the user, it's very possible you've made a wrong turn somewhere.
|
||||
1. **The user doesn't know what a key is.** We need to minimize the points at which a user is exposed to this sort of terminology as extremely as possible.
|
||||
1. **There are no power users.** The idea that some users "understand" concepts better than others has proven to be, for the most part, false. If anything, "power users" are more dangerous than the rest, and we should avoid exposing dangerous functionality to them.
|
||||
1. **If it's "like PGP," it's wrong.** PGP is our guide for what not to do.
|
||||
1. **It's an asynchronous world.** Be wary of anything that is anti-asynchronous: ACKs, protocol confirmations, or any protocol-level "advisory" message.
|
||||
1. **There is no such thing as time.** Protocol ideas that require synchronized clocks are doomed to failure.
|
||||
|
||||
|
||||
## Translations
|
||||
|
||||
Please do not submit issues or pull requests for translation fixes. Anyone can update the translations in [Transifex](https://www.transifex.com/projects/p/signal-android/). Please submit your corrections there.
|
||||
|
||||
|
||||
## Issues
|
||||
|
||||
### Useful bug reports
|
||||
1. Please search both open and closed issues first to make sure your issue is not a duplicate.
|
||||
1. Read the [Submitting useful bug reports guide](https://github.com/WhisperSystems/Signal-Android/wiki/Submitting-useful-bug-reports) before posting a bug.
|
||||
|
||||
### Issue tracker is for bugs
|
||||
The main purpose of this issue tracker is to track bugs for the Android client. Relevant, concise and to the point comments that help to solve the issue are very welcome.
|
||||
|
||||
##### Send support questions to support
|
||||
Please do **not** ask support questions at the issue tracker. We want to help you using Signal and we have created our support system just for that. You can reach support by sending email to support@whispersystems.org or by going to our [Support Center](http://support.whispersystems.org). You can also search for existing troubleshooting articles at the [Support Center](http://support.whispersystems.org).
|
||||
|
||||
##### Not a discussion forum
|
||||
Please do **not** use this issue tracker as a discussion forum. Discussion related to the bug in question should of course go to the issue itself. However other discussion should take place at the [community forum](https://whispersystems.discoursehosting.net). You can use that forum to discuss any Signal related topics or to just hang out with your fellow users.
|
||||
|
||||
### Don't bump issues
|
||||
Every time someone comments on an issue, GitHub sends email to [everyone who is watching](https://github.com/WhisperSystems/Signal-Android/watchers) the repository (currently around 500 people). Thus bumping issues with :+1:s, _me toos_ or asking for updates generates a lot of unnecessary email notifications. Moreover bumping an issue does not help solve it. Please be respectful of everyone's time and only comment if you have relevant new information to add.
|
||||
|
||||
### Open issues
|
||||
|
||||
#### If it's open it's tracked
|
||||
Have you followed all the points in the [Submitting useful bug reports guide](https://github.com/WhisperSystems/Signal-Android/wiki/Submitting-useful-bug-reports) but nobody has commented on your issue? Is there no milestone or person assigned to it? Don't worry, the developers read every issue and if it's open it means it's tracked and taken into account. It might just take time as other issues have higher priority. And remember that this is an open source project: Everyone is encouraged to take an active role in fixing open issues.
|
||||
|
||||
### Closed issues
|
||||
|
||||
#### "My issue was closed without giving a reason!"
|
||||
Please understand that writing detailed explanations every time for every issue someone comes up with takes time. Sometimes a reason has been posted earlier to another related issue which you can search for. It's also possible that your issue was not in line with the guidelines of the project (see especially the [Development Ideology](https://github.com/WhisperSystems/Signal-Android/blob/master/CONTRIBUTING.md#development-ideology)), or it was decided that the issue is not something that Signal should do at this time.
|
||||
|
||||
|
||||
## Pull requests
|
||||
|
||||
### Sign the Contributor Licence Agreement (CLA)
|
||||
You need to sign our CLA before your pull request can be merged. You can sign it at: https://whispersystems.org/cla/
|
||||
|
||||
### Follow the Code Style Guidelines
|
||||
Before submitting a pull request please check that your code adheres to the [Code Style Guidelines](https://github.com/WhisperSystems/Signal-Android/wiki/Code-Style-Guidelines).
|
||||
|
||||
### Submit only complete PRs and test them
|
||||
Please do not submit pull requests that are still a work in progress. Pull requests should be ready for a merge when you submit them. Also please do not submit pull requests that you have not tested.
|
||||
|
||||
### Smaller is better
|
||||
Please do not try to change too much at once. Big changes are less likely to be merged. If you are a first time contributor start with small and simple PRs to get to know the codebase.
|
||||
|
||||
### Merging can sometimes take a while
|
||||
If your pull request follows all the advice above but still has not been merged it usually means the developers haven't simply had the time to review it yet. We understand that this might feel frustrating. We are sorry!
|
||||
|
||||
### Bithub
|
||||
Accepted pull requests will be rewarded with Bitcoins! After your pull request has been merged you will automatically receive an email to the address you have specified as your Git commit email. Follow the instructions in the email to claim your coins. If you wish to submit your contribution for free please add the word `FREEBIE` in your Git commit message. You may wish to explore some previously merged commits to see how it all works.
|
||||
|
||||
|
||||
## How can I contribute?
|
||||
Anyone can help by
|
||||
- advising new people about the guidelines of this project
|
||||
- redirecting support questions to support@whispersystems.org and the [support site](https://support.whispersystems.org)
|
||||
- redirecting non-bug related discussions to the [community forum](https://whispersystems.discoursehosting.net)
|
||||
- improving documentation in the [wiki](https://github.com/WhisperSystems/Signal-Android/wiki)
|
||||
- [translating](https://www.transifex.com/projects/p/signal-android/)
|
||||
- finding and marking duplicate issues
|
||||
- trying to reproduce issues
|
||||
- finding solutions to open issues and posting relevant findings as comments
|
||||
- submitting pull requests
|
||||
- testing other people's pull requests
|
||||
- spreading the joy of Signal to your friends and family
|
||||
- donating money to our [BitHub](https://www.coinbase.com/checkouts/51dac699e660a4d773216b5ad94d6a0b) or through the [Freedom of the Press Foundation's donation page](https://freedom.press/crowdfunding/signal/)
|
||||
|
||||
[](https://gitter.im/WhisperSystems/Signal-Android?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||
26
Dockerfile
Normal file
@@ -0,0 +1,26 @@
|
||||
FROM ubuntu:14.04.3
|
||||
|
||||
RUN dpkg --add-architecture i386 && \
|
||||
apt-get update -y && \
|
||||
apt-get install -y software-properties-common && \
|
||||
add-apt-repository -y ppa:openjdk-r/ppa && \
|
||||
apt-get update -y && \
|
||||
apt-get install -y libc6:i386=2.19-0ubuntu6.7 libncurses5:i386=5.9+20140118-1ubuntu1 libstdc++6:i386=4.8.4-2ubuntu1~14.04.1 lib32z1=1:1.2.8.dfsg-1ubuntu1 wget openjdk-8-jdk=8u72-b15-1~trusty1 git unzip && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get clean
|
||||
|
||||
ENV ANDROID_SDK_FILENAME android-sdk_r24.4.1-linux.tgz
|
||||
ENV ANDROID_SDK_URL https://dl.google.com/android/${ANDROID_SDK_FILENAME}
|
||||
ENV ANDROID_API_LEVELS android-25
|
||||
ENV ANDROID_BUILD_TOOLS_VERSION 25.0.0
|
||||
ENV ANDROID_HOME /usr/local/android-sdk-linux
|
||||
ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools
|
||||
RUN cd /usr/local/ && \
|
||||
wget -q ${ANDROID_SDK_URL} && \
|
||||
tar -xzf ${ANDROID_SDK_FILENAME} && \
|
||||
rm ${ANDROID_SDK_FILENAME}
|
||||
RUN echo y | android update sdk --no-ui -a --filter ${ANDROID_API_LEVELS}
|
||||
RUN echo y | android update sdk --no-ui -a --filter extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository
|
||||
RUN echo y | android update sdk --no-ui -a --filter tools,platform-tools,build-tools-${ANDROID_BUILD_TOOLS_VERSION}
|
||||
RUN rm -rf ${ANDROID_HOME}/tools && unzip ${ANDROID_HOME}/temp/*.zip -d ${ANDROID_HOME}
|
||||
42
README.md
@@ -1,53 +1,47 @@
|
||||
# TextSecure [](https://travis-ci.org/WhisperSystems/TextSecure)
|
||||
# Signal Android
|
||||
|
||||
TextSecure is a messaging app for simple private communication with friends.
|
||||
Signal is a messaging app for simple private communication with friends.
|
||||
|
||||
TextSecure uses your phone's data connection (WiFi/3G/4G) to communicate securely, optionally supports plain SMS/MMS to function as a unified messenger, and can also encrypt the stored messages on your phone.
|
||||
Signal uses your phone's data connection (WiFi/3G/4G) to communicate securely, optionally supports plain SMS/MMS to function as a unified messenger, and can also encrypt the stored messages on your phone.
|
||||
|
||||
Currently available on the Play store.
|
||||
|
||||
*[](https://play.google.com/store/apps/details?id=org.thoughtcrime.securesms)*
|
||||
<a href="https://play.google.com/store/apps/details?id=org.thoughtcrime.securesms&utm_source=global_co&utm_medium=prtnr&utm_content=Mar2515&utm_campaign=PartBadge&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1"><img alt="Get it on Google Play" src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png" height=36px /></a>
|
||||
|
||||
## Contributing Bug reports
|
||||
We use GitHub for bug tracking. Please search the existing issues for your bug and create a new one if the issue is not yet tracked!
|
||||
|
||||
https://github.com/WhisperSystems/TextSecure/issues
|
||||
https://github.com/WhisperSystems/Signal-Android/issues
|
||||
|
||||
## Joining the Beta
|
||||
Want to live life on the bleeding edge and help out with testing?
|
||||
|
||||
You can subscribe to TextSecure Beta releases in two steps:
|
||||
You can subscribe to Signal Android Beta releases here:
|
||||
https://play.google.com/apps/testing/org.thoughtcrime.securesms
|
||||
|
||||
1. Join the [TextSecure Beta Google+ Community](https://plus.google.com/communities/114424213916773497091).
|
||||
1. After you've joined the community, [subscribe to the beta](https://play.google.com/apps/testing/org.thoughtcrime.securesms).
|
||||
|
||||
If you're interested in a life of peace and tranquility, stick with the standard releases.
|
||||
|
||||
## Contributing Translations
|
||||
Interested in helping to translate TextSecure? Contribute here:
|
||||
Interested in helping to translate Signal? Contribute here:
|
||||
|
||||
https://www.transifex.com/projects/p/textsecure-official/
|
||||
https://www.transifex.com/projects/p/signal-android/
|
||||
|
||||
## Contributing Code
|
||||
Instructions on how to setup your development environment and build TextSecure can be found in [BUILDING.md](https://github.com/WhisperSystems/TextSecure/blob/master/BUILDING.md).
|
||||
Instructions on how to setup your development environment and build Signal can be found in [BUILDING.md](https://github.com/WhisperSystems/Signal-Android/blob/master/BUILDING.md).
|
||||
|
||||
If you're new to the TextSecure codebase, we recommend going through our issues and picking out a simple bug to fix (check the "easy" label in our issues) in order to get yourself familiar.
|
||||
If you're new to the Signal codebase, we recommend going through our issues and picking out a simple bug to fix (check the "easy" label in our issues) in order to get yourself familiar. Also please have a look at the [CONTRIBUTING.md](https://github.com/WhisperSystems/Signal-Android/blob/master/CONTRIBUTING.md), that might answer some of your questions.
|
||||
|
||||
For larger changes and feature ideas, we ask that you propose it on the mailing list for a high-level discussion before implementation.
|
||||
For larger changes and feature ideas, we ask that you propose it on the [unofficial Community Forum](https://whispersystems.discoursehosting.net) for a high-level discussion with the wider community before implementation.
|
||||
|
||||
This repository is set up with [BitHub](https://whispersystems.org/blog/bithub/), so you can make money for committing to TextSecure. The current BitHub price for an accepted pull request is:
|
||||
This repository is set up with [BitHub](https://whispersystems.org/blog/bithub/), so you can make money for committing to Signal. The current BitHub price for an accepted pull request is:
|
||||
|
||||
[](https://whispersystems.org/blog/bithub/)
|
||||
|
||||
## Contributing Ideas
|
||||
Have something you want to say about Open Whisper Systems projects or want to be part of the conversation? Get involved in the mailing list!
|
||||
|
||||
whispersystems@lists.riseup.net
|
||||
|
||||
https://lists.riseup.net/www/info/whispersystems
|
||||
Have something you want to say about Open Whisper Systems projects or want to be part of the conversation? Get involved in the [community forum](https://whispersystems.discoursehosting.net).
|
||||
|
||||
## Contributing Funds
|
||||
[](https://coinbase.com/checkouts/d29fd4c37ca442393e32fdcb95304701)
|
||||
[](https://www.coinbase.com/checkouts/51dac699e660a4d773216b5ad94d6a0b)
|
||||
|
||||
You can add funds to BitHub to directly help further development efforts.
|
||||
|
||||
@@ -56,12 +50,12 @@ Help
|
||||
## Support
|
||||
For troubleshooting and questions, please visit our support center!
|
||||
|
||||
http://support.whispersystems.org/
|
||||
https://support.whispersystems.org/
|
||||
|
||||
## Documentation
|
||||
Looking for documentation? Check out the wiki!
|
||||
|
||||
https://github.com/WhisperSystems/TextSecure/wiki
|
||||
https://github.com/WhisperSystems/Signal-Android/wiki
|
||||
|
||||
# Legal things
|
||||
## Cryptography Notice
|
||||
@@ -77,6 +71,6 @@ The form and manner of this distribution makes it eligible for export under the
|
||||
|
||||
Copyright 2011 Whisper Systems
|
||||
|
||||
Copyright 2013-2014 Open Whisper Systems
|
||||
Copyright 2013-2017 Open Whisper Systems
|
||||
|
||||
Licensed under the GPLv3: http://www.gnu.org/licenses/gpl-3.0.html
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
package org.thoughtcrime.securesms.database;
|
||||
|
||||
import android.net.Uri;
|
||||
|
||||
import org.thoughtcrime.securesms.TextSecureTestCase;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import ws.com.google.android.mms.pdu.PduPart;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyFloat;
|
||||
import static org.mockito.Matchers.anyLong;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.doNothing;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
public class PartDatabaseTest extends TextSecureTestCase {
|
||||
private static final long PART_ID = 1L;
|
||||
|
||||
private PartDatabase database;
|
||||
|
||||
@Override
|
||||
public void setUp() {
|
||||
database = spy(DatabaseFactory.getPartDatabase(getInstrumentation().getTargetContext()));
|
||||
}
|
||||
|
||||
public void testTaskNotRunWhenThumbnailExists() throws Exception {
|
||||
when(database.getPart(eq(PART_ID))).thenReturn(getPduPartSkeleton("x/x"));
|
||||
doReturn(mock(InputStream.class)).when(database).getDataStream(any(MasterSecret.class), anyLong(), eq("thumbnail"));
|
||||
|
||||
database.getThumbnailStream(null, PART_ID);
|
||||
|
||||
verify(database, never()).updatePartThumbnail(any(MasterSecret.class), anyLong(), any(PduPart.class), any(InputStream.class), anyFloat());
|
||||
}
|
||||
|
||||
public void testTaskRunWhenThumbnailMissing() throws Exception {
|
||||
when(database.getPart(eq(PART_ID))).thenReturn(getPduPartSkeleton("image/png"));
|
||||
doReturn(null).when(database).getDataStream(any(MasterSecret.class), anyLong(), eq("thumbnail"));
|
||||
doNothing().when(database).updatePartThumbnail(any(MasterSecret.class), anyLong(), any(PduPart.class), any(InputStream.class), anyFloat());
|
||||
|
||||
try {
|
||||
database.new ThumbnailFetchCallable(mock(MasterSecret.class), PART_ID).call();
|
||||
throw new AssertionError("didn't try to generate thumbnail");
|
||||
} catch (FileNotFoundException fnfe) {
|
||||
// success
|
||||
}
|
||||
}
|
||||
|
||||
private PduPart getPduPartSkeleton(String contentType) {
|
||||
PduPart part = new PduPart();
|
||||
part.setContentType(contentType.getBytes());
|
||||
part.setDataUri(Uri.EMPTY);
|
||||
return part;
|
||||
}
|
||||
}
|
||||
@@ -1,154 +0,0 @@
|
||||
package org.thoughtcrime.securesms.jobs;
|
||||
|
||||
import android.test.AndroidTestCase;
|
||||
|
||||
import org.thoughtcrime.securesms.TextSecureTestCase;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.dependencies.AxolotlStorageModule;
|
||||
import org.whispersystems.libaxolotl.ecc.Curve;
|
||||
import org.whispersystems.libaxolotl.state.SignedPreKeyRecord;
|
||||
import org.whispersystems.libaxolotl.state.SignedPreKeyStore;
|
||||
import org.whispersystems.textsecure.api.TextSecureAccountManager;
|
||||
import org.whispersystems.textsecure.api.push.SignedPreKeyEntity;
|
||||
import org.whispersystems.textsecure.api.push.exceptions.PushNetworkException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.ObjectGraph;
|
||||
import dagger.Provides;
|
||||
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
public class CleanPreKeysJobTest extends TextSecureTestCase {
|
||||
|
||||
public void testSignedPreKeyRotationNotRegistered() throws IOException, MasterSecretJob.RequirementNotMetException {
|
||||
TextSecureAccountManager accountManager = mock(TextSecureAccountManager.class);
|
||||
SignedPreKeyStore signedPreKeyStore = mock(SignedPreKeyStore.class);
|
||||
MasterSecret masterSecret = mock(MasterSecret.class);
|
||||
when(accountManager.getSignedPreKey()).thenReturn(null);
|
||||
|
||||
CleanPreKeysJob cleanPreKeysJob = new CleanPreKeysJob(getContext());
|
||||
|
||||
ObjectGraph objectGraph = ObjectGraph.create(new TestModule(accountManager, signedPreKeyStore));
|
||||
objectGraph.inject(cleanPreKeysJob);
|
||||
|
||||
cleanPreKeysJob.onRun(masterSecret);
|
||||
|
||||
verify(accountManager).getSignedPreKey();
|
||||
verifyNoMoreInteractions(signedPreKeyStore);
|
||||
}
|
||||
|
||||
public void testSignedPreKeyEviction() throws Exception {
|
||||
SignedPreKeyStore signedPreKeyStore = mock(SignedPreKeyStore.class);
|
||||
TextSecureAccountManager accountManager = mock(TextSecureAccountManager.class);
|
||||
SignedPreKeyEntity currentSignedPreKeyEntity = mock(SignedPreKeyEntity.class);
|
||||
MasterSecret masterSecret = mock(MasterSecret.class);
|
||||
|
||||
when(currentSignedPreKeyEntity.getKeyId()).thenReturn(3133);
|
||||
when(accountManager.getSignedPreKey()).thenReturn(currentSignedPreKeyEntity);
|
||||
|
||||
final SignedPreKeyRecord currentRecord = new SignedPreKeyRecord(3133, System.currentTimeMillis(), Curve.generateKeyPair(), new byte[64]);
|
||||
|
||||
List<SignedPreKeyRecord> records = new LinkedList<SignedPreKeyRecord>() {{
|
||||
add(new SignedPreKeyRecord(2, 11, Curve.generateKeyPair(), new byte[32]));
|
||||
add(new SignedPreKeyRecord(4, System.currentTimeMillis() - 100, Curve.generateKeyPair(), new byte[64]));
|
||||
add(currentRecord);
|
||||
add(new SignedPreKeyRecord(3, System.currentTimeMillis() - 90, Curve.generateKeyPair(), new byte[64]));
|
||||
add(new SignedPreKeyRecord(1, 10, Curve.generateKeyPair(), new byte[32]));
|
||||
}};
|
||||
|
||||
when(signedPreKeyStore.loadSignedPreKeys()).thenReturn(records);
|
||||
when(signedPreKeyStore.loadSignedPreKey(eq(3133))).thenReturn(currentRecord);
|
||||
|
||||
CleanPreKeysJob cleanPreKeysJob = new CleanPreKeysJob(getContext());
|
||||
|
||||
ObjectGraph objectGraph = ObjectGraph.create(new TestModule(accountManager, signedPreKeyStore));
|
||||
objectGraph.inject(cleanPreKeysJob);
|
||||
|
||||
cleanPreKeysJob.onRun(masterSecret);
|
||||
|
||||
verify(signedPreKeyStore).removeSignedPreKey(eq(1));
|
||||
verify(signedPreKeyStore, times(1)).removeSignedPreKey(anyInt());
|
||||
}
|
||||
|
||||
public void testSignedPreKeyNoEviction() throws Exception {
|
||||
SignedPreKeyStore signedPreKeyStore = mock(SignedPreKeyStore.class);
|
||||
TextSecureAccountManager accountManager = mock(TextSecureAccountManager.class);
|
||||
SignedPreKeyEntity currentSignedPreKeyEntity = mock(SignedPreKeyEntity.class);
|
||||
|
||||
when(currentSignedPreKeyEntity.getKeyId()).thenReturn(3133);
|
||||
when(accountManager.getSignedPreKey()).thenReturn(currentSignedPreKeyEntity);
|
||||
|
||||
final SignedPreKeyRecord currentRecord = new SignedPreKeyRecord(3133, System.currentTimeMillis(), Curve.generateKeyPair(), new byte[64]);
|
||||
|
||||
List<SignedPreKeyRecord> records = new LinkedList<SignedPreKeyRecord>() {{
|
||||
add(currentRecord);
|
||||
}};
|
||||
|
||||
when(signedPreKeyStore.loadSignedPreKeys()).thenReturn(records);
|
||||
when(signedPreKeyStore.loadSignedPreKey(eq(3133))).thenReturn(currentRecord);
|
||||
|
||||
CleanPreKeysJob cleanPreKeysJob = new CleanPreKeysJob(getContext());
|
||||
|
||||
ObjectGraph objectGraph = ObjectGraph.create(new TestModule(accountManager, signedPreKeyStore));
|
||||
objectGraph.inject(cleanPreKeysJob);
|
||||
|
||||
verify(signedPreKeyStore, never()).removeSignedPreKey(anyInt());
|
||||
}
|
||||
|
||||
public void testConnectionError() throws Exception {
|
||||
SignedPreKeyStore signedPreKeyStore = mock(SignedPreKeyStore.class);
|
||||
TextSecureAccountManager accountManager = mock(TextSecureAccountManager.class);
|
||||
MasterSecret masterSecret = mock(MasterSecret.class);
|
||||
|
||||
when(accountManager.getSignedPreKey()).thenThrow(new PushNetworkException("Connectivity error!"));
|
||||
|
||||
CleanPreKeysJob cleanPreKeysJob = new CleanPreKeysJob(getContext());
|
||||
|
||||
ObjectGraph objectGraph = ObjectGraph.create(new TestModule(accountManager, signedPreKeyStore));
|
||||
objectGraph.inject(cleanPreKeysJob);
|
||||
|
||||
try {
|
||||
cleanPreKeysJob.onRun(masterSecret);
|
||||
throw new AssertionError("should have failed!");
|
||||
} catch (IOException e) {
|
||||
assertTrue(cleanPreKeysJob.onShouldRetry(e));
|
||||
}
|
||||
}
|
||||
|
||||
@Module(injects = {CleanPreKeysJob.class})
|
||||
public static class TestModule {
|
||||
private final TextSecureAccountManager accountManager;
|
||||
private final SignedPreKeyStore signedPreKeyStore;
|
||||
|
||||
private TestModule(TextSecureAccountManager accountManager, SignedPreKeyStore signedPreKeyStore) {
|
||||
this.accountManager = accountManager;
|
||||
this.signedPreKeyStore = signedPreKeyStore;
|
||||
}
|
||||
|
||||
@Provides TextSecureAccountManager provideTextSecureAccountManager() {
|
||||
return accountManager;
|
||||
}
|
||||
|
||||
@Provides
|
||||
AxolotlStorageModule.SignedPreKeyStoreFactory provideSignedPreKeyStore() {
|
||||
return new AxolotlStorageModule.SignedPreKeyStoreFactory() {
|
||||
@Override
|
||||
public SignedPreKeyStore create(MasterSecret masterSecret) {
|
||||
return signedPreKeyStore;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,155 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2015 Open Whisper Systems
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.thoughtcrime.securesms.service;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Telephony;
|
||||
import android.telephony.PhoneNumberUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.thoughtcrime.securesms.TextSecureTestCase;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
|
||||
import static org.mockito.Matchers.anyBoolean;
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Matchers.contains;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
public class SmsListenerTest extends TextSecureTestCase {
|
||||
|
||||
private static final String CHALLENGE_SMS_3_3 = "Your TextSecure verification code: 337-337";
|
||||
private static final String CHALLENGE_SMS_3_4 = "Your TextSecure verification code: 337-1337";
|
||||
private static final String CHALLENGE_SMS_4_3 = "Your TextSecure verification code: 1337-337";
|
||||
private static final String CHALLENGE_SMS_4_4 = "Your TextSecure verification code: 1337-1337";
|
||||
private static final String CHALLENGE_SMS_4_4_PREPEND = "XXXYour TextSecure verification code: 1337-1337";
|
||||
private static final String CHALLENGE_SMS_4_4_APPEND = "Your TextSecure verification code: 1337-1337XXX";
|
||||
private static final String[] CHALLENGE_SMS = {
|
||||
CHALLENGE_SMS_3_3, CHALLENGE_SMS_3_4, CHALLENGE_SMS_4_3,
|
||||
CHALLENGE_SMS_4_4, CHALLENGE_SMS_4_4_PREPEND, CHALLENGE_SMS_4_4_APPEND
|
||||
};
|
||||
|
||||
private static final String CHALLENGE_3_3 = "337337";
|
||||
private static final String CHALLENGE_3_4 = "3371337";
|
||||
private static final String CHALLENGE_4_3 = "1337337";
|
||||
private static final String CHALLENGE_4_4 = "13371337";
|
||||
private static final String[] CHALLENGES = {
|
||||
CHALLENGE_3_3, CHALLENGE_3_4, CHALLENGE_4_3,
|
||||
CHALLENGE_4_4, CHALLENGE_4_4, CHALLENGE_4_4,
|
||||
};
|
||||
|
||||
/*
|
||||
credit :D
|
||||
http://stackoverflow.com/a/12338541
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
private static byte[] buildSmsPdu(String sender, String body) throws Exception{
|
||||
byte[] scBytes = PhoneNumberUtils.networkPortionToCalledPartyBCD("0000000000");
|
||||
byte[] senderBytes = PhoneNumberUtils.networkPortionToCalledPartyBCD(sender);
|
||||
int lsmcs = scBytes.length;
|
||||
byte[] dateBytes = new byte[7];
|
||||
Calendar calendar = new GregorianCalendar();
|
||||
|
||||
dateBytes[0] = reverseByte((byte) (calendar.get(Calendar.YEAR)));
|
||||
dateBytes[1] = reverseByte((byte) (calendar.get(Calendar.MONTH) + 1));
|
||||
dateBytes[2] = reverseByte((byte) (calendar.get(Calendar.DAY_OF_MONTH)));
|
||||
dateBytes[3] = reverseByte((byte) (calendar.get(Calendar.HOUR_OF_DAY)));
|
||||
dateBytes[4] = reverseByte((byte) (calendar.get(Calendar.MINUTE)));
|
||||
dateBytes[5] = reverseByte((byte) (calendar.get(Calendar.SECOND)));
|
||||
dateBytes[6] = reverseByte((byte) ((calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET)) / (60 * 1000 * 15)));
|
||||
|
||||
ByteArrayOutputStream bo = new ByteArrayOutputStream();
|
||||
bo.write(lsmcs);
|
||||
bo.write(scBytes);
|
||||
bo.write(0x04);
|
||||
bo.write((byte) sender.length());
|
||||
bo.write(senderBytes);
|
||||
bo.write(0x00);
|
||||
bo.write(0x00);
|
||||
bo.write(dateBytes);
|
||||
|
||||
String sReflectedClassName = "com.android.internal.telephony.GsmAlphabet";
|
||||
Class cReflectedNFCExtras = Class.forName(sReflectedClassName);
|
||||
Method stringToGsm7BitPacked = cReflectedNFCExtras.getMethod("stringToGsm7BitPacked", new Class[] { String.class });
|
||||
|
||||
stringToGsm7BitPacked.setAccessible(true);
|
||||
byte[] bodybytes = (byte[]) stringToGsm7BitPacked.invoke(null, body);
|
||||
bo.write(bodybytes);
|
||||
|
||||
return bo.toByteArray();
|
||||
}
|
||||
|
||||
private static byte reverseByte(byte b) {
|
||||
return (byte) ((b & 0xF0) >> 4 | (b & 0x0F) << 4);
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
private Intent buildSmsReceivedIntent(String smsBody) throws Exception {
|
||||
final Intent smsIntent = mock(Intent.class);
|
||||
final Bundle smsExtras = new Bundle();
|
||||
final byte[] smsPdu = buildSmsPdu("15555555555", smsBody);
|
||||
|
||||
smsExtras.putSerializable("pdus", new Object[]{smsPdu});
|
||||
|
||||
when(smsIntent.getAction()).thenReturn(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
|
||||
when(smsIntent.getExtras()).thenReturn(smsExtras);
|
||||
|
||||
return smsIntent;
|
||||
}
|
||||
|
||||
public void testReceiveChallenges() throws Exception {
|
||||
final SmsListener smsListener = new SmsListener();
|
||||
|
||||
for (int i = 0; i < CHALLENGES.length; i++) {
|
||||
final String CHALLENGE = CHALLENGES[i];
|
||||
final String CHALLENGE_SMS = SmsListenerTest.CHALLENGE_SMS[i];
|
||||
|
||||
final Context mockContext = mock(Context.class);
|
||||
final SharedPreferences mockPreferences = mock(SharedPreferences.class);
|
||||
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
|
||||
|
||||
when(mockContext.getPackageName()).thenReturn(getContext().getPackageName());
|
||||
when(mockContext.getSharedPreferences(anyString(), anyInt())).thenReturn(mockPreferences);
|
||||
when(mockPreferences.getBoolean(contains("pref_verifying"), anyBoolean())).thenReturn(true);
|
||||
|
||||
try {
|
||||
smsListener.onReceive(mockContext, buildSmsReceivedIntent(CHALLENGE_SMS));
|
||||
} catch (IllegalStateException e) {
|
||||
Log.d(getClass().getName(), "some api levels are picky with abortBroadcast()");
|
||||
}
|
||||
|
||||
verify(mockContext, times(1)).sendBroadcast(intentCaptor.capture());
|
||||
|
||||
final Intent sendIntent = intentCaptor.getValue();
|
||||
assertTrue(sendIntent.getAction().equals(RegistrationService.CHALLENGE_EVENT));
|
||||
assertTrue(sendIntent.getStringExtra(RegistrationService.CHALLENGE_EXTRA).equals(CHALLENGE));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
package org.thoughtcrime.securesms.util;
|
||||
|
||||
import android.test.AndroidTestCase;
|
||||
|
||||
import junit.framework.AssertionFailedError;
|
||||
|
||||
import org.thoughtcrime.securesms.TextSecureTestCase;
|
||||
import org.whispersystems.textsecure.api.util.InvalidNumberException;
|
||||
import org.whispersystems.textsecure.api.util.PhoneNumberFormatter;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class PhoneNumberFormatterTest extends TextSecureTestCase {
|
||||
private static final String LOCAL_NUMBER = "+15555555555";
|
||||
|
||||
public void testFormatNumberE164() throws Exception, InvalidNumberException {
|
||||
assertThat(PhoneNumberFormatter.formatNumber("(555) 555-5555", LOCAL_NUMBER)).isEqualTo(LOCAL_NUMBER);
|
||||
assertThat(PhoneNumberFormatter.formatNumber("555-5555", LOCAL_NUMBER)).isEqualTo(LOCAL_NUMBER);
|
||||
assertThat(PhoneNumberFormatter.formatNumber("(123) 555-5555", LOCAL_NUMBER)).isNotEqualTo(LOCAL_NUMBER);
|
||||
}
|
||||
|
||||
public void testFormatNumberEmail() throws Exception {
|
||||
try {
|
||||
PhoneNumberFormatter.formatNumber("person@domain.com", LOCAL_NUMBER);
|
||||
throw new AssertionFailedError("should have thrown on email");
|
||||
} catch (InvalidNumberException ine) {
|
||||
// success
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
}
|
||||
}
|
||||
78
apkdiff/apkdiff.py
Executable file
@@ -0,0 +1,78 @@
|
||||
#! /usr/bin/env python
|
||||
|
||||
import sys
|
||||
from zipfile import ZipFile
|
||||
|
||||
class ApkDiff:
|
||||
|
||||
IGNORE_FILES = ["META-INF/CERT.RSA", "META-INF/CERT.SF", "META-INF/MANIFEST.MF"]
|
||||
|
||||
def compare(self, sourceApk, destinationApk):
|
||||
sourceZip = ZipFile(sourceApk, 'r')
|
||||
destinationZip = ZipFile(destinationApk, 'r')
|
||||
|
||||
if self.compareManifests(sourceZip, destinationZip) and self.compareEntries(sourceZip, destinationZip) == True:
|
||||
print "APKs match!"
|
||||
else:
|
||||
print "APKs don't match!"
|
||||
|
||||
def compareManifests(self, sourceZip, destinationZip):
|
||||
sourceEntrySortedList = sorted(sourceZip.namelist())
|
||||
destinationEntrySortedList = sorted(destinationZip.namelist())
|
||||
|
||||
for ignoreFile in self.IGNORE_FILES:
|
||||
while ignoreFile in sourceEntrySortedList: sourceEntrySortedList.remove(ignoreFile)
|
||||
while ignoreFile in destinationEntrySortedList: destinationEntrySortedList.remove(ignoreFile)
|
||||
|
||||
if len(sourceEntrySortedList) != len(destinationEntrySortedList):
|
||||
print "Manifest lengths differ!"
|
||||
|
||||
for (sourceEntryName, destinationEntryName) in zip(sourceEntrySortedList, destinationEntrySortedList):
|
||||
if sourceEntryName != destinationEntryName:
|
||||
print "Sorted manifests don't match, %s vs %s" % (sourceEntryName, destinationEntryName)
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def compareEntries(self, sourceZip, destinationZip):
|
||||
sourceInfoList = filter(lambda sourceInfo: sourceInfo.filename not in self.IGNORE_FILES, sourceZip.infolist())
|
||||
destinationInfoList = filter(lambda destinationInfo: destinationInfo.filename not in self.IGNORE_FILES, destinationZip.infolist())
|
||||
|
||||
if len(sourceInfoList) != len(destinationInfoList):
|
||||
print "APK info lists of different length!"
|
||||
return False
|
||||
|
||||
for sourceEntryInfo in sourceInfoList:
|
||||
for destinationEntryInfo in list(destinationInfoList):
|
||||
if sourceEntryInfo.filename == destinationEntryInfo.filename:
|
||||
sourceEntry = sourceZip.open(sourceEntryInfo, 'r')
|
||||
destinationEntry = destinationZip.open(destinationEntryInfo, 'r')
|
||||
|
||||
if self.compareFiles(sourceEntry, destinationEntry) != True:
|
||||
print "APK entry %s does not match %s!" % (sourceEntryInfo.filename, destinationEntryInfo.filename)
|
||||
return False
|
||||
|
||||
destinationInfoList.remove(destinationEntryInfo)
|
||||
break
|
||||
|
||||
return True
|
||||
|
||||
def compareFiles(self, sourceFile, destinationFile):
|
||||
sourceChunk = sourceFile.read(1024)
|
||||
destinationChunk = destinationFile.read(1024)
|
||||
|
||||
while sourceChunk != "" or destinationChunk != "":
|
||||
if sourceChunk != destinationChunk:
|
||||
return False
|
||||
|
||||
sourceChunk = sourceFile.read(1024)
|
||||
destinationChunk = destinationFile.read(1024)
|
||||
|
||||
return True
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 3:
|
||||
print "Usage: apkdiff <pathToFirstApk> <pathToSecondApk>"
|
||||
sys.exit(1)
|
||||
|
||||
ApkDiff().compare(sys.argv[1], sys.argv[2])
|
||||
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 347 KiB |
|
Before Width: | Height: | Size: 436 KiB |
|
Before Width: | Height: | Size: 515 KiB |
|
Before Width: | Height: | Size: 273 KiB |
|
Before Width: | Height: | Size: 315 KiB |
BIN
assets/emoji/Activity.png
Normal file
|
After Width: | Height: | Size: 523 KiB |
BIN
assets/emoji/Flags.png
Normal file
|
After Width: | Height: | Size: 818 KiB |
BIN
assets/emoji/Foods.png
Normal file
|
After Width: | Height: | Size: 524 KiB |
BIN
assets/emoji/Nature.png
Normal file
|
After Width: | Height: | Size: 959 KiB |
BIN
assets/emoji/Objects.png
Normal file
|
After Width: | Height: | Size: 938 KiB |
BIN
assets/emoji/People.png
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
BIN
assets/emoji/Places.png
Normal file
|
After Width: | Height: | Size: 691 KiB |
BIN
assets/emoji/Symbols.png
Normal file
|
After Width: | Height: | Size: 741 KiB |
BIN
assets/stickers/animals/anteater.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
assets/stickers/animals/bat.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
assets/stickers/animals/beetle.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
assets/stickers/animals/bulldog.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/stickers/animals/butterfly.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
assets/stickers/animals/camel.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
assets/stickers/animals/cat.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/stickers/animals/chameleon.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
assets/stickers/animals/clown-fish.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
assets/stickers/animals/cobra.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
assets/stickers/animals/cow.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
assets/stickers/animals/crab.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/stickers/animals/crocodile.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
assets/stickers/animals/duck.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
assets/stickers/animals/elephant.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
assets/stickers/animals/frog.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
assets/stickers/animals/giraffe.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
assets/stickers/animals/hen.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
assets/stickers/animals/hippopotamus.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
assets/stickers/animals/kangaroo.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
assets/stickers/animals/lion.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/stickers/animals/llama.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
assets/stickers/animals/macaw.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
assets/stickers/animals/monkey.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/stickers/animals/moose.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
assets/stickers/animals/mouse.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
assets/stickers/animals/octopus.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
assets/stickers/animals/ostrich.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
assets/stickers/animals/owl.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
assets/stickers/animals/panda.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
assets/stickers/animals/pelican.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
assets/stickers/animals/penguin.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
assets/stickers/animals/pig.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
BIN
assets/stickers/animals/rabbit.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
assets/stickers/animals/racoon.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
BIN
assets/stickers/animals/ray.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
assets/stickers/animals/rhinoceros.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
assets/stickers/animals/sea-cow.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
assets/stickers/animals/shark.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
assets/stickers/animals/sheep.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
assets/stickers/animals/siberian-husky.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
assets/stickers/animals/sloth.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
assets/stickers/animals/snake.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
assets/stickers/animals/spider.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/stickers/animals/squirrel.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
assets/stickers/animals/swan.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
assets/stickers/animals/tiger.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
assets/stickers/animals/toucan.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
assets/stickers/animals/turtle.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
assets/stickers/animals/whale.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
assets/stickers/clothes/backpack.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
assets/stickers/clothes/bathrobe.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
assets/stickers/clothes/belt.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
assets/stickers/clothes/boot.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
assets/stickers/clothes/bow-tie.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
assets/stickers/clothes/bowler-hat.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
assets/stickers/clothes/boxers.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
assets/stickers/clothes/bra.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
assets/stickers/clothes/cap.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
assets/stickers/clothes/dress-1.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
assets/stickers/clothes/dress-2.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
assets/stickers/clothes/dress-3.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
assets/stickers/clothes/dress.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
assets/stickers/clothes/glasses.png
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
assets/stickers/clothes/hat.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
assets/stickers/clothes/high-heel.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
assets/stickers/clothes/jacket-1.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
assets/stickers/clothes/jacket-2.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
assets/stickers/clothes/jacket-3.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
assets/stickers/clothes/jacket-4.png
Normal file
|
After Width: | Height: | Size: 11 KiB |