forked from I2P_Developers/i2p.i2p
Compare commits
3275 Commits
i2p-0.9.28
...
build-debi
Author | SHA1 | Date | |
---|---|---|---|
f1d6fc7a68 | |||
36bbe6cb69 | |||
0d89f24965 | |||
14dd91f17e | |||
c19df57e48 | |||
6ab0bd2f89 | |||
2cc26762b4 | |||
bb52124f98 | |||
aace7f6914 | |||
c9a7ddef44 | |||
ad347cada7 | |||
6c2759dda7 | |||
75e81b7aca | |||
e3208c982b | |||
2dcffc6f29 | |||
![]() |
29cbac6a41 | ||
![]() |
e48ba4b83c | ||
![]() |
1dfdf79d15 | ||
b2f4445f50 | |||
acbb8d1a24 | |||
bd1017ba92 | |||
![]() |
cb22f31d96 | ||
![]() |
451e53a674 | ||
![]() |
9f7b0390a3 | ||
![]() |
c400232cdf | ||
c87e74ea1d | |||
![]() |
c95430f33b | ||
4a9131c39d | |||
b47269f14e | |||
fb317b44ba | |||
e64e12b3fb | |||
![]() |
08c46e55f5 | ||
![]() |
5e5886395c | ||
4776080ce6 | |||
79a868b8fe | |||
![]() |
c79e6455fd | ||
![]() |
b7262aa592 | ||
596f6e01cc | |||
![]() |
d95c85cdbe | ||
f71e59a049 | |||
169fb59d7d | |||
![]() |
922178b2c7 | ||
![]() |
74a9193ba5 | ||
![]() |
335409f1d2 | ||
![]() |
d6edb9e96c | ||
f150855f1c | |||
![]() |
655ce09796 | ||
![]() |
91ebec15d5 | ||
![]() |
b17d321503 | ||
![]() |
a6398d88a9 | ||
![]() |
59969db16c | ||
![]() |
b68a5ea7fd | ||
![]() |
c2234685b9 | ||
![]() |
ce7daaa02a | ||
![]() |
b19999f95a | ||
![]() |
92ecc9f8e8 | ||
![]() |
aa2ba92db8 | ||
![]() |
5f3c41244b | ||
![]() |
bf29132898 | ||
![]() |
a424331b78 | ||
![]() |
ccb0c279f7 | ||
![]() |
7fe01fb9a7 | ||
![]() |
66c4c10a78 | ||
![]() |
163967311e | ||
![]() |
75734448c5 | ||
![]() |
aed1de84b8 | ||
![]() |
51560a8ec8 | ||
![]() |
ec89a80e80 | ||
![]() |
41c7b7382a | ||
![]() |
b4e1fbd857 | ||
![]() |
517ff4fa24 | ||
![]() |
106b1a696d | ||
![]() |
6cab545c45 | ||
![]() |
619923dbf8 | ||
![]() |
ed0ecdf253 | ||
![]() |
d42ef2223d | ||
![]() |
e461004ed9 | ||
![]() |
2e180d4c60 | ||
![]() |
152ad1659b | ||
![]() |
888311e34f | ||
![]() |
2df5fb972a | ||
![]() |
a481255adb | ||
![]() |
139594df8f | ||
![]() |
659ab97f69 | ||
![]() |
963a4fe89c | ||
![]() |
4c4dbae107 | ||
![]() |
6978049416 | ||
![]() |
46fe1ba74a | ||
![]() |
13bd5e4938 | ||
![]() |
bbacf85245 | ||
![]() |
68f011f344 | ||
![]() |
8bd2384ac8 | ||
![]() |
54dda1a15f | ||
![]() |
3f44a555ba | ||
![]() |
86cbb2ed4e | ||
![]() |
2569123055 | ||
![]() |
afa4b9e66d | ||
![]() |
67bd5a32fd | ||
![]() |
ada3629507 | ||
![]() |
dcb7314306 | ||
![]() |
e3c2ad6354 | ||
![]() |
178ea252d5 | ||
![]() |
7e4ba4eb31 | ||
![]() |
de43de17f6 | ||
![]() |
2ceb9c429a | ||
![]() |
0b59f53fe9 | ||
![]() |
62fce859b9 | ||
![]() |
9fc97764c5 | ||
![]() |
2813d9412d | ||
![]() |
a0bf76a4b1 | ||
![]() |
d2a79e8837 | ||
![]() |
738ef496d4 | ||
![]() |
a2734ffa72 | ||
![]() |
8606d30e9a | ||
![]() |
a45084cfc3 | ||
![]() |
eeaf6f3514 | ||
![]() |
9e18ff1cd1 | ||
![]() |
665239fd37 | ||
![]() |
12f9a7187e | ||
![]() |
8835351b99 | ||
![]() |
a3c44912f2 | ||
![]() |
db9f735376 | ||
![]() |
875a7242d4 | ||
![]() |
51ecdc64a4 | ||
![]() |
7b785ea454 | ||
![]() |
8f5fc44755 | ||
![]() |
010dbfa6f2 | ||
![]() |
e20a19c358 | ||
![]() |
387e513949 | ||
![]() |
5e005e6520 | ||
![]() |
e88f40cd95 | ||
![]() |
82e93a53a3 | ||
fee5668c1c | |||
![]() |
abb8cbe75d | ||
![]() |
340df51429 | ||
![]() |
bec8feb05a | ||
![]() |
d86ccded53 | ||
![]() |
db7d92a5cd | ||
![]() |
30ffdd03c7 | ||
251d8de943 | |||
![]() |
5e8de68746 | ||
![]() |
8ae29c8c00 | ||
![]() |
542efa0d9a | ||
![]() |
23c80accfa | ||
![]() |
b909430725 | ||
![]() |
20b413bc67 | ||
![]() |
a9b6b86183 | ||
![]() |
66b724759d | ||
![]() |
56059448c5 | ||
![]() |
1c52eeb910 | ||
![]() |
4aefe4bf7a | ||
![]() |
b9444cdc51 | ||
![]() |
eb72e4c9f5 | ||
![]() |
aa181ee43f | ||
![]() |
ab04f92072 | ||
![]() |
0830329eaf | ||
![]() |
2d154cc90e | ||
![]() |
183280871f | ||
![]() |
067ee80ba0 | ||
![]() |
804e2f39f9 | ||
![]() |
0ad7e52b71 | ||
![]() |
e15110bbe1 | ||
![]() |
2cffda6974 | ||
2300f6c226 | |||
1ed8a1b6f3 | |||
c4ed7719e8 | |||
a98fe45204 | |||
5a3e26453f | |||
c259000cdb | |||
d683f0d9eb | |||
48b8886224 | |||
1097220d31 | |||
fdeae72d38 | |||
f870bc2ccd | |||
ec3bfa3cb7 | |||
c3f7c5d154 | |||
127b93c1e2 | |||
cd019f258f | |||
889b7361fe | |||
99f6d4aba4 | |||
69deddcbc7 | |||
58020b4b58 | |||
df43e72a08 | |||
326e2c630c | |||
36fdfd529f | |||
94bdc9c5b3 | |||
c60e51514c | |||
7dcbbf17c3 | |||
5551deb246 | |||
6e8fd42efd | |||
5020100ef8 | |||
6c2c6abfb9 | |||
![]() |
4940c34779 | ||
![]() |
6d5aebeaa0 | ||
d8924119b5 | |||
4b445e7d35 | |||
17e47a0c93 | |||
2ffb570850 | |||
aef2fb8ce0 | |||
875fcdfb94 | |||
![]() |
151f856b0a | ||
337787be0e | |||
798521466d | |||
678c035fa3 | |||
ccb4210f8b | |||
7e5dc6ad64 | |||
31622d0458 | |||
f9b18545f9 | |||
![]() |
e67eccd1eb | ||
![]() |
cefe212a17 | ||
![]() |
8a76d71bd5 | ||
![]() |
806df95114 | ||
![]() |
c6c0b9ce8a | ||
00a0970c95 | |||
cb1bd95f2b | |||
d12b52f82a | |||
891ffaac09 | |||
36fbf0e332 | |||
e811238d60 | |||
c9e6bef825 | |||
0f002b9b69 | |||
f179a057bc | |||
6f5042be8f | |||
2044474549 | |||
0b0b93f26f | |||
595f8762ab | |||
8644eb431e | |||
223afdfc7e | |||
de41cab08e | |||
3606a42ea8 | |||
6887c7edae | |||
![]() |
4a00691385 | ||
![]() |
1d0a2c4fac | ||
![]() |
d0016380e5 | ||
29dc311c6a | |||
7aa78a1aed | |||
989f64192f | |||
c908c6bd05 | |||
![]() |
9f51b72cab | ||
a2fd817915 | |||
5bafdd05a9 | |||
![]() |
e18708bdbe | ||
![]() |
f6687c1f88 | ||
![]() |
b9eabca403 | ||
![]() |
9ec2c62f2f | ||
d4152ea546 | |||
8cc62b5b42 | |||
e242015145 | |||
35da97936d | |||
bfe21176ea | |||
d1dd9ab517 | |||
c18dbe974a | |||
f69563da75 | |||
057eca56d5 | |||
a21a64e0c6 | |||
751af5bcd8 | |||
c8605009ba | |||
5625caebda | |||
fc0a78dd7b | |||
90aab37002 | |||
5c1a529df0 | |||
6fa015c410 | |||
2d1e68b53b | |||
35012a3bad | |||
190b76d7fd | |||
![]() |
8d0b1214d2 | ||
70eb2a49f9 | |||
f231ea0951 | |||
f9ffdd5137 | |||
![]() |
38f9955391 | ||
517ff9af28 | |||
62a91acb40 | |||
69a5266675 | |||
e671741329 | |||
ab55f27ea4 | |||
cf88b3057a | |||
af97eedcbb | |||
7823001594 | |||
a49f87179a | |||
b52f85ac38 | |||
470bc77551 | |||
a0822a6b71 | |||
15da2f85ad | |||
9b3ff9e615 | |||
df1db163f0 | |||
4a4d814a17 | |||
![]() |
c84360ba4b | ||
6a6064d614 | |||
49565a99f9 | |||
ee27bc3bbf | |||
25899d41d5 | |||
35f6a2e2bf | |||
9ae5cbbc87 | |||
0ace93cec7 | |||
d387448794 | |||
4d82917b94 | |||
![]() |
7a77f48963 | ||
dee5dfc682 | |||
5ed6f834c1 | |||
3b8e5f0763 | |||
7c1798513d | |||
e54950e02e | |||
b2f060795c | |||
940ad61ccc | |||
c1f531ea92 | |||
0ebca7e8e3 | |||
d301669726 | |||
010bb0a2fe | |||
f028002c11 | |||
11e1747ffc | |||
5dc9333bb6 | |||
f77acb6db6 | |||
22abf09bd7 | |||
9a1d7a2ae3 | |||
98e5908557 | |||
9e36fe090c | |||
b4b6968ede | |||
999c4c51a2 | |||
8737a6a4fd | |||
a9a5d13e06 | |||
![]() |
ca1e2ba91e | ||
2e34969bbc | |||
cead0b2fb8 | |||
![]() |
9d566aea68 | ||
2d9933a4a9 | |||
cd699c587b | |||
4108007b26 | |||
b31b42a557 | |||
c3f187abcb | |||
2989d955d9 | |||
ea4409897d | |||
7dd7f021b0 | |||
2cb53ec45c | |||
![]() |
8fa3e45e47 | ||
c4a5d111e7 | |||
dca45a9b18 | |||
6ffebbd5c1 | |||
aa07775a32 | |||
30244f9d9b | |||
19d4a5ce26 | |||
e4cb730c1b | |||
3b18e54545 | |||
2fbbd8e7d1 | |||
e466331407 | |||
5d1f46e6c4 | |||
36318def69 | |||
72e4b16c1a | |||
8a10c3a097 | |||
d402300dba | |||
ada6753255 | |||
ceb0749e0d | |||
4863ab3711 | |||
c745cc8aa1 | |||
273902f616 | |||
bb761aea96 | |||
d13a7d2872 | |||
49b2ca061c | |||
![]() |
3e23ec8d27 | ||
22eeb90b81 | |||
6a69cef2a8 | |||
c1fef302f3 | |||
bd370cf407 | |||
feba993019 | |||
623a11dd8f | |||
ba7fb00450 | |||
20b4186331 | |||
2479645d22 | |||
![]() |
8585e2e955 | ||
![]() |
14518dc396 | ||
ccd64b6f07 | |||
21efdb9bd0 | |||
94778c74dc | |||
![]() |
929c09fecc | ||
c067f38123 | |||
046d1e01b0 | |||
cc6247fe7e | |||
![]() |
797a31924d | ||
87f9b619e5 | |||
![]() |
4ac89e7024 | ||
fceda68cd8 | |||
07fc66ccff | |||
d7b512ca9a | |||
![]() |
926f88585a | ||
717e1c58fa | |||
4b3dbd8915 | |||
![]() |
9d31a41ffe | ||
![]() |
217571118b | ||
![]() |
b03e919cbe | ||
![]() |
482b305065 | ||
![]() |
27776cddb2 | ||
![]() |
029e082cfc | ||
![]() |
6087a46a0b | ||
b78f6a645c | |||
f8b04e398e | |||
097f178e2a | |||
d221846c31 | |||
fa08d2f946 | |||
336563e7c0 | |||
f4ac8e02f6 | |||
29d2051a34 | |||
e52359c4c0 | |||
d73b327fd0 | |||
![]() |
d1bdeae596 | ||
![]() |
fa8bd4310c | ||
4f8f8b659b | |||
5a9eb68160 | |||
![]() |
b97ec8da90 | ||
a3fe0092ac | |||
896dbfbacf | |||
4d3561c92a | |||
![]() |
3c7b658a59 | ||
![]() |
6482437795 | ||
12e2dabaa8 | |||
e05545ab7c | |||
f0bcab2e2c | |||
075ac7ab43 | |||
31d7d7d9bb | |||
![]() |
ed14aa130c | ||
81007c1a03 | |||
2e3ff679f3 | |||
a84996399e | |||
![]() |
7b872474fd | ||
![]() |
531b7c2ae9 | ||
![]() |
95f16c99bd | ||
![]() |
462180f9a4 | ||
![]() |
505c49ad01 | ||
![]() |
16d6cf0177 | ||
112beb552b | |||
![]() |
b53cdafc84 | ||
365b9053ec | |||
![]() |
aadc9a13aa | ||
![]() |
39f3e3a92c | ||
![]() |
9a6374c79b | ||
3a392e84a9 | |||
c119de6188 | |||
066833819b | |||
c840f223cd | |||
4c2bf3e42f | |||
6ec95a7f13 | |||
670e57b9e5 | |||
![]() |
d441ead884 | ||
![]() |
38f654edd9 | ||
25b4d136b8 | |||
2b9783028d | |||
6c0e18d3e2 | |||
e23f671ca3 | |||
2af7066074 | |||
220f641ba6 | |||
76493b398f | |||
f1a277c4d7 | |||
ac76d544b9 | |||
cd77461fba | |||
326178ad47 | |||
0fce24479f | |||
3f895d32dd | |||
2af26f7d5b | |||
765d4ea725 | |||
ec231ecd78 | |||
957767c985 | |||
3cc7374984 | |||
6461c8e880 | |||
edfbc4081b | |||
317bf1e9db | |||
f985004be0 | |||
4fd834d13e | |||
370f96acfb | |||
d8b308dd9d | |||
3ad8f9b9a5 | |||
4fe9a27e2e | |||
686fe88e61 | |||
9b5e4373d4 | |||
03b1a4dfc0 | |||
27e422f81d | |||
f3e821a65d | |||
3fac44874e | |||
f8df7eba7f | |||
4574ebd8a9 | |||
a00b9bb0c7 | |||
e091eeae90 | |||
0a98147315 | |||
e9cc4a4357 | |||
0ab4730002 | |||
31d7b6fb7d | |||
26e5f4c482 | |||
766649bd54 | |||
bb6641ed96 | |||
6aa81f7ec6 | |||
![]() |
a3fc8af1dd | ||
![]() |
05082e3ffa | ||
![]() |
4b655070d4 | ||
f25037447d | |||
df3a03afc5 | |||
ded4bde905 | |||
![]() |
e1d8e360a5 | ||
![]() |
b373e253c9 | ||
a9d84da3b3 | |||
4b7c62aa9c | |||
e16c0a3271 | |||
ef66457181 | |||
093c46c937 | |||
d48d16d237 | |||
65cd84dd2e | |||
c457ef68c7 | |||
f00b86475d | |||
90bc00436c | |||
1af32bfe79 | |||
25338019ca | |||
878c11b36f | |||
c6c9ba76d9 | |||
a0261e8fd7 | |||
d493028c1e | |||
3992ea235d | |||
31b527a4c4 | |||
09b647f283 | |||
40b312d7c1 | |||
fad9d0e3da | |||
31a57b1a60 | |||
50e44ece54 | |||
f233416bf6 | |||
1b3885720a | |||
82dd9435a3 | |||
bc89d247ec | |||
fe36482063 | |||
a47f6d1b2e | |||
8aa23c7dc7 | |||
0eef0dd21b | |||
a12a26f65c | |||
1ebed8b6aa | |||
deb0fe338c | |||
005f79c95f | |||
eeee8d7600 | |||
13cfdf0d5a | |||
e77c3f23d3 | |||
d157daea10 | |||
9aa36562b9 | |||
6a36b79a95 | |||
2cd2f25c56 | |||
8631db8769 | |||
7da2ac9ef3 | |||
4da58258f5 | |||
4f78040569 | |||
0738d1d1fb | |||
e99e15209a | |||
![]() |
96a8aa9d0c | ||
![]() |
0bbd747f82 | ||
e31b837a7f | |||
ab7e428624 | |||
565e7f4d67 | |||
910de68495 | |||
e904c9981e | |||
ddc372f58c | |||
4ff234c110 | |||
69ef47e68c | |||
59901ec7c3 | |||
13e38f3d3e | |||
4b85f06951 | |||
08df2ba907 | |||
7a192b4961 | |||
d18f622458 | |||
8a482659e0 | |||
eeecede382 | |||
d49741c2db | |||
2ac2850cd4 | |||
3d56545210 | |||
5de76252ea | |||
778d6a2809 | |||
![]() |
f90cbaba5a | ||
6510e07b8b | |||
4996c05361 | |||
78effe14ad | |||
122b12fa31 | |||
438703a29b | |||
467a48cfe1 | |||
2b1c6a9d8f | |||
f1307614c6 | |||
ea8e340895 | |||
26af857dc7 | |||
f04526d83a | |||
a255a60944 | |||
b4de0cfaf9 | |||
2188d6b222 | |||
0528e4109d | |||
47f09479ad | |||
80d24fa70d | |||
![]() |
bef9ea11bf | ||
![]() |
278090a772 | ||
eab688b0bc | |||
788c72c331 | |||
90d9843acc | |||
d7095b69b9 | |||
dd96e29213 | |||
fd3e181b7c | |||
d7b5783674 | |||
634802c008 | |||
9e233b42a5 | |||
4cf8bfbe0d | |||
e1beeb3653 | |||
82a918b37d | |||
b6ecad3c0f | |||
e9d56d85af | |||
b874bb2ba0 | |||
7f179551b7 | |||
10be87bb59 | |||
5173d24c72 | |||
f4a37ce75f | |||
![]() |
ff4cfd3eb0 | ||
![]() |
8b6d8507ec | ||
![]() |
65356f09a6 | ||
![]() |
b0c6c845bf | ||
![]() |
6859baba9f | ||
![]() |
c14541f4a3 | ||
![]() |
1083d2939b | ||
2a8f23602a | |||
da5c92a599 | |||
baa26aec26 | |||
9da290831b | |||
882f853b1d | |||
a7de9a7f24 | |||
f2f6dfbf18 | |||
5e2db982dd | |||
bc11e66429 | |||
da8f49a712 | |||
a97085ac67 | |||
eb7211660f | |||
b182562c80 | |||
25a80c78b5 | |||
c69af8308f | |||
0cc1861649 | |||
57cd4c5843 | |||
cd035e1247 | |||
73886d06e8 | |||
![]() |
ae199581be | ||
bf425d8ac9 | |||
![]() |
823dc72eaa | ||
3716ccc3ef | |||
108b3a2363 | |||
35bb5896a1 | |||
da9bfd48c0 | |||
![]() |
0bd3df6d98 | ||
![]() |
0656abd101 | ||
![]() |
5299eb365f | ||
53eb0fe7f8 | |||
4cdaa11024 | |||
e642d8e538 | |||
cc5f13fc5e | |||
80f66113c4 | |||
b3d5accca2 | |||
12ac06d5ba | |||
7b47d3f314 | |||
0d2dbcc8fc | |||
e2cc62a21f | |||
689b26102b | |||
c989addadc | |||
5e00bc6510 | |||
828311a24f | |||
5976d4952f | |||
80ae2ccea6 | |||
370b7f1124 | |||
26b90b9d17 | |||
c8647fc3a5 | |||
3fa15824ee | |||
1752291ffd | |||
![]() |
4edb9bbf7f | ||
![]() |
e88a585703 | ||
928c0e9b91 | |||
83a4f5f2f0 | |||
f54db66f77 | |||
f16981d844 | |||
f6b5a2d493 | |||
14b33a1e4c | |||
c99adeeb61 | |||
b979a97905 | |||
916b296ee0 | |||
f9f64a441b | |||
2482df7121 | |||
f9d7cfa7e1 | |||
5229c0e811 | |||
1ca9674f3f | |||
c77e41c59e | |||
8c4410277d | |||
2ec9a4ab64 | |||
6b05acff8d | |||
471b53698a | |||
7404bdc4fd | |||
9307cc8a0c | |||
6dd0b23c61 | |||
97f002bfb5 | |||
22ca4d0e44 | |||
86fc6478f5 | |||
dee92b5290 | |||
b19b529afe | |||
0c4cf5d3cd | |||
eeb7ea4cae | |||
23634afbc9 | |||
acf3abb19b | |||
c5435410ba | |||
786d68ce9a | |||
0170ff2337 | |||
a5c0448053 | |||
7a1e2865fc | |||
0c19216c4c | |||
f2787a8df6 | |||
7654a0af42 | |||
5c1700c2ab | |||
6487fb0516 | |||
42fb3bb2e9 | |||
![]() |
f57876dc3b | ||
![]() |
0a7027dd9b | ||
![]() |
1154d28be7 | ||
0e68df6ba4 | |||
7707c4bb94 | |||
![]() |
56639fa7d2 | ||
f0a15d084a | |||
de6cee8f6a | |||
8b075f26bf | |||
5455820a74 | |||
d38c660c36 | |||
3f629ce1af | |||
29f9986f40 | |||
d505a2fe76 | |||
3eb573295b | |||
0b9babab42 | |||
c190ddd6b0 | |||
53118fa9c6 | |||
8cf241f6da | |||
6774af6910 | |||
eb73f0aae2 | |||
0bec84a3b1 | |||
![]() |
75c2d24c45 | ||
![]() |
53e77df77d | ||
326a85ea4f | |||
e567f7b460 | |||
ab28ee960e | |||
88a4261b03 | |||
e7a66659e9 | |||
44a935d086 | |||
1e5414f74f | |||
357d400bc6 | |||
594f1c7f8b | |||
4a845f0b73 | |||
bc791f91ab | |||
f938090d6a | |||
d9ea6b1f9c | |||
5bed4a0d7f | |||
4826bbd333 | |||
0540c76c51 | |||
f081e88420 | |||
4030d0b427 | |||
c5f6c9a498 | |||
403440bab8 | |||
8ed7a029d7 | |||
ec6807cd2c | |||
226494028a | |||
4bcd896829 | |||
2524a7a69d | |||
2805388a4c | |||
631a082ebd | |||
24b98b86c2 | |||
5ee903765e | |||
c0db50ed0f | |||
3403ea3b51 | |||
daf595ab7e | |||
fd958df118 | |||
dd794ceee4 | |||
c19a63c6a2 | |||
84bea6438f | |||
d3bd2ce190 | |||
e82f420ee6 | |||
a035901f0a | |||
e73ddb548a | |||
fd87c609f2 | |||
17060c0100 | |||
fe16ccb434 | |||
a46100bde5 | |||
0478ac75e9 | |||
d42235486e | |||
dd3dbbf7f9 | |||
![]() |
efe85cc30a | ||
![]() |
0b3e6acb97 | ||
![]() |
aa6c218122 | ||
![]() |
033c37f4a0 | ||
e7ddee5509 | |||
f8283c04ca | |||
0f7bcbf4bb | |||
![]() |
c4fce448c3 | ||
c4c75c0ce5 | |||
2988e58cb2 | |||
![]() |
21ae518102 | ||
8bebb884c3 | |||
4401265200 | |||
![]() |
094613b8de | ||
![]() |
6e38cce149 | ||
![]() |
9c626a07c5 | ||
![]() |
80db2faeb7 | ||
![]() |
b31eb3f53b | ||
![]() |
b572a330ed | ||
98f7f30864 | |||
23d24a48b5 | |||
064e4046a6 | |||
![]() |
50c86147b0 | ||
3c9e78bd76 | |||
f65cfbf92c | |||
![]() |
4ad4e579d8 | ||
![]() |
1f6b3c1107 | ||
a2a646e1f5 | |||
ea05af42fa | |||
![]() |
520faf477d | ||
![]() |
cf2a4ba053 | ||
1a0b25a6ef | |||
23598ab011 | |||
7ac189696b | |||
ecdccac37e | |||
e865f451ca | |||
3d80f0122f | |||
0a34f3d5dd | |||
![]() |
b588297458 | ||
![]() |
b524e91888 | ||
![]() |
29f8fec912 | ||
09d31cb107 | |||
fa9f60bcd9 | |||
63b48e30be | |||
e714e7082e | |||
9966c40d28 | |||
9dbec9fbb5 | |||
aa472feea9 | |||
c7a6584481 | |||
ae994e3230 | |||
fcd8a3ae69 | |||
ccaf4ce4b9 | |||
5772b7d9ae | |||
61ec10ff47 | |||
c3138793fe | |||
c5904b080b | |||
7d10ef7a19 | |||
938410d68b | |||
dd0d84fece | |||
b2aa649c2a | |||
74020ae5a3 | |||
6f3cfd83cd | |||
10b8c92fdb | |||
520da91735 | |||
d73fc85c34 | |||
4eca698584 | |||
3fa3b69cbc | |||
bf94460420 | |||
d054652952 | |||
ad3c978c7c | |||
3277ea4854 | |||
7b6e25db8b | |||
1974cc5559 | |||
9c534fda7b | |||
a5efce883a | |||
6197454225 | |||
64e9e2aebe | |||
faf130cf38 | |||
831c1945a5 | |||
26ecf364a6 | |||
74b61a7ba6 | |||
d65208b917 | |||
bf70a1520b | |||
3a3416d2a5 | |||
00667151da | |||
a9abf3babf | |||
cad3c46ea6 | |||
9289a6daa9 | |||
![]() |
f2f29d6a6c | ||
![]() |
3e888f8936 | ||
![]() |
cbccba8dc2 | ||
7cfc16ca36 | |||
f7a2d23f1e | |||
31e8ff8f45 | |||
3a7ee4f211 | |||
cc3c2d4d1a | |||
11d89e248e | |||
2bb94bea80 | |||
2bfd421b19 | |||
4c9c83231b | |||
32044f1682 | |||
51f7348d8a | |||
![]() |
ae345cfb85 | ||
![]() |
52edc35275 | ||
![]() |
d5bc948bb4 | ||
![]() |
86ff3420b5 | ||
6b0e3750c9 | |||
600c681143 | |||
e1189b9c9f | |||
9feeb76d6c | |||
9f02b27c4a | |||
345cdd3eb0 | |||
def1e2ec68 | |||
62c9ae67d0 | |||
10b756b726 | |||
bf9d136a2b | |||
![]() |
9ffd71e0b8 | ||
6fa13313f0 | |||
27fa991783 | |||
![]() |
09f6429b5f | ||
![]() |
252a7972a1 | ||
![]() |
131ebc4d5a | ||
4e81e48d64 | |||
7b391fa17a | |||
5e67f4232a | |||
398b4ceade | |||
03f4624f91 | |||
79334afcbc | |||
c711d48835 | |||
394db0b307 | |||
8bb1347e6e | |||
e22810fd93 | |||
8218d55874 | |||
652b75a749 | |||
620917cd70 | |||
b8ed77da9a | |||
65b3cdbb12 | |||
cecf255706 | |||
a854ccee69 | |||
6e2ad50e16 | |||
fdb3c68d3f | |||
d2e2109799 | |||
9f0c3ee345 | |||
725509fe5c | |||
13318a12da | |||
e8bf2ee30d | |||
![]() |
eda91af7c7 | ||
9ddb655a88 | |||
9d46a5d838 | |||
![]() |
f7471713da | ||
![]() |
b5d7f3e460 | ||
![]() |
7b53b0d3ad | ||
![]() |
ff293d50a9 | ||
552100da17 | |||
a2b23f96e8 | |||
14499c2993 | |||
dfc533b6e8 | |||
2738b3d29c | |||
07b7ab4262 | |||
b7f6cfbf46 | |||
ebc8dbe947 | |||
01d6cea017 | |||
160bcd7da8 | |||
bc40978297 | |||
656dd42276 | |||
4d1d11d1d4 | |||
3ae5b90c98 | |||
2846c33b40 | |||
b5f6c58a0b | |||
3ba48fda86 | |||
7c4569816f | |||
0cd8073f39 | |||
71411be6d9 | |||
a51ee8e745 | |||
3719081469 | |||
2216a58143 | |||
dc29525e5c | |||
![]() |
e5163c6ee5 | ||
![]() |
c5db5f0de3 | ||
3d75b3dc31 | |||
591b994b75 | |||
135e9ad31f | |||
eee9e47cac | |||
df6465f802 | |||
0c256d30c7 | |||
43c93bceed | |||
f021abcae0 | |||
7b28640e91 | |||
6a47319b66 | |||
ee46678955 | |||
8c498069d8 | |||
7389216560 | |||
129e474ecb | |||
3ed8620e5a | |||
436a8b8720 | |||
5d8871c17c | |||
d84fc4f0c8 | |||
2c2f90089b | |||
236354e5a8 | |||
aa3d2f39b1 | |||
fb67ebb38d | |||
a9d4798bfe | |||
8484a22fc4 | |||
0f7ebf2f71 | |||
db37745a1c | |||
b12e7214c8 | |||
079d464629 | |||
6dd2e9bb6b | |||
413eb7d0eb | |||
68a03b835a | |||
eef6c5cb33 | |||
652f9bb6a0 | |||
ab7b85cc1a | |||
2335f547f7 | |||
701f777035 | |||
77259293a8 | |||
4e231b26c3 | |||
9889d1adcb | |||
![]() |
2377b1adde | ||
47aa6101d4 | |||
7161785c5b | |||
2ca9fe2050 | |||
1095a140de | |||
![]() |
0485e690c6 | ||
![]() |
20103957a9 | ||
9670858095 | |||
![]() |
2bc8d58476 | ||
70fd0c6f6a | |||
2b1a7015e4 | |||
e8404a75fb | |||
05c30b4f1d | |||
29eabc4706 | |||
049b34f7cf | |||
31f2c51e7e | |||
71cc55fa7d | |||
![]() |
68a65d5cac | ||
![]() |
e4c5c4862f | ||
![]() |
cb2544157f | ||
612bdda281 | |||
db5dd6a626 | |||
![]() |
16db73b092 | ||
![]() |
c259abc82c | ||
![]() |
99b33fabe6 | ||
![]() |
81133a1a95 | ||
![]() |
9b3380cef3 | ||
![]() |
87ba8577e9 | ||
aca5617935 | |||
![]() |
e44a7c5054 | ||
142508c872 | |||
788e041939 | |||
3563fdf9e4 | |||
ea8ac884fa | |||
bf33e8432d | |||
18ed1a6bb3 | |||
830e08065b | |||
c1722a9f82 | |||
e5475bc229 | |||
![]() |
d81bf6a417 | ||
3710ff9aa1 | |||
![]() |
679aa1afac | ||
320569ef7f | |||
4f0d764540 | |||
a768afe05b | |||
d15e068123 | |||
c1431565ed | |||
2b6cb2099a | |||
f9a2193e2f | |||
0d325d5a28 | |||
520da24e0c | |||
69638caa7b | |||
62914d7678 | |||
94c96b09e9 | |||
0c2a8e9244 | |||
67cd6409a0 | |||
65d0ea3f0b | |||
f1b725a320 | |||
9e39cbe502 | |||
8d104f7fea | |||
e66d64d89b | |||
9d28b17a04 | |||
43f055ec28 | |||
b4a5cc07c2 | |||
479461ab3b | |||
c99a42f0b1 | |||
65698aa0da | |||
7f75d0254c | |||
331ecf0625 | |||
32d420e76f | |||
ee5a22be24 | |||
b51962aeac | |||
e73640bb8d | |||
92515179e9 | |||
c5f126c196 | |||
bb88555a63 | |||
e03a94647c | |||
8eda9abab7 | |||
aed6d433c8 | |||
71376d53c5 | |||
9a84f77fab | |||
2590fd8253 | |||
ea3bddbcd6 | |||
d04f0dae37 | |||
3504bddea4 | |||
b3a5f1f8c1 | |||
0f2f7e2454 | |||
b119d0be43 | |||
566221b732 | |||
81ab35abe6 | |||
b2e37243ab | |||
a6e3621c06 | |||
96d8385f49 | |||
912d25b775 | |||
55cdd81017 | |||
a1c18fd0aa | |||
5f3da69acc | |||
e6dcfaee15 | |||
f724b2208b | |||
89b70895d7 | |||
![]() |
cff2ae3ac9 | ||
ec0f8566b6 | |||
2ebe59436a | |||
dcf6983607 | |||
1779202ff9 | |||
6483abe7cf | |||
6618561237 | |||
d8c9b0942f | |||
9938e50528 | |||
232b7f30d5 | |||
adba7e4c25 | |||
764f89f5c5 | |||
87180e0e2d | |||
![]() |
6789a735e3 | ||
![]() |
65eb9b17db | ||
64ba43c007 | |||
b2dec2f4b2 | |||
789f482373 | |||
a667c36d2d | |||
65e2132a25 | |||
5e76118ffd | |||
131a70057e | |||
![]() |
21ace66a46 | ||
![]() |
459eb7fdcd | ||
![]() |
8586c28b5f | ||
![]() |
f32c863ba8 | ||
![]() |
ee84e7e3e1 | ||
![]() |
cf4298f759 | ||
![]() |
13190931b9 | ||
08be6a4f4a | |||
7f015c4794 | |||
7b46d43492 | |||
a4bcff093f | |||
fb7b3c2793 | |||
397bf43147 | |||
49af26d958 | |||
0ce4811dec | |||
d3e3ec4d35 | |||
8ed0dd2a5c | |||
8158753dac | |||
e3481f6730 | |||
165beb3fbd | |||
5d367940d5 | |||
617294b7fa | |||
240d59393f | |||
6b94dc2dbd | |||
3a0873c991 | |||
72ef065ab7 | |||
66ecdb2f7a | |||
e2980603b7 | |||
885e0468b2 | |||
3bfbb6aef6 | |||
365820172a | |||
d73058fd65 | |||
7374484ccb | |||
![]() |
7d4229acab | ||
![]() |
41128f1457 | ||
![]() |
61f45b3a3a | ||
![]() |
aaacb2e558 | ||
![]() |
9c2dc47a8a | ||
![]() |
2db0a65425 | ||
fd781f4894 | |||
![]() |
4a099854f7 | ||
![]() |
ff379c36cb | ||
![]() |
d5970f17de | ||
![]() |
595e43b8a4 | ||
6adc665fd3 | |||
1be569db7a | |||
63e75ed307 | |||
6b990689cc | |||
3e48bf80f1 | |||
5341166e95 | |||
685088ccca | |||
7a64505139 | |||
df223af23d | |||
8d74a196cf | |||
26d74620a9 | |||
e458361193 | |||
fea35512a7 | |||
d5dda73742 | |||
86fd8ce391 | |||
e24333206e | |||
0231d5eec2 | |||
258aea136e | |||
![]() |
44e1b6058f | ||
051e18f9c7 | |||
a66fb815a6 | |||
3e8386382b | |||
87109c8fef | |||
7ecee9dfdb | |||
9dc24d5f27 | |||
e6b5fc8fd4 | |||
b52e8d6b5c | |||
ce6551dacd | |||
f7d785b6d2 | |||
27e060eee5 | |||
cf1c1bb3f7 | |||
85a2c9026a | |||
d084f93506 | |||
8433f658f8 | |||
2cdb86fa1e | |||
d8e06a0d14 | |||
c1418a1c2e | |||
b99f239f3d | |||
1a030c3f92 | |||
41e9bfc6b7 | |||
f40655fc2f | |||
845e5ed37c | |||
019c3171c4 | |||
93a3f09971 | |||
51457bd873 | |||
ebe95fc575 | |||
6d8431a77e | |||
a8f2745169 | |||
61cdc7c7d2 | |||
3aeadaa719 | |||
a542b182ea | |||
1ddc651b11 | |||
b0bca2f16c | |||
d9775a5f10 | |||
ea2ef7b127 | |||
6d9aa92ed0 | |||
0c54b6d9da | |||
5ede0a139c | |||
![]() |
2918d6006f | ||
2c97dc2bcd | |||
7e6a92ab7b | |||
46ad48d5d1 | |||
2c24a68135 | |||
![]() |
357feca7b1 | ||
![]() |
920a83ddab | ||
![]() |
42e3406529 | ||
![]() |
7336f64c26 | ||
![]() |
c1731f68fa | ||
5ed953e11e | |||
![]() |
e4892c6d5c | ||
1a200a16cc | |||
e50bf00fa8 | |||
e75881d6cc | |||
75ace4266e | |||
e82a547bce | |||
6d72aeed8c | |||
c01bf47c8a | |||
4bd0f06cd6 | |||
aab6529f62 | |||
11c8e8e794 | |||
0d1dbc7992 | |||
7cd60bb0e7 | |||
697b617c7a | |||
fe6c7cd41f | |||
eea0990b54 | |||
aa0bafb8a8 | |||
c4ebc7357d | |||
471c5d49d1 | |||
eff2bdbf87 | |||
b5de81582f | |||
500246ebed | |||
![]() |
38f135ceb9 | ||
![]() |
0a1a2ed82a | ||
0a774c6c58 | |||
f44a8e49c5 | |||
1109331dfc | |||
8a4c4694ec | |||
b4f331e621 | |||
67224858b7 | |||
447e29e381 | |||
aae81a7b5f | |||
f049319500 | |||
6b3896c1f8 | |||
652c3d5dc2 | |||
4d29bfefde | |||
16ac93c36b | |||
040e092153 | |||
![]() |
098bde2a32 | ||
![]() |
f94d2d5578 | ||
30a34acd41 | |||
dca04f7f60 | |||
307a8239fb | |||
e189236e3e | |||
a3fe7467c3 | |||
973aab8f53 | |||
0c7c19451c | |||
73b00eb206 | |||
90e6458428 | |||
![]() |
4fdcd25671 | ||
c2e2cc2e57 | |||
2abd59e6d4 | |||
![]() |
65481ad61e | ||
47c64c2eef | |||
7bdfd071ae | |||
7858dbe757 | |||
![]() |
8466cdc675 | ||
ea5ddfcf36 | |||
332898351c | |||
2ec34f4827 | |||
7489a64e6c | |||
06fa817bde | |||
cb762356da | |||
62649a6343 | |||
a6434fb71e | |||
a8f11d1834 | |||
67e7e45779 | |||
cafdca9a7b | |||
7efb290f13 | |||
b3cb09481c | |||
f543a45a72 | |||
099cacd3e3 | |||
b89720e710 | |||
1ffc006b2e | |||
f2f5df0db4 | |||
10354df425 | |||
03bd3e2db3 | |||
11b391bc35 | |||
a6e6d29d33 | |||
6600f373da | |||
efa72dbb56 | |||
4e267f690d | |||
05318013e2 | |||
8840532ed0 | |||
48a92ca1e7 | |||
ff71540428 | |||
f04b41c99a | |||
847ebda3e2 | |||
e174a46801 | |||
04a985cd8c | |||
adb1c6f58e | |||
9eec35713c | |||
![]() |
f6efdceaca | ||
c1adcfcc19 | |||
0a7330393d | |||
63b2f29633 | |||
d8980d10a4 | |||
c7d052646e | |||
de8a079cb4 | |||
fc8b55df27 | |||
be6b200945 | |||
cbeaca66a2 | |||
585778cddc | |||
cb0235bb5d | |||
558592a87f | |||
41e8b6dfbb | |||
![]() |
5aae625788 | ||
16d2bdc1db | |||
edb352b9d0 | |||
ffbf3d2023 | |||
0147f003c4 | |||
50d93b1993 | |||
a39549a3d9 | |||
![]() |
9adabadeb9 | ||
![]() |
61303bfd0b | ||
![]() |
e45963dbcb | ||
![]() |
5f689ccbd4 | ||
![]() |
17bb36deee | ||
![]() |
0b50c36c8a | ||
![]() |
feaa82181f | ||
![]() |
803447b4c3 | ||
![]() |
e93fb5c084 | ||
![]() |
6a418ebcab | ||
![]() |
67ca6e6552 | ||
![]() |
540e7c37e0 | ||
![]() |
7cb0c9bbb4 | ||
![]() |
66deb5dc7e | ||
![]() |
3e10745717 | ||
![]() |
84419bbf0b | ||
![]() |
d81f993f81 | ||
![]() |
8453c5cce0 | ||
![]() |
b2b047b4aa | ||
![]() |
7aa68c0a2b | ||
![]() |
811d1ccf9d | ||
![]() |
2af1f68d84 | ||
![]() |
56eb11bc17 | ||
![]() |
214efb8ef9 | ||
![]() |
d1631643a5 | ||
![]() |
315d7728d8 | ||
![]() |
647f9e728f | ||
![]() |
fa2897d2f8 | ||
![]() |
539f880f9b | ||
![]() |
9caa7a61b0 | ||
52b14142bb | |||
7f60ee9f8b | |||
b9726a0af8 | |||
bb86c56e77 | |||
8cdeff74c7 | |||
acf5c314de | |||
20413f00c0 | |||
aa551acec4 | |||
f088ea1263 | |||
46e31746b4 | |||
981737f8ed | |||
![]() |
5f01796bae | ||
b2575643a8 | |||
baeaa65829 | |||
5afa32a393 | |||
ca0f12782b | |||
148ed1e3a0 | |||
6f86522c2b | |||
5db67f13e1 | |||
21504f1539 | |||
![]() |
fd311c7e1a | ||
![]() |
7c71ff106b | ||
![]() |
d13bf0b72a | ||
![]() |
9e0934f958 | ||
![]() |
1cc330ba66 | ||
![]() |
967dde4395 | ||
![]() |
278870606b | ||
![]() |
e70a2c765b | ||
31856e8895 | |||
22aefa2042 | |||
![]() |
aeded8c495 | ||
3248a15d59 | |||
5c81c00a18 | |||
ea7ddaf6d5 | |||
a8ad30b335 | |||
67570db664 | |||
87d8d69a20 | |||
![]() |
e967b26f5a | ||
![]() |
e5540d051f | ||
![]() |
7ce81db9a8 | ||
e42e04c0f0 | |||
d32d5b5f29 | |||
8d00774b5e | |||
![]() |
89b38f4fff | ||
0dbc809111 | |||
64c7625524 | |||
071e702e56 | |||
363317fc26 | |||
f4d7a6d0d4 | |||
b5a4f1626f | |||
73790e2353 | |||
dd5f8b45ef | |||
2960156b33 | |||
9a72c4b2d1 | |||
7d4acb62d0 | |||
cddace2a1d | |||
859584c2b3 | |||
6237fc89ad | |||
cde53537af | |||
5490de1d61 | |||
![]() |
488e89a0b4 | ||
![]() |
4774cf6c37 | ||
7c7b0cb7fd | |||
![]() |
6aeb89ccd0 | ||
6cc39a2672 | |||
![]() |
cca68f9b79 | ||
![]() |
904bf2a90b | ||
![]() |
8a001adf59 | ||
![]() |
2c602fa46b | ||
![]() |
1c90985f93 | ||
![]() |
3498ab05f4 | ||
![]() |
d809b592c9 | ||
c3aa459872 | |||
d389b3b57c | |||
![]() |
76ee5774c4 | ||
![]() |
b7d980df06 | ||
![]() |
491cd0aa46 | ||
![]() |
e380b26798 | ||
![]() |
4790a14542 | ||
![]() |
194df9d88c | ||
567bccb51c | |||
0e8e3688f7 | |||
d3170de74a | |||
908bf26151 | |||
![]() |
e55702b219 | ||
![]() |
c0c95827ef | ||
![]() |
fc9ad32878 | ||
7d40dfe1e5 | |||
![]() |
2304e9b558 | ||
944fe4794e | |||
7501e3feea | |||
eb0920e2c7 | |||
![]() |
956a714d6e | ||
![]() |
3f990b0bc8 | ||
![]() |
3dbe8f2003 | ||
![]() |
d90fc421fd | ||
![]() |
85db853d74 | ||
![]() |
440d5571fa | ||
![]() |
910a0d859d | ||
![]() |
c5f9aea557 | ||
![]() |
84ea533b11 | ||
![]() |
fd2819c754 | ||
![]() |
fd6cb07e5d | ||
![]() |
6d2270a1ed | ||
![]() |
94bde1d821 | ||
ba801be24f | |||
![]() |
e919271247 | ||
![]() |
d2bdbcd27d | ||
![]() |
97eb5a56ab | ||
![]() |
473ced4d4a | ||
![]() |
c7771095d3 | ||
ea127d3fd4 | |||
![]() |
b35762b4bb | ||
![]() |
3f6fc7c0fb | ||
82eea0a8f9 | |||
![]() |
670016e79c | ||
14492d7269 | |||
de9d968b76 | |||
7bb7677604 | |||
![]() |
841b16ef72 | ||
![]() |
0d0dd1e241 | ||
![]() |
62f7b2cece | ||
![]() |
a5e568ffa1 | ||
64039ee3c2 | |||
ce043943d9 | |||
fea5bd4ada | |||
00d4525325 | |||
f17776ec54 | |||
05845481d1 | |||
bb5a89219a | |||
c3ebc00a86 | |||
a57c277af0 | |||
2b00bfa58b | |||
8962ea058f | |||
7511de68a4 | |||
0b5a36d5eb | |||
1f861c14a9 | |||
d7d1dcb539 | |||
91c59dfb6b | |||
![]() |
9d17066175 | ||
![]() |
7db602d959 | ||
7e6fd01eef | |||
365f5a8c7b | |||
30dbe24777 | |||
![]() |
e36a3b318a | ||
5d389c8855 | |||
d6a53cc3a6 | |||
409207e02d | |||
95366c06ce | |||
5b1b4acd2c | |||
10bae6a07b | |||
bfafdd34be | |||
0b2896516e | |||
268a3ee5f5 | |||
ad1600eb51 | |||
f1ed870a4a | |||
5d3b7c1c53 | |||
cd97718682 | |||
54d9a29855 | |||
7cbb43ab75 | |||
![]() |
335736b2b7 | ||
f0b9986e67 | |||
82d187438f | |||
d1617dd0b6 | |||
21c7a341fb | |||
302adc2d16 | |||
c8b7e829db | |||
cf1c0cb3ed | |||
566df1c275 | |||
16421fa0b6 | |||
3c911ee298 | |||
a12058db3a | |||
7ce539a815 | |||
b76b2ef206 | |||
32797dd415 | |||
e1385a71e2 | |||
9cd90b0530 | |||
5440a3402f | |||
9fafc253b7 | |||
b37160fa8d | |||
7fbe1ced5a | |||
17270b1502 | |||
e34b646231 | |||
14ac8fe545 | |||
b3c5974693 | |||
![]() |
af46e48563 | ||
2aa093754d | |||
ab7f61d220 | |||
2d67d11537 | |||
![]() |
d244d17363 | ||
![]() |
e662f09838 | ||
![]() |
ad5301ae10 | ||
![]() |
def939284c | ||
![]() |
f9c13968a8 | ||
![]() |
4f6b58e5af | ||
![]() |
2556c7755b | ||
![]() |
9731c203bd | ||
![]() |
a1b67e3720 | ||
![]() |
56c1739d54 | ||
![]() |
1ae987927b | ||
51b27bbf0c | |||
5b78b53fe8 | |||
3ba0fcf6da | |||
7544d0a590 | |||
636016d107 | |||
b310c60188 | |||
19cb85a74d | |||
490b81c1a1 | |||
3a30f07483 | |||
61c62424c2 | |||
16ccc1bea5 | |||
b82702393f | |||
8a77db15d5 | |||
beb0879f24 | |||
6f75680a7e | |||
a756c12432 | |||
ead49256c7 | |||
0e029f84b0 | |||
bd6cf53d53 | |||
e20a6a9685 | |||
0e710f8785 | |||
7d11fb269e | |||
d7808cd16d | |||
f288682436 | |||
19defbe05d | |||
175ea0f0c2 | |||
30015c1933 | |||
4f8455040e | |||
428fb269f0 | |||
ec5e2dba94 | |||
316011e047 | |||
68567cb531 | |||
4eb9368830 | |||
c555bb6c93 | |||
1bb57c4103 | |||
a51a6d57f9 | |||
8465fe7717 | |||
0801d20fd1 | |||
9055982cf0 | |||
8c9ce56837 | |||
0a8ab44139 | |||
24fd48815a | |||
3fca0f6f99 | |||
3cd12ecefc | |||
0889a751db | |||
efb1b7c24a | |||
3527f251c8 | |||
6cdc515cfd | |||
57de4b1805 | |||
![]() |
609d5944bb | ||
88d9f1d509 | |||
5c0aab4190 | |||
33e96d7841 | |||
d00e3c77ab | |||
318ebb3fc5 | |||
f224a770f0 | |||
ebcf187df6 | |||
b3cfc89fa2 | |||
![]() |
e57606a9f6 | ||
![]() |
a36777882e | ||
![]() |
605f9872cd | ||
![]() |
52125917b4 | ||
![]() |
ba853a8c97 | ||
![]() |
6ad64d5b44 | ||
272588d820 | |||
344c812666 | |||
b4e2619c3b | |||
6ca383071b | |||
d851631494 | |||
16f4f04092 | |||
ca86bbe4f7 | |||
![]() |
cf27938983 | ||
4283d71b92 | |||
10f2d838c9 | |||
f5ca17c844 | |||
b62732b5b3 | |||
47beb8250e | |||
17228def91 | |||
5ca98022ab | |||
0c15936b5d | |||
e02a0dfc5b | |||
0d330caf9a | |||
8cd7e7de65 | |||
671e9dd711 | |||
4ff9092bd9 | |||
fb8665b9bd | |||
2c7033001e | |||
30ea6f3ffa | |||
5634055d4b | |||
3b7284c9cd | |||
74ed974145 | |||
4786081026 | |||
150cee9a08 | |||
941a994482 | |||
d10d722763 | |||
9951e3467e | |||
62fd0497f8 | |||
a0d2288ded | |||
149359fdc3 | |||
4ae57f4f01 | |||
d95d81aea7 | |||
92ad4d1ce3 | |||
3c0ba5ce9c | |||
f221e724b9 | |||
![]() |
0fdede8657 | ||
47629bf2cf | |||
0474876b58 | |||
edae8e3e0b | |||
1411d0cff3 | |||
aad80eb2a3 | |||
af49a90303 | |||
fa6a4ca1d1 | |||
e122393914 | |||
2d026d5ae7 | |||
367e5ac679 | |||
f3a4b115f3 | |||
9f64cc7c60 | |||
03651292fb | |||
94fd60db10 | |||
18b7d97584 | |||
021375b5d5 | |||
![]() |
8a0602732d | ||
20876ff307 | |||
bf3a7d6ef7 | |||
35a771c764 | |||
eb8178ea3b | |||
3867beb198 | |||
cae5dcd69c | |||
2a805dddf5 | |||
fa0d63f40f | |||
9437e2cb79 | |||
3054a240bb | |||
5d06de8608 | |||
468871f21e | |||
6c3c227c1b | |||
9738db7254 | |||
51bf23a34c | |||
5eda30644f | |||
2746ed5ce2 | |||
fd23b23e56 | |||
a63d2dccb2 | |||
0f6f8f90c9 | |||
87c97b2a0a | |||
6f4d76e871 | |||
c1850cc4f3 | |||
399899e7e7 | |||
bdc4d82eb2 | |||
2200cf6627 | |||
![]() |
d382f1214e | ||
![]() |
36a5790b87 | ||
5d100417c4 | |||
![]() |
b946bb0679 | ||
![]() |
c3b8317edb | ||
![]() |
f90e2ee659 | ||
![]() |
3bad8f33c4 | ||
![]() |
dfcc616cb3 | ||
![]() |
a0d356bc56 | ||
![]() |
f4496a0c4c | ||
![]() |
8841fed1f1 | ||
![]() |
eca5805195 | ||
![]() |
b8681ddf9d | ||
![]() |
68ad4eec14 | ||
![]() |
a192679638 | ||
![]() |
7058bd85fa | ||
![]() |
92c42db787 | ||
926bce78a7 | |||
d054c6bc04 | |||
2876da2565 | |||
177f595f33 | |||
7c5162e155 | |||
5e7a277e98 | |||
af2eea5916 | |||
633a75e286 | |||
6e053689b9 | |||
ee722b7688 | |||
e6912453e0 | |||
7c928f99ea | |||
9efa0eaa40 | |||
700d4d3b48 | |||
026ddb3278 | |||
79440f84eb | |||
922515dfe4 | |||
f1689187a4 | |||
2487bca47c | |||
cc4da1b4da | |||
a8bacd8727 | |||
b93be8bb4a | |||
9badfd07bf | |||
dc8a822b0e | |||
43e0d4f910 | |||
d4caafb592 | |||
d6e350184c | |||
535f2daab0 | |||
5c0c69c654 | |||
ef44c36f0c | |||
f1297e7c62 | |||
21ca75da14 | |||
3923db0677 | |||
98de1ae404 | |||
76921b1e3e | |||
97e7a98aed | |||
d263e42e1e | |||
54184f2889 | |||
af9ce6d173 | |||
a1baf856f9 | |||
13d80e604d | |||
09ea40ce8e | |||
bbccb476c0 | |||
0526d6fd15 | |||
c5bd0bd079 | |||
6963d1f746 | |||
a5c38ba6e3 | |||
bfb6eba90c | |||
c07f68e622 | |||
9b9810ea1e | |||
9a254aec55 | |||
aa11211e5e | |||
f1e9bf8222 | |||
812baf8bd9 | |||
5fe2019897 | |||
aebf7735fe | |||
bdbadcd8af | |||
54a1609760 | |||
0369d321d3 | |||
62c712c462 | |||
dc343b05a2 | |||
6462e2a292 | |||
a35ad5fc57 | |||
d95c284d3e | |||
84c0aa4072 | |||
cec94e934a | |||
b695242daf | |||
ddfc7c05ef | |||
9377b57c9e | |||
2bfbcf1ae9 | |||
f8f6375738 | |||
c074467163 | |||
92787f8fcc | |||
71d8f0e4d4 | |||
e20401373c | |||
6f7881c7ea | |||
![]() |
e326011a93 | ||
e9ec043bf4 | |||
e391992251 | |||
02f5733eee | |||
a9f957504e | |||
f0b3815767 | |||
ee57bd7363 | |||
4c970fa0aa | |||
0a99784221 | |||
![]() |
eed8011725 | ||
![]() |
f8fb4a66dd | ||
![]() |
4f8af55378 | ||
![]() |
530470972f | ||
![]() |
a9bf9e0657 | ||
![]() |
e2d22645e1 | ||
![]() |
5f077891ae | ||
![]() |
1a00f73191 | ||
![]() |
d8cfe21e92 | ||
![]() |
ee9976c288 | ||
![]() |
10707c6d71 | ||
![]() |
8e988c39e9 | ||
![]() |
e3ab9f8e91 | ||
![]() |
96d31995e1 | ||
![]() |
3988a8645d | ||
![]() |
b25dec12d1 | ||
![]() |
f57f8c6083 | ||
![]() |
2862be564e | ||
![]() |
45b4f426a8 | ||
![]() |
51cbd8ef87 | ||
![]() |
8b2c3de795 | ||
![]() |
969bc2dee3 | ||
77e539a73c | |||
2de36ee343 | |||
![]() |
7dbf568212 | ||
![]() |
7e9d1939b1 | ||
![]() |
48877079ca | ||
e68182a157 | |||
06914f9fd4 | |||
8332385f05 | |||
19b1b3cec4 | |||
bdd7c35ab3 | |||
184b6179e5 | |||
6fccfc990a | |||
524c375944 | |||
5041bb8531 | |||
7dfee5f0ab | |||
e3d456c733 | |||
e2a41b7748 | |||
477fa9ef3a | |||
0cd67acd19 | |||
aafccc0132 | |||
ff1e53a0e3 | |||
b8d33f7426 | |||
8dc3163c73 | |||
960636c6bf | |||
e528775768 | |||
52739165a1 | |||
eb1d848372 | |||
2a9c39ca6e | |||
b84b298ec8 | |||
![]() |
e59dd3bcec | ||
![]() |
d6fc0adb56 | ||
![]() |
5041883d5a | ||
![]() |
5ed701dff3 | ||
![]() |
410f9df4e4 | ||
![]() |
b5497ef72e | ||
![]() |
2233f7f47b | ||
![]() |
36b758f2c0 | ||
![]() |
ae0d420f5f | ||
![]() |
b40b987c0f | ||
![]() |
e8d371ed9b | ||
![]() |
5a0017a8fe | ||
![]() |
751f15c1b1 | ||
d1b2a4e51c | |||
6ef6b3b705 | |||
![]() |
c069f76324 | ||
![]() |
9a11165bfc | ||
3a5f020dac | |||
d67d501b28 | |||
a69aa15acd | |||
c391dacf7d | |||
69f380f4a1 | |||
![]() |
22a0f396e6 | ||
d27000ec07 | |||
b82ace8a84 | |||
b7ff82eb82 | |||
f7ae675201 | |||
39aa2c597e | |||
34f0d7d7b3 | |||
e59d7a821b | |||
![]() |
7a72049e28 | ||
![]() |
3b38f5a161 | ||
829eb665e9 | |||
4369b7d122 | |||
![]() |
70fa2dae0a | ||
![]() |
85ebb2f847 | ||
![]() |
e8decff5cd | ||
![]() |
3c0a8cf4ab | ||
![]() |
eb81cadac0 | ||
![]() |
0f8a61803f | ||
![]() |
e046418f8f | ||
![]() |
802115e813 | ||
![]() |
9b958e4427 | ||
![]() |
46ac008775 | ||
![]() |
281c5f579f | ||
![]() |
01a05f7600 | ||
![]() |
f76874ac19 | ||
![]() |
7615b9236b | ||
![]() |
1bddf5527a | ||
![]() |
beede9505e | ||
b74abbe4de | |||
6b53a4fac4 | |||
![]() |
be4c1afe13 | ||
![]() |
4ead982831 | ||
![]() |
4011680fad | ||
48c787ba8d | |||
![]() |
c9002b327b | ||
![]() |
873087441a | ||
![]() |
f6c45355a4 | ||
![]() |
92cc66ecb2 | ||
![]() |
773676075c | ||
e64ad7ce57 | |||
1f92232253 | |||
db54edc36d | |||
3adbea9c76 | |||
483f043d3c | |||
819985f3b4 | |||
21fbcb8749 | |||
4a03b6fcb0 | |||
57ddc8ea4f | |||
c3881a811b | |||
ff551b19fb | |||
a45f5374e4 | |||
1453527382 | |||
cc2056d4cf | |||
6cf84ac5a3 | |||
e243e0ddba | |||
fddaa47ded | |||
658faf9dcf | |||
68feb080e7 | |||
f4cab090cd | |||
d69f078d8d | |||
f2e00ca130 | |||
ea3ce805e4 | |||
96f7c15e6e | |||
a846271cd4 | |||
![]() |
da476be75e | ||
![]() |
a5830f0203 | ||
a01bfff974 | |||
![]() |
8b9e5de9a7 | ||
![]() |
aef68eb93e | ||
![]() |
4a5708ab78 | ||
![]() |
7cf79a3a20 | ||
![]() |
8bebda2e35 | ||
![]() |
42fd4c645c | ||
![]() |
211533f554 | ||
![]() |
11945c823e | ||
![]() |
26189704f3 | ||
![]() |
5b114f4bf3 | ||
c455f15b2a | |||
30fefa44ec | |||
![]() |
e310a6ab31 | ||
![]() |
a40ff5f528 | ||
![]() |
a7e31f1f2b | ||
1c73be515a | |||
8dbc11566b | |||
![]() |
8408e9fe22 | ||
62151ef525 | |||
f855421901 | |||
![]() |
61d2e3c208 | ||
9e237b5086 | |||
![]() |
f97ec8820c | ||
![]() |
f9d5d48a4d | ||
![]() |
733d3496a9 | ||
![]() |
5a6ee17f3c | ||
![]() |
177ef573ee | ||
![]() |
57fee62557 | ||
![]() |
7084c86e76 | ||
![]() |
68482cab43 | ||
![]() |
fc22d0fcbc | ||
![]() |
da5c922c40 | ||
aaebbdedcc | |||
![]() |
d2b32bc754 | ||
![]() |
4aff615687 | ||
![]() |
0b3abb3b63 | ||
775188a36c | |||
21fe962abd | |||
9b3eb8d2c3 | |||
a5a5f7dbde | |||
30f25de49b | |||
2cc362ca7b | |||
f1df49606d | |||
c0be83fe08 | |||
0b2ef3da13 | |||
526aadb559 | |||
8d629de23d | |||
8fb7bd264f | |||
2e85c2387c | |||
1b6c002883 | |||
![]() |
7121e3e52e | ||
726d2f4752 | |||
75d86727ec | |||
5c3e408772 | |||
a51d260a78 | |||
b5ed39f10d | |||
f12dbba3d6 | |||
9b9f96daf8 | |||
b8437cd247 | |||
63f0355680 | |||
2586db91c0 | |||
fc817b0ec0 | |||
2f2ff4f181 | |||
68e8e597e8 | |||
e7202e0ee6 | |||
a700747595 | |||
0bcf9caf7a | |||
41e20ae707 | |||
a6c506a176 | |||
7338282bbe | |||
![]() |
f9fbc76dd0 | ||
![]() |
2ee1a212c8 | ||
![]() |
fe41dec699 | ||
![]() |
2893cbb2e6 | ||
18e24edce5 | |||
f554ca3493 | |||
![]() |
03e10835fb | ||
1470ea2d72 | |||
292b7e6dc1 | |||
2800791f00 | |||
c35d1583d4 | |||
412fcfb578 | |||
80973ca21a | |||
1b0102bd1c | |||
2a68a01a35 | |||
63f4e04624 | |||
6c3cf9bf77 | |||
4ff62c291e | |||
d4992936b1 | |||
2a0b927022 | |||
![]() |
17c2a2a580 | ||
![]() |
a92993e05b | ||
![]() |
3fcef90cc2 | ||
![]() |
8c78d4f83e | ||
![]() |
2daeb6d1a1 | ||
![]() |
c8490a3140 | ||
![]() |
818e70d3a7 | ||
![]() |
6d0f80fa1e | ||
5fd1b69532 | |||
e24ebf4bda | |||
d34087f4d0 | |||
b78870de54 | |||
9d2f684ac7 | |||
6ad1de8d85 | |||
f6da5f43aa | |||
02669fafde | |||
30fc9544fe | |||
307a68aa5a | |||
![]() |
2664c417e3 | ||
![]() |
21b3864dfd | ||
![]() |
7a0f384dbf | ||
![]() |
27a0d4e51e | ||
![]() |
dfa1470c17 | ||
d992dbf92a | |||
1c28495fc3 | |||
950ca71a34 | |||
fcf82ea580 | |||
![]() |
381f390938 | ||
![]() |
ab4a8ef16c | ||
![]() |
998931ffde | ||
![]() |
67b7febf72 | ||
a916c1a22a | |||
1460bec8cf | |||
7aca1e4006 | |||
25e567a125 | |||
43c2018177 | |||
7d9207dc81 | |||
![]() |
f9c3f82bb1 | ||
![]() |
40b30979cd | ||
![]() |
11e00ba9cb | ||
9ac31573b4 | |||
a895bcc91e | |||
eff0cac30b | |||
c65ce1d3f9 | |||
201ef3b062 | |||
3b34581065 | |||
![]() |
d4dd0ea982 | ||
![]() |
0b01cc5070 | ||
![]() |
3de1fa2295 | ||
d8cc2a3560 | |||
![]() |
d42a467c00 | ||
![]() |
bc4ee0fc38 | ||
9b17b52b39 | |||
c02f685307 | |||
ef7b3e0c8b | |||
baa11d8146 | |||
2d24f21327 | |||
96c565d486 | |||
3c53dfe628 | |||
761affc94d | |||
f0f62527d7 | |||
c826efd3a1 | |||
ae8779e004 | |||
49221add97 | |||
da810467b3 | |||
70f018eb87 | |||
55a8878a64 | |||
0f048a7aa6 | |||
435bf81945 | |||
1a56d5ab37 | |||
3d21ad0df9 | |||
f6a4b0b709 | |||
199788495e | |||
fecd0a9f5c | |||
1e24523df2 | |||
93c6df7e89 | |||
e33bb2ac1e | |||
07f7f2be50 | |||
7ddeb0c945 | |||
00c1fc6ed4 | |||
4a211f1bf4 | |||
776c7aeb83 | |||
c143a0e807 | |||
6ea0b05300 | |||
39dfdad0d2 | |||
4cd9fe725d | |||
03d430ba7c | |||
5592992b73 | |||
d500f61738 | |||
8eb6dc0aef | |||
dd5c4af6fb | |||
0756306e54 | |||
5e24daafc6 | |||
37bb09ffc7 | |||
89c9a6d0bb | |||
04bf5157bb | |||
790db3735f | |||
78b2d24001 | |||
14e4cba7cd | |||
b1541dbf11 | |||
da5de2fd4a | |||
aa98e540e0 | |||
253c157ba8 | |||
9c35a55969 | |||
a1bf2b8653 | |||
3361d14f3c | |||
![]() |
e687e1d4d5 | ||
56bf844540 | |||
![]() |
ee5012311e | ||
3f92d92ce4 | |||
20145333f4 | |||
7b3791627c | |||
![]() |
98019bb998 | ||
5c3f264295 | |||
02855a0d97 | |||
b5117eafc5 | |||
05ffa63dc0 | |||
06106c75dc | |||
363aaadb1a | |||
7713284e64 | |||
cee45e3031 | |||
24a1cf713e | |||
481e28750b | |||
8b029dbae5 | |||
484d4e226c | |||
a7db82a1fa | |||
3f2fe39515 | |||
04a9f5612b | |||
884a42b814 | |||
278a8142b8 | |||
277a1619e4 | |||
d128bab2fa | |||
550ef2ae9c | |||
5feeffa550 | |||
36c279f23d | |||
f3207464bb | |||
00acac4b61 | |||
e67c750fab | |||
2d7f0d35ce | |||
3701f71fc6 | |||
3f64825436 | |||
5ca319e4bd | |||
f11104e7bc | |||
39c0f558c1 | |||
c1b9aa9665 | |||
9eb3cc5916 | |||
2fab97fb20 | |||
195a2d0473 | |||
288a6b0670 | |||
df7c1c6104 | |||
![]() |
598a177e5e | ||
![]() |
0a1191aa3f | ||
![]() |
5f81a8de59 | ||
f6273a1662 | |||
e14a4f0111 | |||
543e5bd218 | |||
d3c28a6b44 | |||
d851686272 | |||
87329bc32c | |||
c734b84b28 | |||
6c88eb5211 | |||
7b2355a888 | |||
b31ebfe368 | |||
9a7b58259f | |||
9c52d454f8 | |||
a548c307bc | |||
2efd544713 | |||
c9a6fab638 | |||
1c677cd99b | |||
![]() |
70e994fcf3 | ||
![]() |
c326bb7c6d | ||
![]() |
f6c8e44329 | ||
![]() |
345e7414e6 | ||
![]() |
3488db38bc | ||
![]() |
8957c85486 | ||
![]() |
6b0a102c1b | ||
![]() |
975d8a069a | ||
![]() |
2d15f8e16e | ||
![]() |
a3a8ee1329 | ||
4e5a2d00aa | |||
ab039b8023 | |||
8ed1b96f3a | |||
![]() |
c73b5b9edb | ||
![]() |
e308804cb7 | ||
cdd58f168a | |||
4d09e507fb | |||
d600a2df12 | |||
e310588273 | |||
a0fabe5f92 | |||
780fdfe4f6 | |||
145730f5b8 | |||
624a672213 | |||
16c5252c43 | |||
50710f8066 | |||
10c6c428a3 | |||
c34fd76a78 | |||
ab9dac8827 | |||
![]() |
49ba58cb8d | ||
![]() |
4f47fab139 | ||
![]() |
832e55ddf9 | ||
![]() |
8adf55a568 | ||
![]() |
9307b27655 | ||
![]() |
345d078370 | ||
![]() |
a4ef4e594a | ||
![]() |
18b11d2a32 | ||
75d681a93c | |||
0500bbb186 | |||
![]() |
a047b91deb | ||
![]() |
e941e79830 | ||
![]() |
b98254b2be | ||
![]() |
e8ac24bedd | ||
![]() |
38e109db2b | ||
![]() |
8c10ec9db3 | ||
![]() |
b9a2459315 | ||
![]() |
86f8d63a69 | ||
1a27fe185c | |||
0573123460 | |||
1e33dac2d7 | |||
98663feaa3 | |||
ceeacf6a07 | |||
f040421848 | |||
9fcddbb6bf | |||
75c20c9b1a | |||
ea9a3320a3 | |||
d621e19349 | |||
1ba7fb9621 | |||
d02b71a39e | |||
f0e0c01518 | |||
76999ccb6f | |||
d189c3912c | |||
b9bc254fd3 | |||
8c0e82d4f3 | |||
844977cca3 | |||
ffad52e48c | |||
d12b531c54 | |||
941db3aeeb | |||
98aafee53a | |||
abec6ad64c | |||
2f53f25580 | |||
b374b1136e | |||
57e21e906f | |||
![]() |
a474bd46d6 | ||
![]() |
7ae8381465 | ||
f00ac6ad14 | |||
![]() |
5bef86f456 | ||
![]() |
4d23e1d38f | ||
c0308526a9 | |||
3c7898160e | |||
![]() |
4ac505959f | ||
![]() |
683e0f42bc | ||
![]() |
d67cee5e45 | ||
db72f87b34 | |||
eb175f5542 | |||
43e6bb7569 | |||
4fbfc5d83d | |||
8ea3aa8592 | |||
94c7d840c2 | |||
d11c01cc82 | |||
1a7e71c5ca | |||
4ca12d141c | |||
9c2994cf3e | |||
2550b2c557 | |||
![]() |
5435a6584e | ||
![]() |
9f11188e8f | ||
241ee71745 | |||
a1ccd5a209 | |||
2a30bfedca | |||
129188f3cc | |||
bdff474d94 | |||
6908616a74 | |||
841bb75554 | |||
ca312f5bbc | |||
ef692efc83 | |||
e7e5ee1abe | |||
f124404dc3 | |||
9332d1347d | |||
afe34c6b75 | |||
24cb0934c7 | |||
e139710352 | |||
144147d854 | |||
cfd84bdcdd | |||
1de82a6801 | |||
1050fc7786 | |||
00dc1ed213 | |||
2aceca5f93 | |||
b9d5cdf2be | |||
948bbae661 | |||
6eb09bd0c8 | |||
66ee7b563a | |||
9b3082be06 | |||
74ea45901a | |||
030beacf11 | |||
b4f3d961e6 | |||
a077245b3a | |||
5a13070a58 | |||
4f5e3226de | |||
df075ca4f5 | |||
ffc0bcc3a0 | |||
81808d4a60 | |||
63a8b4668c | |||
50268de894 | |||
96d7c73644 | |||
2deed13484 | |||
eb321445d9 | |||
39039b89a4 | |||
e7c2162874 | |||
fe808a8800 | |||
fa85c0c50b | |||
4bcb1d27e4 | |||
a2dbb21853 | |||
44c38dffad | |||
a845d4f225 | |||
9dcf48ea81 | |||
33b2d834c7 | |||
fac4f6c28f | |||
69aadaa46a | |||
1412dbd16b | |||
c626bb64bd | |||
c5b6a4ee17 | |||
7433eeb5c0 | |||
ceac733b66 | |||
665f58d62a | |||
0eb04facec | |||
28923825d9 | |||
195d7dc653 | |||
471fc8ee12 | |||
419d411b1b | |||
c6e401a64f | |||
3bc9053a86 | |||
5a639260cd | |||
67e07d21ef | |||
f0b9894e48 | |||
74dc427320 | |||
d167b5eafb | |||
5cd1419897 | |||
f129426eed | |||
f3ec5f7956 | |||
2c17fef161 | |||
ab182d08f3 | |||
f869b8a133 | |||
7035db2bcd | |||
27042f9930 | |||
4c02c1f58b | |||
79baf70f9a | |||
622c6801ae | |||
005f73729e | |||
5b0680b29e | |||
9d989c6a67 | |||
fa740e8271 | |||
0ba0f1bded | |||
4321f13453 | |||
e71d1d38ad | |||
6fe25cda9e | |||
01962754b0 | |||
237447180c | |||
4b1a357ee7 | |||
56c17300d5 | |||
61ae0a597a | |||
3159c519b1 | |||
f00bf7d2cb | |||
33ea4cf571 | |||
86b3b13d6f | |||
b77524cfc7 | |||
12c7871640 | |||
88c7abedde | |||
ad4eef9757 | |||
935ba77da7 | |||
673d765ed6 | |||
c719410dfa | |||
ff81b4246a | |||
646fe20726 | |||
a5ca9364ef | |||
826d8ca07f | |||
![]() |
acebd2ea68 | ||
![]() |
fb6eea2484 | ||
cd3515923e | |||
509e39b592 | |||
dd575316bb | |||
cf7d492e8d | |||
48027fe6ff | |||
cabf1aa3c5 | |||
a1ed4cf3b0 | |||
624c382652 | |||
a62c6a8b96 | |||
167839b267 | |||
c48796c0f4 | |||
507c1d55da | |||
6193e487c8 | |||
1826fcee0c | |||
2999638255 | |||
012fb4cacf | |||
f13f4fcb6e | |||
31719d30cf | |||
afad22a8cb | |||
daf7e86b2f | |||
768921b361 | |||
ddf7fba039 | |||
3d25a9fd66 | |||
8161f099d2 | |||
7da3de20aa | |||
c5ca226ece | |||
96185d015a | |||
65484510c6 | |||
b013173c86 | |||
172f0c9d95 | |||
a3d3eec709 | |||
8250a8e7f7 | |||
e01234c6a4 | |||
ce484f2eb8 | |||
38da5cd4e8 | |||
42fa23017f | |||
a021e0d31f | |||
81713a0cab | |||
cccf76cc78 | |||
e2afb72c16 | |||
40e12b4fb1 | |||
4a47bea5f1 | |||
23aaefa986 | |||
99b028a4e7 | |||
fbcaad51d7 | |||
64fe2f1b05 | |||
582bab7c0d | |||
5f903cc7ca | |||
276d1c907e | |||
c098e5602d | |||
42f8b98b03 | |||
d364bba4c7 | |||
2df32aa8e5 | |||
709657e2c6 | |||
6176aaeb44 | |||
d8c3f617aa | |||
08dec0e00d | |||
1b25eaca8f | |||
2f4ea9c588 | |||
ae505995ac | |||
109ac5b61c | |||
79d8a0ed11 | |||
7e4ff0ba85 | |||
c4c45f708c | |||
953381ff5e | |||
cae1fe14f9 | |||
efe3696aa2 | |||
889b5ae280 | |||
c2bfb80233 | |||
8ef042af6a | |||
fcb835da34 | |||
7493134f25 | |||
c6c61c9e57 | |||
8d6d1bc751 | |||
541dae36d4 | |||
50eb93deec | |||
ecb8480b5c | |||
cfbcd54ba9 | |||
1c3fc2bbdb | |||
d55a0c9c39 | |||
57e2bb7bc9 | |||
eeb2835ca1 | |||
823526ae9b | |||
ce49c00454 | |||
9f7ec398c1 | |||
25d16b13f5 | |||
f32d3aaef5 | |||
b8f17c7ac4 | |||
d82499f07c | |||
62210c8165 | |||
a827b2f964 | |||
1e30efdb0d | |||
bf193b3218 | |||
003d865cc3 | |||
4b95824644 | |||
70b2dbec56 | |||
4ee6ae96a2 | |||
7379645869 | |||
8b8d32e496 | |||
be004cd350 | |||
71640590bc | |||
0430323d2a | |||
c2a1d7956c | |||
aca2f5780b | |||
0ec39e5ea1 | |||
52f736a06e | |||
0722fd8b19 | |||
b33551d4b8 | |||
e6251e7cb5 | |||
5f413efc08 | |||
bd341d4be3 | |||
34d879a066 | |||
789f15f1e4 | |||
b04924d2b1 | |||
ed4dc33105 | |||
8e51ca7f39 | |||
2e00cec408 | |||
2a57f62e6b | |||
cd51c9b3c4 | |||
![]() |
46a342180d | ||
![]() |
578656021e | ||
![]() |
7dae4eb303 | ||
![]() |
4512a940fb | ||
![]() |
a67ea4b2f2 | ||
fe5e4a2c7a | |||
5aef5e24e3 | |||
4c18e2f057 | |||
a3e42c435c | |||
2c4ecb7b7c | |||
![]() |
28f31ae4ec | ||
f34b4678ba | |||
1f569b7359 | |||
![]() |
7f673bb254 | ||
![]() |
a02cccaa50 | ||
![]() |
bcb07ff3c6 | ||
479120118d | |||
0c4f945408 | |||
3291b761e8 | |||
![]() |
b8d78ac779 | ||
![]() |
e6d97308bc | ||
![]() |
71dbc0abe6 | ||
![]() |
ff911e37c4 | ||
![]() |
f9eaf412b7 | ||
![]() |
19016edcfc | ||
75e6539f81 | |||
956c9607ff | |||
a28ddedce7 | |||
![]() |
e13ce467d8 | ||
![]() |
34b204c44c | ||
f5dffb0726 | |||
![]() |
d4bafaeee8 | ||
![]() |
2f8249bed5 | ||
![]() |
5a458822ce | ||
692790c4ed | |||
7f5f764aba | |||
c299976165 | |||
14941d0dda | |||
![]() |
676e9c9320 | ||
![]() |
bb38e07e2a | ||
16282ec5c5 | |||
5912f7c259 | |||
89d7a594dd | |||
100d307037 | |||
3d0e15aaed | |||
e9de0a14b9 | |||
![]() |
5a3f0163b9 | ||
![]() |
dd89c4a469 | ||
![]() |
a65a498c86 | ||
![]() |
10d5a17422 | ||
![]() |
b6298dc091 | ||
![]() |
11da21dd67 | ||
![]() |
a574fcb68d | ||
![]() |
0f757489ff | ||
![]() |
b8eeb72044 | ||
![]() |
60efd0b426 | ||
![]() |
c36905a309 | ||
![]() |
1ff9e6eff1 | ||
2e888501d6 | |||
e6f17ec1ab | |||
![]() |
2becaaa593 | ||
f8e871cea9 | |||
80e3c96f2d | |||
dc13ed6c19 | |||
17b72dd549 | |||
9b2a85df38 | |||
6c56d679ab | |||
![]() |
5c5f5bc682 | ||
![]() |
881ff77171 | ||
![]() |
9be53ecb43 | ||
![]() |
646dbffe69 | ||
![]() |
95f5244fd9 | ||
![]() |
694aab503d | ||
![]() |
36a313cc30 | ||
![]() |
e011d60987 | ||
![]() |
d76d68ea8d | ||
![]() |
404fe4f127 | ||
![]() |
27d8b0ee3d | ||
![]() |
89f2a76409 | ||
![]() |
3acb7a5c28 | ||
03588e7648 | |||
6a48910935 | |||
fb4fb47ee3 | |||
7a36b07cf7 | |||
4a59c19ac9 | |||
51a6f298e2 | |||
752c17ca6c | |||
a3a17a4f32 | |||
![]() |
7f6ba8cd15 | ||
6cd5f1d83b | |||
2a2795827a | |||
700c843b11 | |||
d28220cd04 | |||
ad056bcef5 | |||
b2dcf2069f | |||
8c7898de1e | |||
07a83bf310 | |||
173823695f | |||
5000a266cb | |||
14e9315262 | |||
3abc777062 | |||
3ba46f16d1 | |||
85bb495754 | |||
0ba207cb01 | |||
33aac1b125 | |||
d5cc1d83f3 | |||
92a26f6f7b | |||
d04050e6b0 | |||
80cb62b777 | |||
570dea85f1 | |||
86a2e16ffb | |||
ed39ea408f | |||
e9ff0c2882 | |||
e78081f33b | |||
![]() |
eb04971d5a | ||
43d496a93e | |||
8212d68c41 | |||
f060287df8 | |||
1fbf188d61 | |||
c1591983f9 | |||
b726424a34 | |||
e4814a7d06 | |||
2b8f14f709 | |||
e281620063 | |||
7a6db4eda2 | |||
97ad909378 | |||
718fff945e | |||
622272758e | |||
19b84aff9f | |||
![]() |
3f4daede8f | ||
![]() |
5d71fb0b44 | ||
![]() |
73ab3e834c | ||
![]() |
8901e3c34c | ||
![]() |
3b1a1fa027 | ||
![]() |
91977aabae | ||
![]() |
49d970c5bc | ||
![]() |
e34ab0b7a8 | ||
![]() |
6cd560ff1b | ||
![]() |
d3cdf3c7d7 | ||
![]() |
ab69fab3e4 | ||
![]() |
bf639478c7 | ||
![]() |
69bd0571d4 | ||
![]() |
a3df4a399c | ||
![]() |
a715d2b6d7 | ||
![]() |
31a52d2acc | ||
![]() |
76629741f1 | ||
![]() |
3eef793bda | ||
![]() |
db17aa048d | ||
![]() |
dc6ab70a69 | ||
![]() |
bf4cb419a1 | ||
![]() |
a0b316e56d | ||
![]() |
62d34f51cb | ||
![]() |
113f2c4d14 | ||
![]() |
2ca658174a | ||
![]() |
c78af828ac | ||
![]() |
041f5478a4 | ||
![]() |
72081a8647 | ||
![]() |
7b221fa239 | ||
![]() |
d95e730d94 | ||
670e56ded2 | |||
![]() |
20a58a24bb | ||
![]() |
bf42cc1594 | ||
![]() |
e44fb48ff0 | ||
![]() |
1c6ca5011d | ||
![]() |
cdd89df98d | ||
![]() |
ac833ec474 | ||
![]() |
da9c06e663 | ||
![]() |
df95e29f4e | ||
![]() |
47d354711e | ||
![]() |
b54a5c592e | ||
![]() |
5ecae1a951 | ||
![]() |
0e5b46e7d8 | ||
![]() |
97267a4d5c | ||
9ae9abd888 | |||
3f4df2317a | |||
c7a3e271db | |||
37e0b2ceb1 | |||
e3751b36ec | |||
cd21cda42a | |||
5fb6b2c79a | |||
c4a932b187 | |||
30b9f063d3 | |||
de487411b6 | |||
![]() |
bcd7b7e6ca | ||
![]() |
8f4f7b7b53 | ||
![]() |
10cfa6eeab | ||
![]() |
9e2bd4aacd | ||
![]() |
1a493094bb | ||
![]() |
3d24cc9e92 | ||
![]() |
7346ce1c89 | ||
![]() |
d5e97d2392 | ||
2cd9b34427 | |||
94738c1396 | |||
8d89d1eedb | |||
8fd354eea6 | |||
![]() |
f611f4c965 | ||
![]() |
40642c805c | ||
![]() |
2bb0ca97d6 | ||
![]() |
d828ed4342 | ||
![]() |
a06c3fe043 | ||
d77cd04061 | |||
1efc1677a3 | |||
2071cf8596 | |||
51d4827657 | |||
![]() |
6615586a4e | ||
3d385228f0 | |||
24414845d0 | |||
2c76b87fba | |||
bbe3a71d2c | |||
9d1097b467 | |||
8beb75be50 | |||
![]() |
80c55c150f | ||
![]() |
82806099a7 | ||
903f46f3a8 | |||
d99a699839 | |||
![]() |
9f15ae6e56 | ||
![]() |
26bc83c51b | ||
![]() |
5dd5a99de5 | ||
![]() |
ac75327a78 | ||
![]() |
2f48af517e | ||
![]() |
e284675e5a | ||
![]() |
674f523cba | ||
![]() |
2bfe27d217 | ||
![]() |
fe2387e4f0 | ||
![]() |
30eb089623 | ||
![]() |
ee1112cca7 | ||
![]() |
a39fb3d7c2 | ||
![]() |
0feb16d57b | ||
![]() |
b8f5c956e6 | ||
![]() |
f9b8a5ec11 | ||
![]() |
32968af39c | ||
![]() |
49ed17032c | ||
70393fd2d9 | |||
d4a139f215 | |||
0b85bffeff | |||
5ddb4edd14 | |||
![]() |
d2da262374 | ||
![]() |
3c19bb4ec5 | ||
![]() |
123c0de700 | ||
![]() |
19fcb9e5b9 | ||
![]() |
281534b0b0 | ||
![]() |
4fff74793b | ||
7d62c43209 | |||
00388675f1 | |||
4ddca951f2 | |||
2abaa4a39b | |||
402a2af898 | |||
![]() |
4e8ed909e3 | ||
![]() |
5c670fc57f | ||
![]() |
e83d31f749 | ||
![]() |
d8831151fe | ||
![]() |
87d6c302e6 | ||
![]() |
afec920bee | ||
![]() |
873b0b0f19 | ||
![]() |
96c73e7fcb | ||
![]() |
56f6a68ef3 | ||
![]() |
7cd7f01db9 | ||
![]() |
1650cbe8de | ||
![]() |
dc46f00a35 | ||
![]() |
d2edce845a | ||
![]() |
bd84ba2d5c | ||
![]() |
bd74b22b02 | ||
c768b8f8d7 | |||
![]() |
56c0fbeebe | ||
![]() |
5bc9d0af52 | ||
![]() |
12cbbfbac7 | ||
![]() |
4aa4ff738a | ||
![]() |
3d535a2282 | ||
![]() |
36030ae180 | ||
![]() |
e21479a164 | ||
32efa2e509 | |||
![]() |
8216b68ee1 | ||
![]() |
3e4318cca6 | ||
![]() |
cf7a6041b3 | ||
25c709afe2 | |||
58b38b283f | |||
931d7a95bd | |||
![]() |
d771cc6e37 | ||
![]() |
e21a57a1fc | ||
![]() |
1ede0c8b2f | ||
![]() |
57f3b89eed | ||
![]() |
9eedb5c732 | ||
![]() |
4964b1165f | ||
![]() |
bd1ccba960 | ||
![]() |
3334d9f737 | ||
![]() |
135920a9bb | ||
![]() |
c0742b5cf3 | ||
![]() |
163023ecc2 | ||
![]() |
791bc9a84f | ||
![]() |
c91f942194 | ||
![]() |
66385c06ae | ||
![]() |
6fe55529d6 | ||
4c6af7cdca | |||
![]() |
5e8730a616 | ||
![]() |
6acca28969 | ||
![]() |
017f66a342 | ||
![]() |
ff400c9448 | ||
![]() |
b28cc94a4a | ||
![]() |
4da95af45a | ||
![]() |
a9bf1e2969 | ||
![]() |
d50c12dc7d | ||
5361571c15 | |||
13d9322d81 | |||
d35f260f15 | |||
7338b79ef1 | |||
![]() |
edda87d53e | ||
de0a5c7094 | |||
![]() |
008f421377 | ||
![]() |
6821e13820 | ||
![]() |
fa73b481e6 | ||
![]() |
63581d32de | ||
![]() |
0db637ed5a | ||
![]() |
62b3e19217 | ||
![]() |
2b82312b77 | ||
81b8b18581 | |||
769cb40b79 | |||
81026c2871 | |||
dc33ad101a | |||
![]() |
b7baeddc7c | ||
![]() |
e6b968e48c | ||
![]() |
96bdfb3a63 | ||
![]() |
7002c683ab | ||
![]() |
ae7c2f6e5f | ||
b8c97a1d7a | |||
a5551c1be3 | |||
7d129215cf | |||
777d2fc0f0 | |||
7f45e97335 | |||
![]() |
feee22e389 | ||
![]() |
208372ed9e | ||
![]() |
6fd66c9396 | ||
![]() |
e8c28ad42c | ||
![]() |
5caefb5ea9 | ||
ac788d973f | |||
e973185be1 | |||
040af114e1 | |||
![]() |
6f60d642af | ||
![]() |
8a5967f592 | ||
![]() |
a929b5c683 | ||
![]() |
e32d4b15e8 | ||
![]() |
67b3c46758 | ||
![]() |
7de815bd90 | ||
![]() |
0aae97162e | ||
![]() |
ac31a1319b | ||
![]() |
e453ea48e1 | ||
![]() |
8f04aa70cb | ||
![]() |
d7d13d1a4f | ||
![]() |
6b056ce6e0 | ||
b340f4a17c | |||
93cb2a0513 | |||
610af51e95 | |||
efd7d651cc | |||
d139892ae0 | |||
45f3695f9d | |||
3e354f2f1a | |||
b0514cc564 | |||
3718c73341 | |||
cd76457128 | |||
f3d931d090 | |||
ffb3e27c0f | |||
8d6ca6431d | |||
920b14212f | |||
1e9c68859e | |||
![]() |
e390e67aee | ||
d27d060322 | |||
baa314d71f | |||
d98c3d8f71 | |||
5e497f790d | |||
3dbbc2943f | |||
925caccb57 | |||
a21e027403 | |||
4dec3657b0 | |||
06f78d7cfe | |||
6901914640 | |||
75db7fa196 | |||
f8ea882f99 | |||
dd0153e29a | |||
9dd146680d | |||
5fa6583a4e | |||
![]() |
48661361fa | ||
![]() |
4747172059 | ||
![]() |
f541dbe042 | ||
![]() |
a3e146a814 | ||
![]() |
fa6fc84bf8 | ||
![]() |
a0911a43dd | ||
![]() |
b6c6a5d696 | ||
![]() |
5353fd986e | ||
![]() |
3f40af54d1 | ||
![]() |
9e8d4fbe21 | ||
![]() |
cb3326fa42 | ||
![]() |
123473439c | ||
![]() |
c12312f523 | ||
dd8f7638c5 | |||
4edc4077f8 | |||
0d3b1fa490 | |||
828b0954a3 | |||
ec82912085 | |||
021067dab9 | |||
bfc04178a6 | |||
f390831835 | |||
5eefb8b222 | |||
c06e320f99 | |||
b810b79a44 | |||
3cc0122af4 | |||
48fb12ebeb | |||
82554b943e | |||
04e0cfe020 | |||
ed590cd6f5 | |||
c1991241e4 | |||
b503f03bd6 | |||
cff8eafc43 | |||
a0b2f5738a | |||
b335ded1d2 | |||
0a2097a238 | |||
1ab67de677 | |||
47277063e4 | |||
ca6ce37a0b | |||
a00f11d5b7 | |||
13ad5d72ae | |||
b9a7a76174 | |||
a8ae2ce955 | |||
de5661ef1b | |||
e4da3b0f3b | |||
95b6bd36e5 | |||
05aef9bd59 | |||
fda673038f | |||
24801553d6 | |||
43c3a14745 | |||
4b722c9b7f | |||
1150b4cd73 | |||
e7cfb2d6fe | |||
ad810de747 | |||
b57d7c699f | |||
ba825e61d5 | |||
aea20a552e | |||
0703a29562 | |||
db0381d6b1 | |||
a9be26d2bc | |||
db5ab0b9b8 | |||
072d990279 | |||
6b4f665f34 | |||
48a055d462 | |||
9146f3c7e1 | |||
1fe9acefe2 | |||
359b4570e4 | |||
1c720a0fda | |||
d1fdf14911 | |||
6fbeef5f8c | |||
6ef6106336 | |||
23ee40d990 | |||
4e236fc5ab | |||
d573910b7a | |||
da00b95599 | |||
e20310d257 | |||
![]() |
74151b06ef | ||
![]() |
de7a4ba55c | ||
![]() |
5ddeeec9ea | ||
![]() |
1f7042a68e | ||
![]() |
a65722f3e8 | ||
![]() |
964dacd907 | ||
![]() |
25b03979d5 | ||
![]() |
6151480ee6 | ||
![]() |
97fa5d9921 | ||
![]() |
83c9dc7437 | ||
![]() |
4bf0147198 | ||
![]() |
d7e5aaf919 | ||
![]() |
10a021f5fc | ||
![]() |
20df511401 | ||
![]() |
73708041e8 | ||
b71aafbb28 | |||
319ce9b065 | |||
87cff00b99 | |||
f38ee48ca3 | |||
ec6c24429a | |||
15915afeb8 | |||
b72085bcf3 | |||
5f96067c22 | |||
61e4e2a052 | |||
f7cdf221eb | |||
69ad95710a | |||
920572d3bc | |||
d3abbe86e9 | |||
3631efa567 | |||
a6e62afc1f | |||
8bfb3649dd | |||
45abf6575c | |||
7fb82da7ff | |||
e995a4cf92 | |||
2de25ca453 | |||
8d928eadba | |||
e03c25e397 | |||
b695293070 | |||
c09bfa0a26 | |||
f420a99b6f | |||
33b1851317 | |||
3c735eaf96 | |||
3f452c5acb | |||
380f55a0e8 | |||
8a89b3da29 | |||
f2ae1bfe09 | |||
17b781c1b4 | |||
68fb3f42a8 | |||
fc8c193f37 | |||
c949d776be | |||
e29e3e2fd3 | |||
e01c443fa2 | |||
![]() |
50450ecba6 | ||
![]() |
44c0d9357b | ||
![]() |
42ba5fa509 | ||
![]() |
24b2bb8e3f | ||
![]() |
026a9cf026 | ||
![]() |
87c8031e5a | ||
![]() |
bff3f0436c | ||
![]() |
bfe8c65628 | ||
![]() |
a22bf6b4a4 | ||
![]() |
c4e7b1a799 | ||
![]() |
232d0b5e77 | ||
![]() |
82095d9786 | ||
![]() |
f68967c5f2 | ||
![]() |
9898a4a930 | ||
![]() |
092881acc4 | ||
![]() |
b1ed295e26 | ||
2d8f0c2956 | |||
f0241d4a1c | |||
a11bd7cbe7 | |||
36ec4de9c7 | |||
843b66d61e | |||
afb87cd75c | |||
aa098ac800 | |||
bbbbfe2417 | |||
9ab55ec368 | |||
a85546534e | |||
83c786a5fd | |||
50d735b126 | |||
da893452ea | |||
6306799a4b | |||
82d812c25c | |||
890ad257e1 | |||
7cb5dab67f | |||
1cf6030646 | |||
36fd93da0d | |||
5483306d21 | |||
1f228a3f85 | |||
12cc7b3a3b | |||
61fd242938 | |||
78da3b9785 | |||
e0e06d73eb | |||
112fa503e6 | |||
9dab3b0dfe | |||
82064760d5 | |||
bd1354f95b | |||
fb74f41692 | |||
5db89d8743 | |||
b970912cc1 | |||
d196047382 | |||
eefb36cb99 | |||
dc5bfb224d | |||
e461e8fb4f | |||
8bb114e9c4 | |||
f77fc52ca7 | |||
1a28a2af23 | |||
d9c6360e0a | |||
8137661751 | |||
c66559ff84 | |||
e47c628891 | |||
7b0a5bcd5a | |||
6e7dedba81 | |||
83e356140d | |||
b66c7802e7 | |||
7311cf33b7 | |||
60c93f1e1c | |||
a36083ab18 | |||
![]() |
6308038a08 | ||
![]() |
e141abb5de | ||
![]() |
94c6496f9d | ||
![]() |
d360ba4817 | ||
![]() |
cca3f57373 | ||
![]() |
57e51ab8c5 | ||
![]() |
93511c0e61 | ||
7cae467b59 | |||
2df64cd098 | |||
![]() |
0a0757a69f | ||
![]() |
14bacc272e | ||
![]() |
2bc5630832 | ||
![]() |
ecb9726ba4 | ||
![]() |
894186e975 | ||
![]() |
053ebd7079 | ||
![]() |
fabc57b57a | ||
![]() |
04b9b202e5 | ||
![]() |
acec99ff43 | ||
![]() |
e81a01d3e8 | ||
![]() |
7101fb0997 | ||
![]() |
6b7ac9fba6 | ||
![]() |
0badcf63aa | ||
![]() |
bd69499f8f | ||
![]() |
23f835781c | ||
![]() |
5dd6f2d06b | ||
![]() |
7f9a211242 | ||
ca440a50fe | |||
994b51b5b1 | |||
fc0ddb0193 | |||
f0e6baad27 | |||
6ad4cb0928 | |||
91163948b5 | |||
e16cf2ce51 | |||
307a03f0ed | |||
b63d44b226 | |||
57be0df858 | |||
6843950bdc | |||
134cbd46e4 | |||
![]() |
91007735a1 | ||
![]() |
14ca463499 | ||
a7492269fb | |||
074c630ac6 | |||
f902a63144 | |||
ffcd2d4517 | |||
dd400bb14b | |||
63a2a6da08 | |||
3846e08e68 | |||
e625e67b5d | |||
0819857b86 | |||
fbbfd8acf0 | |||
95fb2df609 | |||
c1baee64d3 | |||
ce47d4ea68 | |||
14a839ebba | |||
636badcec2 | |||
6093f26fb6 | |||
4615fce28e | |||
328f544de1 | |||
0c76201bd9 | |||
0a1cd20585 | |||
b78b3cb942 | |||
62b5b49b02 | |||
7734d3dd65 | |||
27724a809f | |||
1d6fc40d59 | |||
176ecaa9f1 | |||
42efed578a | |||
![]() |
f7db737c1f | ||
![]() |
6512a9eb11 | ||
![]() |
3e96a24fb8 | ||
![]() |
01902de200 | ||
![]() |
e8e42a0b9d | ||
![]() |
5368da2632 | ||
![]() |
ddf332e779 | ||
![]() |
e01fe689d0 | ||
![]() |
c586970128 | ||
![]() |
f1d56a488a | ||
![]() |
12ced03aa5 | ||
![]() |
3471950f6f | ||
![]() |
6d55f5bacf | ||
![]() |
6468e9e317 | ||
![]() |
2270c4744c | ||
![]() |
e34eaa351e | ||
![]() |
6d4f8fd471 | ||
![]() |
b38f3b56f8 | ||
![]() |
e86092b3e0 | ||
![]() |
ed3120956c | ||
![]() |
e16760d4d0 | ||
![]() |
147a7e4468 | ||
![]() |
6b7db094a9 | ||
![]() |
9d3dec8577 | ||
![]() |
797ee21024 | ||
![]() |
e485752546 | ||
![]() |
c9728fe2ef | ||
![]() |
206718f1e8 | ||
![]() |
31b480a68e | ||
![]() |
1a335321b2 | ||
![]() |
96fc02de5c | ||
![]() |
804011d18d | ||
![]() |
f95100a1ff | ||
![]() |
bbc2454f36 | ||
![]() |
62437acf66 | ||
![]() |
9cbcf5baa7 | ||
![]() |
63260aac59 | ||
![]() |
b316315c61 | ||
![]() |
61be475044 | ||
![]() |
29befb44cc | ||
![]() |
6bfd39d5c0 | ||
![]() |
8e391444b4 | ||
![]() |
a945cabf11 | ||
![]() |
4634debe21 | ||
![]() |
d0456098e2 | ||
![]() |
a3c9887fe5 | ||
![]() |
327f36d022 | ||
![]() |
8eeb902467 | ||
![]() |
61e54cf52e | ||
![]() |
50291233a1 | ||
![]() |
edb3ffcf45 | ||
![]() |
e34f0443bc | ||
![]() |
cb0147a798 | ||
![]() |
a7f789f069 | ||
![]() |
66544f41f2 | ||
![]() |
82c55e6008 | ||
![]() |
1ad69e7127 | ||
![]() |
6470f2d983 | ||
![]() |
709ccf6c22 | ||
![]() |
03887826e8 | ||
![]() |
44a27008dd | ||
![]() |
33229a31ee | ||
![]() |
653047146a | ||
![]() |
423167fdd3 | ||
![]() |
4547d5887d | ||
![]() |
3790129b30 | ||
![]() |
aa95750e1f | ||
![]() |
ac6cd7e4c6 | ||
![]() |
0bfe45bebe | ||
![]() |
3c383ca874 | ||
![]() |
fccd0dad78 | ||
b0c3c11bd9 | |||
![]() |
bb00e91672 | ||
![]() |
2ef203246b | ||
![]() |
367ab28706 | ||
![]() |
8de0c0bd88 | ||
![]() |
aa3ac75470 | ||
![]() |
f6108b51a2 | ||
![]() |
3c8862763b | ||
![]() |
bab02a62e9 | ||
![]() |
d97c9876e8 | ||
![]() |
61285435e8 | ||
![]() |
8ea4d893f6 | ||
![]() |
593904cc44 | ||
![]() |
957eb1f7ab | ||
![]() |
7ca735bfb2 | ||
![]() |
0919fa06f6 | ||
![]() |
da777c1d7d | ||
![]() |
0305274a13 |
31
.dockerignore
Normal file
31
.dockerignore
Normal file
@@ -0,0 +1,31 @@
|
||||
.idea
|
||||
.git
|
||||
Dockerfile
|
||||
|
||||
|
||||
# Gradle
|
||||
.gradle
|
||||
build
|
||||
apps/BOB/build
|
||||
apps/addressbook/build
|
||||
apps/desktopgui/build
|
||||
apps/i2pcontrol/build
|
||||
apps/i2psnark/build
|
||||
apps/i2ptunnel/build
|
||||
apps/imagegen/build
|
||||
apps/jetty/build
|
||||
apps/jrobin/build
|
||||
apps/ministreaming/java/build
|
||||
apps/ministreaming/build
|
||||
apps/routerconsole/build
|
||||
apps/sam/build
|
||||
apps/streaming/build
|
||||
apps/susidns/build
|
||||
apps/susimail/build
|
||||
apps/systray/build
|
||||
core/java/build
|
||||
core/build
|
||||
installer/build
|
||||
router/java/build
|
||||
router/build
|
||||
|
67
.editorconfig
Normal file
67
.editorconfig
Normal file
@@ -0,0 +1,67 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[{*.bat,**/*.bat,installer/resources/proxy/*.ht}]
|
||||
end_of_line = crlf
|
||||
|
||||
[**/*.css]
|
||||
indent_size = 5
|
||||
|
||||
[{history.txt,LICENSE.txt}]
|
||||
indent_size = 3
|
||||
|
||||
[**/.project]
|
||||
indent_style = tab
|
||||
|
||||
[README.txt]
|
||||
indent_style = tab
|
||||
|
||||
[apps/BOB/**/*.java]
|
||||
indent_style = tab
|
||||
|
||||
[apps/routerconsole/java/src/com/vuze/plugins/mlab/tools/ndt/swingemu/*.java]
|
||||
indent_style = tab
|
||||
|
||||
[apps/routerconsole/java/src/edu/internet2/ndt/*.java]
|
||||
indent_style = tab
|
||||
|
||||
[apps/routerconsole/jsp/{createreseed.jsp,exportfamily.jsp,flags.jsp,index.jsp,viewhistory.jsp,viewrouterlog.jsp,viewstat.jsp,viewtheme.jsp,viewwrapperlog.jsp}]
|
||||
insert_final_newline = false
|
||||
|
||||
[apps/susimail/**/{*.java,*.js}]
|
||||
indent_style = tab
|
||||
|
||||
[apps/susimail/**/{Attachments.java,MailPart.java,WebMail.java}]
|
||||
end_of_line = crlf
|
||||
|
||||
[core/java/src/com/nettgryppa/**/*.java]
|
||||
indent_size = 2
|
||||
|
||||
[core/java/src/gnu/**/*.java]
|
||||
indent_size = 2
|
||||
|
||||
[core/java/src/gnu/getopt/*.properties]
|
||||
charset = iso-8859-1
|
||||
|
||||
[core/java/src/org/json/simple/**/*.java]
|
||||
end_of_line = crlf
|
||||
indent_style = tab
|
||||
|
||||
[core/java/src/com/southernstorm/**/*.java]
|
||||
indent_style = tab
|
||||
|
||||
[router/java/src/org/cybergarage/**/*.java]
|
||||
indent_style = tab
|
||||
|
||||
[router/java/src/org/freenetproject/*.java]
|
||||
indent_style = tab
|
||||
|
||||
[router/java/src/com/southernstorm/**/*.java]
|
||||
indent_style = tab
|
15
.gitignore
vendored
15
.gitignore
vendored
@@ -46,3 +46,18 @@ sloccount.sc
|
||||
|
||||
# but allow debian/patches
|
||||
!/debian/patches/*.(patch|diff)
|
||||
|
||||
# IDE project files
|
||||
# Eclipse
|
||||
.classpath
|
||||
.project
|
||||
.settings/
|
||||
# IDEA
|
||||
*.iml
|
||||
.idea
|
||||
|
||||
# Gradle
|
||||
.gradle
|
||||
|
||||
# TODO: why does this file appear?
|
||||
apps/routerconsole/jsp/favicon.ico
|
||||
|
105
.gitlab-ci.yml
Normal file
105
.gitlab-ci.yml
Normal file
@@ -0,0 +1,105 @@
|
||||
image: openjdk:8-alpine
|
||||
|
||||
stages:
|
||||
- test
|
||||
- build
|
||||
|
||||
cache:
|
||||
key: ${CI_COMMIT_REF_SLUG}
|
||||
paths:
|
||||
- $HOME/.gradle/caches/
|
||||
- $HOME/.gradle/wrapper/
|
||||
- .gradle
|
||||
|
||||
test:
|
||||
stage: test
|
||||
coverage: '/Total.*?([0-9]{1,3})%/'
|
||||
before_script:
|
||||
- apk add --no-cache grep
|
||||
script:
|
||||
- ./gradlew codeCoverageReport
|
||||
# The actual output that will be parsed by the code coverage
|
||||
- grep -oP "Total.*?%" build/reports/jacoco/html/index.html
|
||||
only:
|
||||
- master
|
||||
- merge_requests
|
||||
- tags
|
||||
|
||||
# Make sure we can build a docker image
|
||||
# It's cached for later jobs
|
||||
build_docker:
|
||||
stage: build
|
||||
image: docker:19.03.12
|
||||
services:
|
||||
- docker:19.03.12-dind
|
||||
script:
|
||||
# Try to load latest branch image from local tar or from registry
|
||||
- docker load -i ci-exports/$CI_COMMIT_REF_SLUG.tar || docker pull $CI_REGISTRY_IMAGE:latest || true
|
||||
- docker build --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:latest .
|
||||
- mkdir -p ci-exports/
|
||||
- docker save $CI_REGISTRY_IMAGE:latest > ci-exports/$CI_COMMIT_REF_SLUG.tar
|
||||
variables:
|
||||
# When using dind service, we need to instruct docker to talk with
|
||||
# the daemon started inside of the service. The daemon is available
|
||||
# with a network connection instead of the default
|
||||
# /var/run/docker.sock socket. Docker 19.03 does this automatically
|
||||
# by setting the DOCKER_HOST in
|
||||
# https://github.com/docker-library/docker/blob/d45051476babc297257df490d22cbd806f1b11e4/19.03/docker-entrypoint.sh#L23-L29
|
||||
#
|
||||
# The 'docker' hostname is the alias of the service container as described at
|
||||
# https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#accessing-the-services.
|
||||
#
|
||||
# Specify to Docker where to create the certificates, Docker will
|
||||
# create them automatically on boot, and will create
|
||||
# `/certs/client` that will be shared between the service and job
|
||||
# container, thanks to volume mount from config.toml
|
||||
DOCKER_TLS_CERTDIR: "/certs"
|
||||
# Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
|
||||
DOCKER_HOST: tcp://docker:2376
|
||||
cache:
|
||||
# The same key should be used across branches
|
||||
key: "$CI_COMMIT_REF_SLUG"
|
||||
paths:
|
||||
- ci-exports/
|
||||
only:
|
||||
- master
|
||||
- merge_requests
|
||||
- tags
|
||||
|
||||
|
||||
.build_debian:
|
||||
image: debian:buster-slim
|
||||
stage: build
|
||||
variables:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
before_script:
|
||||
# Workaround for installing openjdk-11-jre-headless
|
||||
- mkdir -p /usr/share/man/man1
|
||||
- apt-get update
|
||||
- apt-get -qqqy install debhelper ant debconf gettext libgmp-dev po-debconf fakeroot
|
||||
build-essential quilt dh-apparmor libservice-wrapper-java libjson-simple-java
|
||||
devscripts libjetty9-java libtomcat9-java libtaglibs-standard-jstlel-java libgetopt-java
|
||||
default-jdk-headless bash-completion
|
||||
script:
|
||||
- ant debian
|
||||
only:
|
||||
- master
|
||||
- merge_requests
|
||||
- tags
|
||||
|
||||
build_debian:buster:
|
||||
extends: .build_debian
|
||||
|
||||
build_debian:bullseye:
|
||||
image: debian:bullseye-slim
|
||||
extends: .build_debian
|
||||
|
||||
build_ubuntu-bionic:
|
||||
image: ubuntu:bionic
|
||||
extends: .build_debian
|
||||
before_script:
|
||||
- apt-get update
|
||||
- apt-get -qqqy install debhelper ant debconf gettext libgmp-dev po-debconf fakeroot
|
||||
build-essential quilt dh-apparmor libservice-wrapper-java libjson-simple-java
|
||||
devscripts libjetty9-java libtomcat9-java libtaglibs-standard-jstlel-java libgetopt-java
|
||||
bash-completion default-jdk-headless
|
6
.idea/ant.xml
generated
6
.idea/ant.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AntConfiguration">
|
||||
<buildFile url="file://$PROJECT_DIR$/build.xml" />
|
||||
</component>
|
||||
</project>
|
22
.idea/compiler.xml
generated
22
.idea/compiler.xml
generated
@@ -1,22 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<resourceExtensions />
|
||||
<wildcardResourcePatterns>
|
||||
<entry name="!?*.java" />
|
||||
<entry name="!?*.form" />
|
||||
<entry name="!?*.class" />
|
||||
<entry name="!?*.groovy" />
|
||||
<entry name="!?*.scala" />
|
||||
<entry name="!?*.flex" />
|
||||
<entry name="!?*.kt" />
|
||||
<entry name="!?*.clj" />
|
||||
<entry name="!?*.aj" />
|
||||
</wildcardResourcePatterns>
|
||||
<annotationProcessing>
|
||||
<profile default="true" name="Default" enabled="false">
|
||||
<processorPath useClasspath="true" />
|
||||
</profile>
|
||||
</annotationProcessing>
|
||||
</component>
|
||||
</project>
|
3
.idea/copyright/profiles_settings.xml
generated
3
.idea/copyright/profiles_settings.xml
generated
@@ -1,3 +0,0 @@
|
||||
<component name="CopyrightManager">
|
||||
<settings default="" />
|
||||
</component>
|
@@ -1,9 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="javax.servlet.jsp-2.2.0.v201112011158">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
22
.idea/libraries/jettylib.xml
generated
22
.idea/libraries/jettylib.xml
generated
@@ -1,22 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="jettylib">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-security-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-servlets-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-deploy-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-util-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-servlet-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-http-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-xml-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-server-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/servlet-api-3.0.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-jmx-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-webapp-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-io-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-continuation-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-rewrite-8.1.17.v20150415.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/jrobin_1_5_9_1.xml
generated
9
.idea/libraries/jrobin_1_5_9_1.xml
generated
@@ -1,9 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="jrobin-1.5.9.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jrobin/jrobin-1.5.9.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
10
.idea/libraries/lib.xml
generated
10
.idea/libraries/lib.xml
generated
@@ -1,10 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="lib">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/susidns/src/lib/jstl.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/susidns/src/lib/standard.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/start.xml
generated
9
.idea/libraries/start.xml
generated
@@ -1,9 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="start">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/start.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/systray4j.xml
generated
9
.idea/libraries/systray4j.xml
generated
@@ -1,9 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="systray4j">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/systray/java/lib/systray4j.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/tomcat_coyote_util.xml
generated
9
.idea/libraries/tomcat_coyote_util.xml
generated
@@ -1,9 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="tomcat-coyote-util">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat/lib/tomcat-coyote-util.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
12
.idea/libraries/tomcat_lib.xml
generated
12
.idea/libraries/tomcat_lib.xml
generated
@@ -1,12 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="tomcat-lib">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/tomcat-juli.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/el-api.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/jasper.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/jasper-el.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/wrapper.xml
generated
9
.idea/libraries/wrapper.xml
generated
@@ -1,9 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="wrapper">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/installer/lib/wrapper/all/wrapper.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/wrapper_win.xml
generated
9
.idea/libraries/wrapper_win.xml
generated
@@ -1,9 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="wrapper-win">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/installer/lib/wrapper/win-all/wrapper.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
57
.idea/misc.xml
generated
57
.idea/misc.xml
generated
@@ -1,57 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ClientPropertiesManager">
|
||||
<properties class="javax.swing.AbstractButton">
|
||||
<property name="hideActionText" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JComponent">
|
||||
<property name="html.disable" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JEditorPane">
|
||||
<property name="JEditorPane.w3cLengthUnits" class="java.lang.Boolean" />
|
||||
<property name="JEditorPane.honorDisplayProperties" class="java.lang.Boolean" />
|
||||
<property name="charset" class="java.lang.String" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JList">
|
||||
<property name="List.isFileList" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JPasswordField">
|
||||
<property name="JPasswordField.cutCopyAllowed" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JSlider">
|
||||
<property name="Slider.paintThumbArrowShape" class="java.lang.Boolean" />
|
||||
<property name="JSlider.isFilled" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JTable">
|
||||
<property name="Table.isFileList" class="java.lang.Boolean" />
|
||||
<property name="JTable.autoStartsEdit" class="java.lang.Boolean" />
|
||||
<property name="terminateEditOnFocusLost" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JToolBar">
|
||||
<property name="JToolBar.isRollover" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JTree">
|
||||
<property name="JTree.lineStyle" class="java.lang.String" />
|
||||
</properties>
|
||||
<properties class="javax.swing.text.JTextComponent">
|
||||
<property name="caretAspectRatio" class="java.lang.Double" />
|
||||
<property name="caretWidth" class="java.lang.Integer" />
|
||||
</properties>
|
||||
</component>
|
||||
<component name="EntryPointsManager">
|
||||
<entry_points version="2.0" />
|
||||
</component>
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
||||
<OptionsSetting value="true" id="Add" />
|
||||
<OptionsSetting value="true" id="Remove" />
|
||||
<OptionsSetting value="true" id="Checkout" />
|
||||
<OptionsSetting value="true" id="Update" />
|
||||
<OptionsSetting value="true" id="Status" />
|
||||
<OptionsSetting value="true" id="Edit" />
|
||||
<ConfirmationsSetting value="0" id="Add" />
|
||||
<ConfirmationsSetting value="0" id="Remove" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build" />
|
||||
</component>
|
||||
</project>
|
27
.idea/modules.xml
generated
27
.idea/modules.xml
generated
@@ -1,27 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/BOB/BOB.iml" filepath="$PROJECT_DIR$/apps/BOB/BOB.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/addressbook/addressbook.iml" filepath="$PROJECT_DIR$/apps/addressbook/addressbook.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/admin/admin.iml" filepath="$PROJECT_DIR$/apps/admin/admin.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/core/core.iml" filepath="$PROJECT_DIR$/core/core.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/desktopgui/desktopgui.iml" filepath="$PROJECT_DIR$/apps/desktopgui/desktopgui.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/i2psnark/i2psnark.iml" filepath="$PROJECT_DIR$/apps/i2psnark/i2psnark.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/i2ptunnel/i2ptunnel.iml" filepath="$PROJECT_DIR$/apps/i2ptunnel/i2ptunnel.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/identicon/identicon.iml" filepath="$PROJECT_DIR$/apps/imagegen/identicon/identicon.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/imagegen/imagegen.iml" filepath="$PROJECT_DIR$/apps/imagegen/imagegen/imagegen.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/installer/installer.iml" filepath="$PROJECT_DIR$/installer/installer.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/jetty/jetty.iml" filepath="$PROJECT_DIR$/apps/jetty/jetty.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/ministreaming/ministreaming.iml" filepath="$PROJECT_DIR$/apps/ministreaming/ministreaming.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/router/router.iml" filepath="$PROJECT_DIR$/router/router.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/routerconsole/routerconsole.iml" filepath="$PROJECT_DIR$/apps/routerconsole/routerconsole.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/sam/sam.iml" filepath="$PROJECT_DIR$/apps/sam/sam.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/streaming/streaming.iml" filepath="$PROJECT_DIR$/apps/streaming/streaming.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/susidns/susidns.iml" filepath="$PROJECT_DIR$/apps/susidns/susidns.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/susimail/susimail.iml" filepath="$PROJECT_DIR$/apps/susimail/susimail.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/systray/systray.iml" filepath="$PROJECT_DIR$/apps/systray/systray.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/zxing/zxing.iml" filepath="$PROJECT_DIR$/apps/imagegen/zxing/zxing.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
.idea/runConfigurations/updater.xml
generated
6
.idea/runConfigurations/updater.xml
generated
@@ -1,6 +0,0 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="updater" type="AntRunConfiguration" factoryName="Ant Target">
|
||||
<antsettings antfile="file://$PROJECT_DIR$/build.xml" target="updater" />
|
||||
<method />
|
||||
</configuration>
|
||||
</component>
|
35
.mtn-ignore
35
.mtn-ignore
@@ -50,6 +50,41 @@ core/c/jcpuid/msvc/*.user
|
||||
# Build property overrides
|
||||
override.properties
|
||||
|
||||
# Launcher build paths
|
||||
launchers/macosx/target
|
||||
launchers/browserbundle/target
|
||||
launchers/macosx/project/target
|
||||
launchers/browserbundle/project/target
|
||||
launchers/target
|
||||
launchers/project/target
|
||||
launchers/common/target
|
||||
launchers/output
|
||||
launchers/project/project
|
||||
|
||||
# Reporting
|
||||
sloccount.sc
|
||||
^reports/
|
||||
|
||||
# IDE project files
|
||||
# Eclipse
|
||||
/.classpath$
|
||||
/.project$
|
||||
/.settings
|
||||
# IDEA
|
||||
\.iml$
|
||||
|
||||
|
||||
# Meeh stuff
|
||||
target/scala-2.12
|
||||
target/streams
|
||||
project/target
|
||||
launchers/macosx/version.h
|
||||
launchers/macosx/project/project/target
|
||||
launchers/macosx/I2PLauncher.xcodeproj/project.xcworkspace/xcuserdata
|
||||
launchers/macosx/I2PLauncher.xcodeproj/xcuserdata
|
||||
launchers/macosx/I2PLauncher.xcworkspace/xcuserdata
|
||||
launchers/macosx/Sparkle.framework
|
||||
launchers/macosx/I2PLauncher.app
|
||||
launchers/macosx/releases.done
|
||||
launchers/macosx/target
|
||||
|
||||
|
41
.travis.yml
Normal file
41
.travis.yml
Normal file
@@ -0,0 +1,41 @@
|
||||
language: java
|
||||
dist: bionic
|
||||
|
||||
jdk:
|
||||
- oraclejdk11
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- jdk: oraclejdk11
|
||||
addons:
|
||||
sonarcloud:
|
||||
organization: "i2p"
|
||||
before_install:
|
||||
- sed -i "1iplugins {\n id 'org.sonarqube' version '3.0'\n}\n" build.gradle
|
||||
- jdk: openjdk8
|
||||
|
||||
before_cache:
|
||||
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
|
||||
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.gradle/caches/
|
||||
- $HOME/.gradle/wrapper/
|
||||
- $HOME/.sonar/cache/
|
||||
- .gradle
|
||||
|
||||
env:
|
||||
- SONAR_SCANNER_OPTS="-Xmx2048m"
|
||||
|
||||
script:
|
||||
- travis_wait 45 ./tests/scripts/travis.sh
|
||||
|
||||
after_success:
|
||||
- bash <(curl -s https://codecov.io/bash)
|
||||
|
||||
notifications:
|
||||
irc:
|
||||
channels:
|
||||
- "chat.freenode.net#i2p-dev"
|
||||
on_success: change
|
||||
on_failure: always
|
281
.tx/config
281
.tx/config
@@ -1,3 +1,6 @@
|
||||
;; warning - conversions for all Java bundles:
|
||||
;; id->in, he->iw, iy, yi->ji
|
||||
|
||||
[I2P.i2ptunnel]
|
||||
source_file = apps/i2ptunnel/locale/messages_en.po
|
||||
source_lang = en
|
||||
@@ -6,9 +9,12 @@ trans.cs = apps/i2ptunnel/locale/messages_cs.po
|
||||
trans.da = apps/i2ptunnel/locale/messages_da.po
|
||||
trans.de = apps/i2ptunnel/locale/messages_de.po
|
||||
trans.es = apps/i2ptunnel/locale/messages_es.po
|
||||
trans.fa = apps/i2ptunnel/locale/messages_fa.po
|
||||
trans.fi = apps/i2ptunnel/locale/messages_fi.po
|
||||
trans.fr = apps/i2ptunnel/locale/messages_fr.po
|
||||
trans.hu = apps/i2ptunnel/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/i2ptunnel/locale/messages_in.po
|
||||
trans.it = apps/i2ptunnel/locale/messages_it.po
|
||||
trans.ja = apps/i2ptunnel/locale/messages_ja.po
|
||||
trans.ko = apps/i2ptunnel/locale/messages_ko.po
|
||||
@@ -21,6 +27,7 @@ trans.pt_BR = apps/i2ptunnel/locale/messages_pt_BR.po
|
||||
trans.ro = apps/i2ptunnel/locale/messages_ro.po
|
||||
trans.ru_RU = apps/i2ptunnel/locale/messages_ru.po
|
||||
trans.sk = apps/i2ptunnel/locale/messages_sk.po
|
||||
trans.sq = apps/i2ptunnel/locale/messages_sq.po
|
||||
trans.sv_SE = apps/i2ptunnel/locale/messages_sv.po
|
||||
trans.tr_TR = apps/i2ptunnel/locale/messages_tr.po
|
||||
trans.uk_UA = apps/i2ptunnel/locale/messages_uk.po
|
||||
@@ -34,7 +41,9 @@ source_lang = en
|
||||
trans.ar = apps/i2ptunnel/locale-proxy/messages_ar.po
|
||||
trans.cs = apps/i2ptunnel/locale-proxy/messages_cs.po
|
||||
trans.de = apps/i2ptunnel/locale-proxy/messages_de.po
|
||||
trans.el = apps/i2ptunnel/locale-proxy/messages_el.po
|
||||
trans.es = apps/i2ptunnel/locale-proxy/messages_es.po
|
||||
trans.fa = apps/i2ptunnel/locale-proxy/messages_fa.po
|
||||
trans.fi = apps/i2ptunnel/locale-proxy/messages_fi.po
|
||||
trans.fr = apps/i2ptunnel/locale-proxy/messages_fr.po
|
||||
trans.hu = apps/i2ptunnel/locale-proxy/messages_hu.po
|
||||
@@ -44,6 +53,7 @@ trans.it = apps/i2ptunnel/locale-proxy/messages_it.po
|
||||
trans.ko = apps/i2ptunnel/locale-proxy/messages_ko.po
|
||||
trans.nb = apps/i2ptunnel/locale-proxy/messages_nb.po
|
||||
trans.nl = apps/i2ptunnel/locale-proxy/messages_nl.po
|
||||
trans.nn = apps/i2ptunnel/locale-proxy/messages_nn.po
|
||||
trans.pl = apps/i2ptunnel/locale-proxy/messages_pl.po
|
||||
trans.pt = apps/i2ptunnel/locale-proxy/messages_pt.po
|
||||
trans.pt_BR = apps/i2ptunnel/locale-proxy/messages_pt_BR.po
|
||||
@@ -56,19 +66,97 @@ trans.uk_UA = apps/i2ptunnel/locale-proxy/messages_uk.po
|
||||
trans.vi = apps/i2ptunnel/locale-proxy/messages_vi.po
|
||||
trans.zh_CN = apps/i2ptunnel/locale-proxy/messages_zh.po
|
||||
|
||||
[I2P.core]
|
||||
type = PO
|
||||
source_file = core/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = core/locale/messages_ar.po
|
||||
trans.az = core/locale/messages_az.po
|
||||
trans.cs = core/locale/messages_cs.po
|
||||
trans.da = core/locale/messages_da.po
|
||||
trans.de = core/locale/messages_de.po
|
||||
trans.el = core/locale/messages_el.po
|
||||
trans.es = core/locale/messages_es.po
|
||||
trans.et_EE = core/locale/messages_et.po
|
||||
trans.fa = core/locale/messages_fa.po
|
||||
trans.fi = core/locale/messages_fi.po
|
||||
trans.fr = core/locale/messages_fr.po
|
||||
trans.hu = core/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = core/locale/messages_in.po
|
||||
trans.it = core/locale/messages_it.po
|
||||
trans.ja = core/locale/messages_ja.po
|
||||
trans.ko = core/locale/messages_ko.po
|
||||
trans.ku = core/locale/messages_ku.po
|
||||
trans.nb = core/locale/messages_nb.po
|
||||
trans.nl = core/locale/messages_nl.po
|
||||
trans.pl = core/locale/messages_pl.po
|
||||
trans.pt = core/locale/messages_pt.po
|
||||
trans.pt_BR = core/locale/messages_pt_BR.po
|
||||
trans.ro = core/locale/messages_ro.po
|
||||
trans.ru_RU = core/locale/messages_ru.po
|
||||
trans.sv_SE = core/locale/messages_sv.po
|
||||
trans.tk = core/locale/messages_tk.po
|
||||
trans.tr_TR = core/locale/messages_tr.po
|
||||
trans.uk_UA = core/locale/messages_uk.po
|
||||
trans.vi = core/locale/messages_vi.po
|
||||
trans.zh_CN = core/locale/messages_zh.po
|
||||
trans.zh_TW = core/locale/messages_zh_TW.po
|
||||
|
||||
[I2P.router]
|
||||
type = PO
|
||||
source_file = router/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = router/locale/messages_ar.po
|
||||
trans.az = router/locale/messages_az.po
|
||||
trans.cs = router/locale/messages_cs.po
|
||||
trans.da = router/locale/messages_da.po
|
||||
trans.de = router/locale/messages_de.po
|
||||
trans.el = router/locale/messages_el.po
|
||||
trans.es = router/locale/messages_es.po
|
||||
trans.et_EE = router/locale/messages_et.po
|
||||
trans.fa = router/locale/messages_fa.po
|
||||
trans.fi = router/locale/messages_fi.po
|
||||
trans.fr = router/locale/messages_fr.po
|
||||
trans.hu = router/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = router/locale/messages_in.po
|
||||
trans.it = router/locale/messages_it.po
|
||||
trans.ja = router/locale/messages_ja.po
|
||||
trans.ko = router/locale/messages_ko.po
|
||||
trans.ku = router/locale/messages_ku.po
|
||||
trans.nb = router/locale/messages_nb.po
|
||||
trans.nl = router/locale/messages_nl.po
|
||||
trans.pl = router/locale/messages_pl.po
|
||||
trans.pt = router/locale/messages_pt.po
|
||||
trans.pt_BR = router/locale/messages_pt_BR.po
|
||||
trans.ro = router/locale/messages_ro.po
|
||||
trans.ru_RU = router/locale/messages_ru.po
|
||||
trans.sv_SE = router/locale/messages_sv.po
|
||||
trans.tk = router/locale/messages_tk.po
|
||||
trans.tr_TR = router/locale/messages_tr.po
|
||||
trans.uk_UA = router/locale/messages_uk.po
|
||||
trans.vi = router/locale/messages_vi.po
|
||||
trans.zh_CN = router/locale/messages_zh.po
|
||||
trans.zh_TW = router/locale/messages_zh_TW.po
|
||||
|
||||
[I2P.routerconsole]
|
||||
source_file = apps/routerconsole/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = apps/routerconsole/locale/messages_ar.po
|
||||
trans.az = apps/routerconsole/locale/messages_az.po
|
||||
trans.cs = apps/routerconsole/locale/messages_cs.po
|
||||
trans.da = apps/routerconsole/locale/messages_da.po
|
||||
trans.de = apps/routerconsole/locale/messages_de.po
|
||||
trans.el = apps/routerconsole/locale/messages_el.po
|
||||
trans.es = apps/routerconsole/locale/messages_es.po
|
||||
trans.et_EE = apps/routerconsole/locale/messages_et.po
|
||||
trans.fa = apps/routerconsole/locale/messages_fa.po
|
||||
trans.fi = apps/routerconsole/locale/messages_fi.po
|
||||
trans.fr = apps/routerconsole/locale/messages_fr.po
|
||||
trans.hu = apps/routerconsole/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/routerconsole/locale/messages_in.po
|
||||
trans.it = apps/routerconsole/locale/messages_it.po
|
||||
trans.ja = apps/routerconsole/locale/messages_ja.po
|
||||
trans.ko = apps/routerconsole/locale/messages_ko.po
|
||||
@@ -90,19 +178,23 @@ trans.zh_TW = apps/routerconsole/locale/messages_zh_TW.po
|
||||
source_file = apps/routerconsole/locale-news/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = apps/routerconsole/locale-news/messages_ar.po
|
||||
trans.az = apps/routerconsole/locale-news/messages_az.po
|
||||
trans.cs = apps/routerconsole/locale-news/messages_cs.po
|
||||
trans.de = apps/routerconsole/locale-news/messages_de.po
|
||||
trans.el = apps/routerconsole/locale-news/messages_el.po
|
||||
trans.es = apps/routerconsole/locale-news/messages_es.po
|
||||
trans.fa = apps/routerconsole/locale-news/messages_fa.po
|
||||
trans.fi = apps/routerconsole/locale-news/messages_fi.po
|
||||
trans.fr = apps/routerconsole/locale-news/messages_fr.po
|
||||
trans.gl = apps/routerconsole/locale-news/messages_gl.po
|
||||
trans.he = apps/routerconsole/locale-news/messages_he.po
|
||||
;; Java converts he to iw
|
||||
trans.he = apps/routerconsole/locale-news/messages_iw.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/routerconsole/locale-news/messages_in.po
|
||||
trans.it = apps/routerconsole/locale-news/messages_it.po
|
||||
trans.ja = apps/routerconsole/locale-news/messages_ja.po
|
||||
trans.ko = apps/routerconsole/locale-news/messages_ko.po
|
||||
trans.ku = apps/routerconsole/locale-news/messages_ku.po
|
||||
trans.mg = apps/routerconsole/locale-news/messages_mg.po
|
||||
trans.nb = apps/routerconsole/locale-news/messages_nb.po
|
||||
trans.nl = apps/routerconsole/locale-news/messages_nl.po
|
||||
@@ -113,7 +205,9 @@ trans.ro = apps/routerconsole/locale-news/messages_ro.po
|
||||
trans.ru_RU = apps/routerconsole/locale-news/messages_ru.po
|
||||
trans.sk = apps/routerconsole/locale-news/messages_sk.po
|
||||
trans.sq = apps/routerconsole/locale-news/messages_sq.po
|
||||
trans.sr = apps/routerconsole/locale-news/messages_sr.po
|
||||
trans.sv_SE = apps/routerconsole/locale-news/messages_sv.po
|
||||
trans.tk = apps/routerconsole/locale-news/messages_tk.po
|
||||
trans.tr_TR = apps/routerconsole/locale-news/messages_tr.po
|
||||
trans.uk_UA = apps/routerconsole/locale-news/messages_uk.po
|
||||
trans.zh_CN = apps/routerconsole/locale-news/messages_zh.po
|
||||
@@ -123,7 +217,11 @@ trans.zh_TW = apps/routerconsole/locale-news/messages_zh_TW.po
|
||||
type = PO
|
||||
source_file = apps/routerconsole/locale-countries/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = apps/routerconsole/locale-countries/messages_ar.po
|
||||
trans.az = apps/routerconsole/locale-countries/messages_az.po
|
||||
trans.bg = apps/routerconsole/locale-countries/messages_bg.po
|
||||
trans.ca = apps/routerconsole/locale-countries/messages_ca.po
|
||||
trans.cs = apps/routerconsole/locale-countries/messages_cs.po
|
||||
trans.da = apps/routerconsole/locale-countries/messages_da.po
|
||||
trans.de = apps/routerconsole/locale-countries/messages_de.po
|
||||
trans.el = apps/routerconsole/locale-countries/messages_el.po
|
||||
@@ -133,10 +231,17 @@ trans.fa = apps/routerconsole/locale-countries/messages_fa.po
|
||||
trans.fi = apps/routerconsole/locale-countries/messages_fi.po
|
||||
trans.fr = apps/routerconsole/locale-countries/messages_fr.po
|
||||
trans.gl = apps/routerconsole/locale-countries/messages_gl.po
|
||||
trans.hi = apps/routerconsole/locale-countries/messages_hi.po
|
||||
trans.hr = apps/routerconsole/locale-countries/messages_hr.po
|
||||
trans.hu = apps/routerconsole/locale-countries/messages_hu.po
|
||||
;; Java converts he to iw
|
||||
trans.he = apps/routerconsole/locale-countries/messages_iw.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/routerconsole/locale-countries/messages_in.po
|
||||
trans.it = apps/routerconsole/locale-countries/messages_it.po
|
||||
trans.ja = apps/routerconsole/locale-countries/messages_ja.po
|
||||
trans.ko = apps/routerconsole/locale-countries/messages_ko.po
|
||||
trans.ku = apps/routerconsole/locale-countries/messages_ku.po
|
||||
trans.mg = apps/routerconsole/locale-countries/messages_mg.po
|
||||
trans.nb = apps/routerconsole/locale-countries/messages_nb.po
|
||||
trans.nl = apps/routerconsole/locale-countries/messages_nl.po
|
||||
@@ -147,7 +252,9 @@ trans.ro = apps/routerconsole/locale-countries/messages_ro.po
|
||||
trans.ru_RU = apps/routerconsole/locale-countries/messages_ru.po
|
||||
trans.sk = apps/routerconsole/locale-countries/messages_sk.po
|
||||
trans.sq = apps/routerconsole/locale-countries/messages_sq.po
|
||||
trans.sr = apps/routerconsole/locale-countries/messages_sr.po
|
||||
trans.sv_SE = apps/routerconsole/locale-countries/messages_sv.po
|
||||
trans.tk = apps/routerconsole/locale-countries/messages_tk.po
|
||||
trans.tr_TR = apps/routerconsole/locale-countries/messages_tr.po
|
||||
trans.uk_UA = apps/routerconsole/locale-countries/messages_uk.po
|
||||
trans.vi = apps/routerconsole/locale-countries/messages_vi.po
|
||||
@@ -160,10 +267,14 @@ source_lang = en
|
||||
trans.ar = apps/i2psnark/locale/messages_ar.po
|
||||
trans.cs = apps/i2psnark/locale/messages_cs.po
|
||||
trans.de = apps/i2psnark/locale/messages_de.po
|
||||
trans.el = apps/i2psnark/locale/messages_el.po
|
||||
trans.es = apps/i2psnark/locale/messages_es.po
|
||||
trans.fa = apps/i2psnark/locale/messages_fa.po
|
||||
trans.fi = apps/i2psnark/locale/messages_fi.po
|
||||
trans.fr = apps/i2psnark/locale/messages_fr.po
|
||||
trans.hu = apps/i2psnark/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/i2psnark/locale/messages_in.po
|
||||
trans.it = apps/i2psnark/locale/messages_it.po
|
||||
trans.ja = apps/i2psnark/locale/messages_ja.po
|
||||
trans.ko = apps/i2psnark/locale/messages_ko.po
|
||||
@@ -176,10 +287,12 @@ trans.ro = apps/i2psnark/locale/messages_ro.po
|
||||
trans.ru_RU = apps/i2psnark/locale/messages_ru.po
|
||||
trans.sk = apps/i2psnark/locale/messages_sk.po
|
||||
trans.sv_SE = apps/i2psnark/locale/messages_sv.po
|
||||
trans.sq = apps/i2psnark/locale/messages_sq.po
|
||||
trans.tr_TR = apps/i2psnark/locale/messages_tr.po
|
||||
trans.uk_UA = apps/i2psnark/locale/messages_uk.po
|
||||
trans.vi = apps/i2psnark/locale/messages_vi.po
|
||||
trans.zh_CN = apps/i2psnark/locale/messages_zh.po
|
||||
trans.zh_TW = apps/i2psnark/locale/messages_zh_TW.po
|
||||
|
||||
[I2P.susidns]
|
||||
source_file = apps/susidns/locale/messages_en.po
|
||||
@@ -190,10 +303,13 @@ trans.da = apps/susidns/locale/messages_da.po
|
||||
trans.de = apps/susidns/locale/messages_de.po
|
||||
trans.el = apps/susidns/locale/messages_el.po
|
||||
trans.es = apps/susidns/locale/messages_es.po
|
||||
trans.fa = apps/susidns/locale/messages_fa.po
|
||||
trans.fi = apps/susidns/locale/messages_fi.po
|
||||
trans.fr = apps/susidns/locale/messages_fr.po
|
||||
trans.gl = apps/susidns/locale/messages_gl.po
|
||||
trans.hu = apps/susidns/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/susidns/locale/messages_in.po
|
||||
trans.it = apps/susidns/locale/messages_it.po
|
||||
trans.ja = apps/susidns/locale/messages_ja.po
|
||||
trans.ko = apps/susidns/locale/messages_ko.po
|
||||
@@ -214,6 +330,7 @@ trans.zh_TW = apps/susidns/locale/messages_zh_TW.po
|
||||
source_file = apps/desktopgui/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = apps/desktopgui/locale/messages_ar.po
|
||||
trans.az = apps/desktopgui/locale/messages_az.po
|
||||
trans.bg = apps/desktopgui/locale/messages_bg.po
|
||||
trans.ca = apps/desktopgui/locale/messages_ca.po
|
||||
trans.cs = apps/desktopgui/locale/messages_cs.po
|
||||
@@ -221,6 +338,7 @@ trans.da = apps/desktopgui/locale/messages_da.po
|
||||
trans.de = apps/desktopgui/locale/messages_de.po
|
||||
trans.el = apps/desktopgui/locale/messages_el.po
|
||||
trans.es = apps/desktopgui/locale/messages_es.po
|
||||
trans.es_AR = apps/desktopgui/locale/messages_es_AR.po
|
||||
trans.fa = apps/desktopgui/locale/messages_fa.po
|
||||
trans.fi = apps/desktopgui/locale/messages_fi.po
|
||||
trans.fr = apps/desktopgui/locale/messages_fr.po
|
||||
@@ -231,6 +349,7 @@ trans.id = apps/desktopgui/locale/messages_in.po
|
||||
trans.it = apps/desktopgui/locale/messages_it.po
|
||||
trans.ja = apps/desktopgui/locale/messages_ja.po
|
||||
trans.ko = apps/desktopgui/locale/messages_ko.po
|
||||
trans.ku = apps/desktopgui/locale/messages_ku.po
|
||||
trans.mg = apps/desktopgui/locale/messages_mg.po
|
||||
trans.nb = apps/desktopgui/locale/messages_nb.po
|
||||
trans.nl = apps/desktopgui/locale/messages_nl.po
|
||||
@@ -240,37 +359,52 @@ trans.pt_BR = apps/desktopgui/locale/messages_pt_BR.po
|
||||
trans.ro = apps/desktopgui/locale/messages_ro.po
|
||||
trans.ru_RU = apps/desktopgui/locale/messages_ru.po
|
||||
trans.sk = apps/desktopgui/locale/messages_sk.po
|
||||
trans.sr = apps/desktopgui/locale/messages_sr.po
|
||||
trans.sv_SE = apps/desktopgui/locale/messages_sv.po
|
||||
trans.sq = apps/desktopgui/locale/messages_sq.po
|
||||
trans.uk_UA = apps/desktopgui/locale/messages_uk.po
|
||||
trans.tk = apps/desktopgui/locale/messages_tk.po
|
||||
trans.tr_TR = apps/desktopgui/locale/messages_tr.po
|
||||
trans.vi = apps/desktopgui/locale/messages_vi.po
|
||||
trans.zh_CN = apps/desktopgui/locale/messages_zh.po
|
||||
trans.zh_TW = apps/desktopgui/locale/messages_zh_TW.po
|
||||
|
||||
[I2P.susimail]
|
||||
source_file = apps/susimail/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = apps/susimail/locale/messages_ar.po
|
||||
trans.az = apps/susimail/locale/messages_az.po
|
||||
trans.bg = apps/susimail/locale/messages_bg.po
|
||||
trans.ca = apps/susimail/locale/messages_ca.po
|
||||
trans.cs = apps/susimail/locale/messages_cs.po
|
||||
trans.da = apps/susimail/locale/messages_da.po
|
||||
trans.de = apps/susimail/locale/messages_de.po
|
||||
trans.el = apps/susimail/locale/messages_el.po
|
||||
trans.es = apps/susimail/locale/messages_es.po
|
||||
trans.fa = apps/susimail/locale/messages_fa.po
|
||||
trans.fi = apps/susimail/locale/messages_fi.po
|
||||
trans.fr = apps/susimail/locale/messages_fr.po
|
||||
trans.gl = apps/susimail/locale/messages_gl.po
|
||||
trans.hr = apps/susimail/locale/messages_hr.po
|
||||
trans.hu = apps/susimail/locale/messages_hu.po
|
||||
;; Java converts he to iw
|
||||
trans.he = apps/susimail/locale/messages_iw.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/susimail/locale/messages_in.po
|
||||
trans.it = apps/susimail/locale/messages_it.po
|
||||
trans.ja = apps/susimail/locale/messages_ja.po
|
||||
trans.ko = apps/susimail/locale/messages_ko.po
|
||||
trans.mg = apps/susimail/locale/messages_mg.po
|
||||
trans.nb = apps/susimail/locale/messages_nb.po
|
||||
trans.nl = apps/susimail/locale/messages_nl.po
|
||||
trans.pl = apps/susimail/locale/messages_pl.po
|
||||
trans.pt = apps/susimail/locale/messages_pt.po
|
||||
trans.pt_BR = apps/susimail/locale/messages_pt_BR.po
|
||||
trans.ro = apps/susimail/locale/messages_ro.po
|
||||
trans.ru_RU = apps/susimail/locale/messages_ru.po
|
||||
trans.sk = apps/susimail/locale/messages_sk.po
|
||||
trans.sq = apps/susimail/locale/messages_sq.po
|
||||
trans.sr = apps/susimail/locale/messages_sr.po
|
||||
trans.sv_SE = apps/susimail/locale/messages_sv.po
|
||||
trans.tr_TR = apps/susimail/locale/messages_tr.po
|
||||
trans.uk_UA = apps/susimail/locale/messages_uk.po
|
||||
@@ -281,17 +415,21 @@ trans.zh_TW = apps/susimail/locale/messages_zh_TW.po
|
||||
[I2P.debconf]
|
||||
source_file = debian/po/templates.pot
|
||||
source_lang = en
|
||||
trans.ar = debian/po/ar.po
|
||||
trans.az = debian/po/az.po
|
||||
trans.cs = debian/po/cs.po
|
||||
trans.de = debian/po/de.po
|
||||
trans.el = debian/po/el.po
|
||||
trans.es = debian/po/es.po
|
||||
trans.fi = debian/po/fi.po
|
||||
trans.fr = debian/po/fr.po
|
||||
trans.gl = debian/po/gl.po
|
||||
trans.id = debian/po/id.po
|
||||
trans.it = debian/po/it.po
|
||||
trans.hu = debian/po/hu.po
|
||||
trans.ja = debian/po/ja.po
|
||||
trans.ko = debian/po/ko.po
|
||||
trans.nb = debian/po/nb.po
|
||||
trans.nl = debian/po/nl.po
|
||||
trans.pl = debian/po/pl.po
|
||||
trans.pt = debian/po/pt.po
|
||||
@@ -301,6 +439,7 @@ trans.ru_RU = debian/po/ru.po
|
||||
trans.sk = debian/po/sk.po
|
||||
trans.sq = debian/po/sq.po
|
||||
trans.sv_SE = debian/po/sv.po
|
||||
trans.tk = debian/po/tk.po
|
||||
trans.tr_TR = debian/po/tr.po
|
||||
trans.uk_UA = debian/po/uk.po
|
||||
trans.zh_CN = debian/po/zh.po
|
||||
@@ -309,17 +448,18 @@ trans.zh_TW = debian/po/zh_TW.po
|
||||
[I2P.i2prouter-script]
|
||||
source_file = installer/resources/locale/po/messages_en.po
|
||||
source_lang = en
|
||||
;; currently fails check
|
||||
;;trans.ca = installer/resources/locale/po/messages_ca.po
|
||||
trans.ar = installer/resources/locale/po/messages_ar.po
|
||||
trans.az = installer/resources/locale/po/messages_az.po
|
||||
trans.ca = installer/resources/locale/po/messages_ca.po
|
||||
trans.de = installer/resources/locale/po/messages_de.po
|
||||
trans.es = installer/resources/locale/po/messages_es.po
|
||||
;; currently fails check
|
||||
;;trans.fi = installer/resources/locale/po/messages_fi.po
|
||||
trans.fi = installer/resources/locale/po/messages_fi.po
|
||||
trans.fr = installer/resources/locale/po/messages_fr.po
|
||||
trans.id = installer/resources/locale/po/messages_id.po
|
||||
trans.it = installer/resources/locale/po/messages_it.po
|
||||
trans.ja = installer/resources/locale/po/messages_ja.po
|
||||
trans.ko = installer/resources/locale/po/messages_ko.po
|
||||
trans.nb = installer/resources/locale/po/messages_nb.po
|
||||
trans.nl = installer/resources/locale/po/messages_nl.po
|
||||
trans.pl = installer/resources/locale/po/messages_pl.po
|
||||
trans.pt = installer/resources/locale/po/messages_pt.po
|
||||
@@ -329,54 +469,74 @@ trans.ru_RU = installer/resources/locale/po/messages_ru.po
|
||||
trans.sk = installer/resources/locale/po/messages_sk.po
|
||||
trans.sv_SE = installer/resources/locale/po/messages_sv.po
|
||||
trans.tr_TR = installer/resources/locale/po/messages_tr.po
|
||||
;; currently fails check
|
||||
;;trans.uk_UA = installer/resources/locale/po/messages_uk.po
|
||||
trans.uk_UA = installer/resources/locale/po/messages_uk.po
|
||||
trans.zh_CN = installer/resources/locale/po/messages_zh.po
|
||||
|
||||
[I2P.getopt]
|
||||
;;
|
||||
;; Java properties files (when not read with our DataHelper methods) must be ISO-8859-1 encoded.
|
||||
;; See https://docs.oracle.com/javase/6/docs/api/java/util/Properties.html
|
||||
;; Several getopt translations from Transifex are ISO-8859-1 encoded.
|
||||
;; So that all our source files are consistently UTF-8 encoded,
|
||||
;; you may optionally convert them to ASCII with Unicode escapes after downloading.
|
||||
;; Convert files with:
|
||||
;; native2ascii -encoding iso-8859-1 foo.properties foo.properties.new
|
||||
;; Then review that it looks right:
|
||||
;; native2ascii -reverse -encoding UTF-8 foo.properties.new
|
||||
;; Then copy it over:
|
||||
;; mv foo.properties.new foo.properties
|
||||
;; The following files from Transifex are known to be ISO-8859-1 encoded,
|
||||
;; and should be escaped using native2ascii after downloading:
|
||||
;; gl, pt, pt_BR, sq, sv, tr
|
||||
;;
|
||||
source_file = core/java/src/gnu/getopt/MessagesBundle.properties
|
||||
source_lang = en
|
||||
type = PROPERTIES
|
||||
trans.ar = core/java/src/gnu/getopt/MessagesBundle_ar.properties
|
||||
trans.az = core/java/src/gnu/getopt/MessagesBundle_az.properties
|
||||
trans.cs = core/java/src/gnu/getopt/MessagesBundle_cs.properties
|
||||
trans.de = core/java/src/gnu/getopt/MessagesBundle_de.properties
|
||||
trans.es = core/java/src/gnu/getopt/MessagesBundle_es.properties
|
||||
trans.fi = core/java/src/gnu/getopt/MessagesBundle_fi.properties
|
||||
trans.fr = core/java/src/gnu/getopt/MessagesBundle_fr.properties
|
||||
;; currently corrupt, non-UTF-8
|
||||
;;trans.gl = core/java/src/gnu/getopt/MessagesBundle_gl.properties
|
||||
trans.gl = core/java/src/gnu/getopt/MessagesBundle_gl.properties
|
||||
trans.hu = core/java/src/gnu/getopt/MessagesBundle_hu.properties
|
||||
;; Java converts id to in
|
||||
trans.id = core/java/src/gnu/getopt/MessagesBundle_in.properties
|
||||
trans.it = core/java/src/gnu/getopt/MessagesBundle_it.properties
|
||||
trans.ja = core/java/src/gnu/getopt/MessagesBundle_ja.properties
|
||||
trans.ko = core/java/src/gnu/getopt/MessagesBundle_ko.properties
|
||||
trans.nl = core/java/src/gnu/getopt/MessagesBundle_nl.properties
|
||||
trans.ku = core/java/src/gnu/getopt/MessagesBundle_ku.properties
|
||||
trans.nb = core/java/src/gnu/getopt/MessagesBundle_nb.properties
|
||||
trans.nl = core/java/src/gnu/getopt/MessagesBundle_nl.properties
|
||||
trans.pl = core/java/src/gnu/getopt/MessagesBundle_pl.properties
|
||||
;; currently corrupt, non-UTF-8
|
||||
;;trans.pt = core/java/src/gnu/getopt/MessagesBundle_pt.properties
|
||||
;; currently corrupt, non-UTF-8
|
||||
;;trans.pt_BR = core/java/src/gnu/getopt/MessagesBundle_pt_BR.properties
|
||||
trans.pt = core/java/src/gnu/getopt/MessagesBundle_pt.properties
|
||||
trans.pt_BR = core/java/src/gnu/getopt/MessagesBundle_pt_BR.properties
|
||||
trans.ro = core/java/src/gnu/getopt/MessagesBundle_ro.properties
|
||||
trans.ru_RU = core/java/src/gnu/getopt/MessagesBundle_ru.properties
|
||||
trans.sk = core/java/src/gnu/getopt/MessagesBundle_sk.properties
|
||||
;; currently corrupt, non-UTF-8
|
||||
;;trans.sq = core/java/src/gnu/getopt/MessagesBundle_sq.properties
|
||||
;; currently corrupt, non-UTF-8
|
||||
;;trans.tr_TR = core/java/src/gnu/getopt/MessagesBundle_tr.properties
|
||||
trans.sq = core/java/src/gnu/getopt/MessagesBundle_sq.properties
|
||||
trans.sr = core/java/src/gnu/getopt/MessagesBundle_sr.properties
|
||||
trans.sv_SE = core/java/src/gnu/getopt/MessagesBundle_sv.properties
|
||||
trans.tr_TR = core/java/src/gnu/getopt/MessagesBundle_tr.properties
|
||||
trans.uk_UA = core/java/src/gnu/getopt/MessagesBundle_uk.properties
|
||||
trans.zh_CN = core/java/src/gnu/getopt/MessagesBundle_zh.properties
|
||||
trans.zh_TW = core/java/src/gnu/getopt/MessagesBundle_zh_TW.properties
|
||||
|
||||
[I2P.streaming]
|
||||
source_file = apps/ministreaming/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = apps/ministreaming/locale/messages_ar.po
|
||||
trans.az = apps/ministreaming/locale/messages_az.po
|
||||
trans.ca = apps/ministreaming/locale/messages_ca.po
|
||||
trans.cs = apps/ministreaming/locale/messages_cs.po
|
||||
trans.de = apps/ministreaming/locale/messages_de.po
|
||||
trans.es = apps/ministreaming/locale/messages_es.po
|
||||
trans.fa = apps/ministreaming/locale/messages_fa.po
|
||||
trans.fi = apps/ministreaming/locale/messages_fi.po
|
||||
trans.fr = apps/ministreaming/locale/messages_fr.po
|
||||
trans.gl = apps/ministreaming/locale/messages_gl.po
|
||||
trans.hu = apps/ministreaming/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/ministreaming/locale/messages_in.po
|
||||
trans.it = apps/ministreaming/locale/messages_it.po
|
||||
@@ -384,14 +544,99 @@ trans.ko = apps/ministreaming/locale/messages_ko.po
|
||||
trans.nb = apps/ministreaming/locale/messages_nb.po
|
||||
trans.nl = apps/ministreaming/locale/messages_nl.po
|
||||
trans.pl = apps/ministreaming/locale/messages_pl.po
|
||||
trans.pt = apps/ministreaming/locale/messages_pt.po
|
||||
trans.pt_BR = apps/ministreaming/locale/messages_pt_BR.po
|
||||
trans.ro = apps/ministreaming/locale/messages_ro.po
|
||||
trans.ru_RU = apps/ministreaming/locale/messages_ru.po
|
||||
trans.sv_SE = apps/ministreaming/locale/messages_sv.po
|
||||
trans.tk = apps/ministreaming/locale/messages_tk.po
|
||||
trans.tr_TR = apps/ministreaming/locale/messages_tr.po
|
||||
trans.uk_UA = apps/ministreaming/locale/messages_uk.po
|
||||
trans.zh_CN = apps/ministreaming/locale/messages_zh.po
|
||||
|
||||
[I2P.manpages]
|
||||
;;
|
||||
;; after adding languages here, add to debian/*.manpages also
|
||||
;; You must run installer/resources/poupdate-man.sh first.
|
||||
;;
|
||||
type = PO
|
||||
source_file = installer/resources/locale-man/man.pot
|
||||
source_lang = en
|
||||
trans.ar = installer/resources/locale-man/man_ar.po
|
||||
trans.az = installer/resources/locale-man/man_az.po
|
||||
trans.de = installer/resources/locale-man/man_de.po
|
||||
trans.es = installer/resources/locale-man/man_es.po
|
||||
trans.fi = installer/resources/locale-man/man_fi.po
|
||||
trans.fr = installer/resources/locale-man/man_fr.po
|
||||
trans.id = installer/resources/locale-man/man_id.po
|
||||
trans.it = installer/resources/locale-man/man_it.po
|
||||
trans.ko = installer/resources/locale-man/man_ko.po
|
||||
trans.nl = installer/resources/locale-man/man_nl.po
|
||||
trans.pl = installer/resources/locale-man/man_pl.po
|
||||
trans.pt = installer/resources/locale-man/man_pt.po
|
||||
trans.pt_BR = installer/resources/locale-man/man_pt_BR.po
|
||||
trans.ro = installer/resources/locale-man/man_ro.po
|
||||
trans.ru_RU = installer/resources/locale-man/man_ru.po
|
||||
trans.sv_SE = installer/resources/locale-man/man_sv.po
|
||||
trans.tr_TR = installer/resources/locale-man/man_tr.po
|
||||
trans.zh_CN = installer/resources/locale-man/man_zh.po
|
||||
|
||||
[I2P.eepsite]
|
||||
;;
|
||||
;; For any new translations, add links in installer/resources/eepsite/docroot/help/index.html
|
||||
;; and copy new flags in build.xml copyflags-unlesspkg target,
|
||||
;; and add to debian/i2p-router.links and debian-alt/*/i2p-router.links
|
||||
;;
|
||||
type = HTML
|
||||
source_file = installer/resources/eepsite/docroot/help/index.html
|
||||
source_lang = en
|
||||
;; File contains local changes to fix RTL issues.
|
||||
;; Merge locally or make changes on TX side before re-enabling
|
||||
;;trans.ar = installer/resources/eepsite/docroot/help/index_ar.html
|
||||
trans.az = installer/resources/eepsite/docroot/help/index_az.html
|
||||
trans.de = installer/resources/eepsite/docroot/help/index_de.html
|
||||
trans.el = installer/resources/eepsite/docroot/help/index_el.html
|
||||
;; not yet translated on TX, use old page
|
||||
;;trans.es = installer/resources/eepsite/docroot/help/index_es.html
|
||||
trans.fa = installer/resources/eepsite/docroot/help/index_fa.html
|
||||
trans.fr = installer/resources/eepsite/docroot/help/index_fr.html
|
||||
trans.hu = installer/resources/eepsite/docroot/help/index_hu.html
|
||||
;; Java converts id to in
|
||||
trans.id = installer/resources/eepsite/docroot/help/index_in.html
|
||||
trans.it = installer/resources/eepsite/docroot/help/index_it.html
|
||||
;; not yet translated on TX, use old page
|
||||
;;trans.nl = installer/resources/eepsite/docroot/help/index_nl.html
|
||||
trans.pl = installer/resources/eepsite/docroot/help/index_pl.html
|
||||
trans.pt = installer/resources/eepsite/docroot/help/index_pt.html
|
||||
trans.ro = installer/resources/eepsite/docroot/help/index_ro.html
|
||||
trans.ru_RU = installer/resources/eepsite/docroot/help/index_ru.html
|
||||
trans.sv_SE = installer/resources/eepsite/docroot/help/index_sv.html
|
||||
trans.tr_TR = installer/resources/eepsite/docroot/help/index_tr.html
|
||||
trans.uk_UA = installer/resources/eepsite/docroot/help/index_uk.html
|
||||
trans.zh_CN = installer/resources/eepsite/docroot/help/index_zh.html
|
||||
|
||||
[I2P.readme]
|
||||
;;
|
||||
;; Text on /console
|
||||
;;
|
||||
type = HTML
|
||||
source_file = apps/routerconsole/resources/docs/readme.html
|
||||
source_lang = en
|
||||
trans.ar = apps/routerconsole/resources/docs/readme_ar.html
|
||||
trans.de = apps/routerconsole/resources/docs/readme_de.html
|
||||
trans.fr = apps/routerconsole/resources/docs/readme_fr.html
|
||||
;; Java converts id to in
|
||||
trans.id = apps/routerconsole/resources/docs/readme_in.html
|
||||
trans.it = apps/routerconsole/resources/docs/readme_it.html
|
||||
trans.ja = apps/routerconsole/resources/docs/readme_ja.html
|
||||
trans.pl = apps/routerconsole/resources/docs/readme_pl.html
|
||||
trans.pt = apps/routerconsole/resources/docs/readme_pt.html
|
||||
trans.ro = apps/routerconsole/resources/docs/readme_ro.html
|
||||
trans.ru_RU = apps/routerconsole/resources/docs/readme_ru.html
|
||||
trans.tr_TR = apps/routerconsole/resources/docs/readme_tr.html
|
||||
trans.uk_UA = apps/routerconsole/resources/docs/readme_uk.html
|
||||
trans.zh_CN = apps/routerconsole/resources/docs/readme_zh.html
|
||||
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
|
7
Docker.expt
Normal file
7
Docker.expt
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/expect
|
||||
set timeout 15;
|
||||
spawn java -jar /tmp/i2pinstall.jar -console
|
||||
expect {
|
||||
-re ".*press 1 to continue, 2 to quit, 3 to redisplay" {send "1\r"; exp_continue;}
|
||||
-re "Select target path *" {send "/opt/i2p\r"; exp_continue;}
|
||||
}
|
47
Dockerfile
Normal file
47
Dockerfile
Normal file
@@ -0,0 +1,47 @@
|
||||
# Use a multi-stage build to reduce the size of the resulting image
|
||||
# We need alpine >v3 in order to install an apache-ant > 1.9
|
||||
FROM alpine:3 as builder
|
||||
ENV I2P_PREFIX="/opt/i2p"
|
||||
|
||||
WORKDIR /tmp/build
|
||||
COPY . ./
|
||||
|
||||
# Build installer
|
||||
RUN apk --no-cache add build-base gettext tar bzip2 apache-ant openjdk8 expect
|
||||
RUN echo "noExe=true" >> build.properties
|
||||
RUN ant installer-linux
|
||||
RUN mkdir -p /opt
|
||||
RUN mv i2pinstall*.jar /tmp/i2pinstall.jar
|
||||
|
||||
# Install i2p using the installer into I2P_PREFIX
|
||||
RUN expect -f ./Docker.expt
|
||||
RUN cd ${I2P_PREFIX}
|
||||
RUN rm -fr man docs *.bat *.command *.app
|
||||
|
||||
# Second stage only using the installer from the last stage
|
||||
# ---------------------------------------------------------
|
||||
# We can't use alpine here as the java service wrapper is built with glibc
|
||||
# alpine uses musl
|
||||
FROM openjdk:11.0-jre-slim
|
||||
|
||||
ARG I2P_UID=1000
|
||||
ARG I2P_USER=i2p
|
||||
ENV I2P_PREFIX="/opt/i2p"
|
||||
ENV PATH=${I2P_PREFIX}/bin:$PATH
|
||||
|
||||
# "install" i2p by copying over installed files
|
||||
COPY --from=builder /opt/i2p ${I2P_PREFIX}
|
||||
COPY docker/* /opt/i2p/
|
||||
|
||||
# Setup user and fix permissions in
|
||||
RUN adduser --system --uid ${I2P_UID} --home /user ${I2P_USER} \
|
||||
&& chown -R ${I2P_USER} /user \
|
||||
&& chown -R ${I2P_USER} ${I2P_PREFIX} \
|
||||
&& chmod -R u+rwx ${I2P_PREFIX}
|
||||
|
||||
EXPOSE 7654 7656 7657 7658 4444 6668 8998 7659 7660 4445
|
||||
|
||||
USER i2p
|
||||
ENTRYPOINT [ "/opt/i2p/i2psvc" ]
|
||||
CMD [ "/opt/i2p/wrapper.config", "wrapper.pidfile=/var/tmp/i2p.pid", "wrapper.name=i2p", "wrapper.displayname=\"I2P Service\"" , "wrapper.statusfile=/var/tmp/i2p.status", "wrapper.java.statusfile=/var/tmp/i2p.java.status", "wrapper.logfile=/var/tmp/wrapper.log" ]
|
||||
|
@@ -11,11 +11,11 @@ you may use:
|
||||
lynx http://localhost:7657/
|
||||
to configure the router.
|
||||
|
||||
If you're having trouble, swing by http://forum.i2p/, check the
|
||||
If you're having trouble, check the
|
||||
website at https://geti2p.net/, or get on irc://irc.freenode.net/#i2p
|
||||
|
||||
I2P will create and store files and configuration data in the user directory
|
||||
~/.i2p/ on Linux and %APPDATA%\I2P\ on Windows. This directory is created
|
||||
~/.i2p/ on Linux and %LOCALAPPDATA%\I2P\ on Windows. This directory is created
|
||||
when I2P is run for the first time. It also creates files in the system
|
||||
temporary directory specified by the Java Virtual Machine.
|
||||
To change the location of these directories, or to configure I2P to
|
||||
@@ -40,7 +40,7 @@ To uninstall I2P:
|
||||
rm -rf $I2PInstallDir ~/.i2p
|
||||
|
||||
Supported JVMs:
|
||||
All platforms: Java 1.7 or higher required
|
||||
All platforms: Java 1.8 or higher required
|
||||
Windows: OpenJDK or Oracle from http://java.com/download
|
||||
Linux: OpenJDK or Oracle from http://java.com/download
|
||||
FreeBSD: OpenJDK or Oracle from http://java.com/download
|
||||
|
@@ -1,10 +1,10 @@
|
||||
I2P source installation instructions
|
||||
|
||||
Prerequisites to build from source:
|
||||
Java SDK (preferably Oracle/Sun or OpenJDK) 1.7.0 or higher
|
||||
Java SDK (preferably Oracle or OpenJDK) 8 or higher
|
||||
Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
|
||||
Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 1.6
|
||||
Apache Ant 1.7.0 or higher
|
||||
Apache Ant 1.9.8 or higher
|
||||
The xgettext, msgfmt, and msgmerge tools installed
|
||||
from the GNU gettext package http://www.gnu.org/software/gettext/
|
||||
Build environment must use a UTF-8 locale.
|
||||
|
197
LICENSE.txt
197
LICENSE.txt
@@ -29,17 +29,13 @@ POSSIBILITY OF SUCH DAMAGES.
|
||||
LICENSES
|
||||
--------
|
||||
|
||||
Core (i2p.jar):
|
||||
Core API (i2p.jar):
|
||||
Public domain except as listed below:
|
||||
|
||||
ElGamal and DSA code:
|
||||
Copyright (c) 2003, TheCrypto
|
||||
See licenses/LICENSE-ElGamalDSA.txt
|
||||
|
||||
HMAC:
|
||||
Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
|
||||
See licenses/LICENSE-SHA256.txt
|
||||
|
||||
ElGamal:
|
||||
Copyright (c) 2000 - 2013 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
|
||||
See licenses/LICENSE-SHA256.txt
|
||||
@@ -58,13 +54,14 @@ Public domain except as listed below:
|
||||
|
||||
PRNG:
|
||||
Copyright (C) 2001, 2002, Free Software Foundation, Inc.
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
See licenses/LICENSE-LGPLv2.1.txt or /usr/share/common-licenses/LGPL-2.1
|
||||
|
||||
HashCash code:
|
||||
Copyright 2006 Gregory Rubin grrubin@gmail.com
|
||||
See licenses/LICENSE-HashCash.txt
|
||||
|
||||
GettextResource from gettext v0.19.8:
|
||||
(not included in most distribution packages)
|
||||
Copyright (C) 2001, 2007 Free Software Foundation, Inc.
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
|
||||
@@ -72,22 +69,37 @@ Public domain except as listed below:
|
||||
Contains some code Copyright 2006 Sun Microsystems, Inc.
|
||||
See licenses/LICENSE-InstallCert.txt
|
||||
|
||||
BlockFile:
|
||||
Copyright (c) 2006, Matthew Estes
|
||||
See licenses/LICENSE-BlockFile.txt
|
||||
|
||||
SipHashInline:
|
||||
Copyright 2012 Hiroshi Nakamura <nahi@ruby-lang.org>
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
Getopt:
|
||||
(not included in most distribution packages)
|
||||
Copyright (c) 1998 by Aaron M. Renn (arenn@urbanophile.com)
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
|
||||
EdDSA-Java:
|
||||
See licenses/LICENSE-CC0-1.0-Universal.txt
|
||||
|
||||
HostnameVerifier:
|
||||
From Apache HttpClient 4.4.1 and HttpCore 4.4.1
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
json-simple 2.3.0
|
||||
(not included in most distribution packages)
|
||||
Copyright 2016 Clifton Labs
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
Noise library:
|
||||
Copyright (C) 2016 Southern Storm Software, Pty Ltd.
|
||||
See licenses/LICENSE-Noise.txt
|
||||
|
||||
MiniDNS library 1.0.0
|
||||
This software may be used under the terms of (at your choice)
|
||||
- LGPL version 2 (or later) (see licenses/LICENSE-LGPL2.1.txt)
|
||||
- Apache Software licence (see licenses/LICENSE-Apache2.0.txt)
|
||||
- DWTFYWTPL
|
||||
|
||||
|
||||
Router (router.jar):
|
||||
Public domain except as listed below:
|
||||
@@ -99,15 +111,30 @@ Public domain except as listed below:
|
||||
Copyright (C) 2003-2010 Satoshi Konno
|
||||
See licenses/LICENSE-UPnP.txt
|
||||
|
||||
GeoIP: GeoLite databases are licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
||||
This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/
|
||||
|
||||
GeoIP API 1.3.1:
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
|
||||
GeoIP2-java 2.12.0:
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
Maxmind-DB-Reader-java 1.2.2:
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
Noise library:
|
||||
Copyright (C) 2016 Southern Storm Software, Pty Ltd.
|
||||
See licenses/LICENSE-Noise.txt
|
||||
|
||||
SparseArray:
|
||||
Copyright (C) 2006 The Android Open Source Project
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
SSU HMAC:
|
||||
Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
|
||||
See licenses/LICENSE-SHA256.txt
|
||||
|
||||
|
||||
Installer:
|
||||
(not included in distribution packages)
|
||||
Launch4j 3.0.1:
|
||||
(Launch4j is only included in the upstream source package and Windows binaries.
|
||||
Not applicable for non-Windows binaries or Debian/Launchpad packages.)
|
||||
@@ -123,7 +150,7 @@ Installer:
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
See licenses/NOTICE-Commons-Logging.txt
|
||||
|
||||
XStream (http://xstream.codehaus.org/)
|
||||
XStream (http://xstream.github.io/)
|
||||
Copyright (c) 2003-2004, Joe Walnes
|
||||
See licenses/LICENSE-XStream.txt
|
||||
|
||||
@@ -149,59 +176,84 @@ Installer:
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
|
||||
GeoIP Data:
|
||||
(not included in most distribution packages)
|
||||
IP Geolocation by DB-IP https://db-ip.com/
|
||||
See https://creativecommons.org/licenses/by/4.0/
|
||||
|
||||
Java Service Wrapper Community Edition 32-bit 3.5.30:
|
||||
Copyright (C) 1999-2016 Tanuki Software, Ltd. All Rights Reserved.
|
||||
Launchers:
|
||||
(not included in distribution packages)
|
||||
Copyright (c) 2002-2018 EPFL, Lausanne / Lightbend, Inc. , unless otherwise specified.
|
||||
See licenses/LICENSE-Scala.md
|
||||
|
||||
Java Service Wrapper Community Edition 3.5.44:
|
||||
(Windows: 3.5.25)
|
||||
(not included in most distribution packages)
|
||||
Copyright (C) 1999-2020 Tanuki Software, Ltd. All Rights Reserved.
|
||||
See licenses/LICENSE-Wrapper.txt
|
||||
|
||||
|
||||
Jbigi Libraries (jbigi.jar):
|
||||
JNI code public domain.
|
||||
JNI code: public domain.
|
||||
|
||||
GMP 4.3.2 / 5.0.2:
|
||||
Copyright 1991, 1996, 1999, 2000, 2007 Free Software Foundation, Inc.
|
||||
See licenses/LICENSE-LGPLv3.txt
|
||||
GMP 6.0.0:
|
||||
GMP 6.0.0 / 6.1.2 / 6.2.0:
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
|
||||
Applications:
|
||||
|
||||
Addressbook:
|
||||
Addressbook (addressbook.jar):
|
||||
Copyright (c) 2004 Ragnarok
|
||||
See licenses/LICENSE-Addressbook.txt
|
||||
BlockFile:
|
||||
Copyright (c) 2006, Matthew Estes
|
||||
See licenses/LICENSE-BlockFile.txt
|
||||
|
||||
BOB:
|
||||
BOB (BOB.jar):
|
||||
Copyright (C) sponge
|
||||
See licenses/COPYING-BOB.txt
|
||||
|
||||
Desktopgui
|
||||
Desktopgui (desktopgui.jar):
|
||||
Copyright (c) Mathias De Maré
|
||||
See licenses/LICENSE-DesktopGUI.txt
|
||||
|
||||
I2PSnark:
|
||||
Glassfish Standard Tag Library (JSTL) 1.2 (commons-el.jar):
|
||||
(not included in most distribution packages)
|
||||
Common Development and Distribution License (CDDL) version 1.0 + GNU General Public License (GPL) version 2
|
||||
See https://glassfish.dev.java.net/public/CDDL+GPL.html
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
I2PControl
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
Includes jBCrypt:
|
||||
Copyright (c) 2006 Damien Miller <djm@mindrot.org>
|
||||
See licenses/LICENSE-jBCrypt.txt
|
||||
Includes jsonrpc2 1.38.1 (base) 1.11 (server)
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
I2PSnark (i2psnark.jar, i2psnark.war):
|
||||
Copyright (C) 2003 Mark J. Wielaard
|
||||
GPLv2 (or any later version)
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
Silk icons: See licenses/LICENSE-SilkIcons.txt
|
||||
|
||||
I2PTunnel:
|
||||
I2PTunnel (i2ptunnel.jar, i2ptunnel.war):
|
||||
(c) 2003 - 2004 mihi
|
||||
GPLv2 (or any later version) with exception.
|
||||
See licenses/LICENSE-I2PTunnel.txt
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
I2PTunnel SOCKS Proxy:
|
||||
Copyright (c) 2004 by human
|
||||
GPLv2 (or any later version) with exception.
|
||||
See licenses/LICENSE-I2PTunnel.txt
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
I2PTunnel UDP and Streamr (i2ptunnel.jar):
|
||||
By welterde.
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
I2PTunnel SOCKS Proxy:
|
||||
Copyright (c) 2004 by human
|
||||
GPLv2 (or any later version) with exception.
|
||||
See licenses/LICENSE-I2PTunnel.txt
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
I2PTunnel UDP and Streamr:
|
||||
By welterde.
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
Imagegen:
|
||||
Imagegen (imagegen.war):
|
||||
Identicon:
|
||||
Copyright (c) 2007-2014 Don Park <donpark@docuverse.com>
|
||||
See licenses/LICENSE-Identicon.txt
|
||||
@@ -209,82 +261,87 @@ Applications:
|
||||
Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
||||
Copyright (c) 2008 Alexander von Gernler. All rights reserved.
|
||||
See licenses/LICENSE-BSD.txt
|
||||
Zxing 3.3.0:
|
||||
Zxing 3.4.1:
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
Jetty 8.1.21.v20160908:
|
||||
Jetty 9.3.29.v20201019 (jetty-*.jar, org.mortbay.*.jar):
|
||||
(not included in most distribution packages, except for jetty-i2p.jar)
|
||||
See licenses/ABOUT-Jetty.html
|
||||
See licenses/NOTICE-Jetty.html
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
See licenses/LICENSE-ECLIPSE-1.0.html
|
||||
See licenses/NOTICE-Commons-Logging.txt
|
||||
|
||||
JRobin 1.6.0-1:
|
||||
RRD4J 3.6 (jrobin.jar):
|
||||
Copyright (c) 2001-2005 Sasa Markovic and Ciaran Treanor.
|
||||
Copyright (c) 2011 The OpenNMS Group, Inc.
|
||||
Copyright 2011 The RRD4J Authors.
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
DeallocationHelper:
|
||||
Copyright (c) 2006-2016 Julien Gouesse
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
Ministreaming Lib:
|
||||
Ministreaming Lib (mstreaming.jar):
|
||||
By mihi.
|
||||
See licenses/LICENSE-BSD.txt
|
||||
|
||||
Proxyscript:
|
||||
Proxyscript (i2pProxy.pac):
|
||||
(not included in distribution packages)
|
||||
By Cervantes.
|
||||
Public domain.
|
||||
|
||||
Router console:
|
||||
Router console (routerconsole.jar, routerconsole.war):
|
||||
Public domain.
|
||||
|
||||
Router Console themes:
|
||||
Flag icons:
|
||||
- Jersey and EU flag icons: public domain, courtesy Xrmap flag
|
||||
collection http://www.arvernes.com/wiki/index.php/Xrmap
|
||||
- Guernsey and Isle of Man flags from the Open Clip Art Library, released into the public domain
|
||||
- Curaçao, courtesy of David Benbennick, released into the public domain
|
||||
- All other flag icons: public domain, courtesy mjames@gmail.com http://www.famfamfam.com/
|
||||
Silk icons: See licenses/LICENSE-SilkIcons.txt
|
||||
FatCow icons: See licenses/LICENSE-FatCowIcons.txt
|
||||
Fugue Icons: See licenses/LICENSE-FugueIcons.txt
|
||||
Feather icons: Copyright (c) 2013-2017 Cole Bemis; see licenses/LICENSE-Feather.txt
|
||||
Fontawesome icons: Copyright (c) 2018 @fontawesome(company) see licenses/LICENSE-fontawesome.txt
|
||||
|
||||
GeoIP Data:
|
||||
This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/
|
||||
See licenses/LICENSE-GeoIP.txt
|
||||
Router Console unthemed, light, and dark theme logos:
|
||||
Copyright (c) 2019 The Invisible Internet Project. All rights reserved.
|
||||
Creative Commons Attribution-ShareAlike 4.0 International License
|
||||
See https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
Router Console and I2PSnark themes:
|
||||
"Man with hat over face" & related images licensed under a Creative Commons 2.0 license.
|
||||
Original photos by Florian Kuhlmann. http://www.flickr.com/photos/floriankuhlmann/3117758155
|
||||
Some images licensed under a Creative Commons 2.0 license.
|
||||
Silk icons: See licenses/LICENSE-SilkIcons.txt
|
||||
|
||||
I2PSnark light theme:
|
||||
"Creative Commons Cat" licensed under a Creative Commons Attribution 3.0 Unported License.
|
||||
Original photo by Boaz Arad. http://www.luxphile.com/2011/01/creative-commons-cat.html
|
||||
Router Console M-Lab subsystem:
|
||||
Copyright 2010 Vuze, Inc. All rights reserved.
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
SAM:
|
||||
Router Console NDT subsystem:
|
||||
Copyright (c) 2003 University of Chicago. All rights reserved.
|
||||
See licenses/LICENSE-NDT.txt
|
||||
Notice: I2P has changed specified portions of the Software, including the package edu.internet2.ndt.
|
||||
|
||||
SAM (sam.jar):
|
||||
Public domain.
|
||||
|
||||
Streaming Lib:
|
||||
Streaming Lib (streaming.jar):
|
||||
Public domain.
|
||||
|
||||
SusiDNS:
|
||||
SusiDNS (susidns.war):
|
||||
Copyright (C) 2005 <susi23@mail.i2p>
|
||||
GPLv2 (or any later version)
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
Uses Glassfish Standard Tag Library (JSTL) 1.2:
|
||||
Common Development and Distribution License (CDDL) version 1.0 + GNU General Public License (GPL) version 2
|
||||
See https://glassfish.dev.java.net/public/CDDL+GPL.html
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
SusiMail:
|
||||
SusiMail (susimail.war):
|
||||
Copyright (C) 2004-2005 <susi23@mail.i2p>
|
||||
GPLv2 (or any later version)
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
Systray:
|
||||
Systray (systray.jar):
|
||||
Public domain.
|
||||
Bundles systray4j-2.4.1:
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
|
||||
Tomcat 6.0.48:
|
||||
Copyright 1999-2016 The Apache Software Foundation
|
||||
Tomcat 9.0.40 (jasper-runtime.jar):
|
||||
(not included in most distribution packages)
|
||||
Copyright 1999-2020 The Apache Software Foundation
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
See licenses/NOTICE-Tomcat.txt
|
||||
|
||||
@@ -302,6 +359,10 @@ distributions. See the source package for the additional license information.
|
||||
Copyright (C) sponge
|
||||
DWTFYWTPL
|
||||
|
||||
Gradle wrapper:
|
||||
Copyright (c) 2017 the original author or authors.
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
SAM C Library:
|
||||
Copyright (c) 2004, Matthew P. Cashdollar <mpc@innographx.com>
|
||||
See apps/sam/c/doc/license.txt
|
||||
|
132
Makefile.gcj
132
Makefile.gcj
@@ -1,132 +0,0 @@
|
||||
# Makefile for building native I2P binaries and libraries with GCJ
|
||||
#
|
||||
# WARNING: Do not use this yet, as it may explode (etc).
|
||||
#
|
||||
GCJ=gcj #/usr/local/gcc-4.0.2/bin/gcj
|
||||
EXTRA_LD_PATH= #/usr/local/gcc-4.0.2/lib
|
||||
ANT=ant #/opt/apache-ant-1.6.5/bin/ant
|
||||
ANT_TARGET=build2
|
||||
NATIVE_DIR=native
|
||||
|
||||
##
|
||||
# Define what jar files get into libi2p.so. The current setup is
|
||||
# *incredibly* lazy, throwing everything in the .so, rather than
|
||||
# give each .jar file its own .so.
|
||||
# i2p.jar: base SDK
|
||||
# mstreaming.jar: streaming API
|
||||
# streaming.jar: full streaming lib implementation
|
||||
# i2ptunnel.jar: I2PTunnel proxy
|
||||
# sam.jar: SAM bridge and API
|
||||
# i2psnark.jar: bittorrent client
|
||||
# router.jar: full I2P router
|
||||
# jbigi.jar: collection of native optimized GMP routines for crypto
|
||||
JAR_BASE=i2p.jar mstreaming.jar streaming.jar
|
||||
JAR_CLIENTS=i2ptunnel.jar sam.jar
|
||||
JAR_ROUTER=router.jar
|
||||
JAR_JBIGI=jbigi.jar
|
||||
JAR_CONSOLE=\
|
||||
javax.servlet.jar \
|
||||
commons-el.jar \
|
||||
commons-logging.jar \
|
||||
jasper-runtime.jar \
|
||||
jasper-compiler.jar \
|
||||
org.mortbay.jetty.jar \
|
||||
routerconsole.jar
|
||||
LIBI2P_JARS=${JAR_BASE} ${JAR_CLIENTS} ${JAR_ROUTER} ${JAR_JBIGI}
|
||||
LIBSAM_JARS=${JAR_BASE} sam.jar
|
||||
LIBROUTER_JARS=i2p.jar ${JAR_ROUTER} ${JAR_JBIGI}
|
||||
LIBCONSOLE_JARS=${LIBROUTER_JARS} ${JAR_CONSOLE}
|
||||
LIBSNARK_JARS=${LIBROUTER_JARS} i2psnark.jar
|
||||
# update:
|
||||
# similar error with gcj 4.3.3.
|
||||
#
|
||||
# unfortunately, its not quite ready for most end users, as the
|
||||
# ${JAR_CONSOLE} fails to compile with:
|
||||
# org/apache/commons/logging/impl/LogKitLogger.java: In class 'org.apache.commons.logging.impl.LogKitLogger':
|
||||
# .../LogKitLogger.java: In constructor '(java.lang.String)':
|
||||
# .../LogKitLogger.java:91: error: cannot find file for class org.apache.log.Hierarchy
|
||||
# .../LogKitLogger.java:91: error: cannot find file for class org.apache.log.Hierarchy
|
||||
# .../LogKitLogger.java:104: error: cannot find file for class org.apache.log.Hierarchy
|
||||
# .../LogKitLogger.java:104: confused by earlier errors, bailing out
|
||||
|
||||
#${JAR_CONSOLE}\
|
||||
#${JAR_XML} \
|
||||
#${JAR_SUCKER}
|
||||
#${JAR_CONSOLE}
|
||||
|
||||
SYSTEM_PROPS=-DloggerFilenameOverride=logs/log-router-@.txt \
|
||||
-Dorg.mortbay.http.Version.paranoid=true \
|
||||
-Dorg.mortbay.util.FileResource.checkAliases=false \
|
||||
-Dorg.mortbay.xml.XmlParser.NotValidating=true
|
||||
#SYSTEM_PROPS=-Di2p.weakPRNG=true
|
||||
OPTIMIZE=-O2
|
||||
#OPTIMIZE=-O3
|
||||
|
||||
LD_LIBRARY_PATH=${EXTRA_LD_PATH}:.
|
||||
|
||||
all: jars native
|
||||
@echo "* Build complete"
|
||||
|
||||
jars:
|
||||
@${ANT} ${ANT_TARGET}
|
||||
|
||||
clean: native_clean
|
||||
|
||||
native: native_clean native_shared
|
||||
@echo "* Native code build in ${NATIVE}"
|
||||
|
||||
native_clean:
|
||||
@rm -rf ${NATIVE_DIR}
|
||||
@mkdir ${NATIVE_DIR}
|
||||
|
||||
native_shared: libi2p.so
|
||||
@cd build ; ${GCJ} ${OPTIMIZE} -fjni -L../${NATIVE_DIR} -li2p ${SYSTEM_PROPS} -o ../${NATIVE_DIR}/i2p_dsa --main=net.i2p.crypto.DSAEngine
|
||||
@echo "* i2p_dsa is a simple test app with the DSA engine and Fortuna PRNG to make sure crypto is working"
|
||||
@cd build ; ${GCJ} ${OPTIMIZE} -fjni -L../${NATIVE_DIR} -li2p ${SYSTEM_PROPS} -o ../${NATIVE_DIR}/prng --main=gnu.crypto.prng.FortunaStandalone
|
||||
@cd build ; ${GCJ} ${OPTIMIZE} -fjni -L../${NATIVE_DIR} -li2p ${SYSTEM_PROPS} -o ../${NATIVE_DIR}/i2ptunnel --main=net.i2p.i2ptunnel.I2PTunnel
|
||||
@echo "* i2ptunnel is mihi's I2PTunnel CLI"
|
||||
@echo " run it as ./i2ptunnel -cli to avoid awt complaints"
|
||||
@cd build ; ${GCJ} ${OPTIMIZE} -fjni -L../${NATIVE_DIR} -li2p ${SYSTEM_PROPS} -o ../${NATIVE_DIR}/i2ptunnelctl --main=net.i2p.i2ptunnel.TunnelControllerGroup
|
||||
@echo "* i2ptunnelctl is a controller for I2PTunnel, reading i2ptunnel.config"
|
||||
@echo " and launching the appropriate proxies"
|
||||
#@cd build ; ${GCJ} ${OPTIMIZE} -fjni -L../${NATIVE_DIR} -li2p ${SYSTEM_PROPS} -o ../${NATIVE_DIR}/i2psnark --main=org.klomp.snark.Snark
|
||||
#@echo "* i2psnark is an anonymous bittorrent client"
|
||||
@cd build ; ${GCJ} ${OPTIMIZE} -fjni -L../${NATIVE_DIR} -li2p ${SYSTEM_PROPS} -o ../${NATIVE_DIR}/i2prouter --main=net.i2p.router.Router
|
||||
@echo "* i2prouter is the main I2P router"
|
||||
@echo " it can be used, and while the router console won't load,"
|
||||
@echo " i2ptunnel will, so it will start all the proxies defined in i2ptunnel.config"
|
||||
|
||||
libi2p.so:
|
||||
@echo "* Building $@"
|
||||
@(cd build ; time ${GCJ} ${OPTIMIZE} -fPIC -fjni -shared -o ../${NATIVE_DIR}/$@ ${LIBI2P_JARS} ; cd .. )
|
||||
@ls -l ${NATIVE_DIR}/$@
|
||||
@echo "* $@ built"
|
||||
|
||||
sam: jars libi2psam.so
|
||||
|
||||
libi2psam.so:
|
||||
@echo "* Building $@"
|
||||
@rm -f ${NATIVE_DIR}/$@
|
||||
@(cd build ; time ${GCJ} ${OPTIMIZE} -fPIC -fjni -shared -o ../${NATIVE_DIR}/$@ ${LIBSAM_JARS} ; cd .. )
|
||||
@ls -l ${NATIVE_DIR}/$@
|
||||
@echo "* $@ built"
|
||||
|
||||
router: jars libi2prouter.so
|
||||
|
||||
libi2prouter.so:
|
||||
@echo "* Building $@"
|
||||
@rm -f ${NATIVE_DIR}/$@
|
||||
@(cd build ; time ${GCJ} ${OPTIMIZE} -fPIC -fjni -shared -o ../${NATIVE_DIR}/$@ ${LIBROUTER_JARS} ; cd .. )
|
||||
@ls -l ${NATIVE_DIR}/$@
|
||||
@echo "* $@ built"
|
||||
|
||||
console: jars libi2pconsole.so
|
||||
|
||||
# doesn't work, see above
|
||||
libi2pconsole.so:
|
||||
@echo "* Building $@"
|
||||
@rm -f ${NATIVE_DIR}/$@
|
||||
@(cd build ; time ${GCJ} ${OPTIMIZE} -fPIC -fjni -shared -o ../${NATIVE_DIR}/$@ ${LIBCONSOLE_JARS} ; cd .. )
|
||||
@ls -l ${NATIVE_DIR}/$@
|
||||
@echo "* $@ built"
|
||||
|
80
README.md
Normal file
80
README.md
Normal file
@@ -0,0 +1,80 @@
|
||||
# I2P
|
||||
|
||||
This is the source code for the reference Java implementation of I2P.
|
||||
|
||||
Latest release: [https://geti2p.net/download](https://geti2p.net/download)
|
||||
|
||||
## Installing
|
||||
|
||||
See [INSTALL.txt](INSTALL.txt) or [https://geti2p.net/download](https://geti2p.net/download) for installation instructions.
|
||||
|
||||
## Documentation
|
||||
|
||||
[https://geti2p.net/how](https://geti2p.net/how)
|
||||
|
||||
FAQ: [https://geti2p.net/faq](https://geti2p.net/faq)
|
||||
|
||||
API: [http://docs.i2p-projekt.de/javadoc/](http://docs.i2p-projekt.de/javadoc/)
|
||||
or run 'ant javadoc' then start at build/javadoc/index.html
|
||||
|
||||
## How to contribute / Hack on I2P
|
||||
|
||||
Please check out [HACKING.md](docs/HACKING.md) and other documents in the docs directory.
|
||||
|
||||
## Building packages from source
|
||||
|
||||
To get development branch from source control: [https://geti2p.net/newdevelopers](https://geti2p.net/newdevelopers)
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Java SDK (preferably Oracle or OpenJDK) 8 or higher
|
||||
- Non-linux operating systems and JVMs: See [https://trac.i2p2.de/wiki/java](https://trac.i2p2.de/wiki/java)
|
||||
- Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel)
|
||||
require only Java 6
|
||||
- Apache Ant 1.9.8 or higher
|
||||
- The xgettext, msgfmt, and msgmerge tools installed from the GNU gettext package
|
||||
[http://www.gnu.org/software/gettext/](http://www.gnu.org/software/gettext/)
|
||||
- Build environment must use a UTF-8 locale.
|
||||
|
||||
### Ant build process
|
||||
|
||||
On x86 systems do:
|
||||
|
||||
ant pkg
|
||||
|
||||
On non-x86, use one of the following instead:
|
||||
|
||||
ant installer-linux
|
||||
ant installer-freebsd
|
||||
ant installer-osx
|
||||
|
||||
Run 'ant' with no arguments to see other build options.
|
||||
|
||||
### Gradle build process
|
||||
|
||||
Full builds of installers or updates are not yet possible, but the code can be
|
||||
compiled with:
|
||||
|
||||
./gradlew assemble
|
||||
|
||||
This will download dependencies over the clearnet by default, including Gradle
|
||||
itself. To download through a SOCKS proxy (e.g. Tor), add the following lines to
|
||||
your `~/.gradle/gradle.properties`:
|
||||
|
||||
systemProp.socksProxyHost=localhost
|
||||
systemProp.socksProxyPort=9150
|
||||
|
||||
## Contact info
|
||||
|
||||
Need help? See the IRC channel #i2p on irc.freenode.net
|
||||
|
||||
Bug reports: [https://trac.i2p2.de/report/1](https://trac.i2p2.de/report/1)
|
||||
|
||||
Contact information, security issues, press inquiries: [https://geti2p.net/en/contact](https://geti2p.net/en/contact)
|
||||
|
||||
Twitter: [@i2p](https://twitter.com/i2p), [@geti2p](https://twitter.com/GetI2P)
|
||||
|
||||
## Licenses
|
||||
|
||||
See [LICENSE.txt](LICENSE.txt)
|
||||
|
17
README.txt
17
README.txt
@@ -1,8 +1,8 @@
|
||||
Prerequisites to build from source:
|
||||
Java SDK (preferably Oracle/Sun or OpenJDK) 1.7.0 or higher
|
||||
Java SDK (preferably Oracle or OpenJDK) 8 or higher
|
||||
Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
|
||||
Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 1.6
|
||||
Apache Ant 1.7.0 or higher
|
||||
Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 6
|
||||
Apache Ant 1.9.8 or higher
|
||||
The xgettext, msgfmt, and msgmerge tools installed
|
||||
from the GNU gettext package http://www.gnu.org/software/gettext/
|
||||
Build environment must use a UTF-8 locale.
|
||||
@@ -19,6 +19,16 @@ To build:
|
||||
Run 'ant' with no arguments to see other build options.
|
||||
See INSTALL.txt or https://geti2p.net/download for installation instructions.
|
||||
|
||||
Gradle build system:
|
||||
Full builds are not yet possible, but the command is:
|
||||
./gradlew assemble
|
||||
|
||||
gradlew will download dependencies over the clearnet by default, including
|
||||
Gradle itself. To download over Tor, create a gradle.properties file
|
||||
containing:
|
||||
systemProp.socksProxyHost=localhost
|
||||
systemProp.socksProxyPort=9150
|
||||
|
||||
Documentation:
|
||||
https://geti2p.net/how
|
||||
API: http://docs.i2p-projekt.de/javadoc/
|
||||
@@ -35,7 +45,6 @@ FAQ:
|
||||
|
||||
Need help?
|
||||
IRC irc.freenode.net #i2p
|
||||
http://forum.i2p/
|
||||
|
||||
Bug reports:
|
||||
https://trac.i2p2.de/report/1
|
||||
|
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_sdk"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/ministreaming"/>
|
||||
<classpathentry kind="output" path="build"/>
|
||||
</classpath>
|
@@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>BOB</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="core" />
|
||||
<orderEntry type="module" module-name="ministreaming" />
|
||||
</component>
|
||||
</module>
|
12
apps/BOB/build.gradle
Normal file
12
apps/BOB/build.gradle
Normal file
@@ -0,0 +1,12 @@
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'src'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(':core')
|
||||
compile project(':apps:ministreaming')
|
||||
}
|
@@ -39,8 +39,9 @@ is divided into following sections:
|
||||
<property file="${user.properties.file}"/>
|
||||
<!-- The two properties below are usually overridden -->
|
||||
<!-- by the active platform. Just a fallback. -->
|
||||
<property name="default.javac.source" value="1.4"/>
|
||||
<property name="default.javac.target" value="1.4"/>
|
||||
<property name="default.javac.source" value="1.8"/>
|
||||
<property name="default.javac.target" value="1.8"/>
|
||||
<property name="javac.release" value="8"/>
|
||||
</target>
|
||||
<target depends="-pre-init,-init-private,-init-user" name="-init-project">
|
||||
<property file="nbproject/configs/${config}.properties"/>
|
||||
@@ -155,7 +156,7 @@ is divided into following sections:
|
||||
<attribute default="/does/not/exist" name="sourcepath"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}">
|
||||
<javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" release="${javac.release}">
|
||||
<classpath>
|
||||
<path path="@{classpath}"/>
|
||||
</classpath>
|
||||
|
@@ -29,28 +29,19 @@ endorsed.classpath=
|
||||
excludes=**/*.html,**/*.txt
|
||||
file.reference.build-javadoc=../../i2p.i2p/build/javadoc
|
||||
file.reference.i2p.jar=../../core/java/build/i2p.jar
|
||||
file.reference.i2ptunnel.jar=../i2ptunnel/java/build/i2ptunnel.jar
|
||||
file.reference.jbigi.jar=../../build/jbigi.jar
|
||||
file.reference.mstreaming.jar=../ministreaming/java/build/mstreaming.jar
|
||||
file.reference.router.jar=../../router/java/build/router.jar
|
||||
file.reference.streaming.jar=../streaming/java/build/streaming.jar
|
||||
file.reference.wrapper.jar=../../installer/lib/wrapper/all/wrapper.jar
|
||||
includes=**
|
||||
jar.compress=true
|
||||
javac.classpath=\
|
||||
${file.reference.router.jar}:\
|
||||
${file.reference.i2ptunnel.jar}:\
|
||||
${file.reference.mstreaming.jar}:\
|
||||
${file.reference.streaming.jar}:\
|
||||
${file.reference.wrapper.jar}:\
|
||||
${file.reference.i2p.jar}:\
|
||||
${file.reference.router.jar}
|
||||
${file.reference.i2p.jar}
|
||||
# Space-separated list of extra javac options
|
||||
javac.compilerargs=
|
||||
javac.deprecation=false
|
||||
javac.version=1.7
|
||||
javac.version=1.8
|
||||
javac.source=${javac.version}
|
||||
javac.target=${javac.version}
|
||||
javac.release=8
|
||||
javac.test.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}:\
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<name>BOB</name>
|
||||
<minimum-ant-version>1.6.5</minimum-ant-version>
|
||||
<minimum-ant-version>1.9.8</minimum-ant-version>
|
||||
<source-roots>
|
||||
<root id="src.dir"/>
|
||||
</source-roots>
|
||||
|
@@ -38,6 +38,8 @@ import net.i2p.I2PAppContext;
|
||||
import net.i2p.app.*;
|
||||
import net.i2p.client.I2PClient;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.PortMapper;
|
||||
import net.i2p.util.SimpleTimer2;
|
||||
|
||||
/**
|
||||
@@ -110,7 +112,9 @@ import net.i2p.util.SimpleTimer2;
|
||||
* BOB, main command socket listener, launches the command parser engine.
|
||||
*
|
||||
* @author sponge
|
||||
* @deprecated Please port applications to SAMv3
|
||||
*/
|
||||
@Deprecated
|
||||
public class BOB implements Runnable, ClientApp {
|
||||
|
||||
public final static String PROP_CONFIG_LOCATION = "BOB.config";
|
||||
@@ -131,6 +135,7 @@ public class BOB implements Runnable, ClientApp {
|
||||
// no longer used.
|
||||
// private static int maxConnections = 0;
|
||||
|
||||
private final I2PAppContext _context;
|
||||
private final Logger _log;
|
||||
private final ClientAppManager _mgr;
|
||||
private final String[] _args;
|
||||
@@ -138,6 +143,7 @@ public class BOB implements Runnable, ClientApp {
|
||||
|
||||
private volatile ServerSocket listener;
|
||||
private volatile Thread _runner;
|
||||
private volatile boolean _warned;
|
||||
|
||||
/**
|
||||
* Stop BOB gracefully
|
||||
@@ -155,10 +161,10 @@ public class BOB implements Runnable, ClientApp {
|
||||
*
|
||||
* @param mgr may be null
|
||||
* @param args non-null
|
||||
* @throws Exception on bad args
|
||||
* @since 0.9.10
|
||||
*/
|
||||
public BOB(I2PAppContext context, ClientAppManager mgr, String[] args) {
|
||||
_context = context;
|
||||
// If we were run from command line, log to stdout
|
||||
boolean logToStdout = false;
|
||||
URL classResource = BOB.class.getResource("BOB.class");
|
||||
@@ -219,7 +225,7 @@ public class BOB implements Runnable, ClientApp {
|
||||
{
|
||||
File cfg = new File(configLocation);
|
||||
if (!cfg.isAbsolute()) {
|
||||
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
|
||||
cfg = new File(_context.getConfigDir(), configLocation);
|
||||
}
|
||||
FileInputStream fi = null;
|
||||
try {
|
||||
@@ -240,7 +246,7 @@ public class BOB implements Runnable, ClientApp {
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(I2PClient.PROP_TCP_PORT)) {
|
||||
props.setProperty(I2PClient.PROP_TCP_PORT, "7654");
|
||||
props.setProperty(I2PClient.PROP_TCP_PORT, Integer.toString(I2PClient.DEFAULT_LISTEN_PORT));
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(PROP_BOB_PORT)) {
|
||||
@@ -276,7 +282,7 @@ public class BOB implements Runnable, ClientApp {
|
||||
if (save) {
|
||||
File cfg = new File(configLocation);
|
||||
if (!cfg.isAbsolute()) {
|
||||
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
|
||||
cfg = new File(_context.getConfigDir(), configLocation);
|
||||
}
|
||||
FileOutputStream fo = null;
|
||||
try {
|
||||
@@ -317,6 +323,8 @@ public class BOB implements Runnable, ClientApp {
|
||||
_log.info("BOB is now running.");
|
||||
if (_mgr != null)
|
||||
_mgr.register(this);
|
||||
_context.portMapper().register(PortMapper.SVC_BOB, props.getProperty(PROP_BOB_HOST),
|
||||
Integer.parseInt(props.getProperty(PROP_BOB_PORT)));
|
||||
|
||||
int i = 0;
|
||||
boolean g = false;
|
||||
@@ -338,6 +346,12 @@ public class BOB implements Runnable, ClientApp {
|
||||
}
|
||||
|
||||
if (g) {
|
||||
if (!_warned) {
|
||||
_warned = true;
|
||||
String s = "BOB is deprecated. Please port applications to SAMv3.";
|
||||
_context.logManager().getLog(BOB.class).logAlways(Log.WARN, s);
|
||||
_log.warn(s);
|
||||
}
|
||||
DoCMDS conn_c = new DoCMDS(spin, lock, server, props, database, _log);
|
||||
Thread t = new I2PAppThread(conn_c);
|
||||
t.setName("BOB.DoCMDS " + i);
|
||||
@@ -354,6 +368,7 @@ public class BOB implements Runnable, ClientApp {
|
||||
changeState(STOPPING, e);
|
||||
} finally {
|
||||
_log.info("BOB is now shutting down...");
|
||||
_context.portMapper().unregister(PortMapper.SVC_BOB);
|
||||
// Clean up everything.
|
||||
try {
|
||||
listener.close();
|
||||
@@ -364,25 +379,30 @@ public class BOB implements Runnable, ClientApp {
|
||||
// We could order them to stop, but that could cause nasty issues in the locks.
|
||||
visitAllThreads();
|
||||
database.getReadLock();
|
||||
int all = database.getcount();
|
||||
database.releaseReadLock();
|
||||
NamedDB nickinfo;
|
||||
for (i = 0; i < all; i++) {
|
||||
database.getReadLock();
|
||||
nickinfo = (NamedDB) database.getnext(i);
|
||||
nickinfo.getReadLock();
|
||||
if (nickinfo.get(P_RUNNING).equals(Boolean.TRUE) && nickinfo.get(P_STOPPING).equals(Boolean.FALSE) && nickinfo.get(P_STARTING).equals(Boolean.FALSE)) {
|
||||
nickinfo.releaseReadLock();
|
||||
database.releaseReadLock();
|
||||
database.getWriteLock();
|
||||
nickinfo.getWriteLock();
|
||||
nickinfo.add(P_STOPPING, Boolean.valueOf(true));
|
||||
nickinfo.releaseWriteLock();
|
||||
database.releaseWriteLock();
|
||||
} else {
|
||||
nickinfo.releaseReadLock();
|
||||
database.releaseReadLock();
|
||||
try {
|
||||
for (Object ndb : database.values()) {
|
||||
nickinfo = (NamedDB) ndb;
|
||||
nickinfo.getReadLock();
|
||||
boolean released = false;
|
||||
try {
|
||||
if (nickinfo.get(P_RUNNING).equals(Boolean.TRUE) && nickinfo.get(P_STOPPING).equals(Boolean.FALSE) && nickinfo.get(P_STARTING).equals(Boolean.FALSE)) {
|
||||
nickinfo.releaseReadLock();
|
||||
released = true;
|
||||
nickinfo.getWriteLock();
|
||||
try {
|
||||
nickinfo.add(P_STOPPING, Boolean.TRUE);
|
||||
} finally {
|
||||
nickinfo.releaseWriteLock();
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
if (!released)
|
||||
nickinfo.releaseReadLock();
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
database.releaseReadLock();
|
||||
}
|
||||
changeState(STOPPED);
|
||||
_log.info("BOB is now stopped.");
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -25,16 +25,16 @@ import net.i2p.data.DataHelper;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
|
||||
/**
|
||||
* Process I2P->TCP
|
||||
* Process I2P->TCP
|
||||
*
|
||||
* @author sponge
|
||||
*/
|
||||
public class I2PtoTCP implements Runnable {
|
||||
|
||||
private I2PSocket I2P;
|
||||
private NamedDB info, database;
|
||||
private final NamedDB info, database;
|
||||
private Socket sock;
|
||||
private AtomicBoolean lives;
|
||||
private final AtomicBoolean lives;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
@@ -56,8 +56,8 @@ public class I2PtoTCP implements Runnable {
|
||||
}
|
||||
|
||||
private void runlock() {
|
||||
database.releaseReadLock();
|
||||
info.releaseReadLock();
|
||||
database.releaseReadLock();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,23 +78,15 @@ public class I2PtoTCP implements Runnable {
|
||||
die:
|
||||
{
|
||||
try {
|
||||
try {
|
||||
rlock();
|
||||
} catch (Exception e) {
|
||||
break die;
|
||||
}
|
||||
rlock();
|
||||
try {
|
||||
host = info.get("OUTHOST").toString();
|
||||
port = Integer.parseInt(info.get("OUTPORT").toString());
|
||||
tell = info.get("QUIET").equals(Boolean.FALSE);
|
||||
} catch (Exception e) {
|
||||
runlock();
|
||||
break die;
|
||||
}
|
||||
try {
|
||||
} finally {
|
||||
runlock();
|
||||
} catch (Exception e) {
|
||||
break die;
|
||||
}
|
||||
sock = new Socket(host, port);
|
||||
sock.setKeepAlive(true);
|
||||
|
@@ -38,18 +38,18 @@ import net.i2p.util.Log;
|
||||
*/
|
||||
public class MUXlisten implements Runnable {
|
||||
|
||||
private NamedDB database, info;
|
||||
private Logger _log;
|
||||
private I2PSocketManager socketManager;
|
||||
private ByteArrayInputStream prikey;
|
||||
private final NamedDB database, info;
|
||||
private final Logger _log;
|
||||
private final I2PSocketManager socketManager;
|
||||
private final ByteArrayInputStream prikey;
|
||||
private ThreadGroup tg;
|
||||
private String N;
|
||||
private ServerSocket listener = null;
|
||||
private int backlog = 50; // should this be more? less?
|
||||
boolean go_out;
|
||||
boolean come_in;
|
||||
private AtomicBoolean lock;
|
||||
private AtomicBoolean lives;
|
||||
private final String N;
|
||||
private ServerSocket listener;
|
||||
private static final int backlog = 50; // should this be more? less?
|
||||
private final boolean go_out;
|
||||
private final boolean come_in;
|
||||
private final AtomicBoolean lock;
|
||||
private final AtomicBoolean lives;
|
||||
|
||||
/**
|
||||
* Constructor Will fail if INPORT is occupied.
|
||||
@@ -61,51 +61,49 @@ public class MUXlisten implements Runnable {
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
MUXlisten(AtomicBoolean lock, NamedDB database, NamedDB info, Logger _log) throws I2PException, IOException, RuntimeException {
|
||||
int port = 0;
|
||||
InetAddress host = null;
|
||||
this.lock = lock;
|
||||
this.tg = null;
|
||||
this.database = database;
|
||||
this.info = info;
|
||||
this._log = _log;
|
||||
lives = new AtomicBoolean(false);
|
||||
try {
|
||||
int port = 0;
|
||||
InetAddress host = null;
|
||||
this.lock = lock;
|
||||
this.tg = null;
|
||||
this.database = database;
|
||||
this.info = info;
|
||||
this._log = _log;
|
||||
lives = new AtomicBoolean(false);
|
||||
|
||||
this.database.getWriteLock();
|
||||
this.info.getWriteLock();
|
||||
this.info.add("STARTING", Boolean.valueOf(true));
|
||||
this.info.releaseWriteLock();
|
||||
this.database.releaseWriteLock();
|
||||
this.database.getReadLock();
|
||||
this.info.getReadLock();
|
||||
|
||||
N = this.info.get("NICKNAME").toString();
|
||||
prikey = new ByteArrayInputStream((byte[]) info.get("KEYS"));
|
||||
// Make a new copy so that anything else won't muck with our database.
|
||||
Properties R = (Properties) info.get("PROPERTIES");
|
||||
Properties Q = new Properties();
|
||||
Lifted.copyProperties(R, Q);
|
||||
this.database.releaseReadLock();
|
||||
this.info.releaseReadLock();
|
||||
|
||||
this.database.getReadLock();
|
||||
this.info.getReadLock();
|
||||
this.go_out = info.exists("OUTPORT");
|
||||
this.come_in = info.exists("INPORT");
|
||||
if (this.come_in) {
|
||||
port = Integer.parseInt(info.get("INPORT").toString());
|
||||
host = InetAddress.getByName(info.get("INHOST").toString());
|
||||
wlock();
|
||||
try {
|
||||
this.info.add("STARTING", Boolean.TRUE);
|
||||
} finally {
|
||||
wunlock();
|
||||
}
|
||||
Properties Q = new Properties();
|
||||
rlock();
|
||||
try {
|
||||
N = this.info.get("NICKNAME").toString();
|
||||
prikey = new ByteArrayInputStream((byte[]) info.get("KEYS"));
|
||||
// Make a new copy so that anything else won't muck with our database.
|
||||
Properties R = (Properties) info.get("PROPERTIES");
|
||||
Lifted.copyProperties(R, Q);
|
||||
|
||||
this.go_out = info.exists("OUTPORT");
|
||||
this.come_in = info.exists("INPORT");
|
||||
if (this.come_in) {
|
||||
port = Integer.parseInt(info.get("INPORT").toString());
|
||||
host = InetAddress.getByName(info.get("INHOST").toString());
|
||||
}
|
||||
} finally {
|
||||
runlock();
|
||||
}
|
||||
this.database.releaseReadLock();
|
||||
this.info.releaseReadLock();
|
||||
|
||||
String i2cpHost = Q.getProperty(I2PClient.PROP_TCP_HOST, "127.0.0.1");
|
||||
int i2cpPort = 7654;
|
||||
String i2cpPortStr = Q.getProperty(I2PClient.PROP_TCP_PORT, "7654");
|
||||
try {
|
||||
i2cpPort = Integer.parseInt(i2cpPortStr);
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new IllegalArgumentException("Invalid I2CP port specified [" + i2cpPortStr + "]");
|
||||
int i2cpPort = I2PClient.DEFAULT_LISTEN_PORT;
|
||||
String i2cpPortStr = Q.getProperty(I2PClient.PROP_TCP_PORT);
|
||||
if (i2cpPortStr != null) {
|
||||
try {
|
||||
i2cpPort = Integer.parseInt(i2cpPortStr);
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new IllegalArgumentException("Invalid I2CP port specified [" + i2cpPortStr + "]");
|
||||
}
|
||||
}
|
||||
|
||||
if (this.come_in) {
|
||||
@@ -115,48 +113,51 @@ public class MUXlisten implements Runnable {
|
||||
prikey, i2cpHost, i2cpPort, Q);
|
||||
} catch (IOException e) {
|
||||
// Something went bad.
|
||||
this.database.getWriteLock();
|
||||
this.info.getWriteLock();
|
||||
this.info.add("STARTING", Boolean.valueOf(false));
|
||||
this.info.releaseWriteLock();
|
||||
this.database.releaseWriteLock();
|
||||
throw new IOException(e.toString());
|
||||
wlock();
|
||||
try {
|
||||
this.info.add("STARTING", Boolean.FALSE);
|
||||
} finally {
|
||||
wunlock();
|
||||
}
|
||||
throw e;
|
||||
} catch (RuntimeException e) {
|
||||
// Something went bad.
|
||||
this.database.getWriteLock();
|
||||
this.info.getWriteLock();
|
||||
this.info.add("STARTING", Boolean.valueOf(false));
|
||||
this.info.releaseWriteLock();
|
||||
this.database.releaseWriteLock();
|
||||
throw new RuntimeException(e);
|
||||
wlock();
|
||||
try {
|
||||
this.info.add("STARTING", Boolean.FALSE);
|
||||
} finally {
|
||||
wunlock();
|
||||
}
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
// Something else went bad.
|
||||
this.database.getWriteLock();
|
||||
this.info.getWriteLock();
|
||||
this.info.add("STARTING", Boolean.valueOf(false));
|
||||
this.info.releaseWriteLock();
|
||||
this.database.releaseWriteLock();
|
||||
wlock();
|
||||
try {
|
||||
this.info.add("STARTING", Boolean.FALSE);
|
||||
} finally {
|
||||
wunlock();
|
||||
}
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void rlock() throws Exception {
|
||||
private void rlock() {
|
||||
database.getReadLock();
|
||||
info.getReadLock();
|
||||
}
|
||||
|
||||
private void runlock() throws Exception {
|
||||
database.releaseReadLock();
|
||||
private void runlock() {
|
||||
info.releaseReadLock();
|
||||
database.releaseReadLock();
|
||||
}
|
||||
|
||||
private void wlock() throws Exception {
|
||||
private void wlock() {
|
||||
database.getWriteLock();
|
||||
info.getWriteLock();
|
||||
}
|
||||
|
||||
private void wunlock() throws Exception {
|
||||
private void wunlock() {
|
||||
info.releaseWriteLock();
|
||||
database.releaseWriteLock();
|
||||
}
|
||||
@@ -170,24 +171,19 @@ public class MUXlisten implements Runnable {
|
||||
Thread t = null;
|
||||
Thread q = null;
|
||||
try {
|
||||
wlock();
|
||||
try {
|
||||
wlock();
|
||||
try {
|
||||
info.add("RUNNING", Boolean.valueOf(true));
|
||||
info.add("RUNNING", Boolean.TRUE);
|
||||
} catch (Exception e) {
|
||||
lock.set(false);
|
||||
wunlock();
|
||||
return;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
lock.set(false);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
} finally {
|
||||
wunlock();
|
||||
} catch (Exception e) {
|
||||
lock.set(false);
|
||||
return;
|
||||
}
|
||||
lives.set(true);
|
||||
lock.set(false);
|
||||
@@ -214,21 +210,17 @@ public class MUXlisten implements Runnable {
|
||||
q.start();
|
||||
}
|
||||
|
||||
wlock();
|
||||
try {
|
||||
wlock();
|
||||
try {
|
||||
info.add("STARTING", Boolean.valueOf(false));
|
||||
info.add("STARTING", Boolean.FALSE);
|
||||
} catch (Exception e) {
|
||||
wunlock();
|
||||
break quit;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
break quit;
|
||||
}
|
||||
try {
|
||||
} finally {
|
||||
wunlock();
|
||||
} catch (Exception e) {
|
||||
break quit;
|
||||
}
|
||||
boolean spin = true;
|
||||
while (spin && lives.get()) {
|
||||
@@ -237,21 +229,17 @@ public class MUXlisten implements Runnable {
|
||||
} catch (InterruptedException e) {
|
||||
break quit;
|
||||
}
|
||||
rlock();
|
||||
try {
|
||||
rlock();
|
||||
try {
|
||||
spin = info.get("STOPPING").equals(Boolean.FALSE);
|
||||
} catch (Exception e) {
|
||||
runlock();
|
||||
break quit;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
break quit;
|
||||
}
|
||||
try {
|
||||
} finally {
|
||||
runlock();
|
||||
} catch (Exception e) {
|
||||
break quit;
|
||||
}
|
||||
}
|
||||
} // die
|
||||
@@ -271,16 +259,16 @@ public class MUXlisten implements Runnable {
|
||||
try {
|
||||
wlock();
|
||||
try {
|
||||
info.add("STARTING", Boolean.valueOf(false));
|
||||
info.add("STOPPING", Boolean.valueOf(true));
|
||||
info.add("RUNNING", Boolean.valueOf(false));
|
||||
info.add("STARTING", Boolean.FALSE);
|
||||
info.add("STOPPING", Boolean.TRUE);
|
||||
info.add("RUNNING", Boolean.FALSE);
|
||||
} catch (Exception e) {
|
||||
lock.set(false);
|
||||
wunlock();
|
||||
return;
|
||||
}
|
||||
wunlock();
|
||||
} catch (Exception e) {
|
||||
} finally {
|
||||
wunlock();
|
||||
}
|
||||
// Start cleanup.
|
||||
while (!lock.compareAndSet(false, true)) {
|
||||
@@ -322,15 +310,15 @@ public class MUXlisten implements Runnable {
|
||||
try {
|
||||
wlock();
|
||||
try {
|
||||
info.add("STARTING", Boolean.valueOf(false));
|
||||
info.add("STOPPING", Boolean.valueOf(false));
|
||||
info.add("RUNNING", Boolean.valueOf(false));
|
||||
info.add("STARTING", Boolean.FALSE);
|
||||
info.add("STOPPING", Boolean.FALSE);
|
||||
info.add("RUNNING", Boolean.FALSE);
|
||||
} catch (Exception e) {
|
||||
lock.set(false);
|
||||
wunlock();
|
||||
return;
|
||||
}
|
||||
wunlock();
|
||||
} finally {
|
||||
wunlock();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
|
||||
|
@@ -15,6 +15,12 @@
|
||||
*/
|
||||
package net.i2p.BOB;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||
|
||||
|
||||
/**
|
||||
* Internal database to relate nicknames to options to values
|
||||
*
|
||||
@@ -22,129 +28,62 @@ package net.i2p.BOB;
|
||||
*/
|
||||
public class NamedDB {
|
||||
|
||||
private volatile Object[][] data;
|
||||
private int index, writersWaiting, readers;
|
||||
private final Map<String, Object> data;
|
||||
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(false);
|
||||
|
||||
/**
|
||||
* make initial NULL object
|
||||
*
|
||||
*/
|
||||
public NamedDB() {
|
||||
this.data = new Object[1][2];
|
||||
this.data = new HashMap<String, Object>();
|
||||
}
|
||||
|
||||
synchronized public void getReadLock() {
|
||||
while ((writersWaiting != 0)) {
|
||||
try {
|
||||
wait();
|
||||
} catch (InterruptedException ie) {
|
||||
}
|
||||
}
|
||||
readers++;
|
||||
public void getReadLock() {
|
||||
lock.readLock().lock();
|
||||
}
|
||||
|
||||
synchronized public void releaseReadLock() {
|
||||
readers--;
|
||||
notifyAll();
|
||||
public void releaseReadLock() {
|
||||
lock.readLock().unlock();
|
||||
}
|
||||
|
||||
synchronized public void getWriteLock() {
|
||||
writersWaiting++;
|
||||
while (readers != 0 && writersWaiting != 1) {
|
||||
try {
|
||||
wait();
|
||||
} catch (InterruptedException ie) {
|
||||
}
|
||||
}
|
||||
public void getWriteLock() {
|
||||
lock.writeLock().lock();
|
||||
}
|
||||
|
||||
synchronized public void releaseWriteLock() {
|
||||
writersWaiting--;
|
||||
notifyAll();
|
||||
public void releaseWriteLock() {
|
||||
lock.writeLock().unlock();
|
||||
}
|
||||
|
||||
/**
|
||||
* Find objects in the array, returns its index or throws exception
|
||||
* @param key
|
||||
* @return an objects index
|
||||
* @throws ArrayIndexOutOfBoundsException when key does not exist
|
||||
*/
|
||||
public int idx(Object key) throws ArrayIndexOutOfBoundsException {
|
||||
for (int i = 0; i < index; i++) {
|
||||
if (key.equals(data[i][0])) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
throw new ArrayIndexOutOfBoundsException("Can't locate key for index");
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an object from array if it exists
|
||||
* Delete an object if it exists
|
||||
*
|
||||
* @param key
|
||||
*/
|
||||
public void kill(Object key) {
|
||||
|
||||
int i, j, k, l;
|
||||
Object[][] olddata;
|
||||
int didsomething = 0;
|
||||
|
||||
try {
|
||||
k = idx(key);
|
||||
} catch (ArrayIndexOutOfBoundsException b) {
|
||||
return;
|
||||
}
|
||||
olddata = new Object[index + 2][2];
|
||||
// copy to olddata, skipping 'k'
|
||||
for (i = 0, l = 0; l < index; i++, l++) {
|
||||
if (i == k) {
|
||||
l++;
|
||||
didsomething++;
|
||||
}
|
||||
for (j = 0; j < 2; j++) {
|
||||
olddata[i][j] = data[l][j];
|
||||
}
|
||||
}
|
||||
index -= didsomething;
|
||||
data = olddata;
|
||||
public void kill(String key) {
|
||||
data.remove(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add object to the array, deletes the old one if it exists
|
||||
* Add object, deletes the old one if it exists
|
||||
*
|
||||
* @param key
|
||||
* @param val
|
||||
*/
|
||||
public void add(Object key, Object val) {
|
||||
Object[][] olddata;
|
||||
int i, j;
|
||||
i = 0;
|
||||
kill(key);
|
||||
|
||||
olddata = new Object[index + 2][2];
|
||||
// copy to olddata
|
||||
for (i = 0; i < index; i++) {
|
||||
for (j = 0; j < 2; j++) {
|
||||
olddata[i][j] = data[i][j];
|
||||
}
|
||||
}
|
||||
data = olddata;
|
||||
data[index++] = new Object[]{key, val};
|
||||
public void add(String key, Object val) {
|
||||
data.put(key, val);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the object, and return it, throws RuntimeException
|
||||
* Get the object, and return it, throws RuntimeException if not found
|
||||
*
|
||||
* @param key
|
||||
* @return Object
|
||||
* @throws java.lang.RuntimeException
|
||||
* @param key non-null
|
||||
* @return Object non-null
|
||||
* @throws java.lang.RuntimeException if not found
|
||||
*/
|
||||
public Object get(Object key) throws RuntimeException {
|
||||
for (int i = 0; i < index; i++) {
|
||||
if (key.equals(data[i][0])) {
|
||||
return data[i][1];
|
||||
}
|
||||
}
|
||||
public Object get(String key) throws RuntimeException {
|
||||
Object rv = data.get(key);
|
||||
if (rv != null)
|
||||
return rv;
|
||||
throw new RuntimeException("Key not found");
|
||||
}
|
||||
|
||||
@@ -154,33 +93,14 @@ public class NamedDB {
|
||||
* @param key
|
||||
* @return true if an object exists, else returns false
|
||||
*/
|
||||
public boolean exists(Object key) {
|
||||
for (int i = 0; i < index; i++) {
|
||||
if (key.equals(data[i][0])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
public boolean exists(String key) {
|
||||
return data.containsKey(key);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param i index
|
||||
* @return an indexed Object
|
||||
* @throws java.lang.RuntimeException
|
||||
* @since 0.9.29 replaces getcount() and getnext(int)
|
||||
*/
|
||||
public Object getnext(int i) throws RuntimeException {
|
||||
if (i < index && i > -1) {
|
||||
return data[i][1];
|
||||
}
|
||||
throw new RuntimeException("No more data");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the count of how many objects
|
||||
*/
|
||||
public int getcount() {
|
||||
return index;
|
||||
public Collection<Object> values() {
|
||||
return data.values();
|
||||
}
|
||||
}
|
||||
|
@@ -27,9 +27,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
*/
|
||||
public class TCPio implements Runnable {
|
||||
|
||||
private InputStream Ain;
|
||||
private OutputStream Aout;
|
||||
private AtomicBoolean lives;
|
||||
private final InputStream Ain;
|
||||
private final OutputStream Aout;
|
||||
private final AtomicBoolean lives;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
@@ -35,29 +35,26 @@ import net.i2p.util.I2PAppThread;
|
||||
|
||||
/**
|
||||
*
|
||||
* Process TCP->I2P
|
||||
* Process TCP->I2P
|
||||
*
|
||||
* @author sponge
|
||||
*/
|
||||
public class TCPtoI2P implements Runnable {
|
||||
|
||||
private I2PSocket I2P;
|
||||
private NamedDB info, database;
|
||||
private Socket sock;
|
||||
private I2PSocketManager socketManager;
|
||||
private AtomicBoolean lives;
|
||||
private final Socket sock;
|
||||
private final I2PSocketManager socketManager;
|
||||
private final AtomicBoolean lives;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param i2p
|
||||
* @param socket
|
||||
* param info
|
||||
* param database
|
||||
* @param info unused
|
||||
* @param database unused
|
||||
*/
|
||||
TCPtoI2P(I2PSocketManager i2p, Socket socket, NamedDB info, NamedDB database, AtomicBoolean lives) {
|
||||
this.sock = socket;
|
||||
this.info = info;
|
||||
this.database = database;
|
||||
this.socketManager = i2p;
|
||||
this.lives = lives;
|
||||
}
|
||||
@@ -106,16 +103,6 @@ public class TCPtoI2P implements Runnable {
|
||||
out.flush();
|
||||
}
|
||||
|
||||
private void rlock() {
|
||||
database.getReadLock();
|
||||
info.getReadLock();
|
||||
}
|
||||
|
||||
private void runlock() {
|
||||
info.releaseReadLock();
|
||||
database.releaseReadLock();
|
||||
}
|
||||
|
||||
/**
|
||||
* TCP stream to I2P stream thread starter
|
||||
*
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<html>
|
||||
<body>
|
||||
<p>BOB, the Basic Open Bridge, allows TCP applications to talk over I2P.</p>
|
||||
<p>BOB, the Basic Open Bridge, allows TCP applications to talk over I2P - DEPRECATED - Please port applications to SAMv3.</p>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="java/src"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_sdk"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="lib" path="/jetty/jettylib/javax.servlet.jar"/>
|
||||
<classpathentry kind="output" path="build"/>
|
||||
</classpath>
|
@@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>addressbook</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
@@ -1,43 +0,0 @@
|
||||
addressbook v2.0.2 - A simple name resolution mechanism for I2P
|
||||
|
||||
addressbook is a simple implementation of subscribable address books for I2P.
|
||||
Addresses are stored in userhosts.txt and a second copy of the address book is
|
||||
placed on your eepsite as hosts.txt.
|
||||
|
||||
subscriptions.txt contains a list of urls to check for new addresses.
|
||||
Since the urls are checked in order, and conflicting addresses are not added,
|
||||
addressbook.subscriptions can be considered to be ranked in order of trust.
|
||||
|
||||
The system created by addressbook is similar to the early days of DNS,
|
||||
when everyone ran a local name server. The major difference is the lack of
|
||||
authority. Name cannot be guaranteed to be globally unique, but in practise
|
||||
they probably will be, for a variety of social reasons.
|
||||
|
||||
Requirements
|
||||
************
|
||||
|
||||
i2p with a running http proxy
|
||||
|
||||
Installation and Usage
|
||||
**********************
|
||||
|
||||
1. Unzip addressbook-%ver.zip into your i2p directory.
|
||||
2. Restart your router.
|
||||
|
||||
The addressbook daemon will automatically run while the router is up.
|
||||
|
||||
Aside from the daemon itself, the other elements of the addressbook interface
|
||||
are the config.txt, myhosts.txt, and subscriptions.txt files found in the addressbook
|
||||
directory.
|
||||
|
||||
config.txt is the configuration file for addressbook.
|
||||
|
||||
myhosts.txt is the addressbook master address book. Addresses placed in this file
|
||||
take precidence over those in the router address book and in remote address books.
|
||||
If changes are made to this file, they will be reflected in the router address book
|
||||
and published address book after the next update. Do not make changes directly to the
|
||||
router address book, as they could be lost during an update.
|
||||
|
||||
subscriptions.txt is the subscription list for addressbook. Each entry is an absolute
|
||||
url to a file in hosts.txt format. Since the list is checked in order, url's should be
|
||||
listed in order of trust.
|
@@ -1,25 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="web" name="Web">
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/web.xml" />
|
||||
</descriptors>
|
||||
<webroots>
|
||||
<root url="file://$MODULE_DIR$" relative="/WEB-INF" />
|
||||
</webroots>
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/java/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="jettylib" level="project" />
|
||||
<orderEntry type="module" module-name="core" />
|
||||
</component>
|
||||
</module>
|
12
apps/addressbook/build.gradle
Normal file
12
apps/addressbook/build.gradle
Normal file
@@ -0,0 +1,12 @@
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'java/src'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(':core')
|
||||
compile project(':apps:jetty')
|
||||
}
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0"?>
|
||||
<project name="addressbook" default="war" basedir=".">
|
||||
<project name="addressbook" default="all" basedir=".">
|
||||
|
||||
<property name="src" value="java/src"/>
|
||||
<property name="build" value="build"/>
|
||||
@@ -7,7 +7,10 @@
|
||||
<property name="jar" value="addressbook.jar"/>
|
||||
<property name="war" value="addressbook.war"/>
|
||||
<property name="javac.compilerargs" value="" />
|
||||
<property name="javac.version" value="1.7" />
|
||||
<property name="javac.version" value="1.8" />
|
||||
<property name="javac.release" value="8" />
|
||||
|
||||
<target name="all" depends="jar, emptyWar"/>
|
||||
|
||||
<target name="init">
|
||||
<mkdir dir="${build}"/>
|
||||
@@ -36,24 +39,12 @@
|
||||
</depend>
|
||||
</target>
|
||||
|
||||
<target name="dependServlet" if="depend.available">
|
||||
<depend
|
||||
cache="../../build"
|
||||
srcdir="${src}"
|
||||
destdir="${build}" >
|
||||
<!-- Depend on classes instead of jars where available -->
|
||||
<classpath>
|
||||
<pathelement location="../../core/java/build/obj" />
|
||||
<pathelement location="../jetty/jettylib/javax.servlet.jar" />
|
||||
</classpath>
|
||||
</depend>
|
||||
</target>
|
||||
|
||||
<target name="compile" depends="init, depend">
|
||||
<target name="compile" depends="init, depend, warUpToDate">
|
||||
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
||||
release="${javac.release}"
|
||||
includeAntRuntime="false"
|
||||
srcdir="${src}" destdir="${build}"
|
||||
excludes="net/i2p/addressbook/Servlet.java">
|
||||
encoding="UTF-8"
|
||||
srcdir="${src}" destdir="${build}">
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
<classpath>
|
||||
<pathelement location="../../core/java/build/i2p.jar" />
|
||||
@@ -61,20 +52,6 @@
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<target name="compileServlet" depends="init, dependServlet, compile">
|
||||
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
||||
includeAntRuntime="false"
|
||||
srcdir="${src}" destdir="${build}"
|
||||
includes="net/i2p/addressbook/Servlet.java">
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
<classpath>
|
||||
<pathelement location="../../core/java/build/i2p.jar" />
|
||||
<pathelement location="../jetty/jettylib/javax.servlet.jar" />
|
||||
</classpath>
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<!-- unused for now (except for Android), as we oddly ship addressbook as a .war -->
|
||||
<target name="jar" depends="compile, changes">
|
||||
<!-- set if unset -->
|
||||
<property name="workspace.changes.tr" value="" />
|
||||
@@ -91,29 +68,14 @@
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<target name="war" depends="compileServlet, changes, warUpToDate" unless="war.uptodate">
|
||||
<mkdir dir="${dist}/tmp"/>
|
||||
<mkdir dir="${dist}/tmp/WEB-INF"/>
|
||||
<mkdir dir="${dist}/tmp/WEB-INF/classes"/>
|
||||
<copy todir="${dist}/tmp/WEB-INF/classes">
|
||||
<fileset dir="${build}"/>
|
||||
</copy>
|
||||
<!-- set if unset -->
|
||||
<property name="workspace.changes.tr" value="" />
|
||||
<war basedir="${dist}/tmp" webxml="web.xml" destfile="${dist}/${war}">
|
||||
<manifest>
|
||||
<attribute name="Implementation-Version" value="${full.version}" />
|
||||
<attribute name="Built-By" value="${build.built-by}" />
|
||||
<attribute name="Build-Date" value="${build.timestamp}" />
|
||||
<attribute name="Base-Revision" value="${workspace.version}" />
|
||||
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
|
||||
<attribute name="X-Compile-Source-JDK" value="${javac.version}" />
|
||||
<attribute name="X-Compile-Target-JDK" value="${javac.version}" />
|
||||
</manifest>
|
||||
</war>
|
||||
<delete dir="${dist}/tmp"/>
|
||||
</target>
|
||||
|
||||
<target name="emptyWar" depends="init">
|
||||
<jar destfile="${dist}/${war}" >
|
||||
<manifest>
|
||||
<attribute name="Note" value="Intentionally empty" />
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<target name="warUpToDate">
|
||||
<uptodate property="war.uptodate" targetfile="${dist}/${war}">
|
||||
|
@@ -1,48 +0,0 @@
|
||||
# This is the configuration file for addressbook.
|
||||
#
|
||||
# Options
|
||||
# *******
|
||||
# All paths are realitive to i2p/addressbook. Default value for
|
||||
# each option is given in parentheses.
|
||||
#
|
||||
# proxy_host The hostname of your I2P http proxy.
|
||||
# (localhost)
|
||||
#
|
||||
# proxy_port The port of your I2P http proxy. (4444)
|
||||
#
|
||||
# master_addressbook The path to your master address book, used for local
|
||||
# changes only. (myhosts.txt)
|
||||
#
|
||||
# router_addressbook The path to the address book used by the router.
|
||||
# Contains the addresses from your master address book
|
||||
# and your subscribed address books. (../userhosts.txt)
|
||||
#
|
||||
# private_addressbook The path to the private address book used by the router.
|
||||
# This is used only by the router and SusiDNS.
|
||||
# It is not published by addressbook. (../privatehosts.txt)
|
||||
#
|
||||
# published_addressbook The path to the copy of your address book made
|
||||
# available on i2p. (../eepsite/docroot/hosts.txt)
|
||||
#
|
||||
# log The path to your addressbook log. (log.txt)
|
||||
#
|
||||
# subscriptions The path to your subscription file. (subscriptions.txt)
|
||||
#
|
||||
# etags The path to the etags header storage file. (etags)
|
||||
#
|
||||
# last_modified The path to the last-modified header storage file.
|
||||
# (last_modified)
|
||||
#
|
||||
# update_delay The time (in hours) between each update. (1)
|
||||
|
||||
proxy_host=localhost
|
||||
proxy_port=4444
|
||||
master_addressbook=myhosts.txt
|
||||
router_addressbook=../userhosts.txt
|
||||
private_addressbook=../privatehosts.txt
|
||||
published_addressbook=../eepsite/docroot/hosts.txt
|
||||
log=log.txt
|
||||
subscriptions=subscriptions.txt
|
||||
etags=etags
|
||||
last_modified=last_modified
|
||||
update_delay=1
|
@@ -133,8 +133,9 @@ class AddressBook implements Iterable<Map.Entry<String, HostTxtEntry>> {
|
||||
public AddressBook(Subscription subscription, String proxyHost, int proxyPort) {
|
||||
Map<String, HostTxtEntry> a = null;
|
||||
File subf = null;
|
||||
File tmp = null;
|
||||
try {
|
||||
File tmp = SecureFile.createTempFile("addressbook", null, I2PAppContext.getGlobalContext().getTempDir());
|
||||
tmp = SecureFile.createTempFile("addressbook", null, I2PAppContext.getGlobalContext().getTempDir());
|
||||
EepGet get = new EepGet(I2PAppContext.getGlobalContext(), true,
|
||||
proxyHost, proxyPort, 0, -1l, MAX_SUB_SIZE, tmp.getAbsolutePath(), null,
|
||||
subscription.getLocation(), true, subscription.getEtag(), subscription.getLastModified(), null);
|
||||
@@ -148,6 +149,8 @@ class AddressBook implements Iterable<Map.Entry<String, HostTxtEntry>> {
|
||||
tmp.delete();
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
if (tmp != null)
|
||||
tmp.delete();
|
||||
a = Collections.emptyMap();
|
||||
}
|
||||
this.addresses = a;
|
||||
@@ -306,7 +309,17 @@ class AddressBook implements Iterable<Map.Entry<String, HostTxtEntry>> {
|
||||
public void merge(AddressBook other, boolean overwrite, Log log) {
|
||||
if (this.addresses == null)
|
||||
throw new IllegalStateException();
|
||||
for (Iterator<Map.Entry<String, HostTxtEntry>> iter = other.iterator(); iter.hasNext(); ) {
|
||||
Iterator<Map.Entry<String, HostTxtEntry>> iter = other.iterator();
|
||||
try {
|
||||
merge2(other, iter, overwrite, log);
|
||||
} finally {
|
||||
if (iter instanceof HostTxtIterator)
|
||||
((HostTxtIterator) iter).close();
|
||||
}
|
||||
}
|
||||
|
||||
private void merge2(AddressBook other, Iterator<Map.Entry<String, HostTxtEntry>> iter, boolean overwrite, Log log) {
|
||||
while(iter.hasNext()) {
|
||||
Map.Entry<String, HostTxtEntry> entry = iter.next();
|
||||
String otherKey = entry.getKey();
|
||||
HostTxtEntry otherValue = entry.getValue();
|
||||
@@ -367,11 +380,6 @@ class AddressBook implements Iterable<Map.Entry<String, HostTxtEntry>> {
|
||||
this.write(new File(this.location));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() {
|
||||
delete();
|
||||
}
|
||||
|
||||
/****
|
||||
public static void main(String[] args) {
|
||||
String[] tests = { "foo.i2p",
|
||||
|
@@ -166,6 +166,10 @@ class ConfigParser {
|
||||
Map<String, String> result;
|
||||
try {
|
||||
result = parse(file);
|
||||
// migrate
|
||||
String local = result.remove("master_addressbook");
|
||||
if (local != null)
|
||||
result.put("local_addressbook", local);
|
||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||
if (!result.containsKey(entry.getKey()))
|
||||
result.put(entry.getKey(), entry.getValue());
|
||||
|
@@ -43,15 +43,16 @@ import net.i2p.util.SystemVersion;
|
||||
|
||||
/**
|
||||
* Main class of addressbook. Performs updates, and runs the main loop.
|
||||
* As of 0.9.30, package private, run with DaemonThread.
|
||||
*
|
||||
* @author Ragnarok
|
||||
*
|
||||
*/
|
||||
public class Daemon {
|
||||
class Daemon {
|
||||
public static final String VERSION = "2.0.4";
|
||||
private static final Daemon _instance = new Daemon();
|
||||
private volatile boolean _running;
|
||||
private static final boolean DEBUG = false;
|
||||
// If you change this, change in SusiDNS SubscriptionBean also
|
||||
private static final String DEFAULT_SUB = "http://i2p-projekt.i2p/hosts.txt";
|
||||
/** @since 0.9.12 */
|
||||
static final String OLD_DEFAULT_SUB = "http://www.i2p2.i2p/hosts.txt";
|
||||
@@ -66,8 +67,8 @@ public class Daemon {
|
||||
* Update the router and published address books using remote data from the
|
||||
* subscribed address books listed in subscriptions.
|
||||
*
|
||||
* @param master
|
||||
* The master AddressBook. This address book is never
|
||||
* @param local
|
||||
* The local AddressBook. This address book is never
|
||||
* overwritten, so it is safe for the user to write to.
|
||||
* It is only merged to the published addressbook.
|
||||
* May be null.
|
||||
@@ -76,7 +77,7 @@ public class Daemon {
|
||||
* client applications.
|
||||
* @param published
|
||||
* The published AddressBook. This address book is published on
|
||||
* the user's eepsite so that others may subscribe to it.
|
||||
* the user's I2P Site so that others may subscribe to it.
|
||||
* May be null.
|
||||
* If non-null, overwrite with the new addressbook.
|
||||
* @param subscriptions
|
||||
@@ -86,7 +87,7 @@ public class Daemon {
|
||||
* The log to write changes and conflicts to.
|
||||
* May be null.
|
||||
*/
|
||||
public static void update(AddressBook master, AddressBook router,
|
||||
public static void update(AddressBook local, AddressBook router,
|
||||
File published, SubscriptionList subscriptions, Log log) {
|
||||
for (AddressBook book : subscriptions) {
|
||||
// yes, the EepGet fetch() is done in next()
|
||||
@@ -94,8 +95,8 @@ public class Daemon {
|
||||
}
|
||||
router.write();
|
||||
if (published != null) {
|
||||
if (master != null)
|
||||
router.merge(master, true, null);
|
||||
if (local != null)
|
||||
router.merge(local, true, null);
|
||||
router.write(published);
|
||||
}
|
||||
subscriptions.write();
|
||||
@@ -104,13 +105,13 @@ public class Daemon {
|
||||
/**
|
||||
* Update the router and published address books using remote data from the
|
||||
* subscribed address books listed in subscriptions.
|
||||
* Merging of the "master" addressbook is NOT supported.
|
||||
* Merging of the "local" addressbook is NOT supported.
|
||||
*
|
||||
* @param router
|
||||
* The NamingService to update, generally the root NamingService from the context.
|
||||
* @param published
|
||||
* The published AddressBook. This address book is published on
|
||||
* the user's eepsite so that others may subscribe to it.
|
||||
* the user's I2P Site so that others may subscribe to it.
|
||||
* May be null.
|
||||
* If non-null, overwrite with the new addressbook.
|
||||
* @param subscriptions
|
||||
@@ -129,9 +130,22 @@ public class Daemon {
|
||||
// This also has the advantage of not flushing the NamingService's LRU cache.
|
||||
String nsClass = router.getClass().getSimpleName();
|
||||
boolean isTextFile = nsClass.equals("HostsTxtNamingService") || nsClass.equals("SingleFileNamingService");
|
||||
Set<String> knownNames = null;
|
||||
Set<String> knownNames;
|
||||
if (isTextFile) {
|
||||
// load the hostname set
|
||||
Properties opts = new Properties();
|
||||
opts.setProperty("file", "hosts.txt");
|
||||
knownNames = router.getNames(opts);
|
||||
} else {
|
||||
knownNames = null;
|
||||
}
|
||||
NamingService publishedNS;
|
||||
if (published != null) {
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
} else {
|
||||
publishedNS = null;
|
||||
}
|
||||
|
||||
NamingService publishedNS = null;
|
||||
Iterator<AddressBook> iter = subscriptions.iterator();
|
||||
while (iter.hasNext()) {
|
||||
// yes, the EepGet fetch() is done in next()
|
||||
@@ -141,26 +155,41 @@ public class Daemon {
|
||||
if (DEBUG && log != null && addressbook.getLocation() != null) {
|
||||
long end = System.currentTimeMillis();
|
||||
log.append("Fetch of " + addressbook.getLocation() + " took " + (end - start));
|
||||
start = end;
|
||||
}
|
||||
Iterator<Map.Entry<String, HostTxtEntry>> iter2 = addressbook.iterator();
|
||||
try {
|
||||
update(router, knownNames, publishedNS, addressbook, iter2, log);
|
||||
} finally {
|
||||
if (iter2 instanceof HostTxtIterator)
|
||||
((HostTxtIterator) iter2).close();
|
||||
addressbook.delete();
|
||||
}
|
||||
} // subscriptions
|
||||
subscriptions.write();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param knownNames only non-null if router book is a text file
|
||||
* @param publishedNS only non-null if we have a published address book
|
||||
* @since 0.9.33 split out from above
|
||||
*/
|
||||
private static void update(NamingService router, Set<String> knownNames,
|
||||
NamingService publishedNS, AddressBook addressbook,
|
||||
Iterator<Map.Entry<String, HostTxtEntry>> iter, Log log) {
|
||||
long start = DEBUG ? System.currentTimeMillis() : 0;
|
||||
int old = 0, nnew = 0, invalid = 0, conflict = 0, total = 0;
|
||||
int deleted = 0;
|
||||
for (Map.Entry<String, HostTxtEntry> entry : addressbook) {
|
||||
while(iter.hasNext()) {
|
||||
Map.Entry<String, HostTxtEntry> entry = iter.next();
|
||||
total++;
|
||||
// may be null for 'remove' entries
|
||||
String key = entry.getKey();
|
||||
boolean isKnown;
|
||||
// NOT set for text file NamingService
|
||||
Destination oldDest;
|
||||
if (isTextFile) {
|
||||
if (knownNames == null) {
|
||||
// load the hostname set
|
||||
Properties opts = new Properties();
|
||||
opts.setProperty("file", "hosts.txt");
|
||||
knownNames = router.getNames(opts);
|
||||
}
|
||||
if (knownNames != null) {
|
||||
oldDest = null;
|
||||
isKnown = key != null ? knownNames.contains(key) : null;
|
||||
isKnown = key != null ? knownNames.contains(key) : false;
|
||||
} else {
|
||||
oldDest = key != null ? router.lookup(key) : null;
|
||||
isKnown = oldDest != null;
|
||||
@@ -242,13 +271,11 @@ public class Daemon {
|
||||
}
|
||||
// now update the published addressbook
|
||||
// ditto
|
||||
if (published != null) {
|
||||
if (publishedNS == null)
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
if (publishedNS != null) {
|
||||
// FIXME this fails, no support in SFNS
|
||||
success = publishedNS.addDestination(key, dest, props);
|
||||
if (log != null && !success)
|
||||
log.append("Add to published address book " + published.getAbsolutePath() + " failed for " + key);
|
||||
log.append("Add to published address book " + publishedNS.getName() + " failed for " + key);
|
||||
}
|
||||
nnew++;
|
||||
continue;
|
||||
@@ -415,12 +442,10 @@ public class Daemon {
|
||||
". From: " + addressbook.getLocation());
|
||||
}
|
||||
// now update the published addressbook
|
||||
if (published != null) {
|
||||
if (publishedNS == null)
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
if (publishedNS != null) {
|
||||
success = publishedNS.remove(poldname, dest);
|
||||
if (log != null && !success)
|
||||
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + poldname);
|
||||
log.append("Remove from published address book " + publishedNS.getName() + " failed for " + poldname);
|
||||
}
|
||||
} else {
|
||||
// mismatch, disallow
|
||||
@@ -462,20 +487,19 @@ public class Daemon {
|
||||
log.append("Save to naming service " + router + " failed for new key " + key);
|
||||
}
|
||||
// now update the published addressbook
|
||||
if (published != null) {
|
||||
if (publishedNS == null)
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
if (publishedNS != null) {
|
||||
if (allowExistingKeyInPublished)
|
||||
success = publishedNS.put(key, dest, props);
|
||||
else
|
||||
success = publishedNS.putIfAbsent(key, dest, props);
|
||||
if (log != null && !success) {
|
||||
log.append("Save to published address book " + published.getAbsolutePath() + " failed for new key " + key);
|
||||
log.append("Save to published address book " + publishedNS.getName() + " failed for new key " + key);
|
||||
}
|
||||
}
|
||||
if (isTextFile)
|
||||
if (knownNames != null) {
|
||||
// keep track for later dup check
|
||||
knownNames.add(key);
|
||||
}
|
||||
nnew++;
|
||||
} else if (key == null) {
|
||||
// 'remove' actions
|
||||
@@ -506,12 +530,10 @@ public class Daemon {
|
||||
". From: " + addressbook.getLocation());
|
||||
}
|
||||
// now update the published addressbook
|
||||
if (published != null) {
|
||||
if (publishedNS == null)
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
if (publishedNS != null) {
|
||||
success = publishedNS.remove(poldname, pod);
|
||||
if (log != null && !success)
|
||||
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + poldname);
|
||||
log.append("Remove from published address book " + publishedNS.getName() + " failed for " + poldname);
|
||||
}
|
||||
} else if (pod2 != null) {
|
||||
// mismatch, disallow
|
||||
@@ -550,12 +572,10 @@ public class Daemon {
|
||||
". From: " + addressbook.getLocation());
|
||||
}
|
||||
// now update the published addressbook
|
||||
if (published != null) {
|
||||
if (publishedNS == null)
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
if (publishedNS != null) {
|
||||
success = publishedNS.remove(poldname, pod);
|
||||
if (log != null && !success)
|
||||
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + poldname);
|
||||
log.append("Remove from published address book " + publishedNS.getName() + " failed for " + poldname);
|
||||
}
|
||||
} else if (pod2 != null) {
|
||||
// mismatch, disallow
|
||||
@@ -585,12 +605,10 @@ public class Daemon {
|
||||
". From: " + addressbook.getLocation());
|
||||
}
|
||||
// now update the published addressbook
|
||||
if (published != null) {
|
||||
if (publishedNS == null)
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
if (publishedNS != null) {
|
||||
success = publishedNS.remove(rev, pod);
|
||||
if (log != null && !success)
|
||||
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + rev);
|
||||
log.append("Remove from published address book " + publishedNS.getName() + " failed for " + rev);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -640,7 +658,7 @@ public class Daemon {
|
||||
log.append("Invalid b64 for " + key + " From: " + addressbook.getLocation());
|
||||
invalid++;
|
||||
}
|
||||
}
|
||||
} // entries
|
||||
if (DEBUG && log != null && total > 0) {
|
||||
log.append("Merge of " + addressbook.getLocation() + " into " + router +
|
||||
" took " + (System.currentTimeMillis() - start) + " ms with " +
|
||||
@@ -650,10 +668,7 @@ public class Daemon {
|
||||
deleted + " deleted, " +
|
||||
invalid + " invalid, " +
|
||||
conflict + " conflicts");
|
||||
} // entries
|
||||
addressbook.delete();
|
||||
} // subscriptions
|
||||
subscriptions.write();
|
||||
}
|
||||
}
|
||||
|
||||
/** @since 0.9.26 */
|
||||
@@ -736,17 +751,17 @@ public class Daemon {
|
||||
if (Boolean.parseBoolean(settings.get("update_direct"))) {
|
||||
// Direct hosts.txt access
|
||||
File routerFile = new File(home, settings.get("router_addressbook"));
|
||||
AddressBook master;
|
||||
AddressBook local;
|
||||
if (should_publish) {
|
||||
File masterFile = new File(home, settings.get("master_addressbook"));
|
||||
master = new AddressBook(masterFile);
|
||||
File localFile = new File(home, settings.get("local_addressbook"));
|
||||
local = new AddressBook(localFile);
|
||||
} else {
|
||||
master = null;
|
||||
local = null;
|
||||
}
|
||||
AddressBook router = new AddressBook(routerFile);
|
||||
update(master, router, published, subscriptions, log);
|
||||
update(local, router, published, subscriptions, log);
|
||||
} else {
|
||||
// Naming service - no merging of master to router and published is supported.
|
||||
// Naming service - no merging of local to router and published is supported.
|
||||
update(getNamingService(settings.get("naming_service")), published, subscriptions, log);
|
||||
}
|
||||
}
|
||||
@@ -787,14 +802,15 @@ public class Daemon {
|
||||
* others are ignored.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
if (args != null && args.length > 0 && args[0].equals("test"))
|
||||
_instance.test(args);
|
||||
Daemon daemon = new Daemon();
|
||||
if (args.length > 0 && args[0].equals("test"))
|
||||
daemon.test(args);
|
||||
else
|
||||
_instance.run(args);
|
||||
daemon.run(args);
|
||||
}
|
||||
|
||||
/** @since 0.9.26 */
|
||||
private static void test(String[] args) {
|
||||
public static void test(String[] args) {
|
||||
Properties ctxProps = new Properties();
|
||||
String PROP_FORCE = "i2p.naming.blockfile.writeInAppContext";
|
||||
ctxProps.setProperty(PROP_FORCE, "true");
|
||||
@@ -807,11 +823,14 @@ public class Daemon {
|
||||
ctx.logManager().flush();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param args may be null
|
||||
*/
|
||||
public void run(String[] args) {
|
||||
_running = true;
|
||||
String settingsLocation = "config.txt";
|
||||
File homeFile;
|
||||
if (args.length > 0) {
|
||||
if (args != null && args.length > 0) {
|
||||
homeFile = new SecureDirectory(args[0]);
|
||||
if (!homeFile.isAbsolute())
|
||||
homeFile = new SecureDirectory(I2PAppContext.getGlobalContext().getRouterDir(), args[0]);
|
||||
@@ -822,7 +841,7 @@ public class Daemon {
|
||||
Map<String, String> defaultSettings = new HashMap<String, String>();
|
||||
defaultSettings.put("proxy_host", "127.0.0.1");
|
||||
defaultSettings.put("proxy_port", "4444");
|
||||
defaultSettings.put("master_addressbook", "../userhosts.txt");
|
||||
defaultSettings.put("local_addressbook", "../userhosts.txt");
|
||||
defaultSettings.put("router_addressbook", "../hosts.txt");
|
||||
defaultSettings.put("published_addressbook", "../eepsite/docroot/hosts.txt");
|
||||
defaultSettings.put("should_publish", "false");
|
||||
@@ -837,10 +856,10 @@ public class Daemon {
|
||||
|
||||
if (!homeFile.exists()) {
|
||||
boolean created = homeFile.mkdirs();
|
||||
if (created)
|
||||
System.out.println("INFO: Addressbook directory " + homeFile.getName() + " created");
|
||||
else
|
||||
System.out.println("ERROR: Addressbook directory " + homeFile.getName() + " could not be created");
|
||||
if (!created)
|
||||
System.out.println("ERROR: Addressbook directory " + homeFile.getAbsolutePath() + " could not be created");
|
||||
//else
|
||||
// System.out.println("INFO: Addressbook directory " + homeFile.getAbsolutePath() + " created");
|
||||
}
|
||||
|
||||
File settingsFile = new File(homeFile, settingsLocation);
|
||||
@@ -849,7 +868,7 @@ public class Daemon {
|
||||
// wait
|
||||
try {
|
||||
Thread.sleep(5*60*1000 + I2PAppContext.getGlobalContext().random().nextLong(5*60*1000));
|
||||
// Static method, and redundent Thread.currentThread().sleep(5*60*1000);
|
||||
// Static method, and redundant Thread.currentThread().sleep(5*60*1000);
|
||||
} catch (InterruptedException ie) {}
|
||||
|
||||
while (_running) {
|
||||
@@ -875,14 +894,14 @@ public class Daemon {
|
||||
* Call this to get the addressbook to reread its config and
|
||||
* refetch its subscriptions.
|
||||
*/
|
||||
public static void wakeup() {
|
||||
synchronized (_instance) {
|
||||
_instance.notifyAll();
|
||||
public void wakeup() {
|
||||
synchronized (this) {
|
||||
notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
public static void stop() {
|
||||
_instance._running = false;
|
||||
public void stop() {
|
||||
_running = false;
|
||||
wakeup();
|
||||
}
|
||||
}
|
||||
|
@@ -36,6 +36,7 @@ import net.i2p.util.I2PAppThread;
|
||||
public class DaemonThread extends I2PAppThread implements NamingServiceUpdater {
|
||||
|
||||
private final String[] args;
|
||||
private final Daemon daemon;
|
||||
|
||||
/**
|
||||
* Construct a DaemonThread with the command line arguments args.
|
||||
@@ -44,6 +45,7 @@ public class DaemonThread extends I2PAppThread implements NamingServiceUpdater {
|
||||
*/
|
||||
public DaemonThread(String[] args) {
|
||||
this.args = args;
|
||||
daemon = new Daemon();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -56,18 +58,28 @@ public class DaemonThread extends I2PAppThread implements NamingServiceUpdater {
|
||||
//} catch (InterruptedException exp) {
|
||||
//}
|
||||
I2PAppContext.getGlobalContext().namingService().registerUpdater(this);
|
||||
Daemon.main(this.args);
|
||||
I2PAppContext.getGlobalContext().namingService().unregisterUpdater(this);
|
||||
try {
|
||||
if (args != null && args.length > 0 && args[0].equals("test"))
|
||||
daemon.test(args);
|
||||
else
|
||||
daemon.run(args);
|
||||
} finally {
|
||||
I2PAppContext.getGlobalContext().namingService().unregisterUpdater(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void halt() {
|
||||
Daemon.stop();
|
||||
daemon.stop();
|
||||
interrupt();
|
||||
}
|
||||
|
||||
/**
|
||||
* The NamingServiceUpdater interface
|
||||
* @param options ignored
|
||||
* The NamingServiceUpdater interface.
|
||||
* While this may be called directly, the recommended way
|
||||
* is to call I2PAppContext.namingService().requestUpdate(Properties)
|
||||
* which will call this.
|
||||
*
|
||||
* @param options ignored, may be null
|
||||
* @since 0.8.7
|
||||
*/
|
||||
public void update(Properties options) {
|
||||
|
@@ -110,11 +110,6 @@ class HostTxtIterator implements Iterator<Map.Entry<String, HostTxtEntry>>, Clos
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() {
|
||||
close();
|
||||
}
|
||||
|
||||
/**
|
||||
* The object returned by the iterator.
|
||||
*/
|
||||
|
@@ -236,21 +236,28 @@ class HostTxtParser {
|
||||
}
|
||||
|
||||
/**
|
||||
* Usage: HostTxtParser validate example.i2p=b64dest[#!key1=val1#key2=val2]
|
||||
* Usage: HostTxtParser [-q] validate example.i2p=b64dest[#!key1=val1#key2=val2]
|
||||
*/
|
||||
public static void main(String[] args) throws Exception {
|
||||
boolean quiet = false;
|
||||
if (args.length > 0 && args[0].equals("-q")) {
|
||||
quiet = true;
|
||||
args = java.util.Arrays.copyOfRange(args, 1, args.length);
|
||||
}
|
||||
if (args.length != 2 || !args[0].equals("validate")) {
|
||||
System.err.println("Usage: HostTxtParser validate example.i2p=b64dest[#!key1=val1#key2=val2]");
|
||||
System.exit(1);
|
||||
}
|
||||
HostTxtEntry e = parse(args[1].trim(), false);
|
||||
if (e == null) {
|
||||
System.err.println("Bad format");
|
||||
System.exit(1);
|
||||
if (!quiet)
|
||||
System.err.println("Bad format");
|
||||
System.exit(2);
|
||||
}
|
||||
if (!e.hasValidSig()) {
|
||||
System.err.println("Bad signature");
|
||||
System.exit(1);
|
||||
if (!quiet)
|
||||
System.err.println("Bad signature");
|
||||
System.exit(3);
|
||||
}
|
||||
Properties p = e.getProps();
|
||||
if (p != null) {
|
||||
@@ -259,12 +266,14 @@ class HostTxtParser {
|
||||
p.containsKey(HostTxtEntry.PROP_OLDNAME) ||
|
||||
p.containsKey(HostTxtEntry.PROP_OLDSIG)) {
|
||||
if (!e.hasValidSig()) {
|
||||
System.err.println("Bad inner signature");
|
||||
System.exit(1);
|
||||
if (!quiet)
|
||||
System.err.println("Bad inner signature");
|
||||
System.exit(4);
|
||||
}
|
||||
}
|
||||
}
|
||||
System.err.println("Good signature for " + e.getName());
|
||||
if (!quiet)
|
||||
System.err.println("Good signature for " + e.getName());
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
|
@@ -1,98 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004 Ragnarok
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package net.i2p.addressbook;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Random;
|
||||
|
||||
import javax.servlet.ServletConfig;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* A wrapper for addressbook to allow it to be started as a web application.
|
||||
*
|
||||
* This was a GenericServlet, we make it an HttpServlet solely to provide a hook
|
||||
* for SusiDNS to wake us up when the subscription list changes.
|
||||
*
|
||||
* @author Ragnarok
|
||||
*
|
||||
*/
|
||||
public class Servlet extends HttpServlet {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private transient DaemonThread thread;
|
||||
//private String nonce;
|
||||
//private static final String PROP_NONCE = "addressbook.nonce";
|
||||
|
||||
/**
|
||||
* Hack to allow susidns to kick the daemon when the subscription list changes.
|
||||
* URL must be /addressbook/ with wakeup param set, and nonce param set from system property.
|
||||
*
|
||||
* (non-Javadoc)
|
||||
* see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
|
||||
*/
|
||||
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
//System.err.println("Got request nonce = " + request.getParameter("nonce"));
|
||||
//if (this.thread != null && request.getParameter("wakeup") != null &&
|
||||
// this.nonce != null && this.nonce.equals(request.getParameter("nonce"))) {
|
||||
// //System.err.println("Sending interrupt");
|
||||
// this.thread.interrupt();
|
||||
// // no output
|
||||
//} else {
|
||||
PrintWriter out = response.getWriter();
|
||||
out.write("I2P addressbook OK");
|
||||
//}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
|
||||
*/
|
||||
@Override
|
||||
public void init(ServletConfig config) {
|
||||
try {
|
||||
super.init(config);
|
||||
} catch (ServletException exp) {
|
||||
System.err.println("Addressbook init exception: " + exp);
|
||||
}
|
||||
//this.nonce = "" + Math.abs((new Random()).nextLong());
|
||||
// put the nonce where susidns can get it
|
||||
//System.setProperty(PROP_NONCE, this.nonce);
|
||||
String[] args = new String[1];
|
||||
args[0] = config.getInitParameter("home");
|
||||
this.thread = new DaemonThread(args);
|
||||
this.thread.setDaemon(true);
|
||||
this.thread.setName("Addressbook");
|
||||
this.thread.start();
|
||||
//System.out.println("INFO: Starting Addressbook " + Daemon.VERSION);
|
||||
//System.out.println("INFO: config root under " + args[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
this.thread.halt();
|
||||
super.destroy();
|
||||
}
|
||||
}
|
@@ -5,7 +5,7 @@
|
||||
* It probably won't make your computer catch on fire, or eat
|
||||
* your children, but it might. Use at your own risk.
|
||||
*/
|
||||
package net.i2p.client.naming;
|
||||
package net.i2p.router.naming;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
@@ -15,6 +15,7 @@ import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
@@ -29,6 +30,11 @@ import java.util.StringTokenizer;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.client.naming.DummyNamingService;
|
||||
import net.i2p.client.naming.HostsTxtNamingService;
|
||||
import net.i2p.client.naming.NamingService;
|
||||
import net.i2p.client.naming.NamingServiceListener;
|
||||
import net.i2p.client.naming.SingleFileNamingService;
|
||||
import net.i2p.crypto.SigType;
|
||||
import net.i2p.data.DataFormatException;
|
||||
import net.i2p.data.DataHelper;
|
||||
@@ -94,7 +100,7 @@ import net.metanotion.util.skiplist.SkipList;
|
||||
*
|
||||
* All host names are converted to lower case.
|
||||
*
|
||||
* @since 0.8.7
|
||||
* @since 0.8.7, moved from core to addressbook in 0.9.31
|
||||
*/
|
||||
public class BlockfileNamingService extends DummyNamingService {
|
||||
|
||||
@@ -132,9 +138,11 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
private static final String VERSION = "4";
|
||||
|
||||
private static final String PROP_ADDED = "a";
|
||||
private static final String PROP_MODDED = "m";
|
||||
// See susidns
|
||||
//private static final String PROP_MODDED = "m";
|
||||
private static final String PROP_SOURCE = "s";
|
||||
private static final String PROP_VALIDATED = "v";
|
||||
// See susidns
|
||||
//private static final String PROP_VALIDATED = "v";
|
||||
|
||||
private static final String DUMMY = "";
|
||||
private static final int NEGATIVE_CACHE_SIZE = 32;
|
||||
@@ -243,6 +251,7 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
|
||||
int total = 0;
|
||||
for (String hostsfile : getFilenames(list)) {
|
||||
_lists.add(hostsfile);
|
||||
File file = new File(_context.getRouterDir(), hostsfile);
|
||||
if ((!file.exists()) || !(file.canRead()))
|
||||
continue;
|
||||
@@ -282,7 +291,6 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
}
|
||||
total += count;
|
||||
_log.logAlways(Log.INFO, "Migrating " + count + " hosts from " + file + " to new hosts database");
|
||||
_lists.add(hostsfile);
|
||||
}
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("DB init took " + DataHelper.formatDuration(_context.clock().now() - start));
|
||||
@@ -418,10 +426,10 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
// version 3 -> version 4
|
||||
// support multiple destinations per hostname
|
||||
if (VersionComparator.comp(_version, "4") < 0) {
|
||||
// Upgrade of 4K entry DB on RPi 2 is over 2 1/2 minutes, disable for now
|
||||
if (SystemVersion.isAndroid() || SystemVersion.isARM()) {
|
||||
// Upgrade of 4K entry DB on RPi 2 is over 2 1/2 minutes, probably worse on Android, disable for now
|
||||
if (SystemVersion.isAndroid()) {
|
||||
if (_log.shouldWarn())
|
||||
_log.warn("Deferring upgrade to version 4 on Android/ARM");
|
||||
_log.warn("Deferring upgrade to version 4 on Android");
|
||||
return true;
|
||||
}
|
||||
SkipList<String, Properties> hdr = _bf.getIndex(INFO_SKIPLIST, _stringSerializer, _infoSerializer);
|
||||
@@ -1291,6 +1299,137 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Export in a hosts.txt format.
|
||||
* Output is sorted.
|
||||
* Caller must close writer.
|
||||
*
|
||||
* @param options If non-null and contains the key "list", get
|
||||
* from that list (default "hosts.txt", NOT all lists)
|
||||
* Key "search": return only those matching substring
|
||||
* Key "startsWith": return only those starting with
|
||||
* ("[0-9]" allowed)
|
||||
* Key "beginWith": start here in the iteration
|
||||
* @since 0.9.30 override NamingService to add stored authentication strings
|
||||
*/
|
||||
@Override
|
||||
public void export(Writer out, Properties options) throws IOException {
|
||||
String listname = FALLBACK_LIST;
|
||||
String search = null;
|
||||
String startsWith = null;
|
||||
String beginWith = null;
|
||||
if (options != null) {
|
||||
String ln = options.getProperty("list");
|
||||
if (ln != null)
|
||||
listname = ln;
|
||||
search = options.getProperty("search");
|
||||
startsWith = options.getProperty("startsWith");
|
||||
beginWith = options.getProperty("beginWith");
|
||||
if (beginWith == null && startsWith != null) {
|
||||
if (startsWith.equals("[0-9]"))
|
||||
beginWith = "0";
|
||||
else
|
||||
beginWith = startsWith;
|
||||
}
|
||||
}
|
||||
out.write("# Address book: ");
|
||||
out.write(getName());
|
||||
out.write(" (" + listname + ')');
|
||||
final String nl = System.getProperty("line.separator", "\n");
|
||||
out.write(nl);
|
||||
out.write("# Exported: ");
|
||||
out.write((new Date()).toString());
|
||||
out.write(nl);
|
||||
synchronized(_bf) {
|
||||
if (_isClosed)
|
||||
return;
|
||||
try {
|
||||
SkipList<String, DestEntry> sl = _bf.getIndex(listname, _stringSerializer, _destSerializer);
|
||||
if (sl == null) {
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
_log.warn("No skiplist found for lookup in " + listname);
|
||||
return;
|
||||
}
|
||||
if (beginWith == null && search == null) {
|
||||
int sz = sl.size();
|
||||
if (sz <= 0) {
|
||||
out.write("# No entries");
|
||||
out.write(nl);
|
||||
return;
|
||||
}
|
||||
if (sz > 1) {
|
||||
// actually not right due to multidest
|
||||
out.write("# " + sz + " entries");
|
||||
out.write(nl);
|
||||
}
|
||||
}
|
||||
SkipIterator<String, DestEntry> iter;
|
||||
if (beginWith != null)
|
||||
iter = sl.find(beginWith);
|
||||
else
|
||||
iter = sl.iterator();
|
||||
int cnt = 0;
|
||||
while (iter.hasNext()) {
|
||||
String key = iter.nextKey();
|
||||
if (startsWith != null) {
|
||||
if (startsWith.equals("[0-9]")) {
|
||||
if (key.charAt(0) > '9')
|
||||
break;
|
||||
} else if (!key.startsWith(startsWith)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
DestEntry de = iter.next();
|
||||
if (!validate(key, de, listname))
|
||||
continue;
|
||||
if (search != null && key.indexOf(search) < 0)
|
||||
continue;
|
||||
int dsz = de.destList != null ? de.destList.size() : 1;
|
||||
// new non-DSA dest is put first, so put in reverse
|
||||
// order so importers will see the older dest first
|
||||
for (int i = dsz - 1; i >= 0; i--) {
|
||||
Properties p;
|
||||
Destination d;
|
||||
if (i == 0) {
|
||||
p = de.props;
|
||||
d = de.dest;
|
||||
} else {
|
||||
p = de.propsList.get(i);
|
||||
d = de.destList.get(i);
|
||||
}
|
||||
out.write("# ");
|
||||
out.write(key);
|
||||
out.write(": ");
|
||||
out.write(d.toBase32());
|
||||
out.write(nl);
|
||||
out.write(key);
|
||||
out.write('=');
|
||||
out.write(d.toBase64());
|
||||
if (p != null)
|
||||
SingleFileNamingService.writeOptions(p, out);
|
||||
out.write(nl);
|
||||
cnt++;
|
||||
}
|
||||
}
|
||||
if (beginWith != null || search != null) {
|
||||
if (cnt <= 0) {
|
||||
out.write("# No entries");
|
||||
out.write(nl);
|
||||
return;
|
||||
}
|
||||
if (cnt > 1) {
|
||||
out.write("# " + cnt + " entries");
|
||||
out.write(nl);
|
||||
}
|
||||
}
|
||||
} catch (RuntimeException re) {
|
||||
throw new IOException("DB lookup error", re);
|
||||
} finally {
|
||||
deleteInvalid();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param options If non-null and contains the key "list", get
|
||||
* from that list (default "hosts.txt", NOT all lists)
|
||||
@@ -1578,6 +1717,11 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
}
|
||||
storedOptions.remove(i);
|
||||
removeReverseEntry(hostname, d);
|
||||
if (options != null) {
|
||||
String list = options.getProperty("list");
|
||||
if (list != null)
|
||||
storedOptions.get(0).setProperty("list", list);
|
||||
}
|
||||
return put(hostname, newDests, storedOptions, false);
|
||||
}
|
||||
}
|
||||
@@ -1925,9 +2069,8 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
}
|
||||
if (baos.size() > 65535)
|
||||
throw new DataFormatException("Properties too big (65535 max): " + baos.size());
|
||||
byte propBytes[] = baos.toByteArray();
|
||||
DataHelper.writeLong(rawStream, 2, propBytes.length);
|
||||
rawStream.write(propBytes);
|
||||
DataHelper.writeLong(rawStream, 2, baos.size());
|
||||
baos.writeTo(rawStream);
|
||||
} else {
|
||||
DataHelper.writeLong(rawStream, 2, 0);
|
||||
}
|
@@ -144,14 +144,17 @@ public class BlockFile implements Closeable {
|
||||
return;
|
||||
}
|
||||
boolean init = !(new File(args[0])).exists();
|
||||
RAIFile raif = null;
|
||||
BlockFile bf = null;
|
||||
try {
|
||||
RAIFile raif = new RAIFile(new File(args[0]), true, true);
|
||||
BlockFile bf = new BlockFile(raif, init);
|
||||
raif = new RAIFile(new File(args[0]), true, true);
|
||||
bf = new BlockFile(raif, init);
|
||||
bf.bfck(true);
|
||||
bf.close();
|
||||
raif.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (bf != null) try { bf.close(); } catch (IOException ioe) {}
|
||||
if (raif != null) try { raif.close(); } catch (IOException ioe) {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -337,7 +340,7 @@ public class BlockFile implements Closeable {
|
||||
/**
|
||||
* Go to any page but the superblock.
|
||||
* Page 1 is the superblock, must use file.seek(0) to get there.
|
||||
* @param page >= 2
|
||||
* @param page >= 2
|
||||
*/
|
||||
public static void pageSeek(RandomAccessInterface file, int page) throws IOException {
|
||||
if (page < METAINDEX_PAGE)
|
||||
@@ -587,12 +590,7 @@ public class BlockFile implements Closeable {
|
||||
_isClosed = true;
|
||||
metaIndex.close();
|
||||
|
||||
Set<String> oi = openIndices.keySet();
|
||||
Iterator<String> i = oi.iterator();
|
||||
Object k;
|
||||
while(i.hasNext()) {
|
||||
k = i.next();
|
||||
BSkipList bsl = openIndices.get(k);
|
||||
for (BSkipList bsl : openIndices.values()) {
|
||||
bsl.close();
|
||||
}
|
||||
|
@@ -221,6 +221,7 @@ public class BSkipList<K extends Comparable<? super K>, V> extends SkipList<K, V
|
||||
}
|
||||
****/
|
||||
|
||||
/** find */
|
||||
@Override
|
||||
public SkipIterator<K, V> find(K key) {
|
||||
if (!this.fileOnly)
|
165
apps/addressbook/java/src/net/metanotion/package.html
Normal file
165
apps/addressbook/java/src/net/metanotion/package.html
Normal file
@@ -0,0 +1,165 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<link rel="home" title="Home" href="http://www.metanotion.net/software/sandbox/" />
|
||||
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<meta name="robots" content="all" />
|
||||
|
||||
<title>BlockFile</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
I2P Notes:
|
||||
This is the database used by the BlockfileNamingService class.
|
||||
It is heavily modified from the original 0.1.1 version.
|
||||
Not for direct use by apps, clients, or plugins.
|
||||
This package is not currently intended for general use, as
|
||||
the API may be subject to change.
|
||||
Contact I2P developers if you are considering use in another application.
|
||||
Following is the original documentation copied from metanotion website.
|
||||
</p>
|
||||
<h2>Metanotion BlockFile Database</h2>
|
||||
<p>A 100% Java 1.3, BSD Licensed, embeddable single file database engine in 32KB. This database was designed for PDA based and J2ME applications.</p>
|
||||
|
||||
<h2>Table of Contents</h2>
|
||||
<ul>
|
||||
<li><a href="#features">Features</a></li>
|
||||
<li><a href="#unfeatures">Unfeatures</a></li>
|
||||
<li><a href="#future">Future Plans</a></li>
|
||||
<li><a href="#design">What kind of database is this?</a></li>
|
||||
<li><a href="#examples">Examples and API</a></li>
|
||||
<li><a href="#download">Download</a></li>
|
||||
</ul>
|
||||
|
||||
<h2 id="features">Features</h2>
|
||||
<ul>
|
||||
<li>100% Java 1.3. No JNI.</li>
|
||||
<li>Will work with any "file" as long as you can approximate something like <a href="http://java.sun.com/j2se/1.3/docs/api/java/io/RandomAccessFile.html">java.io.RandomAccessFile</a>, you can use this.</li>
|
||||
<li>BSD Licensed. Yes, this means you can use it for free in a commercial project. However, if you base some really cool mobile technology startup on this code we'll gladly accept stock options...</li>
|
||||
<li>No dependence on file API's(useful for mobile apps)</li>
|
||||
<li>Small. 32KB in a JAR file. <2000 lines of code.</li>
|
||||
<li>Reasonably fast. This is used in an app running on a sub 200MHz StrongARM PocketPC, and quite handily deals with 70,000 records. The load time is a little slow, but its been tested with a <a href="http://java.sun.com/javame/reference/apis.jsp">CDC 1.0/Personal Profile</a> device.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="unfeatures">Unfeatures</h2>
|
||||
<p>A good, ACID database is a nice thing to work with. Unfortunately, in the goal to make this small, fast, and work with minimal dependencies, something had to give. So I list things which this database will likely never have. Of course, since it is BSD Licensed, patches welcome...</p>
|
||||
|
||||
<ul>
|
||||
<li>No transactions.</li>
|
||||
<li>No SQL.</li>
|
||||
<li>No JDBC.</li>
|
||||
<li>No use of reflection or automagical serialization tricks.</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="future">Future Plans</h2>
|
||||
<p>There are still bugs(none known...). The app that this was written for is still in testing, but we should most of the issues sorted by the time we deploy it in a few weeks(early November, 2006). Some loading speed issues on large record sets, and memory usage could still be improved. All this and feedback from other uses will direct this products evolution.</p>
|
||||
<p>What is currently up here is not "1.0" code, but we will release a labeled "1.0" version once we feel happy with the state of the codebase.</p>
|
||||
|
||||
<h2 id="design">What KIND of database is this?</h2>
|
||||
<p>You probably store at least part of your application data in memory in a class from the <a href="http://java.sun.com/j2se/1.4.2/docs/guide/collections/">Java Collections Framework</a>. The BlockFile database stores data in a <a href="http://en.wikipedia.org/wiki/Skip_list">Skip</a> <a href="http://eternallyconfuzzled.com/tuts/skip.html">List</a> that almost implements <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/SortedMap.html">java.util.SortedMap</a>. You can create and store as many named(with a string) SkipList in the database as you want.</p>
|
||||
<p>To serialize your data, you have to either extend our SerialStreams class or implement our Serializer interface. We could have done something cool and fancy with reflection(and other cool stuff with Java 1.5), but that would probably not do the Right Thing™ most of the time. As you can see, there's not a lot to it anyway:</p>
|
||||
<h3>net.metanotion.io.SerialStreams</h3>
|
||||
<pre>
|
||||
public abstract class SerialStreams implements Serializer {
|
||||
// ...
|
||||
abstract public void writeOut(DataOutputStream dos, Object o) throws IOException;
|
||||
abstract public Object readIn(DataInputStream dis) throws IOException;
|
||||
}
|
||||
</pre>
|
||||
<h3>net.metanotion.io.Serializer</h3>
|
||||
<pre>
|
||||
public interface Serializer {
|
||||
public byte[] getBytes(Object o);
|
||||
public Object construct(byte[] b);
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>Now, about those skip lists. They implement a <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/ListIterator.html">java.util.ListIterator</a> so you can get "nearby" values, and you can use anything for a key that implements <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Comparable.html">java.lang.Comparable</a>. So, here's the interface to a SkipList:
|
||||
<pre>
|
||||
public class SkipList {
|
||||
...
|
||||
public void put(Comparable key, Object val) ...
|
||||
public Object remove(Comparable key) ...
|
||||
public Object get(Comparable key) ...
|
||||
public ListIterator iterator() ...
|
||||
public ListIterator min() ...
|
||||
public ListIterator max() ...
|
||||
// Find the first key bigger than or equal to key,
|
||||
// or the biggest key less than key if there is no bigger or equal.
|
||||
public ListIterator find(Comparable key) ...
|
||||
}
|
||||
</pre>
|
||||
|
||||
<h2 id="examples">Examples</h2>
|
||||
<p>Better documentation is forthcoming, but there really isn't much to know. The entire public interface to the library is on this page. Where possible, it sticks to idiomatic Java and standard interfaces.</p>
|
||||
<ul>
|
||||
<li>Open a database:
|
||||
<pre>
|
||||
import net.metanotion.io.block.BlockFile;
|
||||
...
|
||||
try {
|
||||
BlockFile db = new BlockFile(new File("my.db"), false); // true will create
|
||||
} catch (IOException ioe) {
|
||||
System.out.println("Bummer");
|
||||
}
|
||||
</pre>
|
||||
<li>
|
||||
<li>Load or Create a SkipList:
|
||||
<pre>
|
||||
import net.metanotion.util.skiplist.SkipList;
|
||||
import net.metanotion.io.Serializer;
|
||||
...
|
||||
class KeySerializer implements Serializer ...
|
||||
class ValueSerializer implements Serializer ...
|
||||
...
|
||||
// Open preexisting
|
||||
SkipList index = db.getIndex("My Index", new KeySerializer(), new ValueSerializer());
|
||||
// Create
|
||||
SkipList index = db.makeIndex("My Index", new KeySerializer(), new ValueSerializer());
|
||||
</pre>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>net.metanotion.io.block.BlockFile</h3>
|
||||
All the public interface methods:
|
||||
<pre>
|
||||
public class BlockFile implements Closeable {
|
||||
public BlockFile(RandomAccessInterface rai) ...
|
||||
public BlockFile(RandomAccessFile raf) ...
|
||||
public BlockFile(RandomAccessFile raf, boolean init) ...
|
||||
public BlockFile(File f, boolean init) ...
|
||||
public BlockFile(RandomAccessInterface rai, boolean init) ...
|
||||
|
||||
public SkipList getIndex(String name, Serializer key, Serializer val) ...
|
||||
public SkipList makeIndex(String name, Serializer key, Serializer val) ...
|
||||
public void delIndex(String name) ...
|
||||
|
||||
public void close() ...
|
||||
}
|
||||
</pre>
|
||||
|
||||
<h3>What's this "net.metanotion.io.RandomAccessInterface"?</h3>
|
||||
<p>Basically, its an interface version of <a href="http://java.sun.com/j2se/1.3/docs/api/java/io/RandomAccessFile.html">java.io.RandomAccessFile</a>(which itself implements <a href="http://java.sun.com/j2se/1.3/docs/api/java/io/DataInput.html">DataInput</a>, <a href="http://java.sun.com/j2se/1.3/docs/api/java/io/DataOutput.html">DataOutput</a> and a few methods for getting/setting the file pointer).</p>
|
||||
|
||||
<p>So, in other words, if you can provide an implementation of this interface, you can use the BlockFile database. This frees it from dependence on the RandomAccessFile class. If you don't see why this is useful and you're going to be using "files" on PDA's and phone's, well, you'll understand soon enough...</p>
|
||||
|
||||
<h2 id="download">Download</h2>
|
||||
<h3>Bugfix and cleanup Release 10/6/2006</h3>
|
||||
<p>An unnecessary class was removed, some junk methods removed, and a couple of JDK compatability issues were fixed. The StringBytes class was switched to ASCII(from UTF-8) for better compatibility.</p>
|
||||
<ul>
|
||||
<li><a href="http://www.metanotion.net/software/sandbox/BlockFile.2006.10.06.jar">BlockFile binary JAR, version 0.1.1</a></li>
|
||||
<li><a href="http://www.metanotion.net/software/sandbox/BlockFile.src.2006.10.06.zip">BlockFile source code</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>Initial Release 9/28/2006</h3>
|
||||
<ul>
|
||||
<li><a href="http://www.metanotion.net/software/sandbox/BlockFile.2006.09.28.jar">BlockFile binary JAR, version 0.1</a></li>
|
||||
<li><a href="http://www.metanotion.net/software/sandbox/BlockFile.src.2006.09.28.zip">BlockFile source code</a></li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
<p>© 2006 <a href="http://www.metanotion.net/">Metanotion Software</a></p>
|
||||
</body>
|
||||
</html>
|
@@ -1,4 +1,4 @@
|
||||
package net.i2p.client.naming;
|
||||
package net.i2p.router.naming;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
@@ -1,10 +0,0 @@
|
||||
# addressbook master address book. Addresses placed in this file take precidence
|
||||
# over those in the router address book and in remote address books. If changes
|
||||
# are made to this file, they will be reflected in the router address book and
|
||||
# published address book after the next update.
|
||||
#
|
||||
# Do not make changes directly to the router address book, as they could be lost
|
||||
# during an update.
|
||||
#
|
||||
# This file takes addresses in the hosts.txt format, i.e.
|
||||
# example.i2p=somereallylongbase64thingAAAA
|
@@ -1,7 +0,0 @@
|
||||
# Subscription list for addressbook
|
||||
#
|
||||
# Each entry is an absolute url to a file in hosts.txt format.
|
||||
# Since the list is checked in order, url's should be listed in order of trust.
|
||||
#
|
||||
http://dev.i2p/i2p/hosts.txt
|
||||
http://duck.i2p/hosts.txt
|
@@ -1,38 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE web-app
|
||||
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
|
||||
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
|
||||
|
||||
<web-app>
|
||||
<filter>
|
||||
<filter-name>XSSFilter</filter-name>
|
||||
<filter-class>net.i2p.servlet.filters.XSSFilter</filter-class>
|
||||
</filter>
|
||||
<filter-mapping>
|
||||
<filter-name>XSSFilter</filter-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</filter-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>addressbook</servlet-name>
|
||||
<servlet-class>net.i2p.addressbook.Servlet</servlet-class>
|
||||
<init-param>
|
||||
<param-name>home</param-name>
|
||||
<param-value>./addressbook</param-value>
|
||||
</init-param>
|
||||
<load-on-startup>1</load-on-startup>
|
||||
</servlet>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>addressbook</servlet-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- this webapp doesn't actually use sessions or cookies -->
|
||||
<session-config>
|
||||
<session-timeout>30</session-timeout>
|
||||
<cookie-config>
|
||||
<http-only>true</http-only>
|
||||
</cookie-config>
|
||||
</session-config>
|
||||
</web-app>
|
@@ -1,99 +0,0 @@
|
||||
#Last Modified: Sun Dec 06 12:30:32 2015
|
||||
# vim:syntax=apparmor et ts=8 sw=4
|
||||
|
||||
#include <tunables/global>
|
||||
|
||||
$INSTALL_PATH/{i2prouter,runplain.sh} flags=(complain) {
|
||||
#include <abstractions/base>
|
||||
#include <abstractions/fonts>
|
||||
#include <abstractions/nameservice>
|
||||
#include <abstractions/ssl_certs>
|
||||
|
||||
capability sys_ptrace,
|
||||
network inet stream,
|
||||
network inet6 stream,
|
||||
|
||||
$INSTALL_PATH/ r,
|
||||
$INSTALL_PATH/{i2psvc,wrapper} rmix,
|
||||
owner $INSTALL_PATH/** rwkm,
|
||||
|
||||
# Needed for Java
|
||||
owner @{PROC} r,
|
||||
owner @{PROC}/[0-9]*/ r,
|
||||
owner @{PROC}/[0-9]*/status r,
|
||||
owner @{PROC}/[0-9]*/stat r,
|
||||
owner @{PROC}/[0-9]*/cmdline r,
|
||||
@{PROC}/uptime r,
|
||||
@{PROC}/sys/kernel/pid_max r,
|
||||
/sys/devices/system/cpu/ r,
|
||||
/sys/devices/system/cpu/** r,
|
||||
|
||||
/dev/random r,
|
||||
/dev/urandom r,
|
||||
|
||||
@{PROC}/1/comm r,
|
||||
|
||||
/etc/ssl/certs/java/** r,
|
||||
/etc/timezone r,
|
||||
/usr/share/javazi/** r,
|
||||
|
||||
# Debian
|
||||
/etc/java-{6,7,8}-openjdk/** r,
|
||||
/usr/lib/jvm/default-java/jre/bin/java rix,
|
||||
|
||||
# Debian, Ubuntu, openSUSE
|
||||
/usr/lib{,32,64}/jvm/java-*-openjdk-*/jre/bin/java rix,
|
||||
/usr/lib{,32,64}/jvm/java-*-openjdk-*/jre/bin/keytool rix,
|
||||
|
||||
# Raspbian
|
||||
/usr/lib/jvm/jdk-*-oracle-*/jre/bin/java rix,
|
||||
/usr/lib/jvm/jdk-*-oracle-*/jre/bin/keytool rix,
|
||||
|
||||
|
||||
# Fonts are needed for I2P's graphs
|
||||
/usr/share/java/java-atk-wrapper.jar r,
|
||||
|
||||
# Used by some plugins
|
||||
/usr/share/java/eclipse-ecj-*.jar r,
|
||||
|
||||
/{,var/}tmp/ rwm,
|
||||
owner /{,var/}tmp/** rwkm,
|
||||
|
||||
/{,usr/}bin/{,b,d}ash rix,
|
||||
/{,usr/}bin/cat rix,
|
||||
/{,usr/}bin/cut rix,
|
||||
/{,usr/}bin/dirname rix,
|
||||
/{,usr/}bin/expr rix,
|
||||
/{,usr/}bin/{,g,m}awk rix,
|
||||
/{,usr/}bin/grep rix,
|
||||
/{,usr/}bin/id rix,
|
||||
/{,usr/}bin/ldd rix,
|
||||
/{,usr/}bin/ls rix,
|
||||
/{,usr/}bin/mkdir rix,
|
||||
/{,usr/}bin/nohup rix,
|
||||
/{,usr/}bin/ps rix,
|
||||
/{,usr/}bin/rm rix,
|
||||
/{,usr/}bin/sed rix,
|
||||
/{,usr/}bin/sleep rix,
|
||||
/{,usr/}bin/tail rix,
|
||||
/{,usr/}bin/tr rix,
|
||||
/{,usr/}bin/uname rix,
|
||||
/{,usr/}bin/which rix,
|
||||
|
||||
@{HOME}/.java/fonts/** r,
|
||||
owner @{HOME}/.i2p/ rw,
|
||||
owner @{HOME}/.i2p/** rwk,
|
||||
|
||||
# Prevent spamming the logs
|
||||
deny owner @{HOME}/.java/ wk,
|
||||
deny @{HOME}/.fontconfig/ wk,
|
||||
deny @{HOME}/.java/fonts/** w,
|
||||
deny /dev/tty rw,
|
||||
deny /dev/pts/[0-9]* rw,
|
||||
deny @{PROC}/[0-9]*/fd/ r,
|
||||
deny /usr/local/share/fonts/ r,
|
||||
deny /var/cache/fontconfig/ wk,
|
||||
# Used by some versions of the Tanuki wrapper but never used by I2P
|
||||
deny /usr/share/java/hamcrest*.jar r,
|
||||
deny /usr/share/java/junit*.jar r,
|
||||
}
|
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_router"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_sdk"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/installer"/>
|
||||
<classpathentry kind="output" path="build"/>
|
||||
</classpath>
|
@@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>desktopgui</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
26
apps/desktopgui/build.gradle
Normal file
26
apps/desktopgui/build.gradle
Normal file
@@ -0,0 +1,26 @@
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'src'
|
||||
srcDir 'build/messages-src'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(':core')
|
||||
compile project(':router')
|
||||
compile project(':installer')
|
||||
compile project(':apps:systray')
|
||||
}
|
||||
|
||||
// Create the java files from the po files. The jar task will compile them.
|
||||
// This requires gettext 0.19 or higher.
|
||||
// We don't support the "slow way"
|
||||
task bundle {
|
||||
doLast {
|
||||
if (!(new File("$buildDir/classes/java/main/net/i2p/desktopgui/messages_de.class")).exists())
|
||||
println "apps/desktopgui/bundle-messages.sh".execute().text
|
||||
}
|
||||
}
|
||||
jar.dependsOn bundle
|
@@ -7,7 +7,8 @@
|
||||
<property name="jar" value="desktopgui.jar"/>
|
||||
<property name="javadoc" value="javadoc"/>
|
||||
<property name="javac.compilerargs" value=""/>
|
||||
<property name="javac.version" value="1.7" />
|
||||
<property name="javac.version" value="1.8" />
|
||||
<property name="javac.release" value="8" />
|
||||
<property name="require.gettext" value="true" />
|
||||
|
||||
<condition property="no.bundle">
|
||||
@@ -27,13 +28,16 @@
|
||||
|
||||
<target name="compile" depends="init">
|
||||
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
||||
release="${javac.release}"
|
||||
includeAntRuntime="false"
|
||||
encoding="UTF-8"
|
||||
srcdir="${src}" destdir="${build}">
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
<classpath>
|
||||
<pathelement location="../../core/java/build/i2p.jar" />
|
||||
<pathelement location="../../installer/lib/wrapper/all/wrapper.jar" />
|
||||
<pathelement location="../../router/java/build/router.jar" />
|
||||
<pathelement location="../systray/java/build/systray.jar" />
|
||||
</classpath>
|
||||
</javac>
|
||||
</target>
|
||||
@@ -50,7 +54,9 @@
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<javac source="${javac.version}" target="${javac.version}"
|
||||
release="${javac.release}"
|
||||
includeAntRuntime="false"
|
||||
encoding="UTF-8"
|
||||
srcdir="${build}/messages-src" destdir="${build}">
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
</javac>
|
||||
@@ -74,12 +80,14 @@
|
||||
<!-- set if unset -->
|
||||
<property name="workspace.changes.tr" value="" />
|
||||
<!-- ideal for linux: 24x24, but transparency doesn't work -->
|
||||
<copy tofile="${build}/desktopgui/resources/images/logo.png" file="../../installer/resources/themes/console/images/itoopie_xsm.png" />
|
||||
<copy tofile="${build}/desktopgui/resources/images/logo.png" file="../../apps/routerconsole/jsp/themes/console/images/itoopie_xsm.png" />
|
||||
<copy todir="${build}/desktopgui/resources/images" file="images/itoopie_black_24.png" />
|
||||
<copy todir="${build}/desktopgui/resources/images" file="images/itoopie_white_24.png" />
|
||||
<jar basedir="${build}" excludes="messages-src/**" destfile="${dist}/${jar}">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="net.i2p.desktopgui.Main"/>
|
||||
<attribute name="Implementation-Version" value="${full.version}" />
|
||||
<attribute name="Built-By" value="${build.built-by}" />
|
||||
<attribute name="Build-Date" value="${build.timestamp}" />
|
||||
<attribute name="Base-Revision" value="${workspace.version}" />
|
||||
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
|
||||
@@ -120,15 +128,20 @@
|
||||
</target>
|
||||
|
||||
<target name="poupdate">
|
||||
<!-- set if unset -->
|
||||
<property name="lg2" value="" />
|
||||
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="true" >
|
||||
<env key="LG2" value="${lg2}" />
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="true" >
|
||||
<env key="LG2" value="${lg2}" />
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="true" failonerror="true" >
|
||||
<env key="LG2" value="${lg2}" />
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
|
7
apps/desktopgui/bundle-messages.sh
Normal file → Executable file
7
apps/desktopgui/bundle-messages.sh
Normal file → Executable file
@@ -11,6 +11,7 @@
|
||||
# zzz - public domain
|
||||
# Mathiasdm - modifications for desktopgui
|
||||
#
|
||||
cd `dirname $0`
|
||||
CLASS=net.i2p.desktopgui.messages
|
||||
TMPFILE=build/javafiles.txt
|
||||
export TZ=UTC
|
||||
@@ -105,12 +106,12 @@ do
|
||||
# only generate for non-source language
|
||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||
|
||||
msgfmt -V | grep -q '0\.19'
|
||||
msgfmt -V | grep -q -E ' 0\.((19)|[2-9])'
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
# slow way
|
||||
# convert to class files in build
|
||||
msgfmt --java --statistics -r $CLASS -l $LG -d build $i
|
||||
msgfmt --java2 --statistics -r $CLASS -l $LG -d build $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "ERROR - msgfmt failed on ${i}, not updating translations"
|
||||
@@ -128,7 +129,7 @@ do
|
||||
TDY=$TD2/net/i2p/desktopgui
|
||||
rm -rf $TD
|
||||
mkdir -p $TD $TDY
|
||||
msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
|
||||
msgfmt --java2 --statistics --source -r $CLASS -l $LG -d $TD $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "ERROR - msgfmt failed on ${i}, not updating translations"
|
||||
|
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="core" />
|
||||
<orderEntry type="module" module-name="router" />
|
||||
</component>
|
||||
</module>
|
@@ -4,6 +4,7 @@
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
# Translators:
|
||||
# Ali <aboshanab_@hotmail.com>, 2018
|
||||
# ducki2p <ducki2p@gmail.com>, 2011
|
||||
# foo <foo@bar>, 2009
|
||||
msgid ""
|
||||
@@ -11,8 +12,8 @@ msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||
"Last-Translator: zzzi2p\n"
|
||||
"PO-Revision-Date: 2018-05-14 15:25+0000\n"
|
||||
"Last-Translator: Ali <aboshanab_@hotmail.com>\n"
|
||||
"Language-Team: Arabic (http://www.transifex.com/otf/I2P/language/ar/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -43,12 +44,12 @@ msgstr " تشغيل متصفح I2P"
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||
msgid "Configure I2P System Tray"
|
||||
msgstr ""
|
||||
msgstr "تكوين أيقونة I2P المصغرة "
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
msgstr "ألغي"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||
@@ -63,33 +64,33 @@ msgstr "توقيف I2P"
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||
msgid "Restart I2P Immediately"
|
||||
msgstr ""
|
||||
msgstr "إعادة تشغيل I2P على الفور"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||
msgid "Stop I2P Immediately"
|
||||
msgstr ""
|
||||
msgstr "إيقاف تشغيل I2P على الفور"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||
msgid "Cancel I2P Shutdown"
|
||||
msgstr ""
|
||||
msgstr "إلغاء إيقاف تشغيل I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||
#, java-format
|
||||
msgid "Shutdown in {0}"
|
||||
msgstr ""
|
||||
msgstr "توقف في مدة {0}"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||
msgid "Shutdown imminent"
|
||||
msgstr ""
|
||||
msgstr "إغلاق وشيك"
|
||||
|
||||
#. status translations are in the console bundle
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||
msgid "Network"
|
||||
msgstr ""
|
||||
msgstr "الشبكة"
|
||||
|
||||
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||
msgid "I2P: Right-click for menu"
|
||||
msgstr ""
|
||||
msgstr "I2P: أنقر بالزر الأيمن للقائمة"
|
||||
|
94
apps/desktopgui/locale/messages_az.po
Normal file
94
apps/desktopgui/locale/messages_az.po
Normal file
@@ -0,0 +1,94 @@
|
||||
# I2P
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the desktopgui package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
# Translators:
|
||||
# Nikafn <appone6@gmail.com>, 2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2018-02-25 16:35+0000\n"
|
||||
"Last-Translator: Nikafn <appone6@gmail.com>\n"
|
||||
"Language-Team: Azerbaijani (http://www.transifex.com/otf/I2P/language/az/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: az\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||
msgid "Start I2P"
|
||||
msgstr "I2P Başla"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||
msgid "I2P is starting!"
|
||||
msgstr "I2P başlayır!"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||
msgid "Starting"
|
||||
msgstr "Başlanğıc"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||
msgid "Launch I2P Browser"
|
||||
msgstr "I2P Brauzerini başla"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||
msgid "Configure I2P System Tray"
|
||||
msgstr "I2P Sistem Zolağını quraşdır"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||
msgid "Disable"
|
||||
msgstr "Söndür"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||
msgid "Restart I2P"
|
||||
msgstr "I2P yenidən başlat"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||
msgid "Stop I2P"
|
||||
msgstr "I2P-ni durdur"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||
msgid "Restart I2P Immediately"
|
||||
msgstr " I2P-ni dərhal yenidən başlat"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||
msgid "Stop I2P Immediately"
|
||||
msgstr "I2P-ni dərhal durdur"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||
msgid "Cancel I2P Shutdown"
|
||||
msgstr "I2P-ni söndürməyi ləğv et"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||
#, java-format
|
||||
msgid "Shutdown in {0}"
|
||||
msgstr "{0}-da sönmə"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||
msgid "Shutdown imminent"
|
||||
msgstr "Sönmə yaxınlaşır"
|
||||
|
||||
#. status translations are in the console bundle
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||
msgid "Network"
|
||||
msgstr "Şəbəkə"
|
||||
|
||||
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||
msgid "I2P: Right-click for menu"
|
||||
msgstr "I2P: Menyu üçün sağ düyməni klikləyin"
|
@@ -5,13 +5,14 @@
|
||||
#
|
||||
# Translators:
|
||||
# Gabriel Radev <gabosss@gmail.com>, 2015
|
||||
# Vitaly Zdorovenko <stenliterziev@gmail.com>, 2017
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||
"Last-Translator: zzzi2p\n"
|
||||
"PO-Revision-Date: 2017-09-20 20:31+0000\n"
|
||||
"Last-Translator: Vitaly Zdorovenko <stenliterziev@gmail.com>\n"
|
||||
"Language-Team: Bulgarian (http://www.transifex.com/otf/I2P/language/bg/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -47,7 +48,7 @@ msgstr ""
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
msgstr "Деактивиране"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||
@@ -62,7 +63,7 @@ msgstr "Спиране на I2P"
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||
msgid "Restart I2P Immediately"
|
||||
msgstr ""
|
||||
msgstr "Рестартирайте Незабавно"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||
@@ -77,7 +78,7 @@ msgstr ""
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||
#, java-format
|
||||
msgid "Shutdown in {0}"
|
||||
msgstr ""
|
||||
msgstr "Изключване в {0}"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||
msgid "Shutdown imminent"
|
||||
|
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
|
||||
"Last-Translator: zzzi2p\n"
|
||||
"Language-Team: Catalan (http://www.transifex.com/otf/I2P/language/ca/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -85,7 +85,7 @@ msgstr ""
|
||||
#. status translations are in the console bundle
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||
msgid "Network"
|
||||
msgstr ""
|
||||
msgstr "Xarxa"
|
||||
|
||||
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||
|
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
|
||||
"Last-Translator: zzzi2p\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/otf/I2P/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -85,7 +85,7 @@ msgstr ""
|
||||
#. status translations are in the console bundle
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||
msgid "Network"
|
||||
msgstr ""
|
||||
msgstr "Síť"
|
||||
|
||||
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||
|
@@ -11,7 +11,7 @@ msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
|
||||
"Last-Translator: zzzi2p\n"
|
||||
"Language-Team: Danish (http://www.transifex.com/otf/I2P/language/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -48,7 +48,7 @@ msgstr ""
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
msgstr "Deaktivere"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||
@@ -78,16 +78,16 @@ msgstr ""
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||
#, java-format
|
||||
msgid "Shutdown in {0}"
|
||||
msgstr ""
|
||||
msgstr "Lukker ned om {0}"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||
msgid "Shutdown imminent"
|
||||
msgstr ""
|
||||
msgstr "Lukker ned om et øjeblik"
|
||||
|
||||
#. status translations are in the console bundle
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||
msgid "Network"
|
||||
msgstr ""
|
||||
msgstr "Netværk"
|
||||
|
||||
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||
|
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-06-08 09:04+0000\n"
|
||||
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
|
||||
"Last-Translator: Lars Schimmer <echelon@i2pmail.org>\n"
|
||||
"Language-Team: German (http://www.transifex.com/otf/I2P/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user