Log of #mupdf at irc.freenode.net.

Search:
 <<<Back 1 day (to 2018/06/27)20180628 
paulgardiner tor8: thanks08:24.56 
tor8 Bug693664 has another file.08:32.56 
  paulgardiner: ^08:33.01 
paulgardiner Ta08:33.37 
tor8 paulgardiner: I put http://ix.io/1fgc in a file rot.txt and used 'mutool create -o rot.pdf rot.txt' to create the first sample file08:35.00 
  moolc: I draw a quad for each contiguous area of the selection. the rects are merged if they are adjoining.08:36.20 
moolc tor8: gotcha, makes sense, i just union the rects (lazy and all that)08:37.31 
tor8 moolc: that doesn't work too well when the selection is on multiple lines08:37.56 
moolc tor8: you are doing it wrong then ;)08:45.42 
  or at least not the way i do it08:45.48 
tor8 moolc: then I take issue with your claim that you "just union the rects"...08:46.31 
moolc tor8: let me check08:46.57 
  tor8: i union the rects - https://github.com/moosotc/llpp/blob/master/link.c#L180708:48.36 
  tor8: FWIW cloning the thing and following BUILDING would get you a nice shiny application (plus a mega cool build system)... (no prereqs, it will fetch ocaml automagically so should work out of the box even on your retrograde/luddite debian)08:51.14 
paulgardiner tor8: I'm seeing a few problems now I've tested with a wider range of forms. Should I raise bugs?09:29.11 
tor8 paulgardiner: what kind of problems? appearance synthesis related?09:35.10 
paulgardiner Not sure. Choice widgets now display as though all the options are stacked on top of each other. Also I'm not able to detect changes for some cases with check boxes. Particularly radio buttons: I can't detect the newly checked button, although I can detect the one becoming unchecked.09:39.19 
  I have another case where a choice widget just goes blank when I attempt to change it.09:39.51 
tor8 I haven't changed anything which should affect the 'logic' of forms09:42.26 
  not yet, at any rate09:42.52 
paulgardiner Some of these I didn't see before your ui branch10:02.03 
tor8 the checked buttons, could they be missing the AP for the other states and that's why you're not seeing changes?10:03.12 
  send me the files in an email, it's less likely I'll miss them than if you open a bug report :)10:03.28 
paulgardiner They update when I force a redraw by zooming10:03.41 
tor8 does mupdf-gl detect the changes?10:04.13 
  Robin_Watts: do you still have the beagleboard (or some other arm-based linux machine you can run mutool on?)10:05.18 
Robin_Watts tor8: I do.10:05.36 
  I have a pi2.10:05.39 
tor8 Robin_Watts: the internet was down yesterday, so I spent a few hours bashing on an idea you're going to hate10:05.51 
paulgardiner tor8: does mupdf-gl work that way? I thought it just redrew the entire page on each change.10:06.01 
Robin_Watts o.....k.....10:06.09 
tor8 and I'd like to see how much of a slowdown it causes on an arm machine--benchmarking on my intel's show nothing10:06.15 
  Robin_Watts: the tor/nostar branch10:06.42 
  paulgardiner: we redraw the whole page, but first it has to detect that things have changed and need redrawing10:08.10 
  paulgardiner: however, I did note that the mechanism for flagging a widget as changed is ... fragile10:08.34 
paulgardiner tor8: how do you mean fragile? I believe it used to work in call cases.10:09.26 
tor5 ugh, internet's still glitching10:10.50 
  paulgardiner: it uses a single 'dirty' flag for all purposes10:11.03 
paulgardiner I meant "in all cases"10:11.10 
Robin_Watts tor8: Of couse, I have to remember my raspberry pi's password...10:11.22 
tor5 not the dual-style flagging for annotations: contents changed, need new AP; AP changed, need repaint.10:11.31 
  Robin_Watts: I'm a bit worried. taking on the change means a lot of churn for customers with custom code... but it does lead to a lot nicer code in several places.10:12.19 
  Robin_Watts: anyway, I am curious about the performance.10:12.39 
  and I'm hoping a low powered arm device will show that a lot better than super-hyperthreaded optimized intel CPUs10:12.59 
Robin_Watts tor5: As you predicted, I dislike it :)10:13.27 
paulgardiner tor5: I don't altogether get that. In the app I just need to know that it needs repainting... assuming there's not an obligation to make explicit calls for appearance stream updates for the sake of the other flags.10:14.04 
tor5 Robin_Watts: I got fed up with "local_ctm = *ctm;" everywhere, and bbox1, bbox2, bbox3 temporary variables10:14.05 
  paulgardiner: in the case where the app is the only user of updates, that works. but appearance synthesis in programmatic environments like doing stuff from javascript etc also need to work and having a single flag that the user must set/clear is ... not good.10:15.19 
  communicating "things have changed, but we don't know just what" with a single boolean wasn't enough10:15.59 
  because that flag was looked at by multiple users, but when/who should clear it?10:16.18 
  we can't clear it when creating an AP, because the viewer still needs to know10:16.29 
  but if there is no viewer to clear it, then we'll keep recreating it forever10:16.37 
  hence the two separate flags10:16.52 
  and I still need to do something similar for forms. I suspect that's where it falls down, communicating the changes from the form field value to the appearance stream10:17.24 
paulgardiner Well it used to work. :-)10:19.05 
tor5 paulgardiner: see the TODO at the top of pdf_update_annot for my quick and dirty hack to make it almost work :)10:19.42 
Robin_Watts tor5: I'm downloading a more up to date raspbian image now, I'll stick that on the SD card and get you access to the pi.10:22.26 
paulgardiner tor5: I've just confirmed that: back with mupdf at commit 4d473e7f6a, I'm getting the updates and not seeing any extraneous ones.10:25.51 
  Ah, also seeing a choice field disappear when altered. Just checked the old version and there is javascript in the file that changes the text color to white and the background to red. We are now losing the red background.10:31.02 
  I'm struggling a little to get how the fragility of the old version is making the new version fail.10:34.50 
tor5 paulgardiner: ah, but we're applying the white text color?10:42.06 
Robin_Watts tor5: Try ssh tor@rjw.ghostscript.com:5555 ?10:42.23 
moolc tor5: 9181fa7617c9a3c481636a68c8206dafd0ebb400 what about irect? quad? tack though10:43.04 
paulgardiner tor5: yeah, not sure why we apply one but not the other. Both got applied back at 4d473e7f6a10:43.12 
tor5 Robin_Watts: ssh: Could not resolve hostname rjw.ghostscript.com:5555: Temporary failure in name resolution10:43.13 
Robin_Watts tor5: Try ssh tor@rjw.ghostscript.com -p 5555 ? :)10:43.31 
tor5 Robin_Watts: d'oh. still, No route to host.10:43.58 
paulgardiner tor5: it's to do with focus. If I click in another field, that one changes to white on red and the previously selected one goes back to black on white.10:44.18 
Robin_Watts Does ping rjw.ghostscript.com work?10:44.21 
tor5 traceroute times out at 86.54.135.7310:44.32 
  oddly enough, ping works10:45.17 
paulgardiner tor5: on a plus note, combed text is working well. :-)10:47.08 
Robin_Watts tor5: Can you reach http://rjw.ghostscript.com:911/ in a browser?10:47.41 
tor5 Robin_Watts: yes. but I can't reach it thourgh ssh from neither my home machine nor via casper10:48.43 
Robin_Watts Maybe it's failing at the NAS forwarding bit?10:49.07 
tor5 Robin_Watts: I suspect it may be, yes10:49.45 
  port 911 gets through, but not port 555510:49.52 
Robin_Watts Try port 22 now ?10:51.14 
tor5 Robin_Watts: I'm in!10:51.36 
Robin_Watts ok, but I'm not happy with port 22 being open :)10:51.53 
  let me try changing it to something else.10:51.59 
tor5 Robin_Watts: understandable, considering how often that gets hammered by port scanners10:52.14 
Robin_Watts Try 345710:52.16 
tor5 Robin_Watts: that worked too10:52.29 
Robin_Watts sorted then.10:52.33 
  That's an aged version of raspbian, but should be OK.10:52.55 
  I can update it if required, but should be enough for timings.10:53.15 
tor5 Robin_Watts: thanks. I'll prod a bit and see if I can get some useful timings out.10:54.30 
  paulgardiner: try top commit of tor/master for the red background thing10:54.39 
