From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pip Cet Subject: Re: Showing Property in headline; generating table from properties; exporting table to CSV Date: Fri, 7 Aug 2015 16:41:21 +0000 Message-ID: References: <87k2t8k64x.fsf@ucl.ac.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=089e015380425078e1051cbb4e6d Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:58702) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZNkhx-0007dj-9O for emacs-orgmode@gnu.org; Fri, 07 Aug 2015 12:41:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZNkhu-00030t-Q2 for emacs-orgmode@gnu.org; Fri, 07 Aug 2015 12:41:25 -0400 Received: from mail-ig0-x236.google.com ([2607:f8b0:4001:c05::236]:35873) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZNkhu-00030j-Gh for emacs-orgmode@gnu.org; Fri, 07 Aug 2015 12:41:22 -0400 Received: by igbij6 with SMTP id ij6so34549038igb.1 for ; Fri, 07 Aug 2015 09:41:22 -0700 (PDT) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: John Kitchin Cc: Org Mode --089e015380425078e1051cbb4e6d Content-Type: text/plain; charset=UTF-8 I hesitate to share this code (it's not very pretty right now), but I have been working on two ideas that I think combine to solve problems like this in a nicer (and lazier) fashion than the current approach: headline properties and reverse inheritance. Headline properties are simply about setting properties in the headline: no properties drawer, potentially nicer syntax (I'm currently using :property=value: to emphasize that properties behave like tags, but I'm thinking of moving to [property: value] (I'm worried about collisions with other org syntax, but since this would be effective only at the end of a headline, I think the only collision is with footnotes, and the solution to that is "don't have a property called FN")), and easier transition from tags to properties and back. The problem, of course, is what happens when you try to set more than one short property in a headline. This is where the second idea comes in: reverse inheritance. *if* all of a headline's children agree on what a property's value should be, it's as though the property were specified in the master headline. In particular, if there's only one child headline that sets a property, it automatically migrates up a level: * John Smith ** :email=johnsmith@example.com: would migrate up the "email" property to apply to the top-level headline, so columns view would look something like this: ITEM | EMAIL | * John Smith | johnsmith@example.com | .... (this example doesn't quite work yet in practice, with my current code). If there are two conflicting values for a property, the property is not set. This is so * Students ** John Smith *** email :email=johnsmith@example.com: ** Jane Miller *** email :email=janemiller@example.org: doesn't set an email property for the "Students" line (if there's just one student, with just one email address, there's probably no harm in having that property set for the Students line. Also, in that case, you have an attendance problem.) In combination, the syntax I currently have in mind would allow you to set properties one at a time in sub-headlines of your data item: * Chemicals ** water *** [smiles: O] According to Wikipedia. *** [molarmass: 18.01528] Also according to Wikipedia. *** [safety: GRAS] I think. (Notice how that gives you a well-defined place to put comments and footnotes, which I imagine is useful if you need to have citable references for your properties. I think you can currently place such comments in the PROPERTIES drawer, but then they probably won't be exported.) What if the master headline already sets the property? There are two cases here: in case it's set to an ordinary value, the child headlines are ignored. But if it's set to a special value signifying that a "compactor" function is to be used, that function is called to produce the property value for the headline based on the child nodes. In the simplest case, that means the property is set to something like "mean(^)" (again, that syntax is likely to change to something prettier), and the result of * calculate this for me :v=mean(^): ** 3 :v=3: ** 4 :v=4: ** 6 :v=6: is as though you'd written * calculate this for me :v=4.3333: and so on (It's possible to do something very much like this with the columns property; I'm not claiming it's a new feature.) Ordinary inheritance, reverse inheritance, and compaction can be combined: #+COLUMNS: %ITEM %8GRADE %TAGS * Document ** defaults *** default to compacting with the arithmetic mean function :grade=mean(^): *** student grades **** 1999 ***** John Smith ****** test paper 1 :grade=3: ****** test paper 2 :grade=4: will work, and with column mode produce the output attached as students2.org.html. Note that "3.5" is John Smith's grade, the average of all students' grades in 1999, and the average grade averaged over all years. I've attached a more complete example as students.org/students.org.html that demonstrates how the mean is calculated. I think people can imagine what the columns view would be with some of the sub-headline levels hidden, but I'd like to point out both that it does give you a really nice list of students with their grades and that there's a potential problem with missing tests: there's no default to a grade of 0 for them, so you have to be careful when entering them to distinguish between a 0-graded missed test and a test that's simply ignored for the average grade. Currently the code for calculating the reverse inheritance is working, but really slow (it doesn't cache calculations at all, so it's probably something like O(n^3)); I don't have special code for displaying the results yet, but columns mode followed by org-htmlize-buffer produced the attached HTML files. At this point, this is just to demonstrate the ideas; while I think the two ideas in combination apply well to the student-grade problem set, I've actually implemented them for use in a literate programming major mode. I'd appreciate any comments (but I know the code isn't particularly clean, fast, or anywhere near ready for inclusion right now), particularly on the syntax questions: 1. what's a good syntax for setting properties in a headline? - ** headline [property=value] ** headline [property:value] - ** headline [[property: value]] - ** headline :property=value: - something else entirely 2. what's a good syntax for specifying that a property is to be calculated from child properties? - ** headline [property:=mean(property)] - ** headline [property=mean(^)] - ** headline :property==mean(^): - something else entirely 3. is it useful to align properties to the right border like tags are currently aligned? I must admit I don't particularly like the visuals of that, but it would be handy for looking over your students' grades... Sorry that this post has gotten somewhat long and self-promoting, but I really think the current PROPERTIES drawer syntax is very ugly and unnecessary, so we should do _something_ about it. Look at the code: https://github.com/pipcet/org-mode/compare/master...pipcet:compact-properties?expand=1 Check out the code: git clone -b compact-properties https://github.com/pipcet/org-mode.git On Thu, Aug 6, 2015 at 2:19 PM, John Kitchin wrote: > All my gradebook related stuff is here: > https://github.com/jkitchin/jmax/tree/master/techela, and there is a lot > of it ;) > > I have a whole ecosystem built around using git through emacs and > org-mode with my students, which at this point even I find complex! > > For grading, I grade directly in the student's turned in org-file using > functions from here > https://github.com/jkitchin/jmax/blob/master/techela/techela-grade.el. I > define a minor-mode with a keymap to make grade entry, commenting, > etc... relatively easy for me. The grades are weighted by different > categories, and saved as a filetag (not a property). I tend to put one > problem per file so the grade is just for the one problem, and assign > 2-3 of these per week. > > For gradebook stuff, most of it is here: > https://github.com/jkitchin/jmax/blob/master/techela/techela-gradebook.el > > The grades are stored in the student org-files which I return to them. I > lookup all the assignments from the syllabus, and then map over the > org-files for each student for each assignment getting the grades out. > > I will be using it again this fall, so /maybe/ the documentation will > even improve ;) > > Matt Price writes: > >> On Thu, Aug 6, 2015 at 9:13 AM, John Kitchin >> wrote: >> >>> How do you enter your grade? I use a function, bound to a convenient key >>> like s-s g, which sets the grade property. You could have that function >>> change the heading TODO state to DONE so you know it is done, and maybe >>> add a tag with the grade, or just append the grade on the end of the >>> headline. >>> >> >> I just set the grade with "C- C-x p GRADE", too slow! I would love to see >> your function though I can doubtless at least write THAT myself. Yeas, then >> having that same function change the todo state (to "READY" in my case -- I >> change to "DONE when I email out the comments), would make a lot of sense. >> >> Adding the grade as a tag doesn't seem quite right, as I often change >> grades after a rewrite. I'd need to get rid of the original tag. Adding >> to the headline might work, but I'd have to change some of my existing >> functions which use the headline value as a proxy for the student name. >> Could definitely be done. > > see previous email about using overlays > >> >>> >>> I also use a function that runs org-map-entries and constructs a >>> temporary gradebook as an org-table in a new buffer. >>> >> >> please please show us? Thank you! >> >> >> >>> >>> Eric S Fraga writes: >>> >>> > On Thursday, 6 Aug 2015 at 07:24, Matt Price wrote: >>> > >>> > [...] >>> > >>> >> - I currently store my grades as properties of level-2 headlines. >>> However, >>> >> I would really like to be able to see the grades when the headline is >>> >> folded, so I can have a quick visual sense of how many papers I've >>> marked, >>> > >>> > I would like something like this as well. The nearest I have found is >>> > to use column view. >>> >>> -- >>> Professor John Kitchin >>> Doherty Hall A207F >>> Department of Chemical Engineering >>> Carnegie Mellon University >>> Pittsburgh, PA 15213 >>> 412-268-7803 >>> @johnkitchin >>> http://kitchingroup.cheme.cmu.edu >>> > > -- > Professor John Kitchin > Doherty Hall A207F > Department of Chemical Engineering > Carnegie Mellon University > Pittsburgh, PA 15213 > 412-268-7803 > @johnkitchin > http://kitchingroup.cheme.cmu.edu > --089e015380425078e1051cbb4e6d Content-Type: text/html; charset=US-ASCII; name="students.org.html" Content-Disposition: attachment; filename="students.org.html" Content-Transfer-Encoding: base64 X-Attachment-Id: f_id1uzcqu0 PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIj4KPCEtLSBD cmVhdGVkIGJ5IGh0bWxpemUtMS40NyBpbiBjc3MgbW9kZS4gLS0+CjxodG1sPgogIDxoZWFkPgog ICAgPHRpdGxlPnN0dWRlbnRzLm9yZzwvdGl0bGU+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3Mi PgogICAgPCEtLQogICAgICBib2R5IHsKICAgICAgICBjb2xvcjogIzAwMDAwMDsKICAgICAgICBi YWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwogICAgICB9CiAgICAgIC5BVFRSTElTVCB7CiAgICAg IH0KICAgICAgLkFUVFJMSVNULTEgewogICAgICB9CiAgICAgIC5vcmctY29sdW1uIHsKICAgICAg ICAvKiBvcmctY29sdW1uICovCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1ZTVlNTsKICAg ICAgfQogICAgICAub3JnLWxldmVsLTEgewogICAgICAgIC8qIG9yZy1sZXZlbC0xICovCiAgICAg ICAgY29sb3I6ICMwMDAwZmY7CiAgICAgIH0KICAgICAgLm9yZy1sZXZlbC0yIHsKICAgICAgICAv KiBvcmctbGV2ZWwtMiAqLwogICAgICAgIGNvbG9yOiAjYTA1MjJkOwogICAgICB9CiAgICAgIC5v cmctbGV2ZWwtMyB7CiAgICAgICAgLyogb3JnLWxldmVsLTMgKi8KICAgICAgICBjb2xvcjogI2Ew MjBmMDsKICAgICAgfQogICAgICAub3JnLWxldmVsLTQgewogICAgICAgIC8qIG9yZy1sZXZlbC00 ICovCiAgICAgICAgY29sb3I6ICNiMjIyMjI7CiAgICAgIH0KICAgICAgLm9yZy1tZXRhLWxpbmUg ewogICAgICAgIC8qIG9yZy1tZXRhLWxpbmUgKi8KICAgICAgICBjb2xvcjogI2IyMjIyMjsKICAg ICAgfQogICAgICAub3JnLXRhZyB7CiAgICAgICAgLyogb3JnLXRhZyAqLwogICAgICAgIGZvbnQt d2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIC5zZWNvbmRhcnktc2VsZWN0aW9uIHsKICAgICAg ICAvKiBzZWNvbmRhcnktc2VsZWN0aW9uICovCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Zm ZmYwMDsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAg YmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBmb250OiBpbmhlcml0OwogICAgICAg IHRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDsKICAgICAgfQogICAgICBhOmhvdmVyIHsKICAgICAg ICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgLS0+CiAgICA8L3N0eWxl PgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxwcmU+CjxzcGFuIGNsYXNzPSJvcmctbWV0YS1saW5l Ij4jK0NPTFVNTlM6ICVJVEVNICU4R1JBREUgJVRBR1M8L3NwYW4+CiogU3R1ZGVudCBncmFkZXMg IHwgPHNwYW4gY2xhc3M9Im9yZy1sZXZlbC0xIj48c3BhbiBjbGFzcz0iQVRUUkxJU1QtMSI+PHNw YW4gY2xhc3M9IkFUVFJMSVNUIj48c3BhbiBjbGFzcz0ib3JnLWNvbHVtbiI+PHNwYW4gY2xhc3M9 Im9yZy1sZXZlbC0xIj41LjQxNjYuLiB8IDpncmFkZT1tZWFuKF4pOiB8IDwvc3Bhbj48L3NwYW4+ PC9zcGFuPjwvc3Bhbj48L3NwYW4+CioqIGNsYXNzIG9mIDE5OTkgIHwgPHNwYW4gY2xhc3M9Im9y Zy1sZXZlbC0yIj48c3BhbiBjbGFzcz0iQVRUUkxJU1QtMSI+PHNwYW4gY2xhc3M9IkFUVFJMSVNU Ij48c3BhbiBjbGFzcz0ib3JnLWNvbHVtbiI+PHNwYW4gY2xhc3M9Im9yZy1sZXZlbC0yIj40LjUg ICAgICB8ICAgICAgICAgICAgICAgICB8IDwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3Nw YW4+CioqKiBKb2huIFNtaXRoICAgIHwgPHNwYW4gY2xhc3M9Im9yZy1sZXZlbC0zIj48c3BhbiBj bGFzcz0iQVRUUkxJU1QtMSI+PHNwYW4gY2xhc3M9IkFUVFJMSVNUIj48c3BhbiBjbGFzcz0ib3Jn LWNvbHVtbiI+PHNwYW4gY2xhc3M9Im9yZy1sZXZlbC0zIj40LjUgICAgICB8ICAgICAgICAgICAg ICAgICB8IDwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+CioqKiogdGVzdCBwYXBl ciAxIHwgPHNwYW4gY2xhc3M9Im9yZy1sZXZlbC00Ij48c3BhbiBjbGFzcz0iQVRUUkxJU1QtMSI+ PHNwYW4gY2xhc3M9IkFUVFJMSVNUIj48c3BhbiBjbGFzcz0ib3JnLWNvbHVtbiI+PHNwYW4gY2xh c3M9Im9yZy1sZXZlbC00Ij40LjAgICAgICB8IDpncmFkZT00OiAgICAgICB8IDwvc3Bhbj48L3Nw YW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+CioqKiogdGVzdCBwYXBlciAyIHwgPHNwYW4gY2xhc3M9 Im9yZy1sZXZlbC00Ij48c3BhbiBjbGFzcz0iQVRUUkxJU1QtMSI+PHNwYW4gY2xhc3M9IkFUVFJM SVNUIj48c3BhbiBjbGFzcz0ib3JnLWNvbHVtbiI+PHNwYW4gY2xhc3M9Im9yZy1sZXZlbC00Ij41 LjAgICAgICB8IDpncmFkZT01OiAgICAgICB8IDwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48 L3NwYW4+CioqIGNsYXNzIG9mIDIwMDAgIHwgPHNwYW4gY2xhc3M9Im9yZy1sZXZlbC0yIj48c3Bh biBjbGFzcz0iQVRUUkxJU1QtMSI+PHNwYW4gY2xhc3M9IkFUVFJMSVNUIj48c3BhbiBjbGFzcz0i b3JnLWNvbHVtbiI+PHNwYW4gY2xhc3M9Im9yZy1sZXZlbC0yIj42LjMzMzMuLiB8ICAgICAgICAg ICAgICAgICB8IDwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+CioqKiBKb2huIFNt aXRoICAgIHwgPHNwYW4gY2xhc3M9Im9yZy1sZXZlbC0zIj48c3BhbiBjbGFzcz0iQVRUUkxJU1Qt MSI+PHNwYW4gY2xhc3M9IkFUVFJMSVNUIj48c3BhbiBjbGFzcz0ib3JnLWNvbHVtbiI+PHNwYW4g Y2xhc3M9Im9yZy1sZXZlbC0zIj43LjUgICAgICB8ICAgICAgICAgICAgICAgICB8IDwvc3Bhbj48 L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+CioqKiogdGVzdCBwYXBlciAxIHwgPHNwYW4gY2xh c3M9Im9yZy1sZXZlbC00Ij48c3BhbiBjbGFzcz0iQVRUUkxJU1QtMSI+PHNwYW4gY2xhc3M9IkFU VFJMSVNUIj48c3BhbiBjbGFzcz0ib3JnLWNvbHVtbiI+PHNwYW4gY2xhc3M9Im9yZy1sZXZlbC00 Ij44LjAgICAgICB8IDpncmFkZT04OiAgICAgICB8IDwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bh bj48L3NwYW4+CioqKiogdGVzdCBwYXBlciAyIHwgPHNwYW4gY2xhc3M9Im9yZy1sZXZlbC00Ij48 c3BhbiBjbGFzcz0iQVRUUkxJU1QtMSI+PHNwYW4gY2xhc3M9IkFUVFJMSVNUIj48c3BhbiBjbGFz cz0ib3JnLWNvbHVtbiI+PHNwYW4gY2xhc3M9Im9yZy1sZXZlbC00Ij43LjAgICAgICB8IDpncmFk ZT03OiAgICAgICB8IDwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+CioqKiBKb2Fu IE1pbGxlciAgIHwgPHNwYW4gY2xhc3M9Im9yZy1sZXZlbC0zIj48c3BhbiBjbGFzcz0iQVRUUkxJ U1QtMSI+PHNwYW4gY2xhc3M9IkFUVFJMSVNUIj48c3BhbiBjbGFzcz0ib3JnLWNvbHVtbiI+PHNw YW4gY2xhc3M9Im9yZy1sZXZlbC0zIj45LjUgICAgICB8ICAgICAgICAgICAgICAgICB8IDwvc3Bh bj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+CioqKiogdGVzdCBwYXBlciAxIHwgPHNwYW4g Y2xhc3M9Im9yZy1sZXZlbC00Ij48c3BhbiBjbGFzcz0iQVRUUkxJU1QtMSI+PHNwYW4gY2xhc3M9 IkFUVFJMSVNUIj48c3BhbiBjbGFzcz0ib3JnLWNvbHVtbiI+PHNwYW4gY2xhc3M9Im9yZy1sZXZl bC00Ij45LjAgICAgICB8IDpncmFkZT05OiAgICAgICB8IDwvc3Bhbj48L3NwYW4+PC9zcGFuPjwv c3Bhbj48L3NwYW4+CioqKiogdGVzdCBwYXBlciAyIHwgPHNwYW4gY2xhc3M9Im9yZy1sZXZlbC00 Ij48c3BhbiBjbGFzcz0iQVRUUkxJU1QtMSI+PHNwYW4gY2xhc3M9IkFUVFJMSVNUIj48c3BhbiBj bGFzcz0ib3JnLWNvbHVtbiI+PHNwYW4gY2xhc3M9Im9yZy1sZXZlbC00Ij4xMC4wICAgICB8IDpn cmFkZT0xMDogICAgICB8IDwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+CioqKiBT dGV2ZW4gU21pdGggIHwgPHNwYW4gY2xhc3M9Im9yZy1sZXZlbC0zIj48c3BhbiBjbGFzcz0iQVRU UkxJU1QtMSI+PHNwYW4gY2xhc3M9IkFUVFJMSVNUIj48c3BhbiBjbGFzcz0ib3JnLWNvbHVtbiI+ PHNwYW4gY2xhc3M9Im9yZy1sZXZlbC0zIj4yLjAgICAgICB8ICAgICAgICAgICAgICAgICB8IDwv c3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+CioqKiogdGVzdCBwYXBlciAxIHwgPHNw YW4gY2xhc3M9Im9yZy1sZXZlbC00Ij48c3BhbiBjbGFzcz0iQVRUUkxJU1QtMSI+PHNwYW4gY2xh c3M9IkFUVFJMSVNUIj48c3BhbiBjbGFzcz0ib3JnLWNvbHVtbiI+PHNwYW4gY2xhc3M9Im9yZy1s ZXZlbC00Ij4yLjAgICAgICB8IDpncmFkZT0yOiAgICAgICB8IDwvc3Bhbj48L3NwYW4+PC9zcGFu Pjwvc3Bhbj48L3NwYW4+Cgo8L3ByZT4KICA8L2JvZHk+CjwvaHRtbD4K --089e015380425078e1051cbb4e6d Content-Type: text/html; charset=US-ASCII; name="students2.org.html" Content-Disposition: attachment; filename="students2.org.html" Content-Transfer-Encoding: base64 X-Attachment-Id: f_id1uzh6t1 PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIj4KPCEtLSBD cmVhdGVkIGJ5IGh0bWxpemUtMS40NyBpbiBjc3MgbW9kZS4gLS0+CjxodG1sPgogIDxoZWFkPgog ICAgPHRpdGxlPnN0dWRlbnRzMi5vcmc8L3RpdGxlPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3Nz Ij4KICAgIDwhLS0KICAgICAgYm9keSB7CiAgICAgICAgY29sb3I6ICMwMDAwMDA7CiAgICAgICAg YmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgfQogICAgICAuQVRUUkxJU1QgewogICAg ICB9CiAgICAgIC5BVFRSTElTVC0xIHsKICAgICAgfQogICAgICAub3JnLWNvbHVtbiB7CiAgICAg ICAgLyogb3JnLWNvbHVtbiAqLwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTU7CiAg ICAgIH0KICAgICAgLm9yZy1sZXZlbC0xIHsKICAgICAgICAvKiBvcmctbGV2ZWwtMSAqLwogICAg ICAgIGNvbG9yOiAjMDAwMGZmOwogICAgICB9CiAgICAgIC5vcmctbGV2ZWwtMiB7CiAgICAgICAg Lyogb3JnLWxldmVsLTIgKi8KICAgICAgICBjb2xvcjogI2EwNTIyZDsKICAgICAgfQogICAgICAu b3JnLWxldmVsLTMgewogICAgICAgIC8qIG9yZy1sZXZlbC0zICovCiAgICAgICAgY29sb3I6ICNh MDIwZjA7CiAgICAgIH0KICAgICAgLm9yZy1sZXZlbC00IHsKICAgICAgICAvKiBvcmctbGV2ZWwt NCAqLwogICAgICAgIGNvbG9yOiAjYjIyMjIyOwogICAgICB9CiAgICAgIC5vcmctbGV2ZWwtNSB7 CiAgICAgICAgLyogb3JnLWxldmVsLTUgKi8KICAgICAgICBjb2xvcjogIzIyOGIyMjsKICAgICAg fQogICAgICAub3JnLW1ldGEtbGluZSB7CiAgICAgICAgLyogb3JnLW1ldGEtbGluZSAqLwogICAg ICAgIGNvbG9yOiAjYjIyMjIyOwogICAgICB9CiAgICAgIC5vcmctdGFnIHsKICAgICAgICAvKiBv cmctdGFnICovCiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLnNlY29u ZGFyeS1zZWxlY3Rpb24gewogICAgICAgIC8qIHNlY29uZGFyeS1zZWxlY3Rpb24gKi8KICAgICAg ICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZjAwOwogICAgICB9CgogICAgICBhIHsKICAgICAgICBj b2xvcjogaW5oZXJpdDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAg IGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0OwogICAgICB9 CiAgICAgIGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAg ICB9CiAgICAtLT4KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHByZT4KPHNw YW4gY2xhc3M9Im9yZy1tZXRhLWxpbmUiPiMrQ09MVU1OUzogJUlURU0gJThHUkFERSAlVEFHUzwv c3Bhbj4KKiBEb2N1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCA8c3BhbiBjbGFzcz0ib3JnLWxldmVsLTEiPjxzcGFuIGNsYXNzPSJBVFRSTElT VC0xIj48c3BhbiBjbGFzcz0iQVRUUkxJU1QiPjxzcGFuIGNsYXNzPSJvcmctY29sdW1uIj48c3Bh biBjbGFzcz0ib3JnLWxldmVsLTEiPiAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgPC9zcGFu Pjwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj4KKiogZGVmYXVsdHMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA8c3BhbiBjbGFzcz0ib3JnLWxldmVs LTIiPjxzcGFuIGNsYXNzPSJBVFRSTElTVC0xIj48c3BhbiBjbGFzcz0iQVRUUkxJU1QiPjxzcGFu IGNsYXNzPSJvcmctY29sdW1uIj48c3BhbiBjbGFzcz0ib3JnLWxldmVsLTIiPiAgICAgICAgIHwg ICAgICAgICAgICAgICAgIHwgPC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj4KKioq IGRlZmF1bHQgdG8gY29tcGFjdGluZyB3aXRoIHRoZSBhcml0aG1ldGljIG1lYW4gZnVuY3Rpb24g fCA8c3BhbiBjbGFzcz0ib3JnLWxldmVsLTMiPjxzcGFuIGNsYXNzPSJBVFRSTElTVC0xIj48c3Bh biBjbGFzcz0iQVRUUkxJU1QiPjxzcGFuIGNsYXNzPSJvcmctY29sdW1uIj48c3BhbiBjbGFzcz0i b3JnLWxldmVsLTMiPiAgICAgICAgIHwgOmdyYWRlPW1lYW4oXik6IHwgPC9zcGFuPjwvc3Bhbj48 L3NwYW4+PC9zcGFuPjwvc3Bhbj4KKiogc3R1ZGVudCBncmFkZXMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCA8c3BhbiBjbGFzcz0ib3JnLWxldmVsLTIiPjxzcGFu IGNsYXNzPSJBVFRSTElTVC0xIj48c3BhbiBjbGFzcz0iQVRUUkxJU1QiPjxzcGFuIGNsYXNzPSJv cmctY29sdW1uIj48c3BhbiBjbGFzcz0ib3JnLWxldmVsLTIiPjMuNSAgICAgIHwgICAgICAgICAg ICAgICAgIHwgPC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj4KKioqIDE5OTkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA8c3BhbiBj bGFzcz0ib3JnLWxldmVsLTMiPjxzcGFuIGNsYXNzPSJBVFRSTElTVC0xIj48c3BhbiBjbGFzcz0i QVRUUkxJU1QiPjxzcGFuIGNsYXNzPSJvcmctY29sdW1uIj48c3BhbiBjbGFzcz0ib3JnLWxldmVs LTMiPjMuNSAgICAgIHwgICAgICAgICAgICAgICAgIHwgPC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9z cGFuPjwvc3Bhbj4KKioqKiBKb2huIFNtaXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCA8c3BhbiBjbGFzcz0ib3JnLWxldmVsLTQiPjxzcGFuIGNsYXNzPSJB VFRSTElTVC0xIj48c3BhbiBjbGFzcz0iQVRUUkxJU1QiPjxzcGFuIGNsYXNzPSJvcmctY29sdW1u Ij48c3BhbiBjbGFzcz0ib3JnLWxldmVsLTQiPjMuNSAgICAgIHwgICAgICAgICAgICAgICAgIHwg PC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj4KKioqKiogdGVzdCBwYXBlciAxICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA8c3BhbiBjbGFzcz0ib3Jn LWxldmVsLTUiPjxzcGFuIGNsYXNzPSJBVFRSTElTVC0xIj48c3BhbiBjbGFzcz0iQVRUUkxJU1Qi PjxzcGFuIGNsYXNzPSJvcmctY29sdW1uIj48c3BhbiBjbGFzcz0ib3JnLWxldmVsLTUiPjMuMCAg ICAgIHwgOmdyYWRlPTM6ICAgICAgIHwgPC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bh bj4KKioqKiogdGVzdCBwYXBlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCA8c3BhbiBjbGFzcz0ib3JnLWxldmVsLTUiPjxzcGFuIGNsYXNzPSJBVFRSTElTVC0x Ij48c3BhbiBjbGFzcz0iQVRUUkxJU1QiPjxzcGFuIGNsYXNzPSJvcmctY29sdW1uIj48c3BhbiBj bGFzcz0ib3JnLWxldmVsLTUiPjQuMCAgICAgIHwgOmdyYWRlPTQ6ICAgICAgIHwgPC9zcGFuPjwv c3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3ByZT4KICA8L2JvZHk+CjwvaHRtbD4K --089e015380425078e1051cbb4e6d Content-Type: application/octet-stream; name="students.org" Content-Disposition: attachment; filename="students.org" Content-Transfer-Encoding: base64 X-Attachment-Id: f_id1uzqq82 IytDT0xVTU5TOiAlSVRFTSAlOEdSQURFICVUQUdTCiogU3R1ZGVudCBncmFkZXMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmdyYWRlPW1lYW4oXik6CioqIGNs YXNzIG9mIDE5OTkKKioqIEpvaG4gU21pdGgKKioqKiB0ZXN0IHBhcGVyIDEgOmdyYWRlPTQ6Cioq KiogdGVzdCBwYXBlciAyIDpncmFkZT01OgoqKiBjbGFzcyBvZiAyMDAwCioqKiBKb2huIFNtaXRo CioqKiogdGVzdCBwYXBlciAxIDpncmFkZT04OgoqKioqIHRlc3QgcGFwZXIgMiA6Z3JhZGU9NzoK KioqIEpvYW4gTWlsbGVyCioqKiogdGVzdCBwYXBlciAxIDpncmFkZT05OgoqKioqIHRlc3QgcGFw ZXIgMiA6Z3JhZGU9MTA6CioqKiBTdGV2ZW4gU21pdGgKKioqKiB0ZXN0IHBhcGVyIDEgOmdyYWRl PTI6Cg== --089e015380425078e1051cbb4e6d--