|
weekly meeting at 18:30 UTC, Tuesday Set by moderator on 3 September 2008. |
|||
|
07:19
particle1 joined
12:04
kid51 joined
|
|||
| kid51 | Pre-posting report, then off to $job | 12:05 | |
| * Had a couple of Perl 5-ish tasks that I thought were delegatable to others, so I posted on the list. | 12:06 | ||
| * Got 6 responses, 5 from completely new people -- which > number of tasks I had! | |||
| * Balint Szilakszi studied smartlinks-related tickets -- which forced me to do likewise. | 12:07 | ||
| * As result of this and Moritz's comments, I think we can yank smartlinks code from the distro. | 12:08 | ||
| * What we have is undocumented and doesn't work. Have proposed patch. | |||
| * Anyone who sees a role for that code in our distro should speak up now. | 12:09 | ||
| * pmichaud et al: Do you have Rakudo tasks that could be delegated to people like B�lint? | |||
| * EOR | |||
|
12:10
kid51 left
13:32
davidfetter joined
15:40
pmichaud joined
15:44
PacoLinux joined
16:10
Wknight8111 joined
16:18
contingencyplan joined
16:28
cotto_work joined
16:33
isop joined
16:37
barney joined
17:10
kj joined
17:39
jhorwitz joined
|
|||
| kj | I don't have internet access at home, and leaving office now, so this is my report: | 18:12 | |
| * cleanups, documentation and optimized (a bit) of pirc | |||
| * played with the idea of converting pirc's data structures to PMCs, but think it wouldn't be as efficient | 18:13 | ||
| * thanks to moritz++ for providing me with access to a linux box to test pirc there. | 18:14 | ||
| .eor | |||
|
18:20
NotFound joined
18:25
jonathan joined
18:30
chromatic joined
|
|||
| chromatic | Hello everyone. | 18:30 | |
|
18:30
allison joined
|
|||
| Wknight8111 | hello | 18:30 | |
| moritz | hi | ||
| jhorwitz | yo | ||
| moritz | (kid51 and kj pre-posted their reports) | 18:31 | |
| NotFound | H | ||
| barney | hi | ||
| allison waves | |||
| chromatic | Alright, let's go in order. | ||
| allison? | |||
|
18:31
rurban joined
|
|||
| pmichaud | yhere. | 18:31 | |
| allison | - Fixed a number of failing tests on the pdd17mmd branch. We're down to 2 failing tests on Linux and 6 failing tests on Mac OS X. Remaining test failures appear to be GC-related. | 18:32 | |
| whoops, pdd27mmd | |||
| - Removed deprecated functions. | |||
| - Updated tests to match the new MMD semantics (no more n_*, signature of an MMD vtable function matches the vtable function) | |||
| - Will work on initial language testing next. | |||
| EOR | |||
| chromatic | barney? | ||
| barney | fixed a couple of codingstd glitches | 18:33 | |
| .eor | |||
| chromatic | I fixed a couple of bugs, and then I fixed a couple of problems on the MMD branch. | ||
| Most importantly I found a better workaround for the HLL mapping problem. | 18:34 | ||
| cotto_work? | |||
| cotto_work | * briefly broke rakudo by "fixing" get_*_keyed_int on reizable*array | ||
| * will try again after the release | |||
| * also fixed a few bug and closed a few ticket | 18:35 | ||
| * tried to remove pioctl from trunk, but that will have to wait until after the IO milestone | |||
| .eor | |||
| chromatic | japhb? | ||
|
18:35
smash joined
|
|||
| chromatic | jhorwitz? | 18:36 | |
| jhorwitz | branched mod_parrot to simplify the HLL layer. These layers (mod_perl6, PHP, etc.) are now first-class Apache modules and can manage their own server and directory configurations. still needs work before merging back into trunk | 18:37 | |
| EOR | |||
| chromatic | jonathan? | ||
| jonathan | * Spent my Rakudo day mostly fixing various little bugs here and there | ||
| * Also spent more time on the MMD grant | |||
| * Switched Rakudo over to using Perl6MultiSub PMC | |||
| * Gets us much closer to being what the Perl 6 spec asks for - we can now dispatch based upon roles and have refinement types as tie-breakers | |||
| * Good enough to pass all of current spectest_regression, plus a couple of extra tests that were TODO'd started to pass also | |||
| * However, some bugs; one of them is something that passes in the PIR tests for the PMC, but fails when doing something similar from Rakudo; need to investigate why. | |||
| * Badly behind on writing up Rakudo day - will try and fix that tonight/tomorrow. | |||
| EOR | |||
| chromatic | moritz? | ||
| moritz | * enabled parallel testing in rakudo (mostly let others do the work for me; works fine) | 18:38 | |
| * I think we should try to attract even more Perl 5 developers by handing out cage tasks that are easy to do without much parrot knowledge (like kid51++ did) | |||
| * implement a few trivial parsing constructs (m/../, qw/.../) that enabled a few more tests | |||
| * Somebody should really fix the svn server. | |||
| .end | |||
| chromatic | NotFound? | ||
| moritz | s/implement/implemented/ actually | ||
| NotFound | * Added command line options -I and -L | ||
| * fix some bugs | |||
| EOR | |||
| chromatic | particle? | 18:39 | |
| pmichaud? | |||
| pmichaud | ** Rakudo spectest_regression: 153 files, 3370 passing tests | ||
| == Release management | |||
| : 0.7.1 release will happen a little later this afternoon | |||
| : get any NEWS, PLATFORMS, etc. commits in soon | |||
| : let me know if there are any release blockers | |||
| == Overall | |||
| : Been answering questions on IRC and email | 18:40 | ||
| : Been provoking questions on p6l | |||
| == PCT stuff | |||
| : Added 'newclosure' as a valid :pirop for the PAST::Compiler | |||
| : Added note about changing current behavior of P6object .new_class method | |||
| == NQP stuff | |||
| : Fixed a bug where it didn't handle null values from RPA properly | |||
| == Rakudo stuff | |||
| : Answered lots of Rakudo and Perl 6 questions | |||
| : Fixed the .kv method on Mapping/Hash | |||
| : Fixed 'defined' to be a named unary | |||
| : Cleaned up the grammar somewhat | |||
| : Fixed statement modifiers occurring after listops | |||
| == Queue 5 items | |||
| eor | |||
| chromatic | rurban? | ||
| rurban | * just moved from graz to mainz for a month. super-luxus flat, but no stable internet yet. | ||
| * more work on pdd30_install: Now I have 5 layout suggestions 1a-c, 2a-b | |||
| * work on make test with already installed shared libparrot | |||
| * cygwin070patches up2date | |||
| * no time for jvm, but plans for perl5 B::PIR | |||
| EOR | |||
| chromatic | smash? | 18:41 | |
| smash | no report | ||
| chromatic | Tene, are you back yet? | ||
| Tene | I am! | ||
| Just barely. | |||
| I implemented gather/take for rakudo | |||
|
18:41
mberends joined
|
|||
| Tene | Little bit more work on cardinal, nothing interesting. | 18:42 | |
| I made a branch to implement pmichaud's exceptions api proposal. | |||
| I proposed an ExceptionHandler enhancement on the list. | |||
| I'd like feedback on both of those. | 18:43 | ||
| That's probably all. | |||
| .eor | |||
| moritz | Wknight8111? | ||
| Wknight8111 | *Worked on /docs/book a little bit | 18:44 | |
| *Got a pugs commit bit, going to be working on the Perl 6 essentials book in there | |||
| *Applied for a Perl 6 microgrant to work on these two books | |||
| *Refactored Parrot_PCCINVOKE and friends for the pdd27mmd branch | |||
| *More refactoring to do for it still, hoping to unify some things | |||
| EOR | |||
| chromatic | Wknight8111? | ||
| Let's go to question time then. I'll start: what do we need to finish before the release? | |||
| pmichaud | you mean the 1.0 release | 18:46 | |
| ? | |||
| allison | the 0.7.1 release, I'm guessing | ||
| chromatic | 0.7.1 | ||
| pmichaud | oh. I figured we'd just release with whatever we have today -- didn't know that we had any specific milestones | ||
| I'll look for deprecation items and see if they're available for removal | 18:47 | ||
| chromatic | I mostly meant "What do you need us to do to help you?" | ||
| pmichaud | ahhhhh | ||
| just the standard release sorts of things -- update PLATFORMS, NEWS, AUTHORS, etc. | |||
| smash | i'll do the debian packages after release, i've been tring to keep them up to date | 18:48 | |
| pmichaud | I don't know of any specific blockers or things that need to be addressed | ||
| chromatic | Okay, good. | ||
| Any other questions? | |||
| pmichaud | (if I'm wrong about that, please tell me :-) | ||
| I have a bunch of items | |||
| #1: How can I stringify a Float for use as a PIR literal such that | 18:49 | ||
| we don't lose a ton of precision? Related: Is C<get_repr> the correct | |||
| opcode for this? | |||
| currently the methods I have available seem to only provide about 6 or 7 digits of precision | |||
| allison | seems like a format print where you choose the precision would be sensible | 18:50 | |
| sprintf-like | |||
| pmichaud | do we have such a beast? | ||
| allison | hmmm... | ||
| pmichaud | and how would I chose the precision such that it works for both things like .00000000000001 and 2.7E+34 ? | ||
| NotFound | The precision wanted may depend on the C type FLOATVAL maps to. | 18:51 | |
| allison | there is an sprintf opcode in src/ops/string.ops | ||
| pmichaud | yes, but what specifier should I use? | ||
| allison | can't say how reliable it is yet | ||
| pmichaud: can you make that a ticket and I'll attach it to the Strings milestone? | 18:52 | ||
| Tene | queue one question from me. | ||
| pmichaud | allison: okay. Rakudo number processing and some tests are blocking on this issue, though. | ||
| allison | pmichaud: unless it's something you're blocking on right now | ||
| pmichaud | go ahead with Tene's question, because I think it's actually my question #2 :-) | 18:53 | |
| Tene | It isn't. | ||
| pmichaud | go ahead anyway :-) | ||
| Tene | NO U FIRST | ||
| Fine. | |||
| Does returning from a throw_from_c ever actually make sense? Is that something we need to support? | 18:54 | ||
| allison | you mean resumable exceptions at the C level? | ||
| Tene | Because the docs claim that we can continue at the level of a C instruction, but I don't think we can make a parrot continuation that does that. | ||
| Right. | |||
| At the very least, we might want to support automatically resuming non-fatal unhandled exceptions, which I think might be possible. | 18:55 | ||
| allison | at the moment there's some code in place to prevent it from returning, it restarts the runloop instead | ||
| NotFound | If the C stack is dropped, can't be restored by a continuation. | 18:56 | |
| allison | it is desirable, but may not be possible under the current set up | ||
| NotFound: the C stack isn't dropped, because the handler is always invoked with the current C stack in place | |||
| Tene | Is that something that's worth me trying to investigate, then? | 18:57 | |
| allison | NotFound: the C stack is only dropped after the handler is finished | ||
| Tene: It's worth looking into it, but feel free to report that it's something we'll need to delay until 2.0 | |||
| Tene | Okay. | ||
| Thanks. | |||
| chromatic | pmichaud, #2/3? | ||
| Tene | goto pmichaud | ||
| pmichaud | #2 is related to Tene's :-P | 18:58 | |
| chromatic | longjmp pmichaud env | ||
| pmichaud | in general, can we get some feedback on the exceptions proposals he and I have made? We'd like to know if we can consider merging his branch into trunk. (My messages were subject "throw oddities in pdd23") | ||
| don't need feedback immediately (unless it's available), but didn't want it to be warnocked | |||
| Tene | chromatic responded in #parrot, but if anyone else comments, that's great too. | 18:59 | |
| pmichaud | ah, I didn't see the #parrot response | ||
| #3 is for allison: In the pdd27mmd branch, does C< add $P0, $P1 > still do the | |||
| same as before? | |||
| allison | do you mean add_p_p? | 19:00 | |
| pmichaud | yes. | ||
| allison | or add_p_p_p | ||
| pmichaud | add_p_p | ||
| allison | yes, no change there | ||
| pmichaud | okay, good. | ||
| last question from me | |||
| this probably needs longer discussion, perhaps on list, but any initial reactions ("yes that's right" or "no way!") would be appreciated on this one | 19:01 | ||
| allison | (I'll take a look at the throw proposals on the list) | ||
| pmichaud | #4 | ||
| For rakudo, it appears as though we will have to implement arrays | |||
| and hashes such that each element is a Scalar container that | |||
| then references the corresponding value. In other words, a | |||
| (non-lazy) array of <n> values will require 2*n+1 gc-able elements. | |||
| Comments? | |||
| allison | so the Scalar container will be a pmc pointer to a scalar value? | 19:02 | |
| Wknight8111 | have fun with that :) | ||
| allison | is this because of some additional metadata needed for scalars? | ||
| pmichaud | allison: yes, and it delegates all method calls and vtable methods (except a few) to its value | ||
| metadata is part of it, but primarily it's in order to get the value and reference semantics correct | |||
| allison | hmmm... it sounds highly inefficient | ||
| pmichaud | in PIR there doesn't seem to be a way for me to refer to an array element by reference | 19:03 | |
| allison | it's worth talking through the value and reference semantics to see if we can make it possible to do it with one PMC | ||
| pmichaud | yes, it sounds inefficient to me also, which is why I've been trying to avoid it, but I think I'm at a dead-end | ||
| allison | what do you mean by "refer to an array element by reference"? | 19:04 | |
| NotFound | pmichaud: returning a proxy in [ ] can be a way. | ||
| pmichaud | sub foo($x is ref) { ... }; my @a = 1, 2, 3; foo(@a[1]) | ||
| jonathan | pmichaud: Maybe we can have a reference PMC that refers to an array element. | ||
| pmichaud: And only create it when the array is indexed into. | |||
| particle shows up with no new status to report | |||
| pmichaud | jonathan: I've thought about that, but that seems to just degenerate to having a Scalar for every element | ||
| jonathan | Depends how you're using the array. | 19:05 | |
| pmichaud | I'd rather create the Scalar object once (for the array) than once-per-indexed-access | ||
| jonathan | If you're iterating over it in a non-rw way, you'd probably never need to make any. | ||
| allison | so that would pass an array element by reference, so changes to $x would modify the [1]th position in the array, but would not modify whatever element was originally in the array? | ||
| pmichaud | allison: partially, but I also need to know about any type constraints that are on the Array | 19:06 | |
| e.g., if I had done my Int @a = 1,2,3; | |||
| Tene | So, I saw mention on the list of some parrot developer conference, hosted by google? What's likely to happen there? Is there any vague plan, or just throw a bunch of parrot devs together and see what happens? | ||
| pmichaud | also, it appears that Perl 6's value and reference semantics are dependent on values being immutable | 19:07 | |
| allison | Tene: it's specifically planning the final stages to the 1.0 release | ||
| pmichaud | so, something as simple as $x = @a[$y] causes the Scalar $x to refer to the value in @a[$y] | ||
| if we then increment @a[$y], then we have to re-bind it to a new value -- we can't just increment the value that's there (because $x is referring to it) | |||
| moritz | pmichaud: no, that copies it | 19:08 | |
| pmichaud | moritz: see the discussion on p6l :-) | ||
| moritz | pmichaud: it's most likely wrong anyway :/ | ||
|
19:08
rurban joined
|
|||
| allison | There are several ways to do it aside from adding a layer of indirection to every array element | 19:09 | |
| pmichaud | it does not cause the symbol $x to refer to @a[$y], it causes the container $x to refer to the value referenced by @a[$y] | ||
| allison | largely, it seems to be a custom Array type | ||
| pmichaud | part of the issue seems to be that once I do set $P0, $P1[key] there's not really a way for $P0 to keep its association with $P1 | ||
| allison | That could be fixed | 19:10 | |
| add an additional attribute to the scalar types | |||
| Wknight8111 | I don't see why $x = @a[$y] should be a reference, unless you were trying to extend lazy array semantics to scalars too | ||
| allison | but, a scalar could be stored in multiple arrays at the same time | ||
| pmichaud | I do know that I've been asking about this since at least 2005, but nobody seems to come up with any concrete answers :-| | 19:11 | |
| moritz | Wknight8111: I don't think it actually is, but there's some confusion floating around that. However $x := @a[$y] does create a reference | ||
| Wknight8111 | right, so the "=" should create a copy instead | ||
| pmichaud | no, $x := @a[$y] causes the symbol $x to bind to the container given by @a[$y] | ||
| allison | pmichaud: well the semantics do seem rather odd | ||
| pmichaud | allison: they're really just traditional perl semantics, afaict | 19:12 | |
| allison | perl 5 is much simpler | ||
| pmichaud | (except for binding, yes, I agree.) | ||
| so, how do I move this forward? | 19:13 | ||
| rurban | btw: I had cygwin blockers for 0.7.1 but no ticket. just reports on irc | ||
| pmichaud | rurban: are they still blockers -- i.e., should I hold the release? | ||
| rurban | i don't have enough time now, and I can fix it afterwards also | 19:14 | |
| allison | pmichaud: I don't really have a good answer for you at the moment. if you have to go to a dual layer for scalars, do it, and we'll try to refactor it out later | ||
| rurban | it's cygwin only I guess. | ||
| moritz | pmichaud: I think that Darren's reply is the best so far, and it does say taht stuff is copied, but it's usually references that are copied | ||
| allison | pmichaud: really, it'll probably take us a couple of passes on implementing the feature anyway, so might as well implement one that's intended as a throw-away | ||
| pmichaud | moritz: "reference" is effectively the same as saying "scalar" | ||
| moritz: i.e., a reference is an object that contains a pointer of some sort to another object | 19:15 | ||
| moritz: which brings me back to where I started -- an array has to have a reference object for each element in addition to the value object (in order for Darren's reply to work in Parrot) | |||
| moritz | pmichaud: I don't think it makes sense to discuss Perl 6 semantics in #ps... | 19:16 | |
| rurban | pmichaud: irclog.perlgeek.de/parrot/2008-09-14#i_567329 src/string.c:2241: failed assertion '(s)->encoding' in loadlib (cygwin has no $ENV{LANG}) | ||
| moritz | pmichaud: and it's a much too convoluted topic to be settled here | ||
| pmichaud | it does because I'm saying the Parrot model doesn't really support the semantics we need | ||
| allison | moritz: well, we're discussing how to implement it in Parrot | ||
| moritz | ok | ||
| pmichaud | or, what I'm saying is that the only way I have found to implement Perl 6 semantics in Parrot is to have the extra layer of indirection, and that seems inefficient to me (and allison too) | 19:17 | |
| so that's a potential deficiency in Parrot at the moment that we have to figure out how to resolve. | |||
| allison | could you do it with a special Scalar PMC that acts as both container and value? | ||
| pmichaud | wouldn't it also have to have a type for the value? | ||
| i.e., you mean I should have ScalarInt, ScalarNum, ScalarStr ? | 19:18 | ||
| allison | well, perl 5 has only SV, that contains storage for all possible types | ||
| pmichaud | yes, I know | ||
| allison | and, being "typed" in perl 6 is not necessarily the same thing as a Parrot PMC type | 19:19 | |
| pmichaud | it might be possible to do it if Integer/Float/String could morph into a Scalar container (and vice-versa) | ||
| NotFound | rurban: What is the relation between LANG and the encoding of a string? | ||
| pmichaud | but it's not just Integer/Float/String, it's bascially anything that is an immutable type | ||
|
19:20
rurban_ joined
|
|||
| allison | you'd probably have to handle the morphing externally, unless you're dealing with Perl6Integer/Perl6Float/Perl6String, etc | 19:20 | |
| pmichaud | there is an advantage to using the all-containers-as-scalars approach, however, and that is that simple assignment no longers involves making copies of objects (so we do get a gain in gc-able objects there) | ||
| i.e., right now $x = 'foo' involves making a Str object for the constant 'foo' and then copying it into $x | 19:21 | ||
| (and the copy involves cloning foo) | |||
| spinclad | could you use a special Scalar PMC that references to the array (for type...) and the array cell, so when you aren't talking about it, it needn't be there? | ||
| pmichaud | spinclad: possibly, but again, that degenerates to creating a PMC on every indexed access instead of once on first reference | ||
|
19:21
rurban__ joined
|
|||
| pmichaud | I'd rather create it once at the beginning than once on every access | 19:22 | |
| allison | once on first reference is better than once on array creation (since many/most array elements will never be used in this fashion) | ||
| pmichaud | I'm not talking about array creation | ||
| chromatic | memoized on first reference | ||
| pmichaud | Im saying once on first refernce | 19:23 | |
| i..e, having a PMC that references the array and index is not much better than creating the Scalar container the first time I have a keyed access | |||
| allison | so, the first time an array element is used as a reference, it's element gets replaced by a Scalar that points to the original array element | ||
| that seems like a tolerable first stab at the problem | |||
| pmichaud | yes, except we don't have any way of knowing "used as a reference" | 19:24 | |
| so it's really on first access | |||
| allison | less tolerable | ||
| pmichaud | there's not an opcode that tells me "get a reference" -- all I have is get_pmc_keyed | ||
| allison | get_ref_keyed_int? | ||
| pmichaud | since I don't know how that pmc will be used (i.e., if it will be modified), I have to assume it will be referenced | ||
| allison | I'm not sure we have a general use for get_ref_keyed, | 19:25 | |
| pmichaud | note that everything I'm writing for arrays applies to hashes as well. | ||
| (and yes, these are the same issues that led us to implement a 'copy' opcode late last year. I'm now reaching the limitations of 'copy'.) | 19:27 | ||
| NotFound | rurban: I don't see the road between not having LANG env var and a string lacking encondig. | ||
| allison | ah.... this is that weird Perl semantics where modifying a variable that was stored in the array modifies the element in the array | ||
| rurban | pmichaud: The encoding error came in the last four days, so I should find it by my own also. Another new language problem is src/pmc_freeze.c:814: failed assertion '(int)io->image->bufused >= 0' | ||
| pmichaud | that's a part of it, yes. | ||
| allison | but, isn't that what 'morph' was intended to implement? | ||
| rurban | NotFound: Just wild uninformed guessing | ||
| allison | that you keep the same container, but change the value it points to? | 19:28 | |
| pmichaud | yes, but morph was broken in that way | ||
| allison | in what way? | ||
| pmichaud | i.e., as morph is implemented, every type has to know how to morph itself into every other type | ||
| NotFound | rurban: Can't you do a backtrace on cygwin? | ||
| pmichaud | that's why we implemented 'copy' | ||
| allison | yes, that is broken | ||
| pmichaud | 'copy' keeps the same PMC but changes its value | ||
| rurban | I can, but not now. | 19:29 | |
| allison | okay, well in order to implement a true generational gc we may have to add an extra layer of indirection to PMCs themselves, that may solve your problem | ||
| pmichaud | it may. my overall feeling is that parrot's current set of opcodes aren't sufficient to handle references in aggregates | 19:30 | |
| allison | (we can't currently ever move PMCs) | ||
| rurban | indirect PMC++ | ||
| very important also for compating gc | |||
| spinclad | (compacting) | ||
| allison | pmichaud: that's certainly true, but the current set of opcodes are all that the current PMC implementation can support anyway | ||
| Wknight8111 | gc covers more then just PMCs though, you would have to add similar indirection to strings and other pobjs too | 19:31 | |
| allison | Wknight: yes | ||
| pmichaud | well, at one time I had played with an assign_p_k_p opcode, to augment set_p_k_p | ||
| Wknight8111 | not to mention objects that aren't isomorphic with pobjs, like PMC_EXT, which I've been trying to have managed | ||
| rurban | pin-pointed PMC's on the other hand are nice to have for nci callbacks (gtk2 e.g.) | 19:32 | |
| pmichaud | right now the only operation we can perform on aggregates is "bind" and "lookup". There's not a way to assign to an aggregate value. | ||
| er, assign to an aggregate element | |||
| (except via 'copy') | |||
| allison | pmichaud: I'm happy to add the opcode, if you implement an aggregate type that uses it | ||
| pmichaud: it'll probably need additional vtable functions too | |||
| pmichaud | yes, it might | ||
| anyway, I'll give one last crack at trying to make things work within the current implementation | 19:33 | ||
| (i.e., without the extra Scalar PMCs) | |||
| particle | a patch to the pmc pdd is probably the first step for assign_* | 19:34 | |
| pmichaud | a proposed patch, perhaps. But I'd prefer to see if it'll even work first. | ||
| particle | yes, proposed patch, not commit. | ||
| pmichaud | anyway, eoq for me (#5 I'll take up on #parrot later) | ||
|
19:38
jhorwitz left
|
|||
| spinclad | (chromatic is away? gavel?) | 19:39 | |
| allison | that's a wrap, thanks everybody! | 19:40 | |
| pmichaud | thanks, all | ||
| moritz | ciao | 19:41 | |
| chromatic | Yep, thanks all. | 19:42 | |
|
19:42
pmichaud left,
chromatic left
19:49
PacoLinux left
19:52
rurban left
19:53
mberends left
19:55
Wknight8111 left
20:01
cotto_work left
21:07
NotFound left
23:23
jonathan left
|
|||