paulgardiner ta. will do10:55.02 
moolc Robin_Watts: what Pi version is that? Pi3B+?11:28.17 
sebras moolc: pi2.11:28.48 
moolc sebras: tack11:29.05 
sebras moolc: it might be a pi2b, though. I'm not sure.11:29.16 
moolc sebras: being dissatisfied with odroid i've ordered a pi3b+ and sent an ex-coworker to the states to fetch me one11:30.37 
paulgardiner tor5: thinking back, I don't believe that one flag was being used for multiple purposes. I have some recollection of the annot struct holding both a reference to the current appearance stream plus a version number. Comparing that with the state of the widget object allowed you to tell if either a different appearance stream had been selected or if the same one was in use, but it had changed form.11:38.51 
  tor5: that new commit doesn't seem to fix the red background problem. :-(11:42.47 
tor5 paulgardiner: yeah, there was a version number way back when, but that hasn't been there for quite a number of months.11:43.01 
  paulgardiner: send me the file, I'll take a look.11:43.06 
  not much I can do without it11:43.11 
paulgardiner Okay ta11:43.13 
  I didn't like the version number when I put it in, but it is a mechanism that allows multiple observers to monitor change.11:45.37 
Robin_Watts moolc: Ray has a pi3 which is faster.12:20.01 
  The 3+ is better when multithreading.12:20.13 
  (but takes LOTS more power to do so, apparently. This is only a problem when clustering them).12:20.35 
moolc Robin_Watts: faster than what?12:20.38 
Robin_Watts pi3 is much faster than pi2.12:20.51 
moolc Robin_Watts: ok12:20.57 
tor5 paulgardiner: looking at the file you sent... with mupdf-gl the checkboxes redraw whenever you click, and the text fields update when I change the Value using the annotation editing panel12:21.01 
moolc Robin_Watts: how do you quantify "LOTS more power"?12:21.11 
  how do you measure it?12:21.15 
Robin_Watts like 50% more or something.12:21.27 
tor5 paulgardiner: I trigger a redraw when pdf_pass_event returns true12:21.41 
Robin_Watts It's a big peak power usage increase for a moderate increase in actual performance.12:21.47 
tor5 paulgardiner: maybe at that time, the widgets don't have the dirty flag set correctly?12:21.59 
Robin_Watts Like I say, it's not a problem if you have just one of them, but if you have a bunch of them in an array, it can be a problem.12:22.17 
moolc Robin_Watts: but how do you measure it?12:22.57 
Robin_Watts We were looking at an array of pis to replace/augment our cluster, and that's what the people that made the enclosures told me.12:23.16 
moolc thinks that it might have been good idea to stick with Cavium and work on ThunderX... oh well12:23.26 
Robin_Watts moolc: A meter I guess :)12:23.32 
tor5 paulgardiner: I'm also seeing that has_new_ap is set to true for the checkbox annotation when I click it12:23.46 
moolc Robin_Watts: use a watt meter myself to measure stuff..12:24.25 
  just today i measured how much one of our soviet made fridge consumes...12:24.50 
paulgardiner tor5: I assume it's just some of the dirty flags aren't set correctly. I see updates for radio buttons that are being cleared, but not those being set12:27.33 
tor5 paulgardiner: are you looking at annot->has_new_ap?12:29.43 
  I'm seeing the radio checkboxes clearing and setting the has_new_ap as expected12:30.01 
  (a bit drowned out by the "cannot create appearance stream for Btn widgets" errors though)12:30.24 
paulgardiner Yeah, I'm looking at has_new_ap12:32.18 
tor5 oops. looks like I'm never resetting it.12:32.40 
  okay, if I clear it properly I still see the expected behaviour12:35.29 
  paulgardiner: are you setting has_new_ap = 0 when you've reacted to the change?12:36.00 
  (though that should only cause you to see more updates than necessary, not missing out on them)12:36.16 
paulgardiner Yep. I am resetting it.12:38.23 
tor5 and clicking on checkbox 1 followed by checkbox 2 does NOT tell you this: http://ix.io/1fhv12:40.34 
  that's what I get for each event (where I print the dirty status when adding log calls inside pdf_update_page)12:41.23 
  inside pdf_update_annot I mean, which is called in a loop by pdf_update_page, which I call after having processed the event in my event handler in do_forms()12:42.25 
paulgardiner Is this f1040.pdf?12:45.24 
tor5 yes. the file you emailed em.12:46.25 
  paulgardiner: just looking at the checkboxes/radioboxes12:47.08 
  haven't investigated changing the text fields yet12:47.19 
