Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,35 +1,35 @@
|
|||
(phixonline)-->
|
||||
<span style="color: #004080;">atom</span> <span style="color: #000000;">t0</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">time</span><span style="color: #0000FF;">()</span>
|
||||
<span style="color: #008080;">constant</span> <span style="color: #000000;">limit</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1e8</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">sisyphus</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},</span>
|
||||
<span style="color: #000000;">under250</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">reinstate</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">250</span><span style="color: #0000FF;">),</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #004080;">integer</span> <span style="color: #000000;">np</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">specific</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1000</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">count</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">m</span>
|
||||
<span style="color: #004080;">atom</span> <span style="color: #000000;">next</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
|
||||
<span style="color: #008080;">while</span> <span style="color: #004600;">true</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #7060A8;">even</span><span style="color: #0000FF;">(</span><span style="color: #000000;">next</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
|
||||
<span style="color: #000000;">next</span> <span style="color: #0000FF;">/=</span> <span style="color: #000000;">2</span>
|
||||
<span style="color: #008080;">else</span>
|
||||
<span style="color: #000000;">np</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
|
||||
<span style="color: #000000;">next</span> <span style="color: #0000FF;">+=</span> <span style="color: #7060A8;">get_prime</span><span style="color: #0000FF;">(</span><span style="color: #000000;">np</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #000000;">next</span> <span style="color: #0000FF;"><=</span> <span style="color: #000000;">250</span> <span style="color: #008080;">then</span> <span style="color: #000000;">under250</span><span style="color: #0000FF;">[</span><span style="color: #000000;">next</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #000000;">count</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #000000;">count</span> <span style="color: #0000FF;"><=</span> <span style="color: #000000;">100</span> <span style="color: #008080;">then</span>
|
||||
<span style="color: #000000;">sisyphus</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">next</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #000000;">count</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">100</span> <span style="color: #008080;">then</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"The first 100 members of the Sisyphus sequence are:\n%s\n"</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #0000FF;">{</span><span style="color: #7060A8;">join_by</span><span style="color: #0000FF;">(</span><span style="color: #000000;">sisyphus</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">10</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" "</span><span style="color: #0000FF;">,</span><span style="color: #000000;">fmt</span><span style="color: #0000FF;">:=</span><span style="color: #008000;">"%3d"</span><span style="color: #0000FF;">)})</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #008080;">elsif</span> <span style="color: #000000;">count</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">specific</span> <span style="color: #008080;">then</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%,13d%s member is: %,13d and highest prime needed: %,11d\n"</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #0000FF;">{</span><span style="color: #000000;">count</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">ord</span><span style="color: #0000FF;">(</span><span style="color: #000000;">count</span><span style="color: #0000FF;">),</span> <span style="color: #000000;">next</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">get_prime</span><span style="color: #0000FF;">(</span><span style="color: #000000;">np</span><span style="color: #0000FF;">)})</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #000000;">count</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">limit</span> <span style="color: #008080;">then</span> <span style="color: #000000;">m</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">largest</span><span style="color: #0000FF;">(</span><span style="color: #000000;">under250</span><span style="color: #0000FF;">,</span><span style="color: #004600;">true</span><span style="color: #0000FF;">);</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #000000;">specific</span> <span style="color: #0000FF;">*=</span> <span style="color: #000000;">10</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\nThese numbers under 250 do not occur in the first %,d terms:\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">count</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" %v\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">find_all</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">under250</span><span style="color: #0000FF;">)})</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\nThese numbers under 250 occur the most in the first %,d terms:\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">count</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" %v all occur %d times.\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">find_all</span><span style="color: #0000FF;">(</span><span style="color: #000000;">m</span><span style="color: #0000FF;">,</span><span style="color: #000000;">under250</span><span style="color: #0000FF;">),</span><span style="color: #000000;">m</span><span style="color: #0000FF;">})</span>
|
||||
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">elapsed</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">time</span><span style="color: #0000FF;">()-</span><span style="color: #000000;">t0</span><span style="color: #0000FF;">)</span>
|
||||
<!--
|
||||
with javascript_semantics
|
||||
atom t0 = time()
|
||||
constant limit = 1e8
|
||||
sequence sisyphus = {1},
|
||||
under250 = reinstate(repeat(0,250),1,1)
|
||||
integer np = 0, specific = 1000, count = 1
|
||||
atom next = 1
|
||||
while true do
|
||||
if even(next) then
|
||||
next /= 2
|
||||
else
|
||||
np += 1
|
||||
next += get_prime(np)
|
||||
end if
|
||||
if next <= 250 then under250[next] += 1 end if
|
||||
count += 1
|
||||
if count <= 100 then
|
||||
sisyphus &= next
|
||||
if count == 100 then
|
||||
printf(1,"The first 100 members of the Sisyphus sequence are:\n%s\n",
|
||||
{join_by(sisyphus,1,10," ",fmt:="%3d")})
|
||||
end if
|
||||
elsif count == specific then
|
||||
printf(1,"%,13d%s member is: %,13d and highest prime needed: %,11d\n",
|
||||
{count, ord(count), next, get_prime(np)})
|
||||
if count == limit then exit end if
|
||||
specific *= 10
|
||||
end if
|
||||
end while
|
||||
printf(1,"\nThese numbers under 250 do not occur in the first %,d terms:\n",count)
|
||||
printf(1," %v\n",{find_all(0,under250)})
|
||||
integer m = largest(under250,true)
|
||||
printf(1,"\nThese numbers under 250 occur the most in the first %,d terms:\n",count)
|
||||
printf(1," %v all occur %d times.\n",{find_all(m,under250),m})
|
||||
?elapsed(time()-t0)
|
||||
|
|
|
|||
|
|
@ -1,28 +1,26 @@
|
|||
(notonline)-->
|
||||
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span>
|
||||
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">/</span><span style="color: #000000;">primesieve</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span> <span style="color: #000080;font-style:italic;">-- (can provide if desired, ask me on either my or this tasks talk page)</span>
|
||||
<span style="color: #7060A8;">requires</span><span style="color: #0000FF;">(</span><span style="color: #004600;">WINDOWS</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">requires</span><span style="color: #0000FF;">(</span><span style="color: #000000;">64</span><span style="color: #0000FF;">,</span><span style="color: #004600;">true</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #004080;">atom</span> <span style="color: #000000;">t0</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">time</span><span style="color: #0000FF;">(),</span> <span style="color: #000000;">t1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">time</span><span style="color: #0000FF;">()+</span><span style="color: #000000;">1</span>
|
||||
<span style="color: #004080;">integer</span> <span style="color: #000000;">np</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">count</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">p</span>
|
||||
<span style="color: #004080;">atom</span> <span style="color: #000000;">next</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
|
||||
<span style="color: #008080;">while</span> <span style="color: #000000;">next</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">36</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #7060A8;">even</span><span style="color: #0000FF;">(</span><span style="color: #000000;">next</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
|
||||
<span style="color: #000000;">next</span> <span style="color: #0000FF;">/=</span> <span style="color: #000000;">2</span>
|
||||
<span style="color: #008080;">else</span>
|
||||
<span style="color: #000000;">p</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">primesieve_next_prime</span><span style="color: #0000FF;">()</span>
|
||||
<span style="color: #000000;">next</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">p</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #000000;">count</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #7060A8;">time</span><span style="color: #0000FF;">()></span><span style="color: #000000;">t1</span> <span style="color: #008080;">then</span>
|
||||
<span style="color: #004080;">atom</span> <span style="color: #000000;">cpc</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">count</span><span style="color: #0000FF;">/</span><span style="color: #000000;">77_534_485_877</span><span style="color: #0000FF;">)*</span><span style="color: #000000;">100</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">ppc</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">p</span><span style="color: #0000FF;">/</span><span style="color: #000000;">677_121_348_413</span><span style="color: #0000FF;">)*</span><span style="color: #000000;">100</span>
|
||||
<span style="color: #7060A8;">progress</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"count: %,d (%2.2f%%) p: %,d (%2.2f%%)\r"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">count</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cpc</span><span style="color: #0000FF;">,</span><span style="color: #000000;">p</span><span style="color: #0000FF;">,</span><span style="color: #000000;">ppc</span><span style="color: #0000FF;">})</span>
|
||||
<span style="color: #000000;">t1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">time</span><span style="color: #0000FF;">()+</span><span style="color: #000000;">1</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
|
||||
<span style="color: #7060A8;">progress</span><span style="color: #0000FF;">(</span><span style="color: #008000;">""</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%,d%s member is: %,d and highest prime needed: %,d\n"</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #0000FF;">{</span><span style="color: #000000;">count</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">ord</span><span style="color: #0000FF;">(</span><span style="color: #000000;">count</span><span style="color: #0000FF;">),</span> <span style="color: #000000;">next</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">p</span><span style="color: #0000FF;">})</span>
|
||||
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">elapsed</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">time</span><span style="color: #0000FF;">()-</span><span style="color: #000000;">t0</span><span style="color: #0000FF;">)</span>
|
||||
<!--
|
||||
without js
|
||||
include builtins/primesieve.e -- (can provide if desired, ask me on either my or this tasks talk page)
|
||||
requires(WINDOWS)
|
||||
requires(64,true)
|
||||
atom t0 = time(), t1 = time()+1
|
||||
integer np = 0, count = 1, p
|
||||
atom next = 1
|
||||
while next!=36 do
|
||||
if even(next) then
|
||||
next /= 2
|
||||
else
|
||||
p = primesieve_next_prime()
|
||||
next += p
|
||||
end if
|
||||
count += 1
|
||||
if time()>t1 then
|
||||
atom cpc = (count/77_534_485_877)*100,
|
||||
ppc = (p/677_121_348_413)*100
|
||||
progress("count: %,d (%2.2f%%) p: %,d (%2.2f%%)\r",{count,cpc,p,ppc})
|
||||
t1 = time()+1
|
||||
end if
|
||||
end while
|
||||
progress("")
|
||||
printf(1,"%,d%s member is: %,d and highest prime needed: %,d\n",
|
||||
{count, ord(count), next, p})
|
||||
?elapsed(time()-t0)
|
||||
|
|
|
|||
|
|
@ -5,18 +5,20 @@ const std = @import("std");
|
|||
const mem = std.mem;
|
||||
|
||||
pub fn main() !void {
|
||||
var t0 = try std.time.Timer.start();
|
||||
var t0: std.time.Timer = try .start();
|
||||
// ------------------------------------------------------- stdout
|
||||
const stdout = std.io.getStdOut().writer();
|
||||
var stdout_buffer: [1024]u8 = undefined;
|
||||
var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
|
||||
const stdout = &stdout_writer.interface;
|
||||
// ---------------------------------------------------- allocator
|
||||
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
|
||||
var arena: std.heap.ArenaAllocator = .init(std.heap.page_allocator);
|
||||
defer arena.deinit();
|
||||
const allocator = arena.allocator();
|
||||
// --------------------------------------------------------------
|
||||
var counter = try Counter.init(allocator);
|
||||
var counter: Counter = try .init(allocator);
|
||||
defer counter.deinit();
|
||||
|
||||
var sisyphus = try SisyphusSequenceGenerator.init();
|
||||
var sisyphus: SisyphusSequenceGenerator = try .init();
|
||||
defer sisyphus.deinit();
|
||||
|
||||
var number: u64 = undefined;
|
||||
|
|
@ -40,6 +42,8 @@ pub fn main() !void {
|
|||
.{ n, number, sisyphus.prime },
|
||||
);
|
||||
}
|
||||
try stdout.flush();
|
||||
|
||||
{
|
||||
try stdout.writeAll("\nThese numbers under 250 do not occur in the first 100,000,000 terms:\n");
|
||||
const missing = try counter.getMissing(allocator);
|
||||
|
|
@ -52,6 +56,8 @@ pub fn main() !void {
|
|||
}
|
||||
try stdout.writeByte('\n');
|
||||
}
|
||||
try stdout.flush();
|
||||
|
||||
{
|
||||
try stdout.writeAll("\nThese numbers under 250 occur the most in the first 100,000,000 terms:\n");
|
||||
const most = try counter.getMost(allocator);
|
||||
|
|
@ -64,6 +70,8 @@ pub fn main() !void {
|
|||
}
|
||||
try stdout.print(" all occur {d} times.\n", .{most.max});
|
||||
}
|
||||
try stdout.flush();
|
||||
|
||||
var count = counter.count; // Only need the count, not the found hashmap. Ditch counter.
|
||||
while (true) {
|
||||
number = try sisyphus.next();
|
||||
|
|
@ -76,7 +84,10 @@ pub fn main() !void {
|
|||
break;
|
||||
}
|
||||
}
|
||||
try stdout.print("\nProcessed in {}\n", .{std.fmt.fmtDuration(t0.read())});
|
||||
try stdout.writeByte('\n');
|
||||
try stdout.flush();
|
||||
|
||||
std.log.info("processed in {D}", .{t0.read()});
|
||||
}
|
||||
|
||||
const SisyphusSequenceGeneratorError = error{
|
||||
|
|
@ -89,7 +100,7 @@ const SisyphusSequenceGenerator = struct {
|
|||
prime: u64 = 0,
|
||||
|
||||
fn init() !SisyphusSequenceGenerator {
|
||||
var si = SisyphusSequenceGenerator{};
|
||||
var si: SisyphusSequenceGenerator = .{};
|
||||
primesieve.primesieve_init(&si.it);
|
||||
return si;
|
||||
}
|
||||
|
|
@ -114,7 +125,7 @@ const Counter = struct {
|
|||
found: std.AutoHashMap(u64, usize),
|
||||
count: usize = 0,
|
||||
|
||||
fn init(allocator: mem.Allocator) !Counter {
|
||||
fn init(allocator: std.mem.Allocator) !Counter {
|
||||
var found = std.AutoHashMap(u64, usize).init(allocator);
|
||||
try found.ensureTotalCapacity(250);
|
||||
for (1..250) |n|
|
||||
|
|
@ -130,33 +141,33 @@ const Counter = struct {
|
|||
self.found.getEntry(n).?.value_ptr.* += 1;
|
||||
}
|
||||
/// Caller owns returned slice memory.
|
||||
fn getMissing(self: *const Counter, allocator: mem.Allocator) ![]u64 {
|
||||
var missing_array = std.ArrayList(u64).init(allocator);
|
||||
fn getMissing(self: *const Counter, allocator: std.mem.Allocator) ![]u64 {
|
||||
var missing_array: std.ArrayList(u64) = .empty;
|
||||
var it = self.found.iterator();
|
||||
while (it.next()) |entry| {
|
||||
if (entry.value_ptr.* == 0)
|
||||
try missing_array.append(entry.key_ptr.*);
|
||||
try missing_array.append(allocator, entry.key_ptr.*);
|
||||
}
|
||||
const missing = try missing_array.toOwnedSlice();
|
||||
mem.sort(u64, missing, {}, std.sort.asc(u64));
|
||||
const missing = try missing_array.toOwnedSlice(allocator);
|
||||
std.mem.sortUnstable(u64, missing, {}, std.sort.asc(u64));
|
||||
return missing;
|
||||
}
|
||||
/// Caller owns returned 'numbers' slice memory.
|
||||
fn getMost(self: *const Counter, allocator: mem.Allocator) !struct { numbers: []u64, max: usize } {
|
||||
fn getMost(self: *const Counter, allocator: std.mem.Allocator) !struct { numbers: []u64, max: usize } {
|
||||
// Find the maximum count (there may be more than one at this value)
|
||||
var value_it = self.found.valueIterator();
|
||||
var max: usize = 0;
|
||||
while (value_it.next()) |count|
|
||||
max = @max(max, count.*);
|
||||
|
||||
var most_array = std.ArrayList(u64).init(allocator);
|
||||
var most_array: std.ArrayList(u64) = .empty;
|
||||
var it = self.found.iterator();
|
||||
while (it.next()) |entry| {
|
||||
if (entry.value_ptr.* == max)
|
||||
try most_array.append(entry.key_ptr.*);
|
||||
try most_array.append(allocator, entry.key_ptr.*);
|
||||
}
|
||||
const most = try most_array.toOwnedSlice();
|
||||
mem.sort(u64, most, {}, std.sort.asc(u64));
|
||||
const most = try most_array.toOwnedSlice(allocator);
|
||||
std.mem.sortUnstable(u64, most, {}, std.sort.asc(u64));
|
||||
return .{ .numbers = most, .max = max };
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue