zold 0.14.17 → 0.14.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +1 -1
- data/bin/zold +6 -1
- data/fixtures/scripts/_head.sh +33 -13
- data/fixtures/scripts/calculate-scores.sh +1 -1
- data/fixtures/scripts/distribute-wallet.sh +2 -2
- data/fixtures/scripts/push-and-pull.sh +2 -2
- data/fixtures/scripts/redeploy-on-upgrade.sh +3 -3
- data/fixtures/scripts/sigdump.sh +1 -1
- data/fixtures/scripts/spread-wallets.sh +2 -2
- data/lib/zold/commands/next.rb +57 -0
- data/lib/zold/commands/node.rb +23 -8
- data/lib/zold/commands/remote.rb +7 -4
- data/lib/zold/metronome.rb +0 -1
- data/lib/zold/node/farm.rb +3 -2
- data/lib/zold/node/front.rb +11 -0
- data/lib/zold/node/spread_entrance.rb +0 -1
- data/lib/zold/remotes.rb +68 -75
- data/lib/zold/type.rb +5 -4
- data/lib/zold/version.rb +1 -1
- data/test/commands/routines/test_reconnect.rb +2 -2
- data/test/commands/test_create.rb +1 -1
- data/test/commands/test_invoice.rb +1 -1
- data/test/commands/test_list.rb +1 -1
- data/test/commands/test_merge.rb +1 -1
- data/test/commands/test_pull.rb +49 -0
- data/test/commands/test_remote.rb +11 -12
- data/test/commands/test_show.rb +1 -1
- data/test/fake_home.rb +26 -4
- data/test/node/fake_node.rb +1 -0
- data/test/node/test_farm.rb +10 -10
- data/test/test_atomic_file.rb +2 -2
- data/test/test_copies.rb +8 -8
- data/test/test_key.rb +1 -1
- data/test/test_remotes.rb +60 -21
- data/test/test_zold.rb +3 -2
- metadata +5 -4
- data/.zoldata/remotes +0 -1
- data/farm +0 -1
data/test/node/fake_node.rb
CHANGED
data/test/node/test_farm.rb
CHANGED
@@ -38,7 +38,7 @@ class FarmTest < Minitest::Test
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def test_renders_in_json
|
41
|
-
Dir.mktmpdir
|
41
|
+
Dir.mktmpdir do |dir|
|
42
42
|
farm = Zold::Farm.new('NOPREFIX@ffffffffffffffff', File.join(dir, 'f'), log: test_log)
|
43
43
|
farm.start('localhost', 80, threads: 4, strength: 2) do
|
44
44
|
sleep 0.1 while farm.best.empty? || farm.best[0].value.zero?
|
@@ -50,7 +50,7 @@ class FarmTest < Minitest::Test
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def test_renders_in_text
|
53
|
-
Dir.mktmpdir
|
53
|
+
Dir.mktmpdir do |dir|
|
54
54
|
farm = Zold::Farm.new('NOPREFIX@ffffffffffffffff', File.join(dir, 'f'), log: test_log)
|
55
55
|
farm.start('localhost', 80, threads: 2, strength: 1) do
|
56
56
|
assert(!farm.to_text.nil?)
|
@@ -59,19 +59,19 @@ class FarmTest < Minitest::Test
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def test_makes_best_score_in_background
|
62
|
-
Dir.mktmpdir
|
62
|
+
Dir.mktmpdir do |dir|
|
63
63
|
farm = Zold::Farm.new('NOPREFIX@ffffffffffffffff', File.join(dir, 'f'), log: test_log)
|
64
|
-
farm.start('localhost', 80, threads: 4, strength:
|
65
|
-
sleep 0.1 while farm.best.empty? || farm.best[0].value
|
64
|
+
farm.start('localhost', 80, threads: 4, strength: 3) do
|
65
|
+
sleep 0.1 while farm.best.empty? || farm.best[0].value < 3
|
66
66
|
score = farm.best[0]
|
67
67
|
assert(!score.expired?)
|
68
|
-
assert(score.value
|
68
|
+
assert(score.value >= 3)
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
73
|
def test_correct_score_from_empty_farm
|
74
|
-
Dir.mktmpdir
|
74
|
+
Dir.mktmpdir do |dir|
|
75
75
|
farm = Zold::Farm.new('NOPREFIX@cccccccccccccccc', File.join(dir, 'f'), log: test_log)
|
76
76
|
farm.start('example.com', 8080, threads: 0, strength: 1) do
|
77
77
|
score = farm.best[0]
|
@@ -84,7 +84,7 @@ class FarmTest < Minitest::Test
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def test_pre_loads_history
|
87
|
-
Dir.mktmpdir
|
87
|
+
Dir.mktmpdir do |dir|
|
88
88
|
cache = File.join(dir, 'cache')
|
89
89
|
farm = Zold::Farm.new('NOPREFIX@cccccccccccccccc', cache, log: test_log)
|
90
90
|
farm.start('example.com', 8080, threads: 0, strength: 1) do
|
@@ -98,7 +98,7 @@ class FarmTest < Minitest::Test
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def test_drops_expired_scores_from_history
|
101
|
-
Dir.mktmpdir
|
101
|
+
Dir.mktmpdir do |dir|
|
102
102
|
cache = File.join(dir, 'cache')
|
103
103
|
score = Zold::Score.new(
|
104
104
|
time: Time.parse('2017-07-19T21:24:51Z'),
|
@@ -121,7 +121,7 @@ class FarmTest < Minitest::Test
|
|
121
121
|
|
122
122
|
def test_garbage_farm_file
|
123
123
|
log = SaveLastMessageLogger.new
|
124
|
-
Dir.mktmpdir
|
124
|
+
Dir.mktmpdir do |dir|
|
125
125
|
file = File.join(dir, 'corrupted_farm')
|
126
126
|
[
|
127
127
|
'0/6: 2018-06-26ABCT00:32:43Z 178.128.165.12 4096 MIRhypo1@c13620484b46caa4',
|
data/test/test_atomic_file.rb
CHANGED
@@ -35,7 +35,7 @@ require_relative '../lib/zold/verbose_thread'
|
|
35
35
|
# License:: MIT
|
36
36
|
class TestAtomicFile < Minitest::Test
|
37
37
|
def test_writes_and_reads
|
38
|
-
Dir.mktmpdir
|
38
|
+
Dir.mktmpdir do |dir|
|
39
39
|
file = Zold::AtomicFile.new(File.join(dir, 'test.txt'))
|
40
40
|
['', 'hello, dude!'].each do |t|
|
41
41
|
file.write(t)
|
@@ -45,7 +45,7 @@ class TestAtomicFile < Minitest::Test
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def test_writes_from_many_threads
|
48
|
-
Dir.mktmpdir
|
48
|
+
Dir.mktmpdir do |dir|
|
49
49
|
file = Zold::AtomicFile.new(File.join(dir, 'a.txt'))
|
50
50
|
threads = 10
|
51
51
|
pool = Concurrent::FixedThreadPool.new(threads)
|
data/test/test_copies.rb
CHANGED
@@ -35,7 +35,7 @@ require_relative '../lib/zold/wallet'
|
|
35
35
|
# License:: MIT
|
36
36
|
class TestCopies < Minitest::Test
|
37
37
|
def test_adds_and_removes_copies
|
38
|
-
Dir.mktmpdir
|
38
|
+
Dir.mktmpdir do |dir|
|
39
39
|
copies = Zold::Copies.new(File.join(dir, 'my/a/copies'), log: test_log)
|
40
40
|
copies.add(content('alpha'), '192.168.0.1', 80, 1)
|
41
41
|
copies.add(content('beta'), '192.168.0.2', 80, 3)
|
@@ -50,14 +50,14 @@ class TestCopies < Minitest::Test
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def test_lists_empty_dir
|
53
|
-
Dir.mktmpdir
|
53
|
+
Dir.mktmpdir do |dir|
|
54
54
|
copies = Zold::Copies.new(File.join(dir, 'xxx'), log: test_log)
|
55
55
|
assert(copies.all.empty?, "#{copies.all.count} is not zero")
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
59
|
def test_overwrites_host
|
60
|
-
Dir.mktmpdir
|
60
|
+
Dir.mktmpdir do |dir|
|
61
61
|
copies = Zold::Copies.new(File.join(dir, 'my/a/copies-2'), log: test_log)
|
62
62
|
host = 'b1.zold.io'
|
63
63
|
copies.add(content('z1'), host, 80, 5)
|
@@ -69,7 +69,7 @@ class TestCopies < Minitest::Test
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def test_cleans_copies
|
72
|
-
Dir.mktmpdir
|
72
|
+
Dir.mktmpdir do |dir|
|
73
73
|
copies = Zold::Copies.new(dir, log: test_log)
|
74
74
|
copies.add(content('h1'), 'zold.io', 4096, 10, Time.now - 25 * 60 * 60)
|
75
75
|
copies.add(content('h1'), 'zold.io', 4097, 20, Time.now - 26 * 60 * 60)
|
@@ -81,7 +81,7 @@ class TestCopies < Minitest::Test
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def test_cleans_broken_copies
|
84
|
-
Dir.mktmpdir
|
84
|
+
Dir.mktmpdir do |dir|
|
85
85
|
copies = Zold::Copies.new(dir, log: test_log)
|
86
86
|
copies.add('broken wallet content', 'zold.io', 4096, 10, Time.now)
|
87
87
|
copies.clean
|
@@ -90,7 +90,7 @@ class TestCopies < Minitest::Test
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def test_ignores_garbage
|
93
|
-
Dir.mktmpdir
|
93
|
+
Dir.mktmpdir do |dir|
|
94
94
|
copies = Zold::Copies.new(dir, log: test_log)
|
95
95
|
copies.add(content('h1'), 'zold.io', 50, 80, Time.now - 25 * 60 * 60)
|
96
96
|
FileUtils.mkdir(File.join(dir, '55'))
|
@@ -99,7 +99,7 @@ class TestCopies < Minitest::Test
|
|
99
99
|
end
|
100
100
|
|
101
101
|
def test_sorts_them_by_score
|
102
|
-
Dir.mktmpdir
|
102
|
+
Dir.mktmpdir do |dir|
|
103
103
|
copies = Zold::Copies.new(dir, log: test_log)
|
104
104
|
copies.add(content('content-1'), '1.zold.io', 80, 1)
|
105
105
|
copies.add(content('content-2'), '2.zold.io', 80, 2)
|
@@ -110,7 +110,7 @@ class TestCopies < Minitest::Test
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def test_ignores_too_old_scores
|
113
|
-
Dir.mktmpdir
|
113
|
+
Dir.mktmpdir do |dir|
|
114
114
|
copies = Zold::Copies.new(dir, log: test_log)
|
115
115
|
copies.add(content('h1'), 'zold.io', 50, 80, Time.now - 1000 * 60 * 60)
|
116
116
|
assert_equal(0, copies.all[0][:score])
|
data/test/test_key.rb
CHANGED
data/test/test_remotes.rb
CHANGED
@@ -44,17 +44,17 @@ class TestRemotes < Minitest::Test
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def test_adds_remotes
|
47
|
-
Dir.mktmpdir
|
47
|
+
Dir.mktmpdir do |dir|
|
48
48
|
file = File.join(dir, 'remotes')
|
49
49
|
FileUtils.touch(file)
|
50
|
-
remotes = Zold::Remotes.new(file)
|
50
|
+
remotes = Zold::Remotes.new(file: file)
|
51
51
|
remotes.add('127.0.0.1')
|
52
52
|
assert(1, remotes.all.count)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
56
|
def test_reads_broken_file
|
57
|
-
Dir.mktmpdir
|
57
|
+
Dir.mktmpdir do |dir|
|
58
58
|
file = File.join(dir, 'remotes')
|
59
59
|
[
|
60
60
|
',0,0,0',
|
@@ -63,17 +63,17 @@ class TestRemotes < Minitest::Test
|
|
63
63
|
"\n\n\n\n"
|
64
64
|
].each do |t|
|
65
65
|
File.write(file, t)
|
66
|
-
remotes = Zold::Remotes.new(file)
|
66
|
+
remotes = Zold::Remotes.new(file: file)
|
67
67
|
assert(remotes.all.empty?, remotes.all)
|
68
68
|
end
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
72
|
def test_iterates_and_fails
|
73
|
-
Dir.mktmpdir
|
73
|
+
Dir.mktmpdir do |dir|
|
74
74
|
file = File.join(dir, 'remotes')
|
75
75
|
FileUtils.touch(file)
|
76
|
-
remotes = Zold::Remotes.new(file)
|
76
|
+
remotes = Zold::Remotes.new(file: file)
|
77
77
|
ips = (0..50)
|
78
78
|
ips.each { |i| remotes.add("0.0.0.#{i}", 9999) }
|
79
79
|
remotes.iterate(Zold::Log::Quiet.new) { raise 'Intended' }
|
@@ -81,11 +81,22 @@ class TestRemotes < Minitest::Test
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
+
def test_iterates_them_all
|
85
|
+
Dir.mktmpdir do |dir|
|
86
|
+
remotes = Zold::Remotes.new(file: File.join(dir, 'rrr.csv'))
|
87
|
+
remotes.clean
|
88
|
+
5.times { |i| remotes.add("0.0.0.#{i}", 8080) }
|
89
|
+
total = 0
|
90
|
+
remotes.iterate(test_log) { total += 1 }
|
91
|
+
assert_equal(5, total)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
84
95
|
def test_log_msg_of_iterates_when_fail
|
85
|
-
Dir.mktmpdir
|
96
|
+
Dir.mktmpdir do |dir|
|
86
97
|
file = File.join(dir, 'remotes')
|
87
98
|
FileUtils.touch(file)
|
88
|
-
remotes = Zold::Remotes.new(file)
|
99
|
+
remotes = Zold::Remotes.new(file: file)
|
89
100
|
remotes.add('0.0.0.1', 9999)
|
90
101
|
log = TestLogger.new
|
91
102
|
remotes.iterate(log) { raise 'Intended' }
|
@@ -94,22 +105,22 @@ class TestRemotes < Minitest::Test
|
|
94
105
|
end
|
95
106
|
|
96
107
|
def test_log_msg_of_iterates_when_take_too_long
|
97
|
-
Dir.mktmpdir
|
108
|
+
Dir.mktmpdir do |dir|
|
98
109
|
file = File.join(dir, 'remotes')
|
99
110
|
FileUtils.touch(file)
|
100
|
-
remotes = Zold::Remotes.new(file)
|
111
|
+
remotes = Zold::Remotes.new(file: file, timeout: 1)
|
101
112
|
remotes.add('127.0.0.1')
|
102
113
|
log = TestLogger.new
|
103
|
-
remotes.iterate(log) { sleep(
|
114
|
+
remotes.iterate(log) { sleep(2) }
|
104
115
|
assert(log.msg.include?('Took too long to execute'))
|
105
116
|
end
|
106
117
|
end
|
107
118
|
|
108
119
|
def test_removes_remotes
|
109
|
-
Dir.mktmpdir
|
120
|
+
Dir.mktmpdir do |dir|
|
110
121
|
file = File.join(dir, 'remotes')
|
111
122
|
FileUtils.touch(file)
|
112
|
-
remotes = Zold::Remotes.new(file)
|
123
|
+
remotes = Zold::Remotes.new(file: file)
|
113
124
|
remotes.add('127.0.0.1')
|
114
125
|
remotes.add('LOCALHOST', 433)
|
115
126
|
remotes.remove('localhost', 433)
|
@@ -118,8 +129,8 @@ class TestRemotes < Minitest::Test
|
|
118
129
|
end
|
119
130
|
|
120
131
|
def test_resets_remotes
|
121
|
-
Dir.mktmpdir
|
122
|
-
remotes = Zold::Remotes.new(File.join(dir, 'remotes'))
|
132
|
+
Dir.mktmpdir do |dir|
|
133
|
+
remotes = Zold::Remotes.new(file: File.join(dir, 'remotes'))
|
123
134
|
remotes.clean
|
124
135
|
remotes.reset
|
125
136
|
remotes.reset
|
@@ -128,10 +139,10 @@ class TestRemotes < Minitest::Test
|
|
128
139
|
end
|
129
140
|
|
130
141
|
def test_modifies_score
|
131
|
-
Dir.mktmpdir
|
142
|
+
Dir.mktmpdir do |dir|
|
132
143
|
file = File.join(dir, 'remotes')
|
133
144
|
FileUtils.touch(file)
|
134
|
-
remotes = Zold::Remotes.new(file)
|
145
|
+
remotes = Zold::Remotes.new(file: file)
|
135
146
|
remotes.add('127.0.0.1', 1024)
|
136
147
|
remotes.rescore('127.0.0.1', 1024, 15)
|
137
148
|
remotes.all.each do |r|
|
@@ -142,17 +153,17 @@ class TestRemotes < Minitest::Test
|
|
142
153
|
end
|
143
154
|
|
144
155
|
def test_tolerates_invalid_requests
|
145
|
-
Dir.mktmpdir
|
156
|
+
Dir.mktmpdir do |dir|
|
146
157
|
file = File.join(dir, 'remotes')
|
147
|
-
remotes = Zold::Remotes.new(file)
|
158
|
+
remotes = Zold::Remotes.new(file: file)
|
148
159
|
remotes.error('127.0.0.1', 1024)
|
149
160
|
remotes.rescore('127.0.0.1', 1024, 15)
|
150
161
|
end
|
151
162
|
end
|
152
163
|
|
153
164
|
def test_modifies_from_many_threads
|
154
|
-
Dir.mktmpdir
|
155
|
-
remotes = Zold::Remotes.new(File.join(dir, 'a.csv'))
|
165
|
+
Dir.mktmpdir do |dir|
|
166
|
+
remotes = Zold::Remotes.new(file: File.join(dir, 'a.csv'))
|
156
167
|
remotes.clean
|
157
168
|
threads = 5
|
158
169
|
pool = Concurrent::FixedThreadPool.new(threads)
|
@@ -180,4 +191,32 @@ class TestRemotes < Minitest::Test
|
|
180
191
|
assert_equal(0, remotes.all.reject { |r| r[:host] == host }.size)
|
181
192
|
end
|
182
193
|
end
|
194
|
+
|
195
|
+
def test_adds_from_many_threads
|
196
|
+
Dir.mktmpdir do |dir|
|
197
|
+
remotes = Zold::Remotes.new(file: File.join(dir, 'xx.csv'))
|
198
|
+
remotes.clean
|
199
|
+
threads = 5
|
200
|
+
pool = Concurrent::FixedThreadPool.new(threads)
|
201
|
+
done = Concurrent::AtomicFixnum.new
|
202
|
+
latch = Concurrent::CountDownLatch.new(1)
|
203
|
+
threads.times do |i|
|
204
|
+
pool.post do
|
205
|
+
Zold::VerboseThread.new(test_log).run(true) do
|
206
|
+
latch.wait(10)
|
207
|
+
remotes.add('127.0.0.1', 8080 + i)
|
208
|
+
done.increment
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
212
|
+
latch.count_down
|
213
|
+
sleep 0.1 until done.value == threads
|
214
|
+
assert_equal(threads, remotes.all.count)
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
def test_empty_remotes
|
219
|
+
remotes = Zold::Remotes::Empty.new(file: '/tmp/empty')
|
220
|
+
assert(remotes.is_a?(Zold::Remotes))
|
221
|
+
end
|
183
222
|
end
|
data/test/test_zold.rb
CHANGED
@@ -34,7 +34,8 @@ require_relative '../lib/zold/version'
|
|
34
34
|
class TestZold < Minitest::Test
|
35
35
|
def test_all_scripts
|
36
36
|
Dir.new('fixtures/scripts').select { |f| f =~ /\.sh$/ && !f.start_with?('_') }.each do |f|
|
37
|
-
|
37
|
+
# next unless f == 'redeploy-on-upgrade.sh'
|
38
|
+
Dir.mktmpdir do |dir|
|
38
39
|
FileUtils.cp('fixtures/id_rsa.pub', dir)
|
39
40
|
FileUtils.cp('fixtures/id_rsa', dir)
|
40
41
|
script = File.join(dir, f)
|
@@ -68,7 +69,7 @@ class TestZold < Minitest::Test
|
|
68
69
|
end
|
69
70
|
|
70
71
|
def test_create_new_wallet
|
71
|
-
Dir.mktmpdir
|
72
|
+
Dir.mktmpdir do |dir|
|
72
73
|
FileUtils.cp('fixtures/id_rsa.pub', dir)
|
73
74
|
FileUtils.cp('fixtures/id_rsa', dir)
|
74
75
|
stdout = exec(
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zold
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.
|
4
|
+
version: 0.14.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-07-
|
11
|
+
date: 2018-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -335,7 +335,6 @@ files:
|
|
335
335
|
- ".rultor.yml"
|
336
336
|
- ".simplecov"
|
337
337
|
- ".travis.yml"
|
338
|
-
- ".zoldata/remotes"
|
339
338
|
- Gemfile
|
340
339
|
- INSTALL.md
|
341
340
|
- LICENSE.txt
|
@@ -346,7 +345,6 @@ files:
|
|
346
345
|
- bin/zold
|
347
346
|
- cucumber.yml
|
348
347
|
- deploy.sh
|
349
|
-
- farm
|
350
348
|
- features/cli.feature
|
351
349
|
- features/gem_package.feature
|
352
350
|
- features/step_definitions/steps.rb
|
@@ -401,6 +399,7 @@ files:
|
|
401
399
|
- lib/zold/commands/invoice.rb
|
402
400
|
- lib/zold/commands/list.rb
|
403
401
|
- lib/zold/commands/merge.rb
|
402
|
+
- lib/zold/commands/next.rb
|
404
403
|
- lib/zold/commands/node.rb
|
405
404
|
- lib/zold/commands/pay.rb
|
406
405
|
- lib/zold/commands/propagate.rb
|
@@ -457,6 +456,7 @@ files:
|
|
457
456
|
- test/commands/test_node.rb
|
458
457
|
- test/commands/test_pay.rb
|
459
458
|
- test/commands/test_propagate.rb
|
459
|
+
- test/commands/test_pull.rb
|
460
460
|
- test/commands/test_push.rb
|
461
461
|
- test/commands/test_remote.rb
|
462
462
|
- test/commands/test_show.rb
|
@@ -544,6 +544,7 @@ test_files:
|
|
544
544
|
- test/commands/test_node.rb
|
545
545
|
- test/commands/test_pay.rb
|
546
546
|
- test/commands/test_propagate.rb
|
547
|
+
- test/commands/test_pull.rb
|
547
548
|
- test/commands/test_push.rb
|
548
549
|
- test/commands/test_remote.rb
|
549
550
|
- test/commands/test_show.rb
|
data/.zoldata/remotes
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
b1.zold.io,80,0,0
|