paulgardiner I don't monitor after press, only after release, but I guess that shouldn't make a difference.12:47.41 
tor5 paulgardiner: yeah. if you miss some pdf_update_page you should still be seing the latest changes12:48.06 
  once you do get around to calling it12:48.16 
  paulgardiner: tor/master has mupdf-gl with added logging12:53.34 
paulgardiner My linux box is headless. Not sure I can do much with mupdf-gl12:54.25 
tor5 paulgardiner: install an X server on your main machine? :)12:54.50 
  glx is a thing...12:54.54 
  or just do a small debian virtualbox VM12:55.08 
Robin_Watts mupdf-gl builds on windows, right?12:55.54 
tor5 I can't reproduce what you're claiming to see... I've got code that works, and I think the easiest way to help is if you look at that and see where it differs.12:56.00 
paulgardiner Okay, but in any case, I'm not sure messing with mupdf-gl will help12:56.00 
tor5 it does.12:56.03 
paulgardiner I mean "my messing with it"12:56.22 
tor5 add the same kind of logging and see where things diverge12:56.22 
paulgardiner Yeah, I'm doing that anyway12:57.12 
  tor5: which check boxes?13:27.45 
  If I click on the checkbox next to "Single", I see 1583, 1588, 1596, 1600, 1605, 1610, 1614, 1618, 1626, 1633, 1640, 1647, 1651 and 1675 dirty.13:38.43 
  Then click on the one next to "Married" and I see the same set accept 1596 is replaced with 1592.13:40.10 
  s/accept/except/13:40.34 
  I cycle fzpages more than in mupdf-gl. That tweaked a bug before, but I thought you'd fixed it.13:42.43 
tor5 paulgardiner: "cycle fzpages"?14:01.49 
paulgardiner destroy and recreate... not between an event and the corresponding update obviously.,14:02.32 
tor5 if you load/reload a page, all bets with tracking annotation dirty states are off.14:02.36 
  paulgardiner: though I expect we can initialize the 'has_new_ap' state to true14:03.20 
paulgardiner That will force a load of updates on the first check, though.14:04.06 
  Surely, it should be clean when created and then show the updates since creation or last test when tested.14:05.03 
tor5 paulgardiner: line 101 in source/pdf/pdf-annot.c14:05.08 
  my tracking expects the annot to stay alive once loaded14:06.17 
  not to be unloaded and recreated.14:06.26 
  if we create new ones with the has_new_ap=1 instead of 0 that *ought* to fix your problem, I believe14:06.44 
paulgardiner But it'll give me unnecessary ones too.14:07.09 
tor5 because then if you unload and reload you'll always be told that it's new (as is to be expected, since it is a new annot)14:07.10 
  then don't free the pdf_annot!14:07.20 
  if you throw away the struct that keeps track of these things for you, what did you expect would happen? :)14:07.42 
paulgardiner That sounds like it makes sense but doesn't. We just need to know about changes between creation and a test, and between tests.14:09.04 
  It all worked just fine before.14:09.11 
tor5 define creation and test, please.14:09.38 
paulgardiner creation being creation of an fzpage. test being a class to update followed by a enumerating the annotations to see which has changed and resetting the flag14:11.18 
tor5 the pdf_annot struct keeps track of transient state that your app cares about, and to delay creating a new AP until a batch of edits to the underlying pdf objects have all gone through (so we don't create one when you set the border, the recreate it when you set the color, then recreate it when you set the date, etc.)14:11.34 
paulgardiner Yep. The old method used to do that too.14:12.20 
tor5 if you throw away the pdf_annot struct mid-transaction (such as doing some edits, freeing the pdf_annot, then loading the annot again, we won't know that the AP needs updating)14:12.23 
paulgardiner I'm not going to throw it away without calling the update method.14:12.50 
tor5 likewise, if you do some edits, the pdf_annot struct keeps track of *both* knowing to create a new AP, and letting the UI know that the AP has changed14:13.07 
  the AP can change for two reasons: either the contents changed and we recreated it, or the button state changed and it points to a different AP14:13.31 
  now, calling the update method syncs the backing pdf_obj, AP, and pdf_annot state.14:14.14 
paulgardiner Yeah. Have you read the last few comments I've made?14:14.31 
tor5 yes.14:15.02 
paulgardiner I know that. And I'm not throwing away between an event that changes something and a call to update.14:15.03 
tor5 so that part should be safe.14:15.05 
  now, if you load a pdf_annot, do some edits and it flags itself as dirty, and you call update to sync the AP with the new edits. then you free it and load it, we've forgotten the flag that should let the UI know that the AP for this annotation is new.14:16.16 
  that flag needs to live somewhere. previously you stowed it into the pdf_obj 'dirty' flag.14:16.38 
paulgardiner But I do all that in one go.14:16.41 
tor5 I've moved it into the pdf_annot struct.14:16.49 
paulgardiner I do the change. I call the update function. I set the UI redrawing. I don't throw away within that sequence14:17.29 
tor5 paulgardiner: then I don't understand your comment "But it'll give me unnecessary ones too."14:19.33 
  if you unload a page, and reload it, then everything will be fresh and that should tell you all annotations are new (since they are, they were just loaded)14:20.07 
  paulgardiner: does your problem persist if you annot->has_new_ap = 0 to 1 in pdf_load_annots?14:21.04 
  paulgardiner: and for clicking the checkboxes, just to make sure we're speaking the same language:14:22.50 
paulgardiner Seems like we have different concepts of what the flags should do. I don't see the need for knowing something is "fresh" in that sense. I just need to know when something has changed. I don't need to know that I just loaded it.14:23.16 
tor5 you a) call pdf_pass_event, b) call pdf_update_page, c) loop through the annots looking for ones with has_new_ap to rerender?14:23.19 
paulgardiner Yep. Same concept there.14:24.02 
tor5 so you do an unconditional render of all annots when you load a page?14:25.49 
  and then on a pdf_pass_event you pdf_update and re-render the changed ones14:26.09 
paulgardiner I haven't been looking at this in terms of PDF, just what an app needs from a render engine. So, I was just thinking I load a page and render it. After that I just need a way to find out what rectangles to rerender when the document changes.14:26.13 
tor5 and then on an edit, you pdf_update_page and re-render th changed ones14:26.21 
  paulgardiner: should be the same basic concept :)14:27.18 
  paulgardiner: though, when an annot is edited and updated, its bbox will likely change14:27.47 
  so you have to remember the old area it used to cover as well as the new one14:28.02 
  can your UI framework do multiply alpha blends?14:28.21 
  if so, then you can render each annotation to a separate texture, and just plain alpha blend on top for most, and multiply blend for highlights.14:28.43 
  texture/pixmap/image/what have you14:28.52 
  or do the blending using mupdf's fz_pixmaps, I can add the few functions you need14:29.13 
  or do the blending yourself to compose a final ui framework texture14:29.41 
paulgardiner I'm still trying to work out what your asking in "so you do an unconditional render..."14:29.54 
tor5 that will definitely be faster when editing pages, since you don't need to rerender the whole backdrop14:30.02 
  "you render all annots (ignoring any dirty flag) when you load a page"14:30.26 
  I thought you were rendering to separate display lists or something like that14:30.40 
  which is what the previous code you wrote for android did :)14:30.55 
  one display list for the page, and a separate display list for each annot, and you recreated the display list when the annot was updated14:31.10 
paulgardiner I'd hope all that was irrelevant to the main point.14:31.35 
  I don't unconditionally render when I load a page. I might be loading a page without any intent to render it. But when I first render a page, to create the first bitmap version of it, I do render it and it's annotations without checking flags. I'd have thought I'd have to because otherwise I'd have annotations completely missing.14:33.31 
  I had also expected to see all the flags clear on loading because no changes have yet been made w.r.t the page I've just loaded14:34.30 
  w.r.t the version of the page I've just loaded.14:35.04 
  I don't see the flag as meaning "you should render this". I see it as meaning "this may be different to how it looked when you first obtained it"14:37.09 
  ... the difference being relevant when you first create a bitmap for a page, or combination of bitmaps to be blended. Then you know to render the lot, without having flags telling you to.14:39.03 
  Does mupdf-gl go through the update and enumerate annotations step when first creating the visuals for a page?14:40.50 
tor5 paulgardiner: yes, that is how the has_new_ap flag is intended. let you know that things have changed since the last time you saw it and it was clear.14:41.20 
  paulgardiner: two questions for you.14:41.54 
  1) how do you track dirty rectangles14:42.00 
  2) regardless of how you answer number 1, how can this possibly affect the handling of has_new_ap?14:42.28 
  I would have assumed that you would need to have some auxiliary list of 'this annot was at this rect before' that you check against when you decide to re-render14:43.06 
paulgardiner What is "this" in Q2?14:43.16 
tor5 since you need to make sure the pixels it used to touch, and the pixels it now touches, are all updated.14:43.19 
  this=tracking dirty rectangles14:43.29 
paulgardiner Then why ask 1?14:43.46 
tor5 curiousity :)14:43.54 
  (sic)14:44.06 
  in mupdf-gl I rerender the whole page (ran into trouble with highlight annotations and my old approach, that I haven't solved yet)14:45.09 
  are you mistracking the dirty regions and that's why you're not seeing the checkboxes clear? that doesn't sound likely, given the list of annots you saw being flagged earlier.14:46.17 
  when I click "Married" I see both 1592 and 1596 with has_new_ap set.14:46.33 
paulgardiner I still don't get your has_new_ap meaning. When you first load a page, you have never seen it before. And there have been no changes since you loaded the page, since you have just loaded it.14:46.43 
tor5 I set has_new_ap to 1 anytime the AP changes, for any reason. this is the cue to the UI to redraw the annotation.14:47.22 
paulgardiner If you look at the list of dirty annotations I posted above, you'll see that there are missing ones... exactly the ones that would cause the visual problem I see14:47.32 
tor5 and I expect you to clear it when you've done whatever you want to do with it.14:47.58 
  mupdf only ever sets it to 114:48.03 
paulgardiner I do.14:48.13 
tor5 mupdf-gl does not see that whole list of has_new_ap annots14:48.45 
paulgardiner Yes. When I click Married I don't get both those. See above.14:48.50 
tor5 with tor/master (and without the change I asked you to test in pdf_load_annots, forget about that one)14:49.01 
paulgardiner Yeah. I haven't tried that change14:49.33 
tor5 I load the document, render the page, *none* of the annots have has_new_ap set.14:49.39 
  I click "Single", and I rerender, and it says 1592 has a new ap14:49.56 
  I click "Married", and I rerender, and it says 1592 and 1596 have new aps14:50.09 
  nothing else is dirty.14:50.15 
  ever.14:50.17 
  this is with the code on tor/master now14:50.47 
paulgardiner I thought you said you set the flag when you first load the page.14:51.12 
tor5 the penultimate commit might be what's causing you to see the others as being dirty (having failed to create a new ap the flag is set anyway)14:51.12 
  I don't. I asked you to test if that was the problem, when you worried me about saying that you cycle pages.14:51.31 
  the change I asked you to do was to *set the flag when you first load the page* :)14:51.57 
  in case that was the problem. since you talked about cycling pages.14:52.07 
paulgardiner Bah! About my last half hour of comments have been arguing against setting the flag when you first load an annot.14:52.25 
tor5 Sorry. Did I slip on the keyboard and omit a "not" somewhere? :)14:54.52 
paulgardiner I may have misread.14:55.07 
  Okay, so the intended behaviour is exactly what I want.14:55.30 
tor5 Good. Now to figure out why you're not seeing the same behaviour as mupdf-gl.14:57.45 
paulgardiner So presumably you must unconditionally render all the annots on very first render too?14:58.15 
tor5 paulgardiner: I render everything all the time; but I did add logging to check which annots were dirty in the top commit on tor/master14:58.43 
paulgardiner I've put the same logging in my loop, but my loop isn't responsible for rendering: it just creates a set of rectangles of which to request rerender, and my loop gets called only after some operation that may change the document.15:01.11 
  tor5: presumably mupdf-gl has javascript enabled?15:05.03 
tor5 paulgardiner: yes. and it can fill in text widgets using the annotation editing panel as well.15:05.39 
paulgardiner I'm looking forward to playing with editing panel.15:06.05 
tor5 paulgardiner: it builds and works on windows, if you have that.15:06.21 
  anyway, I've got to go away for a couple of hours.15:06.45 
paulgardiner By playing, I more meant using it within muso15:06.47 
tor5 will check back15:06.52 
  paulgardiner: ah, right.15:06.59 
paulgardiner tor5: okay thanks. catch you later.15:07.06 
 Forward 1 day (to 2018/06/29)>>> 
ghostscript.com #ghostscript
Search: