From a8a06ed07b6e69bd1e88ef59f997229e25a0d78c Mon Sep 17 00:00:00 2001 From: naruse Date: Tue, 9 Aug 2016 06:44:45 +0000 Subject: * ext/tk: Tk is removed from stdlib. [Feature #8539] https://github.com/ruby/tk is the new upstream. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55844 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/tk/sample/24hr_clock.rb | 287 -- ext/tk/sample/binding_sample.rb | 88 - ext/tk/sample/bindtag_sample.rb | 128 - ext/tk/sample/binstr_usage.rb | 46 - ext/tk/sample/btn_with_frame.rb | 21 - ext/tk/sample/cd_timer.rb | 82 - ext/tk/sample/cmd_res_test.rb | 18 - ext/tk/sample/cmd_resource | 5 - ext/tk/sample/demos-en/ChangeLog | 64 - ext/tk/sample/demos-en/ChangeLog.prev | 9 - ext/tk/sample/demos-en/README | 138 - ext/tk/sample/demos-en/README.1st | 18 - ext/tk/sample/demos-en/README.tkencoding | 29 - ext/tk/sample/demos-en/anilabel.rb | 175 -- ext/tk/sample/demos-en/aniwave.rb | 119 - ext/tk/sample/demos-en/arrow.rb | 250 -- ext/tk/sample/demos-en/bind.rb | 128 - ext/tk/sample/demos-en/bitmap.rb | 76 - ext/tk/sample/demos-en/browse1 | 63 - ext/tk/sample/demos-en/browse2 | 82 - ext/tk/sample/demos-en/button.rb | 85 - ext/tk/sample/demos-en/check.rb | 73 - ext/tk/sample/demos-en/check2.rb | 110 - ext/tk/sample/demos-en/clrpick.rb | 88 - ext/tk/sample/demos-en/colors.rb | 159 -- ext/tk/sample/demos-en/combo.rb | 97 - ext/tk/sample/demos-en/cscroll.rb | 137 - ext/tk/sample/demos-en/ctext.rb | 208 -- ext/tk/sample/demos-en/dialog1.rb | 39 - ext/tk/sample/demos-en/dialog2.rb | 42 - ext/tk/sample/demos-en/doc.org/README | 7 - ext/tk/sample/demos-en/doc.org/README.JP | 14 - ext/tk/sample/demos-en/doc.org/README.tk80 | 46 - ext/tk/sample/demos-en/doc.org/license.terms | 39 - ext/tk/sample/demos-en/doc.org/license.terms.tk80 | 39 - ext/tk/sample/demos-en/entry1.rb | 59 - ext/tk/sample/demos-en/entry2.rb | 94 - ext/tk/sample/demos-en/entry3.rb | 221 -- ext/tk/sample/demos-en/filebox.rb | 103 - ext/tk/sample/demos-en/floor.rb | 1724 ------------ ext/tk/sample/demos-en/floor2.rb | 1723 ------------ ext/tk/sample/demos-en/form.rb | 65 - ext/tk/sample/demos-en/goldberg.rb | 2007 -------------- ext/tk/sample/demos-en/hello | 14 - ext/tk/sample/demos-en/hscale.rb | 76 - ext/tk/sample/demos-en/icon.rb | 106 - ext/tk/sample/demos-en/image1.rb | 66 - ext/tk/sample/demos-en/image2.rb | 108 - ext/tk/sample/demos-en/image3.rb | 126 - ext/tk/sample/demos-en/items.rb | 382 --- ext/tk/sample/demos-en/ixset | 333 --- ext/tk/sample/demos-en/ixset2 | 367 --- ext/tk/sample/demos-en/knightstour.rb | 272 -- ext/tk/sample/demos-en/label.rb | 73 - ext/tk/sample/demos-en/labelframe.rb | 96 - ext/tk/sample/demos-en/mclist.rb | 118 - ext/tk/sample/demos-en/menu.rb | 197 -- ext/tk/sample/demos-en/menu84.rb | 216 -- ext/tk/sample/demos-en/menubu.rb | 238 -- ext/tk/sample/demos-en/msgbox.rb | 91 - ext/tk/sample/demos-en/msgbox2.rb | 92 - ext/tk/sample/demos-en/paned1.rb | 48 - ext/tk/sample/demos-en/paned2.rb | 95 - ext/tk/sample/demos-en/pendulum.rb | 241 -- ext/tk/sample/demos-en/plot.rb | 125 - ext/tk/sample/demos-en/puzzle.rb | 135 - ext/tk/sample/demos-en/radio.rb | 87 - ext/tk/sample/demos-en/radio2.rb | 110 - ext/tk/sample/demos-en/radio3.rb | 118 - ext/tk/sample/demos-en/rmt | 268 -- ext/tk/sample/demos-en/rolodex | 320 --- ext/tk/sample/demos-en/ruler.rb | 206 -- ext/tk/sample/demos-en/sayings.rb | 107 - ext/tk/sample/demos-en/search.rb | 188 -- ext/tk/sample/demos-en/spin.rb | 66 - ext/tk/sample/demos-en/square | 81 - ext/tk/sample/demos-en/states.rb | 81 - ext/tk/sample/demos-en/style.rb | 232 -- ext/tk/sample/demos-en/tcolor | 526 ---- ext/tk/sample/demos-en/text.rb | 129 - ext/tk/sample/demos-en/textpeer.rb | 77 - ext/tk/sample/demos-en/timer | 136 - ext/tk/sample/demos-en/tkencoding.rb | 43 - ext/tk/sample/demos-en/toolbar.rb | 131 - ext/tk/sample/demos-en/tree.rb | 120 - ext/tk/sample/demos-en/ttkbut.rb | 140 - ext/tk/sample/demos-en/ttkmenu.rb | 86 - ext/tk/sample/demos-en/ttknote.rb | 90 - ext/tk/sample/demos-en/ttkpane.rb | 214 -- ext/tk/sample/demos-en/ttkprogress.rb | 67 - ext/tk/sample/demos-en/twind.rb | 292 -- ext/tk/sample/demos-en/twind2.rb | 385 --- ext/tk/sample/demos-en/unicodeout.rb | 115 - ext/tk/sample/demos-en/vscale.rb | 80 - ext/tk/sample/demos-en/widget | 1087 -------- ext/tk/sample/demos-jp/README | 54 - ext/tk/sample/demos-jp/README.1st | 20 - ext/tk/sample/demos-jp/anilabel.rb | 178 -- ext/tk/sample/demos-jp/aniwave.rb | 121 - ext/tk/sample/demos-jp/arrow.rb | 248 -- ext/tk/sample/demos-jp/bind.rb | 126 - ext/tk/sample/demos-jp/bitmap.rb | 75 - ext/tk/sample/demos-jp/browse1 | 63 - ext/tk/sample/demos-jp/browse2 | 82 - ext/tk/sample/demos-jp/button.rb | 84 - ext/tk/sample/demos-jp/check.rb | 71 - ext/tk/sample/demos-jp/check2.rb | 111 - ext/tk/sample/demos-jp/clrpick.rb | 85 - ext/tk/sample/demos-jp/colors.rb | 156 -- ext/tk/sample/demos-jp/combo.rb | 99 - ext/tk/sample/demos-jp/cscroll.rb | 135 - ext/tk/sample/demos-jp/ctext.rb | 205 -- ext/tk/sample/demos-jp/dialog1.rb | 40 - ext/tk/sample/demos-jp/dialog2.rb | 44 - ext/tk/sample/demos-jp/doc.org/README | 7 - ext/tk/sample/demos-jp/doc.org/README.JP | 14 - ext/tk/sample/demos-jp/doc.org/README.tk80 | 46 - ext/tk/sample/demos-jp/doc.org/license.terms | 39 - ext/tk/sample/demos-jp/doc.org/license.terms.tk80 | 39 - ext/tk/sample/demos-jp/entry1.rb | 61 - ext/tk/sample/demos-jp/entry2.rb | 92 - ext/tk/sample/demos-jp/entry3.rb | 226 -- ext/tk/sample/demos-jp/filebox.rb | 103 - ext/tk/sample/demos-jp/floor.rb | 1722 ------------ ext/tk/sample/demos-jp/floor2.rb | 1720 ------------ ext/tk/sample/demos-jp/form.rb | 67 - ext/tk/sample/demos-jp/goldberg.rb | 2012 -------------- ext/tk/sample/demos-jp/hello | 10 - ext/tk/sample/demos-jp/hscale.rb | 79 - ext/tk/sample/demos-jp/icon.rb | 104 - ext/tk/sample/demos-jp/image1.rb | 65 - ext/tk/sample/demos-jp/image2.rb | 107 - ext/tk/sample/demos-jp/image3.rb | 128 - ext/tk/sample/demos-jp/items.rb | 380 --- ext/tk/sample/demos-jp/ixset | 333 --- ext/tk/sample/demos-jp/ixset2 | 369 --- ext/tk/sample/demos-jp/knightstour.rb | 274 -- ext/tk/sample/demos-jp/label.rb | 70 - ext/tk/sample/demos-jp/labelframe.rb | 103 - ext/tk/sample/demos-jp/mclist.rb | 122 - ext/tk/sample/demos-jp/menu.rb | 202 -- ext/tk/sample/demos-jp/menu84.rb | 214 -- ext/tk/sample/demos-jp/menu8x.rb | 234 -- ext/tk/sample/demos-jp/menubu.rb | 239 -- ext/tk/sample/demos-jp/msgbox.rb | 90 - ext/tk/sample/demos-jp/msgbox2.rb | 91 - ext/tk/sample/demos-jp/paned1.rb | 53 - ext/tk/sample/demos-jp/paned2.rb | 101 - ext/tk/sample/demos-jp/pendulum.rb | 243 -- ext/tk/sample/demos-jp/plot.rb | 127 - ext/tk/sample/demos-jp/puzzle.rb | 132 - ext/tk/sample/demos-jp/radio.rb | 85 - ext/tk/sample/demos-jp/radio2.rb | 113 - ext/tk/sample/demos-jp/radio3.rb | 120 - ext/tk/sample/demos-jp/rmt | 268 -- ext/tk/sample/demos-jp/rolodex | 320 --- ext/tk/sample/demos-jp/rolodex-j | 300 --- ext/tk/sample/demos-jp/ruler.rb | 204 -- ext/tk/sample/demos-jp/sayings.rb | 104 - ext/tk/sample/demos-jp/search.rb | 185 -- ext/tk/sample/demos-jp/spin.rb | 72 - ext/tk/sample/demos-jp/square | 81 - ext/tk/sample/demos-jp/states.rb | 75 - ext/tk/sample/demos-jp/style.rb | 271 -- ext/tk/sample/demos-jp/tcolor | 534 ---- ext/tk/sample/demos-jp/text.rb | 121 - ext/tk/sample/demos-jp/textpeer.rb | 83 - ext/tk/sample/demos-jp/timer | 136 - ext/tk/sample/demos-jp/toolbar.rb | 137 - ext/tk/sample/demos-jp/tree.rb | 121 - ext/tk/sample/demos-jp/ttkbut.rb | 146 - ext/tk/sample/demos-jp/ttkmenu.rb | 92 - ext/tk/sample/demos-jp/ttknote.rb | 98 - ext/tk/sample/demos-jp/ttkpane.rb | 217 -- ext/tk/sample/demos-jp/ttkprogress.rb | 72 - ext/tk/sample/demos-jp/twind.rb | 293 -- ext/tk/sample/demos-jp/twind2.rb | 385 --- ext/tk/sample/demos-jp/unicodeout.rb | 120 - ext/tk/sample/demos-jp/vscale.rb | 81 - ext/tk/sample/demos-jp/widget | 1122 -------- ext/tk/sample/editable_listbox.rb | 149 -- ext/tk/sample/encstr_usage.rb | 31 - ext/tk/sample/figmemo_sample.rb | 457 ---- ext/tk/sample/images/earth.gif | Bin 51712 -> 0 bytes ext/tk/sample/images/earthris.gif | Bin 6343 -> 0 bytes ext/tk/sample/images/face.xbm | 173 -- ext/tk/sample/images/flagdown.xbm | 27 - ext/tk/sample/images/flagup.xbm | 27 - ext/tk/sample/images/gray25.xbm | 6 - ext/tk/sample/images/grey.25 | 6 - ext/tk/sample/images/grey.5 | 6 - ext/tk/sample/images/letters.xbm | 27 - ext/tk/sample/images/noletter.xbm | 27 - ext/tk/sample/images/pattern.xbm | 6 - ext/tk/sample/images/tcllogo.gif | Bin 2341 -> 0 bytes ext/tk/sample/images/teapot.ppm | 31 - ext/tk/sample/irbtk.rb | 31 - ext/tk/sample/irbtkw.rbw | 156 -- ext/tk/sample/iso2022-kr.txt | 2 - ext/tk/sample/menubar1.rb | 52 - ext/tk/sample/menubar2.rb | 57 - ext/tk/sample/menubar3.rb | 73 - ext/tk/sample/msgs_rb/README | 3 - ext/tk/sample/msgs_rb/cs.msg | 84 - ext/tk/sample/msgs_rb/de.msg | 88 - ext/tk/sample/msgs_rb/el.msg | 98 - ext/tk/sample/msgs_rb/en.msg | 83 - ext/tk/sample/msgs_rb/en_gb.msg | 7 - ext/tk/sample/msgs_rb/eo.msg | 87 - ext/tk/sample/msgs_rb/es.msg | 84 - ext/tk/sample/msgs_rb/fr.msg | 84 - ext/tk/sample/msgs_rb/it.msg | 84 - ext/tk/sample/msgs_rb/ja.msg | 13 - ext/tk/sample/msgs_rb/nl.msg | 123 - ext/tk/sample/msgs_rb/pl.msg | 87 - ext/tk/sample/msgs_rb/ru.msg | 87 - ext/tk/sample/msgs_rb2/README | 5 - ext/tk/sample/msgs_rb2/de.msg | 88 - ext/tk/sample/msgs_rb2/ja.msg | 85 - ext/tk/sample/msgs_tk/README | 4 - ext/tk/sample/msgs_tk/cs.msg | 84 - ext/tk/sample/msgs_tk/de.msg | 88 - ext/tk/sample/msgs_tk/el.msg | 103 - ext/tk/sample/msgs_tk/en.msg | 83 - ext/tk/sample/msgs_tk/en_gb.msg | 7 - ext/tk/sample/msgs_tk/eo.msg | 87 - ext/tk/sample/msgs_tk/es.msg | 84 - ext/tk/sample/msgs_tk/fr.msg | 84 - ext/tk/sample/msgs_tk/it.msg | 84 - ext/tk/sample/msgs_tk/ja.msg | 13 - ext/tk/sample/msgs_tk/license.terms | 39 - ext/tk/sample/msgs_tk/nl.msg | 123 - ext/tk/sample/msgs_tk/pl.msg | 87 - ext/tk/sample/msgs_tk/ru.msg | 87 - ext/tk/sample/multi-ip_sample.rb | 104 - ext/tk/sample/multi-ip_sample2.rb | 30 - ext/tk/sample/optobj_sample.rb | 68 - ext/tk/sample/propagate.rb | 31 - ext/tk/sample/remote-ip_sample.rb | 34 - ext/tk/sample/remote-ip_sample2.rb | 57 - ext/tk/sample/resource.en | 13 - ext/tk/sample/resource.ja | 13 - ext/tk/sample/safe-tk.rb | 132 - ext/tk/sample/scrollframe.rb | 250 -- ext/tk/sample/tcltklib/batsu.gif | Bin 538 -> 0 bytes ext/tk/sample/tcltklib/lines0.tcl | 42 - ext/tk/sample/tcltklib/lines1.rb | 51 - ext/tk/sample/tcltklib/lines2.rb | 55 - ext/tk/sample/tcltklib/lines3.rb | 55 - ext/tk/sample/tcltklib/lines4.rb | 55 - ext/tk/sample/tcltklib/maru.gif | Bin 481 -> 0 bytes ext/tk/sample/tcltklib/safeTk.rb | 23 - ext/tk/sample/tcltklib/sample0.rb | 40 - ext/tk/sample/tcltklib/sample1.rb | 635 ----- ext/tk/sample/tcltklib/sample2.rb | 452 ---- ext/tk/sample/tkalignbox.rb | 236 -- ext/tk/sample/tkballoonhelp.rb | 221 -- ext/tk/sample/tkbiff.rb | 156 -- ext/tk/sample/tkbrowse.rb | 80 - ext/tk/sample/tkcombobox.rb | 498 ---- ext/tk/sample/tkdialog.rb | 62 - ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt | 61 - ext/tk/sample/tkextlib/ICONS/tkIcons | 195 -- ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde | 658 ----- ext/tk/sample/tkextlib/ICONS/tkIcons.kde | 195 -- ext/tk/sample/tkextlib/ICONS/viewIcons.rb | 330 --- ext/tk/sample/tkextlib/blt/barchart5.rb | 102 - ext/tk/sample/tkextlib/blt/calendar.rb | 118 - ext/tk/sample/tkextlib/blt/graph6.rb | 2223 ---------------- ext/tk/sample/tkextlib/blt/graph7.rb | 41 - ext/tk/sample/tkextlib/blt/graph7a.rb | 64 - ext/tk/sample/tkextlib/blt/graph7b.rb | 42 - ext/tk/sample/tkextlib/blt/graph7c.rb | 46 - ext/tk/sample/tkextlib/blt/images/buckskin.gif | Bin 7561 -> 0 bytes ext/tk/sample/tkextlib/blt/images/chalk.gif | Bin 4378 -> 0 bytes ext/tk/sample/tkextlib/blt/images/qv100.t.gif | Bin 2694 -> 0 bytes ext/tk/sample/tkextlib/blt/images/rain.gif | Bin 3785 -> 0 bytes ext/tk/sample/tkextlib/blt/images/sample.gif | Bin 186103 -> 0 bytes ext/tk/sample/tkextlib/blt/pareto.rb | 91 - ext/tk/sample/tkextlib/blt/plot1.rb | 10 - ext/tk/sample/tkextlib/blt/plot1b.rb | 11 - ext/tk/sample/tkextlib/blt/readme.txt | 2 - ext/tk/sample/tkextlib/blt/scripts/stipples.rb | 157 -- ext/tk/sample/tkextlib/blt/winop1.rb | 41 - ext/tk/sample/tkextlib/blt/winop2.rb | 29 - ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt | 53 - ext/tk/sample/tkextlib/bwidget/basic.rb | 199 -- ext/tk/sample/tkextlib/bwidget/bwidget.xbm | 46 - ext/tk/sample/tkextlib/bwidget/demo.rb | 244 -- ext/tk/sample/tkextlib/bwidget/dnd.rb | 47 - ext/tk/sample/tkextlib/bwidget/manager.rb | 151 -- ext/tk/sample/tkextlib/bwidget/select.rb | 83 - ext/tk/sample/tkextlib/bwidget/tmpldlg.rb | 222 -- ext/tk/sample/tkextlib/bwidget/tree.rb | 290 -- ext/tk/sample/tkextlib/bwidget/x1.xbm | 2258 ---------------- .../iwidgets/catalog_demo/Orig_LICENSE.txt | 42 - .../tkextlib/iwidgets/catalog_demo/images/box.xbm | 14 - .../iwidgets/catalog_demo/images/clear.gif | Bin 279 -> 0 bytes .../iwidgets/catalog_demo/images/close.gif | Bin 249 -> 0 bytes .../tkextlib/iwidgets/catalog_demo/images/copy.gif | Bin 269 -> 0 bytes .../tkextlib/iwidgets/catalog_demo/images/cut.gif | Bin 179 -> 0 bytes .../tkextlib/iwidgets/catalog_demo/images/exit.gif | Bin 396 -> 0 bytes .../tkextlib/iwidgets/catalog_demo/images/find.gif | Bin 386 -> 0 bytes .../tkextlib/iwidgets/catalog_demo/images/help.gif | Bin 591 -> 0 bytes .../tkextlib/iwidgets/catalog_demo/images/line.xbm | 14 - .../tkextlib/iwidgets/catalog_demo/images/mag.gif | Bin 183 -> 0 bytes .../tkextlib/iwidgets/catalog_demo/images/new.gif | Bin 212 -> 0 bytes .../tkextlib/iwidgets/catalog_demo/images/open.gif | Bin 258 -> 0 bytes .../tkextlib/iwidgets/catalog_demo/images/oval.xbm | 14 - .../iwidgets/catalog_demo/images/paste.gif | Bin 376 -> 0 bytes .../iwidgets/catalog_demo/images/points.xbm | 14 - .../tkextlib/iwidgets/catalog_demo/images/poly.gif | Bin 141 -> 0 bytes .../iwidgets/catalog_demo/images/print.gif | Bin 263 -> 0 bytes .../iwidgets/catalog_demo/images/ruler.gif | Bin 174 -> 0 bytes .../tkextlib/iwidgets/catalog_demo/images/save.gif | Bin 270 -> 0 bytes .../iwidgets/catalog_demo/images/select.gif | Bin 124 -> 0 bytes .../tkextlib/iwidgets/catalog_demo/images/text.xbm | 14 - .../sample/tkextlib/iwidgets/sample/buttonbox.rb | 23 - ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb | 11 - .../tkextlib/iwidgets/sample/canvasprintbox.rb | 9 - .../tkextlib/iwidgets/sample/canvasprintdialog.rb | 9 - ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb | 13 - ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb | 33 - .../sample/tkextlib/iwidgets/sample/dateentry.rb | 8 - .../sample/tkextlib/iwidgets/sample/datefield.rb | 9 - ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb | 21 - .../sample/tkextlib/iwidgets/sample/dialogshell.rb | 15 - .../tkextlib/iwidgets/sample/disjointlistbox.rb | 17 - .../tkextlib/iwidgets/sample/entryfield-1.rb | 40 - .../tkextlib/iwidgets/sample/entryfield-2.rb | 45 - .../tkextlib/iwidgets/sample/entryfield-3.rb | 41 - .../sample/tkextlib/iwidgets/sample/extbutton.rb | 21 - .../iwidgets/sample/extfileselectionbox.rb | 9 - .../iwidgets/sample/extfileselectiondialog.rb | 30 - ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb | 11 - .../tkextlib/iwidgets/sample/fileselectionbox.rb | 9 - .../iwidgets/sample/fileselectiondialog.rb | 29 - .../sample/tkextlib/iwidgets/sample/finddialog.rb | 16 - .../sample/tkextlib/iwidgets/sample/hierarchy.rb | 26 - .../sample/tkextlib/iwidgets/sample/hyperhelp.rb | 15 - .../tkextlib/iwidgets/sample/labeledframe.rb | 15 - .../tkextlib/iwidgets/sample/labeledwidget.rb | 14 - .../sample/tkextlib/iwidgets/sample/mainwindow.rb | 65 - ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb | 125 - ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb | 45 - .../sample/tkextlib/iwidgets/sample/messagebox1.rb | 20 - .../sample/tkextlib/iwidgets/sample/messagebox2.rb | 20 - .../tkextlib/iwidgets/sample/messagedialog.rb | 45 - ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb | 31 - .../sample/tkextlib/iwidgets/sample/notebook2.rb | 31 - .../sample/tkextlib/iwidgets/sample/optionmenu.rb | 15 - .../sample/tkextlib/iwidgets/sample/panedwindow.rb | 23 - .../tkextlib/iwidgets/sample/panedwindow2.rb | 23 - .../tkextlib/iwidgets/sample/promptdialog.rb | 18 - .../sample/tkextlib/iwidgets/sample/pushbutton.rb | 10 - ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb | 14 - .../tkextlib/iwidgets/sample/scrolledcanvas.rb | 14 - .../tkextlib/iwidgets/sample/scrolledframe.rb | 19 - .../tkextlib/iwidgets/sample/scrolledhtml.rb | 16 - .../tkextlib/iwidgets/sample/scrolledlistbox.rb | 23 - .../tkextlib/iwidgets/sample/scrolledtext.rb | 12 - .../tkextlib/iwidgets/sample/selectionbox.rb | 20 - .../tkextlib/iwidgets/sample/selectiondialog.rb | 13 - ext/tk/sample/tkextlib/iwidgets/sample/shell.rb | 18 - ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb | 8 - ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb | 11 - ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb | 34 - ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb | 8 - .../sample/tkextlib/iwidgets/sample/tabnotebook.rb | 27 - .../tkextlib/iwidgets/sample/tabnotebook2.rb | 31 - ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb | 35 - .../sample/tkextlib/iwidgets/sample/timeentry.rb | 8 - .../sample/tkextlib/iwidgets/sample/timefield.rb | 9 - ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb | 153 -- ext/tk/sample/tkextlib/iwidgets/sample/watch.rb | 19 - ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt | 46 - ext/tk/sample/tkextlib/tcllib/datefield.rb | 30 - ext/tk/sample/tkextlib/tcllib/plotdemos1.rb | 159 -- ext/tk/sample/tkextlib/tcllib/plotdemos2.rb | 72 - ext/tk/sample/tkextlib/tcllib/plotdemos3.rb | 84 - ext/tk/sample/tkextlib/tcllib/xyplot.rb | 18 - ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt | 30 - ext/tk/sample/tkextlib/tile/demo.rb | 984 ------- ext/tk/sample/tkextlib/tile/iconlib.tcl | 110 - ext/tk/sample/tkextlib/tile/readme.txt | 2 - ext/tk/sample/tkextlib/tile/repeater.tcl | 117 - ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl | 149 -- .../tkextlib/tile/themes/blue/blue/arrowdown-h.gif | Bin 315 -> 0 bytes .../tkextlib/tile/themes/blue/blue/arrowdown-p.gif | Bin 312 -> 0 bytes .../tkextlib/tile/themes/blue/blue/arrowdown.gif | Bin 313 -> 0 bytes .../tkextlib/tile/themes/blue/blue/arrowleft-h.gif | Bin 329 -> 0 bytes .../tkextlib/tile/themes/blue/blue/arrowleft-p.gif | Bin 327 -> 0 bytes .../tkextlib/tile/themes/blue/blue/arrowleft.gif | Bin 323 -> 0 bytes .../tile/themes/blue/blue/arrowright-h.gif | Bin 330 -> 0 bytes .../tile/themes/blue/blue/arrowright-p.gif | Bin 327 -> 0 bytes .../tkextlib/tile/themes/blue/blue/arrowright.gif | Bin 324 -> 0 bytes .../tkextlib/tile/themes/blue/blue/arrowup-h.gif | Bin 309 -> 0 bytes .../tkextlib/tile/themes/blue/blue/arrowup-p.gif | Bin 313 -> 0 bytes .../tkextlib/tile/themes/blue/blue/arrowup.gif | Bin 314 -> 0 bytes .../tkextlib/tile/themes/blue/blue/button-h.gif | Bin 696 -> 0 bytes .../tkextlib/tile/themes/blue/blue/button-n.gif | Bin 770 -> 0 bytes .../tkextlib/tile/themes/blue/blue/button-n.xcf | Bin 1942 -> 0 bytes .../tkextlib/tile/themes/blue/blue/button-p.gif | Bin 769 -> 0 bytes .../tkextlib/tile/themes/blue/blue/check-hc.gif | Bin 254 -> 0 bytes .../tkextlib/tile/themes/blue/blue/check-hu.gif | Bin 234 -> 0 bytes .../tkextlib/tile/themes/blue/blue/check-nc.gif | Bin 249 -> 0 bytes .../tkextlib/tile/themes/blue/blue/check-nu.gif | Bin 229 -> 0 bytes .../tkextlib/tile/themes/blue/blue/radio-hc.gif | Bin 1098 -> 0 bytes .../tkextlib/tile/themes/blue/blue/radio-hu.gif | Bin 626 -> 0 bytes .../tkextlib/tile/themes/blue/blue/radio-nc.gif | Bin 389 -> 0 bytes .../tkextlib/tile/themes/blue/blue/radio-nu.gif | Bin 401 -> 0 bytes .../tkextlib/tile/themes/blue/blue/sb-thumb-p.gif | Bin 343 -> 0 bytes .../tkextlib/tile/themes/blue/blue/sb-thumb.gif | Bin 316 -> 0 bytes .../tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif | Bin 333 -> 0 bytes .../tkextlib/tile/themes/blue/blue/sb-vthumb.gif | Bin 308 -> 0 bytes .../tkextlib/tile/themes/blue/blue/slider-p.gif | Bin 182 -> 0 bytes .../tkextlib/tile/themes/blue/blue/slider.gif | Bin 182 -> 0 bytes .../tkextlib/tile/themes/blue/blue/vslider-p.gif | Bin 183 -> 0 bytes .../tkextlib/tile/themes/blue/blue/vslider.gif | Bin 283 -> 0 bytes .../sample/tkextlib/tile/themes/blue/pkgIndex.tcl | 6 - .../tkextlib/tile/themes/keramik/keramik.tcl | 194 -- .../tile/themes/keramik/keramik/arrowdown-n.gif | Bin 273 -> 0 bytes .../tile/themes/keramik/keramik/arrowdown-p.gif | Bin 258 -> 0 bytes .../tile/themes/keramik/keramik/arrowleft-n.gif | Bin 292 -> 0 bytes .../tile/themes/keramik/keramik/arrowleft-p.gif | Bin 272 -> 0 bytes .../tile/themes/keramik/keramik/arrowright-n.gif | Bin 274 -> 0 bytes .../tile/themes/keramik/keramik/arrowright-p.gif | Bin 258 -> 0 bytes .../tile/themes/keramik/keramik/arrowup-n.gif | Bin 286 -> 0 bytes .../tile/themes/keramik/keramik/arrowup-p.gif | Bin 271 -> 0 bytes .../tile/themes/keramik/keramik/button-d.gif | Bin 1266 -> 0 bytes .../tile/themes/keramik/keramik/button-h.gif | Bin 896 -> 0 bytes .../tile/themes/keramik/keramik/button-n.gif | Bin 881 -> 0 bytes .../tile/themes/keramik/keramik/button-p.gif | Bin 625 -> 0 bytes .../tile/themes/keramik/keramik/button-s.gif | Bin 859 -> 0 bytes .../tile/themes/keramik/keramik/check-c.gif | Bin 434 -> 0 bytes .../tile/themes/keramik/keramik/check-u.gif | Bin 423 -> 0 bytes .../tkextlib/tile/themes/keramik/keramik/hsb-n.gif | Bin 401 -> 0 bytes .../tkextlib/tile/themes/keramik/keramik/hsb-p.gif | Bin 395 -> 0 bytes .../tile/themes/keramik/keramik/hslider-n.gif | Bin 592 -> 0 bytes .../tile/themes/keramik/keramik/mbut-a.gif | Bin 1116 -> 0 bytes .../tile/themes/keramik/keramik/mbut-arrow-n.gif | Bin 61 -> 0 bytes .../tile/themes/keramik/keramik/mbut-d.gif | Bin 1057 -> 0 bytes .../tile/themes/keramik/keramik/mbut-n.gif | Bin 1095 -> 0 bytes .../tile/themes/keramik/keramik/radio-c.gif | Bin 695 -> 0 bytes .../tile/themes/keramik/keramik/radio-u.gif | Bin 686 -> 0 bytes .../tkextlib/tile/themes/keramik/keramik/tab-n.gif | Bin 383 -> 0 bytes .../tkextlib/tile/themes/keramik/keramik/tab-p.gif | Bin 878 -> 0 bytes .../tile/themes/keramik/keramik/tbar-a.gif | Bin 907 -> 0 bytes .../tile/themes/keramik/keramik/tbar-n.gif | Bin 238 -> 0 bytes .../tile/themes/keramik/keramik/tbar-p.gif | Bin 927 -> 0 bytes .../tkextlib/tile/themes/keramik/keramik/vsb-n.gif | Bin 405 -> 0 bytes .../tkextlib/tile/themes/keramik/keramik/vsb-p.gif | Bin 399 -> 0 bytes .../tile/themes/keramik/keramik/vslider-n.gif | Bin 587 -> 0 bytes .../tkextlib/tile/themes/keramik/pkgIndex.tcl | 15 - ext/tk/sample/tkextlib/tile/themes/kroc.rb | 227 -- ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl | 163 -- .../tkextlib/tile/themes/kroc/kroc/button-h.gif | Bin 522 -> 0 bytes .../tkextlib/tile/themes/kroc/kroc/button-n.gif | Bin 554 -> 0 bytes .../tkextlib/tile/themes/kroc/kroc/button-p.gif | Bin 548 -> 0 bytes .../tkextlib/tile/themes/kroc/kroc/check-hc.gif | Bin 281 -> 0 bytes .../tkextlib/tile/themes/kroc/kroc/check-hu.gif | Bin 273 -> 0 bytes .../tkextlib/tile/themes/kroc/kroc/check-nc.gif | Bin 303 -> 0 bytes .../tkextlib/tile/themes/kroc/kroc/check-nu.gif | Bin 294 -> 0 bytes .../tkextlib/tile/themes/kroc/kroc/radio-hc.gif | Bin 652 -> 0 bytes .../tkextlib/tile/themes/kroc/kroc/radio-hu.gif | Bin 644 -> 0 bytes .../tkextlib/tile/themes/kroc/kroc/radio-nc.gif | Bin 632 -> 0 bytes .../tkextlib/tile/themes/kroc/kroc/radio-nu.gif | Bin 621 -> 0 bytes .../sample/tkextlib/tile/themes/kroc/pkgIndex.tcl | 15 - .../tkextlib/tile/themes/plastik/pkgIndex.tcl | 16 - .../tkextlib/tile/themes/plastik/plastik.tcl | 125 - .../tile/themes/plastik/plastik/arrowdown-n.gif | Bin 362 -> 0 bytes .../tile/themes/plastik/plastik/arrowdown-p.gif | Bin 250 -> 0 bytes .../tile/themes/plastik/plastik/arrowleft-n.gif | Bin 378 -> 0 bytes .../tile/themes/plastik/plastik/arrowleft-p.gif | Bin 267 -> 0 bytes .../tile/themes/plastik/plastik/arrowright-n.gif | Bin 379 -> 0 bytes .../tile/themes/plastik/plastik/arrowright-p.gif | Bin 266 -> 0 bytes .../tile/themes/plastik/plastik/arrowup-n.gif | Bin 363 -> 0 bytes .../tile/themes/plastik/plastik/arrowup-p.gif | Bin 251 -> 0 bytes .../tile/themes/plastik/plastik/button-h.gif | Bin 439 -> 0 bytes .../tile/themes/plastik/plastik/button-n.gif | Bin 443 -> 0 bytes .../tile/themes/plastik/plastik/button-p.gif | Bin 302 -> 0 bytes .../tile/themes/plastik/plastik/check-hc.gif | Bin 169 -> 0 bytes .../tile/themes/plastik/plastik/check-hu.gif | Bin 170 -> 0 bytes .../tile/themes/plastik/plastik/check-nc.gif | Bin 235 -> 0 bytes .../tile/themes/plastik/plastik/check-nu.gif | Bin 226 -> 0 bytes .../tile/themes/plastik/plastik/check-pc.gif | Bin 169 -> 0 bytes .../tkextlib/tile/themes/plastik/plastik/hsb-n.gif | Bin 269 -> 0 bytes .../tile/themes/plastik/plastik/hslider-n.gif | Bin 342 -> 0 bytes .../tile/themes/plastik/plastik/radio-hc.gif | Bin 178 -> 0 bytes .../tile/themes/plastik/plastik/radio-hu.gif | Bin 179 -> 0 bytes .../tile/themes/plastik/plastik/radio-nc.gif | Bin 236 -> 0 bytes .../tile/themes/plastik/plastik/radio-nu.gif | Bin 178 -> 0 bytes .../tile/themes/plastik/plastik/radio-pc.gif | Bin 178 -> 0 bytes .../tkextlib/tile/themes/plastik/plastik/vsb-n.gif | Bin 366 -> 0 bytes .../tile/themes/plastik/plastik/vslider-n.gif | Bin 336 -> 0 bytes ext/tk/sample/tkextlib/tile/toolbutton.tcl | 152 -- ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt | 12 - ext/tk/sample/tkextlib/tkHTML/README | 12 - ext/tk/sample/tkextlib/tkHTML/hv.rb | 314 --- ext/tk/sample/tkextlib/tkHTML/page1/image1 | Bin 8995 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image10 | Bin 3095 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image11 | Bin 1425 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image12 | Bin 2468 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image13 | Bin 4073 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image14 | Bin 53 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image2 | Bin 42 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image3 | Bin 3473 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image4 | Bin 1988 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image5 | Bin 973 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image6 | Bin 2184 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image7 | Bin 2022 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image8 | Bin 1186 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/image9 | Bin 139 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page1/index.html | 115 - ext/tk/sample/tkextlib/tkHTML/page2/image1 | Bin 1966 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image10 | Bin 255 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image11 | Bin 590 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image12 | Bin 254 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image13 | Bin 493 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image14 | Bin 195 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image15 | Bin 68 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image16 | Bin 157 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image17 | Bin 81 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image18 | Bin 545 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image19 | Bin 53 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image2 | Bin 49 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image20 | Bin 533 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image21 | Bin 564 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image22 | Bin 81 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image23 | Bin 539 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image24 | Bin 151 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image25 | Bin 453 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image26 | Bin 520 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image27 | Bin 565 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image28 | Bin 416 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image29 | Bin 121 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image3 | Bin 10835 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image30 | Bin 663 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image31 | Bin 78 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image32 | Bin 556 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image33 | Bin 598 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image34 | Bin 496 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image35 | Bin 724 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image36 | Bin 404 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image37 | Bin 124 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image38 | Bin 8330 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image39 | Bin 369 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image4 | Bin 268 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image5 | Bin 492 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image6 | Bin 246 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image7 | Bin 551 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image8 | Bin 497 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/image9 | Bin 492 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page2/index.html | 433 --- ext/tk/sample/tkextlib/tkHTML/page3/image1 | Bin 113 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image10 | Bin 5088 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image11 | Bin 4485 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image12 | Bin 3579 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image13 | Bin 5119 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image14 | Bin 3603 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image2 | Bin 74 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image3 | Bin 681 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image4 | Bin 3056 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image5 | Bin 2297 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image6 | Bin 79 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image7 | Bin 1613 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image8 | Bin 864 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/image9 | Bin 2379 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page3/index.html | 2787 -------------------- ext/tk/sample/tkextlib/tkHTML/page4/image1 | Bin 42 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page4/image2 | Bin 14343 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page4/image3 | Bin 17750 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page4/image4 | Bin 61 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page4/image5 | Bin 201 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page4/image6 | Bin 214 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page4/image7 | Bin 149 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page4/image8 | Bin 203 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page4/image9 | Bin 1504 -> 0 bytes ext/tk/sample/tkextlib/tkHTML/page4/index.html | 768 ------ ext/tk/sample/tkextlib/tkHTML/ss.rb | 437 --- ext/tk/sample/tkextlib/tkimg/demo.rb | 1479 ----------- .../tkextlib/tkimg/license_terms_of_Img_extension | 41 - ext/tk/sample/tkextlib/tkimg/readme.txt | 3 - ext/tk/sample/tkextlib/tktable/Orig_LICENSE.txt | 52 - ext/tk/sample/tkextlib/tktable/basic.rb | 61 - ext/tk/sample/tkextlib/tktable/buttons.rb | 77 - ext/tk/sample/tkextlib/tktable/command.rb | 90 - ext/tk/sample/tkextlib/tktable/debug.rb | 102 - ext/tk/sample/tkextlib/tktable/dynarows.rb | 100 - ext/tk/sample/tkextlib/tktable/maxsize.rb | 68 - ext/tk/sample/tkextlib/tktable/spreadsheet.rb | 138 - ext/tk/sample/tkextlib/tktable/tcllogo.gif | Bin 2341 -> 0 bytes ext/tk/sample/tkextlib/tktable/valid.rb | 89 - ext/tk/sample/tkextlib/treectrl/bitmaps.rb | 77 - ext/tk/sample/tkextlib/treectrl/demo.rb | 1306 --------- ext/tk/sample/tkextlib/treectrl/explorer.rb | 431 --- ext/tk/sample/tkextlib/treectrl/help.rb | 405 --- ext/tk/sample/tkextlib/treectrl/imovie.rb | 131 - ext/tk/sample/tkextlib/treectrl/layout.rb | 160 -- ext/tk/sample/tkextlib/treectrl/mailwasher.rb | 270 -- ext/tk/sample/tkextlib/treectrl/outlook-folders.rb | 125 - .../sample/tkextlib/treectrl/outlook-newgroup.rb | 449 ---- ext/tk/sample/tkextlib/treectrl/pics/big-dll.gif | Bin 437 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/big-exe.gif | Bin 368 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/big-file.gif | Bin 466 -> 0 bytes .../sample/tkextlib/treectrl/pics/big-folder.gif | Bin 459 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/big-txt.gif | Bin 392 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/checked.gif | Bin 78 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/file.gif | Bin 279 -> 0 bytes .../tkextlib/treectrl/pics/folder-closed.gif | Bin 111 -> 0 bytes .../sample/tkextlib/treectrl/pics/folder-open.gif | Bin 120 -> 0 bytes .../tkextlib/treectrl/pics/help-book-closed.gif | Bin 115 -> 0 bytes .../tkextlib/treectrl/pics/help-book-open.gif | Bin 128 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/help-page.gif | Bin 132 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/imovie-01.gif | Bin 5406 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/imovie-02.gif | Bin 5912 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/imovie-03.gif | Bin 4696 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/imovie-04.gif | Bin 5783 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/imovie-05.gif | Bin 3238 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/imovie-06.gif | Bin 3509 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/imovie-07.gif | Bin 2091 -> 0 bytes .../tkextlib/treectrl/pics/internet-check-off.gif | Bin 70 -> 0 bytes .../tkextlib/treectrl/pics/internet-check-on.gif | Bin 76 -> 0 bytes .../tkextlib/treectrl/pics/internet-print.gif | Bin 124 -> 0 bytes .../tkextlib/treectrl/pics/internet-radio-off.gif | Bin 68 -> 0 bytes .../tkextlib/treectrl/pics/internet-radio-on.gif | Bin 71 -> 0 bytes .../tkextlib/treectrl/pics/internet-search.gif | Bin 114 -> 0 bytes .../tkextlib/treectrl/pics/internet-security.gif | Bin 108 -> 0 bytes .../sample/tkextlib/treectrl/pics/mac-collapse.gif | Bin 275 -> 0 bytes .../sample/tkextlib/treectrl/pics/mac-expand.gif | Bin 277 -> 0 bytes .../tkextlib/treectrl/pics/outlook-arrow.gif | Bin 73 -> 0 bytes .../sample/tkextlib/treectrl/pics/outlook-clip.gif | Bin 73 -> 0 bytes .../tkextlib/treectrl/pics/outlook-deleted.gif | Bin 138 -> 0 bytes .../tkextlib/treectrl/pics/outlook-draft.gif | Bin 134 -> 0 bytes .../tkextlib/treectrl/pics/outlook-folder.gif | Bin 133 -> 0 bytes .../tkextlib/treectrl/pics/outlook-group.gif | Bin 144 -> 0 bytes .../tkextlib/treectrl/pics/outlook-inbox.gif | Bin 133 -> 0 bytes .../tkextlib/treectrl/pics/outlook-local.gif | Bin 146 -> 0 bytes .../sample/tkextlib/treectrl/pics/outlook-main.gif | Bin 174 -> 0 bytes .../tkextlib/treectrl/pics/outlook-outbox.gif | Bin 136 -> 0 bytes .../tkextlib/treectrl/pics/outlook-read-2.gif | Bin 343 -> 0 bytes .../sample/tkextlib/treectrl/pics/outlook-read.gif | Bin 304 -> 0 bytes .../sample/tkextlib/treectrl/pics/outlook-sent.gif | Bin 132 -> 0 bytes .../tkextlib/treectrl/pics/outlook-server.gif | Bin 163 -> 0 bytes .../tkextlib/treectrl/pics/outlook-unread.gif | Bin 303 -> 0 bytes .../tkextlib/treectrl/pics/outlook-watch.gif | Bin 98 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/sky.gif | Bin 6454 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/small-dll.gif | Bin 311 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/small-exe.gif | Bin 115 -> 0 bytes .../sample/tkextlib/treectrl/pics/small-file.gif | Bin 338 -> 0 bytes .../sample/tkextlib/treectrl/pics/small-folder.gif | Bin 307 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/small-txt.gif | Bin 302 -> 0 bytes ext/tk/sample/tkextlib/treectrl/pics/unchecked.gif | Bin 72 -> 0 bytes ext/tk/sample/tkextlib/treectrl/random.rb | 509 ---- ext/tk/sample/tkextlib/treectrl/readme.txt | 2 - ext/tk/sample/tkextlib/treectrl/www-options.rb | 304 --- ext/tk/sample/tkextlib/vu/Orig_LICENSE.txt | 51 - ext/tk/sample/tkextlib/vu/README.txt | 50 - ext/tk/sample/tkextlib/vu/canvItems.rb | 91 - ext/tk/sample/tkextlib/vu/canvSticker.rb | 83 - ext/tk/sample/tkextlib/vu/canvSticker2.rb | 102 - ext/tk/sample/tkextlib/vu/dial_demo.rb | 114 - ext/tk/sample/tkextlib/vu/m128_000.xbm | 174 -- ext/tk/sample/tkextlib/vu/oscilloscope.rb | 69 - ext/tk/sample/tkextlib/vu/pie.rb | 57 - ext/tk/sample/tkextlib/vu/vu_demo.rb | 68 - ext/tk/sample/tkfrom.rb | 133 - ext/tk/sample/tkhello.rb | 11 - ext/tk/sample/tkline.rb | 48 - ext/tk/sample/tkmenubutton.rb | 136 - ext/tk/sample/tkmsgcat-load_rb.rb | 103 - ext/tk/sample/tkmsgcat-load_rb2.rb | 103 - ext/tk/sample/tkmsgcat-load_tk.rb | 119 - ext/tk/sample/tkmulticolumnlist.rb | 744 ------ ext/tk/sample/tkmultilistbox.rb | 655 ----- ext/tk/sample/tkmultilistframe.rb | 941 ------- ext/tk/sample/tkoptdb-safeTk.rb | 74 - ext/tk/sample/tkoptdb.rb | 107 - ext/tk/sample/tkrttimer.rb | 78 - ext/tk/sample/tksleep_sample.rb | 30 - ext/tk/sample/tktextframe.rb | 282 -- ext/tk/sample/tktextio.rb | 1061 -------- ext/tk/sample/tktimer.rb | 51 - ext/tk/sample/tktimer2.rb | 48 - ext/tk/sample/tktimer3.rb | 60 - ext/tk/sample/tktree.rb | 104 - ext/tk/sample/tktree.tcl | 305 --- ext/tk/sample/ttk_wrapper.rb | 155 -- 688 files changed, 72998 deletions(-) delete mode 100644 ext/tk/sample/24hr_clock.rb delete mode 100644 ext/tk/sample/binding_sample.rb delete mode 100644 ext/tk/sample/bindtag_sample.rb delete mode 100644 ext/tk/sample/binstr_usage.rb delete mode 100644 ext/tk/sample/btn_with_frame.rb delete mode 100644 ext/tk/sample/cd_timer.rb delete mode 100644 ext/tk/sample/cmd_res_test.rb delete mode 100644 ext/tk/sample/cmd_resource delete mode 100644 ext/tk/sample/demos-en/ChangeLog delete mode 100644 ext/tk/sample/demos-en/ChangeLog.prev delete mode 100644 ext/tk/sample/demos-en/README delete mode 100644 ext/tk/sample/demos-en/README.1st delete mode 100644 ext/tk/sample/demos-en/README.tkencoding delete mode 100644 ext/tk/sample/demos-en/anilabel.rb delete mode 100644 ext/tk/sample/demos-en/aniwave.rb delete mode 100644 ext/tk/sample/demos-en/arrow.rb delete mode 100644 ext/tk/sample/demos-en/bind.rb delete mode 100644 ext/tk/sample/demos-en/bitmap.rb delete mode 100644 ext/tk/sample/demos-en/browse1 delete mode 100644 ext/tk/sample/demos-en/browse2 delete mode 100644 ext/tk/sample/demos-en/button.rb delete mode 100644 ext/tk/sample/demos-en/check.rb delete mode 100644 ext/tk/sample/demos-en/check2.rb delete mode 100644 ext/tk/sample/demos-en/clrpick.rb delete mode 100644 ext/tk/sample/demos-en/colors.rb delete mode 100644 ext/tk/sample/demos-en/combo.rb delete mode 100644 ext/tk/sample/demos-en/cscroll.rb delete mode 100644 ext/tk/sample/demos-en/ctext.rb delete mode 100644 ext/tk/sample/demos-en/dialog1.rb delete mode 100644 ext/tk/sample/demos-en/dialog2.rb delete mode 100644 ext/tk/sample/demos-en/doc.org/README delete mode 100644 ext/tk/sample/demos-en/doc.org/README.JP delete mode 100644 ext/tk/sample/demos-en/doc.org/README.tk80 delete mode 100644 ext/tk/sample/demos-en/doc.org/license.terms delete mode 100644 ext/tk/sample/demos-en/doc.org/license.terms.tk80 delete mode 100644 ext/tk/sample/demos-en/entry1.rb delete mode 100644 ext/tk/sample/demos-en/entry2.rb delete mode 100644 ext/tk/sample/demos-en/entry3.rb delete mode 100644 ext/tk/sample/demos-en/filebox.rb delete mode 100644 ext/tk/sample/demos-en/floor.rb delete mode 100644 ext/tk/sample/demos-en/floor2.rb delete mode 100644 ext/tk/sample/demos-en/form.rb delete mode 100644 ext/tk/sample/demos-en/goldberg.rb delete mode 100644 ext/tk/sample/demos-en/hello delete mode 100644 ext/tk/sample/demos-en/hscale.rb delete mode 100644 ext/tk/sample/demos-en/icon.rb delete mode 100644 ext/tk/sample/demos-en/image1.rb delete mode 100644 ext/tk/sample/demos-en/image2.rb delete mode 100644 ext/tk/sample/demos-en/image3.rb delete mode 100644 ext/tk/sample/demos-en/items.rb delete mode 100644 ext/tk/sample/demos-en/ixset delete mode 100644 ext/tk/sample/demos-en/ixset2 delete mode 100644 ext/tk/sample/demos-en/knightstour.rb delete mode 100644 ext/tk/sample/demos-en/label.rb delete mode 100644 ext/tk/sample/demos-en/labelframe.rb delete mode 100644 ext/tk/sample/demos-en/mclist.rb delete mode 100644 ext/tk/sample/demos-en/menu.rb delete mode 100644 ext/tk/sample/demos-en/menu84.rb delete mode 100644 ext/tk/sample/demos-en/menubu.rb delete mode 100644 ext/tk/sample/demos-en/msgbox.rb delete mode 100644 ext/tk/sample/demos-en/msgbox2.rb delete mode 100644 ext/tk/sample/demos-en/paned1.rb delete mode 100644 ext/tk/sample/demos-en/paned2.rb delete mode 100644 ext/tk/sample/demos-en/pendulum.rb delete mode 100644 ext/tk/sample/demos-en/plot.rb delete mode 100644 ext/tk/sample/demos-en/puzzle.rb delete mode 100644 ext/tk/sample/demos-en/radio.rb delete mode 100644 ext/tk/sample/demos-en/radio2.rb delete mode 100644 ext/tk/sample/demos-en/radio3.rb delete mode 100644 ext/tk/sample/demos-en/rmt delete mode 100644 ext/tk/sample/demos-en/rolodex delete mode 100644 ext/tk/sample/demos-en/ruler.rb delete mode 100644 ext/tk/sample/demos-en/sayings.rb delete mode 100644 ext/tk/sample/demos-en/search.rb delete mode 100644 ext/tk/sample/demos-en/spin.rb delete mode 100644 ext/tk/sample/demos-en/square delete mode 100644 ext/tk/sample/demos-en/states.rb delete mode 100644 ext/tk/sample/demos-en/style.rb delete mode 100644 ext/tk/sample/demos-en/tcolor delete mode 100644 ext/tk/sample/demos-en/text.rb delete mode 100644 ext/tk/sample/demos-en/textpeer.rb delete mode 100644 ext/tk/sample/demos-en/timer delete mode 100644 ext/tk/sample/demos-en/tkencoding.rb delete mode 100644 ext/tk/sample/demos-en/toolbar.rb delete mode 100644 ext/tk/sample/demos-en/tree.rb delete mode 100644 ext/tk/sample/demos-en/ttkbut.rb delete mode 100644 ext/tk/sample/demos-en/ttkmenu.rb delete mode 100644 ext/tk/sample/demos-en/ttknote.rb delete mode 100644 ext/tk/sample/demos-en/ttkpane.rb delete mode 100644 ext/tk/sample/demos-en/ttkprogress.rb delete mode 100644 ext/tk/sample/demos-en/twind.rb delete mode 100644 ext/tk/sample/demos-en/twind2.rb delete mode 100644 ext/tk/sample/demos-en/unicodeout.rb delete mode 100644 ext/tk/sample/demos-en/vscale.rb delete mode 100644 ext/tk/sample/demos-en/widget delete mode 100644 ext/tk/sample/demos-jp/README delete mode 100644 ext/tk/sample/demos-jp/README.1st delete mode 100644 ext/tk/sample/demos-jp/anilabel.rb delete mode 100644 ext/tk/sample/demos-jp/aniwave.rb delete mode 100644 ext/tk/sample/demos-jp/arrow.rb delete mode 100644 ext/tk/sample/demos-jp/bind.rb delete mode 100644 ext/tk/sample/demos-jp/bitmap.rb delete mode 100644 ext/tk/sample/demos-jp/browse1 delete mode 100644 ext/tk/sample/demos-jp/browse2 delete mode 100644 ext/tk/sample/demos-jp/button.rb delete mode 100644 ext/tk/sample/demos-jp/check.rb delete mode 100644 ext/tk/sample/demos-jp/check2.rb delete mode 100644 ext/tk/sample/demos-jp/clrpick.rb delete mode 100644 ext/tk/sample/demos-jp/colors.rb delete mode 100644 ext/tk/sample/demos-jp/combo.rb delete mode 100644 ext/tk/sample/demos-jp/cscroll.rb delete mode 100644 ext/tk/sample/demos-jp/ctext.rb delete mode 100644 ext/tk/sample/demos-jp/dialog1.rb delete mode 100644 ext/tk/sample/demos-jp/dialog2.rb delete mode 100644 ext/tk/sample/demos-jp/doc.org/README delete mode 100644 ext/tk/sample/demos-jp/doc.org/README.JP delete mode 100644 ext/tk/sample/demos-jp/doc.org/README.tk80 delete mode 100644 ext/tk/sample/demos-jp/doc.org/license.terms delete mode 100644 ext/tk/sample/demos-jp/doc.org/license.terms.tk80 delete mode 100644 ext/tk/sample/demos-jp/entry1.rb delete mode 100644 ext/tk/sample/demos-jp/entry2.rb delete mode 100644 ext/tk/sample/demos-jp/entry3.rb delete mode 100644 ext/tk/sample/demos-jp/filebox.rb delete mode 100644 ext/tk/sample/demos-jp/floor.rb delete mode 100644 ext/tk/sample/demos-jp/floor2.rb delete mode 100644 ext/tk/sample/demos-jp/form.rb delete mode 100644 ext/tk/sample/demos-jp/goldberg.rb delete mode 100644 ext/tk/sample/demos-jp/hello delete mode 100644 ext/tk/sample/demos-jp/hscale.rb delete mode 100644 ext/tk/sample/demos-jp/icon.rb delete mode 100644 ext/tk/sample/demos-jp/image1.rb delete mode 100644 ext/tk/sample/demos-jp/image2.rb delete mode 100644 ext/tk/sample/demos-jp/image3.rb delete mode 100644 ext/tk/sample/demos-jp/items.rb delete mode 100644 ext/tk/sample/demos-jp/ixset delete mode 100644 ext/tk/sample/demos-jp/ixset2 delete mode 100644 ext/tk/sample/demos-jp/knightstour.rb delete mode 100644 ext/tk/sample/demos-jp/label.rb delete mode 100644 ext/tk/sample/demos-jp/labelframe.rb delete mode 100644 ext/tk/sample/demos-jp/mclist.rb delete mode 100644 ext/tk/sample/demos-jp/menu.rb delete mode 100644 ext/tk/sample/demos-jp/menu84.rb delete mode 100644 ext/tk/sample/demos-jp/menu8x.rb delete mode 100644 ext/tk/sample/demos-jp/menubu.rb delete mode 100644 ext/tk/sample/demos-jp/msgbox.rb delete mode 100644 ext/tk/sample/demos-jp/msgbox2.rb delete mode 100644 ext/tk/sample/demos-jp/paned1.rb delete mode 100644 ext/tk/sample/demos-jp/paned2.rb delete mode 100644 ext/tk/sample/demos-jp/pendulum.rb delete mode 100644 ext/tk/sample/demos-jp/plot.rb delete mode 100644 ext/tk/sample/demos-jp/puzzle.rb delete mode 100644 ext/tk/sample/demos-jp/radio.rb delete mode 100644 ext/tk/sample/demos-jp/radio2.rb delete mode 100644 ext/tk/sample/demos-jp/radio3.rb delete mode 100644 ext/tk/sample/demos-jp/rmt delete mode 100644 ext/tk/sample/demos-jp/rolodex delete mode 100644 ext/tk/sample/demos-jp/rolodex-j delete mode 100644 ext/tk/sample/demos-jp/ruler.rb delete mode 100644 ext/tk/sample/demos-jp/sayings.rb delete mode 100644 ext/tk/sample/demos-jp/search.rb delete mode 100644 ext/tk/sample/demos-jp/spin.rb delete mode 100644 ext/tk/sample/demos-jp/square delete mode 100644 ext/tk/sample/demos-jp/states.rb delete mode 100644 ext/tk/sample/demos-jp/style.rb delete mode 100644 ext/tk/sample/demos-jp/tcolor delete mode 100644 ext/tk/sample/demos-jp/text.rb delete mode 100644 ext/tk/sample/demos-jp/textpeer.rb delete mode 100644 ext/tk/sample/demos-jp/timer delete mode 100644 ext/tk/sample/demos-jp/toolbar.rb delete mode 100644 ext/tk/sample/demos-jp/tree.rb delete mode 100644 ext/tk/sample/demos-jp/ttkbut.rb delete mode 100644 ext/tk/sample/demos-jp/ttkmenu.rb delete mode 100644 ext/tk/sample/demos-jp/ttknote.rb delete mode 100644 ext/tk/sample/demos-jp/ttkpane.rb delete mode 100644 ext/tk/sample/demos-jp/ttkprogress.rb delete mode 100644 ext/tk/sample/demos-jp/twind.rb delete mode 100644 ext/tk/sample/demos-jp/twind2.rb delete mode 100644 ext/tk/sample/demos-jp/unicodeout.rb delete mode 100644 ext/tk/sample/demos-jp/vscale.rb delete mode 100644 ext/tk/sample/demos-jp/widget delete mode 100644 ext/tk/sample/editable_listbox.rb delete mode 100644 ext/tk/sample/encstr_usage.rb delete mode 100644 ext/tk/sample/figmemo_sample.rb delete mode 100644 ext/tk/sample/images/earth.gif delete mode 100644 ext/tk/sample/images/earthris.gif delete mode 100644 ext/tk/sample/images/face.xbm delete mode 100644 ext/tk/sample/images/flagdown.xbm delete mode 100644 ext/tk/sample/images/flagup.xbm delete mode 100644 ext/tk/sample/images/gray25.xbm delete mode 100644 ext/tk/sample/images/grey.25 delete mode 100644 ext/tk/sample/images/grey.5 delete mode 100644 ext/tk/sample/images/letters.xbm delete mode 100644 ext/tk/sample/images/noletter.xbm delete mode 100644 ext/tk/sample/images/pattern.xbm delete mode 100644 ext/tk/sample/images/tcllogo.gif delete mode 100644 ext/tk/sample/images/teapot.ppm delete mode 100644 ext/tk/sample/irbtk.rb delete mode 100644 ext/tk/sample/irbtkw.rbw delete mode 100644 ext/tk/sample/iso2022-kr.txt delete mode 100644 ext/tk/sample/menubar1.rb delete mode 100644 ext/tk/sample/menubar2.rb delete mode 100644 ext/tk/sample/menubar3.rb delete mode 100644 ext/tk/sample/msgs_rb/README delete mode 100644 ext/tk/sample/msgs_rb/cs.msg delete mode 100644 ext/tk/sample/msgs_rb/de.msg delete mode 100644 ext/tk/sample/msgs_rb/el.msg delete mode 100644 ext/tk/sample/msgs_rb/en.msg delete mode 100644 ext/tk/sample/msgs_rb/en_gb.msg delete mode 100644 ext/tk/sample/msgs_rb/eo.msg delete mode 100644 ext/tk/sample/msgs_rb/es.msg delete mode 100644 ext/tk/sample/msgs_rb/fr.msg delete mode 100644 ext/tk/sample/msgs_rb/it.msg delete mode 100644 ext/tk/sample/msgs_rb/ja.msg delete mode 100644 ext/tk/sample/msgs_rb/nl.msg delete mode 100644 ext/tk/sample/msgs_rb/pl.msg delete mode 100644 ext/tk/sample/msgs_rb/ru.msg delete mode 100644 ext/tk/sample/msgs_rb2/README delete mode 100644 ext/tk/sample/msgs_rb2/de.msg delete mode 100644 ext/tk/sample/msgs_rb2/ja.msg delete mode 100644 ext/tk/sample/msgs_tk/README delete mode 100644 ext/tk/sample/msgs_tk/cs.msg delete mode 100644 ext/tk/sample/msgs_tk/de.msg delete mode 100644 ext/tk/sample/msgs_tk/el.msg delete mode 100644 ext/tk/sample/msgs_tk/en.msg delete mode 100644 ext/tk/sample/msgs_tk/en_gb.msg delete mode 100644 ext/tk/sample/msgs_tk/eo.msg delete mode 100644 ext/tk/sample/msgs_tk/es.msg delete mode 100644 ext/tk/sample/msgs_tk/fr.msg delete mode 100644 ext/tk/sample/msgs_tk/it.msg delete mode 100644 ext/tk/sample/msgs_tk/ja.msg delete mode 100644 ext/tk/sample/msgs_tk/license.terms delete mode 100644 ext/tk/sample/msgs_tk/nl.msg delete mode 100644 ext/tk/sample/msgs_tk/pl.msg delete mode 100644 ext/tk/sample/msgs_tk/ru.msg delete mode 100644 ext/tk/sample/multi-ip_sample.rb delete mode 100644 ext/tk/sample/multi-ip_sample2.rb delete mode 100644 ext/tk/sample/optobj_sample.rb delete mode 100644 ext/tk/sample/propagate.rb delete mode 100644 ext/tk/sample/remote-ip_sample.rb delete mode 100644 ext/tk/sample/remote-ip_sample2.rb delete mode 100644 ext/tk/sample/resource.en delete mode 100644 ext/tk/sample/resource.ja delete mode 100755 ext/tk/sample/safe-tk.rb delete mode 100644 ext/tk/sample/scrollframe.rb delete mode 100644 ext/tk/sample/tcltklib/batsu.gif delete mode 100644 ext/tk/sample/tcltklib/lines0.tcl delete mode 100644 ext/tk/sample/tcltklib/lines1.rb delete mode 100644 ext/tk/sample/tcltklib/lines2.rb delete mode 100644 ext/tk/sample/tcltklib/lines3.rb delete mode 100644 ext/tk/sample/tcltklib/lines4.rb delete mode 100644 ext/tk/sample/tcltklib/maru.gif delete mode 100644 ext/tk/sample/tcltklib/safeTk.rb delete mode 100644 ext/tk/sample/tcltklib/sample0.rb delete mode 100644 ext/tk/sample/tcltklib/sample1.rb delete mode 100644 ext/tk/sample/tcltklib/sample2.rb delete mode 100644 ext/tk/sample/tkalignbox.rb delete mode 100644 ext/tk/sample/tkballoonhelp.rb delete mode 100644 ext/tk/sample/tkbiff.rb delete mode 100644 ext/tk/sample/tkbrowse.rb delete mode 100644 ext/tk/sample/tkcombobox.rb delete mode 100644 ext/tk/sample/tkdialog.rb delete mode 100644 ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt delete mode 100644 ext/tk/sample/tkextlib/ICONS/tkIcons delete mode 100644 ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde delete mode 100644 ext/tk/sample/tkextlib/ICONS/tkIcons.kde delete mode 100644 ext/tk/sample/tkextlib/ICONS/viewIcons.rb delete mode 100644 ext/tk/sample/tkextlib/blt/barchart5.rb delete mode 100644 ext/tk/sample/tkextlib/blt/calendar.rb delete mode 100644 ext/tk/sample/tkextlib/blt/graph6.rb delete mode 100644 ext/tk/sample/tkextlib/blt/graph7.rb delete mode 100644 ext/tk/sample/tkextlib/blt/graph7a.rb delete mode 100644 ext/tk/sample/tkextlib/blt/graph7b.rb delete mode 100644 ext/tk/sample/tkextlib/blt/graph7c.rb delete mode 100644 ext/tk/sample/tkextlib/blt/images/buckskin.gif delete mode 100644 ext/tk/sample/tkextlib/blt/images/chalk.gif delete mode 100644 ext/tk/sample/tkextlib/blt/images/qv100.t.gif delete mode 100644 ext/tk/sample/tkextlib/blt/images/rain.gif delete mode 100644 ext/tk/sample/tkextlib/blt/images/sample.gif delete mode 100644 ext/tk/sample/tkextlib/blt/pareto.rb delete mode 100644 ext/tk/sample/tkextlib/blt/plot1.rb delete mode 100644 ext/tk/sample/tkextlib/blt/plot1b.rb delete mode 100644 ext/tk/sample/tkextlib/blt/readme.txt delete mode 100644 ext/tk/sample/tkextlib/blt/scripts/stipples.rb delete mode 100644 ext/tk/sample/tkextlib/blt/winop1.rb delete mode 100644 ext/tk/sample/tkextlib/blt/winop2.rb delete mode 100644 ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt delete mode 100644 ext/tk/sample/tkextlib/bwidget/basic.rb delete mode 100644 ext/tk/sample/tkextlib/bwidget/bwidget.xbm delete mode 100644 ext/tk/sample/tkextlib/bwidget/demo.rb delete mode 100644 ext/tk/sample/tkextlib/bwidget/dnd.rb delete mode 100644 ext/tk/sample/tkextlib/bwidget/manager.rb delete mode 100644 ext/tk/sample/tkextlib/bwidget/select.rb delete mode 100644 ext/tk/sample/tkextlib/bwidget/tmpldlg.rb delete mode 100644 ext/tk/sample/tkextlib/bwidget/tree.rb delete mode 100644 ext/tk/sample/tkextlib/bwidget/x1.xbm delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/close.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/find.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/help.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/new.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/open.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/print.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/save.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/select.gif delete mode 100644 ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/shell.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb delete mode 100644 ext/tk/sample/tkextlib/iwidgets/sample/watch.rb delete mode 100644 ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt delete mode 100644 ext/tk/sample/tkextlib/tcllib/datefield.rb delete mode 100644 ext/tk/sample/tkextlib/tcllib/plotdemos1.rb delete mode 100644 ext/tk/sample/tkextlib/tcllib/plotdemos2.rb delete mode 100644 ext/tk/sample/tkextlib/tcllib/plotdemos3.rb delete mode 100644 ext/tk/sample/tkextlib/tcllib/xyplot.rb delete mode 100644 ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt delete mode 100644 ext/tk/sample/tkextlib/tile/demo.rb delete mode 100644 ext/tk/sample/tkextlib/tile/iconlib.tcl delete mode 100644 ext/tk/sample/tkextlib/tile/readme.txt delete mode 100644 ext/tk/sample/tkextlib/tile/repeater.tcl delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/button-h.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.xcf delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/button-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hu.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nu.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/slider-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/slider.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc.rb delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik.tcl delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif delete mode 100644 ext/tk/sample/tkextlib/tile/toolbutton.tcl delete mode 100644 ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt delete mode 100644 ext/tk/sample/tkextlib/tkHTML/README delete mode 100644 ext/tk/sample/tkextlib/tkHTML/hv.rb delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image1 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image10 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image11 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image12 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image13 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image14 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image2 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image3 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image4 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image5 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image6 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image7 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image8 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/image9 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page1/index.html delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image1 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image10 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image11 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image12 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image13 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image14 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image15 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image16 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image17 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image18 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image19 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image2 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image20 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image21 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image22 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image23 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image24 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image25 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image26 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image27 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image28 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image29 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image3 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image30 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image31 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image32 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image33 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image34 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image35 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image36 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image37 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image38 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image39 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image4 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image5 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image6 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image7 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image8 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/image9 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page2/index.html delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image1 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image10 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image11 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image12 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image13 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image14 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image2 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image3 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image4 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image5 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image6 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image7 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image8 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/image9 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page3/index.html delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page4/image1 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page4/image2 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page4/image3 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page4/image4 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page4/image5 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page4/image6 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page4/image7 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page4/image8 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page4/image9 delete mode 100644 ext/tk/sample/tkextlib/tkHTML/page4/index.html delete mode 100644 ext/tk/sample/tkextlib/tkHTML/ss.rb delete mode 100644 ext/tk/sample/tkextlib/tkimg/demo.rb delete mode 100644 ext/tk/sample/tkextlib/tkimg/license_terms_of_Img_extension delete mode 100644 ext/tk/sample/tkextlib/tkimg/readme.txt delete mode 100644 ext/tk/sample/tkextlib/tktable/Orig_LICENSE.txt delete mode 100644 ext/tk/sample/tkextlib/tktable/basic.rb delete mode 100644 ext/tk/sample/tkextlib/tktable/buttons.rb delete mode 100644 ext/tk/sample/tkextlib/tktable/command.rb delete mode 100644 ext/tk/sample/tkextlib/tktable/debug.rb delete mode 100644 ext/tk/sample/tkextlib/tktable/dynarows.rb delete mode 100644 ext/tk/sample/tkextlib/tktable/maxsize.rb delete mode 100644 ext/tk/sample/tkextlib/tktable/spreadsheet.rb delete mode 100644 ext/tk/sample/tkextlib/tktable/tcllogo.gif delete mode 100644 ext/tk/sample/tkextlib/tktable/valid.rb delete mode 100644 ext/tk/sample/tkextlib/treectrl/bitmaps.rb delete mode 100644 ext/tk/sample/tkextlib/treectrl/demo.rb delete mode 100644 ext/tk/sample/tkextlib/treectrl/explorer.rb delete mode 100644 ext/tk/sample/tkextlib/treectrl/help.rb delete mode 100644 ext/tk/sample/tkextlib/treectrl/imovie.rb delete mode 100644 ext/tk/sample/tkextlib/treectrl/layout.rb delete mode 100644 ext/tk/sample/tkextlib/treectrl/mailwasher.rb delete mode 100644 ext/tk/sample/tkextlib/treectrl/outlook-folders.rb delete mode 100644 ext/tk/sample/tkextlib/treectrl/outlook-newgroup.rb delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/big-dll.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/big-exe.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/big-file.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/big-folder.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/big-txt.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/checked.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/file.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/folder-closed.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/folder-open.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/help-book-closed.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/help-book-open.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/help-page.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/imovie-01.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/imovie-02.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/imovie-03.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/imovie-04.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/imovie-05.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/imovie-06.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/imovie-07.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/internet-check-off.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/internet-check-on.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/internet-print.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/internet-radio-off.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/internet-radio-on.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/internet-search.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/internet-security.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/mac-collapse.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/mac-expand.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-arrow.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-clip.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-deleted.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-draft.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-folder.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-group.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-inbox.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-local.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-main.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-outbox.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-read-2.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-read.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-sent.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-server.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-unread.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/outlook-watch.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/sky.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/small-dll.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/small-exe.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/small-file.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/small-folder.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/small-txt.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/pics/unchecked.gif delete mode 100644 ext/tk/sample/tkextlib/treectrl/random.rb delete mode 100644 ext/tk/sample/tkextlib/treectrl/readme.txt delete mode 100644 ext/tk/sample/tkextlib/treectrl/www-options.rb delete mode 100644 ext/tk/sample/tkextlib/vu/Orig_LICENSE.txt delete mode 100644 ext/tk/sample/tkextlib/vu/README.txt delete mode 100644 ext/tk/sample/tkextlib/vu/canvItems.rb delete mode 100644 ext/tk/sample/tkextlib/vu/canvSticker.rb delete mode 100644 ext/tk/sample/tkextlib/vu/canvSticker2.rb delete mode 100644 ext/tk/sample/tkextlib/vu/dial_demo.rb delete mode 100644 ext/tk/sample/tkextlib/vu/m128_000.xbm delete mode 100644 ext/tk/sample/tkextlib/vu/oscilloscope.rb delete mode 100644 ext/tk/sample/tkextlib/vu/pie.rb delete mode 100644 ext/tk/sample/tkextlib/vu/vu_demo.rb delete mode 100644 ext/tk/sample/tkfrom.rb delete mode 100644 ext/tk/sample/tkhello.rb delete mode 100644 ext/tk/sample/tkline.rb delete mode 100644 ext/tk/sample/tkmenubutton.rb delete mode 100644 ext/tk/sample/tkmsgcat-load_rb.rb delete mode 100644 ext/tk/sample/tkmsgcat-load_rb2.rb delete mode 100644 ext/tk/sample/tkmsgcat-load_tk.rb delete mode 100644 ext/tk/sample/tkmulticolumnlist.rb delete mode 100644 ext/tk/sample/tkmultilistbox.rb delete mode 100644 ext/tk/sample/tkmultilistframe.rb delete mode 100755 ext/tk/sample/tkoptdb-safeTk.rb delete mode 100644 ext/tk/sample/tkoptdb.rb delete mode 100644 ext/tk/sample/tkrttimer.rb delete mode 100644 ext/tk/sample/tksleep_sample.rb delete mode 100644 ext/tk/sample/tktextframe.rb delete mode 100644 ext/tk/sample/tktextio.rb delete mode 100644 ext/tk/sample/tktimer.rb delete mode 100644 ext/tk/sample/tktimer2.rb delete mode 100644 ext/tk/sample/tktimer3.rb delete mode 100644 ext/tk/sample/tktree.rb delete mode 100644 ext/tk/sample/tktree.tcl delete mode 100644 ext/tk/sample/ttk_wrapper.rb (limited to 'ext/tk/sample') diff --git a/ext/tk/sample/24hr_clock.rb b/ext/tk/sample/24hr_clock.rb deleted file mode 100644 index 3a030ddaf2..0000000000 --- a/ext/tk/sample/24hr_clock.rb +++ /dev/null @@ -1,287 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false - -require 'tk' - -class Clock - def initialize(clock24 = true) - @clock = (clock24)? 24: 12 - - @size = 200 - @cdot_size = 5 - - @cdot_color = 'black' - @hour_hand_color = 'black' - @minute_hand_color = 'gray25' - @second_hand_color = 'gray50' - - @mark_font = 'Helvetica -14' - @mark_width = 3 - @mark_color = 'black' - @submark_color = 'gray50' - - @c = TkCanvas.new(:width=>2*@size, :height=>2*@size, - :scrollregion=>[-@size, -@size, @size, @size] - ).pack(:fill=>:both, :expand=>true) - - @tag = TkcTag.new(@c) - @hand_tag = TkcTag.new(@c) - - @circle_coords = [[-0.9*@size, -0.9*@size], [0.9*@size, 0.9*@size]] - @oval = TkcOval.new(@c, @circle_coords, :fill=>'white', :tags=>[@tag]) - - f = TkFrame.new.pack - TkLabel.new(f, :text=>'CURRENT:').pack(:side=>:left) - @now = TkLabel.new(f, :text=>'00:00:00').pack(:side=>:left, :padx=>2) - TkLabel.new(f, :text=>' ').pack(:side=>:left) - TkLabel.new(f, :text=>' ').pack(:side=>:right) - @l = TkLabel.new(f, :text=>'00:00').pack(:side=>:right, :padx=>2) - TkLabel.new(f, :text=>'MOUSE-POINTER:').pack(:side=>:right) - - cmd = proc{|x, y| - @l.text = '%02d:%02d' % coords_to_time(@c.canvasx(x), @c.canvasy(y)) - } - @c.bind('Motion', cmd, '%x %y') - @tag.bind('Motion', cmd, '%x %y') - - _create_hands - _create_marks - - timer_proc = proc{ - t = Time.now - @now.text = '%02d:%02d:%02d' % [t.hour, t.min, t.sec] - set_hands(t.hour, t.min, t.sec) - } - - timer_proc.call - @timer = TkRTTimer.start(100, -1, timer_proc) - end - - def _create_marks - @mark_tag = TkcTag.new(@c) - - TkcLine.new(@c, 0, -0.90*@size, 0, -0.85*@size, - :tags=>[@tag, @mark_tag], - :width=>@mark_width, :fill=>@mark_color) - TkcLine.new(@c, 0.90*@size, 0, 0.85*@size, 0, - :tags=>[@tag, @mark_tag], - :width=>@mark_width, :fill=>@mark_color) - TkcLine.new(@c, 0, 0.90*@size, 0, 0.85*@size, - :tags=>[@tag, @mark_tag], - :width=>@mark_width, :fill=>@mark_color) - TkcLine.new(@c, -0.90*@size, 0, -0.85*@size, 0, - :tags=>[@tag, @mark_tag], - :width=>@mark_width, :fill=>@mark_color) - - TkcText.new(@c, [0, -0.92*@size], :text=>0, - :anchor=>'s', :fill=>@mark_color) - TkcText.new(@c, [0.92*@size, 0], :text=>@clock.div(4), - :anchor=>'w', :fill=>@mark_color) - TkcText.new(@c, [0, 0.92*@size], :text=>@clock.div(2), - :anchor=>'n', :fill=>@mark_color) - TkcText.new(@c, [-0.92*@size, 0], :text=>@clock.div(4)*3, - :anchor=>'e', :fill=>@mark_color) - - [30.0, 60.0].each{|angle| - rad = Math::PI * angle / 180.0 - x_base = @size*Math::sin(rad) - y_base = @size*Math::cos(rad) - - x1 = 0.90*x_base - y1 = 0.90*y_base - - x2 = 0.85*x_base - y2 = 0.85*y_base - - TkcLine.new(@c, x1, y1, x2, y2, - :tags=>[@tag, @mark_tag], - :width=>@mark_width, :fill=>@mark_color) - TkcLine.new(@c, x1, -y1, x2, -y2, - :tags=>[@tag, @mark_tag], - :width=>@mark_width, :fill=>@mark_color) - TkcLine.new(@c, -x1, y1, -x2, y2, - :tags=>[@tag, @mark_tag], - :width=>@mark_width, :fill=>@mark_color) - TkcLine.new(@c, -x1, -y1, -x2, -y2, - :tags=>[@tag, @mark_tag], - :width=>@mark_width, :fill=>@mark_color) - - x3 = 0.92*x_base - y3 = 0.92*y_base - - if @clock == 24 - dh = angle.to_i/15 - else # @clock == 12 - dh = angle.to_i/30 - end - - TkcText.new(@c, x3, -y3, :text=>dh, - :anchor=>'sw', :fill=>@mark_color) - TkcText.new(@c, x3, y3, :text=>@clock.div(2)-dh, - :anchor=>'nw', :fill=>@mark_color) - TkcText.new(@c, -x3, y3, :text=>@clock.div(2)+dh, - :anchor=>'ne', :fill=>@mark_color) - TkcText.new(@c, -x3, -y3, :text=>@clock-dh, - :anchor=>'se', :fill=>@mark_color) - } - - if @clock == 24 - [15.0, 45.0, 75.0].each{|angle| - rad = Math::PI * angle / 180.0 - x_base = @size*Math::sin(rad) - y_base = @size*Math::cos(rad) - - x1 = 0.90*x_base - y1 = 0.90*y_base - - x2 = 0.875*x_base - y2 = 0.875*y_base - - TkcLine.new(@c, x1, y1, x2, y2, - :tags=>[@tag, @mark_tag], - :width=>@mark_width, :fill=>@submark_color) - TkcLine.new(@c, x1, -y1, x2, -y2, - :tags=>[@tag, @mark_tag], - :width=>@mark_width, :fill=>@submark_color) - TkcLine.new(@c, -x1, y1, -x2, y2, - :tags=>[@tag, @mark_tag], - :width=>@mark_width, :fill=>@submark_color) - TkcLine.new(@c, -x1, -y1, -x2, -y2, - :tags=>[@tag, @mark_tag], - :width=>@mark_width, :fill=>@submark_color) - } - end - end - - def _create_hands - hour_hand_len = 0.55*@size - minute_hand_len = 0.85*@size - second_hand_len = 0.88*@size - - hour_hand_width = 1.8*@cdot_size - minute_hand_width = 1.0*@cdot_size - second_hand_width = 1 # 0.4*@cdot_size - - @hour_hand_coords = [ - [0, -0.5*@cdot_size], - [hour_hand_width, -0.5*@cdot_size-hour_hand_width], - [hour_hand_width, -hour_hand_len+hour_hand_width], - [0, -hour_hand_len], - [-hour_hand_width, -hour_hand_len+hour_hand_width], - [-hour_hand_width, -0.5*@cdot_size-hour_hand_width], - ] - @minute_hand_coords = [ - [0, -0.5*@cdot_size], - [minute_hand_width, -0.5*@cdot_size - minute_hand_width], - [minute_hand_width, -minute_hand_len+minute_hand_width], - [0, -minute_hand_len], - [-minute_hand_width, -minute_hand_len+minute_hand_width], - [-minute_hand_width, -0.5*@cdot_size-minute_hand_width], - ] - @second_hand_coords = [ - [0, -0.5*@cdot_size], - [second_hand_width, -0.5*@cdot_size - second_hand_width], - [second_hand_width, -second_hand_len+second_hand_width], - [0, -second_hand_len], - [-second_hand_width, -second_hand_len+second_hand_width], - [-second_hand_width, -0.5*@cdot_size-second_hand_width], - ] - - @hour_hand = TkcPolygon.new(@c, @hour_hand_coords, - :tags=>[@tag, @hand_tag], - :outline=>@hour_hand_color, - :fill=>@hour_hand_color) - - @minute_hand = TkcPolygon.new(@c, @minute_hand_coords, - :tags=>[@tag, @hand_tag], - :outline=>@minute_hand_color, - :fill=>@minute_hand_color) - - @second_hand = TkcPolygon.new(@c, @second_hand_coords, - :tags=>[@tag, @hand_tag], - :outline=>@second_hand_color, - :fill=>@second_hand_color) - - @center_dot = TkcOval.new(@c, - [-@cdot_size, -@cdot_size], - [@cdot_size, @cdot_size], - :outline=>@cdot_color, :fill=>@cdot_color) - end - private :_create_hands - - def _raise_hands - @hour_hand.raise - @minute_hand.raise - @second_hand.raise - @center_dot.raise - end - private :_raise_hands - - def _raise_marks - @mark_tag.raise - end - private :_raise_marks - - def set_hands(hh, mm, ss) - ss_angle = Math::PI * ss / 30.0 - mm_angle = Math::PI * (mm + ss/60.0) / 30.0 - hh_angle = Math::PI * (hh + (mm + ss/60.0)/60.0) / (@clock.div(2)) - - @second_hand.coords = @second_hand_coords.collect{|x, y| - r = Math::hypot(y, x) - a = Math::atan2(y, x) + ss_angle - [Math::cos(a) * r, Math::sin(a) * r] - } - - @minute_hand.coords = @minute_hand_coords.collect{|x, y| - r = Math::hypot(y, x) - a = Math::atan2(y, x) + mm_angle - [Math::cos(a) * r, Math::sin(a) * r] - } - - @hour_hand.coords = @hour_hand_coords.collect{|x, y| - r = Math::hypot(y, x) - a = Math::atan2(y, x) + hh_angle - [Math::cos(a) * r, Math::sin(a) * r] - } - - _raise_hands - _raise_marks - end - - def coords_to_time(x, y) - return ((y < 0)? [0, 0]: [@clock.div(2), 0]) if x == 0 - if @clock == 24 - offset = (x<0&&y<0)? 1800.0: 360.0 - m_half = 720.0 - else # @clock == 12 - offset = (x<0&&y<0)? 900.0: 180.0 - m_half = 360.0 - end - (offset + m_half*Math.atan2(y,x)/Math::PI).round.divmod(60) - end - - def create_pie(hh, mm, span, color='red') - if @clock == 24 - start = 90.0 - (hh*60 + mm)/4.0 # 360.0*(hh*60+mm)/(24*60) - extent = -span/4.0 - else # @clock == 12 - start = 90.0 - (hh*60 + mm)/2.0 # 360.0*(hh*60+mm)/(12*60) - extent = -span/2.0 - end - - pie = TkcArc.new(@c, @circle_coords, :tags=>[@tag], - :outline=>'black', 'fill'=>color, - :start=>start, :extent=>extent) - _raise_hands - _raise_marks - pie - end -end - -sched = Clock.new -sched.create_pie(0,0, 60) # 60 minutes from 00:00 -sched.create_pie(6,30, 280, 'green') # 280 minutes from 06:30 -sched.create_pie(15,20, 90, 'blue') # 90 minutes from 15:20 - -Tk.mainloop diff --git a/ext/tk/sample/binding_sample.rb b/ext/tk/sample/binding_sample.rb deleted file mode 100644 index a324a745f3..0000000000 --- a/ext/tk/sample/binding_sample.rb +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false - -require 'tk' - -class Button_clone < TkLabel - def initialize(*args) - @command = nil - - if args[-1].kind_of?(Hash) - keys = _symbolkey2str(args.pop) - @command = keys.delete('command') - - keys['highlightthickness'] = 1 unless keys.key?('highlightthickness') - keys['padx'] = '3m' unless keys.key?('padx') - keys['pady'] = '1m' unless keys.key?('pady') - keys['relief'] = 'raised' unless keys.key?('relief') - - args.push(keys) - end - - super(*args) - - @press = false - - self.bind('Enter', proc{self.background(self.activebackground)}) - self.bind('Leave', proc{ - @press = false - self.background(self.highlightbackground) - self.relief('raised') - }) - - self.bind('ButtonPress-1', proc{@press = true; self.relief('sunken')}) - self.bind('ButtonRelease-1', proc{ - self.relief('raised') - @command.call if @press && @command - @press = false - }) - end - - def command(cmd = Proc.new) - @command = cmd - end - - def invoke - if @command - @command.call - else - '' - end - end -end - -TkLabel.new(:text=><'red').pack(:pady=>3) - -v = TkVariable.new(0) - -TkFrame.new{|f| - TkLabel.new(f, :text=>'click count : ').pack(:side=>:left) - TkLabel.new(f, :textvariable=>v).pack(:side=>:left) -}.pack - -TkButton.new(:text=>'normal Button widget', - :command=>proc{ - puts 'button is clicked!!' - lbl.text 'button is clicked!!' - v.numeric += 1 - }){ - pack(:fill=>:x, :expand=>true) -} - -Button_clone.new(:text=>'Label with Button binding', - :command=>proc{ - puts 'label is clicked!!' - lbl.text 'label is clicked!!' - v.numeric += 1 - }){ - pack(:fill=>:x, :expand=>true) -} - -Tk.mainloop diff --git a/ext/tk/sample/bindtag_sample.rb b/ext/tk/sample/bindtag_sample.rb deleted file mode 100644 index 7b4ac16f64..0000000000 --- a/ext/tk/sample/bindtag_sample.rb +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' - -TkLabel.new(:text=><:left).pack -This is a sample of bindtags and usage of -Tk.callback_break/Tk.callback_continue. -Please check the work of following buttons -(attend the difference between before/after - pressing the bottom button), and see the -source code. -EOT - -def set_class_bind - TkButton.bind('ButtonPress-1', - proc{puts 'bind "ButtonPress-1" of TkButton class'}) - TkButton.bind('ButtonRelease-1', - proc{puts 'bind "ButtonRelease-1" of TkButton class'}) -end - -# set root binding -r = TkRoot.new -r.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of root widget'}) -r.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of root widget'}) - -# set 'all' binding -TkBindTag::ALL.bind('ButtonPress-1', - proc{puts 'bind "ButtonPress-1" of the tag "all"'}) -TkBindTag::ALL.bind('ButtonRelease-1', - proc{puts 'bind "ButtonRelease-1" of the tag "all"'}) - -# create buttons -b1 = TkButton.new(:text=>'button-1', - :command=>proc{puts "command of button-1"}).pack -b2 = TkButton.new(:text=>'button-2', - :command=>proc{puts "command of button-2"}).pack -b3 = TkButton.new(:text=>'button-3', - :command=>proc{puts "command of button-3"}).pack -b4 = TkButton.new(:text=>'button-4', - :command=>proc{puts "command of button-4"}).pack -b5 = TkButton.new(:text=>'button-5', - :command=>proc{puts "command of button-5"}).pack - -# set button binding -b1.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of button-1'}) -b1.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-1'}) - -b2.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of button-2'}) -b2.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-2'}) - -b3.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of button-3'}) -b3.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-3'}) - -b4.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of button-4'}) -b4.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-4'}) - -b5.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of button-5'}) -b5.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-5'}) - -# create bindtag and set binding -tag1 = TkBindTag.new -tag1.bind('ButtonPress-1', proc{puts 'bind "ButtonPress-1" of tag1'}) -tag1.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of tag1'}) - -tag2 = TkBindTag.new -tag2.bind('ButtonPress-1', - proc{ - puts 'bind "ButtonPress-1" of tag2' - puts 'call Tk.callback_continue' - Tk.callback_continue - puts 'never see this message' - }) -tag2.bind('ButtonRelease-1', - proc{ - puts 'bind "ButtonRelease-1" of tag2' - puts 'call Tk.callback_continue' - Tk.callback_continue - puts 'never see this message' - }) - -tag3 = TkBindTag.new -tag3.bind('ButtonPress-1', - proc{ - puts 'bind "ButtonPress-1" of tag3' - puts 'call Tk.callback_break' - Tk.callback_break - puts 'never see this message' - }) -tag3.bind('ButtonRelease-1', - proc{ - puts 'bind "ButtonRelease-1" of tag3' - puts 'call Tk.callback_break' - Tk.callback_break - puts 'never see this message' - }) - -# set bindtags -p b1.bindtags - -tags = b2.bindtags -tags[2,0] = tag1 -tags[0,0] = tag1 -b2.bindtags(tags) -p b2.bindtags - -tags = b3.bindtags -tags[2,0] = tag2 -tags[0,0] = tag2 -b3.bindtags(tags) -p b3.bindtags - -tags = b4.bindtags -tags[2,0] = tag3 -tags[0,0] = tag3 -b4.bindtags(tags) -p b4.bindtags - -b5.bindtags([tag1, TkButton, tag2, b5]) - -# create button to set button class binding -TkButton.new(:text=>'set binding to TkButton class', - :command=>proc{ - puts 'call "set_class_bind"' - set_class_bind - }).pack(:pady=>7) - -# start event-loop -Tk.mainloop diff --git a/ext/tk/sample/binstr_usage.rb b/ext/tk/sample/binstr_usage.rb deleted file mode 100644 index 92882b8e1b..0000000000 --- a/ext/tk/sample/binstr_usage.rb +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false - -require "tk" - -TkMessage.new(:width=>360, :text=><ImgFile) -p ph1.configinfo - -b_str = Tk::BinaryString(IO.read(ImgFile)) -p [b_str, b_str.encoding] - -ph2 = TkPhotoImage.new(:data=>b_str) -p ph2.configinfo -p ph2.data(:grayscale=>true) - -ph3 = TkPhotoImage.new(:palette=>256) -ph3.put(ph2.data) - -ph4 = TkPhotoImage.new() -ph4.put(ph2.data(:grayscale=>true)) - -#p [b_str.encoding, b_str.rb_encoding] - -f = TkFrame.new.pack -TkButton.new(:parent=>f, :image=>ph1, :command=>proc{exit}).pack(:side=>:left) -TkButton.new(:parent=>f, :image=>ph2, :command=>proc{exit}).pack(:side=>:left) -TkButton.new(:parent=>f, :image=>ph3, :command=>proc{exit}).pack(:side=>:left) -TkButton.new(:parent=>f, :image=>ph4, :command=>proc{exit}).pack(:side=>:left) - -Tk.mainloop diff --git a/ext/tk/sample/btn_with_frame.rb b/ext/tk/sample/btn_with_frame.rb deleted file mode 100644 index 43e120b123..0000000000 --- a/ext/tk/sample/btn_with_frame.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: false -require 'tk' - -class Button_with_Frame < TkButton - def create_self(keys) - @frame = TkFrame.new('widgetname'=>@path, 'background'=>'yellow') - install_win(@path) # create new @path which is a daughter of old @path - super(keys) - TkPack(@path, :padx=>7, :pady=>7) - @epath = @frame.path - end - def epath - @epath - end -end - -Button_with_Frame.new(:text=>'QUIT', :command=>proc{exit}) { - pack(:padx=>15, :pady=>5) -} - -Tk.mainloop diff --git a/ext/tk/sample/cd_timer.rb b/ext/tk/sample/cd_timer.rb deleted file mode 100644 index 1efe8cdb7c..0000000000 --- a/ext/tk/sample/cd_timer.rb +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -# -# countdown timer -# usage: cd_timer min [, min ... ] -# ( e.g. cd_timer 0.5 1 3 5 10 ) -# -require 'tk' - -if ARGV.empty? - $stderr.puts 'Error:: No time arguments for counting down' - exit(1) -end - -width = 10 - -TkButton.new(:text=>'exit', - :command=>proc{exit}).pack(:side=>:bottom, :fill=>:x) - -b = TkButton.new(:text=>'start').pack(:side=>:top, :fill=>:x) - -f = TkFrame.new(:relief=>:ridge, :borderwidth=>2).pack(:fill=>:x) -TkLabel.new(f, :relief=>:flat, :pady=>3, - :background=>'black', :foreground=>'white', - :text=>' elapsed: ').pack(:fill=>:x, :side=>:left, :expand=>true) -now = TkLabel.new(f, :width=>width, :relief=>:flat, :pady=>3, :anchor=>:w, - :background=>'black', :foreground=>'white', - :text=>'%4d:%02d.00' % [0, 0]).pack(:side=>:right) - -timers = [ TkRTTimer.new(10){|tm| - t = (tm.return_value || 0) + 1 - s, u = t.divmod(100) - m, s = s.divmod(60) - now.text('%4d:%02d.%02d' % [m, s, u]) - t - }.set_start_proc(0, proc{ - now.text('%4d:%02d.00' % [0,0]) - now.foreground('white') - 0 - }) -] - -ARGV.collect{|arg| (Float(arg) * 60).to_i}.sort.each_with_index{|time, idx| - f = TkFrame.new(:relief=>:ridge, :borderwidth=>2).pack(:fill=>:x) - TkLabel.new(f, :relief=>:flat, :pady=>3, - :text=>' %4d:%02d --> ' % (time.divmod(60))).pack(:side=>:left) - l = TkLabel.new(f, :width=>width, :relief=>:flat, :pady=>3, :anchor=>:w, - :text=>'%4d:%02d' % (time.divmod(60))).pack(:side=>:right) - timers << TkRTTimer.new(1000){|tm| - t = (tm.return_value || time) - 1 - if t < 0 - l.text('%4d:%02d' % ((-t).divmod(60))) - else - l.text('%4d:%02d' % (t.divmod(60))) - end - if t.zero? - l.foreground('red') - idx.times{Tk.bell} - end - t - }.set_start_proc(0, proc{ - l.text('%4d:%02d' % (time.divmod(60))) - l.foreground('black') - time - }) -} - -mode = :start -b.command(proc{ - if mode == :start - timers.each{|timer| timer.restart} - b.text('reset') - mode = :reset - else - timers.each{|timer| timer.stop.reset} - b.text('start') - mode = :start - end - }) - -Tk.mainloop - diff --git a/ext/tk/sample/cmd_res_test.rb b/ext/tk/sample/cmd_res_test.rb deleted file mode 100644 index 52c5bc7515..0000000000 --- a/ext/tk/sample/cmd_res_test.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: false -require 'tk' -TkOptionDB.readfile(File.expand_path('cmd_resource', - File.dirname(__FILE__))) -f = TkFrame.new(:class=>'BtnFrame').pack -b = TkButton.new(:parent=>f, :widgetname=>'hello').pack -cmd1 = TkOptionDB.new_proc_class(b, [:show_msg, :bye_msg], 3) -cmd2 = TkOptionDB.new_proc_class(:ZZZ, [:show_msg, :bye_msg], 3, false, cmd1) -cmd3 = TkOptionDB.new_proc_class(:ZZZ, [:show_msg, :bye_msg], 3, false, b) -cmd4 = TkOptionDB.new_proc_class(:BTN_CMD, [:show_msg, :bye_msg], 3){ - def self.__check_proc_string__(str) - "{|arg| print [arg, $SAFE].inspect, ': '; Proc.new#{str}.call(arg)}" - end -} -cmd1.show_msg('cmd1') -cmd2.show_msg('cmd2') -cmd3.show_msg('cmd3') -cmd4.show_msg('cmd4') diff --git a/ext/tk/sample/cmd_resource b/ext/tk/sample/cmd_resource deleted file mode 100644 index 9cc4915546..0000000000 --- a/ext/tk/sample/cmd_resource +++ /dev/null @@ -1,5 +0,0 @@ -*BtnFrame.hello.text: HELLO -*BtnFrame.hello.command: ruby {puts "Hello World!!"} -*BTN_CMD.show_msg: {|arg| print "Hello, #{arg}!!\n"} -*hello.show_msg: {|arg| print "Hello, Hello, #{arg}!!\n"} -*hello.ZZZ.show_msg: {|arg| print "Hello, Hello, ZZZ:#{arg}!!\n"} diff --git a/ext/tk/sample/demos-en/ChangeLog b/ext/tk/sample/demos-en/ChangeLog deleted file mode 100644 index c3f66cf409..0000000000 --- a/ext/tk/sample/demos-en/ChangeLog +++ /dev/null @@ -1,64 +0,0 @@ -2002-08-29 16:30 matt - - * ChangeLog: ChangeLog is auto-generated *from* CVS log. - -2002-08-29 16:27 matt - - * ChangeLog.prev: [no log message] - -2002-08-28 18:07 matt - - * browse1, browse2, hello, ixset, rmt, rolodex, rolodex-j, square, - tcolor, timer, widget: Changed #! lines to the slightly more - portable '#!/usr/bin/env ruby'. - -2002-08-28 17:56 matt - - * icon.rb, items.rb, label.rb, menu.rb, ruler.rb: Changed bitmap - file extensions from .bmp to .xbm. - -2002-08-28 17:55 matt - - * images/: face.bmp, face.xbm, flagdown.bmp, flagdown.xbm, - flagup.bmp, flagup.xbm, gray25.bmp, gray25.xbm, letters.bmp, - letters.xbm, noletter.bmp, noletter.xbm, pattern.bmp, pattern.xbm: - Changed X bitmap file extensions from .bmp to the more intuitive - .xbm. - -2002-08-28 17:35 matt - - * bitmap.rb, colors.rb, cscroll.rb, ctext.rb, hello, ixset, - menubu.rb, patch_1.1c1, rmt, style.rb, timer, ChangeLog, README, - README.tkencoding, arrow.rb, bind.rb, browse1, browse2, button.rb, - check.rb, clrpick.rb, dialog1.rb, dialog2.rb, entry1.rb, entry2.rb, - filebox.rb, floor.rb, form.rb, hscale.rb, icon.rb, image1.rb, - image2.rb, items.rb, label.rb, menu.rb, msgbox.rb, plot.rb, - puzzle.rb, radio.rb, rolodex, rolodex-j, ruler.rb, sayings.rb, - search.rb, square, states.rb, tcolor, text.rb, tkencoding.rb, - twind.rb, vscale.rb, widget, doc.org/README, doc.org/README.JP, - doc.org/README.tk80, doc.org/license.terms, - doc.org/license.terms.tk80, images/earth.gif, images/earthris.gif, - images/face.bmp, images/flagdown.bmp, images/flagup.bmp, - images/gray25.bmp, images/grey.25, images/grey.5, - images/letters.bmp, images/noletter.bmp, images/pattern.bmp, - images/tcllogo.gif, images/teapot.ppm: Initial revision - -2002-08-28 17:35 matt - - * bitmap.rb, colors.rb, cscroll.rb, ctext.rb, hello, ixset, - menubu.rb, patch_1.1c1, rmt, style.rb, timer, ChangeLog, README, - README.tkencoding, arrow.rb, bind.rb, browse1, browse2, button.rb, - check.rb, clrpick.rb, dialog1.rb, dialog2.rb, entry1.rb, entry2.rb, - filebox.rb, floor.rb, form.rb, hscale.rb, icon.rb, image1.rb, - image2.rb, items.rb, label.rb, menu.rb, msgbox.rb, plot.rb, - puzzle.rb, radio.rb, rolodex, rolodex-j, ruler.rb, sayings.rb, - search.rb, square, states.rb, tcolor, text.rb, tkencoding.rb, - twind.rb, vscale.rb, widget, doc.org/README, doc.org/README.JP, - doc.org/README.tk80, doc.org/license.terms, - doc.org/license.terms.tk80, images/earth.gif, images/earthris.gif, - images/face.bmp, images/flagdown.bmp, images/flagup.bmp, - images/gray25.bmp, images/grey.25, images/grey.5, - images/letters.bmp, images/noletter.bmp, images/pattern.bmp, - images/tcllogo.gif, images/teapot.ppm: Taking over demo package - from Jonathan Conway. - diff --git a/ext/tk/sample/demos-en/ChangeLog.prev b/ext/tk/sample/demos-en/ChangeLog.prev deleted file mode 100644 index ba808eca8b..0000000000 --- a/ext/tk/sample/demos-en/ChangeLog.prev +++ /dev/null @@ -1,9 +0,0 @@ -2001-07-26 - - * Moved files to directory ruby-tk81-demos-english in tarball. - -2001-07-26 - - * Added test to widget and hello versus Tk::TCL_VERSION & Tk::JAPANIZED_TK (per Guy Decoux in [ruby-talk:18559]) before requiring tkencoding.rb. - - diff --git a/ext/tk/sample/demos-en/README b/ext/tk/sample/demos-en/README deleted file mode 100644 index 033dca33c6..0000000000 --- a/ext/tk/sample/demos-en/README +++ /dev/null @@ -1,138 +0,0 @@ -Current Maintainer: - Jonathan Conway - rise@knavery.net - - Please direct all bug reports/requests/suggestions to the above - address. - - -Notes: - -* The files hello and widget have been changed to test Tk::TCL_VERSION - and Tk::JAPANIZED_TK before requiring tkencoding.rb to prevent an - infinite loop. This test was taken from a message in - [ruby-talk:18559] by Guy Decoux. - -* The .bmp files in the images directory are X bitmaps (i.e. XBM to many - graphics packages), not Windows bitmaps (.bmp). You will not be - able to use images exported by a graphics program as Windows - bitmaps with this demo collection nor will you be able to edit the - included images without setting the file type correctly. - --- Jonathan Conway, 2001-07-26 - - -#------------------------------------------------------------------------------ -# ==== Introduction. ==== -# -# To create this version of the Ruby/Tk widget demo, I took the -# ruby-tk81-demos and removed all the Kanji strings and comments. I -# have tried to restore the original English strings and comments -# using the Tcl/Tk8.2.2 version of the widget demo. -# -# When I tried running the Kanji version, all I got was a mostly blank -# panel with a non-functional "File" button. I disovered that if all -# non-ASCII characters were replaced with blanks, then I could get the -# gutted stuff running. -# -# Since English Ruby/Tk documentation is lacking and I needed this -# code to see how it worked and to use as the basis of my try-it -# prototype (The Ruby Yielding Interactive Toolkit), plus the fact -# that no help was forthcoming for making the Kanji version work (plus -# the fact that I can't read Kanji anyway), I decided to embark on -# this English restoration project. -# -# Thanks to everyone who worked on the original Ruby/Tk widget demo -# (and the preceding Tcl/Tk version for that matter). The -# comparatively simple task of changing text strings and comments has -# made me appreciate the great amount of original work that went into -# this. -# -# -- Conrad Schneiker, 2000-07-23. -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# ==== Known bugs. ==== -# -# ^C-ing the demo gives Ruby interrupt and stack message; clean exit needed. -# Font settings don't work correctly. -# Dismissing the embedded windows demo (tkwind.rb) kills the widget demo. -# Rerunning the canvas item demo from the code widow get errors. -# The "press me" button in the canvas item demo doesn't time out. -# The simple 2 d plot starts up extremely slow compared to the Tcl version. -# The first item message on the icon menu on the menu and cascades demo doesn't work. -#------------------------------------------------------------------------------ - - -###################### Original README ######################################## - - Ruby/Tk81 widget-demo 1999/08/13 - - 北陸先端大情報科学研究科 - 立石 - -Tcl/Tk8.1ã§ã¯unicode(UTF8)ãŒæŽ¡ç”¨ã•ã‚Œã€unicodeã«å¤‰æ›ã•ã‚ŒãŸæ—¥æœ¬èªžã§ã‚れ㰠-Widgetã«è¡¨ç¤ºã•ã›ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚本アーカイブã«ã¯ä»¥å‰ã«æ°¸äº•ã•ã‚“ãŒä¸­å¿ƒã¨ -ãªã‚‰ã‚Œã¦ä½œæˆã•ã‚ŒãŸRuby/Tkã®ã‚µãƒ³ãƒ—ルã«ä¿®æ­£ã‚’加ãˆã€ä»¥ä¸‹ã®ç’°å¢ƒã«ãŠã„ã¦ã§å‹•ä½œ -を確èªã—ãŸã‚‚ã®ã§ã™ã€‚ - -* ruby-1.3.7,ruby-1.4.0 -* tcl8.1, tk8.1 -* linux-2.2 - -Windows(Cygwin)ã«ãŠã„ã¦ã€ã‚µãƒ³ãƒ—ルを動ã‹ã™ã«ã¯rubyã‚’-Keã¨ã„ã†ã‚ªãƒ—ションを付 -ã‘ã¦èµ·å‹•ã•ã›ã‚‹ã¨è‰¯ã„ãã†ã§ã™ã€‚ - 情報æ供:渡辺ã•ã‚“ - - ----------------------------------------------------------------------------- - Ruby/Tk widget-demo - version 1.1 ( 1998/07/24 ) - 永井@知能.ä¹å·¥å¤§ (nagai@ai.kyutech.ac.jp) - -標準é…布㮠Tcl/Tk 拡張パッケージをå–ã‚Šè¾¼ã‚“ã  Ruby (以下 Ruby/Tk ã¨å‘¼ã³ã¾ã™) -ã§ã¯ï¼ŒTk widget を用ã„㟠GUI ã®ä½œæˆã‚’è¡Œã†ã“ã¨ãŒã§ãã¾ã™ï¼Žå®Ÿéš›ã« GUI ã‚’ä½œæˆ -ã—ã¦ã„ãå ´åˆã«ã¯æ§˜ã€…ãªå®Ÿä¾‹ãŒã‚µãƒ³ãƒ—ルã¨ã—ã¦å­˜åœ¨ã™ã‚‹ã¨ä¾¿åˆ©ãªã®ã§ã™ãŒï¼ŒRuby/Tk -ã«ã¯ãã®ã‚ˆã†ãªé©å½“ãªã‚µãƒ³ãƒ—ルスクリプト集åˆã¯å­˜åœ¨ã—ã¾ã›ã‚“ã§ã—ãŸï¼Žãã‚Œã«å¯¾ã—, -拡張パッケージã®å…ƒã§ã‚ã‚‹ Tcl/Tk ã«ã¯ï¼ŒTk widget を用ã„ã¦ã©ã®ã‚ˆã†ãªã“ã¨ãŒã§ -ãã‚‹ã‹ã‚’示ã™ã‚‚ã®ã¨ã—㦠widget-demo ãŒå­˜åœ¨ã—ãŠã‚Šï¼ŒTcl/Tk を用ã„㟠GUI ã®ä½œæˆ -ã‚’ç¿’å¾—ã™ã‚‹éš›ã®ä»£è¡¨çš„サンプルã¨ãªã£ã¦ã„ã¾ã™ï¼Žæœ¬ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã¯ï¼ŒRuby/Tk ã®ç¿’å¾—ã® -ãŸã‚ã®ä»£è¡¨çš„ãªã‚µãƒ³ãƒ—ルスクリプトã¨ã™ã¹ã,Tcl/Tk ã® widget-demo を移æ¤ã—ãŸã‚‚ -ã®ã§ã™ï¼Ž - -本アーカイブã«å«ã¾ã‚Œã‚‹ã‚¹ã‚¯ãƒªãƒ—トを実行ã™ã‚‹ãŸã‚ã«ã¯ï¼Œruby-1.1c2 以上ã§ã‚ã‚‹ã“ -ã¨ãŒå¿…è¦ã§ã™ï¼Ž1.1c1 ã®å ´åˆã¯ï¼Œæœ¬ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã«å«ã¾ã‚Œã‚‹ patck_1.1c1 ã‚’ Ruby ã® -ライブラリã«ã‚ã¦ã¦ãã ã•ã„.組ã¿è¾¼ã‚€ Tk ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ï¼Œ4.2 ã§ã‚‚ 8.0 ã§ã‚‚ä¿® -æ­£ãªãå‹•ã‹ã›ã‚‹ã¯ãšã§ã™ï¼ŽãŸã ã—,日本語版ã§ã®ç§»æ¤ã¨ãªã£ã¦ã„ã‚‹ãŸã‚,日本語化㕠-れ㟠Tk ã‚’ã”利用ãã ã•ã„.スクリプトã®ãƒ†ã‚¹ãƒˆã¯ï¼ŒTk4.2jp 㨠Tk8.0jp ã®ä¸Šã§è¡Œ -ã„ã¾ã—㟠(完璧ã«ã§ã¯ãªã„ã§ã™ãŒ). - -本アーカイブã«å«ã¾ã‚Œã‚‹ã‚¹ã‚¯ãƒªãƒ—トã®å¤šãã¯ï¼Œå…ƒã¨ãªã£ã¦ã„ã‚‹ Tcl/Tk 版ã«æ¯”較的近 -ã„スクリプト記述ã¨ãªã‚‹ã‚ˆã†ã«ã—ã¦ã„ã¾ã™ï¼Žãã®ãŸã‚,Ruby/Tk ã®ã‚µãƒ³ãƒ—ルã¨è¨€ã†ã« -ã¯ï¼Œã‚ã¾ã‚Š Ruby らã—ããªã„ã¨ã‚‚言ãˆã‚‹ã§ã—ょã†ï¼Žã«ã‚‚ã‹ã‹ã‚らãšï¼Œãã®ã‚ˆã†ãªè¨˜è¿° -ã‚’å–ã£ã¦ã„ã‚‹ç†ç”±ã¯ï¼ŒRuby/Tk ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆä¸è¶³ã«ã‚ã‚Šã¾ã™ï¼Ž - -Tcl/Tk ã«ã¯é©å½“ãªå‚考書ãŒä½•å†Šã‹å­˜åœ¨ã—ã¦ã„ã¾ã™ã‹ã‚‰ï¼ŒRuby/Tk ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’ä½œæˆ -ã™ã‚‹éš›ã¯ï¼Œãã®ã‚ˆã†ãª Tcl/Tk ã®å‚考書ã§æƒ…報を補ã„ãªãŒã‚‰ä½œæˆã™ã‚‹ã“ã¨ã«ãªã‚‹ã¨æ€ -ã„ã¾ã™ï¼Žå„ widget ã®ä½¿ç”¨ä¾‹ã¨ã—ã¦ï¼ŒTcl/Tk ã® widget-demo ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã‚‚ã‚ã‚‹ -ã§ã—ょã†ï¼ŽRuby/Tk 版ã®è¨˜è¿°ã‚’ widget-demo ã‚’ Tcl/Tk 版ã®è¨˜è¿°ã«è¿‘ã„ã‚‚ã®ã«ã—㦠-ãŠã‘ã°ï¼Œãã®å¯¾æ¯”ã«ã‚ˆã£ã¦ï¼ŒRuby/Tk ã®ç†è§£ã‚’æ—©ã‚ã‚‹ã“ã¨ãŒã§ãã‚‹ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ï¼Ž -一旦 Ruby/Tk ã§ã® å„ widget ã®ä½¿ç”¨æ–¹æ³•ã‚’ç¿’å¾—ã—ã¦ã—ã¾ãˆã°ï¼ŒRuby らã—ã„スクリ -プトを作æˆã™ã‚‹ã“ã¨ã¯é›£ã—ããªã„ã§ã—ょã†ï¼Žæœ¬ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ï¼ŒRuby/Tk -を最åˆã«ç¿’å¾—ã™ã‚‹ã¾ã§ã®è¸å°ã¨ã—ã¦åˆ©ç”¨ã—ã¦ã„ãŸã ã‘ã‚Œã°å¹¸ã„ã§ã™ï¼Ž - -widget-demo ã®ç§»æ¤ã«ã‚ãŸã£ã¦ã¯ï¼Œæ¬¡ã®æ–¹ã«ã‚‚移æ¤ã—ãŸã‚¹ã‚¯ãƒªãƒ—トをæä¾›ã—ã¦ã„ãŸã  -ãã¾ã—ãŸï¼Žã“ã“ã«æ„Ÿè¬ã®æ„を表ã—ã¾ã™ï¼Ž - - 立石@JAIST (ttate@jaist.ac.jp) ã•ã‚“ - å¹³æ¾ç¥¥å² (hiramatu@cdrom.co.jp) ã•ã‚“ - -å¹³æ¾ã•ã‚“ã«ã‚ˆã‚‹ Ruby/Tk 入門㮠Web page (http://www.cdrom.co.jp/~hiramatu/) -ã‚‚ Ruby/Tk ã®ç¿’å¾—ã«æœ‰ç”¨ã¨æ€ãˆã¾ã™ã®ã§ï¼Œãœã²ã”å‚ç…§ãã ã•ã„. - -ã¾ãŸï¼Œå‰æ©‹ (maebashi@iij.ad.jp) ã•ã‚“ã‚’ã¯ã˜ã‚ã¨ã—ã¦ï¼Œwidget-demo ã®ç§»æ¤ã«éš›ã— -ã¦å¿…è¦ã¨ãªã£ãŸ Ruby ã® Tk 関連ライブラリ修正ã«ã¤ã„ã¦ï¼Œå•é¡Œç‚¹ï¼Œãƒã‚°ã®æŒ‡æ‘˜ã‚’ã— -ã¦ã„ãŸã ã„ãŸæ–¹ã€…ã«ã‚‚æ„Ÿè¬è‡´ã—ã¾ã™ï¼Ž - -ãã—ã¦æœ€å¾Œã«æœ€å¤§ã®æ„Ÿè¬ã‚’ Ruby 設計者㮠ã¾ã¤ã‚‚㨠ゆãã²ã‚ (matz@netlab.co.jp) -ã•ã‚“ã«æ§ã’ãŸã„ã¨æ€ã„ã¾ã™ï¼Ž diff --git a/ext/tk/sample/demos-en/README.1st b/ext/tk/sample/demos-en/README.1st deleted file mode 100644 index 2ba1e275c8..0000000000 --- a/ext/tk/sample/demos-en/README.1st +++ /dev/null @@ -1,18 +0,0 @@ -There are Ruby/Tk demo scripts. - -Files with '.rb' extension are sub-scripts which are launched 'widget' -script. Those files don't work independently. Please call them from -'widget' script. - -If you want start some sub-scripts at same time when the launcher -script tarts, please give the sub-script names as arguments. -(e.g. /usr/local/bin/ruby widget button.rb entry1.rb text.rb ) -You can ommit '.rb' of the sub-scripts -(e.g. /usr/local/bin/ruby widget button entry1 text ) - -If you don't need launcher's main window, give -n option. -(e.g. /usr/local/bin/ruby widget -n button.rb entry1.rb text.rb ) - -Others (browse1, hello, and so on) are standalone scripts. - - 2004/04/14 Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) diff --git a/ext/tk/sample/demos-en/README.tkencoding b/ext/tk/sample/demos-en/README.tkencoding deleted file mode 100644 index cca8734a28..0000000000 --- a/ext/tk/sample/demos-en/README.tkencoding +++ /dev/null @@ -1,29 +0,0 @@ -This is a original document of 'tkencoding.rb'. -The library 'tkencoding.rb' is obsolete. -Functions of tkencoding.rb is already included into Ruby/Tk. - -------------------------------------------------- -tkencoding.rbを用ã„ãŸæ—¥æœ¬èªžã®è¡¨ç¤ºã«ã¤ã„㦠- -Copyright (C) 1999/07, Takaaki Tateishi - - -1. tkencoding.rbã¨ã¯ï¼Ÿ - -tkencoding.rbã¯Tcl/Tk8.1を利用ã—ãŸRuby/Tkã®ãŸã‚ã®ãƒ©ã‚¤ãƒ–ラリ -ã§ã™ã€‚tkencoding.rbã‚’requireã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦Wedgetã«è¡¨ç¤ºã• -れるテキストã¯å…¨ã¦unicode(UTF8)ã¸å¤‰æ›ã•ã‚Œã¾ã™ã€‚ - - -2. 使ã„æ–¹ - -tkencoding.rbã‚’requireã—ã¦Tk.encodingã§ä½¿ç”¨ã—ã¦ã„る文字コード -を指定ã—ã¦ä¸‹ã•ã„。例ãˆã°ä»¥ä¸‹ã®ã‚ˆã†ãªæ„Ÿã˜ã«ãªã‚Šã¾ã™ã€‚ - ----- -require 'tk' -require 'tkencoding' - -Tk.encoding = "utf-8" -# Tk.encoding = "shiftjis" ---- diff --git a/ext/tk/sample/demos-en/anilabel.rb b/ext/tk/sample/demos-en/anilabel.rb deleted file mode 100644 index a48f4a10e8..0000000000 --- a/ext/tk/sample/demos-en/anilabel.rb +++ /dev/null @@ -1,175 +0,0 @@ -# frozen_string_literal: false -# -# animated label widget demo (called by 'widget') -# -# based on Tcl/Tk8.5a2 widget demos - -if defined?($anilabel_demo) && $anilabel_demo - $anilabel_demo.destroy - $anilabel_demo = nil -end - -# demo toplevel widget -$anilabel_demo = TkToplevel.new {|w| - title("Animated Label Demonstration") - iconname("anilabel") - positionWindow(w) -} - -base_frame = TkFrame.new($anilabel_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "Four animated labels are displayed below; each of the labels on the left is animated by making the text message inside it appear to scroll, and the label on the right is animated by animating the image that it displays." -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $anilabel_demo - $anilabel_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'See Code' - command proc{showCode 'anilabel'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# create frame for label demo -f_left = TkLabelFrame.new(base_frame, :text=>'Scrolling Texts') -f_right = TkLabelFrame.new(base_frame, :text=>'GIF Image') -Tk.pack(f_left, f_right, 'side'=>'left', 'expand'=>'yes', 'fill'=>'both', - 'padx'=>10, 'pady'=>10) - -# animated label -class AnimatedTextLabel < TkLabel - def initialize(*args) - super(*args) - @timer = TkTimer.new{ _animation_callback } - @timer.loop_exec = -1 - # bind('Destroy'){ @timer.stop } - @btag = TkBindTag.new('Destroy'){ @timer.stop } - self.bindtags_unshift(@btag) - end - - def _animation_callback() - txt = self.text - self.text = (txt[1..-1] << txt[0]) - end - private :_animation_callback - - def start(interval) - @timer.set_interval(interval) - @timer.start - end - - def stop - @timer.stop - end -end - -# animated image -class AnimatedImageLabel < AnimatedTextLabel - def initialize(*args) - super(*args) - @destroy_image = false - @btag.bind_append('Destroy'){ - if @destroy_image - begin - self.image.delete - rescue - end - end - } - end - attr_accessor :destroy_image - - def _animation_callback() - img = self.image - - fmt = img.format - if fmt.kind_of?(Array) - if fmt[1].kind_of?(Hash) - # fmt == ['GIF', {'index'=>idx}] - idx = fmt[1]['index'] - else - # fmt == ['GIF', '-index', idx] :: Ruby1.8.2 returns this. - idx = fmt[2] - end - elsif fmt.kind_of?(String) && fmt =~ /GIF -index (\d+)/ - idx = $1.to_i - else - idx = -1 - end - - begin - img.format("GIF -index #{idx + 1}") - rescue => e - img.format("GIF -index 0") - end - end - private :_animation_callback -end - -# create labels -l1 = AnimatedTextLabel.new(f_left, :borderwidth=>4, :relief=>:ridge, - :font=>{:family=>'Courier', :size=>10}) -l2 = AnimatedTextLabel.new(f_left, :borderwidth=>4, :relief=>:groove, - :font=>{:family=>'Courier', :size=>10}) -l3 = AnimatedTextLabel.new(f_left, :borderwidth=>4, :relief=>:flat, - :font=>{:family=>'Courier', :size=>10}, :width=>18) -Tk.pack(l1, l2, l3, - :side=>:top, :expand=>true, :anchor=>:w, :padx=>10, :pady=>10) - -limg = AnimatedImageLabel.new(f_right, :borderwidth=>0) -limg.pack(:side=>:top, :expand=>true, :padx=>10, :pady=>10) - -# base64-encoded animated GIF file -tclPowerdData = <'GIF', :data=>tclPowerdData)).start(100) diff --git a/ext/tk/sample/demos-en/aniwave.rb b/ext/tk/sample/demos-en/aniwave.rb deleted file mode 100644 index 955f202767..0000000000 --- a/ext/tk/sample/demos-en/aniwave.rb +++ /dev/null @@ -1,119 +0,0 @@ -# frozen_string_literal: false -# -# animated wave demo (called by 'widget') -# -# based on Tcl/Tk8.5a2 widget demos - -# destroy toplevel widget for this demo script -if defined?($aniwave_demo) && $aniwave_demo - $aniwave_demo.destroy - $aniwave_demo = nil -end - -# create toplevel widget -$aniwave_demo = TkToplevel.new {|w| - title("Animated Wave Demonstration") - iconname("aniwave") - positionWindow(w) -} - -base_frame = TkFrame.new($aniwave_demo).pack(:fill=>:both, :expand=>true) - -# create label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text 'This demonstration contains a canvas widget with a line item inside it. The animation routines work by adjusting the coordinates list of the line.' -} -msg.pack('side'=>'top') - -# create frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $aniwave_demo - $aniwave_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'See Code' - command proc{showCode 'aniwave'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# animated wave -class AnimatedWaveDemo - def initialize(frame, dir=:left) - @direction = dir - - # create canvas widget - @c = TkCanvas.new(frame, :width=>300, :height=>200, - :background=>'black') - @c.pack(:padx=>10, :pady=>10, :expand=>true) - - # Creates a coordinates list of a wave. - @waveCoords = [] - @backupCoords = [] - n = 0 - (-10..300).step(5){|n| @waveCoords << [n, 100]; @backupCoords << [n, 100] } - n = 305 - @waveCoords << [n, 0]; @backupCoords << [n, 0] - @waveCoords << [n+5, 200]; @backupCoords << [n+5, 200] - @coordsLen = @waveCoords.length - - # Create a smoothed line and arrange for its coordinates to be the - # contents of the variable waveCoords. - @line = TkcLine.new(@c, @waveCoords, - :width=>1, :fill=>'green', :smooth=>true) - - # Main animation "loop". - # Theoretically 100 frames-per-second (==10ms between frames) - @timer = TkTimer.new(10){ basicMotion; reverser } - - # Arrange for the animation loop to stop when the canvas is deleted - @c.bindtags_unshift(TkBindTag.new('Destroy'){ @timer.stop }) - end - - # Basic motion handler. Given what direction the wave is travelling - # in, it advances the y coordinates in the coordinate-list one step in - # that direction. - def basicMotion - @backupCoords, @waveCoords = @waveCoords, @backupCoords - (0...@coordsLen).each{|idx| - if @direction == :left - @waveCoords[idx][1] = @backupCoords[(idx+1 == @coordsLen)? 0: idx+1][1] - else - @waveCoords[idx][1] = @backupCoords[(idx == 0)? -1: idx-1][1] - end - } - @line.coords(@waveCoords) - end - - # Oscillation handler. This detects whether to reverse the direction - # of the wave by checking to see if the peak of the wave has moved off - # the screen (whose size we know already.) - def reverser - if @waveCoords[0][1] < 10 - @direction = :right - elsif @waveCoords[-1][1] < 10 - @direction = :left - end - end - - # animation control - def move - @timer.start - end - - def stop - @timer.stop - end -end - -# Start the animation processing -AnimatedWaveDemo.new(base_frame, :left).move diff --git a/ext/tk/sample/demos-en/arrow.rb b/ext/tk/sample/demos-en/arrow.rb deleted file mode 100644 index 46229668c2..0000000000 --- a/ext/tk/sample/demos-en/arrow.rb +++ /dev/null @@ -1,250 +0,0 @@ -# frozen_string_literal: false -# arrow.rb -# -# This demonstration script creates a canvas widget that displays a -# large line with an arrowhead whose shape can be edited interactively. -# -# arrowhead widget demo (called by 'widget') -# - -# arrowSetup -- -# This method regenerates all the text and graphics in the canvas -# window. It's called when the canvas is initially created, and also -# whenever any of the parameters of the arrow head are changed -# interactively. -# -# Arguments: -# c - Name of the canvas widget. - -def arrowSetup(c) - v = $demo_arrowInfo - - # Remember the current box, if there is one. - tags = c.gettags('current') - if tags != [] - cur = tags.find{|t| t.kind_of?(String) && t =~ /^box[1-3]$/ } - else - cur = nil - end - - # Create the arrow and outline. - c.delete('all') - TkcLine.new(c, v.x1, v.y, v.x2, v.y, - { 'width'=>10 * v.width, - 'arrowshape'=>[10*v.a, 10*v.b, 10*v.c], - 'arrow'=>'last' - }.update(v.bigLineStyle) ) - xtip = v.x2 - 10*v.b - deltaY = 10*v.c + 5*v.width - TkcLine.new(c, v.x2, v.y, xtip, v.y + deltaY, - v.x2 - 10*v.a, v.y, xtip, v.y - deltaY, v.x2, v.y, - 'width'=>2, 'capstyle'=>'round', 'joinstyle'=>'round') - - # Create the boxes for reshaping the line and arrowhead. - TkcRectangle.new(c, v.x2-10*v.a-5, v.y-5, v.x2-10*v.a+5, v.y+5, - {'tags'=>['box1', $arrowTag_box]}.update(v.boxStyle) ) - TkcRectangle.new(c, xtip-5, v.y-deltaY-5, xtip+5, v.y-deltaY+5, - {'tags'=>['box2', $arrowTag_box]}.update(v.boxStyle) ) - TkcRectangle.new(c, v.x1-5, v.y-5*v.width-5, v.x1+5, v.y-5*v.width+5, - {'tags'=>['box3', $arrowTag_box]}.update(v.boxStyle) ) - c.itemconfigure cur, v.activeStyle if cur - - # Create three arrows in actual size with the same parameters - TkcLine.new(c, v.x2+50, 0, v.x2+50, 1000, 'width'=>2) - tmp = v.x2+100 - TkcLine.new(c, tmp, v.y-125, tmp, v.y-75, 'width'=>v.width, - 'arrow'=>'both', 'arrowshape'=>[v.a, v.b, v.c]) - TkcLine.new(c, tmp-25, v.y, tmp+25, v.y, 'width'=>v.width, - 'arrow'=>'both', 'arrowshape'=>[v.a, v.b, v.c]) - TkcLine.new(c, tmp-25, v.y+75, tmp+25, v.y+125, 'width'=>v.width, - 'arrow'=>'both', 'arrowshape'=>[v.a, v.b, v.c]) - - # Create a bunch of other arrows and text items showing the - # current dimensions. - tmp = v.x2+10 - TkcLine.new(c, tmp, v.y-5*v.width, tmp, v.y-deltaY, - 'arrow'=>'both', 'arrowshape'=>v.smallTips) - TkcText.new(c, v.x2+15, v.y-deltaY+5*v.c, 'text'=>v.c, 'anchor'=>'w') - tmp = v.x1-10 - TkcLine.new(c, tmp, v.y-5*v.width, tmp, v.y+5*v.width, - 'arrow'=>'both', 'arrowshape'=>v.smallTips) - TkcText.new(c, v.x1-15, v.y, 'text'=>v.width, 'anchor'=>'e') - tmp = v.y+5*v.width+10*v.c+10 - TkcLine.new(c, v.x2-10*v.a, tmp, v.x2, tmp, - 'arrow'=>'both', 'arrowshape'=>v.smallTips) - TkcText.new(c, v.x2-5*v.a, tmp+5, 'text'=>v.a, 'anchor'=>'n') - tmp = tmp+25 - TkcLine.new(c, v.x2-10*v.b, tmp, v.x2, tmp, - 'arrow'=>'both', 'arrowshape'=>v.smallTips) - TkcText.new(c, v.x2-5*v.b, tmp+5, 'text'=>v.b, 'anchor'=>'n') - - if $tk_version =~ /^4.*/ - TkcText.new(c, v.x1, 310, 'text'=>"'width'=>#{v.width}", 'anchor'=>'w', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*') - TkcText.new(c, v.x1, 330, - 'text'=>"'arrowshape'=>[#{v.a}, #{v.b}, #{v.c}]",'anchor'=>'w', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*') - else - TkcText.new(c, v.x1, 310, 'text'=>"'width'=>#{v.width}", 'anchor'=>'w', - 'font'=>'Helvetica 18') - TkcText.new(c, v.x1, 330, - 'text'=>"'arrowshape'=>[#{v.a}, #{v.b}, #{v.c}]", - 'anchor'=>'w', 'font'=>'Helvetica 18') - end - - v.count += 1 -end - -# toplevel widget -if defined?($arrow_demo) && $arrow_demo - $arrow_demo.destroy - $arrow_demo = nil -end - -# demo toplevel widget -$arrow_demo = TkToplevel.new {|w| - title("Arrowhead Editor Demonstration") - iconname("arrow") - positionWindow(w) -} - -base_frame = TkFrame.new($arrow_demo).pack(:fill=>:both, :expand=>true) - -# label -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'5i', 'justify'=>'left', - 'text'=>"This widget allows you to experiment with different widths and arrowhead shapes for lines in canvases. To change the line width or the shape of the arrowhead, drag any of the three boxes attached to the oversized arrow. The arrows on the right give examples at normal scale. The text at the bottom shows the configuration options as you'd enter them for a canvas line item."){ - pack('side'=>'top') -} - -# frame -$arrow_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $arrow_demo - $arrow_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'arrow'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$arrow_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# canvas -$arrow_canvas = TkCanvas.new(base_frame, 'width'=>500, 'height'=>350, - 'relief'=>'sunken', 'borderwidth'=>2) -$arrow_canvas.pack('expand'=>'yes', 'fill'=>'both') - -# -unless Struct.const_defined?("ArrowInfo") - $demo_arrowInfo = Struct.new("ArrowInfo", :a, :b, :c, :width, :motionProc, - :x1, :x2, :y, :smallTips, :count, - :bigLineStyle, :boxStyle, :activeStyle).new -end -$demo_arrowInfo.a = 8 -$demo_arrowInfo.b = 10 -$demo_arrowInfo.c = 3 -$demo_arrowInfo.width = 2 -$demo_arrowInfo.motionProc = proc{} -$demo_arrowInfo.x1 = 40 -$demo_arrowInfo.x2 = 350 -$demo_arrowInfo.y = 150 -$demo_arrowInfo.smallTips = [5, 5, 2] -$demo_arrowInfo.count = 0 -if TkWinfo.depth($arrow_canvas) > 1 - $demo_arrowInfo.bigLineStyle = {'fill'=>'SkyBlue1'} - $demo_arrowInfo.boxStyle = {'fill'=>'', 'outline'=>'black', 'width'=>1} - $demo_arrowInfo.activeStyle = {'fill'=>'red', 'outline'=>'black', 'width'=>1} -else - $demo_arrowInfo.bigLineStyle = {'fill'=>'black', - 'stipple'=>'@'+[$demo_dir,'..','images','grey.25'].join(File::Separator)} - $demo_arrowInfo.boxStyle = {'fill'=>'', 'outline'=>'black', 'width'=>1} - $demo_arrowInfo.activeStyle = {'fill'=>'black','outline'=>'black','width'=>1} -end -$arrowTag_box = TkcTag.new($arrow_canvas) -arrowSetup $arrow_canvas -$arrowTag_box.bind('Enter', proc{$arrow_canvas.itemconfigure('current', $demo_arrowInfo.activeStyle)}) -$arrowTag_box.bind('Leave', proc{$arrow_canvas.itemconfigure('current', $demo_arrowInfo.boxStyle)}) -$arrowTag_box.bind('B1-Enter', proc{}) -$arrowTag_box.bind('B1-Leave', proc{}) -$arrow_canvas.itembind('box1', '1', - proc{$demo_arrowInfo.motionProc \ - = proc{|x,y| arrowMove1 $arrow_canvas, x, y}}) -$arrow_canvas.itembind('box2', '1', - proc{$demo_arrowInfo.motionProc \ - = proc{|x,y| arrowMove2 $arrow_canvas, x, y}}) -$arrow_canvas.itembind('box3', '1', - proc{$demo_arrowInfo.motionProc \ - = proc{|x,y| arrowMove3 $arrow_canvas, x, y}}) -$arrowTag_box.bind('B1-Motion', - proc{|x,y| $demo_arrowInfo.motionProc.call(x,y)}, "%x %y") -$arrow_canvas.bind('Any-ButtonRelease-1', proc{arrowSetup $arrow_canvas}) - -# arrowMove1 -- -# This method is called for each mouse motion event on box1 (the -# one at the vertex of the arrow). It updates the controlling parameters -# for the line and arrowhead. -# -# Arguments: -# c - The name of the canvas window. -# x, y - The coordinates of the mouse. - -def arrowMove1(c,x,y) - v = $demo_arrowInfo - newA = (v.x2+5-c.canvasx(x).round)/10 - newA = 0 if newA < 0 - newA = 25 if newA > 25 - if newA != v.a - c.move('box1', 10*(v.a-newA), 0) - v.a = newA - end -end - -# arrowMove2 -- -# This method is called for each mouse motion event on box2 (the -# one at the trailing tip of the arrowhead). It updates the controlling -# parameters for the line and arrowhead. -# -# Arguments: -# c - The name of the canvas window. -# x, y - The coordinates of the mouse. - -def arrowMove2(c,x,y) - v = $demo_arrowInfo - newB = (v.x2+5-c.canvasx(x).round)/10 - newB = 0 if newB < 0 - newB = 25 if newB > 25 - newC = (v.y+5-c.canvasy(y).round-5*v.width)/10 - newC = 0 if newC < 0 - newC = 20 if newC > 20 - if newB != v.b || newC != v.c - c.move('box2', 10*(v.b-newB), 10*(v.c-newC)) - v.b = newB - v.c = newC - end -end - -# arrowMove3 -- -# This method is called for each mouse motion event on box3 (the -# one that controls the thickness of the line). It updates the -# controlling parameters for the line and arrowhead. -# -# Arguments: -# c - The name of the canvas window. -# x, y - The coordinates of the mouse. - -def arrowMove3(c,x,y) - v = $demo_arrowInfo - newWidth = (v.y+2-c.canvasy(y).round)/5 - newWidth = 0 if newWidth < 0 - newWidth = 20 if newWidth > 20 - if newWidth != v.width - c.move('box3', 0, 5*(v.width-newWidth)) - v.width = newWidth - end -end - diff --git a/ext/tk/sample/demos-en/bind.rb b/ext/tk/sample/demos-en/bind.rb deleted file mode 100644 index 38f2b46eaf..0000000000 --- a/ext/tk/sample/demos-en/bind.rb +++ /dev/null @@ -1,128 +0,0 @@ -# frozen_string_literal: false -# bind.rb -# -# This demonstration script creates a text widget with bindings set -# up for hypertext-like effects. -# -# text (tag bindings) widget demo (called by 'widget') -# - -# toplevel widget -if defined?($bind_demo) && $bind_demo - $bind_demo.destroy - $bind_demo = nil -end - -# demo toplevel widget -$bind_demo = TkToplevel.new {|w| - title("Text Demonstration - Tag Bindings") - iconname("bind") - positionWindow(w) -} - -base_frame = TkFrame.new($bind_demo).pack(:fill=>:both, :expand=>true) - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $bind_demo - $bind_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'bind'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# bind -def tag_binding_for_bind_demo(tag, enter_style, leave_style) - tag.bind('Any-Enter', proc{tag.configure enter_style}) - tag.bind('Any-Leave', proc{tag.configure leave_style}) -end - -# text -txt = TkText.new(base_frame){|t| - # - setgrid 'true' - #width 60 - #height 24 - font $font - wrap 'word' - TkScrollbar.new(base_frame) {|s| - pack('side'=>'right', 'fill'=>'y') - command proc{|*args| t.yview(*args)} - t.yscrollcommand proc{|first,last| s.set first,last} - } - pack('expand'=>'yes', 'fill'=>'both') - - # - if TkWinfo.depth($root).to_i > 1 - tagstyle_bold = {'background'=>'#43ce80', 'relief'=>'raised', - 'borderwidth'=>1} - tagstyle_normal = {'background'=>'', 'relief'=>'flat'} - else - tagstyle_bold = {'foreground'=>'white', 'background'=>'black'} - tagstyle_normal = {'foreground'=>'', 'background'=>''} - end - - # insert text - insert 'insert', "The same tag mechanism that controls display styles in text widgets can also be used to associate Tcl commands with regions of text, so that mouse or keyboard actions on the text cause particular Tcl commands to be invoked. For example, in the text below the descriptions of the canvas demonstrations have been tagged. When you move the mouse over a demo description the description lights up, and when you press button 1 over a description then that particular demonstration is invoked. - -" - insert('end', '1. Samples of all the different types of items that can be created in canvas widgets.', (d1 = TkTextTag.new(t)) ) - insert('end', "\n\n") - insert('end', '2. A simple two-dimensional plot that allows you to adjust the positions of the data points.', (d2 = TkTextTag.new(t)) ) - insert('end', "\n\n") - insert('end', '3. Anchoring and justification modes for text items.', - (d3 = TkTextTag.new(t)) ) - insert('end', "\n\n") - insert('end', '4. An editor for arrow-head shapes for line items.', - (d4 = TkTextTag.new(t)) ) - insert('end', "\n\n") - insert('end', '5. A ruler with facilities for editing tab stops.', - (d5 = TkTextTag.new(t)) ) - insert('end', "\n\n") - insert('end', - '6. A grid that demonstrates how canvases can be scrolled.', - (d6 = TkTextTag.new(t)) ) - - # binding - [d1, d2, d3, d4, d5, d6].each{|tag| - tag_binding_for_bind_demo(tag, tagstyle_bold, tagstyle_normal) - } - d1.bind('1', - proc{ - eval_samplecode(`cat #{[$demo_dir,'items.rb'].join(File::Separator)}`, 'items.rb') - }) - d2.bind('1', - proc{ - eval_samplecode(`cat #{[$demo_dir,'plot.rb'].join(File::Separator)}`, 'plot.rb') - }) - d3.bind('1', - proc{ - eval_samplecode(`cat #{[$demo_dir,'ctext.rb'].join(File::Separator)}`, 'ctext.rb') - }) - d4.bind('1', - proc{ - eval_samplecode(`cat #{[$demo_dir,'arrow.rb'].join(File::Separator)}`, 'arrow.rb') - }) - d5.bind('1', - proc{ - eval_samplecode(`cat #{[$demo_dir,'ruler.rb'].join(File::Separator)}`, 'ruler.rb') - }) - d6.bind('1', - proc{ - eval_samplecode(`cat #{[$demo_dir,'cscroll.rb'].join(File::Separator)}`, 'cscroll.rb') - }) - - TkTextMarkInsert.new(t, '0.0') - configure('state','disabled') -} - -txt.width 60 -txt.height 24 diff --git a/ext/tk/sample/demos-en/bitmap.rb b/ext/tk/sample/demos-en/bitmap.rb deleted file mode 100644 index bb7a13d7b6..0000000000 --- a/ext/tk/sample/demos-en/bitmap.rb +++ /dev/null @@ -1,76 +0,0 @@ -# frozen_string_literal: false -# bitmap.rb -# -# This demonstration script creates a toplevel window that displays -# all of Tk's built-in bitmaps.# -# bitmap widget demo (called by 'widget') -# - -# bitmapRow -- -# Create a row of bitmap items in a window. -# -# Arguments: -# w - The parent window that is to contain the row. -# args - The names of one or more bitmaps, which will be displayed -# in a new row across the bottom of w along with their -# names. - -def bitmapRow(w,*args) - TkFrame.new(w){|row| - pack('side'=>'top', 'fill'=>'both') - for bitmap in args - TkFrame.new(row){|base| - pack('side'=>'left', 'fill'=>'both', 'pady'=>'.25c', 'padx'=>'.25c') - TkLabel.new(base, 'text'=>bitmap, 'width'=>9).pack('side'=>'bottom') - Tk::Label.new(base, 'bitmap'=>bitmap).pack('side'=>'bottom') - } - end - } -end - -# toplevel widget -if defined?($bitmap_demo) && $bitmap_demo - $bitmap_demo.destroy - $bitmap_demo = nil -end - -# demo toplevel widget -$bitmap_demo = TkToplevel.new {|w| - title("Bitmap Demonstration") - iconname("bitmap") - positionWindow(w) -} - -base_frame = TkFrame.new($bitmap_demo).pack(:fill=>:both, :expand=>true) - -# label -TkLabel.new(base_frame,'font'=>$font,'wraplength'=>'4i','justify'=>'left', - 'text'=>"This window displays all of Tk's built-in bitmaps, along with the names you can use for them in Tcl scripts."){ - pack('side'=>'top') -} - -# frame -$bitmap_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $bitmap_demo - $bitmap_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'bitmap'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$bitmap_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -TkFrame.new(base_frame){|f| - bitmapRow(f,'error','gray25','gray50','hourglass') - bitmapRow(f,'info','question','questhead','warning') - pack('side'=>'top', 'expand'=>'yes', 'fill'=>'both') -} - diff --git a/ext/tk/sample/demos-en/browse1 b/ext/tk/sample/demos-en/browse1 deleted file mode 100644 index 568892e4a8..0000000000 --- a/ext/tk/sample/demos-en/browse1 +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env ruby - -# browse -- -# This script generates a directory browser, which lists the working -# directory and allow you to open files or subdirectories by -# double-clicking. - -require 'tk' - -# Create a scrollbar on the right side of the main window and a listbox -# on the left side. - -listbox = TkListbox.new(nil, 'relief'=>'sunken', - 'width'=>20, 'height'=>20, 'setgrid'=>'yes') {|l| - TkScrollbar.new(nil, 'command'=>proc{|*args| l.yview *args}) {|s| - pack('side'=>'right', 'fill'=>'y') - l.yscrollcommand(proc{|first,last| s.set(first,last)}) - } - - pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes') -} - -root = TkRoot.new -root.minsize(1,1) - -# The procedure below is invoked to open a browser on a given file; if the -# file is a directory then another instance of this program is invoked; if -# the file is a regular file then the Mx editor is invoked to display -# the file. - -def browse (dir, file) - file = dir + File::Separator + file if dir != '.' - type = File.ftype(file) - if type == 'directory' - system($0 + ' ' + file + ' &') - else - if type == 'file' - if ENV['EDITOR'] - system(ENV['EDITOR'] + ' ' + file + ' &') - else - system('xedit ' + file + ' &') - end - else - STDOUT.print "\"#{file}\" isn't a directory or regular file" - end - end -end - -# Fill the listbox with a list of all the files in the directory (run -# the "ls" command to get that information). - -dir = ARGV[0] ? ARGV[0] : '.' -open("|ls -a #{dir}", 'r'){|fid| fid.readlines}.each{|fname| - listbox.insert('end', fname.chomp) -} - -# Set up bindings for the browser. - -Tk.bind_all('Control-c', proc{root.destroy}) -listbox.bind('Double-Button-1', - proc{TkSelection.get.each{|f| browse dir, f}}) - -Tk.mainloop diff --git a/ext/tk/sample/demos-en/browse2 b/ext/tk/sample/demos-en/browse2 deleted file mode 100644 index 1a511c8d29..0000000000 --- a/ext/tk/sample/demos-en/browse2 +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env ruby - -# browse -- -# This script generates a directory browser, which lists the working -# directory and allow you to open files or subdirectories by -# double-clicking. - -require 'tk' - -class Browse - BROWSE_WIN_COUNTER = TkVariable.new(0) - - def initialize(dir) - BROWSE_WIN_COUNTER.value = BROWSE_WIN_COUNTER.to_i + 1 - - # create base frame - base = TkToplevel.new { - minsize(1,1) - title('Browse : ' + dir) - } - - # Create a scrollbar on the right side of the main window and a listbox - # on the left side. - list = TkListbox.new(base, 'relief'=>'sunken', - 'width'=>20, 'height'=>20, 'setgrid'=>'yes') {|l| - TkScrollbar.new(base, 'command'=>proc{|*args| l.yview *args}) {|s| - pack('side'=>'right', 'fill'=>'y') - l.yscrollcommand(proc{|first,last| s.set(first,last)}) - } - - pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes') - - # Fill the listbox with a list of all the files in the directory (run - # the "ls" command to get that information). - open("|ls -a #{dir}", 'r'){|fid| fid.readlines}.each{|fname| - l.insert('end', fname.chomp) - } - - } - - # Set up bindings for the browser. - base.bind('Destroy', proc{ - Browse::BROWSE_WIN_COUNTER.value = \ - Browse::BROWSE_WIN_COUNTER.to_i - 1 - }) - base.bind('Control-c', proc{base.destroy}) - list.bind('Double-Button-1', - proc{TkSelection.get.each{|f| self.browse dir, f}}) - end - - # The method below is invoked to open a browser on a given file; if the - # file is a directory then another instance of this program is invoked; if - # the file is a regular file then the Mx editor is invoked to display - # the file. - def browse (dir, file) - file = dir + File::Separator + file if dir != '.' - type = File.ftype(file) - if type == 'directory' - Browse.new(file) - else - if type == 'file' - if ENV['EDITOR'] - system(ENV['EDITOR'] + ' ' + file + ' &') - else - system('xedit ' + file + ' &') - end - else - STDOUT.print "\"#{file}\" isn't a directory or regular file" - end - end - end - -end - -Browse.new(ARGV[0] ? ARGV[0] : '.') - -TkRoot.new { - withdraw - Browse::BROWSE_WIN_COUNTER.trace('w', proc{exit if Browse::BROWSE_WIN_COUNTER.to_i == 0}) -} - -Tk.mainloop diff --git a/ext/tk/sample/demos-en/button.rb b/ext/tk/sample/demos-en/button.rb deleted file mode 100644 index 00331002d2..0000000000 --- a/ext/tk/sample/demos-en/button.rb +++ /dev/null @@ -1,85 +0,0 @@ -# frozen_string_literal: false -# button.rb -# -# This demonstration script creates a toplevel window containing -# several button widgets. -# -# button widget demo (called by 'widget') -# - -# toplevel widget -if defined?($button_demo) && $button_demo - $button_demo.destroy - $button_demo = nil -end - -# demo toplevel widget -$button_demo = TkToplevel.new {|w| - title("Button Demonstration") - iconname("button") - positionWindow(w) -} - -# label -msg = TkLabel.new($button_demo) { - font $kanji_font - wraplength '4i' - justify 'left' - text "If you click on any of the four buttons below, the background of the button area will change to the color indicated in the button. You can press Tab to move among the buttons, then press Space to invoke the current button." -} -msg.pack('side'=>'top') - -# frame -$button_buttons = Tk::Frame.new($button_demo) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $button_demo - $button_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'See Code' - command proc{showCode 'button'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# button -TkButton.new($button_demo){ - text "Peach Puff" - width 10 - command proc{ - $button_demo.configure('bg','PeachPuff1') - $button_buttons.configure('bg','PeachPuff1') - } -}.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2) - -TkButton.new($button_demo){ - text "Light Blue" - width 10 - command proc{ - $button_demo.configure('bg','LightBlue1') - $button_buttons.configure('bg','LightBlue1') - } -}.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2) - -TkButton.new($button_demo){ - text "Sea Green" - width 10 - command proc{ - $button_demo.configure('bg','SeaGreen2') - $button_buttons.configure('bg','SeaGreen2') - } -}.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2) - -TkButton.new($button_demo){ - text "Yellow" - width 10 - command proc{ - $button_demo.configure('bg','Yellow1') - $button_buttons.configure('bg','Yellow1') - } -}.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2) diff --git a/ext/tk/sample/demos-en/check.rb b/ext/tk/sample/demos-en/check.rb deleted file mode 100644 index 3f3b07bd0a..0000000000 --- a/ext/tk/sample/demos-en/check.rb +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: false -# check.rb -# -# This demonstration script creates a toplevel window containing -# several checkbuttons. -# -# checkbutton widget demo (called by 'widget') -# - -# toplevel widget -if defined?($check_demo) && $check_demo - $check_demo.destroy - $check_demo = nil -end - -# demo toplevel widget -$check_demo = TkToplevel.new {|w| - title("Checkbutton Demonstration") - iconname("check") - positionWindow(w) -} - -base_frame = TkFrame.new($check_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "Three checkbuttons are displayed below. If you click on a button, it will toggle the button's selection state and set a Tcl variable to a value indicating the state of the checkbutton. Click the \"See Variables\" button to see the current values of the variables." -} -msg.pack('side'=>'top') - -# -wipers = TkVariable.new(0) -brakes = TkVariable.new(0) -sober = TkVariable.new(0) - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $check_demo - $check_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'check'} - }.pack('side'=>'left', 'expand'=>'yes') - - - TkButton.new(frame) { - text 'See Variables' - command proc{ - showVars(base_frame, - ['wipers', wipers], ['brakes', brakes], ['sober', sober]) - } - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - - -# checkbutton -[ TkCheckButton.new(base_frame, 'text'=>'Wipers OK', 'variable'=>wipers), - TkCheckButton.new(base_frame, 'text'=>'Brakes OK', 'variable'=>brakes), - TkCheckButton.new(base_frame, 'text'=>'Driver Sober', 'variable'=>sober) -].each{|w| w.relief('flat'); w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w')} - diff --git a/ext/tk/sample/demos-en/check2.rb b/ext/tk/sample/demos-en/check2.rb deleted file mode 100644 index d68b86438a..0000000000 --- a/ext/tk/sample/demos-en/check2.rb +++ /dev/null @@ -1,110 +0,0 @@ -# frozen_string_literal: false -# -# checkbutton widget demo2 (called by 'widget') -# - -# delete old toplevel widget -if defined?($check2_demo) && $check2_demo - $check2_demo.destroy - $check2_demo = nil -end - -# create demo toplevel widget -$check2_demo = TkToplevel.new {|w| - title("Checkbutton Demonstration 2") - iconname("check2") - positionWindow(w) -} - -base_frame = TkFrame.new($check2_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "Four checkbuttons are displayed below. If you click on a button, it will toggle the button's selection state and set a Tcl variable to a value indicating the state of the checkbutton. The first button also follows the state of the other three. If only some of the three are checked, the first button will display the tri-state mode. Click the \"See Variables\" button to see the current values of the variables." -} -msg.pack('side'=>'top') - -# variable -safety = TkVariable.new(0) -wipers = TkVariable.new(0) -brakes = TkVariable.new(0) -sober = TkVariable.new(0) - -# frame -TkFrame.new(base_frame) {|frame| - TkGrid(TkFrame.new(frame, :height=>2, :relief=>:sunken, :bd=>2), - :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - TkButton.new(frame, :text=>'See Variables', - :image=>$image['view'], :compound=>:left, - :command=>proc{ - showVars($check2_demo, - ['safety', safety], ['wipers', wipers], - ['brakes', brakes], ['sober', sober]) - }), - TkButton.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'check2'}), - TkButton.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - tmppath = $check2_demo - $check2_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - }), - :padx=>4, :pady=>4) - frame.grid_columnconfigure(0, :weight=>1) -}.pack('side'=>'bottom', 'fill'=>'x') - - -# checkbutton -TkCheckButton.new(base_frame, :text=>'Safety Check', :variable=>safety, - :relief=>:flat, :onvalue=>'all', :offvalue=>'none', - :tristatevalue=>'partial'){ - pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') -} - -[ TkCheckButton.new(base_frame, 'text'=>'Wipers OK', 'variable'=>wipers), - TkCheckButton.new(base_frame, 'text'=>'Brakes OK', 'variable'=>brakes), - TkCheckButton.new(base_frame, 'text'=>'Driver Sober', 'variable'=>sober) -].each{|w| - w.relief('flat') - w.pack('side'=>'top', 'padx'=>15, 'pady'=>2, 'anchor'=>'w') -} - -# tristate check -in_check = false -tristate_check = proc{|n1,n2,op| - unless in_check - in_check = true - begin - if n1 == safety - if safety == 'none' - wipers.value = 0 - brakes.value = 0 - sober.value = 0 - elsif safety == 'all' - wipers.value = 1 - brakes.value = 1 - sober.value = 1 - end - else - if wipers == 1 && brakes == 1 && sober == 1 - safety.value = 'all' - elsif wipers == 1 || brakes == 1 || sober == 1 - safety.value = 'partial' - else - safety.value = 'none' - end - end - ensure - in_check = false - end - end -} - -[wipers, brakes, sober, safety].each{|v| v.trace('w', tristate_check)} diff --git a/ext/tk/sample/demos-en/clrpick.rb b/ext/tk/sample/demos-en/clrpick.rb deleted file mode 100644 index 081d11be4f..0000000000 --- a/ext/tk/sample/demos-en/clrpick.rb +++ /dev/null @@ -1,88 +0,0 @@ -# frozen_string_literal: false -# clrpick.rb -# -# This demonstration script prompts the user to select a color. -# -# widget demo prompts the user to select a color (called by 'widget') -# -# Note: don't support ttk_wrapper. work with standard widgets only. -# - -# toplevel widget -if defined?($clrpick_demo) && $clrpick_demo - $clrpick_demo.destroy - $clrpick_demo = nil -end - -# demo toplevel widget -$clrpick_demo = TkToplevel.new {|w| - title("Color Selection Dialogs") - iconname("colors") - positionWindow(w) -} - -base_frame = TkFrame.new($clrpick_demo).pack(:fill=>:both, :expand=>true) - -# label -#TkLabel.new($clrpick_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left', -Tk::Label.new($clrpick_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left', - 'text'=>"Press the buttons below to choose the foreground and background colors for the widgets in this window.").pack('side'=>'top') - -# frame -#TkFrame.new($clrpick_demo) {|frame| -Tk::Frame.new($clrpick_demo) {|frame| - # TkButton.new(frame) { - Tk::Button.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $clrpick_demo - $clrpick_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - # TkButton.new(frame) { - Tk::Button.new(frame) { - text 'Show Code' - command proc{showCode 'clrpick'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# button -# TkButton.new($clrpick_demo, 'text'=>'Set background color ...') {|b| -Tk::Button.new($clrpick_demo, 'text'=>'Set background color ...') {|b| - command(proc{setColor $clrpick_demo, b, 'background', - ['background', 'highlightbackground']}) - pack('side'=>'top', 'anchor'=>'c', 'pady'=>'2m') -} - -# TkButton.new($clrpick_demo, 'text'=>'Set foreground color ...') {|b| -Tk::Button.new($clrpick_demo, 'text'=>'Set foreground color ...') {|b| - command(proc{setColor $clrpick_demo, b, 'foreground', ['foreground']}) - pack('side'=>'top', 'anchor'=>'c', 'pady'=>'2m') -} - -def setColor(w,button,name,options) - w.grab - initialColor = button[name] - color = Tk.chooseColor('title'=>"Choose a #{name} color", 'parent'=>w, - 'initialcolor'=>initialColor) - if color != "" - setColor_helper(w,options,color) - end - - w.grab('release') -end - -def setColor_helper(w, options, color) - options.each{|opt| - begin - w[opt] = color - rescue - end - } - TkWinfo.children(w).each{|child| - setColor_helper child, options, color - } -end - diff --git a/ext/tk/sample/demos-en/colors.rb b/ext/tk/sample/demos-en/colors.rb deleted file mode 100644 index dca147b51e..0000000000 --- a/ext/tk/sample/demos-en/colors.rb +++ /dev/null @@ -1,159 +0,0 @@ -# frozen_string_literal: false -# colors.rb -# -# This demonstration script creates a listbox widget that displays -# many of the colors from the X color database. You can click on -# a color to change the application's palette. -# -# listbox widget demo 'colors' (called by 'widget') -# - -# toplevel widget -if defined?($colors_demo) && $colors_demo - $colors_demo.destroy - $colors_demo = nil -end - -# demo toplevel widget -$colors_demo = TkToplevel.new {|w| - title("Listbox Demonstration (colors)") - iconname("colors") - positionWindow(w) -} - -base_frame = TkFrame.new($colors_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "A listbox containing several color names is displayed below, along with a scrollbar. You can scan the list either using the scrollbar or by dragging in the listbox window with button 2 pressed. If you double-click button 1 on a color, then the application's color palette will be set to match that color" -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $colors_demo - $colors_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'colors'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -colors_lbox = nil -TkFrame.new(base_frame, 'borderwidth'=>10) {|w| - s = TkScrollbar.new(w) - colors_lbox = TkListbox.new(w) { - setgrid 1 - width 10 - height 12 - yscrollcommand proc{|first,last| s.set first,last} - } - s.command(proc{|*args| colors_lbox.yview(*args)}) - s.pack('side'=>'right', 'fill'=>'y') - colors_lbox.pack('side'=>'left', 'expand'=>1, 'fill'=>'both') -}.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'y') - -#colors_lbox.bind('Double-1', proc{TkPalette.setPalette TkSelection.get}) -colors_lbox.bind('Double-1', proc{ - begin - TkPalette.setPalette TkSelection.get - rescue => e - p e - Tk.tk_call_without_enc('destroy', '.___tk_set_palette') - end - }) - -ins_data = [ - 'gray60','gray70','gray80','gray85','gray90','gray95', - 'snow1','snow2','snow3','snow4','seashell1','seashell2', - 'seashell3','seashell4','AntiqueWhite1','AntiqueWhite2', - 'AntiqueWhite3','AntiqueWhite4','bisque1','bisque2', - 'bisque3','bisque4','PeachPuff1','PeachPuff2', - 'PeachPuff3','PeachPuff4','NavajoWhite1','NavajoWhite2', - 'NavajoWhite3','NavajoWhite4','LemonChiffon1', - 'LemonChiffon2','LemonChiffon3','LemonChiffon4', - 'cornsilk1','cornsilk2','cornsilk3','cornsilk4', - 'ivory1','ivory2','ivory3','ivory4','honeydew1', - 'honeydew2','honeydew3','honeydew4','LavenderBlush1', - 'LavenderBlush2','LavenderBlush3','LavenderBlush4', - 'MistyRose1','MistyRose2','MistyRose3','MistyRose4', - 'azure1','azure2','azure3','azure4','SlateBlue1', - 'SlateBlue2','SlateBlue3','SlateBlue4','RoyalBlue1', - 'RoyalBlue2','RoyalBlue3','RoyalBlue4','blue1','blue2', - 'blue3','blue4','DodgerBlue1','DodgerBlue2', - 'DodgerBlue3','DodgerBlue4','SteelBlue1','SteelBlue2', - 'SteelBlue3','SteelBlue4','DeepSkyBlue1','DeepSkyBlue2', - 'DeepSkyBlue3','DeepSkyBlue4','SkyBlue1','SkyBlue2', - 'SkyBlue3','SkyBlue4','LightSkyBlue1','LightSkyBlue2', - 'LightSkyBlue3','LightSkyBlue4','SlateGray1', - 'SlateGray2','SlateGray3','SlateGray4', - 'LightSteelBlue1','LightSteelBlue2','LightSteelBlue3', - 'LightSteelBlue4','LightBlue1','LightBlue2', - 'LightBlue3','LightBlue4','LightCyan1','LightCyan2', - 'LightCyan3','LightCyan4','PaleTurquoise1', - 'PaleTurquoise2','PaleTurquoise3','PaleTurquoise4', - 'CadetBlue1','CadetBlue2','CadetBlue3','CadetBlue4', - 'turquoise1','turquoise2','turquoise3','turquoise4', - 'cyan1','cyan2','cyan3','cyan4','DarkSlateGray1', - 'DarkSlateGray2','DarkSlateGray3','DarkSlateGray4', - 'aquamarine1','aquamarine2','aquamarine3','aquamarine4', - 'DarkSeaGreen1','DarkSeaGreen2','DarkSeaGreen3', - 'DarkSeaGreen4','SeaGreen1','SeaGreen2','SeaGreen3', - 'SeaGreen4','PaleGreen1','PaleGreen2','PaleGreen3', - 'PaleGreen4','SpringGreen1','SpringGreen2', - 'SpringGreen3','SpringGreen4','green1','green2', - 'green3','green4','chartreuse1','chartreuse2', - 'chartreuse3','chartreuse4','OliveDrab1','OliveDrab2', - 'OliveDrab3','OliveDrab4','DarkOliveGreen1', - 'DarkOliveGreen2','DarkOliveGreen3','DarkOliveGreen4', - 'khaki1','khaki2','khaki3','khaki4','LightGoldenrod1', - 'LightGoldenrod2','LightGoldenrod3','LightGoldenrod4', - 'LightYellow1','LightYellow2','LightYellow3', - 'LightYellow4','yellow1','yellow2','yellow3','yellow4', - 'gold1','gold2','gold3','gold4','goldenrod1', - 'goldenrod2','goldenrod3','goldenrod4','DarkGoldenrod1', - 'DarkGoldenrod2','DarkGoldenrod3','DarkGoldenrod4', - 'RosyBrown1','RosyBrown2','RosyBrown3','RosyBrown4', - 'IndianRed1','IndianRed2','IndianRed3','IndianRed4', - 'sienna1','sienna2','sienna3','sienna4','burlywood1', - 'burlywood2','burlywood3','burlywood4','wheat1', - 'wheat2','wheat3','wheat4','tan1','tan2','tan3','tan4', - 'chocolate1','chocolate2','chocolate3','chocolate4', - 'firebrick1','firebrick2','firebrick3','firebrick4', - 'brown1','brown2','brown3','brown4','salmon1','salmon2', - 'salmon3','salmon4','LightSalmon1','LightSalmon2', - 'LightSalmon3','LightSalmon4','orange1','orange2', - 'orange3','orange4','DarkOrange1','DarkOrange2', - 'DarkOrange3','DarkOrange4','coral1','coral2','coral3', - 'coral4','tomato1','tomato2','tomato3','tomato4', - 'OrangeRed1','OrangeRed2','OrangeRed3','OrangeRed4', - 'red1','red2','red3','red4','DeepPink1','DeepPink2', - 'DeepPink3','DeepPink4','HotPink1','HotPink2', - 'HotPink3','HotPink4','pink1','pink2','pink3','pink4', - 'LightPink1','LightPink2','LightPink3','LightPink4', - 'PaleVioletRed1','PaleVioletRed2','PaleVioletRed3', - 'PaleVioletRed4','maroon1','maroon2','maroon3', - 'maroon4','VioletRed1','VioletRed2','VioletRed3', - 'VioletRed4','magenta1','magenta2','magenta3', - 'magenta4','orchid1','orchid2','orchid3','orchid4', - 'plum1','plum2','plum3','plum4','MediumOrchid1', - 'MediumOrchid2','MediumOrchid3','MediumOrchid4', - 'DarkOrchid1','DarkOrchid2','DarkOrchid3', - 'DarkOrchid4','purple1','purple2','purple3','purple4', - 'MediumPurple1','MediumPurple2','MediumPurple3', - 'MediumPurple4','thistle1','thistle2','thistle3', 'thistle4' -] - -colors_lbox.insert(0, *ins_data) diff --git a/ext/tk/sample/demos-en/combo.rb b/ext/tk/sample/demos-en/combo.rb deleted file mode 100644 index b8bf2d8803..0000000000 --- a/ext/tk/sample/demos-en/combo.rb +++ /dev/null @@ -1,97 +0,0 @@ -# frozen_string_literal: false -# combo.rb -- -# -# This demonstration script creates several combobox widgets. -# -# based on "Id: combo.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp" - -if defined?($combo_demo) && $combo_demo - $combo_demo.destroy - $combo_demo = nil -end - -$combo_demo = TkToplevel.new {|w| - title("Combobox Demonstration") - iconname("combo") - positionWindow(w) -} - -base_frame = TkFrame.new($combo_demo).pack(:fill=>:both, :expand=>true) - -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'5i', :justify=>:left, - :text=><:top, :fill=>:x) -Three different combo-boxes are displayed below. \ -You can add characters to the first \ -one by pointing, clicking and typing, just as with an entry; pressing \ -Return will cause the current value to be added to the list that is \ -selectable from the drop-down list, and you can choose other values \ -by pressing the Down key, using the arrow keys to pick another one, \ -and pressing Return again. The second combo-box is fixed to a \ -particular value, and cannot be modified at all. The third one only \ -allows you to select values from its drop-down list of Australian \ -cities. -EOL - -## variables -firstValue = TkVariable.new -secondValue = TkVariable.new -ozCity = TkVariable.new - -## See Code / Dismiss buttons -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'See Variables', - :image=>$image['view'], :compound=>:left, - :command=>proc{ - showVars(base_frame, - ['firstVariable', firstValue], - ['secondVariable', secondValue], - ['ozCity', ozCity]) - }), - Ttk::Button.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'combo'}), - Ttk::Button.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $combo_demo.destroy - $combo_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -frame = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true) - -australianCities = [ - 'Canberra', 'Sydney', 'Melbourne', 'Perth', 'Adelaide', 'Brisbane', - 'Hobart', 'Darwin', 'Alice Springs' -] - - -secondValue.value = 'unchangeable' -ozCity.value = 'Sydney' - -Tk.pack(Ttk::Labelframe.new(frame, :text=>'Fully Editable'){|f| - Ttk::Combobox.new(f, :textvariable=>firstValue){|b| - b.bind('Return', '%W'){|w| - w.values <<= w.value unless w.values.include?(w.value) - } - }.pack(:pady=>5, :padx=>10) - }, - - Ttk::LabelFrame.new(frame, :text=>'Disabled'){|f| - Ttk::Combobox.new(f, :textvariable=>secondValue, :state=>:disabled) . - pack(:pady=>5, :padx=>10) - }, - - Ttk::LabelFrame.new(frame, :text=>'Defined List Only'){|f| - Ttk::Combobox.new(f, :textvariable=>ozCity, :state=>:readonly, - :values=>australianCities) . - pack(:pady=>5, :padx=>10) - }, - - :side=>:top, :pady=>5, :padx=>10) diff --git a/ext/tk/sample/demos-en/cscroll.rb b/ext/tk/sample/demos-en/cscroll.rb deleted file mode 100644 index eac615d035..0000000000 --- a/ext/tk/sample/demos-en/cscroll.rb +++ /dev/null @@ -1,137 +0,0 @@ -# frozen_string_literal: false -# cscroll.rb -# -# This demonstration script creates a simple canvas that can be -# scrolled in two dimensions. -# -# simple scrollable canvas widget demo (called by 'widget') -# - -# toplevel widget -if defined?($cscroll_demo) && $cscroll_demo - $cscroll_demo.destroy - $cscroll_demo = nil -end - -# demo toplevel widget -$cscroll_demo = TkToplevel.new {|w| - title("Scrollable Canvas Demonstration") - iconname("cscroll") - positionWindow(w) -} - -base_frame = TkFrame.new($cscroll_demo).pack(:fill=>:both, :expand=>true) - -# label -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'4i', - 'justify'=>'left', 'text'=>"This window displays a canvas widget that can be scrolled either using the scrollbars or by dragging with button 2 in the canvas. If you click button 1 on one of the rectangles, its indices will be printed on stdout."){ - pack('side'=>'top') -} - -# frame -$cscroll_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $cscroll_demo - $cscroll_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'cscroll'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$cscroll_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -unless $tk_version =~ /^4\.[01]/ - $cscroll_grid = TkFrame.new(base_frame) { - pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>1) - } - TkGrid.rowconfigure($cscroll_grid, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure($cscroll_grid, 0, 'weight'=>1, 'minsize'=>0) -end - -# canvas -$cscroll_canvas = TkCanvas.new(base_frame, - 'relief'=>'sunken', 'borderwidth'=>2, - 'scrollregion'=>['-11c', '-11c', '50c', '20c'] - ) {|c| - if $tk_version =~ /^4\.[01]/ - pack('expand'=>'yes', 'fill'=>'both') - else - grid('in'=>$cscroll_grid, 'padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - end - - TkScrollbar.new(base_frame, 'command'=>proc{|*args| c.yview(*args)}) {|vs| - c.yscrollcommand(proc{|first,last| vs.set first,last}) - if $tk_version =~ /^4\.[01]/ - pack('side'=>'right', 'fill'=>'y') - else - grid('in'=>$cscroll_grid, 'padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>1, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - end - } - - TkScrollbar.new(base_frame, 'orient'=>'horiz', - 'command'=>proc{|*args| c.xview(*args)}) {|hs| - c.xscrollcommand(proc{|first,last| hs.set first,last}) - if $tk_version =~ /^4\.[01]/ - pack('side'=>'bottom', 'fill'=>'x') - else - grid('in'=>$cscroll_grid, 'padx'=>1, 'pady'=>1, 'row'=>1, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - end - } -} - -bg = $cscroll_canvas.configinfo('bg')[4] -(0..19).each{|i| - x = -10+3*i - y = -10 - (0..9).each{|j| - TkcRectangle.new($cscroll_canvas, "#{x}c", "#{y}c", "#{x+2}c", "#{y+2}c", - 'outline'=>'black', 'fill'=>bg, 'tags'=>'rect') - TkcText.new($cscroll_canvas, "#{x+1}c", "#{y+1}c", - 'text'=>"#{i},#{j}", 'anchor'=>'center', 'tags'=>'text') - y += 3 - } -} - -$cscroll_canvas.itembind('all', 'Any-Enter', proc{scrollEnter $cscroll_canvas}) -$cscroll_canvas.itembind('all', 'Any-Leave', proc{scrollLeave $cscroll_canvas}) -$cscroll_canvas.itembind('all', '1', proc{scrollButton $cscroll_canvas}) -$cscroll_canvas.itembind('all', 'Any-Enter', proc{scrollEnter $cscroll_canvas}) -$cscroll_canvas.bind('2', proc{|x,y| $cscroll_canvas.scan_mark(x,y)}, '%x %y') -$cscroll_canvas.bind('B2-Motion', - proc{|x,y| $cscroll_canvas.scan_dragto(x,y)}, '%x %y') - -def scrollEnter(c) - id = c.find_withtag('current')[0].id - id -= 1 if c.gettags('current').include?('text') - $oldFill = c.itemconfiginfo(id, 'fill')[4] - if TkWinfo.depth(c) > 1 - c.itemconfigure(id, 'fill'=>'SeaGreen1') - else - c.itemconfigure(id, 'fill'=>'black') - c.itemconfigure(id+1, 'fill'=>'white') - end -end - -def scrollLeave(c) - id = c.find_withtag('current')[0].id - id -= 1 if c.gettags('current').include?('text') - c.itemconfigure(id, 'fill'=>$oldFill) - c.itemconfigure(id+1, 'fill'=>'black') -end - -def scrollButton(c) - id = c.find_withtag('current')[0].id - id += 1 unless c.gettags('current').include?('text') - print "You buttoned at #{c.itemconfiginfo(id,'text')[4]}\n" -end - diff --git a/ext/tk/sample/demos-en/ctext.rb b/ext/tk/sample/demos-en/ctext.rb deleted file mode 100644 index fdb2f423e2..0000000000 --- a/ext/tk/sample/demos-en/ctext.rb +++ /dev/null @@ -1,208 +0,0 @@ -# frozen_string_literal: false -# ctext.rb -# -# This demonstration script creates a canvas widget with a text -# item that can be edited and reconfigured in various ways. -# -# Canvas Text widget demo (called by 'widget') -# - -# toplevel widget -if defined?($ctext_demo) && $ctext_demo - $ctext_demo.destroy - $ctext_demo = nil -end - -# demo toplevel widget -$ctext_demo = TkToplevel.new {|w| - title("Canvas Text Demonstration") - iconname("Text") - positionWindow(w) -} - -base_frame = TkFrame.new($ctext_demo).pack(:fill=>:both, :expand=>true) - -# label -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'5i', 'justify'=>'left', - 'text'=>"This window displays a string of text to demonstrate the text facilities of canvas widgets. You can click in the boxes to adjust the position of the text relative to its positioning point or change its justification. The text also supports the following simple bindings for editing: - 1. You can point, click, and type. - 2. You can also select with button 1. - 3. You can copy the selection to the mouse position with button 2. - 4. Backspace and Control+h delete the selection if there is one; - otherwise they delete the character just before the insertion cursor. - 5. Delete deletes the selection if there is one; otherwise it deletes - the character just after the insertion cursor."){ - pack('side'=>'top') -} - -# frame -$ctext_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $ctext_demo - $ctext_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'ctext'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$ctext_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# canvas -$ctext_canvas = TkCanvas.new(base_frame, 'relief'=>'flat', - 'borderwidth'=>0, 'width'=>500, 'height'=>350) -$ctext_canvas.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'both') - -# font -if $tk_version =~ /^4.*/ - textFont = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*' -else - textFont = 'Helvetica 24' -end - -# canvas -TkcRectangle.new($ctext_canvas, 245, 195, 255, 205, - 'outline'=>'black', 'fill'=>'red') - -ctag_text_param = { - 'text'=>"This is just a string of text to demonstrate the text facilities of canvas widgets. Bindings have been been defined to support editing (see above).", - 'width'=>440, 'anchor'=>'n', 'justify'=>'left' -} -if $tk_version =~ /^4.*/ - ctag_text_param['font'] = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*' -else - ctag_text_param['font'] = 'Helvetica 24' -end - -$ctag_text = TkcTag.new($ctext_canvas) -$ctag_text.withtag(TkcText.new($ctext_canvas, 250, 200, ctag_text_param)) - -$ctag_text.bind('1', proc{|x,y| textB1Press $ctext_canvas,x,y}, "%x %y") -$ctag_text.bind('B1-Motion', proc{|x,y| textB1Move $ctext_canvas,x,y}, "%x %y") -$ctag_text.bind('Shift-1', - proc{|x,y| $ctext_canvas.select_adjust 'current', "@#{x},#{y}"}, - "%x %y") -$ctag_text.bind('Shift-B1-Motion', - proc{|x,y| textB1Move $ctext_canvas,x,y}, "%x %y") -$ctag_text.bind('KeyPress', proc{|a| textInsert $ctext_canvas,a}, "%A") -$ctag_text.bind('Return', proc{textInsert $ctext_canvas,"\n"}) -$ctag_text.bind('Control-h', proc{textBs $ctext_canvas}) -$ctag_text.bind('BackSpace', proc{textBs $ctext_canvas}) -$ctag_text.bind('Delete', proc{textDel $ctext_canvas}) -$ctag_text.bind('2', proc{|x,y| textPaste $ctext_canvas, "@#{x},#{y}"}, - "%x %y") - -# Next, create some items that allow the text's anchor position -# to be edited. - -def mkTextConfig(w,x,y,option,value,color) - item = TkcRectangle.new(w, x, y, x+30, y+30, - 'outline'=>'black', 'fill'=>color, 'width'=>1) - item.bind('1', proc{$ctag_text.configure option, value}) - w.addtag_withtag('config', item) -end - -x = 50 -y = 50 -color = 'LightSkyBlue1' -mkTextConfig $ctext_canvas, x, y, 'anchor', 'se', color -mkTextConfig $ctext_canvas, x+30, y, 'anchor', 's', color -mkTextConfig $ctext_canvas, x+60, y, 'anchor', 'sw', color -mkTextConfig $ctext_canvas, x, y+30, 'anchor', 'e', color -mkTextConfig $ctext_canvas, x+30, y+30, 'anchor', 'center', color -mkTextConfig $ctext_canvas, x+60, y+30, 'anchor', 'w', color -mkTextConfig $ctext_canvas, x, y+60, 'anchor', 'ne', color -mkTextConfig $ctext_canvas, x+30, y+60, 'anchor', 'n', color -mkTextConfig $ctext_canvas, x+60, y+60, 'anchor', 'nw', color -item = TkcRectangle.new($ctext_canvas, x+40, y+40, x+50, y+50, - 'outline'=>'black', 'fill'=>'red') -item.bind('1', proc{$ctag_text.configure 'anchor', 'center'}) -if $tk_version =~ /^4.*/ - TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Text Position', - 'font'=>'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', - 'anchor'=>'s', 'fill'=>'brown') -else - TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Text Position', - 'font'=>'Times 24', 'anchor'=>'s', 'fill'=>'brown') -end - -# Lastly, create some items that allow the text's justification to be -# changed. - -x = 350 -y = 50 -color = 'SeaGreen2' -mkTextConfig $ctext_canvas, x, y, 'justify', 'left', color -mkTextConfig $ctext_canvas, x+30, y, 'justify', 'center', color -mkTextConfig $ctext_canvas, x+60, y, 'justify', 'right', color -if $tk_version =~ /^4.*/ - TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Justification', - 'font'=>'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', - 'anchor'=>'s', 'fill'=>'brown') -else - TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Justification', - 'font'=>'Times 24', 'anchor'=>'s', 'fill'=>'brown') -end - -$ctext_canvas.itembind('config', 'Enter', proc{textEnter $ctext_canvas}) -$ctext_canvas.itembind('config', 'Leave', - proc{$ctext_canvas\ - .itemconfigure('current', - 'fill'=>$textConfigFill)}) - -$textConfigFill = '' - -def textEnter(w) - $textConfigFill = (w.itemconfiginfo 'current', 'fill')[4] - w.itemconfigure 'current', 'fill', 'black' -end - -def textInsert(w, string) - return if string == "" - begin - $ctag_text.dchars 'sel.first', 'sel.last' - rescue - end - $ctag_text.insert 'insert', string -end - -def textPaste(w, pos) - begin - $ctag_text.insert pos, TkSelection.get - rescue - end -end - -def textB1Press(w,x,y) - w.icursor 'current', "@#{x},#{y}" - w.itemfocus 'current' - w.focus - w.select_from 'current', "@#{x},#{y}" -end - -def textB1Move(w,x,y) - w.select_to 'current', "@#{x},#{y}" -end - -def textBs(w) - begin - $ctag_text.dchars 'sel.first', 'sel.last' - rescue - char = $ctag_text.index('insert').to_i - 1 - $ctag_text.dchars(char) if char >= 0 - end -end - -def textDel(w) - begin - $ctag_text.dchars 'sel.first', 'sel.last' - rescue - $ctag_text.dchars 'insert' - end -end - diff --git a/ext/tk/sample/demos-en/dialog1.rb b/ext/tk/sample/demos-en/dialog1.rb deleted file mode 100644 index 3fd56a69c3..0000000000 --- a/ext/tk/sample/demos-en/dialog1.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: false -# -# a dialog box with a local grab (called by 'widget') -# -class TkDialog_Demo1 < TkDialog - ############### - private - ############### - def title - "Dialog with local grab" - end - - def message - 'This is a modal dialog box. It uses Tk\'s "grab" command to create a "local grab" on the dialog box. The grab prevents any pointer-related events from getting to any other windows in the application until you have answered the dialog by invoking one of the buttons below. However, you can still interact with other applications.' - end - - def bitmap - 'info' - end - - def default_button - 0 - end - - def buttons - # ["Dismiss", "", "Show Code"] - ["OK", "Cancel", "Show Code"] - end -end - -ret = TkDialog_Demo1.new('message_config'=>{'wraplength'=>'4i'}).value -case ret -when 0 - print "You pressed OK\n" -when 1 - print "You pressed Cancel\n" -when 2 - showCode 'dialog1' -end diff --git a/ext/tk/sample/demos-en/dialog2.rb b/ext/tk/sample/demos-en/dialog2.rb deleted file mode 100644 index fed14081c8..0000000000 --- a/ext/tk/sample/demos-en/dialog2.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: false -# -# a dialog box with a global grab (called by 'widget') -# -class TkDialog_Demo2 < TkDialog - ############### - private - ############### - def title - "Dialog with global grab" - end - - def message - "This dialog box uses a global grab, so it prevents you from interacting with anything on your display until you invoke one of the buttons below. Global grabs are almost always a bad idea; don't use them unless you're truly desperate." - end - - def bitmap - 'info' - end - - def default_button - 0 - end - - def buttons - ["OK", "Cancel", "Show Code"] - end -end - -ret = TkDialog_Demo2.new('message_config'=>{'wraplength'=>'4i'}, - 'prev_command'=>proc{|dialog| - Tk.after 100, proc{dialog.grab('global')} - }).value -case ret -when 0 - print "\You pressed OK\n" -when 1 - print "You pressed Cancel\n" -when 2 - showCode 'dialog2' -end - diff --git a/ext/tk/sample/demos-en/doc.org/README b/ext/tk/sample/demos-en/doc.org/README deleted file mode 100644 index 90677d3316..0000000000 --- a/ext/tk/sample/demos-en/doc.org/README +++ /dev/null @@ -1,7 +0,0 @@ -This directory contains a collection of demonstration programs that -are translated into Japanese. You need to use a Japanized "wish" to -see these Japanese-translated demonstration programs. You also need -to put this directory ("demos.jp") at the next to "demos" since some -of the programs refer to the image files at "demos". - -Please refer to the README file at "demos" for more detail. diff --git a/ext/tk/sample/demos-en/doc.org/README.JP b/ext/tk/sample/demos-en/doc.org/README.JP deleted file mode 100644 index 42b4929378..0000000000 --- a/ext/tk/sample/demos-en/doc.org/README.JP +++ /dev/null @@ -1,14 +0,0 @@ -This directory contains "widget" demo for the Japanized Tcl7.6/Tk4.2. -Most of the messages in the original are translated to Japanese. -But other tools in this directory are not translated. - -Following 2 kanji fonts are defined at the beginning of the file "widget." - - -*--24-*-jisx0208.1983-0 - -*--16-*-jisx0208.1983-0 - -These fonts are all part of the core distribution of X11R5, so -if you are running X11R5, you don't have to modify the file. - -But if you don't have these fonts, replace them with appropriate ones. -"-*--14-*-jisx0208.1983-0" will be a good choice. diff --git a/ext/tk/sample/demos-en/doc.org/README.tk80 b/ext/tk/sample/demos-en/doc.org/README.tk80 deleted file mode 100644 index c71f977d74..0000000000 --- a/ext/tk/sample/demos-en/doc.org/README.tk80 +++ /dev/null @@ -1,46 +0,0 @@ -This directory contains a collection of programs to demonstrate -the features of the Tk toolkit. The programs are all scripts for -"wish", a windowing shell. If wish has been installed in /usr/local -then you can invoke any of the programs in this directory just -by typing its file name to your command shell. Otherwise invoke -wish with the file as its first argument, e.g., "wish hello". -The rest of this file contains a brief description of each program. -Files with names ending in ".tcl" are procedure packages used by one -or more of the demo programs; they can't be used as programs by -themselves so they aren't described below. - -hello - Creates a single button; if you click on it, a message - is typed and the application terminates. - -widget - Contains a collection of demonstrations of the widgets - currently available in the Tk library. Most of the .tcl - files are scripts for individual demos available through - the "widget" program. - -ixset - A simple Tk-based wrapper for the "xset" program, which - allows you to interactively query and set various X options - such as mouse acceleration and bell volume. Thanks to - Pierre David for contributing this example. - -rolodex - A mock-up of a simple rolodex application. It has much of - the user interface for such an application but no back-end - database. This program was written in response to Tom - LaStrange's toolkit benchmark challenge. - -tcolor - A color editor. Allows you to edit colors in several - different ways, and will also perform automatic updates - using "send". - -rmt - Allows you to "hook-up" remotely to any Tk application - on the display. Select an application with the menu, - then just type commands: they'll go to that application. - -timer - Displays a seconds timer with start and stop buttons. - Control-c and control-q cause it to exit. - -browse - A simple directory browser. Invoke it with and argument - giving the name of the directory you'd like to browse. - Double-click on files or subdirectories to browse them. - Control-c and control-q cause the program to exit. - -sccs id = SCCS: @(#) README 1.3 96/02/16 10:49:14 diff --git a/ext/tk/sample/demos-en/doc.org/license.terms b/ext/tk/sample/demos-en/doc.org/license.terms deleted file mode 100644 index c0a44d3fc2..0000000000 --- a/ext/tk/sample/demos-en/doc.org/license.terms +++ /dev/null @@ -1,39 +0,0 @@ -This software is copyrighted by the Regents of the University of -California, Sun Microsystems, Inc., and other parties. The following -terms apply to all files associated with the software unless explicitly -disclaimed in individual files. - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - -GOVERNMENT USE: If you are acquiring this software on behalf of the -U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal -Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you -are acquiring the software on behalf of the Department of Defense, the -software shall be classified as "Commercial Computer Software" and the -Government shall have only "Restricted Rights" as defined in Clause -252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the -authors grant the U.S. Government and others acting in its behalf -permission to use and distribute the software in accordance with the -terms specified in this license. diff --git a/ext/tk/sample/demos-en/doc.org/license.terms.tk80 b/ext/tk/sample/demos-en/doc.org/license.terms.tk80 deleted file mode 100644 index c0a44d3fc2..0000000000 --- a/ext/tk/sample/demos-en/doc.org/license.terms.tk80 +++ /dev/null @@ -1,39 +0,0 @@ -This software is copyrighted by the Regents of the University of -California, Sun Microsystems, Inc., and other parties. The following -terms apply to all files associated with the software unless explicitly -disclaimed in individual files. - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - -GOVERNMENT USE: If you are acquiring this software on behalf of the -U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal -Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you -are acquiring the software on behalf of the Department of Defense, the -software shall be classified as "Commercial Computer Software" and the -Government shall have only "Restricted Rights" as defined in Clause -252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the -authors grant the U.S. Government and others acting in its behalf -permission to use and distribute the software in accordance with the -terms specified in this license. diff --git a/ext/tk/sample/demos-en/entry1.rb b/ext/tk/sample/demos-en/entry1.rb deleted file mode 100644 index d6b0af2b5d..0000000000 --- a/ext/tk/sample/demos-en/entry1.rb +++ /dev/null @@ -1,59 +0,0 @@ -# frozen_string_literal: false -# -# entry (no scrollbars) widget demo (called by 'widget') -# - -# toplevel widget -if defined?($entry1_demo) && $entry1_demo - $entry1_demo.destroy - $entry1_demo = nil -end - -# demo toplevel widget -$entry1_demo = TkToplevel.new {|w| - title("Entry Demonstration (no scrollbars)") - iconname("entry1") - positionWindow(w) -} - -base_frame = TkFrame.new($entry1_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '5i' - justify 'left' - text "Three different entries are displayed below. You can add characters by pointing, clicking and typing. The normal Motif editing characters are supported, along with many Emacs bindings. For example, Backspace and Control-h delete the character to the left of the insertion cursor and Delete and Control-d delete the chararacter to the right of the insertion cursor. For entries that are too large to fit in the window all at once, you can scan through the entries by dragging with mouse button2 pressed." -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $entry1_demo - $entry1_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'entry1'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# -e1 = TkEntry.new(base_frame, 'relief'=>'sunken') -e2 = TkEntry.new(base_frame, 'relief'=>'sunken') -e3 = TkEntry.new(base_frame, 'relief'=>'sunken') -[e1,e2,e3].each{|w| w.pack('side'=>'top', 'padx'=>10, 'pady'=>5, 'fill'=>'x')} - -# -e1.insert(0, 'Initial value') -e2.insert('end', "This entry contains a long value, much too long ") -e2.insert('end', "to fit in the window at one time, so long in fact ") -e2.insert('end', "that you'll have to scan or scroll to see the end.") -e2.insert('end', "") - diff --git a/ext/tk/sample/demos-en/entry2.rb b/ext/tk/sample/demos-en/entry2.rb deleted file mode 100644 index 460a0a02ea..0000000000 --- a/ext/tk/sample/demos-en/entry2.rb +++ /dev/null @@ -1,94 +0,0 @@ -# frozen_string_literal: false -# entry2.rb -# -# This demonstration script is the same as the entry1.tcl script -# except that it creates scrollbars for the entries. -# -# entry (with scrollbars) widget demo (called by 'widget') -# - -# toplevel widget -if defined?($entry2_demo) && $entry2_demo - $entry2_demo.destroy - $entry2_demo = nil -end - -# demo toplevel widget -$entry2_demo = TkToplevel.new {|w| - title("Entry Demonstration (with scrollbars)") - iconname("entry2") - positionWindow(w) -} - -base_frame = TkFrame.new($entry2_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '5i' - justify 'left' - text "Three different entries are displayed below, with a scrollbar for each entry. You can add characters by pointing, clicking and typing. The normal Motif editing characters are supported, along with many Emacs bindings. For example, Backspace and Control-h delete the character to the left of the insertion cursor and Delete and Control-d delete the chararacter to the right of the insertion cursor. For entries that are too large to fit in the window all at once, you can scan through the entries with the scrollbars, or by dragging with mouse button2 pressed." -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $entry2_demo - $entry2_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'entry2'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -TkFrame.new(base_frame, 'borderwidth'=>10) {|w| - # entry 1 - s1 = TkScrollbar.new(w, 'relief'=>'sunken', 'orient'=>'horiz') - e1 = TkEntry.new(w, 'relief'=>'sunken') { - xscrollcommand proc{|first,last| s1.set first,last} - } - s1.command(proc{|*args| e1.xview(*args)}) - e1.pack('side'=>'top', 'fill'=>'x') - s1.pack('side'=>'top', 'fill'=>'x') - - # spacer - TkFrame.new(w, 'width'=>20, 'height'=>10).pack('side'=>'top', 'fill'=>'x') - - # entry 2 - s2 = TkScrollbar.new(w, 'relief'=>'sunken', 'orient'=>'horiz') - e2 = TkEntry.new(w, 'relief'=>'sunken') { - xscrollcommand proc{|first,last| s2.set first,last} - } - s2.command(proc{|*args| e2.xview(*args)}) - e2.pack('side'=>'top', 'fill'=>'x') - s2.pack('side'=>'top', 'fill'=>'x') - - # spacer - TkFrame.new(w, 'width'=>20, 'height'=>10).pack('side'=>'top', 'fill'=>'x') - - # entry 3 - s3 = TkScrollbar.new(w, 'relief'=>'sunken', 'orient'=>'horiz') - e3 = TkEntry.new(w, 'relief'=>'sunken') { - xscrollcommand proc{|first,last| s3.set first,last} - } - s3.command(proc{|*args| e3.xview(*args)}) - e3.pack('side'=>'top', 'fill'=>'x') - s3.pack('side'=>'top', 'fill'=>'x') - - # - e1.insert(0, 'Initial value') - e2.insert('end', "This entry contains a long value, much too long ") - e2.insert('end', "to fit in the window at one time, so long in fact ") - e2.insert('end', "that you'll have to scan or scroll to see the end.") - e2.insert('end', "") - -}.pack('side'=>'top', 'fill'=>'x', 'expand'=>'yes') - diff --git a/ext/tk/sample/demos-en/entry3.rb b/ext/tk/sample/demos-en/entry3.rb deleted file mode 100644 index 6170fe1365..0000000000 --- a/ext/tk/sample/demos-en/entry3.rb +++ /dev/null @@ -1,221 +0,0 @@ -# frozen_string_literal: false -# entry3.rb -- -# -# This demonstration script creates several entry widgets whose -# permitted input is constrained in some way. It also shows off a -# password entry. -# -# based on Tcl/Tk8.4.4 widget demos - -if defined?($entry3_demo) && $entry3_demo - $entry3_demo.destroy - $entry3_demo = nil -end - -$entry3_demo = TkToplevel.new {|w| - title("Constrained Entry Demonstration") - iconname("entry3") - positionWindow(w) -} - -base_frame = TkFrame.new($entry3_demo).pack(:fill=>:both, :expand=>true) - -TkLabel.new(base_frame, - :font=>$font, :wraplength=>'5i', :justify=>:left, - :text=><:top) -Four different entries are displayed below. You can add characters \ -by pointing, clicking and typing, though each is constrained in what \ -it will accept. The first only accepts integers or the empty string \ -(checking when focus leaves it) and will flash to indicate any \ -problem. The second only accepts strings with fewer than ten \ -characters and sounds the bell when an attempt to go over the limit \ -is made. The third accepts US phone numbers, mapping letters to \ -their digit equivalent and sounding the bell on encountering an \ -invalid character or if trying to type over a character that is not \ -a digit. The fourth is a password field that accepts up to eight \ -characters (silently ignoring further ones), and displaying them as \ -asterisk characters. -EOL - -TkFrame.new(base_frame){|f| - pack(:side=>:bottom, :fill=>:x, :pady=>'2m') - - TkButton.new(f, :text=>'Dismiss', :width=>15, :command=>proc{ - $entry3_demo.destroy - $entry3_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'See Code', :width=>15, :command=>proc{ - showCode 'entry3' - }).pack(:side=>:left, :expand=>true) -} - -# focusAndFlash -- -# Error handler for entry widgets that forces the focus onto the -# widget and makes the widget flash by exchanging the foreground and -# background colours at intervals of 200ms (i.e. at approximately -# 2.5Hz). -# -# Arguments: -# widget - entry widget to flash -# fg - Initial foreground colour -# bg - Initial background colour -# count - Counter to control the number of times flashed -def focusAndFlash(widget, fg, bg, count=5) - return if count <= 0 - if fg && !fg.empty? && bg && !bg.empty? - TkTimer.new(200, count, - proc{widget.configure(:foreground=>bg, :background=>fg)}, - proc{widget.configure(:foreground=>fg, :background=>bg)} - ).start - else - # TkTimer.new(150, 3){Tk.bell}.start - Tk.bell - TkTimer.new(200, count, - proc{widget.configure(:foreground=>'white', - :background=>'black')}, - proc{widget.configure(:foreground=>'black', - :background=>'white')} - ).at_end{begin - widget.configure(:foreground=>fg, - :background=>bg) - rescue - # ignore - end}.start - end - widget.focus(true) -end - -l1 = TkLabelFrame.new(base_frame, :text=>"Integer Entry") -TkEntry.new(l1, :validate=>:focus, - :vcmd=>[ - proc{|s| s == '' || /^[+-]?\d+$/ =~ s }, '%P' - ]) {|e| - fg = e.foreground - bg = e.background - invalidcommand [proc{|w| focusAndFlash(w, fg, bg)}, '%W'] - pack(:fill=>:x, :expand=>true, :padx=>'1m', :pady=>'1m') -} - -l2 = TkLabelFrame.new(base_frame, :text=>"Length-Constrained Entry") -TkEntry.new(l2, :validate=>:key, :invcmd=>proc{Tk.bell}, - :vcmd=>[proc{|s| s.length < 10}, '%P'] - ).pack(:fill=>:x, :expand=>true, :padx=>'1m', :pady=>'1m') - -### PHONE NUMBER ENTRY ### -# Note that the source to this is quite a bit longer as the behaviour -# demonstrated is a lot more ambitious than with the others. - -# Initial content for the third entry widget -entry3content = TkVariable.new("1-(000)-000-0000") - -# Mapping from alphabetic characters to numbers. -$phoneNumberMap = {} -Hash[*(%w(abc 2 def 3 ghi 4 jkl 5 mno 6 pqrs 7 tuv 8 wxyz 9))].each{|chars, n| - chars.split('').each{|c| - $phoneNumberMap[c] = n - $phoneNumberMap[c.upcase] = n - } -} - -# phoneSkipLeft -- -# Skip over fixed characters in a phone-number string when moving left. -# -# Arguments: -# widget - The entry widget containing the phone-number. -def phoneSkipLeft(widget) - idx = widget.index('insert') - if idx == 8 - # Skip back two extra characters - widget.cursor = idx - 2 - elsif idx == 7 || idx == 12 - # Skip back one extra character - widget.cursor = idx - 1 - elsif idx <= 3 - # Can't move any further - Tk.bell - Tk.callback_break - end -end - -# phoneSkipRight -- -# Skip over fixed characters in a phone-number string when moving right. -# -# Arguments: -# widget - The entry widget containing the phone-number. -# add - Offset to add to index before calculation (used by validation.) -def phoneSkipRight(widget, add = 0) - idx = widget.index('insert') - if (idx + add == 5) - # Skip forward two extra characters - widget.cursor = idx + 2 - elsif (idx + add == 6 || idx + add == 10) - # Skip forward one extra character - widget.cursor = idx + 1 - elsif (idx + add == 15 && add == 0) - # Can't move any further - Tk.bell - Tk.callback_break - end -end - -# validatePhoneChange -- -# Checks that the replacement (mapped to a digit) of the given -# character in an entry widget at the given position will leave a -# valid phone number in the widget. -# -# widget - entry widget to validate -# vmode - The widget's validation mode -# idx - The index where replacement is to occur -# char - The character (or string, though that will always be -# refused) to be overwritten at that point. - -def validatePhoneChange(widget, vmode, idx, char) - return true if idx == nil - Tk.after_idle(proc{widget.configure(:validate=>vmode, - :invcmd=>proc{Tk.bell})}) - if !(idx<3 || idx==6 || idx==7 || idx==11 || idx>15) && char =~ /[0-9A-Za-z]/ - widget.delete(idx) - widget.insert(idx, $phoneNumberMap[char] || char) - Tk.after_idle(proc{phoneSkipRight(widget, -1)}) - return true - # Tk.update(true) # <- Don't work 'update' inter validation callback. - # It depends on Tcl/Tk side (tested on Tcl/Tk8.5a1). - end - return false -end - - -l3 = TkLabelFrame.new(base_frame, :text=>"US Phone-Number Entry") -TkEntry.new(l3, :validate=>:key, :invcmd=>proc{Tk.bell}, - :textvariable=>entry3content, - :vcmd=>[ - proc{|w,v,i,s| validatePhoneChange(w,v,i,s)}, - "%W %v %i %S" - ]){|e| - # Click to focus goes to the first editable character... - bind('FocusIn', proc{|d,w| - if d != "NotifyAncestor" - w.cursor = 3 - Tk.after_idle(proc{w.selection_clear}) - end - }, '%d %W') - bind('Left', proc{|w| phoneSkipLeft(w)}, '%W') - bind('Right', proc{|w| phoneSkipRight(w)}, '%W') - pack(:fill=>:x, :expand=>true, :padx=>'1m', :pady=>'1m') -} - -l4 = TkLabelFrame.new(base_frame, :text=>"Password Entry") -TkEntry.new(l4, :validate=>:key, :show=>'*', - :vcmd=>[ - proc{|s| s.length <= 8}, - '%P' - ]).pack(:fill=>:x, :expand=>true, :padx=>'1m', :pady=>'1m') - -TkFrame.new(base_frame){|f| - lower - TkGrid.configure(l1, l2, :in=>f, :padx=>'3m', :pady=>'1m', :sticky=>:ew) - TkGrid.configure(l3, l4, :in=>f, :padx=>'3m', :pady=>'1m', :sticky=>:ew) - TkGrid.columnconfigure(f, [0,1], :uniform=>1) - pack(:fill=>:both, :expand=>true) -} diff --git a/ext/tk/sample/demos-en/filebox.rb b/ext/tk/sample/demos-en/filebox.rb deleted file mode 100644 index 2bdf0aac10..0000000000 --- a/ext/tk/sample/demos-en/filebox.rb +++ /dev/null @@ -1,103 +0,0 @@ -# frozen_string_literal: false -# filebox.rb -# -# This demonstration script prompts the user to select a file.# -# widget demo prompts the user to select a file (called by 'widget') -# - -# toplevel widget -if defined?($filebox_demo) && $filebox_demo - $filebox_demo.destroy - $filebox_demo = nil -end - -# demo toplevel widget -$filebox_demo = TkToplevel.new {|w| - title("File Selection Dialogs") - iconname("filebox") - positionWindow(w) -} - -base_frame = TkFrame.new($filebox_demo).pack(:fill=>:both, :expand=>true) - -# label -TkLabel.new(base_frame,'font'=>$font,'wraplength'=>'4i','justify'=>'left', - 'text'=>"Enter a file name in the entry box or click on the \"Browse\" buttons to select a file name using the file selection dialog.").pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $filebox_demo - $filebox_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'filebox'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -['open', 'save'].each{|type| - TkFrame.new(base_frame) {|f| - TkLabel.new(f, 'text'=>"Select a file to #{type}: ", 'anchor'=>'e')\ - .pack('side'=>'left') - - TkEntry.new(f, 'width'=>20) {|e| - pack('side'=>'left', 'expand'=>'yes', 'fill'=>'x') - - TkButton.new(f, 'text'=>'Browse ...', - 'command'=>proc{fileDialog base_frame,e,type})\ - .pack('side'=>'left') - } - - pack('fill'=>'x', 'padx'=>'1c', 'pady'=>3) - } -} - -$tk_strictMotif = TkVarAccess.new('tk_strictMotif') -if ($tk_platform['platform'] == 'unix') - TkCheckButton.new(base_frame, - 'text'=>'Use Motif Style Dialog', - 'variable'=>$tk_strictMotif, - 'onvalue'=>1, 'offvalue'=>0 ).pack('anchor'=>'c') -end - -def fileDialog(w,ent,operation) - # Type names Extension(s) Mac File Type(s) - # - #-------------------------------------------------------- - types = [ - ['Text files', ['.txt','.doc'] ], - ['Text files', [], 'TEXT' ], - ['Ruby Scripts', ['.rb'], 'TEXT' ], - ['Tcl Scripts', ['.tcl'], 'TEXT' ], - ['C Source Files', ['.c','.h'] ], - ['All Source Files', ['.rb','.tcl','.c','.h'] ], - ['Image Files', ['.gif'] ], - ['Image Files', ['.jpeg','.jpg'] ], - ['Image Files', [], ['GIFF','JPEG']], - ['All files', '*' ] - ] - - if operation == 'open' - file = Tk.getOpenFile('filetypes'=>types, 'parent'=>w) - else - file = Tk.getSaveFile('filetypes'=>types, 'parent'=>w, - 'initialfile'=>'Untitled', - 'defaultextension'=>'.txt') - end - if file != "" - ent.delete 0, 'end' - ent.insert 0, file - # ent.xview 'end' - Tk.update_idletasks # need this for Tk::Tile::Entry - # (to find right position of 'xview'). - ent.xview(ent.index('end')) - end -end - diff --git a/ext/tk/sample/demos-en/floor.rb b/ext/tk/sample/demos-en/floor.rb deleted file mode 100644 index 4b77ea6a8a..0000000000 --- a/ext/tk/sample/demos-en/floor.rb +++ /dev/null @@ -1,1724 +0,0 @@ -# frozen_string_literal: false -# floor.rb -# -# This demonstration script creates a canvas widget that displays the -# floorplan for DEC's Western Research Laboratory. -# -# floorDisplay widget demo (called by 'widget') -# - -# floorDisplay -- -# Recreate the floorplan display in the canvas given by "w". The -# floor given by "active" is displayed on top with its office structure -# visible. -# -# Arguments: -# w - Name of the canvas window. -# active - Number of active floor (1, 2, or 3). - -def floorDisplay(w,active) - return if $activeFloor == active - - w.delete('all') - $activeFloor = active - - # First go through the three floors, displaying the backgrounds for - # each floor. - - floor_bg1(w,$floor_colors['bg1'],$floor_colors['outline1']) - floor_bg2(w,$floor_colors['bg2'],$floor_colors['outline2']) - floor_bg3(w,$floor_colors['bg3'],$floor_colors['outline3']) - - # Raise the background for the active floor so that it's on top. - - w.raise("floor#{active}") - - # Create a dummy item just to mark this point in the display list, - # so we can insert highlights here. - - TkcRectangle.new(w,0,100,1,101, 'fill'=>'', 'outline'=>'', 'tags'=>'marker') - - # Add the walls and labels for the active floor, along with - # transparent polygons that define the rooms on the floor. - # Make sure that the room polygons are on top. - - $floorLabels.clear - $floorItems.clear - send("floor_fg#{active}", w, $floor_colors['offices']) - w.raise('room') - - # Offset the floors diagonally from each other. - - w.move('floor1', '2c', '2c') - w.move('floor2', '1c', '1c') - - # Create items for the room entry and its label. - TkcWindow.new(w, 600, 100, 'anchor'=>'w', 'window'=>$floor_entry) - TkcText.new(w, 600, 100, 'anchor'=>'e', 'text'=>"Room: ") - w['scrollregion'] = w.bbox('all') -end - -# newRoom -- -# This method is invoked whenever the mouse enters a room -# in the floorplan. It changes tags so that the current room is -# highlighted. -# -# Arguments: -# w - The name of the canvas window. - -def newRoom(w) - id = w.find_withtag('current')[0] - $currentRoom.value = $floorLabels[id.id] if id != "" - Tk.update(true) -end - -# roomChanged -- -# This method is invoked whenever the currentRoom variable changes. -# It highlights the current room and unhighlights any previous room. -# -# Arguments: -# w - The canvas window displaying the floorplan. -# args - Not used. - -def roomChanged(w,*args) - w.delete('highlight') - item = $floorItems[$currentRoom.value] - return if item == nil - new = TkcPolygon.new(w, *(w.coords(item))) - new.configure('fill'=>$floor_colors['active'], 'tags'=>'highlight') - w.raise(new, 'marker') -end - -# floor_bg1 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the background information for the first -# floor. -# -# Arguments: -# w - The canvas window. -# fill - Fill color to use for the floor's background. -# outline - Color to use for the floor's outline. - -def floor_bg1(w,fill,outline) - TkcPolygon.new(w,347,80,349,82,351,84,353,85,363,92,375,99,386,104, - 386,129,398,129,398,162,484,162,484,129,559,129,559,133,725, - 133,725,129,802,129,802,389,644,389,644,391,559,391,559,327, - 508,327,508,311,484,311,484,278,395,278,395,288,400,288,404, - 288,409,290,413,292,418,297,421,302,422,309,421,318,417,325, - 411,330,405,332,397,333,344,333,340,334,336,336,335,338,332, - 342,331,347,332,351,334,354,336,357,341,359,340,360,335,363, - 331,365,326,366,304,366,304,355,258,355,258,387,60,387,60,391, - 0,391,0,337,3,337,3,114,8,114,8,25,30,25,30,5,93,5,98,5,104,7, - 110,10,116,16,119,20,122,28,123,32,123,68,220,68,220,34,221, - 22,223,17,227,13,231,8,236,4,242,2,246,0,260,0,283,1,300,5, - 321,14,335,22,348,25,365,29,363,39,358,48,352,56,337,70, - 344,76,347,80, 'tags'=>['floor1','bg'], 'fill'=>fill) - TkcLine.new(w,386,129,398,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,258,355,258,387, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,60,387,60,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,0,337,0,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,60,391,0,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,3,114,3,337, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,258,387,60,387, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,484,162,398,162, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,398,162,398,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,484,278,484,311, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,484,311,508,311, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,508,327,508,311, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,559,327,508,327, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,644,391,559,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,644,389,644,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,559,129,484,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,484,162,484,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,725,133,559,133, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,559,129,559,133, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,725,129,802,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,802,389,802,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,3,337,0,337, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,559,391,559,327, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,802,389,644,389, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,725,133,725,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,8,25,8,114, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,8,114,3,114, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,30,25,8,25, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,484,278,395,278, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,30,25,30,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,93,5,30,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,98,5,93,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,104,7,98,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,110,10,104,7, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,116,16,110,10, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,119,20,116,16, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,122,28,119,20, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,123,32,122,28, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,123,68,123,32, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,220,68,123,68, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,386,129,386,104, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,386,104,375,99, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,375,99,363,92, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,353,85,363,92, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,220,68,220,34, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,337,70,352,56, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,352,56,358,48, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,358,48,363,39, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,363,39,365,29, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,365,29,348,25, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,348,25,335,22, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,335,22,321,14, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,321,14,300,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,300,5,283,1, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,283,1,260,0, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,260,0,246,0, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,246,0,242,2, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,242,2,236,4, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,236,4,231,8, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,231,8,227,13, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,223,17,227,13, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,221,22,223,17, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,220,34,221,22, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,340,360,335,363, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,335,363,331,365, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,331,365,326,366, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,326,366,304,366, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,304,355,304,366, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,395,288,400,288, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,404,288,400,288, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,409,290,404,288, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,413,292,409,290, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,418,297,413,292, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,421,302,418,297, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,422,309,421,302, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,421,318,422,309, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,421,318,417,325, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,417,325,411,330, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,411,330,405,332, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,405,332,397,333, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,397,333,344,333, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,344,333,340,334, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,340,334,336,336, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,336,336,335,338, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,335,338,332,342, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,331,347,332,342, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,332,351,331,347, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,334,354,332,351, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,336,357,334,354, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,341,359,336,357, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,341,359,340,360, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,395,288,395,278, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,304,355,258,355, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,347,80,344,76, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,344,76,337,70, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,349,82,347,80, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,351,84,349,82, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,353,85,351,84, 'fill'=>outline, 'tags'=>['floor1','bg']) -end - -# floor_bg2 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the background information for the first -# floor. -# -# Arguments: -# w - The canvas window. -# fill - Fill color to use for the floor's background. -# outline - Color to use for the floor's outline. - -def floor_bg2(w,fill,outline) - TkcPolygon.new(w,559,129,484,129,484,162,398,162,398,129,315,129, - 315,133,176,133,176,129,96,129,96,133,3,133,3,339,0,339,0,391, - 60,391,60,387,258,387,258,329,350,329,350,311,395,311,395,280, - 484,280,484,311,508,311,508,327,558,327,558,391,644,391,644, - 367,802,367,802,129,725,129,725,133,559,133,559,129, - 'tags'=>['floor2','bg'], 'fill'=>fill) - TkcLine.new(w,350,311,350,329, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,398,129,398,162, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,802,367,802,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,802,129,725,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,725,133,725,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,559,129,559,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,559,133,725,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,484,162,484,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,559,129,484,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,802,367,644,367, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,644,367,644,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,644,391,558,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,558,327,558,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,558,327,508,327, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,508,327,508,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,484,311,508,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,484,280,484,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,398,162,484,162, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,484,280,395,280, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,395,280,395,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,258,387,60,387, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,3,133,3,339, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,3,339,0,339, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,60,391,0,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,0,339,0,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,60,387,60,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,258,329,258,387, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,350,329,258,329, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,395,311,350,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,398,129,315,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,176,133,315,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,176,129,96,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,3,133,96,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,315,133,315,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,176,133,176,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,96,133,96,129, 'fill'=>outline, 'tags'=>['floor2','bg']) -end - -# floor_bg3 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the background information for the first -# floor. -# -# Arguments: -# w - The canvas window. -# fill - Fill color to use for the floor's background. -# outline - Color to use for the floor's outline. - -def floor_bg3(w,fill,outline) - TkcPolygon.new(w,159,300,107,300,107,248,159,248,159,129,96,129,96, - 133,21,133,21,331,0,331,0,391,60,391,60,370,159,370,159,300, - 'tags'=>['floor3','bg'], 'fill'=>fill) - TkcPolygon.new(w,258,370,258,329,350,329,350,311,399,311,399,129, - 315,129,315,133,176,133,176,129,159,129,159,370,258,370, - 'tags'=>['floor3','bg'], 'fill'=>fill) - TkcLine.new(w,96,133,96,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,176,129,96,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,176,129,176,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,315,133,176,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,315,133,315,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,399,129,315,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,399,311,399,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,399,311,350,311, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,350,329,350,311, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,350,329,258,329, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,258,370,258,329, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,60,370,258,370, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,60,370,60,391, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,60,391,0,391, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,0,391,0,331, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,21,331,0,331, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,21,331,21,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,96,133,21,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,107,300,159,300,159,248,107,248,107,300, - 'fill'=>outline, 'tags'=>['floor3','bg']) -end - -# floor_fg1 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the foreground information for the first -# floor (office outlines and numbers). -# -# Arguments: -# w - The canvas window. -# color - Color to use for drawing foreground information. - -def floor_fg1(w,color) - i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '101' - $floorItems['101'] = i - TkcText.new(w,358,209, 'text'=>'101', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Pub Lift1' - $floorItems['Pub Lift1'] = i - TkcText.new(w,323,223, 'text'=>'Pub Lift1', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Priv Lift1' - $floorItems['Priv Lift1'] = i - TkcText.new(w,323,188, 'text'=>'Priv Lift1', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,42,389,42,337,1,337,1,389, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '110' - $floorItems['110'] = i - TkcText.new(w,21.5,363, 'text'=>'110', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,59,389,59,385,90,385,90,337,44,337,44,389, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '109' - $floorItems['109'] = i - TkcText.new(w,67,363, 'text'=>'109', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,51,300,51,253,6,253,6,300, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '111' - $floorItems['111'] = i - TkcText.new(w,28.5,276.5, 'text'=>'111', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,98,248,98,309,79,309,79,248, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '117B' - $floorItems['117B'] = i - TkcText.new(w,88.5,278.5, 'text'=>'117B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,51,251,51,204,6,204,6,251, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '112' - $floorItems['112'] = i - TkcText.new(w,28.5,227.5, 'text'=>'112', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,6,156,51,156,51,203,6,203, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '113' - $floorItems['113'] = i - TkcText.new(w,28.5,179.5, 'text'=>'113', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,85,169,79,169,79,192,85,192, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '117A' - $floorItems['117A'] = i - TkcText.new(w,82,180.5, 'text'=>'117A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,77,302,77,168,53,168,53,302, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '117' - $floorItems['117'] = i - TkcText.new(w,65,235, 'text'=>'117', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,51,155,51,115,6,115,6,155, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '114' - $floorItems['114'] = i - TkcText.new(w,28.5,135, 'text'=>'114', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,95,115,53,115,53,168,95,168, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '115' - $floorItems['115'] = i - TkcText.new(w,74,141.5, 'text'=>'115', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,87,113,87,27,10,27,10,113, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '116' - $floorItems['116'] = i - TkcText.new(w,48.5,70, 'text'=>'116', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,89,91,128,91,128,113,89,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '118' - $floorItems['118'] = i - TkcText.new(w,108.5,102, 'text'=>'118', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,178,128,178,132,216,132,216,91, - 163,91,163,112,149,112,149,128, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '120' - $floorItems['120'] = i - TkcText.new(w,189.5,111.5, 'text'=>'120', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,79,193,87,193,87,169,136,169,136,192, - 156,192,156,169,175,169,175,246,79,246, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '122' - $floorItems['122'] = i - TkcText.new(w,131,207.5, 'text'=>'122', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,138,169,154,169,154,191,138,191, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '121' - $floorItems['121'] = i - TkcText.new(w,146,180, 'text'=>'121', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,99,300,126,300,126,309,99,309, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '106A' - $floorItems['106A'] = i - TkcText.new(w,112.5,304.5, 'text'=>'106A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,128,299,128,309,150,309,150,248,99,248,99,299, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '105' - $floorItems['105'] = i - TkcText.new(w,124.5,278.5, 'text'=>'105', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,174,309,174,300,152,300,152,309, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '106B' - $floorItems['106B'] = i - TkcText.new(w,163,304.5, 'text'=>'106B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,176,299,176,309,216,309,216,248,152,248,152,299, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '104' - $floorItems['104'] = i - TkcText.new(w,184,278.5, 'text'=>'104', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,138,385,138,337,91,337,91,385, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '108' - $floorItems['108'] = i - TkcText.new(w,114.5,361, 'text'=>'108', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,256,337,140,337,140,385,256,385, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '107' - $floorItems['107'] = i - TkcText.new(w,198,361, 'text'=>'107', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,300,353,300,329,260,329,260,353, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Smoking' - $floorItems['Smoking'] = i - TkcText.new(w,280,341, 'text'=>'Smoking', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,314,135,314,170,306,170,306,246,177,246,177,135, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '123' - $floorItems['123'] = i - TkcText.new(w,245.5,190.5, 'text'=>'123', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,217,248,301,248,301,326,257,326,257,310,217,310, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '103' - $floorItems['103'] = i - TkcText.new(w,259,287, 'text'=>'103', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,396,188,377,188,377,169,316,169,316,131,396,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '124' - $floorItems['124'] = i - TkcText.new(w,356,150, 'text'=>'124', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,397,226,407,226,407,189,377,189,377,246,397,246, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '125' - $floorItems['125'] = i - TkcText.new(w,392,217.5, 'text'=>'125', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,399,187,409,187,409,207,474,207,474,164,399,164, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '126' - $floorItems['126'] = i - TkcText.new(w,436.5,185.5, 'text'=>'126', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,409,209,409,229,399,229,399,253, - 486,253,486,239,474,239,474,209, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '127' - $floorItems['127'] = i - TkcText.new(w,436.5,'231', 'text'=>'127', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,501,164,501,174,495,174,495,188, - 490,188,490,204,476,204,476,164, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'MShower' - $floorItems['MShower'] = i - TkcText.new(w,488.5,'184', 'text'=>'MShower', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,497,176,513,176,513,204,492,204,492,190,497,190, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Closet' - $floorItems['Closet'] = i - TkcText.new(w,502.5,190, 'text'=>'Closet', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,476,237,476,206,513,206,513,254,488,254,488,237, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'WShower' - $floorItems['WShower'] = i - TkcText.new(w,494.5,230, 'text'=>'WShower', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,486,131,558,131,558,135,724,135,724,166, - 697,166,697,275,553,275,531,254,515,254, - 515,174,503,174,503,161,486,161, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '130' - $floorItems['130'] = i - TkcText.new(w,638.5,205, 'text'=>'130', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,308,242,339,242,339,248,342,248, - 342,246,397,246,397,276,393,276, - 393,309,300,309,300,248,308,248, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '102' - $floorItems['102'] = i - TkcText.new(w,367.5,278.5, 'text'=>'102', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,397,255,486,255,486,276,397,276, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '128' - $floorItems['128'] = i - TkcText.new(w,441.5,265.5, 'text'=>'128', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,510,309,486,309,486,255,530,255, - 552,277,561,277,561,325,510,325, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '129' - $floorItems['129'] = i - TkcText.new(w,535.5,293, 'text'=>'129', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,696,281,740,281,740,387,642,387, - 642,389,561,389,561,277,696,277, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '133' - $floorItems['133'] = i - TkcText.new(w,628.5,335, 'text'=>'133', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,742,387,742,281,800,281,800,387, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '132' - $floorItems['132'] = i - TkcText.new(w,771,334, 'text'=>'132', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,800,168,800,280,699,280,699,168, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '134' - $floorItems['134'] = i - TkcText.new(w,749.5,224, 'text'=>'134', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,726,131,726,166,800,166,800,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '135' - $floorItems['135'] = i - TkcText.new(w,763,148.5, 'text'=>'135', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,340,360,335,363,331,365,326,366,304,366, - 304,312,396,312,396,288,400,288,404,288, - 409,290,413,292,418,297,421,302,422,309, - 421,318,417,325,411,330,405,332,397,333, - 344,333,340,334,336,336,335,338,332,342, - 331,347,332,351,334,354,336,357,341,359, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Ramona Stair' - $floorItems['Ramona Stair'] = i - TkcText.new(w,368,323, 'text'=>'Ramona Stair', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,30,23,30,5,93,5,98,5,104,7,110,10,116,16,119,20, - 122,28,123,32,123,68,220,68,220,87,90,87,90,23, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'University Stair' - $floorItems['University Stair'] = i - TkcText.new(w,155,77.5, 'text'=>'University Stair', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,282,37,295,40,312,49,323,56,337,70,352,56, - 358,48,363,39,365,29,348,25,335,22,321,14, - 300,5,283,1,260,0,246,0,242,2,236,4,231,8, - 227,13,223,17,221,22,220,34,260,34, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Plaza Stair' - $floorItems['Plaza Stair'] = i - TkcText.new(w,317.5,28.5, 'text'=>'Plaza Stair', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,220,34,260,34,282,37,295,40,312,49, - 323,56,337,70,350,83,365,94,377,100, - 386,104,386,128,220,128, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Plaza Deck' - $floorItems['Plaza Deck'] = i - TkcText.new(w,303,81, 'text'=>'Plaza Deck', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,257,336,77,336,6,336,6,301,77,301,77,310,257,310, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '106' - $floorItems['106'] = i - TkcText.new(w,131.5,318.5, 'text'=>'106', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,146,110,162,110,162,91,130,91,130,115,95,115, - 95,128,114,128,114,151,157,151,157,153,112,153, - 112,130,97,130,97,168,175,168,175,131,146,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '119' - $floorItems['119'] = i - TkcText.new(w,143.5,133, 'text'=>'119', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - TkcLine.new(w,155,191,155,189, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,155,177,155,169, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,96,129,96,169, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,78,169,176,169, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,176,247,176,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,340,206,307,206, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,340,187,340,170, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,340,210,340,201, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,340,247,340,224, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,340,241,307,241, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,376,246,376,170, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,307,247,307,170, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,376,170,307,170, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,315,129,315,170, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,147,129,176,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,202,133,176,133, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,398,129,315,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,258,352,258,387, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,60,387,60,391, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,0,337,0,391, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,60,391,0,391, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,3,114,3,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,258,387,60,387, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,237,52,273, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,189,52,225, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,140,52,177, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,395,306,395,311, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,531,254,398,254, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,475,178,475,238, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,502,162,398,162, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,398,129,398,188, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,383,188,376,188, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,408,188,408,194, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,398,227,398,254, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,408,227,398,227, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,408,222,408,227, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,408,206,408,210, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,408,208,475,208, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,484,278,484,311, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,484,311,508,311, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,508,327,508,311, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,559,327,508,327, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,644,391,559,391, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,644,389,644,391, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,514,205,475,205, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,496,189,496,187, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,559,129,484,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,484,162,484,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,725,133,559,133, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,559,129,559,133, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,725,149,725,167, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,725,129,802,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,802,389,802,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,739,167,802,167, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,396,188,408,188, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,0,337,9,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,58,337,21,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,43,391,43,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,105,337,75,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,91,387,91,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,154,337,117,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,139,387,139,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,227,337,166,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,258,337,251,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,258,328,302,328, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,302,355,302,311, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,395,311,302,311, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,484,278,395,278, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,395,294,395,278, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,473,278,473,275, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,473,256,473,254, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,533,257,531,254, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,553,276,551,274, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,698,276,553,276, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,559,391,559,327, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,802,389,644,389, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,741,314,741,389, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,698,280,698,167, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,707,280,698,280, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,802,280,731,280, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,741,280,741,302, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,698,167,727,167, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,725,137,725,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,514,254,514,175, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,496,175,514,175, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,502,175,502,162, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,475,166,475,162, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,496,176,496,175, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,491,189,496,189, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,491,205,491,189, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,487,238,475,238, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,487,240,487,238, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,487,252,487,254, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,315,133,304,133, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,256,133,280,133, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,78,247,270,247, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,307,247,294,247, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,214,133,232,133, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,217,247,217,266, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,217,309,217,291, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,217,309,172,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,154,309,148,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,175,300,175,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,151,300,175,300, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,151,247,151,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,78,237,78,265, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,78,286,78,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,106,309,78,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,130,309,125,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,99,309,99,247, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,127,299,99,299, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,127,309,127,299, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,155,191,137,191, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,137,169,137,191, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,78,171,78,169, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,78,190,78,218, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,86,192,86,169, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,86,192,78,192, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,301,3,301, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,286,52,301, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,252,3,252, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,203,3,203, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,3,156,52,156, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,8,25,8,114, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,63,114,3,114, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,75,114,97,114, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,108,114,129,114, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,129,114,129,89, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,114,52,128, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,132,89,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,88,25,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,88,114,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,218,89,144,89, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,147,111,147,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,162,111,147,111, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,162,109,162,111, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,162,96,162,89, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,218,89,218,94, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,218,89,218,119, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,8,25,88,25, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,258,337,258,328, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,113,129,96,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,302,355,258,355, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,386,104,386,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,377,100,386,104, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,365,94,377,100, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,350,83,365,94, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,337,70,350,83, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,337,70,323,56, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,312,49,323,56, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,295,40,312,49, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,282,37,295,40, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,260,34,282,37, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,253,34,260,34, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,386,128,386,104, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,113,152,156,152, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,113,152,156,152, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,113,152,113,129, 'fill'=>color, 'tags'=>['floor1','wall']) -end - -# floor_fg2 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the foreground information for the second -# floor (office outlines and numbers). -# -# Arguments: -# w - The canvas window. -# color - Color to use for drawing foreground information. - -def floor_fg2(w,color) - i = TkcPolygon.new(w,748,188,755,188,755,205,758,205,758,222, - 800,222,800,168,748,168, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '238' - $floorItems['238'] = i - TkcText.new(w,774,195, 'text'=>'238', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,726,188,746,188,746,166,800,166,800,131,726,131, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '237' - $floorItems['237'] = i - TkcText.new(w,763,148.5, 'text'=>'237', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,497,187,497,204,559,204,559,324,641,324, - 643,324,643,291,641,291,641,205,696,205, - 696,291,694,291,694,314,715,314,715,291, - 715,205,755,205,755,190,724,190,724,187, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '246' - $floorItems['246'] = i - TkcText.new(w,600,264, 'text'=>'246', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,694,279,643,279,643,314,694,314, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '247' - $floorItems['247'] = i - TkcText.new(w,668.5,296.5, 'text'=>'247', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,232,250,308,250,308,242,339,242,339,246, - 397,246,397,255,476,255,476,250,482,250,559,250, - 559,274,482,274,482,278,396,278,396,274,232,274, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '202' - $floorItems['202'] = i - TkcText.new(w,285.5,260, 'text'=>'202', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,53,228,53,338,176,338,233,338,233,196, - 306,196,306,180,175,180,175,169,156,169, - 156,196,176,196,176,228, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '206' - $floorItems['206'] = i - TkcText.new(w,143,267, 'text'=>'206', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,277,6,277,6,338,51,338, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '212' - $floorItems['212'] = i - TkcText.new(w,28.5,307.5, 'text'=>'212', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,557,276,486,276,486,309,510,309,510,325,557,325, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '245' - $floorItems['245'] = i - TkcText.new(w,521.5,300.5, 'text'=>'245', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,560,389,599,389,599,326,560,326, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '244' - $floorItems['244'] = i - TkcText.new(w,579.5,357.5, 'text'=>'244', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,601,389,601,326,643,326,643,389, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '243' - $floorItems['243'] = i - TkcText.new(w,622,357.5, 'text'=>'243', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,688,316,645,316,645,365,688,365, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '242' - $floorItems['242'] = i - TkcText.new(w,666.5,340.5, 'text'=>'242', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,802,367,759,367,759,226,802,226, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = 'Barbecue Deck' - $floorItems['Barbecue Deck'] = i - TkcText.new(w,780.5,296.5, 'text'=>'Barbecue Deck', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,755,262,755,314,717,314,717,262, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '240' - $floorItems['240'] = i - TkcText.new(w,736,288, 'text'=>'240', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,755,316,689,316,689,365,755,365, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '241' - $floorItems['241'] = i - TkcText.new(w,722,340.5, 'text'=>'241', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,755,206,717,206,717,261,755,261, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '239' - $floorItems['239'] = i - TkcText.new(w,736,233.5, 'text'=>'239', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,695,277,643,277,643,206,695,206, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '248' - $floorItems['248'] = i - TkcText.new(w,669,241.5, 'text'=>'248', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,676,135,676,185,724,185,724,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '236' - $floorItems['236'] = i - TkcText.new(w,700,160, 'text'=>'236', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,675,135,635,135,635,145,628,145,628,185,675,185, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '235' - $floorItems['235'] = i - TkcText.new(w,651.5,160, 'text'=>'235', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,626,143,633,143,633,135,572,135, - 572,143,579,143,579,185,626,185, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '234' - $floorItems['234'] = i - TkcText.new(w,606,160, 'text'=>'234', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,557,135,571,135,571,145,578,145, - 578,185,527,185,527,131,557,131, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '233' - $floorItems['233'] = i - TkcText.new(w,552.5,158, 'text'=>'233', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,476,249,557,249,557,205,476,205, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '230' - $floorItems['230'] = i - TkcText.new(w,516.5,227, 'text'=>'230', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,476,164,486,164,486,131,525,131,525,185,476,185, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '232' - $floorItems['232'] = i - TkcText.new(w,500.5,158, 'text'=>'232', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,476,186,495,186,495,204,476,204, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '229' - $floorItems['229'] = i - TkcText.new(w,485.5,195, 'text'=>'229', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,474,207,409,207,409,187,399,187,399,164,474,164, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '227' - $floorItems['227'] = i - TkcText.new(w,436.5,185.5, 'text'=>'227', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,399,228,399,253,474,253,474,209,409,209,409,228, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '228' - $floorItems['228'] = i - TkcText.new(w,436.5,231, 'text'=>'228', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,397,246,397,226,407,226,407,189,377,189,377,246, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '226' - $floorItems['226'] = i - TkcText.new(w,392,217.5, 'text'=>'226', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,377,169,316,169,316,131,397,131,397,188,377,188, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '225' - $floorItems['225'] = i - TkcText.new(w,356.5,150, 'text'=>'225', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,234,198,306,198,306,249,234,249, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '224' - $floorItems['224'] = i - TkcText.new(w,270,223.5, 'text'=>'224', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,270,179,306,179,306,170,314,170,314,135,270,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '223' - $floorItems['223'] = i - TkcText.new(w,292,157, 'text'=>'223', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,268,179,221,179,221,135,268,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '222' - $floorItems['222'] = i - TkcText.new(w,244.5,157, 'text'=>'222', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,177,179,219,179,219,135,177,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '221' - $floorItems['221'] = i - TkcText.new(w,198,157, 'text'=>'221', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,299,327,349,327,349,284,341,284,341,276,299,276, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '204' - $floorItems['204'] = i - TkcText.new(w,324,301.5, 'text'=>'204', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,234,276,297,276,297,327,257,327,257,338,234,338, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '205' - $floorItems['205'] = i - TkcText.new(w,265.5,307, 'text'=>'205', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,256,385,256,340,212,340,212,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '207' - $floorItems['207'] = i - TkcText.new(w,234,362.5, 'text'=>'207', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,210,340,164,340,164,385,210,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '208' - $floorItems['208'] = i - TkcText.new(w,187,362.5, 'text'=>'208', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,115,340,162,340,162,385,115,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '209' - $floorItems['209'] = i - TkcText.new(w,138.5,362.5, 'text'=>'209', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,89,228,89,156,53,156,53,228, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '217' - $floorItems['217'] = i - TkcText.new(w,71,192, 'text'=>'217', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,89,169,97,169,97,190,89,190, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '217A' - $floorItems['217A'] = i - TkcText.new(w,93,179.5, 'text'=>'217A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,89,156,89,168,95,168,95,135,53,135,53,156, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '216' - $floorItems['216'] = i - TkcText.new(w,71,145.5, 'text'=>'216', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,179,51,135,6,135,6,179, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '215' - $floorItems['215'] = i - TkcText.new(w,28.5,157, 'text'=>'215', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,227,6,227,6,180,51,180, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '214' - $floorItems['214'] = i - TkcText.new(w,28.5,203.5, 'text'=>'214', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,275,6,275,6,229,51,229, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '213' - $floorItems['213'] = i - TkcText.new(w,28.5,252, 'text'=>'213', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,114,340,67,340,67,385,114,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '210' - $floorItems['210'] = i - TkcText.new(w,90.5,362.5, 'text'=>'210', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,59,389,59,385,65,385,65,340,1,340,1,389, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '211' - $floorItems['211'] = i - TkcText.new(w,33,364.5, 'text'=>'211', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,393,309,350,309,350,282,342,282,342,276,393,276, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '203' - $floorItems['203'] = i - TkcText.new(w,367.5,292.5, 'text'=>'203', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,99,191,91,191,91,226,174,226,174,198, - 154,198,154,192,109,192,109,169,99,169, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '220' - $floorItems['220'] = i - TkcText.new(w,132.5,208.5, 'text'=>'220', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = 'Priv Lift2' - $floorItems['Priv Lift2'] = i - TkcText.new(w,323,188, 'text'=>'Priv Lift2', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = 'Pub Lift 2' - $floorItems['Pub Lift 2'] = i - TkcText.new(w,323,223, 'text'=>'Pub Lift 2', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '218' - $floorItems['218'] = i - TkcText.new(w,136,149.5, 'text'=>'218', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '219' - $floorItems['219'] = i - TkcText.new(w,132.5,180, 'text'=>'219', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '201' - $floorItems['201'] = i - TkcText.new(w,358,209, 'text'=>'201', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - TkcLine.new(w,641,186,678,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,350,757,367, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,634,133,634,144, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,634,144,627,144, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,572,133,572,144, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,572,144,579,144, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,398,129,398,162, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,174,197,175,197, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,175,197,175,227, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,206,757,221, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,396,188,408,188, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,727,189,725,189, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,747,167,802,167, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,747,167,747,189, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,755,189,739,189, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,769,224,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,802,224,802,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,802,129,725,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,725,189,725,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,725,186,690,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,676,133,676,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,627,144,627,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,629,186,593,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,579,144,579,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,559,129,559,133, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,725,133,559,133, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,484,162,484,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,559,129,484,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,526,129,526,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,540,186,581,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,528,186,523,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,511,186,475,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,496,190,496,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,496,205,496,202, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,475,205,527,205, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,205,539,205, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,205,558,249, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,249,475,249, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,662,206,642,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,695,206,675,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,695,278,642,278, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,642,291,642,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,695,291,695,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,716,208,716,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,206,716,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,221,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,793,224,802,224, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,262,716,262, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,716,220,716,264, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,716,315,716,276, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,315,703,315, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,325,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,367,644,367, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,689,367,689,315, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,647,315,644,315, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,659,315,691,315, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,600,325,600,391, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,627,325,644,325, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,644,391,644,315, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,615,325,575,325, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,644,391,558,391, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,563,325,558,325, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,391,558,314, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,327,508,327, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,275,484,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,302,558,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,508,327,508,311, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,484,311,508,311, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,484,275,484,311, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,475,208,408,208, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,408,206,408,210, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,408,222,408,227, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,408,227,398,227, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,398,227,398,254, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,408,188,408,194, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,383,188,376,188, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,398,188,398,162, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,398,162,484,162, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,475,162,475,254, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,398,254,475,254, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,484,280,395,280, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,395,311,395,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,307,197,293,197, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,278,197,233,197, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,233,197,233,249, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,307,179,284,179, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,233,249,278,249, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,269,179,269,133, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,220,179,220,133, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,155,191,110,191, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,90,190,98,190, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,98,169,98,190, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,133,52,165, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,214,52,177, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,226,52,262, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,274,52,276, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,234,275,234,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,226,339,258,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,211,387,211,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,214,339,177,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,258,387,60,387, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,3,133,3,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,165,339,129,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,117,339,80,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,68,339,59,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,0,339,46,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,60,391,0,391, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,0,339,0,391, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,60,387,60,391, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,258,329,258,387, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,350,329,258,329, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,395,311,350,311, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,398,129,315,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,176,133,315,133, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,176,129,96,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,3,133,96,133, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,66,387,66,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,115,387,115,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,163,387,163,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,234,275,276,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,288,275,309,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,298,275,298,329, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,341,283,350,283, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,321,275,341,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,375,275,395,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,315,129,315,170, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,376,170,307,170, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,307,250,307,170, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,376,245,376,170, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,340,241,307,241, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,340,245,340,224, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,340,210,340,201, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,340,187,340,170, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,340,206,307,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,293,250,307,250, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,271,179,238,179, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,226,179,195,179, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,176,129,176,179, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,182,179,176,179, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,174,169,176,169, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,162,169,90,169, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,96,169,96,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,175,227,90,227, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,90,190,90,227, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,179,3,179, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,228,3,228, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,276,3,276, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,155,177,155,169, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,110,191,110,169, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,155,189,155,197, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,350,283,350,329, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,162,197,155,197, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,341,275,341,283, 'fill'=>color, 'tags'=>['floor2','wall']) -end - -# floor_fg3 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the foreground information for the third -# floor (office outlines and numbers). -# -# Arguments: -# w - The canvas window. -# color - Color to use for drawing foreground information. - -def floor_fg3(w,color) - i = TkcPolygon.new(w,89,228,89,180,70,180,70,228, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '316' - $floorItems['316'] = i - TkcText.new(w,79.5,204, 'text'=>'316', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,115,368,162,368,162,323,115,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '309' - $floorItems['309'] = i - TkcText.new(w,138.5,345.5, 'text'=>'309', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,164,323,164,368,211,368,211,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '308' - $floorItems['308'] = i - TkcText.new(w,187.5,345.5, 'text'=>'308', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,256,368,212,368,212,323,256,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '307' - $floorItems['307'] = i - TkcText.new(w,234,345.5, 'text'=>'307', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,244,276,297,276,297,327,260,327,260,321,244,321, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '305' - $floorItems['305'] = i - TkcText.new(w,270.5,301.5, 'text'=>'305', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,251,219,251,203,244,203,244,219, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '324B' - $floorItems['324B'] = i - TkcText.new(w,247.5,211, 'text'=>'324B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,251,249,244,249,244,232,251,232, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '324A' - $floorItems['324A'] = i - TkcText.new(w,247.5,240.5, 'text'=>'324A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,223,135,223,179,177,179,177,135, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '320' - $floorItems['320'] = i - TkcText.new(w,200,157, 'text'=>'320', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,114,368,114,323,67,323,67,368, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '310' - $floorItems['310'] = i - TkcText.new(w,90.5,345.5, 'text'=>'310', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,23,277,23,321,68,321,68,277, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '312' - $floorItems['312'] = i - TkcText.new(w,45.5,299, 'text'=>'312', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,23,229,68,229,68,275,23,275, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '313' - $floorItems['313'] = i - TkcText.new(w,45.5,252, 'text'=>'313', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,68,227,23,227,23,180,68,180, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '314' - $floorItems['314'] = i - TkcText.new(w,40.5,203.5, 'text'=>'314', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,95,179,95,135,23,135,23,179, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '315' - $floorItems['315'] = i - TkcText.new(w,59,157, 'text'=>'315', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,99,226,99,204,91,204,91,226, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '316B' - $floorItems['316B'] = i - TkcText.new(w,95,215, 'text'=>'316B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,91,202,99,202,99,180,91,180, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '316A' - $floorItems['316A'] = i - TkcText.new(w,95,191, 'text'=>'316A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,97,169,109,169,109,192,154,192,154,198, - 174,198,174,226,101,226,101,179,97,179, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '319' - $floorItems['319'] = i - TkcText.new(w,141.5,209, 'text'=>'319', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,65,368,58,368,58,389,1,389,1,333,23,333,23,323,65,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '311' - $floorItems['311'] = i - TkcText.new(w,29.5,361, 'text'=>'311', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '318' - $floorItems['318'] = i - TkcText.new(w,132.5,180, 'text'=>'318', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '317' - $floorItems['317'] = i - TkcText.new(w,136,149.5, 'text'=>'317', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,274,194,274,221,306,221,306,194, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '323' - $floorItems['323'] = i - TkcText.new(w,290,207.5, 'text'=>'323', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,306,222,274,222,274,249,306,249, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '325' - $floorItems['325'] = i - TkcText.new(w,290,235.5, 'text'=>'325', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,263,179,224,179,224,135,263,135, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '321' - $floorItems['321'] = i - TkcText.new(w,243.5,157, 'text'=>'321', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,314,169,306,169,306,192,273,192, - 264,181,264,135,314,135, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '322' - $floorItems['322'] = i - TkcText.new(w,293.5,163.5, 'text'=>'322', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = 'Pub Lift3' - $floorItems['Pub Lift3'] = i - TkcText.new(w,323,223, 'text'=>'Pub Lift3', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = 'Priv Lift3' - $floorItems['Priv Lift3'] = i - TkcText.new(w,323,188, 'text'=>'Priv Lift3', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,350,284,376,284,376,276,397,276,397,309,350,309, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '303' - $floorItems['303'] = i - TkcText.new(w,373.5,292.5, 'text'=>'303', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,272,203,272,249,252,249,252,230, - 244,230,244,221,252,221,252,203, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '324' - $floorItems['324'] = i - TkcText.new(w,262,226, 'text'=>'324', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,299,276,299,327,349,327,349,284,341,284,341,276, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '304' - $floorItems['304'] = i - TkcText.new(w,324,301.5, 'text'=>'304', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '301' - $floorItems['301'] = i - TkcText.new(w,358,209, 'text'=>'301', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,397,246,377,246,377,185,397,185, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '327' - $floorItems['327'] = i - TkcText.new(w,387,215.5, 'text'=>'327', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,316,131,316,169,377,169,377,185,397,185,397,131, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '326' - $floorItems['326'] = i - TkcText.new(w,365.5,150, 'text'=>'326', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,308,251,242,251,242,274,342,274,342,282,375, 282, - 375,274,397,274,397,248,339,248,339,242,308,242, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '302' - $floorItems['302'] = i - TkcText.new(w,319.5,261, 'text'=>'302', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,70,321,242,321,242,200,259,200,259,203,272,203, - 272,193,263,180,242,180,175,180,175,169,156,169, - 156,196,177,196,177,228,107,228,70,228,70,275,107,275, - 107,248,160,248,160,301,107,301,107,275,70,275, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '306' - $floorItems['306'] = i - TkcText.new(w,200.5,284.5, 'text'=>'306', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - TkcLine.new(w,341,275,341,283, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,162,197,155,197, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,396,247,399,247, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,399,129,399,311, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,258,202,243,202, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,350,283,350,329, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,251,231,243,231, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,243,220,251,220, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,243,250,243,202, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,155,197,155,190, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,110,192,110,169, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,155,192,110,192, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,155,177,155,169, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,176,197,176,227, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,69,280,69,274, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,21,276,69,276, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,69,262,69,226, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,21,228,69,228, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,21,179,75,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,69,179,69,214, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,90,220,90,227, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,90,204,90,202, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,90,203,100,203, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,90,187,90,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,90,227,176,227, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,100,179,100,227, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,100,179,87,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,96,179,96,129, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,162,169,96,169, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,173,169,176,169, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,182,179,176,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,176,129,176,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,195,179,226,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,224,133,224,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,264,179,264,133, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,238,179,264,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,207,273,193, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,235,273,250, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,224,273,219, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,193,307,193, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,222,307,222, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,250,307,250, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,384,247,376,247, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,340,206,307,206, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,340,187,340,170, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,340,210,340,201, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,340,247,340,224, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,340,241,307,241, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,376,247,376,170, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,307,250,307,170, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,376,170,307,170, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,315,129,315,170, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,376,283,366,283, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,376,283,376,275, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,399,275,376,275, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,341,275,320,275, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,341,283,350,283, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,298,275,298,329, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,308,275,298,275, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,243,322,243,275, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,243,275,284,275, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,258,322,226,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,212,370,212,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,214,322,177,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,163,370,163,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,165,322,129,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,84,322,117,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,71,322,64,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,115,322,115,370, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,66,322,66,370, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,52,322,21,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,21,331,0,331, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,21,331,21,133, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,96,133,21,133, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,176,129,96,129, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,315,133,176,133, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,315,129,399,129, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,399,311,350,311, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,350,329,258,329, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,258,322,258,370, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,60,370,258,370, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,60,370,60,391, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,0,391,0,331, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,60,391,0,391, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,307,250,307,242, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,250,307,250, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,258,250,243,250, 'fill'=>color, 'tags'=>['floor3','wall']) -end - -# Below is the "main program" that creates the floorplan demonstration. - -# toplevel widget -if defined?($floor_demo) && $floor_demo - $floor_demo.destroy - $floor_demo = nil -end - -# demo toplevel widget -$floor_demo = TkToplevel.new {|w| - title("Floorplan Canvas Demonstration") - iconname("Floorplan") - positionWindow(w) - geometry('+20+20') - minsize(100,100) -} - -base_frame = TkFrame.new($floor_demo).pack(:fill=>:both, :expand=>true) - -# label -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'8i', 'justify'=>'left', - 'text'=>"This window contains a canvas widget showing the floorplan of Digital Equipment Corporation's Western Research Laboratory. It has three levels. At any given time one of the levels is active, meaning that you can see its room structure. To activate a level, click the left mouse button anywhere on it. As the mouse moves over the active level, the room under the mouse lights up and its room number appears in the \"Room:\" entry. You can also type a room number in the entry and the room will light up."){ - pack('side'=>'top') -} - -# frame -$floor_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $floor_demo - $floor_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'floor'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$floor_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# -$floorLabels = {} -$floorItems = {} - -# canvas -if $tk_version =~ /^4\.[01]/ - $floor_canvas_frame = TkFrame.new(base_frame,'bd'=>2,'relief'=>'sunken', - 'highlightthickness'=>2) - $floor_canvas = TkCanvas.new($floor_canvas_frame, - 'width'=>900, 'height'=>500, 'borderwidth'=>0, - 'highlightthickness'=>0) {|c| - TkScrollbar.new(base_frame, 'orient'=>'horiz', - 'command'=>proc{|*args| c.xview(*args)}){|hs| - c.xscrollcommand(proc{|first,last| hs.set first,last}) - pack('side'=>'bottom', 'fill'=>'x') - } - TkScrollbar.new(base_frame, 'command'=>proc{|*args| c.yview(*args)}){|vs| - c.yscrollcommand(proc{|first,last| vs.set first,last}) - pack('side'=>'right', 'fill'=>'y') - } - } - $floor_canvas_frame.pack('side'=>'top','fill'=>'both', 'expand'=>'yes') - $floor_canvas.pack('expand'=>'yes', 'fill'=>'both') - -else - TkFrame.new(base_frame) {|f| - pack('side'=>'top', 'fill'=>'both', 'expand'=>'yes') - - h = TkScrollbar.new(f, 'highlightthickness'=>0, 'orient'=>'horizontal') - v = TkScrollbar.new(f, 'highlightthickness'=>0, 'orient'=>'vertical') - - TkFrame.new(f, 'bd'=>2, 'relief'=>'sunken') {|f1| - $floor_canvas = TkCanvas.new(f1, 'width'=>900, 'height'=>500, - 'borderwidth'=>0, - 'highlightthickness'=>0) { - xscrollcommand(proc{|first,last| h.set first,last}) - yscrollcommand(proc{|first,last| v.set first,last}) - pack('expand'=>'yes', 'fill'=>'both') - } - grid('padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - } - - v.grid('padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>1, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - h.grid('padx'=>1, 'pady'=>1, 'row'=>1, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - - TkGrid.rowconfigure(f, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure(f, 0, 'weight'=>1, 'minsize'=>0) - - pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>1) - - v.command(proc{|*args| $floor_canvas.yview(*args)}) - h.command(proc{|*args| $floor_canvas.xview(*args)}) - } -end - - -# Create an entry for displaying and typing in current room. - -$currentRoom = TkVariable.new -$floor_entry = TkEntry.new($floor_canvas, 'width'=>10, 'relief'=>'sunken', - 'bd'=>2, 'textvariable'=>$currentRoom) - -# Choose colors, then fill in the floorplan. - -$floor_colors = {} -if TkWinfo.depth($floor_canvas) > 1 - $floor_colors['bg1'] = '#a9c1da' - $floor_colors['outline1'] = '#77889a' - $floor_colors['bg2'] = '#9ab0c6' - $floor_colors['outline2'] = '#687786' - $floor_colors['bg3'] = '#8ba0b3' - $floor_colors['outline3'] = '#596673' - $floor_colors['offices'] = 'Black' - $floor_colors['active'] = '#c4d1df' -else - $floor_colors['bg1'] = 'white' - $floor_colors['outline1'] = 'black' - $floor_colors['bg2'] = 'white' - $floor_colors['outline2'] = 'black' - $floor_colors['bg3'] = 'white' - $floor_colors['outline3'] = 'black' - $floor_colors['offices'] = 'Black' - $floor_colors['active'] = 'black' -end - -$activeFloor = '' -floorDisplay $floor_canvas,3 - -# Set up event bindings for canvas: - -$floor_canvas.itembind('floor1', '1', proc{floorDisplay $floor_canvas,1}) -$floor_canvas.itembind('floor2', '1', proc{floorDisplay $floor_canvas,2}) -$floor_canvas.itembind('floor3', '1', proc{floorDisplay $floor_canvas,3}) -$floor_canvas.itembind('room', 'Enter', proc{newRoom $floor_canvas}) -$floor_canvas.itembind('room', 'Leave', proc{$currentRoom.value = ''}) -$floor_canvas.bind('2', proc{|x,y| $floor_canvas.scan_mark x,y}, '%x %y') -$floor_canvas.bind('B2-Motion', - proc{|x,y| $floor_canvas.scan_dragto x,y}, '%x %y') -$floor_canvas.bind('Destroy', proc{$currentRoom.unset}) -$currentRoom.value = '' -$currentRoom.trace('w',proc{roomChanged $floor_canvas}) - diff --git a/ext/tk/sample/demos-en/floor2.rb b/ext/tk/sample/demos-en/floor2.rb deleted file mode 100644 index 518dd3b0fd..0000000000 --- a/ext/tk/sample/demos-en/floor2.rb +++ /dev/null @@ -1,1723 +0,0 @@ -# frozen_string_literal: false -%# floor2.rb -# -# This demonstration script creates a canvas widget that displays the -# floorplan for DEC's Western Research Laboratory. -# -# floorDisplay widget demo (called by 'widget') -# - -# floorDisplay2 -- -# Recreate the floorplan display in the canvas given by "w". The -# floor given by "active" is displayed on top with its office structure -# visible. -# -# Arguments: -# w - Name of the canvas window. -# active - Number of active floor (1, 2, or 3). - -def floorDisplay2(w,active) - return if $activeFloor2 == active - - w.delete('all') - $activeFloor2 = active - - # First go through the three floors, displaying the backgrounds for - # each floor. - - floor2_bg1(w,$floor2_colors['bg1'],$floor2_colors['outline1']) - floor2_bg2(w,$floor2_colors['bg2'],$floor2_colors['outline2']) - floor2_bg3(w,$floor2_colors['bg3'],$floor2_colors['outline3']) - - # Raise the background for the active floor so that it's on top. - - w.raise("floor#{active}") - - # Create a dummy item just to mark this point in the display list, - # so we can insert highlights here. - - w.create(TkcRectangle,0,100,1,101,'fill'=>'','outline'=>'','tags'=>'marker') - - # Add the walls and labels for the active floor, along with - # transparent polygons that define the rooms on the floor. - # Make sure that the room polygons are on top. - - $floorLabels2.clear - $floorItems2.clear - send("floor2_fg#{active}", w, $floor2_colors['offices']) - w.raise('room') - - # Offset the floors diagonally from each other. - - w.move('floor1', '2c', '2c') - w.move('floor2', '1c', '1c') - - # Create items for the room entry and its label. - w.create(TkcWindow, 600, 100, 'anchor'=>'w', 'window'=>$floor2_entry) - w.create(TkcText, 600, 100, 'anchor'=>'e', 'text'=>"Room: ") - w['scrollregion'] = w.bbox('all') -end - -# newRoom2 -- -# This method is invoked whenever the mouse enters a room -# in the floorplan. It changes tags so that the current room is -# highlighted. -# -# Arguments: -# w - The name of the canvas window. - -def newRoom2(w) - id = w.find_withtag('current')[0] - $currentRoom2.value = $floorLabels2[id.id] if id != "" - Tk.update(true) -end - -# roomChanged2 -- -# This method is invoked whenever the currentRoom variable changes. -# It highlights the current room and unhighlights any previous room. -# -# Arguments: -# w - The canvas window displaying the floorplan. -# args - Not used. - -def roomChanged2(w,*args) - w.delete('highlight') - item = $floorItems2[$currentRoom2.value] - return if item == nil - new = TkcPolygon.new(w, *(w.coords(item))) - new.configure('fill'=>$floor2_colors['active'], 'tags'=>'highlight') - w.raise(new, 'marker') -end - -# floor2_bg1 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the background information for the first -# floor. -# -# Arguments: -# w - The canvas window. -# fill - Fill color to use for the floor's background. -# outline - Color to use for the floor's outline. - -def floor2_bg1(w,fill,outline) - w.create(TkcPolygon,347,80,349,82,351,84,353,85,363,92,375,99,386,104, - 386,129,398,129,398,162,484,162,484,129,559,129,559,133,725, - 133,725,129,802,129,802,389,644,389,644,391,559,391,559,327, - 508,327,508,311,484,311,484,278,395,278,395,288,400,288,404, - 288,409,290,413,292,418,297,421,302,422,309,421,318,417,325, - 411,330,405,332,397,333,344,333,340,334,336,336,335,338,332, - 342,331,347,332,351,334,354,336,357,341,359,340,360,335,363, - 331,365,326,366,304,366,304,355,258,355,258,387,60,387,60,391, - 0,391,0,337,3,337,3,114,8,114,8,25,30,25,30,5,93,5,98,5,104,7, - 110,10,116,16,119,20,122,28,123,32,123,68,220,68,220,34,221, - 22,223,17,227,13,231,8,236,4,242,2,246,0,260,0,283,1,300,5, - 321,14,335,22,348,25,365,29,363,39,358,48,352,56,337,70, - 344,76,347,80, 'tags'=>['floor1','bg'], 'fill'=>fill) - w.create(TkcLine,386,129,398,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,258,355,258,387, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,60,387,60,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,0,337,0,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,60,391,0,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,3,114,3,337, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,258,387,60,387, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,484,162,398,162, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,398,162,398,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,484,278,484,311, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,484,311,508,311, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,508,327,508,311, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,559,327,508,327, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,644,391,559,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,644,389,644,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,559,129,484,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,484,162,484,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,725,133,559,133, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,559,129,559,133, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,725,129,802,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,802,389,802,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,3,337,0,337, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,559,391,559,327, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,802,389,644,389, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,725,133,725,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,8,25,8,114, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,8,114,3,114, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,30,25,8,25, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,484,278,395,278, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,30,25,30,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,93,5,30,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,98,5,93,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,104,7,98,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,110,10,104,7, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,116,16,110,10, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,119,20,116,16, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,122,28,119,20, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,123,32,122,28, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,123,68,123,32, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,220,68,123,68, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,386,129,386,104, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,386,104,375,99, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,375,99,363,92, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,353,85,363,92, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,220,68,220,34, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,337,70,352,56, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,352,56,358,48, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,358,48,363,39, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,363,39,365,29, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,365,29,348,25, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,348,25,335,22, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,335,22,321,14, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,321,14,300,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,300,5,283,1, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,283,1,260,0, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,260,0,246,0, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,246,0,242,2, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,242,2,236,4, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,236,4,231,8, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,231,8,227,13, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,223,17,227,13, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,221,22,223,17, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,220,34,221,22, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,340,360,335,363, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,335,363,331,365, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,331,365,326,366, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,326,366,304,366, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,304,355,304,366, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,395,288,400,288, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,404,288,400,288, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,409,290,404,288, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,413,292,409,290, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,418,297,413,292, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,421,302,418,297, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,422,309,421,302, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,421,318,422,309, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,421,318,417,325, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,417,325,411,330, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,411,330,405,332, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,405,332,397,333, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,397,333,344,333, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,344,333,340,334, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,340,334,336,336, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,336,336,335,338, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,335,338,332,342, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,331,347,332,342, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,332,351,331,347, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,334,354,332,351, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,336,357,334,354, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,341,359,336,357, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,341,359,340,360, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,395,288,395,278, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,304,355,258,355, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,347,80,344,76, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,344,76,337,70, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,349,82,347,80, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,351,84,349,82, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,353,85,351,84, 'fill'=>outline, 'tags'=>['floor1','bg']) -end - -# floor2_bg2 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the background information for the first -# floor. -# -# Arguments: -# w - The canvas window. -# fill - Fill color to use for the floor's background. -# outline - Color to use for the floor's outline. - -def floor2_bg2(w,fill,outline) - w.create(TkcPolygon,559,129,484,129,484,162,398,162,398,129,315,129, - 315,133,176,133,176,129,96,129,96,133,3,133,3,339,0,339,0,391, - 60,391,60,387,258,387,258,329,350,329,350,311,395,311,395,280, - 484,280,484,311,508,311,508,327,558,327,558,391,644,391,644, - 367,802,367,802,129,725,129,725,133,559,133,559,129, - 'tags'=>['floor2','bg'], 'fill'=>fill) - w.create(TkcLine,350,311,350,329, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,398,129,398,162, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,802,367,802,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,802,129,725,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,725,133,725,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,559,129,559,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,559,133,725,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,484,162,484,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,559,129,484,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,802,367,644,367, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,644,367,644,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,644,391,558,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,558,327,558,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,558,327,508,327, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,508,327,508,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,484,311,508,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,484,280,484,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,398,162,484,162, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,484,280,395,280, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,395,280,395,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,258,387,60,387, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,3,133,3,339, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,3,339,0,339, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,60,391,0,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,0,339,0,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,60,387,60,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,258,329,258,387, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,350,329,258,329, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,395,311,350,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,398,129,315,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,176,133,315,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,176,129,96,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,3,133,96,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,315,133,315,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,176,133,176,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,96,133,96,129, 'fill'=>outline, 'tags'=>['floor2','bg']) -end - -# floor2_bg3 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the background information for the first -# floor. -# -# Arguments: -# w - The canvas window. -# fill - Fill color to use for the floor's background. -# outline - Color to use for the floor's outline. - -def floor2_bg3(w,fill,outline) - w.create(TkcPolygon,159,300,107,300,107,248,159,248,159,129,96,129,96, - 133,21,133,21,331,0,331,0,391,60,391,60,370,159,370,159,300, - 'tags'=>['floor3','bg'], 'fill'=>fill) - w.create(TkcPolygon,258,370,258,329,350,329,350,311,399,311,399,129, - 315,129,315,133,176,133,176,129,159,129,159,370,258,370, - 'tags'=>['floor3','bg'], 'fill'=>fill) - w.create(TkcLine,96,133,96,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,176,129,96,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,176,129,176,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,315,133,176,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,315,133,315,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,399,129,315,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,399,311,399,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,399,311,350,311, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,350,329,350,311, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,350,329,258,329, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,258,370,258,329, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,60,370,258,370, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,60,370,60,391, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,60,391,0,391, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,0,391,0,331, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,21,331,0,331, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,21,331,21,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,96,133,21,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,107,300,159,300,159,248,107,248,107,300, - 'fill'=>outline, 'tags'=>['floor3','bg']) -end - -# floor2_fg1 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the foreground information for the first -# floor (office outlines and numbers). -# -# Arguments: -# w - The canvas window. -# color - Color to use for drawing foreground information. - -def floor2_fg1(w,color) - i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '101' - $floorItems2['101'] = i - w.create(TkcText,358,209, 'text'=>'101', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Pub Lift1' - $floorItems2['Pub Lift1'] = i - w.create(TkcText,323,223, 'text'=>'Pub Lift1', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Priv Lift1' - $floorItems2['Priv Lift1'] = i - w.create(TkcText,323,188, 'text'=>'Priv Lift1', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,42,389,42,337,1,337,1,389, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '110' - $floorItems2['110'] = i - w.create(TkcText,21.5,363, 'text'=>'110', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,59,389,59,385,90,385,90,337,44,337,44,389, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '109' - $floorItems2['109'] = i - w.create(TkcText,67,363, 'text'=>'109', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,51,300,51,253,6,253,6,300, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '111' - $floorItems2['111'] = i - w.create(TkcText,28.5,276.5, 'text'=>'111', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,98,248,98,309,79,309,79,248, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '117B' - $floorItems2['117B'] = i - w.create(TkcText,88.5,278.5, 'text'=>'117B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,51,251,51,204,6,204,6,251, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '112' - $floorItems2['112'] = i - w.create(TkcText,28.5,227.5, 'text'=>'112', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,6,156,51,156,51,203,6,203, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '113' - $floorItems2['113'] = i - w.create(TkcText,28.5,179.5, 'text'=>'113', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,85,169,79,169,79,192,85,192, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '117A' - $floorItems2['117A'] = i - w.create(TkcText,82,180.5, 'text'=>'117A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,77,302,77,168,53,168,53,302, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '117' - $floorItems2['117'] = i - w.create(TkcText,65,235, 'text'=>'117', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,51,155,51,115,6,115,6,155, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '114' - $floorItems2['114'] = i - w.create(TkcText,28.5,135, 'text'=>'114', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,95,115,53,115,53,168,95,168, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '115' - $floorItems2['115'] = i - w.create(TkcText,74,141.5, 'text'=>'115', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,87,113,87,27,10,27,10,113, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '116' - $floorItems2['116'] = i - w.create(TkcText,48.5,70, 'text'=>'116', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,89,91,128,91,128,113,89,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '118' - $floorItems2['118'] = i - w.create(TkcText,108.5,102, 'text'=>'118', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,178,128,178,132,216,132,216,91, - 163,91,163,112,149,112,149,128, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '120' - $floorItems2['120'] = i - w.create(TkcText,189.5,111.5, 'text'=>'120', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,79,193,87,193,87,169,136,169,136,192, - 156,192,156,169,175,169,175,246,79,246, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '122' - $floorItems2['122'] = i - w.create(TkcText,131,207.5, 'text'=>'122', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,138,169,154,169,154,191,138,191, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '121' - $floorItems2['121'] = i - w.create(TkcText,146,180, 'text'=>'121', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,99,300,126,300,126,309,99,309, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '106A' - $floorItems2['106A'] = i - w.create(TkcText,112.5,304.5, 'text'=>'106A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,128,299,128,309,150,309,150,248,99,248,99,299, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '105' - $floorItems2['105'] = i - w.create(TkcText,124.5,278.5, 'text'=>'105', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,174,309,174,300,152,300,152,309, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '106B' - $floorItems2['106B'] = i - w.create(TkcText,163,304.5, 'text'=>'106B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,176,299,176,309,216,309,216,248,152,248,152,299, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '104' - $floorItems2['104'] = i - w.create(TkcText,184,278.5, 'text'=>'104', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,138,385,138,337,91,337,91,385, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '108' - $floorItems2['108'] = i - w.create(TkcText,114.5,361, 'text'=>'108', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,256,337,140,337,140,385,256,385, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '107' - $floorItems2['107'] = i - w.create(TkcText,198,361, 'text'=>'107', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,300,353,300,329,260,329,260,353, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Smoking' - $floorItems2['Smoking'] = i - w.create(TkcText,280,341, 'text'=>'Smoking', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,314,135,314,170,306,170,306,246,177,246,177,135, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '123' - $floorItems2['123'] = i - w.create(TkcText,245.5,190.5, 'text'=>'123', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,217,248,301,248,301,326,257,326,257,310,217,310, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '103' - $floorItems2['103'] = i - w.create(TkcText,259,287, 'text'=>'103', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,396,188,377,188,377,169,316,169,316,131,396,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '124' - $floorItems2['124'] = i - w.create(TkcText,356,150, 'text'=>'124', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,397,226,407,226,407,189,377,189,377,246,397,246, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '125' - $floorItems2['125'] = i - w.create(TkcText,392,217.5, 'text'=>'125', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,399,187,409,187,409,207,474,207,474,164,399,164, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '126' - $floorItems2['126'] = i - w.create(TkcText,436.5,185.5, 'text'=>'126', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,409,209,409,229,399,229,399,253, - 486,253,486,239,474,239,474,209, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '127' - $floorItems2['127'] = i - w.create(TkcText,436.5,'231', 'text'=>'127', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,501,164,501,174,495,174,495,188, - 490,188,490,204,476,204,476,164, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'MShower' - $floorItems2['MShower'] = i - w.create(TkcText,488.5,'184', 'text'=>'MShower', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,497,176,513,176,513,204,492,204,492,190,497,190, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Closet' - $floorItems2['Closet'] = i - w.create(TkcText,502.5,190, 'text'=>'Closet', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,476,237,476,206,513,206,513,254,488,254,488,237, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'WShower' - $floorItems2['WShower'] = i - w.create(TkcText,494.5,230, 'text'=>'WShower', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,486,131,558,131,558,135,724,135,724,166, - 697,166,697,275,553,275,531,254,515,254, - 515,174,503,174,503,161,486,161, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '130' - $floorItems2['130'] = i - w.create(TkcText,638.5,205, 'text'=>'130', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,308,242,339,242,339,248,342,248, - 342,246,397,246,397,276,393,276, - 393,309,300,309,300,248,308,248, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '102' - $floorItems2['102'] = i - w.create(TkcText,367.5,278.5, 'text'=>'102', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,397,255,486,255,486,276,397,276, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '128' - $floorItems2['128'] = i - w.create(TkcText,441.5,265.5, 'text'=>'128', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,510,309,486,309,486,255,530,255, - 552,277,561,277,561,325,510,325, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '129' - $floorItems2['129'] = i - w.create(TkcText,535.5,293, 'text'=>'129', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,696,281,740,281,740,387,642,387, - 642,389,561,389,561,277,696,277, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '133' - $floorItems2['133'] = i - w.create(TkcText,628.5,335, 'text'=>'133', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,742,387,742,281,800,281,800,387, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '132' - $floorItems2['132'] = i - w.create(TkcText,771,334, 'text'=>'132', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,800,168,800,280,699,280,699,168, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '134' - $floorItems2['134'] = i - w.create(TkcText,749.5,224, 'text'=>'134', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,726,131,726,166,800,166,800,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '135' - $floorItems2['135'] = i - w.create(TkcText,763,148.5, 'text'=>'135', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,340,360,335,363,331,365,326,366,304,366, - 304,312,396,312,396,288,400,288,404,288, - 409,290,413,292,418,297,421,302,422,309, - 421,318,417,325,411,330,405,332,397,333, - 344,333,340,334,336,336,335,338,332,342, - 331,347,332,351,334,354,336,357,341,359, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Ramona Stair' - $floorItems2['Ramona Stair'] = i - w.create(TkcText,368,323, 'text'=>'Ramona Stair', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,30,23,30,5,93,5,98,5,104,7,110,10,116,16,119,20, - 122,28,123,32,123,68,220,68,220,87,90,87,90,23, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'University Stair' - $floorItems2['University Stair'] = i - w.create(TkcText,155,77.5, 'text'=>'University Stair', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,282,37,295,40,312,49,323,56,337,70,352,56, - 358,48,363,39,365,29,348,25,335,22,321,14, - 300,5,283,1,260,0,246,0,242,2,236,4,231,8, - 227,13,223,17,221,22,220,34,260,34, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Plaza Stair' - $floorItems2['Plaza Stair'] = i - w.create(TkcText,317.5,28.5, 'text'=>'Plaza Stair', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,220,34,260,34,282,37,295,40,312,49, - 323,56,337,70,350,83,365,94,377,100, - 386,104,386,128,220,128, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Plaza Deck' - $floorItems2['Plaza Deck'] = i - w.create(TkcText,303,81, 'text'=>'Plaza Deck', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,257,336,77,336,6,336,6,301,77,301,77,310,257,310, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '106' - $floorItems2['106'] = i - w.create(TkcText,131.5,318.5, 'text'=>'106', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,146,110,162,110,162,91,130,91,130,115,95,115, - 95,128,114,128,114,151,157,151,157,153,112,153, - 112,130,97,130,97,168,175,168,175,131,146,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '119' - $floorItems2['119'] = i - w.create(TkcText,143.5,133, 'text'=>'119', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - w.create(TkcLine,155,191,155,189, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,155,177,155,169, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,96,129,96,169, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,78,169,176,169, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,176,247,176,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,340,206,307,206, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,340,187,340,170, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,340,210,340,201, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,340,247,340,224, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,340,241,307,241, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,376,246,376,170, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,307,247,307,170, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,376,170,307,170, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,315,129,315,170, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,147,129,176,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,202,133,176,133, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,398,129,315,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,258,352,258,387, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,60,387,60,391, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,0,337,0,391, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,60,391,0,391, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,3,114,3,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,258,387,60,387, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,237,52,273, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,189,52,225, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,140,52,177, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,395,306,395,311, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,531,254,398,254, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,475,178,475,238, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,502,162,398,162, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,398,129,398,188, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,383,188,376,188, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,408,188,408,194, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,398,227,398,254, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,408,227,398,227, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,408,222,408,227, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,408,206,408,210, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,408,208,475,208, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,484,278,484,311, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,484,311,508,311, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,508,327,508,311, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,559,327,508,327, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,644,391,559,391, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,644,389,644,391, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,514,205,475,205, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,496,189,496,187, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,559,129,484,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,484,162,484,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,725,133,559,133, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,559,129,559,133, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,725,149,725,167, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,725,129,802,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,802,389,802,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,739,167,802,167, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,396,188,408,188, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,0,337,9,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,58,337,21,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,43,391,43,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,105,337,75,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,91,387,91,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,154,337,117,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,139,387,139,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,227,337,166,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,258,337,251,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,258,328,302,328, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,302,355,302,311, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,395,311,302,311, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,484,278,395,278, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,395,294,395,278, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,473,278,473,275, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,473,256,473,254, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,533,257,531,254, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,553,276,551,274, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,698,276,553,276, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,559,391,559,327, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,802,389,644,389, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,741,314,741,389, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,698,280,698,167, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,707,280,698,280, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,802,280,731,280, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,741,280,741,302, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,698,167,727,167, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,725,137,725,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,514,254,514,175, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,496,175,514,175, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,502,175,502,162, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,475,166,475,162, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,496,176,496,175, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,491,189,496,189, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,491,205,491,189, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,487,238,475,238, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,487,240,487,238, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,487,252,487,254, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,315,133,304,133, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,256,133,280,133, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,78,247,270,247, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,307,247,294,247, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,214,133,232,133, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,217,247,217,266, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,217,309,217,291, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,217,309,172,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,154,309,148,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,175,300,175,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,151,300,175,300, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,151,247,151,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,78,237,78,265, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,78,286,78,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,106,309,78,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,130,309,125,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,99,309,99,247, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,127,299,99,299, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,127,309,127,299, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,155,191,137,191, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,137,169,137,191, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,78,171,78,169, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,78,190,78,218, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,86,192,86,169, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,86,192,78,192, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,301,3,301, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,286,52,301, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,252,3,252, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,203,3,203, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,3,156,52,156, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,8,25,8,114, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,63,114,3,114, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,75,114,97,114, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,108,114,129,114, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,129,114,129,89, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,114,52,128, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,132,89,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,88,25,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,88,114,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,218,89,144,89, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,147,111,147,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,162,111,147,111, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,162,109,162,111, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,162,96,162,89, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,218,89,218,94, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,218,89,218,119, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,8,25,88,25, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,258,337,258,328, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,113,129,96,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,302,355,258,355, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,386,104,386,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,377,100,386,104, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,365,94,377,100, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,350,83,365,94, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,337,70,350,83, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,337,70,323,56, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,312,49,323,56, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,295,40,312,49, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,282,37,295,40, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,260,34,282,37, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,253,34,260,34, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,386,128,386,104, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,113,152,156,152, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,113,152,156,152, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,113,152,113,129, 'fill'=>color, 'tags'=>['floor1','wall']) -end - -# floor2_fg2 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the foreground information for the second -# floor (office outlines and numbers). -# -# Arguments: -# w - The canvas window. -# color - Color to use for drawing foreground information. - -def floor2_fg2(w,color) - i = TkcPolygon.new(w,748,188,755,188,755,205,758,205,758,222, - 800,222,800,168,748,168, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '238' - $floorItems2['238'] = i - w.create(TkcText,774,195, 'text'=>'238', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,726,188,746,188,746,166,800,166,800,131,726,131, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '237' - $floorItems2['237'] = i - w.create(TkcText,763,148.5, 'text'=>'237', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,497,187,497,204,559,204,559,324,641,324, - 643,324,643,291,641,291,641,205,696,205, - 696,291,694,291,694,314,715,314,715,291, - 715,205,755,205,755,190,724,190,724,187, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '246' - $floorItems2['246'] = i - w.create(TkcText,600,264, 'text'=>'246', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,694,279,643,279,643,314,694,314, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '247' - $floorItems2['247'] = i - w.create(TkcText,668.5,296.5, 'text'=>'247', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,232,250,308,250,308,242,339,242,339,246, - 397,246,397,255,476,255,476,250,482,250,559,250, - 559,274,482,274,482,278,396,278,396,274,232,274, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '202' - $floorItems2['202'] = i - w.create(TkcText,285.5,260, 'text'=>'202', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,53,228,53,338,176,338,233,338,233,196, - 306,196,306,180,175,180,175,169,156,169, - 156,196,176,196,176,228, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '206' - $floorItems2['206'] = i - w.create(TkcText,143,267, 'text'=>'206', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,277,6,277,6,338,51,338, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '212' - $floorItems2['212'] = i - w.create(TkcText,28.5,307.5, 'text'=>'212', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,557,276,486,276,486,309,510,309,510,325,557,325, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '245' - $floorItems2['245'] = i - w.create(TkcText,521.5,300.5, 'text'=>'245', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,560,389,599,389,599,326,560,326, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '244' - $floorItems2['244'] = i - w.create(TkcText,579.5,357.5, 'text'=>'244', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,601,389,601,326,643,326,643,389, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '243' - $floorItems2['243'] = i - w.create(TkcText,622,357.5, 'text'=>'243', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,688,316,645,316,645,365,688,365, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '242' - $floorItems2['242'] = i - w.create(TkcText,666.5,340.5, 'text'=>'242', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,802,367,759,367,759,226,802,226, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = 'Barbecue Deck' - $floorItems2['Barbecue Deck'] = i - w.create(TkcText,780.5,296.5, 'text'=>'Barbecue Deck', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,755,262,755,314,717,314,717,262, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '240' - $floorItems2['240'] = i - w.create(TkcText,736,288, 'text'=>'240', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,755,316,689,316,689,365,755,365, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '241' - $floorItems2['241'] = i - w.create(TkcText,722,340.5, 'text'=>'241', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,755,206,717,206,717,261,755,261, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '239' - $floorItems2['239'] = i - w.create(TkcText,736,233.5, 'text'=>'239', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,695,277,643,277,643,206,695,206, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '248' - $floorItems2['248'] = i - w.create(TkcText,669,241.5, 'text'=>'248', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,676,135,676,185,724,185,724,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '236' - $floorItems2['236'] = i - w.create(TkcText,700,160, 'text'=>'236', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,675,135,635,135,635,145,628,145,628,185,675,185, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '235' - $floorItems2['235'] = i - w.create(TkcText,651.5,160, 'text'=>'235', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,626,143,633,143,633,135,572,135, - 572,143,579,143,579,185,626,185, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '234' - $floorItems2['234'] = i - w.create(TkcText,606,160, 'text'=>'234', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,557,135,571,135,571,145,578,145, - 578,185,527,185,527,131,557,131, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '233' - $floorItems2['233'] = i - w.create(TkcText,552.5,158, 'text'=>'233', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,476,249,557,249,557,205,476,205, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '230' - $floorItems2['230'] = i - w.create(TkcText,516.5,227, 'text'=>'230', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,476,164,486,164,486,131,525,131,525,185,476,185, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '232' - $floorItems2['232'] = i - w.create(TkcText,500.5,158, 'text'=>'232', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,476,186,495,186,495,204,476,204, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '229' - $floorItems2['229'] = i - w.create(TkcText,485.5,195, 'text'=>'229', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,474,207,409,207,409,187,399,187,399,164,474,164, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '227' - $floorItems2['227'] = i - w.create(TkcText,436.5,185.5, 'text'=>'227', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,399,228,399,253,474,253,474,209,409,209,409,228, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '228' - $floorItems2['228'] = i - w.create(TkcText,436.5,231, 'text'=>'228', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,397,246,397,226,407,226,407,189,377,189,377,246, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '226' - $floorItems2['226'] = i - w.create(TkcText,392,217.5, 'text'=>'226', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,377,169,316,169,316,131,397,131,397,188,377,188, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '225' - $floorItems2['225'] = i - w.create(TkcText,356.5,150, 'text'=>'225', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,234,198,306,198,306,249,234,249, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '224' - $floorItems2['224'] = i - w.create(TkcText,270,223.5, 'text'=>'224', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,270,179,306,179,306,170,314,170,314,135,270,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '223' - $floorItems2['223'] = i - w.create(TkcText,292,157, 'text'=>'223', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,268,179,221,179,221,135,268,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '222' - $floorItems2['222'] = i - w.create(TkcText,244.5,157, 'text'=>'222', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,177,179,219,179,219,135,177,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '221' - $floorItems2['221'] = i - w.create(TkcText,198,157, 'text'=>'221', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,299,327,349,327,349,284,341,284,341,276,299,276, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '204' - $floorItems2['204'] = i - w.create(TkcText,324,301.5, 'text'=>'204', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,234,276,297,276,297,327,257,327,257,338,234,338, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '205' - $floorItems2['205'] = i - w.create(TkcText,265.5,307, 'text'=>'205', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,256,385,256,340,212,340,212,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '207' - $floorItems2['207'] = i - w.create(TkcText,234,362.5, 'text'=>'207', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,210,340,164,340,164,385,210,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '208' - $floorItems2['208'] = i - w.create(TkcText,187,362.5, 'text'=>'208', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,115,340,162,340,162,385,115,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '209' - $floorItems2['209'] = i - w.create(TkcText,138.5,362.5, 'text'=>'209', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,89,228,89,156,53,156,53,228, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '217' - $floorItems2['217'] = i - w.create(TkcText,71,192, 'text'=>'217', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,89,169,97,169,97,190,89,190, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '217A' - $floorItems2['217A'] = i - w.create(TkcText,93,179.5, 'text'=>'217A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,89,156,89,168,95,168,95,135,53,135,53,156, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '216' - $floorItems2['216'] = i - w.create(TkcText,71,145.5, 'text'=>'216', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,179,51,135,6,135,6,179, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '215' - $floorItems2['215'] = i - w.create(TkcText,28.5,157, 'text'=>'215', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,227,6,227,6,180,51,180, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '214' - $floorItems2['214'] = i - w.create(TkcText,28.5,203.5, 'text'=>'214', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,275,6,275,6,229,51,229, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '213' - $floorItems2['213'] = i - w.create(TkcText,28.5,252, 'text'=>'213', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,114,340,67,340,67,385,114,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '210' - $floorItems2['210'] = i - w.create(TkcText,90.5,362.5, 'text'=>'210', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,59,389,59,385,65,385,65,340,1,340,1,389, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '211' - $floorItems2['211'] = i - w.create(TkcText,33,364.5, 'text'=>'211', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,393,309,350,309,350,282,342,282,342,276,393,276, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '203' - $floorItems2['203'] = i - w.create(TkcText,367.5,292.5, 'text'=>'203', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,99,191,91,191,91,226,174,226,174,198, - 154,198,154,192,109,192,109,169,99,169, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '220' - $floorItems2['220'] = i - w.create(TkcText,132.5,208.5, 'text'=>'220', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = 'Priv Lift2' - $floorItems2['Priv Lift2'] = i - w.create(TkcText,323,188, 'text'=>'Priv Lift2', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = 'Pub Lift 2' - $floorItems2['Pub Lift 2'] = i - w.create(TkcText,323,223, 'text'=>'Pub Lift 2', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '218' - $floorItems2['218'] = i - w.create(TkcText,136,149.5, 'text'=>'218', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '219' - $floorItems2['219'] = i - w.create(TkcText,132.5,180, 'text'=>'219', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '201' - $floorItems2['201'] = i - w.create(TkcText,358,209, 'text'=>'201', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - w.create(TkcLine,641,186,678,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,350,757,367, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,634,133,634,144, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,634,144,627,144, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,572,133,572,144, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,572,144,579,144, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,398,129,398,162, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,174,197,175,197, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,175,197,175,227, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,206,757,221, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,396,188,408,188, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,727,189,725,189, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,747,167,802,167, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,747,167,747,189, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,755,189,739,189, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,769,224,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,802,224,802,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,802,129,725,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,725,189,725,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,725,186,690,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,676,133,676,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,627,144,627,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,629,186,593,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,579,144,579,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,559,129,559,133, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,725,133,559,133, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,484,162,484,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,559,129,484,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,526,129,526,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,540,186,581,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,528,186,523,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,511,186,475,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,496,190,496,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,496,205,496,202, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,475,205,527,205, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,205,539,205, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,205,558,249, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,249,475,249, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,662,206,642,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,695,206,675,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,695,278,642,278, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,642,291,642,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,695,291,695,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,716,208,716,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,206,716,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,221,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,793,224,802,224, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,262,716,262, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,716,220,716,264, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,716,315,716,276, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,315,703,315, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,325,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,367,644,367, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,689,367,689,315, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,647,315,644,315, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,659,315,691,315, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,600,325,600,391, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,627,325,644,325, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,644,391,644,315, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,615,325,575,325, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,644,391,558,391, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,563,325,558,325, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,391,558,314, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,327,508,327, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,275,484,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,302,558,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,508,327,508,311, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,484,311,508,311, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,484,275,484,311, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,475,208,408,208, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,408,206,408,210, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,408,222,408,227, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,408,227,398,227, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,398,227,398,254, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,408,188,408,194, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,383,188,376,188, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,398,188,398,162, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,398,162,484,162, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,475,162,475,254, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,398,254,475,254, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,484,280,395,280, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,395,311,395,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,307,197,293,197, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,278,197,233,197, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,233,197,233,249, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,307,179,284,179, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,233,249,278,249, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,269,179,269,133, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,220,179,220,133, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,155,191,110,191, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,90,190,98,190, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,98,169,98,190, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,133,52,165, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,214,52,177, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,226,52,262, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,274,52,276, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,234,275,234,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,226,339,258,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,211,387,211,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,214,339,177,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,258,387,60,387, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,3,133,3,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,165,339,129,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,117,339,80,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,68,339,59,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,0,339,46,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,60,391,0,391, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,0,339,0,391, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,60,387,60,391, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,258,329,258,387, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,350,329,258,329, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,395,311,350,311, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,398,129,315,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,176,133,315,133, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,176,129,96,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,3,133,96,133, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,66,387,66,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,115,387,115,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,163,387,163,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,234,275,276,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,288,275,309,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,298,275,298,329, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,341,283,350,283, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,321,275,341,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,375,275,395,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,315,129,315,170, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,376,170,307,170, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,307,250,307,170, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,376,245,376,170, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,340,241,307,241, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,340,245,340,224, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,340,210,340,201, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,340,187,340,170, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,340,206,307,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,293,250,307,250, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,271,179,238,179, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,226,179,195,179, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,176,129,176,179, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,182,179,176,179, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,174,169,176,169, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,162,169,90,169, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,96,169,96,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,175,227,90,227, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,90,190,90,227, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,179,3,179, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,228,3,228, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,276,3,276, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,155,177,155,169, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,110,191,110,169, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,155,189,155,197, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,350,283,350,329, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,162,197,155,197, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,341,275,341,283, 'fill'=>color, 'tags'=>['floor2','wall']) -end - -# floor2_fg3 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the foreground information for the third -# floor (office outlines and numbers). -# -# Arguments: -# w - The canvas window. -# color - Color to use for drawing foreground information. - -def floor2_fg3(w,color) - i = TkcPolygon.new(w,89,228,89,180,70,180,70,228, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '316' - $floorItems2['316'] = i - w.create(TkcText,79.5,204, 'text'=>'316', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,115,368,162,368,162,323,115,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '309' - $floorItems2['309'] = i - w.create(TkcText,138.5,345.5, 'text'=>'309', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,164,323,164,368,211,368,211,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '308' - $floorItems2['308'] = i - w.create(TkcText,187.5,345.5, 'text'=>'308', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,256,368,212,368,212,323,256,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '307' - $floorItems2['307'] = i - w.create(TkcText,234,345.5, 'text'=>'307', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,244,276,297,276,297,327,260,327,260,321,244,321, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '305' - $floorItems2['305'] = i - w.create(TkcText,270.5,301.5, 'text'=>'305', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,251,219,251,203,244,203,244,219, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '324B' - $floorItems2['324B'] = i - w.create(TkcText,247.5,211, 'text'=>'324B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,251,249,244,249,244,232,251,232, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '324A' - $floorItems2['324A'] = i - w.create(TkcText,247.5,240.5, 'text'=>'324A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,223,135,223,179,177,179,177,135, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '320' - $floorItems2['320'] = i - w.create(TkcText,200,157, 'text'=>'320', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,114,368,114,323,67,323,67,368, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '310' - $floorItems2['310'] = i - w.create(TkcText,90.5,345.5, 'text'=>'310', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,23,277,23,321,68,321,68,277, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '312' - $floorItems2['312'] = i - w.create(TkcText,45.5,299, 'text'=>'312', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,23,229,68,229,68,275,23,275, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '313' - $floorItems2['313'] = i - w.create(TkcText,45.5,252, 'text'=>'313', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,68,227,23,227,23,180,68,180, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '314' - $floorItems2['314'] = i - w.create(TkcText,40.5,203.5, 'text'=>'314', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,95,179,95,135,23,135,23,179, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '315' - $floorItems2['315'] = i - w.create(TkcText,59,157, 'text'=>'315', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,99,226,99,204,91,204,91,226, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '316B' - $floorItems2['316B'] = i - w.create(TkcText,95,215, 'text'=>'316B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,91,202,99,202,99,180,91,180, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '316A' - $floorItems2['316A'] = i - w.create(TkcText,95,191, 'text'=>'316A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,97,169,109,169,109,192,154,192,154,198, - 174,198,174,226,101,226,101,179,97,179, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '319' - $floorItems2['319'] = i - w.create(TkcText,141.5,209, 'text'=>'319', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,65,368,58,368,58,389,1,389,1,333,23,333,23,323,65,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '311' - $floorItems2['311'] = i - w.create(TkcText,29.5,361, 'text'=>'311', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '318' - $floorItems2['318'] = i - w.create(TkcText,132.5,180, 'text'=>'318', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '317' - $floorItems2['317'] = i - w.create(TkcText,136,149.5, 'text'=>'317', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,274,194,274,221,306,221,306,194, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '323' - $floorItems2['323'] = i - w.create(TkcText,290,207.5, 'text'=>'323', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,306,222,274,222,274,249,306,249, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '325' - $floorItems2['325'] = i - w.create(TkcText,290,235.5, 'text'=>'325', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,263,179,224,179,224,135,263,135, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '321' - $floorItems2['321'] = i - w.create(TkcText,243.5,157, 'text'=>'321', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,314,169,306,169,306,192,273,192, - 264,181,264,135,314,135, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '322' - $floorItems2['322'] = i - w.create(TkcText,293.5,163.5, 'text'=>'322', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = 'Pub Lift3' - $floorItems2['Pub Lift3'] = i - w.create(TkcText,323,223, 'text'=>'Pub Lift3', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = 'Priv Lift3' - $floorItems2['Priv Lift3'] = i - w.create(TkcText,323,188, 'text'=>'Priv Lift3', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,350,284,376,284,376,276,397,276,397,309,350,309, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '303' - $floorItems2['303'] = i - w.create(TkcText,373.5,292.5, 'text'=>'303', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,272,203,272,249,252,249,252,230, - 244,230,244,221,252,221,252,203, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '324' - $floorItems2['324'] = i - w.create(TkcText,262,226, 'text'=>'324', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,299,276,299,327,349,327,349,284,341,284,341,276, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '304' - $floorItems2['304'] = i - w.create(TkcText,324,301.5, 'text'=>'304', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '301' - $floorItems2['301'] = i - w.create(TkcText,358,209, 'text'=>'301', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,397,246,377,246,377,185,397,185, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '327' - $floorItems2['327'] = i - w.create(TkcText,387,215.5, 'text'=>'327', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,316,131,316,169,377,169,377,185,397,185,397,131, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '326' - $floorItems2['326'] = i - w.create(TkcText,365.5,150, 'text'=>'326', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,308,251,242,251,242,274,342,274,342,282,375, 282, - 375,274,397,274,397,248,339,248,339,242,308,242, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '302' - $floorItems2['302'] = i - w.create(TkcText,319.5,261, 'text'=>'302', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,70,321,242,321,242,200,259,200,259,203,272,203, - 272,193,263,180,242,180,175,180,175,169,156,169, - 156,196,177,196,177,228,107,228,70,228,70,275,107,275, - 107,248,160,248,160,301,107,301,107,275,70,275, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '306' - $floorItems2['306'] = i - w.create(TkcText,200.5,284.5, 'text'=>'306', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - w.create(TkcLine,341,275,341,283, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,162,197,155,197, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,396,247,399,247, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,399,129,399,311, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,258,202,243,202, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,350,283,350,329, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,251,231,243,231, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,243,220,251,220, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,243,250,243,202, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,155,197,155,190, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,110,192,110,169, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,155,192,110,192, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,155,177,155,169, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,176,197,176,227, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,69,280,69,274, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,21,276,69,276, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,69,262,69,226, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,21,228,69,228, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,21,179,75,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,69,179,69,214, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,90,220,90,227, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,90,204,90,202, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,90,203,100,203, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,90,187,90,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,90,227,176,227, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,100,179,100,227, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,100,179,87,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,96,179,96,129, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,162,169,96,169, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,173,169,176,169, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,182,179,176,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,176,129,176,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,195,179,226,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,224,133,224,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,264,179,264,133, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,238,179,264,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,207,273,193, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,235,273,250, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,224,273,219, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,193,307,193, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,222,307,222, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,250,307,250, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,384,247,376,247, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,340,206,307,206, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,340,187,340,170, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,340,210,340,201, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,340,247,340,224, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,340,241,307,241, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,376,247,376,170, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,307,250,307,170, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,376,170,307,170, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,315,129,315,170, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,376,283,366,283, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,376,283,376,275, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,399,275,376,275, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,341,275,320,275, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,341,283,350,283, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,298,275,298,329, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,308,275,298,275, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,243,322,243,275, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,243,275,284,275, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,258,322,226,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,212,370,212,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,214,322,177,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,163,370,163,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,165,322,129,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,84,322,117,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,71,322,64,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,115,322,115,370, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,66,322,66,370, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,52,322,21,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,21,331,0,331, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,21,331,21,133, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,96,133,21,133, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,176,129,96,129, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,315,133,176,133, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,315,129,399,129, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,399,311,350,311, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,350,329,258,329, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,258,322,258,370, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,60,370,258,370, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,60,370,60,391, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,0,391,0,331, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,60,391,0,391, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,307,250,307,242, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,250,307,250, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,258,250,243,250, 'fill'=>color, 'tags'=>['floor3','wall']) -end - -# Below is the "main program" that creates the floorplan demonstration. - -# toplevel widget -if defined?($floor2_demo) && $floor2_demo - $floor2_demo.destroy - $floor2_demo = nil -end - -# demo toplevel widget -$floor2_demo = TkToplevel.new {|w| - title("Floorplan Canvas Demonstration 2") - iconname("Floorplan2") - positionWindow(w) - geometry('+20+20') - minsize(100,100) -} - -base_frame = TkFrame.new($floor2_demo).pack(:fill=>:both, :expand=>true) - -# label -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'8i', 'justify'=>'left', - 'text'=>"This window contains a canvas widget showing the floorplan of Digital Equipment Corporation's Western Research Laboratory. It has three levels. At any given time one of the levels is active, meaning that you can see its room structure. To activate a level, click the left mouse button anywhere on it. As the mouse moves over the active level, the room under the mouse lights up and its room number appears in the \"Room:\" entry. You can also type a room number in the entry and the room will light up."){ - pack('side'=>'top') -} - -# frame -$floor2_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $floor2_demo - $floor2_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'floor2'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$floor2_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# -$floorLabels2 = {} -$floorItems2 = {} - -# canvas -if $tk_version =~ /^4\.[01]/ - $floor2_canvas_frame = TkFrame.new(base_frame,'bd'=>2,'relief'=>'sunken', - 'highlightthickness'=>2) - $floor2_canvas = TkCanvas.new($floor2_canvas_frame, - 'width'=>900, 'height'=>500, 'borderwidth'=>0, - 'highlightthickness'=>0) {|c| - TkScrollbar.new(base_frame, 'orient'=>'horiz', - 'command'=>proc{|*args| c.xview(*args)}){|hs| - c.xscrollcommand(proc{|first,last| hs.set first,last}) - pack('side'=>'bottom', 'fill'=>'x') - } - TkScrollbar.new(base_frame, 'command'=>proc{|*args| c.yview(*args)}){|vs| - c.yscrollcommand(proc{|first,last| vs.set first,last}) - pack('side'=>'right', 'fill'=>'y') - } - } - $floor2_canvas_frame.pack('side'=>'top','fill'=>'both', 'expand'=>'yes') - $floor2_canvas.pack('expand'=>'yes', 'fill'=>'both') - -else - TkFrame.new(base_frame) {|f| - pack('side'=>'top', 'fill'=>'both', 'expand'=>'yes') - - h = TkScrollbar.new(f, 'highlightthickness'=>0, 'orient'=>'horizontal') - v = TkScrollbar.new(f, 'highlightthickness'=>0, 'orient'=>'vertical') - - TkFrame.new(f, 'bd'=>2, 'relief'=>'sunken') {|f1| - $floor2_canvas = TkCanvas.new(f1, 'width'=>900, 'height'=>500, - 'borderwidth'=>0, - 'highlightthickness'=>0) { - xscrollcommand(proc{|first,last| h.set first,last}) - yscrollcommand(proc{|first,last| v.set first,last}) - pack('expand'=>'yes', 'fill'=>'both') - } - grid('padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - } - - v.grid('padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>1, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - h.grid('padx'=>1, 'pady'=>1, 'row'=>1, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - - TkGrid.rowconfigure(f, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure(f, 0, 'weight'=>1, 'minsize'=>0) - - pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>1) - - v.command(proc{|*args| $floor2_canvas.yview(*args)}) - h.command(proc{|*args| $floor2_canvas.xview(*args)}) - } -end - - -# Create an entry for displaying and typing in current room. - -$currentRoom2 = TkVariable.new -$floor2_entry = TkEntry.new($floor2_canvas, 'width'=>10, 'relief'=>'sunken', - 'bd'=>2, 'textvariable'=>$currentRoom2) - -# Choose colors, then fill in the floorplan. - -$floor2_colors = {} -if TkWinfo.depth($floor2_canvas) > 1 - $floor2_colors['bg1'] = '#a9c1da' - $floor2_colors['outline1'] = '#77889a' - $floor2_colors['bg2'] = '#9ab0c6' - $floor2_colors['outline2'] = '#687786' - $floor2_colors['bg3'] = '#8ba0b3' - $floor2_colors['outline3'] = '#596673' - $floor2_colors['offices'] = 'Black' - $floor2_colors['active'] = '#c4d1df' -else - $floor2_colors['bg1'] = 'white' - $floor2_colors['outline1'] = 'black' - $floor2_colors['bg2'] = 'white' - $floor2_colors['outline2'] = 'black' - $floor2_colors['bg3'] = 'white' - $floor2_colors['outline3'] = 'black' - $floor2_colors['offices'] = 'Black' - $floor2_colors['active'] = 'black' -end - -$activeFloor2 = '' -floorDisplay2 $floor2_canvas,3 - -# Set up event bindings for canvas: - -$floor2_canvas.itembind('floor1', '1', proc{floorDisplay2 $floor2_canvas,1}) -$floor2_canvas.itembind('floor2', '1', proc{floorDisplay2 $floor2_canvas,2}) -$floor2_canvas.itembind('floor3', '1', proc{floorDisplay2 $floor2_canvas,3}) -$floor2_canvas.itembind('room', 'Enter', proc{newRoom2 $floor2_canvas}) -$floor2_canvas.itembind('room', 'Leave', proc{$currentRoom2.value = ''}) -$floor2_canvas.bind('2', proc{|x,y| $floor2_canvas.scan_mark x,y}, '%x %y') -$floor2_canvas.bind('B2-Motion', - proc{|x,y| $floor2_canvas.scan_dragto x,y}, '%x %y') -$floor2_canvas.bind('Destroy', proc{$currentRoom2.unset}) -$currentRoom2.value = '' -$currentRoom2.trace('w',proc{roomChanged2 $floor2_canvas}) diff --git a/ext/tk/sample/demos-en/form.rb b/ext/tk/sample/demos-en/form.rb deleted file mode 100644 index b6c6655083..0000000000 --- a/ext/tk/sample/demos-en/form.rb +++ /dev/null @@ -1,65 +0,0 @@ -# frozen_string_literal: false -# -# form widget demo (called by 'widget') -# - -# toplevel widget -if defined?($form_demo) && $form_demo - $form_demo.destroy - $form_demo = nil -end - -# demo toplevel widget -$form_demo = TkToplevel.new {|w| - title("Form Demonstration") - iconname("form") - positionWindow(w) -} - -base_frame = TkFrame.new($form_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "This window contains a simple form where you can type in the various entries and use tabs to move circularly between the entries." -} -msg.pack('side'=>'top', 'fill'=>'x') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $form_demo - $form_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'form'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# entry -form_data = [] -(1..5).each{|i| - f = TkFrame.new(base_frame, 'bd'=>2) - e = TkEntry.new(f, 'relief'=>'sunken', 'width'=>40) - l = TkLabel.new(f) - e.pack('side'=>'right') - l.pack('side'=>'left') - form_data[i] = {'frame'=>f, 'entry'=>e, 'label'=>l} -} - -# -form_data[1]['label'].text('Name:') -form_data[2]['label'].text('Address:') -form_data[5]['label'].text('Phone:') - -# pack -(1..5).each{|i| form_data[i]['frame'].pack('side'=>'top', 'fill'=>'x')} - diff --git a/ext/tk/sample/demos-en/goldberg.rb b/ext/tk/sample/demos-en/goldberg.rb deleted file mode 100644 index 729cdf0e94..0000000000 --- a/ext/tk/sample/demos-en/goldberg.rb +++ /dev/null @@ -1,2007 +0,0 @@ -# frozen_string_literal: false -# -# Ruby/Tk Goldverg demo (called by 'widget') -# -# Based on Tcl/Tk8.5a2 widget demos. -# The following is the original comment of TkGoldberg.tcl. -# -#>>##+################################################################# -#>># -#>># TkGoldberg.tcl -#>># by Keith Vetter, March 13, 2003 -#>># -#>># "Man will always find a difficult means to perform a simple task" -#>># Rube Goldberg -#>># -#>># Reproduced here with permission. -#>># -#>>##+################################################################# -#>># -#>># Keith Vetter 2003-03-21: this started out as a simple little program -#>># but was so much fun that it grew and grew. So I apologize about the -#>># size but I just couldn't resist sharing it. -#>># -#>># This is a whizzlet that does a Rube Goldberg type animation, the -#>># design of which comes from an New Years e-card from IncrediMail. -#>># That version had nice sound effects which I eschewed. On the other -#>># hand, that version was in black and white (actually dark blue and -#>># light blue) and this one is fully colorized. -#>># -#>># One thing I learned from this project is that drawing filled complex -#>># objects on a canvas is really hard. More often than not I had to -#>># draw each item twice--once with the desired fill color but no -#>># outline, and once with no fill but with the outline. Another trick -#>># is erasing by drawing with the background color. Having a flood fill -#>># command would have been extremely helpful. -#>># -#>># Two wiki pages were extremely helpful: Drawing rounded rectangles -#>># which I generalized into Drawing rounded polygons, and regular -#>># polygons which allowed me to convert ovals and arcs into polygons -#>># which could then be rotated (see Canvas Rotation). I also wrote -#>># Named Colors to aid in the color selection. -#>># -#>># I could comment on the code, but it's just 26 state machines with -#>># lots of canvas create and move calls. - -if defined?($goldberg_demo) && $goldberg_demo - $goldberg_demo.destroy - $goldberg_demo = nil -end - -# demo toplevel widget -$goldberg_demo = TkToplevel.new {|w| - title("Tk Goldberg (demonstration)") - iconname("goldberg") -# positionWindow(w) -} - -base_frame = TkFrame.new($goldberg_demo).pack(:fill=>:both, :expand=>true) - -=begin -# label -msg = TkLabel.new($goldberg_demo) { - font 'Arial 10' - wraplength '4i' - justify 'left' - text "This is a demonstration of just how complex you can make your animations become. Click the ball to start things moving!\n\n\"Man will always find a difficult means to perform a simple task\"\n - Rube Goldberg" -} -msg.pack('side'=>'top') -=end - -=begin -# frame -TkFrame.new($goldberg_demo) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $goldberg_demo - $goldberg_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'See Code' - command proc{showCode 'goldberg'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') -=end - -######################################### - -class TkGoldberg_Demo - def initialize(parent) - @parent = parent - - @S = {} - @S['title'] = 'Tk Goldberg' - @S['speed'] = TkVariable.new(5) - @S['cnt'] = TkVariable.new(0) - @S['message'] = TkVariable.new("\\nWelcome\\nto\\nRuby/Tk") - @S['pause'] = TkVariable.new - @S['details'] = TkVariable.new(true) - - @S['mode'] = TkVariable.new(:MSTART, :symbol) - # :MSTART, :MGO, :MPAUSE, :MSSTEP, :MBSTEP, :MDONE, :MDEBUG - - # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 - @speed = [1, 10, 20, 50, 80, 100, 150, 200, 300, 400, 500] - - # colors - @C = {} - @C['fg'] = 'black' - # @C['bg'] = 'gray75' - @C['bg'] = 'cornflowerblue' - - @C['0'] = 'white'; @C['1a'] = 'darkgreen'; @C['1b'] = 'yellow' - @C['2'] = 'red'; @C['3a'] = 'green'; @C['3b'] = 'darkblue' - @C['4'] = @C['fg']; @C['5a'] = 'brown'; @C['5b'] = 'white' - @C['6'] = 'magenta'; @C['7'] = 'green'; @C['8'] = @C['fg'] - @C['9'] = 'blue4'; @C['10a'] = 'white'; @C['10b'] = 'cyan' - @C['11a'] = 'yellow'; @C['11b'] = 'mediumblue'; @C['12'] = 'tan2' - @C['13a'] = 'yellow'; @C['13b'] = 'red'; @C['14'] = 'white' - @C['15a'] = 'green'; @C['15b'] = 'yellow'; @C['16'] = 'gray65' - @C['17'] = '#A65353'; @C['18'] = @C['fg']; @C['19'] = 'gray50' - @C['20'] = 'cyan'; @C['21'] = 'gray65'; @C['22'] = @C['20'] - @C['23a'] = 'blue'; @C['23b'] = 'red'; @C['23c'] = 'yellow' - @C['24a'] = 'red'; @C['24b'] = 'white'; - - @STEP = TkVariable.new_hash - @STEP.default_value_type = :numeric - - @XY = {} - - @XY6 = { - '-1'=>[366, 207], '-2'=>[349, 204], '-3'=>[359, 193], '-4'=>[375, 192], - '-5'=>[340, 190], '-6'=>[349, 177], '-7'=>[366, 177], '-8'=>[380, 176], - '-9'=>[332, 172], '-10'=>[342, 161], '-11'=>[357, 164], - '-12'=>[372, 163], '-13'=>[381, 149], '-14'=>[364, 151], - '-15'=>[349, 146], '-16'=>[333, 148], '0'=>[357, 219], - '1'=>[359, 261], '2'=>[359, 291], '3'=>[359, 318], '4'=>[361, 324], - '5'=>[365, 329], '6'=>[367, 334], '7'=>[367, 340], '8'=>[366, 346], - '9'=>[364, 350], '10'=>[361, 355], '11'=>[359, 370], '12'=>[359, 391], - '13,0'=>[360, 456], '13,1'=>[376, 456], '13,2'=>[346, 456], - '13,3'=>[330, 456], '13,4'=>[353, 444], '13,5'=>[368, 443], - '13,6'=>[339, 442], '13,7'=>[359, 431], '13,8'=>[380, 437], - '13,9'=>[345, 428], '13,10'=>[328, 434], '13,11'=>[373, 424], - '13,12'=>[331, 420], '13,13'=>[360, 417], '13,14'=>[345, 412], - '13,15'=>[376, 410], '13,16'=>[360, 403] - } - - @timer = TkTimer.new(@speed[@S['speed'].numeric]){|timer| - timer.set_interval(go) - } - - do_display - reset - - # Start everything going - @timer.start - end - - def do_display() - @ctrl = TkFrame.new(@parent, :relief=>:ridge, :bd=>2, :padx=>5, :pady=>5) - @screen = TkFrame.new(@parent, :bd=>2, - :relief=>:raised).pack(:side=>:left, :fill=>:both, - :expand=>true) - - @canvas = TkCanvas.new(@parent, :width=>850, :height=>700, - :bg=>@C['bg'], :highlightthickness=>0){ - scrollregion([0, 0, 1000, 1000]) # Kludge to move everything up - yview_moveto(0.05) - }.pack(:in=>@screen, :side=>:top, :fill=>:both, :expand=>true) - - @canvas.bind('3'){ @pause.invoke } - @canvas.bind('Destroy'){ @timer.stop } - - do_ctrl_frame - do_detail_frame - - # msg = TkLabel.new(@parent, :bg=>@C['bg'], :fg=>'white') { - msg = Tk::Label.new(@parent, :bg=>@C['bg'], :fg=>'white') { - font 'Arial 10' - wraplength 600 - justify 'left' - text "This is a demonstration of just how complex you can make your animations become. Click the ball to start things moving!\n\"Man will always find a difficult means to perform a simple task\" - Rube Goldberg" - } - msg.place(:in=>@canvas, :relx=>0, :rely=>0, :anchor=>:nw) - - frame = TkFrame.new(@parent, :bg=>@C['bg']) - - # TkButton.new(frame, :bg=>@C['bg'], :activebackground=>@C['bg']) { - Tk::Button.new(frame, :bg=>@C['bg'], :activebackground=>@C['bg']) { - text 'Dismiss' - command proc{ - tmppath = $goldberg_demo - $goldberg_demo = nil - tmppath.destroy - } - }.pack('side'=>'left') - - # TkButton.new(frame, :bg=>@C['bg'], :activebackground=>@C['bg']) { - Tk::Button.new(frame, :bg=>@C['bg'], :activebackground=>@C['bg']) { - text 'See Code' - command proc{showCode 'goldberg'} - }.pack('side'=>'left', 'padx'=>5) - - # @show = TkButton.new(frame, :text=>'>>', :command=>proc{show_ctrl}, - @show = Tk::Button.new(frame, :text=>'>>', :command=>proc{show_ctrl}, - :bg=>@C['bg'], :activebackground=>@C['bg']) - @show.pack('side'=>'left') - frame.place(:in=>@canvas, :relx=>1, :rely=>0, :anchor=>:ne) - - Tk.update - end - - def do_ctrl_frame - @start = Tk::Button.new(@parent, :text=>'Start', :bd=>6, - :command=>proc{do_button(0)}) - if font = @start['font'] - @start.font(font.weight('bold')) - end - - @pause = TkCheckbutton.new(@parent, :text=>'Pause', :font=>font, - :command=>proc{do_button(1)}, :relief=>:raised, - :variable=>@S['pause']) - - @step = TkButton.new(@parent, :text=>'Single Step', :font=>font, - :command=>proc{do_button(2)}) - @bstep = TkButton.new(@parent, :text=>'Big Step', :font=>font, - :command=>proc{do_button(4)}) - @reset = TkButton.new(@parent, :text=>'Reset', :font=>font, - :command=>proc{do_button(3)}) - - @details = TkFrame.new(@parent, :bd=>2, :relief=>:ridge) - @detail = TkCheckbutton.new(@parent, :text=>'Details', :font=>font, - :relief=>:raised, :variable=>@S['details']) - - @msg_entry = TkEntry.new(@parent, :textvariable=>@S['message'], - :justify=>:center) - @speed_scale = TkScale.new(@parent, :orient=>:horizontal, - :from=>1, :to=>10, :font=>font, - :variable=>@S['speed'], :bd=>2, - :relief=>:ridge, :showvalue=>false) - @about = TkButton.new(@parent, :text=>'About', - :command=>proc{about}, :font=>font) - - Tk.grid(@start, :in=>@ctrl, :row=>0, :sticky=>:ew) - @ctrl.grid_rowconfigure(1, :minsize=>10) - Tk.grid(@pause, :in=>@ctrl, :row=>2, :sticky=>:ew) - Tk.grid(@step, :in=>@ctrl, :sticky=>:ew) - Tk.grid(@bstep, :in=>@ctrl, :sticky=>:ew) - Tk.grid(@reset, :in=>@ctrl, :sticky=>:ew) - @ctrl.grid_rowconfigure(10, :minsize=>20) - Tk.grid(@details, :in=>@ctrl, :row=>11, :sticky=>:ew) - Tk.grid(@detail, :in=>@details, :row=>0, :sticky=>:ew) - @ctrl.grid_rowconfigure(50, :weight=>1) - - @S['mode'].trace('w', proc{|*args| active_GUI(*args)}) - @S['details'].trace('w', proc{|*args| active_GUI(*args)}) - @S['speed'].trace('w', proc{|*args| active_GUI(*args)}) - - Tk.grid(@msg_entry, :in=>@ctrl, :row=>98, :sticky=>:ew, :pady=>5) - Tk.grid(@speed_scale, :in=>@ctrl, :row=>99, :sticky=>:ew) - Tk.grid(@about, :in=>@ctrl, :row=>100, :sticky=>:ew) - - @reset.bind('3'){@S['mode'].value = -1} # Debugging - end - - def do_detail_frame - @f_details = TkFrame.new(@details) - - @label = TkLabel.new(@f_details, :textvariable=>@S['cnt'], - :bd=>1, :relief=>:solid, :bg=>'white') - Tk.grid(@label, '-', '-', '-', :sticky=>:ew, :row=>0) - - idx = 1 - loop { - break unless respond_to?("move#{idx}") - l = TkLabel.new(@f_details, :text=>idx, :anchor=>:e, - :width=>2, :bd=>1, :relief=>:solid, :bg=>'white') - @STEP[idx] = 0 - ll = TkLabel.new(@f_details, :textvariable=>@STEP.ref(idx), - :width=>5, :bd=>1, :relief=>:solid, :bg=>'white') - row = (idx + 1)/2 - col = ((idx + 1) & 1) * 2 - Tk.grid(l, :sticky=>:ew, :row=>row, :column=>col) - Tk.grid(ll, :sticky=>:ew, :row=>row, :column=>(col + 1)) - idx += 1 - } - @f_details.grid_columnconfigure(1, :weight=>1) - end - - def show_ctrl - if @ctrl.winfo_mapped? - @ctrl.pack_forget - @show.text('>>') - else - @ctrl.pack(:side=>:right, :fill=>:both, :ipady=>5) - @show.text('<<') - end - end - - def draw_all - reset_step - @canvas.delete(:all) - idx = 0 - loop{ - m = "draw#{idx}" - break unless respond_to?(m) - send(m) - idx += 1 - } - end - - def active_GUI(var1, var2, op) - st = {false=>:disabled, true=>:normal} - - m = @S['mode'].to_sym - @S['pause'].value = (m == :MPAUSE) - @start.state(st[m != :MGO]) - @pause.state(st[m != :MSTART && m != :MDONE]) - @step.state(st[m != :MGO && m != :MDONE]) - @bstep.state(st[m != :MGO && m != :MDONE]) - @reset.state(st[m != :MSTART]) - - if @S['details'].bool - Tk.grid(@f_details, :in=>@details, :row=>2, :sticky=>:ew) - else - Tk.grid_forget(@f_details) - end - @speed_scale.label("Speed: #{@S['speed'].value}") - end - - def start - @S['mode'].value = :MGO - end - - def do_button(what) - case what - when 0 # Start - reset if @S['mode'].to_sym == :MDONE - @S['mode'].value = :MGO - - when 1 # Pause - @S['mode'].value = ((@S['pause'].bool)? :MPAUSE: :MGO) - - when 2 # Step - @S['mode'].value = :MSSTEP - - when 3 # Reset - reset - - when 4 # Big step - @S['mode'].value = :MBSTEP - end - end - - def go(who = nil) - now = Tk::Clock.clicks(:milliseconds) - if who # Start here for debugging - @S['active'] = [who] - @S['mode'].value = :MGO - end - return if @S['mode'].to_sym == :MDEBUG # Debugging - # If not paused, do the next move - n = next_step if @S['mode'].to_sym != :MPAUSE - @S['mode'].value = :MPAUSE if @S['mode'].to_sym == :MSSTEP # Single step - @S['mode'].value = :MSSTEP if @S['mode'].to_sym == :MBSTEP && n # big step - elapsed = Tk::Clock.clicks(:milliseconds) - now - delay = @speed[@S['speed'].to_i] - elapsed - delay = 1 if delay <= 0 - return delay - end - - def next_step - retval = false # Return value - - if @S['mode'].to_sym != :MSTART && @S['mode'].to_sym != :MDONE - @S['cnt'].numeric += 1 - end - alive = [] - @S['active'].each{|who| - who = who.to_i - n = send("move#{who}") - if (n & 1).nonzero? # This guy still alive - alive << who - end - if (n & 2).nonzero? # Next guy is active - alive << (who + 1) - retval = true - end - if (n & 4).nonzero? # End of puzzle flag - @S['mode'].value = :MDONE # Done mode - @S['active'] = [] # No more animation - return true - end - } - @S['active'] = alive - return retval - end - - def about - msg = "Ruby/Tk Version ::\nby Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)\n\n" - msg += "Original Version ::\n" - msg += "#{@S['title']}\nby Keith Vetter, March 2003\n(Reproduced by kind permission of the author)\n\n" - msg += "Man will always find a difficult means to perform a simple task" - msg += "\nRube Goldberg" - Tk.messageBox(:message=>msg, :title=>'About') - end - - ################################################################ - # - # All the drawing and moving routines - # - - # START HERE! banner - def draw0 - color = @C['0'] - TkcText.new(@canvas, [579, 119], :text=>'START HERE!', - :fill=>color, :anchor=>:w, - :tag=>'I0', :font=>['Times Roman', 12, :italic, :bold]) - TkcLine.new(@canvas, [719, 119, 763, 119], :tag=>'I0', :fill=>color, - :width=>5, :arrow=>:last, :arrowshape=>[18, 18, 5]) - @canvas.itembind('I0', '1'){ start } - end - - def move0(step = nil) - step = get_step(0, step) - - if @S['mode'].to_sym != :MSTART # Start the ball rolling - move_abs('I0', [-100, -100]) # Hide the banner - return 2 - end - - pos = [ - [673, 119], [678, 119], [683, 119], [688, 119], - [693, 119], [688, 119], [683, 119], [678, 119] - ] - step = step % pos.length - move_abs('I0', pos[step]) - return 1 - end - - # Dropping ball - def draw1 - color = @C['1a'] - color2 = @C['1b'] - TkcPolygon.new(@canvas, - [ 844, 133, 800, 133, 800, 346, 820, 346, - 820, 168, 844, 168, 844, 133 ], - :width=>3, :fill=>color, :outline=>'') - TkcPolygon.new(@canvas, - [ 771, 133, 685, 133, 685, 168, 751, 168, - 751, 346, 771, 346, 771, 133 ], - :width=>3, :fill=>color, :outline=>'') - TkcOval.new(@canvas, box(812, 122, 9), - :tag=>'I1', :fill=>color2, :outline=>'') - - @canvas.itembind('I1', '1'){ start } - end - - def move1(step = nil) - step = get_step(1, step) - pos = [ - [807, 122], [802, 122], [797, 123], [793, 124], [789, 129], [785, 153], - [785, 203], [785, 278, :x], [785, 367], [810, 392], [816, 438], - [821, 503], [824, 585, :y], [838, 587], [848, 593], [857, 601], - [-100, -100] - ] - return 0 if step >= pos.length - where = pos[step] - move_abs('I1', where) - move15a if where[2] == :y - return 3 if where[2] == :x - return 1 - end - - # Lighting the match - def draw2 - color = @C['2'] - - # Fulcrum - TkcPolygon.new(@canvas, [750, 369, 740, 392, 760, 392], - :fill=>@C['fg'], :outline=>@C['fg']) - - # Strike box - TkcRectangle.new(@canvas, [628, 335, 660, 383], - :fill=>'', :outline=>@C['fg']) - (0..2).each{|y| - yy = 335 + y*16 - TkcBitmap.new(@canvas, [628, yy], :bitmap=>'gray25', - :anchor=>:nw, :foreground=>@C['fg']) - TkcBitmap.new(@canvas, [644, yy], :bitmap=>'gray25', - :anchor=>:nw, :foreground=>@C['fg']) - } - - # Lever - TkcLine.new(@canvas, [702, 366, 798, 366], - :fill=>@C['fg'], :width=>6, :tag=>'I2_0') - - # R strap - TkcLine.new(@canvas, [712, 363, 712, 355], - :fill=>@C['fg'], :width=>3, :tag=>'I2_1') - - # L strap - TkcLine.new(@canvas, [705, 363, 705, 355], - :fill=>@C['fg'], :width=>3, :tag=>'I2_2') - - # Match stick - TkcLine.new(@canvas, [679, 356, 679, 360, 717, 360, 717, 356, 679, 356], - :fill=>@C['fg'], :width=>3, :tag=>'I2_3') - - # Match head - TkcPolygon.new(@canvas, - [ 671, 352, 677.4, 353.9, 680, 358.5, 677.4, 363.1, - 671, 365, 664.6, 363.1, 662, 358.5, 664.6, 353.9 ], - :fill=>color, :outline=>color, :tag=>'I2_4') - end - - def move2(step = nil) - step = get_step(2, step) - - stages = [0, 0, 1, 2, 0, 2, 1, 0, 1, 2, 0, 2, 1] - xy = [] - xy[0] = [ - 686, 333, 692, 323, 682, 316, 674, 309, 671, 295, 668, 307, - 662, 318, 662, 328, 671, 336 - ] - xy[1] = [ - 687, 331, 698, 322, 703, 295, 680, 320, 668, 297, 663, 311, - 661, 327, 671, 335 - ] - xy[2] = [ - 686, 331, 704, 322, 688, 300, 678, 283, 678, 283, 674, 298, - 666, 309, 660, 324, 672, 336 - ] - - if step >= stages.length - @canvas.delete('I2') - return 0 - end - - if step == 0 # Rotate the match - beta = 20 - - ox, oy = anchor('I2_0', :s) # Where to pivot - - i = 0 - until @canvas.find_withtag("I2_#{i}").empty? - rotate_item("I2_#{i}", ox, oy, beta) - i += 1 - end - - # For the flame - TkcPolygon.new(@canvas, [], :tag=>'I2', :smooth=>true, :fill=>@C['2']) - - return 1 - end - @canvas.coords('I2', xy[stages[step]]) - return ((step == 7)? 3: 1) - end - - # Weight and pulleys - def draw3 - color = @C['3a'] - color2 = @C['3b'] - - xy = [ [602, 296], [577, 174], [518, 174] ] - xy.each{|x, y| # 3 Pulleys - TkcOval.new(@canvas, box(x, y, 13), - :fill=>color, :outline=>@C['fg'], :width=>3) - TkcOval.new(@canvas, box(x, y, 2), :fill=>@C['fg'], :outline=>@C['fg']) - } - - # Wall to flame - TkcLine.new(@canvas, [750, 309, 670, 309], :tag=>'I3_s', - :width=>3, :fill=>@C['fg'], :smooth=>true) - - # Flame to pulley 1 - TkcLine.new(@canvas, [670, 309, 650, 309], :tag=>'I3_0', - :width=>3, :fill=>@C['fg'], :smooth=>true) - TkcLine.new(@canvas, [650, 309, 600, 309], :tag=>'I3_1', - :width=>3, :fill=>@C['fg'], :smooth=>true) - - # Pulley 1 half way to 2 - TkcLine.new(@canvas, [589, 296, 589, 235], :tag=>'I3_2', - :width=>3, :fill=>@C['fg']) - - # Pulley 1 other half to 2 - TkcLine.new(@canvas, [589, 235, 589, 174], :width=>3, :fill=>@C['fg']) - - # Across the top - TkcLine.new(@canvas, [577, 161, 518, 161], :width=>3, :fill=>@C['fg']) - - # Down to weight - TkcLine.new(@canvas, [505, 174, 505, 205], :tag=>'I3_w', - :width=>3, :fill=>@C['fg']) - - # Draw the weight as 2 circles, two rectangles and 1 rounded rectangle - x1, y1, x2, y2 = [515, 207, 495, 207] - TkcOval.new(@canvas, box(x1, y1, 6), - :tag=>'I3_', :fill=>color2, :outline=>color2) - TkcOval.new(@canvas, box(x2, y2, 6), - :tag=>'I3_', :fill=>color2, :outline=>color2) - TkcRectangle.new(@canvas, x1, y1 - 6, x2, y2 + 6, - :tag=>'I3_', :fill=>color2, :outline=>color2) - - TkcPolygon.new(@canvas, round_rect([492, 220, 518, 263], 15), - :smooth=>true, :tag=>'I3_', :fill=>color2, :outline=>color2) - - TkcLine.new(@canvas, [500, 217, 511, 217], - :tag=>'I3_', :fill=>color2, :width=>10) - - # Bottom weight target - TkcLine.new(@canvas, [502, 393, 522, 393, 522, 465], - :tag=>'I3__', :fill=>@C['fg'], :joinstyle=>:miter, :width=>10) - end - - def move3(step = nil) - step = get_step(3, step) - - pos = [ [505, 247], [505, 297], [505, 386.5], [505, 386.5] ] - rope = [] - rope[0] = [750, 309, 729, 301, 711, 324, 690, 300] - rope[1] = [750, 309, 737, 292, 736, 335, 717, 315, 712, 320] - rope[2] = [750, 309, 737, 309, 740, 343, 736, 351, 725, 340] - rope[3] = [750, 309, 738, 321, 746, 345, 742, 356] - - return 0 if step >= pos.length - - @canvas.delete("I3_#{step}") # Delete part of the rope - move_abs('I3_', pos[step]) # Move weight down - @canvas.coords('I3_s', rope[step]) # Flapping rope end - @canvas.coords('I3_w', [505, 174].concat(pos[step])) - if step == 2 - @canvas.move('I3__', 0, 30) - return 2 - end - return 1 - end - - # Cage and door - def draw4 - color = @C['4'] - x0, y0, x1, y1 = [527, 356, 611, 464] - - # Horizontal bars - y0.step(y1, 12){|y| - TkcLine.new(@canvas, [x0, y, x1, y], :fill=>color, :width=>1) - } - - # Vertical bars - x0.step(x1, 12){|x| - TkcLine.new(@canvas, [x, y0, x, y1], :fill=>color, :width=>1) - } - - # Swing gate - TkcLine.new(@canvas, [518, 464, 518, 428], - :tag=>'I4', :fill=>color, :width=>1) - end - - def move4(step = nil) - step = get_step(4, step) - - angles = [-10, -20, -30, -30] - return 0 if step >= angles.length - - rotate_item('I4', 518, 464, angles[step]) - @canvas.raise('I4') - - return((step == 3)? 3: 1) - end - - # Mouse - def draw5 - color = @C['5a'] - color2 = @C['5b'] - - xy = [377, 248, 410, 248, 410, 465, 518, 465] # Mouse course - xy.concat [518, 428, 451, 428, 451, 212, 377, 212] - - TkcPolygon.new(@canvas, xy, :fill=>color2, :outline=>@C['fg'], :width=>3) - - xy = [ - 534.5, 445.5, 541, 440, 552, 436, 560, 436, 569, 440, 574, 446, - 575, 452, 574, 454, 566, 456, 554, 456, 545, 456, 537, 454, 530, 452 - ] - TkcPolygon.new(@canvas, xy, :tag=>['I5', 'I5_0'], :fill=>color) - - TkcLine.new(@canvas, [573, 452, 592, 458, 601, 460, 613, 456], # Tail - :tag=>['I5', 'I5_1'], :fill=>color, :smooth=>true, :width=>3) - - xy = box(540, 446, 2) # Eye - xy = [540, 444, 541, 445, 541, 447, 540, 448, 538, 447, 538, 445] - TkcPolygon.new(@canvas, xy, :tag=>['I5', 'I5_2'], :fill=>@C['bg'], - :outline=>'', :smooth=>true) - - xy = [538, 454, 535, 461] # Front leg - TkcLine.new(@canvas, xy, :tag=>['I5', 'I5_3'], :fill=>color, :width=>2) - - xy = [566, 455, 569, 462] # Back leg - TkcLine.new(@canvas, xy, :tag=>['I5', 'I5_4'], :fill=>color, :width=>2) - - xy = [544, 455, 545, 460] # 2nd front leg - TkcLine.new(@canvas, xy, :tag=>['I5', 'I5_5'], :fill=>color, :width=>2) - - xy = [560, 455, 558, 460] # 2nd back leg - TkcLine.new(@canvas, xy, :tag=>['I5', 'I5_6'], :fill=>color, :width=>2) - end - - def move5(step = nil) - step = get_step(5, step) - - pos = [ - [553, 452], [533, 452], [513, 452], [493, 452], [473, 452], - [463, 442, 30], [445.5, 441.5, 30], [425.5, 434.5, 30], [422, 414], - [422, 394], [422, 374], [422, 354], [422, 334], [422, 314], [422, 294], - [422, 274, -30], [422, 260.5, -30, :x], [422.5, 248.5, -28], [425, 237] - ] - - return 0 if step >= pos.length - - x, y, beta, nxt = pos[step] - move_abs('I5', [x, y]) - if beta - ox, oy = centroid('I5_0') - (0..6).each{|id| rotate_item("I5_#{id}", ox, oy, beta) } - end - return 3 if nxt == :x - return 1 - end - - # Dropping gumballs - def draw6 - color = @C['6'] - xy = [324, 130, 391, 204] # Ball holder - xy = round_rect(xy, 10) - TkcPolygon.new(@canvas, xy, :smooth=>true, - :outline=>@C['fg'], :width=>3, :fill=>color) - xy = [339, 204, 376, 253] # Below the ball holder - TkcRectangle.new(@canvas, xy, :outline=>@C['fg'], :width=>3, - :fill=>color, :tag=>'I6c') - xy = box(346, 339, 28) - TkcOval.new(@canvas, xy, :fill=>color, :outline=>'') # Roter - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>2, :style=>:arc, - :start=>80, :extent=>205) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>2, :style=>:arc, - :start=>-41, :extent=>85) - - xy = box(346, 339, 15) # Center of rotor - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>@C['fg'], :tag=>'I6m') - xy = [352, 312, 352, 254, 368, 254, 368, 322] # Top drop to rotor - TkcPolygon.new(@canvas, xy, :fill=>color, :outline=>'') - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2) - - xy = [353, 240, 367, 300] # Poke bottom hole - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>'') - xy = [341, 190, 375, 210] # Poke another hole - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>'') - - xy = [ - 368, 356, 368, 403, 389, 403, 389, 464, 320, 464, 320, 403, - 352, 403, 352, 366 - ] - TkcPolygon.new(@canvas, xy, :fill=>color, :outline=>'', - :width=>2) # Below rotor - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2) - xy = box(275, 342, 7) # On/off rotor - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>@C['fg']) - xy = [276, 334, 342, 325] # Fan belt top - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - xy = [276, 349, 342, 353] # Fan belt bottom - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - - xy = [337, 212, 337, 247] # What the mouse pushes - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I6_') - xy = [392, 212, 392, 247] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I6_') - xy = [337, 230, 392, 230] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>7, :tag=>'I6_') - - who = -1 # All the balls - colors = %w(red cyan orange green blue darkblue) - colors *= 3 - - (0..16).each{|i| - loc = -i - color = colors[i] - x, y = @XY6["#{loc}"] - TkcOval.new(@canvas, box(x, y, 5), - :fill=>color, :outline=>color, :tag=>"I6_b#{i}") - } - draw6a(12) # The wheel - end - - def draw6a(beta) - @canvas.delete('I6_0') - ox, oy = [346, 339] - (0..3).each{|i| - b = beta + i * 45 - x, y = rotate_c(28, 0, 0, 0, b) - xy = [ox + x, oy + y, ox - x, oy - y] - TkcLine.new(@canvas, xy, :tag=>'I6_0', :fill=>@C['fg'], :width=>2) - } - end - - def move6(step = nil) - step = get_step(6, step) - - return 0 if step > 62 - - if step < 2 # Open gate for balls to drop - @canvas.move('I6_', -7, 0) - if step == 1 # Poke a hole - xy = [348, 226, 365, 240] - TkcRectangle.new(@canvas, xy, :fill=>@canvas.itemcget('I6c', :fill), - :outline=>'') - end - return 1 - end - - s = step - 1 # Do the gumball drop dance - (0..(((s - 1)/3).to_i)).each{|i| - tag = "I6_b#{i}" - break if @canvas.find_withtag(tag).empty? - loc = s - 3*i - - if @XY6["#{loc},#{i}"] - move_abs(tag, @XY6["#{loc},#{i}"]) - elsif @XY6["#{loc}"] - move_abs(tag, @XY6["#{loc}"]) - end - } - if s % 3 == 1 - first = (s + 2)/3 - i = first - loop { - tag = "I6_b#{i}" - break if @canvas.find_withtag(tag).empty? - loc = first - i - move_abs(tag, @XY6["#{loc}"]) - i += 1 - } - end - if s >= 3 # Rotate the motor - idx = s % 3 - draw6a(12 + s * 15) - end - return((s == 3)? 3 : 1) - end - - # On/off switch - def draw7 - color = @C['7'] - xy = [198, 306, 277, 374] # Box - TkcRectangle.new(@canvas, xy, :outline=>@C['fg'], :width=>2, - :fill=>color, :tag=>'I7z') - @canvas.lower('I7z') - xy = [275, 343, 230, 349] - TkcLine.new(@canvas, xy, :tag=>'I7', :fill=>@C['fg'], :arrow=>:last, - :arrowshape=>[23, 23, 8], :width=>6) - xy = [225, 324] # On button - x, y = xy - TkcOval.new(@canvas, box(x, y, 3), :fill=>@C['fg'], :outline=>@C['fg']) - xy = [218, 323] # On text - font = ['Times Roman', 8] - TkcText.new(@canvas, xy, :text=>'on', :anchor=>:e, - :fill=>@C['fg'], :font=>font) - xy = [225, 350] # Off button - x, y = xy - TkcOval.new(@canvas, box(x, y, 3), :fill=>@C['fg'], :outline=>@C['fg']) - xy = [218, 349] # Off text - TkcText.new(@canvas, xy, :text=>'off', :anchor=>:e, - :fill=>@C['fg'], :font=>font) - end - - def move7(step = nil) - step = get_step(7, step) - - numsteps = 30 - return 0 if step > numsteps - beta = 30.0 / numsteps - rotate_item('I7', 275, 343, beta) - - return((step == numsteps)? 3: 1) - end - - # Electricity to the fan - def draw8 - sine([271, 248, 271, 306], 5, 8, :tag=>'I8_s', :fill=>@C['8'], :width=>3) - end - - def move8(step = nil) - step = get_step(8, step) - - return 0 if step > 3 - if step == 0 - sparkle(anchor('I8_s', :s), 'I8') - return 1 - elsif step == 1 - move_abs('I8', anchor('I8_s', :c)) - elsif step == 2 - move_abs('I8', anchor('I8_s', :n)) - else - @canvas.delete('I8') - end - return((step == 2)? 3: 1) - end - - # Fan - def draw9 - color = @C['9'] - xy = [266, 194, 310, 220] - TkcOval.new(@canvas, xy, :outline=>color, :fill=>color) - xy = [280, 209, 296, 248] - TkcOval.new(@canvas, xy, :outline=>color, :fill=>color) - xy = [ - 288, 249, 252, 249, 260, 240, 280, 234, - 296, 234, 316, 240, 324, 249, 288, 249 - ] - TkcPolygon.new(@canvas, xy, :fill=>color, :smooth=>true) - - xy = [248, 205, 265, 214, 264, 205, 265, 196] # Spinner - TkcPolygon.new(@canvas, xy, :fill=>color) - - xy = [255, 206, 265, 234] # Fan blades - TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], - :width=>3, :tag=>'I9_0') - xy = [255, 176, 265, 204] - TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], - :width=>3, :tag=>'I9_0') - xy = [255, 206, 265, 220] - TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], - :width=>1, :tag=>'I9_1') - xy = [255, 190, 265, 204] - TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], - :width=>1, :tag=>'I9_1') - end - - def move9(step = nil) - step = get_step(9, step) - - if (step & 1).nonzero? - @canvas.itemconfigure('I9_0', :width=>4) - @canvas.itemconfigure('I9_1', :width=>1) - @canvas.lower('I9_1', 'I9_0') - else - @canvas.itemconfigure('I9_0', :width=>1) - @canvas.itemconfigure('I9_1', :width=>4) - @canvas.lower('I9_0', 'I9_1') - end - return 3 if step == 0 - return 1 - end - - # Boat - def draw10 - color = @C['10a'] - color2 = @C['10b'] - xy = [191, 230, 233, 230, 233, 178, 191, 178] # Sail - TkcPolygon.new(@canvas, xy, :fill=>color, :width=>3, :outline=>@C['fg'], - :tag=>'I10') - xy = box(209, 204, 31) # Front - TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :style=>:pie, - :start=>120, :extent=>120, :tag=>'I10') - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc, - :start=>120, :extent=>120, :tag=>'I10') - xy = box(249, 204, 31) # Back - TkcArc.new(@canvas, xy, :outline=>'', :fill=>@C['bg'], :width=>3, - :style=>:pie, :start=>120, :extent=>120, :tag=>'I10') - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc, - :start=>120, :extent=>120, :tag=>'I10') - - xy = [200, 171, 200, 249] # Mast - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I10') - xy = [159, 234, 182, 234] # Bow sprit - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I10') - xy = [180, 234, 180, 251, 220, 251] # Hull - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>6, :tag=>'I10') - - xy = [92, 255, 221, 255] # Waves - sine(xy, 2, 25, :fill=>color2, :width=>1, :tag=>'I10w') - - xy = @canvas.coords('I10w')[4..-5] # Water - xy.concat([222, 266, 222, 277, 99, 277]) - TkcPolygon.new(@canvas, xy, :fill=>color2, :outline=>color2) - xy = [222, 266, 222, 277, 97, 277, 97, 266] # Water bottom - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - - xy = box(239, 262, 17) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc, - :start=>95, :extent=>103) - xy = box(76, 266, 21) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc, - :extent=>190) - end - - def move10(step = nil) - step = get_step(10, step) - - pos = [ - [195, 212], [193, 212], [190, 212], [186, 212], [181, 212], [176, 212], - [171, 212], [166, 212], [161, 212], [156, 212], [151, 212], [147, 212], - [142, 212], [137, 212], [132, 212, :x], [127, 212], [121, 212], - [116, 212], [111, 212] - ] - - return 0 if step >= pos.length - - where = pos[step] - move_abs('I10', where) - - return 3 if where[2] == :x - return 1 - end - - # 2nd ball drop - def draw11 - color = @C['11a'] - color2 = @C['11b'] - xy = [23, 264, 55, 591] # Color the down tube - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>'') - xy = box(71, 460, 48) # Color the outer loop - TkcOval.new(@canvas, xy, :fill=>color, :outline=>'') - - xy = [55, 264, 55, 458] # Top right side - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - xy = [55, 504, 55, 591] # Bottom right side - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - xy = box(71, 460, 48) # Outer loop - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc, - :start=>110, :extent=>-290, :tag=>'I11i') - xy = box(71, 460, 16) # Inner loop - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>'', - :width=>3, :tag=>'I11i') - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>@C['bg'], :width=>3) - - xy = [23, 264, 23, 591] # Left side - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - xy = box(1, 266, 23) # Top left curve - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, - :style=>:arc, :extent=>90) - - xy = box(75, 235, 9) # The ball - TkcOval.new(@canvas, xy, :fill=>color2, :outline=>'', - :width=>3, :tag=>'I11') - end - - def move11(step = nil) - step = get_step(11, step) - - pos = [ - [75, 235], [70, 235], [65, 237], [56, 240], [46, 247], [38, 266], - [38, 296], [38, 333], [38, 399], [38, 475], [74, 496], [105, 472], - [100, 437], [65, 423], [-100, -100], [38, 505], [38, 527, :x], [38, 591] - ] - - return 0 if step >= pos.length - where = pos[step] - move_abs('I11', where) - return 3 if where[2] == :x - return 1 - end - - # Hand - def draw12 - xy = [ - 20, 637, 20, 617, 20, 610, 20, 590, 40, 590, 40, 590, - 60, 590, 60, 610, 60, 610 - ] - xy.concat([60, 610, 65, 620, 60, 631]) # Thumb - xy.concat([60, 631, 60, 637, 60, 662, 60, 669, 52, 669, - 56, 669, 50, 669, 50, 662, 50, 637]) - - y0 = 637 # Bumps for fingers - y1 = 645 - 50.step(21, -10){|x| - x1 = x - 5 - x2 = x - 10 - xy << x << y0 << x1 << y1 << x2 << y0 - } - TkcPolygon.new(@canvas, xy, :fill=>@C['12'], :outline=>@C['fg'], - :smooth=>true, :tag=>'I12', :width=>3) - end - - def move12(step = nil) - step = get_step(12, step) - - pos = [[42.5, 641, :x]] - return 0 if step >= pos.length - where = pos[step] - move_abs('I12', where) - return 3 if where[2] == :x - return 1 - end - - # Fax - def draw13 - color = @C['13a'] - xy = [86, 663, 149, 663, 149, 704, 50, 704, 50, 681, 64, 681, 86, 671] - xy2 = [ - 784, 663, 721, 663, 721, 704, 820, 704, 820, 681, 806, 681, 784, 671 - ] - radii = [2, 9, 9, 8, 5, 5, 2] - - round_poly(@canvas, xy, radii, :width=>3, - :outline=>@C['fg'], :fill=>color) - round_poly(@canvas, xy2, radii, :width=>3, - :outline=>@C['fg'], :fill=>color) - - xy = [56, 677] - x, y = xy - TkcRectangle.new(@canvas, box(x, y, 4), :fill=>'', :outline=>@C['fg'], - :width=>3, :tag=>'I13') - xy = [809, 677] - x, y = xy - TkcRectangle.new(@canvas, box(x, y, 4), :fill=>'', :outline=>@C['fg'], - :width=>3, :tag=>'I13R') - - xy = [112, 687] # Label - TkcText.new(@canvas, xy, :text=>'FAX', :fill=>@C['fg'], - :font=>['Times Roman', 12, :bold]) - xy = [762, 687] - TkcText.new(@canvas, xy, :text=>'FAX', :fill=>@C['fg'], - :font=>['Times Roman', 12, :bold]) - - xy = [138, 663, 148, 636, 178, 636] # Paper guide - TkcLine.new(@canvas, xy, :smooth=>true, :fill=>@C['fg'], :width=>3) - xy = [732, 663, 722, 636, 692, 636] - TkcLine.new(@canvas, xy, :smooth=>true, :fill=>@C['fg'], :width=>3) - - sine([149, 688, 720, 688], 5, 15, - :tag=>'I13_s', :fill=>@C['fg'], :width=>3) - end - - def move13(step = nil) - step = get_step(13, step) - - numsteps = 7 - - if step == numsteps + 2 - move_abs('I13_star', [-100, -100]) - @canvas.itemconfigure('I13R', :fill=>@C['13b'], :width=>2) - return 2 - end - if step == 0 # Button down - @canvas.delete('I13') - sparkle([-100, -100], 'I13_star') # Create off screen - return 1 - end - x0, y0 = anchor('I13_s', :w) - x1, y1 = anchor('I13_s', :e) - x = x0 + (x1 - x0) * (step - 1) / numsteps.to_f - move_abs('I13_star', [x, y0]) - return 1 - end - - # Paper in fax - def draw14 - color = @C['14'] - xy = [102, 661, 113, 632, 130, 618] # Left paper edge - TkcLine.new(@canvas, xy, :smooth=>true, :fill=>color, - :width=>3, :tag=>'I14L_0') - xy = [148, 629, 125, 640, 124, 662] # Right paper edge - TkcLine.new(@canvas, xy, :smooth=>true, :fill=>color, - :width=>3, :tag=>'I14L_1') - draw14a('L') - - xy = [ - 768.0, 662.5, 767.991316225, 662.433786215, 767.926187912, 662.396880171 - ] - TkcLine.new(@canvas, xy, :smooth=>true, :fill=>color, - :width=>3, :tag=>'I14R_0') - @canvas.lower('I14R_0') - # NB. these numbers are VERY sensitive, you must start with final size - # and shrink down to get the values - xy = [ - 745.947897349, 662.428358855, 745.997829056, 662.452239237, 746.0, 662.5 - ] - TkcLine.new(@canvas, xy, :smooth=>true, :fill=>color, - :width=>3, :tag=>'I14R_1') - @canvas.lower('I14R_1') - end - - def draw14a(side) - color = @C['14'] - xy = @canvas.coords("I14#{side}_0") - xy2 = @canvas.coords("I14#{side}_1") - x0, y0, x1, y1, x2, y2 = xy - x3, y3, x4, y4, x5, y5 = xy2 - - zz = [ - x0, y0, x0, y0, xy, x2, y2, x2, y2, - x3, y3, x3, y3, xy2, x5, y5, x5, y5 - ].flatten - @canvas.delete("I14#{side}") - TkcPolygon.new(@canvas, zz, :tag=>"I14#{side}", :smooth=>true, - :fill=>color, :outline=>color, :width=>3) - @canvas.lower("I14#{side}") - end - - def move14(step = nil) - step = get_step(14, step) - - # Paper going down - sc = 0.9 - 0.05*step - if sc < 0.3 - @canvas.delete('I14L') - return 0 - end - - ox, oy = @canvas.coords('I14L_0') - @canvas.scale('I14L_0', ox, oy, sc, sc) - ox, oy = @canvas.coords('I14L_1')[-2..-1] - @canvas.scale('I14L_1', ox, oy, sc, sc) - draw14a('L') - - # Paper going up - sc = 0.35 + 0.05*step - sc = 1/sc - - ox, oy = @canvas.coords('I14R_0') - @canvas.scale('I14R_0', ox, oy, sc, sc) - ox, oy = @canvas.coords('I14R_1')[-2..-1] - @canvas.scale('I14R_1', ox, oy, sc, sc) - draw14a('R') - - return((step == 10)? 3: 1) - end - - # Light beam - def draw15 - color = @C['15a'] - xy = [824, 599, 824, 585, 820, 585, 829, 585] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I15a') - xy = [789, 599, 836, 643] - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>3) - xy = [778, 610, 788, 632] - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>3) - xy = [766, 617, 776, 625] - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>3) - - xy = [633, 600, 681, 640] - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>3) - xy = [635, 567, 657, 599] - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>2) - xy = [765, 557, 784, 583] - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>2) - - sine([658, 580, 765, 580], 3, 15, - :tag=>'I15_s', :fill=>@C['fg'], :width=>3) - end - - def move15a - color = @C['15b'] - @canvas.scale('I15a', 824, 599, 1, 0.3) # Button down - xy = [765, 621, 681, 621] - TkcLine.new(@canvas, xy, :dash=>'-', :width=>3, :fill=>color, :tag=>'I15') - end - - def move15(step = nil) - step = get_step(15, step) - - numsteps = 6 - - if step == numsteps + 2 - move_abs('I15_star', [-100, -100]) - return 2 - end - if step == 0 # Break the light beam - sparkle([-100, -100], 'I15_star') - xy = [765, 621, 745, 621] - @canvas.coords('I15', xy) - return 1 - end - x0, y0 = anchor('I15_s', :w) - x1, y1 = anchor('I15_s', :e) - x = x0 + (x1 - x0) * (step - 1) / numsteps.to_f - move_abs('I15_star', [x, y0]) - return 1 - end - - # Bell - def draw16 - color = @C['16'] - xy = [722, 485, 791, 556] - TkcRectangle.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], :width=>3) - xy = box(752, 515, 25) # Bell - TkcOval.new(@canvas, xy, :fill=>color, :outline=>'black', - :tag=>'I16b', :width=>2) - xy = box(752, 515, 5) # Bell button - TkcOval.new(@canvas, xy, :fill=>'black', :outline=>'black', :tag=>'I16b') - - xy = [784, 523, 764, 549] # Clapper - TkcLine.new(@canvas, xy, :width=>3, :tag=>'I16c', :fill=>@C['fg']) - xy = box(784, 523, 4) - TkcOval.new(@canvas, xy, :fill=>@C['fg'], :outline=>@C['fg'], :tag=>'I16d') - end - - def move16(step = nil) - step = get_step(16, step) - - # Note: we never stop - ox, oy = [760, 553] - if (step & 1).nonzero? - beta = 12 - @canvas.move('I16b', 3, 0) - else - beta = -12 - @canvas.move('I16b', -3, 0) - end - rotate_item('I16c', ox, oy, beta) - rotate_item('I16d', ox, oy, beta) - - return ((step == 1)? 3: 1) - end - - # Cat - def draw17 - color = @C['17'] - - xy = [584, 556, 722, 556] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - xy = [584, 485, 722, 485] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - - xy = [664, 523, 717, 549] # Body - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :fill=>color, :width=>3, - :style=>:chord, :start=>128, :extent=>260, :tag=>'I17') - - xy = [709, 554, 690, 543] # Paw - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>color, - :width=>3, :tag=>'I17') - xy = [657, 544, 676, 555] - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>color, - :width=>3, :tag=>'I17') - - xy = box(660, 535, 15) # Lower face - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc, - :start=>150, :extent=>240, :tag=>'I17_') - TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :width=>1, - :style=>:chord, :start=>150, :extent=>240, :tag=>'I17_') - xy = [674, 529, 670, 513, 662, 521, 658, 521, 650, 513, 647, 529] # Ears - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - TkcPolygon.new(@canvas, xy, :fill=>color, :outline=>'', :width=>1, - :tag=>['I17_', 'I17_c']) - xy = [652, 542, 628, 539] # Whiskers - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - xy = [652, 543, 632, 545] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - xy = [652, 546, 632, 552] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - - xy = [668, 543, 687, 538] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, - :tag=>['I17_', 'I17_w']) - xy = [668, 544, 688, 546] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, - :tag=>['I17_', 'I17_w']) - xy = [668, 547, 688, 553] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, - :tag=>['I17_', 'I17_w']) - - xy = [649, 530, 654, 538, 659, 530] # Left eye - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, - :smooth=>true, :tag=>'I17') - xy = [671, 530, 666, 538, 661, 530] # Right eye - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, - :smooth=>true, :tag=>'I17') - xy = [655, 543, 660, 551, 665, 543] # Mouth - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, - :smooth=>true, :tag=>'I17') - end - - def move17(step = nil) - step = get_step(17, step) - - if step == 0 - @canvas.delete('I17') # Delete most of the cat - xy = [655, 543, 660, 535, 665, 543] # Mouth - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, - :smooth=>true, :tag=>'I17_') - xy = box(654, 530, 4) # Left eye - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :fill=>'', - :tag=>'I17_') - xy = box(666, 530, 4) # Right eye - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :fill=>'', - :tag=>'I17_') - - @canvas.move('I17_', 0, -20) # Move face up - xy = [652, 528, 652, 554] # Front leg - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - xy = [670, 528, 670, 554] # 2nd front leg - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - - xy = [ # Body - 675, 506, 694, 489, 715, 513, 715, 513, 715, 513, 716, 525, - 716, 525, 716, 525, 706, 530, 695, 530, 679, 535, 668, 527, - 668, 527, 668, 527, 675, 522, 676, 517, 677, 512 - ] - TkcPolygon.new(@canvas, xy, :fill=>@canvas.itemcget('I17_c', :fill), - :outline=>@C['fg'], :width=>3, :smooth=>true, - :tag=>'I17_') - xy = [716, 514, 716, 554] # Back leg - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - xy = [694, 532, 694, 554] # 2nd back leg - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - xy = [715, 514, 718, 506, 719, 495, 716, 488] # Tail - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, - :smooth=>true, :tag=>'I17_') - - @canvas.raise('I17w') # Make whiskers visible - @canvas.move('I17_', -5, 0) # Move away from the wall a bit - return 2 - end - return 0 - end - - # Sling shot - def draw18 - color = @C['18'] - xy = [721, 506, 627, 506] # Sling hold - TkcLine.new(@canvas, xy, :width=>4, :fill=>@C['fg'], :tag=>'I18') - - xy = [607, 500, 628, 513] # Sling rock - TkcOval.new(@canvas, xy, :fill=>color, :outline=>'', :tag=>'I18a') - - xy = [526, 513, 606, 507, 494, 502] # Sling band - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>4, :tag=>'I18b') - xy = [485, 490, 510, 540, 510, 575, 510, 540, 535, 491] # Sling - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>6) - end - - def move18(step = nil) - step = get_step(18, step) - - pos = [ - [587, 506], [537, 506], [466, 506], [376, 506], [266, 506, :x], - [136, 506], [16, 506], [-100, -100] - ] - - b = [] - b[0] = [490, 502, 719, 507, 524, 512] # Band collapsing - b[1] = [ - 491, 503, 524, 557, 563, 505, 559, 496, 546, 506, 551, 525, - 553, 536, 538, 534, 532, 519, 529, 499 - ] - b[2] = [ - 491, 503, 508, 563, 542, 533, 551, 526, 561, 539, 549, 550, 530, 500 - ] - b[3] = [ - 491, 503, 508, 563, 530, 554, 541, 562, 525, 568, 519, 544, 530, 501 - ] - - return 0 if step >= pos.length - - if step == 0 - @canvas.delete('I18') - @canvas.itemconfigure('I18b', :smooth=>true) - end - if b[step] - @canvas.coords('I18b', b[step]) - end - - where = pos[step] - move_abs('I18a', where) - return 3 if where[2] == :x - return 1 - end - - # Water pipe - def draw19 - color = @C['19'] - xx = [[249, 181], [155, 118], [86, 55], [22, 0]] - xx.each{|x1, x2| - TkcRectangle.new(@canvas, x1, 453, x2, 467, - :fill=>color, :outline=>'', :tag=>'I19') - TkcLine.new(@canvas, x1, 453, x2, 453, - :fill=>@C['fg'], :width=>1) # Pipe top - TkcLine.new(@canvas, x1, 467, x2, 467, - :fill=>@C['fg'], :width=>1) # Pipe bottom - } - @canvas.raise('I11i') - - xy = box(168, 460, 16) # Bulge by the joint - TkcOval.new(@canvas, xy, :fill=>color, :outline=>'') - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, :style=>:arc, - :start=>21, :extent=>136) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, :style=>:arc, - :start=>-21, :extent=>-130) - - xy = [249, 447, 255, 473] # First joint 26x6 - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1) - - xy = box(257, 433, 34) # Bend up - TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :width=>1, - :style=>:pie, :start=>0, :extent=>-91) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, - :style=>:arc, :start=>0, :extent=>-90) - xy = box(257, 433, 20) - TkcArc.new(@canvas, xy, :outline=>'', :fill=>@C['bg'], :width=>1, - :style=>:pie, :start=>0, :extent=>-92) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, - :style=>:arc, :start=>0, :extent=>-90) - xy = box(257, 421, 34) # Bend left - TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :width=>1, - :style=>:pie, :start=>0, :extent=>91) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, - :style=>:arc, :start=>0, :extent=>90) - xy = box(257, 421, 20) - TkcArc.new(@canvas, xy, :outline=>'', :fill=>@C['bg'], :width=>1, - :style=>:pie, :start=>0, :extent=>90) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, - :style=>:arc, :start=>0, :extent=>90) - xy = box(243, 421, 34) # Bend down - TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :width=>1, - :style=>:pie, :start=>90, :extent=>90) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, - :style=>:arc, :start=>90, :extent=>90) - xy = box(243, 421, 20) - TkcArc.new(@canvas, xy, :outline=>'', :fill=>@C['bg'], :width=>1, - :style=>:pie, :start=>90, :extent=>90) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, - :style=>:arc, :start=>90, :extent=>90) - - xy = [270, 427, 296, 433] # 2nd joint bottom - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1) - xy = [270, 421, 296, 427] # 2nd joint top - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1) - xy = [249, 382, 255, 408] # Third joint right - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1) - xy = [243, 382, 249, 408] # Third joint left - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1) - xy = [203, 420, 229, 426] # Last joint - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1) - - xy = box(168, 460, 6) # Handle joint - TkcOval.new(@canvas, xy, :fill=>@C['fg'], :outline=>'', :tag=>'I19a') - xy = [168, 460, 168, 512] # Handle bar - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>5, :tag=>'I19b') - end - - def move19(step = nil) - step = get_step(19, step) - - angles = [30, 30, 30] - return 2 if step == angles.length - ox, oy = centroid('I19a') - rotate_item('I19b', ox, oy, angles[step]) - - return 1 - end - - # Water pouring - def draw20 - # do nothing - end - - def move20(step = nil) - step = get_step(20, step) - - pos = [451, 462, 473, 484, 496, 504, 513, 523, 532] - freq = [20, 40, 40, 40, 40, 40, 40, 40, 40] - pos = [ - [451, 20], [462, 40], [473, 40], [484, 40], [496, 40], - [504, 40], [513, 40], [523, 40], [532, 40, :x] - ] - return 0 if step >= pos.length - - @canvas.delete('I20') - where = pos[step] - y, f = where - h20(y, f) - return 3 if where[2] == :x - return 1 - end - - def h20(y, f) - color = @C['20'] - @canvas.delete('I20') - - sine([208, 428, 208, y], 4, f, :tag=>['I20', 'I20s'], - :width=>3, :fill=>color, :smooth=>true) - TkcLine.new(@canvas, @canvas.coords('I20s'), :width=>3, - :fill=>color, :smooth=>1, :tag=>['I20', 'I20a']) - TkcLine.new(@canvas, @canvas.coords('I20s'), :width=>3, - :fill=>color, :smooth=>1, :tag=>['I20', 'I20b']) - @canvas.move('I20a', 8, 0) - @canvas.move('I20b', 16, 0) - end - - # Bucket - def draw21 - color = @C['21'] - xy = [217, 451, 244, 490] # Right handle - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, :tag=>'I21_a') - xy = [201, 467, 182, 490] # Left handle - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, :tag=>'I21_a') - - xy = [245, 490, 237, 535] # Right side - xy2 = [189, 535, 181, 490] # Left side - TkcPolygon.new(@canvas, xy + xy2, :fill=>color, :outline=>'', - :tag=>['I21', 'I21f']) - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, :tag=>'I21') - TkcLine.new(@canvas, xy2, :fill=>@C['fg'], :width=>2, :tag=>'I21') - - xy = [182, 486, 244, 498] # Top - TkcOval.new(@canvas, xy, :fill=>color, :outline=>'', :width=>2, - :tag=>['I21', 'I21f']) - TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], :width=>2, - :tag=>['I21', 'I21t']) - xy = [189, 532, 237, 540] # Bottom - TkcOval.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>2, - :tag=>['I21', 'I21b']) - end - - def move21(step = nil) - step = get_step(21, step) - - numsteps = 30 - return 0 if step >= numsteps - - x1, y1, x2, y2 = @canvas.coords('I21b') - # lx1, ly1, lx2, ly2 = @canvas.coords('I21t') - lx1, ly1, lx2, ly2 = [183, 492, 243, 504] - - f = step / numsteps.to_f - y2 = y2 - 3 - xx1 = x1 + (lx1 - x1) * f - yy1 = y1 + (ly1 - y1) * f - xx2 = x2 + (lx2 - x2) * f - yy2 = y2 + (ly2 - y2) * f - - @canvas.itemconfigure('I21b', :fill=>@C['20']) - @canvas.delete('I21w') - TkcPolygon.new(@canvas, x2, y2, x1, y1, xx1, yy1, xx2, yy1, - :tag=>['I21', 'I21w'], :outline=>'', :fill=>@C['20']) - @canvas.lower('I21w', 'I21') - @canvas.raise('I21b') - @canvas.lower('I21f') - - return((step == numsteps - 1)? 3: 1) - end - - # Bucket drop - def draw22 - # do nothing - end - - def move22(step = nil) - step = get_step(22, step) - pos = [[213, 513], [213, 523], [213, 543, :x], [213, 583], [213, 593]] - - @canvas.itemconfigure('I21f', :fill=>@C['22']) if step == 0 - return 0 if step >= pos.length - where = pos[step] - move_abs('I21', where) - h20(where[1], 40) - @canvas.delete('I21_a') # Delete handles - - return 3 if where[2] == :x - return 1 - end - - # Blow dart - def draw23 - color = @C['23a'] - color2 = @C['23b'] - color3 = @C['23c'] - - xy = [185, 623, 253, 650] # Block - TkcRectangle.new(@canvas, xy, :fill=>'black', :outline=>@C['fg'], - :width=>2, :tag=>'I23a') - xy = [187, 592, 241, 623] # Balloon - TkcOval.new(@canvas, xy, :outline=>'', :fill=>color, :tag=>'I23b') - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :tag=>'I23b', - :style=>:arc, :start=>12, :extent=>336) - xy = [239, 604, 258, 589, 258, 625, 239, 610] # Balloon nozzle - TkcPolygon.new(@canvas, xy, :outline=>'', :fill=>color, :tag=>'I23b') - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I23b') - - xy = [285, 611, 250, 603] # Dart body - TkcOval.new(@canvas, xy, :fill=>color2, :outline=>@C['fg'], - :width=>3, :tag=>'I23d') - xy = [249, 596, 249, 618, 264, 607, 249, 596] # Dart tail - TkcPolygon.new(@canvas, xy, :fill=>color3, :outline=>@C['fg'], - :width=>3, :tag=>'I23d') - xy = [249, 607, 268, 607] # Dart detail - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I23d') - xy = [285, 607, 305, 607] # Dart needle - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I23d') - end - - def move23(step = nil) - step = get_step(23, step) - - pos = [ - [277, 607], [287, 607], [307, 607, :x], [347, 607], [407, 607], - [487, 607], [587, 607], [687, 607], [787, 607], [-100, -100] - ] - - return 0 if step >= pos.length - if step <= 1 - ox, oy = anchor('I23a', :n) - @canvas.scale('I23b', ox, oy, 0.9, 0.5) - end - where = pos[step] - move_abs('I23d', where) - - return 3 if where[2] == :x - return 1 - end - - # Balloon - def draw24 - color = @C['24a'] - xy = [366, 518, 462, 665] # Balloon - TkcOval.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], - :width=>3, :tag=>'I24') - xy = [414, 666, 414, 729] # String - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I24') - xy = [410, 666, 404, 673, 422, 673, 418, 666] # Nozzle - TkcPolygon.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], - :width=>3, :tag=>'I24') - - xy = [387, 567, 390, 549, 404, 542] # Reflections - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :smooth=>true, - :width=>2, :tag=>'I24') - xy = [395, 568, 399, 554, 413, 547] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :smooth=>true, - :width=>2, :tag=>'I24') - xy = [403, 570, 396, 555, 381, 553] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :smooth=>true, - :width=>2, :tag=>'I24') - xy = [408, 564, 402, 547, 386, 545] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :smooth=>true, - :width=>2, :tag=>'I24') - end - - def move24(step = nil) - step = get_step(24, step) - - return 0 if step > 4 - return 2 if step == 4 - - if step == 0 - @canvas.delete('I24') # Exploding balloon - xy = [ - 347, 465, 361, 557, 271, 503, 272, 503, 342, 574, 259, 594, - 259, 593, 362, 626, 320, 737, 320, 740, 398, 691, 436, 738, - 436, 739, 476, 679, 528, 701, 527, 702, 494, 627, 548, 613, - 548, 613, 480, 574, 577, 473, 577, 473, 474, 538, 445, 508, - 431, 441, 431, 440, 400, 502, 347, 465, 347, 465 - ] - TkcPolygon.new(@canvas, xy, :tag=>'I24', :fill=>@C['24b'], - :outline=>@C['24a'], :width=>10, :smooth=>true) - msg = Tk.subst(@S['message'].value) - TkcText.new(@canvas, centroid('I24'), :text=>msg, :tag=>['I24', 'I24t'], - :justify=>:center, :font=>['Times Roman', 18, :bold]) - return 1 - end - - @canvas.itemconfigure('I24t', :font=>['Times Roman', 18 + 6*step, :bold]) - @canvas.move('I24', 0, -60) - ox, oy = centroid('I24') - @canvas.scale('I24', ox, oy, 1.25, 1.25) - return 1 - end - - # Displaying the message - def move25(step = nil) - step = get_step(25, step) - - if step == 0 - @XY['25'] = Tk::Clock.clicks(:milliseconds) - return 1 - end - elapsed = Tk::Clock.clicks(:milliseconds) - @XY['25'] - return 1 if elapsed < 5000 - return 2 - end - - # Collapsing balloon - def move26(step = nil) - step = get_step(26, step) - - if step >= 3 - @canvas.delete('I24', 'I26') - TkcText.new(@canvas, 430, 740, :anchor=>:s, :tag=>'I26', - :text=>'click to continue', - :font=>['Times Roman', 24, :bold]) - @canvas.bind('1', proc{reset}) - return 4 - end - - ox, oy = centroid('I24') - @canvas.scale('I24', ox, oy, 0.8, 0.8) - @canvas.move('I24', 0, 60) - @canvas.itemconfigure('I24t', :font=>['Times Roman', 30 - 6*step, :bold]) - return 1 - end - - ################################################################ - # - # Helper functions - # - def box(x, y, r) - [x - r, y - r, x + r, y + r] - end - - def move_abs(item, xy) - x, y = xy - ox, oy = centroid(item) - dx = x - ox - dy = y - oy - @canvas.move(item, dx, dy) - end - - def rotate_item(item, ox, oy, beta) - xy = @canvas.coords(item) - xy2 = [] - 0.step(xy.length - 1, 2){|idx| - x, y = xy[idx, 2] - xy2.concat(rotate_c(x, y, ox, oy, beta)) - } - @canvas.coords(item, xy2) - end - - def rotate_c(x, y, ox, oy, beta) - # rotates vector (ox,oy)->(x,y) by beta degrees clockwise - - x -= ox # Shift to origin - y -= oy - - beta = beta * Math.atan(1) * 4 / 180.0 # Radians - xx = x * Math.cos(beta) - y * Math.sin(beta) # Rotate - yy = x * Math.sin(beta) + y * Math.cos(beta) - - xx += ox # Shift back - yy += oy - - [xx, yy] - end - - def reset - draw_all - @canvas.bind_remove('1') - @S['mode'].value = :MSTART - @S['active'] = [0] - end - - # Each Move## keeps its state info in STEP, this retrieves and increments it - def get_step(who, step) - if step - @STEP[who] = step - else - if !@STEP.exist?(who) || @STEP[who] == "" - @STEP[who] = 0 - else - @STEP[who] += 1 - end - end - @STEP[who] - end - - def reset_step - @S['cnt'].value = 0 - @STEP.keys.each{|k| @STEP[k] = ''} - end - - def sine(xy0, amp, freq, opts = {}) - x0, y0, x1, y1 = xy0 - step = 2 - xy = [] - if y0 == y1 # Horizontal - x0.step(x1, step){|x| - beta = (x - x0) * 2 * Math::PI / freq - y = y0 + amp * Math.sin(beta) - xy << x << y - } - else - y0.step(y1, step){|y| - beta = (y - y0) * 2 * Math::PI / freq - x = x0 + amp * Math.sin(beta) - xy << x << y - } - end - TkcLine.new(@canvas, xy, opts) - end - - def round_rect(xy, radius, opts={}) - x0, y0, x3, y3 = xy - r = @canvas.winfo_pixels(radius) - d = 2 * r - - # Make sure that the radius of the curve is less than 3/8 size of the box! - maxr = 0.75 - if d > maxr * (x3 - x0) - d = maxr * (x3 - x0) - end - if d > maxr * (y3 - y0) - d = maxr * (y3 - y0) - end - - x1 = x0 + d - x2 = x3 - d - y1 = y0 + d - y2 = y3 - d - - xy = [x0, y0, x1, y0, x2, y0, x3, y0, x3, y1, x3, y2] - xy.concat([x3, y3, x2, y3, x1, y3, x0, y3, x0, y2, x0, y1]) - return xy - end - - def round_poly(canv, xy, radii, opts) - lenXY = xy.length - lenR = radii.length - if lenXY != 2*lenR - raise "wrong number of vertices and radii" - end - - knots = [] - x0 = xy[-2]; y0 = xy[-1] - x1 = xy[0]; y1 = xy[1] - xy << xy[0] << xy[1] - - 0.step(lenXY - 1, 2){|i| - radius = radii[i/2] - r = canv.winfo_pixels(radius) - - x2 = xy[i+2]; y2 = xy[i+3] - z = _round_poly2(x0, y0, x1, y1, x2, y2, r) - knots.concat(z) - - x0 = x1; y0 = y1 - x1 = x2; y1 = y2 - } - TkcPolygon.new(canv, knots, {:smooth=>true}.update(opts)) - end - - def _round_poly2(x0, y0, x1, y1, x2, y2, radius) - d = 2 * radius - maxr = 0.75 - - v1x = x0 - x1 - v1y = y0 - y1 - v2x = x2 - x1 - v2y = y2 - y1 - - vlen1 = Math.sqrt(v1x*v1x + v1y*v1y) - vlen2 = Math.sqrt(v2x*v2x + v2y*v2y) - - if d > maxr * vlen1 - d = maxr * vlen1 - end - if d > maxr * vlen2 - d = maxr * vlen2 - end - - xy = [] - xy << (x1 + d * v1x / vlen1) << (y1 + d * v1y / vlen1) - xy << x1 << y1 - xy << (x1 + d * v2x / vlen2) << (y1 + d * v2y / vlen2) - - return xy - end - - def sparkle(oxy, tag) - xy = [ - [299, 283], [298, 302], [295, 314], [271, 331], - [239, 310], [242, 292], [256, 274], [281, 273] - ] - xy.each{|x, y| - TkcLine.new(@canvas, 271, 304, x, y, - :fill=>'white', :width=>3, :tag=>tag) - } - move_abs(tag, oxy) - end - - def centroid(item) - anchor(item, :c) - end - - def anchor(item, where) - x1, y1, x2, y2 = @canvas.bbox(item) - case(where) - when :n - y = y1 - when :s - y = y2 - else - y = (y1 + y2) / 2.0 - end - case(where) - when :w - x = x1 - when :e - x = x2 - else - x = (x1 + x2) / 2.0 - end - return [x, y] - end -end - -TkGoldberg_Demo.new(base_frame) diff --git a/ext/tk/sample/demos-en/hello b/ext/tk/sample/demos-en/hello deleted file mode 100644 index 5e86ad7e3e..0000000000 --- a/ext/tk/sample/demos-en/hello +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env ruby -require 'tk' - -#unless /^8\.[1-9]/ =~ Tk::TCL_VERSION && !Tk::JAPANIZED_TK -# require 'tkencoding' -#end - -TkButton.new(nil, - 'text'=>"Hello Ruby world!", - 'font'=>TkFont.new('k14'), - 'command'=>proc{print "Hello Ruby world!\n"; exit} -).pack - -Tk.mainloop diff --git a/ext/tk/sample/demos-en/hscale.rb b/ext/tk/sample/demos-en/hscale.rb deleted file mode 100644 index 05a8f39362..0000000000 --- a/ext/tk/sample/demos-en/hscale.rb +++ /dev/null @@ -1,76 +0,0 @@ -# frozen_string_literal: false -require "tkcanvas" - -if defined?($hscale_demo) && $hscale_demo - $hscale_demo.destroy - $hscale_demo = nil -end - -$hscale_demo = TkToplevel.new {|w| - title("Horizontal Scale Demonstration") - iconname("hscale") -} -positionWindow($hscale_demo) - -base_frame = TkFrame.new($hscale_demo).pack(:fill=>:both, :expand=>true) - -msg = TkLabel.new(base_frame) { - font $font - wraplength '3.5i' - justify 'left' - text "An arrow and a horizontal scale are displayed below. If you click or drag mouse button 1 in the scale, you can change the length of the arrow." -} -msg.pack('side'=>'top') - -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc { - tmppath = $hscale_demo - $hscale_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc { showCode 'hscale' } - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - - -def setWidth(w, width) - width = width + 21 - x2 = width - 30 - if x2 < 21 - x2 = 21 - end - w.coords 'poly',20,15,20,35,x2,35,x2,45,width,25,x2,5,x2,15,20,15 - w.coords 'line',20,15,20,35,x2,35,x2,45,width,25,x2,5,x2,15,20,15 -end - -TkFrame.new(base_frame) {|frame| - canvas = TkCanvas.new(frame) {|c| - width 50 - height 50 - bd 0 - highlightthickness 0 - TkcPolygon.new(c, '0', '0', '1', '1', '2', '2') { - fill 'DeepSkyBlue' - tags 'poly' - } - TkcLine.new(c, '0', '0', '1', '1', '2', '2', '0', '0') { - fill 'black' - tags 'line' - } - }.pack('side'=>'top', 'expand'=>'yes', 'anchor'=>'s', 'fill'=>'x', 'padx'=>'15') - scale = TkScale.new(frame) { - orient 'horizontal' - length 284 - from 0 - to 250 - command proc{|value| setWidth(canvas, value)} - tickinterval 50 - }.pack('side'=>'bottom', 'expand'=>'yes', 'anchor'=>'n') - scale.set 75 -}.pack('side'=>'top', 'fill'=>'x') diff --git a/ext/tk/sample/demos-en/icon.rb b/ext/tk/sample/demos-en/icon.rb deleted file mode 100644 index e0cb88ad80..0000000000 --- a/ext/tk/sample/demos-en/icon.rb +++ /dev/null @@ -1,106 +0,0 @@ -# frozen_string_literal: false -# icon.rb -# -# This demonstration script creates a toplevel window containing -# buttons that display bitmaps instead of text. -# -# iconic button widget demo (called by 'widget') -# - -# toplevel widget -if defined?($icon_demo) && $icon_demo - $icon_demo.destroy - $icon_demo = nil -end - -# demo toplevel widget -$icon_demo = TkToplevel.new {|w| - title("Iconic Button Demonstration") - iconname("icon") - positionWindow(w) -} - -base_frame = TkFrame.new($icon_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '5i' - justify 'left' - text "This window shows three ways of using bitmaps or images in radiobuttons and checkbuttons. On the left are two radiobuttons, each of which displays a bitmap and an indicator. In the middle is a checkbutton that displays a different image depending on whether it is selected or not. On the right is a checkbutton that displays a single bitmap but changes its background color to indicate whether or not it is selected. (This change is visible when the mouse pointer is not directly over the button.)" -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $icon_demo - $icon_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'icon'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# image -flagup = \ -TkBitmapImage.new('file'=>[$demo_dir,'..', - 'images','flagup.xbm'].join(File::Separator), - 'maskfile'=>\ - [$demo_dir,'..','images','flagup.xbm'].join(File::Separator)) -flagdown = \ -TkBitmapImage.new('file'=>[$demo_dir,'..', - 'images','flagdown.xbm'].join(File::Separator), - 'maskfile'=>\ - [$demo_dir,'..', - 'images','flagdown.xbm'].join(File::Separator)) - -# create variable -letters = TkVariable.new - -# frame -TkFrame.new(base_frame, 'borderwidth'=>10){|w| - TkFrame.new(w) {|f| - # TkRadioButton.new(f){ - Tk::RadioButton.new(f){ - bitmap '@' + [$demo_dir,'..', - 'images','letters.xbm'].join(File::Separator) - variable letters - value 'full' - }.pack('side'=>'top', 'expand'=>'yes') - - # TkRadioButton.new(f){ - Tk::RadioButton.new(f){ - bitmap '@' + [$demo_dir,'..', - 'images','noletter.xbm'].join(File::Separator) - variable letters - value 'empty' - }.pack('side'=>'top', 'expand'=>'yes') - - }.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'5m') - - # TkCheckButton.new(w) { - Tk::CheckButton.new(w) { - image flagdown - selectimage flagup - indicatoron 0 - selectcolor self['background'] - }.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'5m') - - # TkCheckButton.new(w) { - Tk::CheckButton.new(w) { - bitmap '@' + [$demo_dir,'..', - 'images','letters.xbm'].join(File::Separator) - indicatoron 0 - selectcolor 'SeaGreen1' - }.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'5m') - -}.pack('side'=>'top') - diff --git a/ext/tk/sample/demos-en/image1.rb b/ext/tk/sample/demos-en/image1.rb deleted file mode 100644 index c7c0989df8..0000000000 --- a/ext/tk/sample/demos-en/image1.rb +++ /dev/null @@ -1,66 +0,0 @@ -# frozen_string_literal: false -## image1.rb -# -# This demonstration script displays two image widgets. -# -# two image widgets demo (called by 'widget') -# - -# toplevel widget -if defined?($image1_demo) && $image1_demo - $image1_demo.destroy - $image1_demo = nil -end - -# demo toplevel widget -$image1_demo = TkToplevel.new {|w| - title('Image Demonstration #1') - iconname("Image1") - positionWindow(w) -} - -base_frame = TkFrame.new($image1_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "This demonstration displays two images, each in a separate label widget." -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $image1_demo - $image1_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'image1'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# image -image1a = \ -TkPhotoImage.new('file'=>[$demo_dir,'..', - 'images','earth.gif'].join(File::Separator)) -image1b = \ -TkPhotoImage.new('file'=>[$demo_dir,'..', - 'images','earthris.gif'].join(File::Separator)) - -# label -#[ TkLabel.new(base_frame, 'image'=>image1a, 'bd'=>1, 'relief'=>'sunken'), -# TkLabel.new(base_frame, 'image'=>image1b, 'bd'=>1, 'relief'=>'sunken') -#].each{|w| w.pack('side'=>'top', 'padx'=>'.5m', 'pady'=>'.5m')} -[ Tk::Label.new(base_frame, 'image'=>image1a, 'bd'=>1, 'relief'=>'sunken'), - Tk::Label.new(base_frame, 'image'=>image1b, 'bd'=>1, 'relief'=>'sunken') -].each{|w| w.pack('side'=>'top', 'padx'=>'.5m', 'pady'=>'.5m')} - diff --git a/ext/tk/sample/demos-en/image2.rb b/ext/tk/sample/demos-en/image2.rb deleted file mode 100644 index dfb993e434..0000000000 --- a/ext/tk/sample/demos-en/image2.rb +++ /dev/null @@ -1,108 +0,0 @@ -# frozen_string_literal: false -# image2.rb -# -# This demonstration script creates a simple collection of widgets -# that allow you to select and view images in a Tk label. -# -# widget demo 'load image' (called by 'widget') -# - -# toplevel widget -if defined?($image2_demo) && $image2_demo - $image2_demo.destroy - $image2_demo = nil -end - -# demo toplevel widget -$image2_demo = TkToplevel.new {|w| - title('Image Demonstration #2') - iconname("Image2") - positionWindow(w) -} - -base_frame = TkFrame.new($image2_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "This demonstration allows you to view images using a Tk \"photo\" image. First type a directory name in the listbox, then press Enter to load the directory into the listbox. Then double-click on a file name in the listbox to see that image." -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $image2_demo - $image2_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'image2'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# create variable -$dirName = TkVariable.new([$demo_dir,'..','images'].join(File::Separator)) - -# image -$image2a = TkPhotoImage.new - -# -TkLabel.new(base_frame, 'text'=>'Directory:')\ -.pack('side'=>'top', 'anchor'=>'w') - -image2_e = TkEntry.new(base_frame) { - width 30 - textvariable $dirName -}.pack('side'=>'top', 'anchor'=>'w') - -TkFrame.new(base_frame, 'height'=>'3m', 'width'=>20)\ -.pack('side'=>'top', 'anchor'=>'w') - -TkLabel.new(base_frame, 'text'=>'File:')\ -.pack('side'=>'top', 'anchor'=>'w') - -TkFrame.new(base_frame){|w| - s = TkScrollbar.new(w) - l = TkListbox.new(w) { - width 20 - height 10 - yscrollcommand proc{|first,last| s.set first,last} - } - s.command(proc{|*args| l.yview(*args)}) - l.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y') - s.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y') - #l.insert(0,'earth.gif', 'earthris.gif', 'mickey.gif', 'teapot.ppm') - l.insert(0,'earth.gif', 'earthris.gif', 'teapot.ppm') - l.bind('Double-1', proc{|x,y| loadImage $image2a,l,x,y}, '%x %y') - - image2_e.bind 'Return', proc{loadDir l} - -}.pack('side'=>'top', 'anchor'=>'w') - -# image -[ TkFrame.new(base_frame, 'height'=>'3m', 'width'=>20), - TkLabel.new(base_frame, 'text'=>'Image:'), - TkLabel.new(base_frame, 'image'=>$image2a) -].each{|w| w.pack('side'=>'top', 'anchor'=>'w')} - -# -def loadDir(w) - w.delete(0,'end') - Dir.glob([$dirName,'*'].join(File::Separator)).sort.each{|f| - w.insert('end',File.basename(f)) - } -end - -def loadImage(img,w,x,y) - img.file([$dirName, w.get("@#{x},#{y}")].join(File::Separator)) -end - diff --git a/ext/tk/sample/demos-en/image3.rb b/ext/tk/sample/demos-en/image3.rb deleted file mode 100644 index 9b2be20073..0000000000 --- a/ext/tk/sample/demos-en/image3.rb +++ /dev/null @@ -1,126 +0,0 @@ -# frozen_string_literal: false -# image3.rb -# -# This demonstration script creates a simple collection of widgets -# that allow you to select and view images in a Tk label. -# -# widget demo 'load image' (called by 'widget') -# - -# toplevel widget -if defined?($image3_demo) && $image3_demo - $image3_demo.destroy - $image3_demo = nil -end - -# demo toplevel widget -$image3_demo = TkToplevel.new {|w| - title('Image Demonstration #3') - iconname("Image3") - positionWindow(w) -} - -base_frame = TkFrame.new($image3_demo).pack(:fill=>:both, :expand=>true) - -# -def loadDir3(w) - w.delete(0,'end') - Dir.glob([$dirName,'*'].join(File::Separator)).sort.each{|f| - w.insert('end',File.basename(f)) - } -end - -# selectAndLoadDir3 -- -# This procedure pops up a dialog to ask for a directory to load into -# the listbox and (if the user presses OK) reloads the directory -# listbox from the directory named in the demo's entry. -# -# Arguments: -# w - Name of the toplevel window of the demo. -def selectAndLoadDir3(w, lbox) - dir = Tk.chooseDirectory(:initialdir=>$dirName.value, - :parent=>w, :mustexist=>true) - if dir.length > 0 - $dirName.value = dir - loadDir3(lbox) - end -end - -def loadImage(w,x,y) - $image3a.file([$dirName, w.get("@#{x},#{y}")].join(File::Separator)) -end - - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "This demonstration allows you to view images using a Tk \"photo\" image. First type a directory name in the listbox, then type Return to load the directory into the listbox. Then double-click on a file name in the listbox to see that image." -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $image3_demo - $image3_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'image3'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# variable -$dirName = TkVariable.new([$demo_dir,'..','images'].join(File::Separator)) - -# image -begin - $image3a.delete -rescue -end -$image3a = TkPhotoImage.new - -# -image3_f = TkFrame.new(base_frame).pack(:fill=>:both, :expand=>true) - -image3_df = TkLabelFrame.new(base_frame, :text=>'Directory:') - -image3_ff = TkLabelFrame.new(base_frame, :text=>'File:', - :padx=>'2m', :pady=>'2m') -image3_lbx = TkListbox.new(image3_ff, :width=>20, :height=>10) { - pack(:side=>:left, :fill=>:y, :expand=>true) - yscrollbar(TkScrollbar.new(image3_ff).pack(:side=>:left, :fill=>:y, - :expand=>true)) - insert(0, *(%w(earth.gif earthris.gif teapot.ppm))) - bind('Double-1', proc{|x,y| loadImage(self, x, y)}, '%x %y') -} - -image3_ent = TkEntry.new(image3_df, :width=>30, :textvariable=>$dirName){ - pack(:side=>:left, :fill=>:both, :padx=>'2m', :pady=>'2m', :expand=>true) - bind('Return', proc{loadDir3(image3_lbx)}) -} - -TkButton.new(image3_df, :pady=>0, :padx=>'2m', :text=>"Select Dir.", - :command=>proc{selectAndLoadDir3(image3_ent, image3_lbx)}) { - pack(:side=>:left, :fill=>:y, :padx=>[0, '2m'], :pady=>'2m') -} - -image3_if = TkLabelFrame.new(base_frame, :text=>'Image:') {|f| - # TkLabel.new(f, :image=>$image3a).pack(:padx=>'2m', :pady=>'2m') - Tk::Label.new(f, :image=>$image3a).pack(:padx=>'2m', :pady=>'2m') -} - -Tk.grid(image3_df, '-', - :sticky=>:ew, :padx=>'1m', :pady=>'1m', :in=>image3_f) -Tk.grid(image3_ff, image3_if, - :sticky=>:nw, :padx=>'1m', :pady=>'1m', :in=>image3_f) -TkGrid.columnconfigure(image3_f, 1, :weight=>1) - diff --git a/ext/tk/sample/demos-en/items.rb b/ext/tk/sample/demos-en/items.rb deleted file mode 100644 index d6de1e557e..0000000000 --- a/ext/tk/sample/demos-en/items.rb +++ /dev/null @@ -1,382 +0,0 @@ -# frozen_string_literal: false -# items.rb -# -# This demonstration script creates a canvas that displays the -# canvas item types. -# -# canvas item types widget demo (called by 'widget') -# - -# toplevel widget -if defined?($items_demo) && $items_demo - $items_demo.destroy - $items_demo = nil -end - -# demo toplevel widget -$items_demo = TkToplevel.new {|w| - title("Canvas Item Demonstration") - iconname("Items") - positionWindow(w) -} - -base_frame = TkFrame.new($items_demo).pack(:fill=>:both, :expand=>true) - -# label -TkLabel.new(base_frame) { - font $font - wraplength '5i' - justify 'left' - text "This window contains a canvas widget with examples of the various kinds of items supported by canvases. The following operations are supported:\n Button-1 drag:\tmoves item under pointer.\n Button-2 drag:\trepositions view.\n Button-3 drag:\tstrokes out area.\n Ctrl+f:\t\tprints items under area." -}.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $items_demo - $items_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'items'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -cvs = nil -TkFrame.new(base_frame) {|cf| - # canvas - cvs = TkCanvas.new(cf) {|c| - focus - scrollregion '0c 0c 30c 24c' - width '15c' - height '10c' - relief 'sunken' - borderwidth 2 - - hs = TkScrollbar.new(cf) {|s| - orient 'horizontal' - command proc{|*args| c.xview(*args)} - c.xscrollcommand proc{|first,last| s.set first,last} - } - - vs = TkScrollbar.new(cf) {|s| - command proc{|*args| c.yview(*args)} - c.yscrollcommand proc{|first,last| s.set first,last} - } - - if $tk_version =~ /^4\.[01]/ - hs.pack('side'=>'bottom', 'fill'=>'x') - vs.pack('side'=>'right', 'fill'=>'y') - c.pack('in'=>cf, 'expand'=>'yes', 'fill'=>'both') - - else - c.grid('in'=>cf, 'row'=>0, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - vs.grid('row'=>0, 'column'=>1, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - hs.grid('row'=>1, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - TkGrid.rowconfigure(cf, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure(cf, 0, 'weight'=>1, 'minsize'=>0) - - end - - } -}.pack('side'=>'top', 'fill'=>'both', 'expand'=>'yes') - -# Display a 3x3 rectangular grid -TkcRectangle.new(cvs, '0c', '0c', '30c', '24c', 'width'=>2) -TkcLine.new(cvs, '0c', '8c', '30c', '8c', 'width'=>2) -TkcLine.new(cvs, '0c', '16c', '30c', '16c', 'width'=>2) -TkcLine.new(cvs, '10c', '0c', '10c', '24c', 'width'=>2) -TkcLine.new(cvs, '20c', '0c', '20c', '24c', 'width'=>2) - -if $tk_version =~ /^4.*/ - font1 = '-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*' - font2 = '-Adobe-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*' -else - font1 = 'Helvetica 12' - font2 = 'Helvetica 24 bold' -end -if TkWinfo.depth($root).to_i > 1 - blue = 'DeepSkyBlue3' - red = 'red' - bisque = 'bisque3' - green = 'SeaGreen3' -else - blue = 'black' - red = 'black' - bisque = 'black' - green = 'black' -end - -# tag -$tag_item = TkcGroup.new(cvs) - -# Set up demos within each of the areas of the grid. -TkcText.new(cvs, '5c', '.2c', 'text'=>'Lines', 'anchor'=>'n') -TkcLine.new(cvs, '1c', '1c', '3c', '1c', '1c', '4c', '3c', '4c', - 'width'=>2, 'fill'=>blue, 'capstyle'=>'butt', - 'join'=>'miter', 'tags'=>$tag_item ) -TkcLine.new(cvs, '4.67c','1c','4.67c','4c', 'arrow'=>'last', 'tags'=>$tag_item) -TkcLine.new(cvs, '6.33c','1c','6.33c','4c', 'arrow'=>'both', 'tags'=>$tag_item) -TkcLine.new(cvs, '5c','6c','9c','6c','9c','1c','8c','1c','8c','4.8c','8.8c', - '4.8c','8.8c','1.2c','8.2c','1.2c','8.2c','4.6c','8.6c','4.6c', - '8.6c','1.4c','8.4c','1.4c','8.4c','4.4c', - 'width'=>3, 'fill'=>red, 'tags'=>$tag_item ) -TkcLine.new(cvs, '1c','5c','7c','5c','7c','7c','9c','7c', 'width'=>'.5c', - 'stipple'=>'@'+[$demo_dir,'..', - 'images','gray25.xbm'].join(File::Separator), - 'arrow'=>'both', 'arrowshape'=>'15 15 7', 'tags'=>$tag_item ) -TkcLine.new(cvs, '1c','7c','1.75c','5.8c','2.5c','7c','3.25c','5.8c','4c','7c', - 'width'=>'.5c', 'capstyle'=>'round', 'join'=>'round', - 'tags'=>$tag_item ) - -TkcText.new(cvs, '15c', '.2c', - 'text'=>'Curves (smoothed lines)', 'anchor'=>'n') -TkcLine.new(cvs, '11c','4c','11.5c','1c','13.5c','1c','14c','4c', - 'smooth'=>'on', 'fill'=>blue, 'tags'=>$tag_item ) -TkcLine.new(cvs, '15.5c','1c','19.5c','1.5c','15.5c','4.5c','19.5c','4c', - 'smooth'=>'on', 'arrow'=>'both', 'width'=>3, 'tags'=>$tag_item ) -TkcLine.new(cvs, '12c','6c','13.5c','4.5c','16.5c','7.5c','18c','6c', - '16.5c','4.5c','13.5c','7.5c','12c','6c', - 'smooth'=>'on', 'width'=>'3m', 'capstyle'=>'round', - 'stipple'=>'@'+[$demo_dir, '..', - 'images', 'gray25.xbm'].join(File::Separator), - 'fill'=>red, 'tags'=>$tag_item ) - -TkcText.new(cvs, '25c', '.2c', 'text'=>'Polygons', 'anchor'=>'n') -TkcPolygon.new(cvs, '21c','1.0c','22.5c','1.75c','24c','1.0c','23.25c','2.5c', - '24c','4.0c','22.5c','3.25c','21c','4.0c','21.75c','2.5c', - 'fill'=>'green', 'outline'=>'black', 'width'=>4, - 'tags'=>$tag_item ) -TkcPolygon.new(cvs, '25c','4c','25c','4c','25c','1c','26c','1c','27c','4c', - '28c','1c','29c','1c','29c','4c','29c','4c', - 'fill'=>red, 'smooth'=>'on', 'tags'=> $tag_item) -TkcPolygon.new(cvs, '22c','4.5c','25c','4.5c','25c','6.75c','28c','6.75c', - '28c','5.25c','24c','5.25c','24c','6.0c','26c','6c','26c', - '7.5c','22c','7.5c', - 'stipple'=>'@' + [$demo_dir, '..', - 'images', 'gray25.xbm'].join(File::Separator), - 'outline'=>'black', 'tags'=>$tag_item ) - -TkcText.new(cvs, '5c', '8.2c', 'text'=>'Rectangles', 'anchor'=>'n') -TkcRectangle.new(cvs, '1c','9.5c','4c','12.5c', - 'outline'=>red, 'width'=>'3m', 'tags'=>$tag_item) -TkcRectangle.new(cvs, '0.5c','13.5c','4.5c','15.5c', - 'fill'=>green, 'tags'=>$tag_item ) -TkcRectangle.new(cvs, '6c','10c','9c','15c', 'outline'=>'', - 'stipple'=>'@'+[$demo_dir,'..', - 'images','gray25.xbm'].join(File::Separator), - 'fill'=>blue, 'tags'=>$tag_item ) - -TkcText.new(cvs, '15c', '8.2c', 'text'=>'Ovals', 'anchor'=>'n') -TkcOval.new(cvs, '11c','9.5c','14c','12.5c', - 'outline'=>red, 'width'=>'3m', 'tags'=>$tag_item) -TkcOval.new(cvs, '10.5c','13.5c','14.5c','15.5c', - 'fill'=>green, 'tags'=>$tag_item ) -TkcOval.new(cvs, '16c','10c','19c','15c', 'outline'=>'', - 'stipple'=>'@'+[$demo_dir,'..', - 'images','gray25.xbm'].join(File::Separator), - 'fill'=>blue, 'tags'=>$tag_item ) - -TkcText.new(cvs, '25c', '8.2c', 'text'=>'Text', 'anchor'=>'n') -TkcRectangle.new(cvs, '22.4c','8.9c','22.6c','9.1c') -TkcText.new(cvs, '22.5c', '9c', 'anchor'=>'n', 'font'=>font1, 'width'=>'4c', - 'text'=>'A short string of text, word-wrapped, justified left, and anchored north (at the top). The rectangles show the anchor points for each piece of text.', 'tags'=>$tag_item ) -TkcRectangle.new(cvs, '25.4c','10.9c','25.6c','11.1c') -TkcText.new(cvs, '25.5c', '11c', 'anchor'=>'w', 'font'=>font1, 'fill'=>blue, - 'text'=>"Several lines,\n each centered\nindividually,\nand all anchored\nat the left edge.", 'justify'=>'center', 'tags'=>$tag_item ) -TkcRectangle.new(cvs, '24.9c','13.9c','25.1c','14.1c') -if $tk_version =~ /^4\.[01]/ - TkcText.new(cvs, '25c', '14c', 'anchor'=>'c', 'font'=>font2, 'fill'=>red, - 'stipple'=>'@' + [$demo_dir, '..', - 'images', 'grey.5'].join(File::Separator), - 'text'=>'Stippled characters', 'tags'=>$tag_item ) -else - TkcText.new(cvs, '25c', '14c', 'anchor'=>'c', 'font'=>font2, 'fill'=>red, - 'stipple'=>'gray50', 'text'=>'Stippled characters', - 'tags'=>$tag_item ) -end - -TkcText.new(cvs, '5c', '16.2c', 'text'=>'Arcs', 'anchor'=>'n') -TkcArc.new(cvs, '0.5c','17c','7c','20c', 'fill'=>green, 'outline'=>'black', - 'start'=>45, 'extent'=>270, 'style'=>'pieslice', 'tags'=>$tag_item) -#TkcArc.new(cvs, '6.5c','17c','9.5c','20c', 'width'=>'4m', 'style'=>'arc', -# 'outline'=>blue, 'start'=>135, 'extent'=>270, -# 'outlinestipple'=>'@' + ['images', 'grey.25'].join(File::Separator), -# 'tags'=>$tag_item) -TkcArc.new(cvs, '6.5c','17c','9.5c','20c', 'width'=>'4m', 'style'=>'arc', - 'outline'=>blue, 'start'=>135, 'extent'=>270, - 'outlinestipple'=>'@'+[$demo_dir, '..', - 'images','gray25.xbm'].join(File::Separator), - 'tags'=>$tag_item) -TkcArc.new(cvs, '0.5c','20c','9.5c','24c', 'width'=>'4m', 'style'=>'pieslice', - 'fill'=>'', 'outline'=>red, 'start'=>225, 'extent'=>90, - 'tags'=>$tag_item) -TkcArc.new(cvs, '5.5c','20.5c','9.5c','23.5c', 'width'=>'4m', 'style'=>'chord', - 'fill'=>blue, 'outline'=>'', 'start'=>45, 'extent'=>270, - 'tags'=>$tag_item) - -TkcText.new(cvs, '15c', '16.2c', 'text'=>'Bitmaps', 'anchor'=>'n') -#TkcBitmap.new(cvs, '13c','20c', -# 'bitmap'=>'@' + ['images', 'face'].join(File::Separator), -# 'tags'=>$tag_item) -TkcBitmap.new(cvs, '13c','20c', - 'bitmap'=>'@' + [$demo_dir, '..', - 'images', 'face.xbm'].join(File::Separator), - 'tags'=>$tag_item) -#TkcBitmap.new(cvs, '17c','18.5c', -# 'bitmap'=>'@' + ['images', 'noletters'].join(File::Separator), -# 'tags'=>$tag_item) -TkcBitmap.new(cvs, '17c','18.5c', - 'bitmap'=>'@' + [$demo_dir, '..', - 'images', 'noletter.xbm'].join(File::Separator), - 'tags'=>$tag_item) -#TkcBitmap.new(cvs, '17c','21.5c', -# 'bitmap'=>'@' + ['images', 'letters'].join(File::Separator), -# 'tags'=>$tag_item) -# -TkcBitmap.new(cvs, '17c','21.5c') { - bitmap '@' + [$demo_dir, '..', 'images', 'letters.xbm'].join(File::Separator) - tags $tag_item -} -#TkcBitmap.new(cvs, '17c','21.5c') { -# bitmap '@' + ['images', 'letters'].join(File::Separator) -# tags $tag_item -#} - -TkcText.new(cvs, '25c', '16.2c', 'text'=>'Windows', 'anchor'=>'n') -TkButton.new(cvs) {|b| - text 'Press Me' - command proc{butPress cvs, red} - TkcWindow.new(cvs, '21c','18c', - 'window'=>b, 'anchor'=>'nw', 'tags'=>$tag_item) -} -TkEntry.new(cvs, 'width'=>20, 'relief'=>'sunken') {|e| - insert 'end', 'Edit this text' - TkcWindow.new(cvs, '21c','21c', - 'window'=>e, 'anchor'=>'nw', 'tags'=>$tag_item) -} -TkScale.new(cvs, 'from'=>0, 'to'=>100, 'length'=>'6c', 'sliderlength'=>'.4c', - 'width'=>'.5c', 'tickinterval'=>0 ) {|scl| - TkcWindow.new(cvs, '28.5c','17.5c', - 'window'=>scl, 'anchor'=>'n', 'tags'=>$tag_item) -} -TkcText.new(cvs, '21c', '17.9c', 'text'=>'Button:', 'anchor'=>'sw') -TkcText.new(cvs, '21c', '20.9c', 'text'=>'Entry:', 'anchor'=>'sw') -TkcText.new(cvs, '28.5c', '17.4c', 'text'=>'Scale:', 'anchor'=>'s') - -# Set up event bindings for canvas: -cvs.itembind($tag_item, 'Any-Enter', proc{itemEnter cvs}) -cvs.itembind($tag_item, 'Any-Leave', proc{itemLeave cvs}) -cvs.bind('2', proc{|x,y| cvs.scan_mark x,y}, '%x %y') -cvs.bind('B2-Motion', proc{|x,y| cvs.scan_dragto x,y}, '%x %y') -cvs.bind('3', proc{|x,y| itemMark cvs,x,y}, '%x %y') -cvs.bind('B3-Motion', proc{|x,y| itemStroke cvs,x,y}, '%x %y') -cvs.bind('Control-f', proc{itemsUnderArea cvs}) -cvs.bind('1', proc{|x,y| itemStartDrag cvs,x,y}, '%x %y') -cvs.bind('B1-Motion', proc{|x,y| itemDrag cvs,x,y}, '%x %y') -# Utility methods for highlighting the item under the pointer - -$restoreCmd = nil -def itemEnter (c) - if TkWinfo.depth(c).to_i == 1 - $restoreCmd = nil - return - end - type = c.itemtype('current') - if type == TkcWindow - $restoreCmd = nil - return - end - if type == TkcBitmap - bg = (c.itemconfiginfo('current', 'background'))[4] - $restoreCmd = proc{c.itemconfigure 'current', 'background', bg} - c.itemconfigure 'current', 'background', 'SteelBlue2' - return - end - fill = (c.itemconfiginfo('current', 'fill'))[4] - if (type == TkcRectangle || type == TkcOval || type == TkcArc) && fill == [] - outline = (c.itemconfiginfo('current', 'outline'))[4] - $restoreCmd = proc{c.itemconfigure 'current', 'outline', outline} - c.itemconfigure 'current', 'outline', 'SteelBlue2' - else - $restoreCmd = proc{c.itemconfigure 'current', 'fill', fill} - c.itemconfigure 'current', 'fill', 'SteelBlue2' - end -end - -def itemLeave(c) - $restoreCmd.call if $restoreCmd -end - -# Utility methods for stroking out a rectangle and printing what's -# underneath the rectangle's area. - -def itemMark(c,x,y) - $areaX1 = c.canvasx(x) - $areaY1 = c.canvasy(y) - c.delete 'area' -end - -def itemStroke(c,x,y) - x = c.canvasx(x) - y = c.canvasy(y) - if $areaX1 != x && $areaY1 != y - c.delete 'area' - c.addtag_withtag 'area', TkcRectangle.new(c, $areaX1, $areaY1, x, y, - '-outline', 'black') - $areaX2 = x - $areaY2 = y - end -end - -def itemsUnderArea(c) - area = c.find_withtag('area') - items = [] - c.find_enclosed($areaX1,$areaY1,$areaX2,$areaY2).each{|i| - items.push(i) if i.gettags.include?($tag_item) - } - print "Items enclosed by area: #{items.inspect}\n"; STDOUT.flush - items.clear - c.find_overlapping($areaX1,$areaY1,$areaX2,$areaY2).each{|i| - items.push(i) if i.gettags.include?($tag_item) - } - print "Items overlapping area: #{items.inspect}\n"; STDOUT.flush -end - -$areaX1 = 0 -$areaY1 = 0 -$areaX2 = 0 -$areaY2 = 0 - -# Utility methods to support dragging of items. - -def itemStartDrag(c,x,y) - $lastX = c.canvasx(x) - $lastY = c.canvasy(y) -end - -def itemDrag(c,x,y) - x = c.canvasx(x) - y = c.canvasy(y) - c.move 'current', x - $lastX, y - $lastY - $lastX = x - $lastY = y -end - -# Method that's invoked when the button embedded in the canvas -# is invoked. - -def butPress(w,color) - i = TkcText.new(w, '25c', '18.1c', - 'text'=>'Ouch!!', 'fill'=>color, 'anchor'=>'n') - Tk.after(500, proc{w.delete i}) -end diff --git a/ext/tk/sample/demos-en/ixset b/ext/tk/sample/demos-en/ixset deleted file mode 100644 index 40a77f487c..0000000000 --- a/ext/tk/sample/demos-en/ixset +++ /dev/null @@ -1,333 +0,0 @@ -#!/usr/bin/env ruby - -# ixset -- -# A nice interface to "xset" to change X server settings -# - -require 'tk' - -class Xsettings - # - # Button actions - # - def quit - @root.destroy - end - - def ok - writesettings - quit - end - - def cancel - readsettings - dispsettings - end - - # apply is just "writesettings" - - - # - # Read current settings - # - def readsettings - xfd = open("|xset q", 'r') - xfd.readlines.each{|line| - fields = line.chomp.strip.split(/\s+/) - case fields[0] - when "auto" - if fields[1] == 'repeat:' - @kbdrep = fields[2] - @w_kbdrep.set(@kbdrep) - @kbdcli = fields[6] - end - - when "bell" - @bellvol = fields[2] - @bellpit = fields[5] - @belldur = fields[8] - - when "acceleration:" - @mouseacc = fields[1] - @mousethr = fields[3] - - when "prefer" - if fields[2] == 'yes' - @screenbla = 'blank' - else - @screenbla = 'noblank' - end - @w_screenbla.set(@screenbla) - - when "timeout:" - @screentim = fields[1] - @screencyc = fields[3] - - end - } - - xfd.close - end - - # - # Write settings into the X server - # - def writesettings - @bellvol = @w_bellvol.get - @bellpit = @w_bellpit.get - @belldur = @w_belldur.get - - @kbdrep = @w_kbdrep.get - if @kbdrep == 'on' - @kbdcli = @w_kbdcli.get - else - @kbdcli = 'off' - end - - @mouseacc = @w_mouseacc.get - @mousethr = @w_mousethr.get - - @screentim = @w_screentim.get - @screencyc = @w_screencyc.get - @screenbla = @w_screenbla.get - - system("xset \ - b #{@bellvol} #{@bellpit} #{@belldur} \ - c #{@kbdcli} \ - r #{@kbdrep} \ - m #{@mouseacc} #{@mousethr} \ - s #{@screentim} #{@screencyc} \ - s #{@screenbla}") - end - - # - # Sends all settings to the window - # - def dispsettings - @w_bellvol.set(@bellvol) - @w_bellpit.set(@bellpit) - @w_belldur.set(@belldur) - - @w_kbdonoff.set(@w_kbdrep.get) - @w_kbdcli.set(@kbdcli) - - @w_mouseacc.set(@mouseacc) - @w_mousethr.set(@mousethr) - - @w_screenblank.set(@w_screenbla.get) - @w_screenpat.set(@w_screenbla.get) - - @w_screentim.set(@screentim) - @w_screencyc.set(@screencyc) - end - - # - # Create all windows, and pack them - # - class LabelEntry - def initialize(parent, text, length) - @frame = TkFrame.new(parent) - TkLabel.new(@frame, 'text'=>text).pack('side'=>'left','expand'=>'y') - @entry = TkEntry.new(@frame, 'width'=>length, 'relief'=>'sunken') { - pack('side'=>'left','expand'=>'y') - } - end - def pack(keys) - @frame.pack(keys) - end - def get - @entry.value - end - def set(value) - @entry.delete(0,'end') - @entry.insert(0, value) - end - end - - def createwindows - win = self - - # - # Buttons - # - buttons = TkFrame.new(@root) {|f| - [ TkButton.new(f, 'command'=>proc{win.ok}, 'text'=>'Ok'), - TkButton.new(f, 'command'=>proc{win.writesettings}, 'text'=>'Apply'), - TkButton.new(f, 'command'=>proc{win.cancel}, 'text'=>'Cancel'), - TkButton.new(f, 'command'=>proc{win.quit}, 'text'=>'Quit') ].each{|b| - b.pack('side'=>'left', 'expand'=>'yes', 'pady'=>5) - } - } - - # - # Bell settings - # - bell = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2) - l = TkLabel.new(bell, 'text'=>'Bell Settings') - @w_bellvol = TkScale.new(bell, 'from'=>0, 'to'=>100, 'length'=>200, - 'tickinterval'=>20, 'orient'=>'horizontal', - 'label'=>"Volume (%)") - - f = TkFrame.new(bell) - @w_bellpit = LabelEntry.new(f, "Pitch (Hz)", 6) - @w_bellpit.pack('side'=>'left', 'padx'=>5) - @w_belldur = LabelEntry.new(f, "Duration (ms)", 6) - @w_belldur.pack('side'=>'right', 'padx'=>5) - - l.pack('side'=>'top', 'expand'=>'yes') - @w_bellvol.pack('side'=>'top', 'expand'=>'yes') - f.pack('side'=>'top', 'expand'=>'yes') - - # - # Keyboard settings - # - kbdonoff = nil - kbdcli = nil - kbd = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2) - l = TkLabel.new(kbd, 'text'=>'Keyboard Repeat Settings') - f = TkFrame.new(kbd) - @w_kbdonoff = TkCheckButton.new(f, 'text'=>'On', 'relief'=>'flat', - 'onvalue'=>'on', 'offvalue'=>'off', - 'variable'=>@w_kbdrep ) { - def self.set(value) - if value == 'on' - self.select - else - self.deselect - end - end - pack('side'=>'left', 'expand'=>'yes', 'fill'=>'both') - } - @w_kbdcli = TkScale.new(f, 'from'=>0, 'to'=>100, 'length'=>200, - 'tickinterval'=>20, 'orient'=>'horizontal', - 'label'=>'Click Volume (%)') - @w_kbdcli.pack('side'=>'left', 'expand'=>'yes') - l.pack('side'=>'top', 'expand'=>'yes') - f.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2, 'fill'=>'x') - - # - # Mouse settings - # - mouse = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2) - l = TkLabel.new(mouse, 'text'=>'Mouse Settings') - f = TkFrame.new(mouse) - @w_mouseacc = LabelEntry.new(f, 'Acceleration', 3) - @w_mouseacc.pack('side'=>'left') - @w_mousethr = LabelEntry.new(f, 'Threshold (pixels)', 3) - @w_mousethr.pack('side'=>'right') - l.pack('side'=>'top') - f.pack('side'=>'top', 'expand'=>'yes') - - # - # Screen Saver settings - # - screen = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2) - l = TkLabel.new(screen, 'text'=>'Screen-saver Settings') - f = TkFrame.new(screen) - ff1 = TkFrame.new(f) - [ @w_screenblank = TkRadioButton.new(ff1, 'text'=>'Blank', - 'relief'=>'flat', - 'variable'=>@w_screenbla, - 'value'=>'blank') { - def self.set(value) - if value == 'blank' - self.select - else - self.deselect - end - end - }, - @w_screenpat = TkRadioButton.new(ff1, 'text'=>'Pattern', - 'relief'=>'flat', - 'variable'=>@w_screenbla, - 'value'=>'noblank') { - def self.set(value) - if value != 'blank' - self.select - else - self.deselect - end - end - } - ].each {|w| w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') } - - ff2 = TkFrame.new(f) - [ @w_screentim = LabelEntry.new(ff2, 'Timeout (s)', 5), - @w_screencyc = LabelEntry.new(ff2, 'Cycle (s)', 5) ].each{|w| - w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'e') - } - - ff1.pack('side'=>'left') - ff2.pack('side'=>'left') - - l.pack('side'=>'top') - f.pack('side'=>'top', 'expand'=>'yes') - - # - # Main window - # - buttons.pack('side'=>'top', 'fill'=>'both') - bell.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes') - kbd.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes') - mouse.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes') - screen.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes') - - # - # Let the user resize our window - # - @root.minsize(10,10) - end - - def initialize - @root = TkRoot.new - - @kbdrep = 'on' - @w_kbdrep = TkVariable.new(@kbdrep) - def @w_kbdrep.get - self.value - end - def @w_kbdrep.set(val) - self.value=val - end - - @kbdcli = 0 - - @bellvol = 100 - @bellpit = 440 - @belldur = 100 - - @mouseacc = "3/1" - @mousethr = 4 - - @screenbla = "blank" - @w_screenbla = TkVariable.new(@screenbla) - def @w_screenbla.get - self.value - end - def @w_screenbla.set(val) - self.value=val - end - - @screentim = 600 - @screencyc = 600 - - # - # Listen what "xset" tells us... - # - readsettings - - # - # Create all windows - # - createwindows - - # - # Write xset parameters - # - dispsettings - end -end - -Xsettings.new - -Tk.mainloop diff --git a/ext/tk/sample/demos-en/ixset2 b/ext/tk/sample/demos-en/ixset2 deleted file mode 100644 index cb99c60793..0000000000 --- a/ext/tk/sample/demos-en/ixset2 +++ /dev/null @@ -1,367 +0,0 @@ -#!/usr/bin/env ruby -# -# ixset -- -# A nice interface to "xset" to change X server settings -# - -require 'tk' - -class Xsettings - # - # Button actions - # - def quit - @root.destroy - end - - def ok - writesettings - quit - end - - def cancel - readsettings - dispsettings - @btn_APPLY.state(:disabled) - @btn_CANCEL.state(:disabled) - end - - # apply is just "writesettings" - def apply - writesettings - @btn_APPLY.state(:disabled) - @btn_CANCEL.state(:disabled) - end - - # - # Read current settings - # - def readsettings - xfd = open("|xset q", 'r') - xfd.readlines.each{|line| - fields = line.chomp.strip.split(/\s+/) - case fields[0] - when "auto" - if fields[1] == 'repeat:' - @kbdrep = fields[2] - @w_kbdrep.set(@kbdrep) - @kbdcli = fields[6] - end - - when "bell" - @bellvol = fields[2] - @bellpit = fields[5] - @belldur = fields[8] - - when "acceleration:" - @mouseacc = fields[1] - @mousethr = fields[3] - - when "prefer" - if fields[2] == 'yes' - @screenbla = 'blank' - else - @screenbla = 'noblank' - end - @w_screenbla.set(@screenbla) - - when "timeout:" - @screentim = fields[1] - @screencyc = fields[3] - - end - } - - xfd.close - end - - # - # Write settings into the X server - # - def writesettings - @bellvol = @w_bellvol.get - @bellpit = @w_bellpit.get - @belldur = @w_belldur.get - - @kbdrep = @w_kbdrep.get - if @kbdrep == 'on' - @kbdcli = @w_kbdcli.get - else - @kbdcli = 'off' - end - - @mouseacc = @w_mouseacc.get - @mousethr = @w_mousethr.get - - @screentim = @w_screentim.get - @screencyc = @w_screencyc.get - @screenbla = @w_screenbla.get - - system("xset \ - b #{@bellvol} #{@bellpit} #{@belldur} \ - c #{@kbdcli} \ - r #{@kbdrep} \ - m #{@mouseacc} #{@mousethr} \ - s #{@screentim} #{@screencyc} \ - s #{@screenbla}") - end - - # - # Sends all settings to the window - # - def dispsettings - @w_bellvol.set(@bellvol) - @w_bellpit.set(@bellpit) - @w_belldur.set(@belldur) - - @w_kbdonoff.set(@w_kbdrep.get) - @w_kbdcli.set(@kbdcli) - - @w_mouseacc.set(@mouseacc) - @w_mousethr.set(@mousethr) - - @w_screenblank.set(@w_screenbla.get) - @w_screenpat.set(@w_screenbla.get) - - @w_screentim.set(@screentim) - @w_screencyc.set(@screencyc) - end - - # - # Create all windows, and pack them - # - class LabelEntry - def initialize(parent, text, length, range=[]) - @frame = TkFrame.new(parent) - TkLabel.new(@frame, 'text'=>text).pack('side'=>'left') - if range.size > 0 - @entry = TkSpinbox.new(@frame, 'width'=>length, 'relief'=>'sunken', - 'from'=>range[0], 'to'=>range[1]) - else - @entry = TkEntry.new(@frame, 'width'=>length, 'relief'=>'sunken') - end - @entry.pack('side'=>'right','expand'=>'y', 'fill'=>'x') - end - def epath - @frame - end - def pack(keys) - @frame.pack(keys) - end - def get - @entry.value - end - def set(value) - @entry.delete(0,'end') - @entry.insert(0, value) - end - end - - def createwindows - win = self - - # - # Buttons - # - btn_frame = TkFrame.new(@root) - buttons = [ - @btn_OK = TkButton.new(btn_frame, 'command'=>proc{win.ok}, - 'default'=>'active', 'text'=>'Ok'), - @btn_APPLY = TkButton.new(btn_frame, 'command'=>proc{win.writesettings}, - 'default'=>'normal', 'text'=>'Apply', - 'state'=>'disabled'), - @btn_CANCEL = TkButton.new(btn_frame, 'command'=>proc{win.cancel}, - 'default'=>'normal', 'text'=>'Cancel', - 'state'=>'disabled'), - @btn_QUIT = TkButton.new(btn_frame, 'command'=>proc{win.quit}, - 'default'=>'normal', 'text'=>'Quit') - ] - buttons.each{|b| b.pack('side'=>'left', 'expand'=>'yes', 'pady'=>5) } - - @root.bind('Return', proc{@btn_OK.flash; @btn_OK.invoke}) - @root.bind('Escape', proc{@btn_QUIT.flash; @btn_QUIT.invoke}) - @root.bind('1', proc{|w| - unless buttons.index(w) - @btn_APPLY.state(:normal) - @btn_CANCEL.state(:normal) - end - }, '%W') - @root.bind('Key', proc{|w, k| - unless buttons.index(w) - case k - when 'Return', 'Escape', 'Tab', /.*Shift.*/ - # do nothing - else - @btn_APPLY.state(:normal) - @btn_CANCEL.state(:normal) - end - end - }, '%W %K') - - # - # Bell settings - # - bell = TkLabelframe.new(@root, 'text'=>'Bell Settings', - 'padx'=>'1.5m', 'pady'=>'1.5m') - @w_bellvol = TkScale.new(bell, 'from'=>0, 'to'=>100, 'length'=>200, - 'tickinterval'=>20, 'orient'=>'horizontal', - 'label'=>"Volume (%)") - - f = TkFrame.new(bell) - @w_bellpit = LabelEntry.new(f, "Pitch (Hz)", 6, [25, 20000]) - @w_bellpit.pack('side'=>'left', 'padx'=>5) - @w_belldur = LabelEntry.new(f, "Duration (ms)", 6, [1, 10000]) - @w_belldur.pack('side'=>'right', 'padx'=>5) - - @w_bellvol.pack('side'=>'top', 'expand'=>'yes') - f.pack('side'=>'top', 'expand'=>'yes') - - # - # Keyboard settings - # - kbdonoff = nil - kbdcli = nil - kbd = TkLabelframe.new(@root, 'text'=>'Keyboard Repeat Settings', - 'padx'=>'1.5m', 'pady'=>'1.5m') - f = TkFrame.new(kbd) - @w_kbdonoff = TkCheckButton.new(f, 'text'=>'On', 'relief'=>'flat', - 'onvalue'=>'on', 'offvalue'=>'off', - 'variable'=>@w_kbdrep ) { - def self.set(value) - if value == 'on' - self.select - else - self.deselect - end - end - pack('side'=>'left', 'expand'=>'yes', 'fill'=>'x', 'padx'=>[0, '1m']) - } - @w_kbdcli = TkScale.new(f, 'from'=>0, 'to'=>100, 'length'=>200, - 'tickinterval'=>20, 'orient'=>'horizontal', - 'label'=>'Click Volume (%)') - @w_kbdcli.pack('side'=>'left', 'expand'=>'yes', - 'fill'=>'x', 'padx'=>['1m', 0]) - f.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2, 'fill'=>'x') - - # - # Mouse settings - # - mouse = TkLabelframe.new(@root, 'text'=>'Mouse Settings', - 'padx'=>'1.5m', 'pady'=>'1.5m') - f = TkFrame.new(mouse) - @w_mouseacc = LabelEntry.new(f, 'Acceleration', 5) - @w_mouseacc.pack('side'=>'left', 'padx'=>[0, '1m']) - @w_mousethr = LabelEntry.new(f, 'Threshold (pixels)', 3, [1, 2000]) - @w_mousethr.pack('side'=>'right', 'padx'=>['1m', 0]) - f.pack('side'=>'top', 'expand'=>'yes') - - # - # Screen Saver settings - # - screen = TkLabelframe.new(@root, 'text'=>'Screen-saver Settings', - 'padx'=>'1.5m', 'pady'=>'1.5m') - @w_screenblank = TkRadioButton.new(screen, 'text'=>'Blank', - 'relief'=>'flat', 'anchor'=>'w', - 'variable'=>@w_screenbla, - 'value'=>'blank') { - def self.set(value) - if value == 'blank' - self.select - else - self.deselect - end - end - } - - @w_screenpat = TkRadioButton.new(screen, 'text'=>'Pattern', - 'relief'=>'flat', 'anchor'=>'w', - 'variable'=>@w_screenbla, - 'value'=>'noblank') { - def self.set(value) - if value != 'blank' - self.select - else - self.deselect - end - end - } - - @w_screentim = LabelEntry.new(screen, 'Timeout (s)', 5, [1, 100000]) - @w_screencyc = LabelEntry.new(screen, 'Cycle (s)', 5, [1, 100000]) - - Tk.grid(@w_screenblank, @w_screentim, 'sticky'=>'e') - Tk.grid(@w_screenpat, @w_screencyc, 'sticky'=>'e') - TkGrid.configure(@w_screenblank, @w_screenpat, 'sticky'=>'ew') - - # - # Main window - # - param = { - 'side'=>'top', 'fill'=>'both', 'expand'=>'yes', - 'padx'=>'1m', 'pady'=>'1m' - } - btn_frame.pack('side'=>'top', 'fill'=>'both') - bell.pack(param) - kbd.pack(param) - mouse.pack(param) - screen.pack(param) - - # - # Let the user resize our window - # - @root.minsize(10,10) - end - - def initialize(title) - @root = TkRoot.new('title'=>title) - - @kbdrep = 'on' - @w_kbdrep = TkVariable.new(@kbdrep) - def @w_kbdrep.get - self.value - end - def @w_kbdrep.set(val) - self.value=val - end - - @kbdcli = 0 - - @bellvol = 100 - @bellpit = 440 - @belldur = 100 - - @mouseacc = "3/1" - @mousethr = 4 - - @screenbla = "blank" - @w_screenbla = TkVariable.new(@screenbla) - def @w_screenbla.get - self.value - end - def @w_screenbla.set(val) - self.value=val - end - - @screentim = 600 - @screencyc = 600 - - # - # Listen what "xset" tells us... - # - readsettings - - # - # Create all windows - # - createwindows - - # - # Write xset parameters - # - dispsettings - end -end - -Xsettings.new(File.basename($0,'.rb')) - -Tk.mainloop diff --git a/ext/tk/sample/demos-en/knightstour.rb b/ext/tk/sample/demos-en/knightstour.rb deleted file mode 100644 index 1ad82fcc9d..0000000000 --- a/ext/tk/sample/demos-en/knightstour.rb +++ /dev/null @@ -1,272 +0,0 @@ -# frozen_string_literal: false -# Based on the widget demo of Tcl/Tk8.5.2 -# The following is the original copyright text. -#---------------------------------------------------------------------------- -# Copyright (C) 2008 Pat Thoyts -# -# Calculate a Knight's tour of a chessboard. -# -# This uses Warnsdorff's rule to calculate the next square each -# time. This specifies that the next square should be the one that -# has the least number of available moves. -# -# Using this rule it is possible to get to a position where -# there are no squares available to move into. In this implementation -# this occurs when the starting square is d6. -# -# To solve this fault an enhancement to the rule is that if we -# have a choice of squares with an equal score, we should choose -# the one nearest the edge of the board. -# -# If the call to the Edgemost function is commented out you can see -# this occur. -# -# You can drag the knight to a specific square to start if you wish. -# If you let it repeat then it will choose random start positions -# for each new tour. -#---------------------------------------------------------------------------- -require 'tk' - -class Knights_Tour - # Return a list of accessible squares from a given square - def valid_moves(square) - moves = [] - [ - [-1,-2], [-2,-1], [-2,1], [-1,2], [1,2], [2,1], [2,-1], [1,-2] - ].each{|col_delta, row_delta| - col = (square % 8) + col_delta - row = (square.div(8)) + row_delta - moves << (row * 8 + col) if row > -1 && row < 8 && col > -1 && col < 8 - } - moves - end - - # Return the number of available moves for this square - def check_square(square) - valid_moves(square).find_all{|pos| ! @visited.include?(pos)}.length - end - - # Select the next square to move to. Returns -1 if there are no available - # squares remaining that we can move to. - def next_square(square) - minimum = 9 - nxt = -1 - valid_moves(square).each{|pos| - unless @visited.include?(pos) - cnt = check_square(pos) - if cnt < minimum - minimum = cnt - nxt = pos - elsif cnt == minimum - nxt = edgemost(nxt, pos) - end - end - } - nxt - end - - # Select the square nearest the edge of the board - def edgemost(nxt, pos) - col_A = 3 - ((3.5 - nxt % 8).abs.to_i) - col_B = 3 - ((3.5 - pos % 8).abs.to_i) - row_A = 3 - ((3.5 - nxt.div(8)).abs.to_i) - row_B = 3 - ((3.5 - pos.div(8)).abs.to_i) - (col_A * row_A < col_B * row_B)? nxt : pos - end - - # Display a square number as a standard chess square notation. - def _N(square) - '%c%d' % [(97 + square % 8), (square.div(8) + 1)] - end - - # Perform a Knight's move and schedule the next move. - def move_piece(last, square) - @log.insert(:end, "#{@visited.length}. #{_N last} -> #{_N square}\n", '') - @log.see(:end) - @board.itemconfigure(1+last, :state=>:normal, :outline=>'black') - @board.itemconfigure(1+square, :state=>:normal, :outline=>'red') - @knight.coords(@board.coords(1+square)[0..1]) - @visited << square - if (nxt = next_square(square)) != -1 - @after_id = Tk.after(@delay.numeric){move_piece(square, nxt) rescue nil} - else - @start_btn.state :normal - if @visited.length == 64 - if @initial == square - @log.insert :end, 'Closed tour!' - else - @log.insert :end, "Success\n", {} - Tk.after(@delay.numeric * 2){tour(rand(64))} if @continuous.bool - end - else - @log.insert :end, "FAILED!\n", {} - end - end - end - - # Begin a new tour of the board given a random start position - def tour(square = nil) - @visited.clear - @log.clear - @start_btn.state :disabled - 1.upto(64){|n| - @board.itemconfigure(n, :state=>:disabled, :outline=>'black') - } - unless square - square = @board.find_closest(*(@knight.coords << 0 << 65))[0].to_i - 1 - end - @initial = square - Tk.after_idle{ move_piece(@initial, @initial) rescue nil } - end - - def _stop - Tk.after_cancel(@after_id) rescue nil - end - - def _exit - _stop - $knightstour.destroy - end - - def set_delay(new) - @delay.numeric = new.to_i - end - - def drag_start(w, x, y) - w.dtag('selected') - w.addtag('selected', :withtag, 'current') - @dragging = [x, y] - end - - def drag_motion(w, x, y) - return unless @dragging - w.move('selected', x - @dragging[0], y - @dragging[1]) - @dragging = [x, y] - end - - def drag_end(w, x, y) - square = w.find_closest(x, y, 0, 65) - w.coords('selected', w.coords(square)[0..1]) - w.dtag('selected') - @dragging = nil - end - - def make_SeeDismiss - ## See Code / Dismiss - frame = Ttk::Frame.new($knightstour) - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'knightstour'}), - Ttk::Button.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $knightstour.destroy - $knightstour = nil - }), - :padx=>4, :pady=>4) - frame.grid_columnconfigure(0, :weight=>1) - frame - end - - def create_gui(parent = nil) - $knightstour.destroy rescue nil - $knightstour = Tk::Toplevel.new(parent, :title=>"Knight's tour") - $knightstour.withdraw - base_f = Ttk::Frame.new($knightstour) - @board = Tk::Canvas.new(base_f, :width=>240, :height=>240) - @log = Tk::Text.new(base_f, :width=>12, :height=>1, - :font=>'Arial 8', :background=>'white') - scr = @log.yscrollbar(Ttk::Scrollbar.new(base_f)) - - @visited = [] - @delay = TkVariable.new(600) - @continuous = TkVariable.new(false) - - tool_f = Ttk::Frame.new($knightstour) - label = Ttk::Label.new(tool_f, :text=>'Speed') - scale = Ttk::Scale.new(tool_f, :from=>8, :to=>2000, :variable=>@delay, - :command=>proc{|n| set_delay(n)}) - check = Ttk::Checkbutton.new(tool_f, :text=>'Repeat', - :variable=>@continuous) - @start_btn = Ttk::Button.new(tool_f, :text=>'Start', - :command=>proc{tour()}) - @exit_btn = Ttk::Button.new(tool_f, :text=>'Exit', - :command=>proc{_exit()}) - - 7.downto(0){|row| - 0.upto(7){|col| - if ((col & 1) ^ (row & 1)).zero? - fill = 'bisque' - dfill = 'bisque3' - else - fill = 'tan3' - dfill = 'tan4' - end - coords = [col * 30 + 4, row * 30 + 4, col * 30 + 30, row * 30 + 30] - @board.create(TkcRectangle, coords, - :fill=>fill, :disabledfill=>dfill, - :width=>2, :state=>:disabled) - } - } - - @knight_font = TkFont.new(:size=>-24) - @knight = TkcText.new(@board, 0, 0, :font=>@knight_font, - :text=>Tk::UTF8_String.new('\u265e'), - :anchor=>'nw', # :tags=>'knight', - :fill=>'black', :activefill=>'#600000') - @knight.coords(@board.coords(rand(64)+1)[0..1]) - @knight.bind('ButtonPress-1', '%W %x %y'){|w,x,y| drag_start(w,x,y)} - @knight.bind('Motion', '%W %x %y'){|w,x,y| drag_motion(w,x,y)} - @knight.bind('ButtonRelease-1', '%W %x %y'){|w,x,y| drag_end(w,x,y)} - - Tk.grid(@board, @log, scr, :sticky=>'news') - base_f.grid_rowconfigure(0, :weight=>1) - base_f.grid_columnconfigure(0, :weight=>1) - - Tk.grid(base_f, '-', '-', '-', '-', '-', :sticky=>'news') - widgets = [label, scale, check, @start_btn] - sg = nil - unless $RubyTk_WidgetDemo - widgets << @exit_btn - if Tk.windowingsystem != 'aqua' - #widgets.unshift(Ttk::SizeGrip.new(tool_f)) - Ttk::SizeGrip.new(tool_f).pack(:side=>:right, :anchor=>'se') - end - end - Tk.pack(widgets, :side=>:right) - if Tk.windowingsystem == 'aqua' - TkPack.configure(widgets, :padx=>[4, 4], :pady=>[12, 12]) - TkPack.configure(widgets[0], :padx=>[4, 24]) - TkPack.configure(widgets[-1], :padx=>[16, 4]) - end - - Tk.grid(tool_f, '-', '-', '-', '-', '-', :sticky=>'ew') - - if $RubyTk_WidgetDemo - Tk.grid(make_SeeDismiss(), '-', '-', '-', '-', '-', :sticky=>'ew') - end - - $knightstour.grid_rowconfigure(0, :weight=>1) - $knightstour.grid_columnconfigure(0, :weight=>1) - - $knightstour.bind('Control-F2'){TkConsole.show} - $knightstour.bind('Return'){@start_btn.invoke} - $knightstour.bind('Escape'){@exit_btn.invoke} - $knightstour.bind('Destroy'){ _stop } - $knightstour.protocol('WM_DELETE_WINDOW'){ _exit } - - $knightstour.deiconify - $knightstour.tkwait_destroy - end - - def initialize(parent = nil) - create_gui(parent) - end -end - -Tk.root.withdraw unless $RubyTk_WidgetDemo -Thread.new{Tk.mainloop} if __FILE__ == $0 -Knights_Tour.new diff --git a/ext/tk/sample/demos-en/label.rb b/ext/tk/sample/demos-en/label.rb deleted file mode 100644 index d9cfd92364..0000000000 --- a/ext/tk/sample/demos-en/label.rb +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: false -# label.rb -# -# This demonstration script creates a toplevel window containing -# several label widgets. -# -# label widget demo (called by 'widget') -# - -# toplevel widget -if defined?($label_demo) && $label_demo - $label_demo.destroy - $label_demo = nil -end - -# demo toplevel widget -$label_demo = TkToplevel.new {|w| - title("Label Demonstration") - iconname("label") - positionWindow(w) -} - -base_frame = TkFrame.new($label_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "Five labels are displayed below: three textual ones on the left, and a bitmap label and a text label on the right. Labels are pretty boring because you can't do anything with them." -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $label_demo - $label_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'See Code' - command proc{showCode 'label'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# label demo -f_left = TkFrame.new(base_frame) -f_right = TkFrame.new(base_frame) -[f_left, f_right].each{|w| w.pack('side'=>'left', 'expand'=>'yes', - 'padx'=>10, 'pady'=>10, 'fill'=>'both')} - -# label -[ TkLabel.new(f_left, 'text'=>'First label'), - TkLabel.new(f_left, 'text'=>'Second label, raised', - 'relief'=>'raised'), - TkLabel.new(f_left, 'text'=>'Third label, sunken', 'relief'=>'sunken') -].each{|w| w.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2, 'anchor'=>'w')} - -# TkLabel.new(f_right) { -Tk::Label.new(f_right) { - bitmap('@' + [$demo_dir,'..','images','face.xbm'].join(File::Separator)) - borderwidth 2 - relief 'sunken' -}.pack('side'=>'top') - -TkLabel.new(f_right) { text 'Tcl/Tk Proprietor' }.pack('side'=>'top') - diff --git a/ext/tk/sample/demos-en/labelframe.rb b/ext/tk/sample/demos-en/labelframe.rb deleted file mode 100644 index bd2d8f335e..0000000000 --- a/ext/tk/sample/demos-en/labelframe.rb +++ /dev/null @@ -1,96 +0,0 @@ -# frozen_string_literal: false -# labelframe.rb -# -# This demonstration script creates a toplevel window containing -# several labelframe widgets. -# -# based on "Id: labelframe.tcl,v 1.2 2001/10/30 11:21:50 dkf Exp" - - -if defined?($labelframe_demo) && $labelframe_demo - $labelframe_demo.destroy - $labelframe_demo = nil -end - -$labelframe_demo = TkToplevel.new {|w| - title("Labelframe Demonstration") - iconname("labelframe") - positionWindow(w) -} - -base_frame = TkFrame.new($labelframe_demo).pack(:fill=>:both, :expand=>true) - -# Some information -TkLabel.new(base_frame, - :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top) -Labelframes are used to group related widgets together. \ -The label may be either plain text or another widget. \ -If your Tk library linked to Ruby doesn't include a 'labelframe' widget, \ -this demo doesn't work. Please use later version of Tk \ -which supports a 'labelframe' widget. -EOL - -# The bottom buttons -TkFrame.new(base_frame){|f| - pack(:side=>:bottom, :fill=>:x, :pady=>'2m') - - TkButton.new(f, :text=>'Dismiss', :width=>15, :command=>proc{ - $labelframe_demo.destroy - $labelframe_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'See Code', :width=>15, :command=>proc{ - showCode 'labelframe' - }).pack(:side=>:left, :expand=>true) -} - -# Demo area -w = TkFrame.new(base_frame).pack(:side=>:bottom, :fill=>:both, - :expand=>true) - -# A group of radiobuttons in a labelframe -TkLabelFrame.new(w, :text=>'Value', - :padx=>2, :pady=>2) {|f| - grid(:row=>0, :column=>0, :pady=>'2m', :padx=>'2m') - - v = TkVariable.new - (1..4).each{|i| - TkRadiobutton.new(f, :text=>"This is value #{i}", - :variable=>v, :value=>i) { - pack(:side=>:top, :fill=>:x, :pady=>2) - } - } -} - - -# Using a label window to control a group of options. -$lfdummy = TkVariable.new(0) - -def lfEnableButtons(w) - TkWinfo.children(w).each{|child| - next if child.path =~ /\.cb$/ - if $lfdummy == 1 - child.state(:normal) - else - child.state(:disabled) - end - } -end - -TkLabelFrame.new(w, :pady=>2, :padx=>2){|f| - TkCheckButton.new(f, :widgetname=>'cb', :variable=>$lfdummy, - :text=>"Use this option.", :padx=>0) {|cb| - command proc{lfEnableButtons(f)} - f.labelwidget(cb) - } - grid(:row=>0, :column=>1, :pady=>'2m', :padx=>'2m') - - %w(Option1 Option2 Option3).each{|str| - TkCheckbutton.new(f, :text=>str).pack(:side=>:top, :fill=>:x, :pady=>2) - } - - lfEnableButtons(f) -} - -TkGrid.columnconfigure(w, [0,1], :weight=>1) diff --git a/ext/tk/sample/demos-en/mclist.rb b/ext/tk/sample/demos-en/mclist.rb deleted file mode 100644 index 61ebff1805..0000000000 --- a/ext/tk/sample/demos-en/mclist.rb +++ /dev/null @@ -1,118 +0,0 @@ -# frozen_string_literal: false -# mclist.rb -- -# -# This demonstration script creates a toplevel window containing a Ttk -# tree widget configured as a multi-column listbox. -# -# based on "Id: mclist.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp" - -if defined?($mclist_demo) && $mclist_demo - $mclist_demo.destroy - $mclist_demo = nil -end - -$mclist_demo = TkToplevel.new {|w| - title("Multi-Column List") - iconname("mclist") - positionWindow(w) -} - -base_frame = TkFrame.new($mclist_demo).pack(:fill=>:both, :expand=>true) - -## Explanatory text -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', - :justify=>:left, :anchor=>'n', :padding=>[10, 2, 10, 6], - :text=><:x) -Ttk is the new Tk themed widget set. \ -One of the widgets it includes is a tree widget, \ -which can be configured to display multiple columns of informational data \ -without displaying the tree itself. \ -This is a simple way to build a listbox that has multiple columns. \ -Clicking on the heading for a column will sort the data by that column. \ -You can also change the width of the columns \ -by dragging the boundary between them. -EOL - -## See Code / Dismiss -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'mclist'}), - Ttk::Button.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $mclist_demo.destroy - $mclist_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -container = Ttk::Frame.new(base_frame) -tree = Ttk::Treeview.new(base_frame, :columns=>%w(country capital currency), - :show=>:headings) -if Tk.windowingsystem != 'aqua' - vsb = tree.yscrollbar(Ttk::Scrollbar.new(base_frame)) - hsb = tree.xscrollbar(Ttk::Scrollbar.new(base_frame)) -else - vsb = tree.yscrollbar(Tk::Scrollbar.new(base_frame)) - hsb = tree.xscrollbar(Tk::Scrollbar.new(base_frame)) -end - -container.pack(:fill=>:both, :expand=>true) -Tk.grid(tree, vsb, :in=>container, :sticky=>'nsew') -Tk.grid(hsb, :in=>container, :sticky=>'nsew') -container.grid_columnconfigure(0, :weight=>1) -container.grid_rowconfigure(0, :weight=>1) - -## The data we're going to insert -data = [ - ['Argentina', 'Buenos Aires', 'ARS'], - ['Australia', 'Canberra', 'AUD'], - ['Brazil', 'Brazilia', 'BRL'], - ['Canada', 'Ottawa', 'CAD'], - ['China', 'Beijing', 'CNY'], - ['France', 'Paris', 'EUR'], - ['Germany', 'Berlin', 'EUR'], - ['India', 'New Delhi', 'INR'], - ['Italy', 'Rome', 'EUR'], - ['Japan', 'Tokyo', 'JPY'], - ['Mexico', 'Mexico City', 'MXN'], - ['Russia', 'Moscow', 'RUB'], - ['South Africa', 'Pretoria', 'ZAR'], - ['United Kingdom', 'London', 'GBP'], - ['United States', 'Washington, D.C.', 'USD'], -] - -## Code to insert the data nicely -font = Ttk::Style.lookup(tree[:style], :font) -cols = %w(country capital currency) -cols.zip(%w(Country Capital Currency)).each{|col, name| - tree.heading_configure(col, :text=>name, - :command=>proc{sort_by(tree, col, false)}) - tree.column_configure(col, :width=>TkFont.measure(font, name)) -} - -data.each{|country, capital, currency| - #tree.insert('', :end, :values=>[country, capital, currency]) - tree.insert(nil, :end, :values=>[country, capital, currency]) - cols.zip([country, capital, currency]).each{|col, val| - len = TkFont.measure(font, "#{val} ") - if tree.column_cget(col, :width) < len - tree.column_configure(col, :width=>len) - end - } -} - -## Code to do the sorting of the tree contents when clicked on -def sort_by(tree, col, direction) - tree.children(nil).map!{|row| [tree.get(row, col), row.id]} . - sort(&((direction)? proc{|x, y| y <=> x}: proc{|x, y| x <=> y})) . - each_with_index{|info, idx| tree.move(info[1], nil, idx)} - - tree.heading_configure(col, :command=>proc{sort_by(tree, col, ! direction)}) -end diff --git a/ext/tk/sample/demos-en/menu.rb b/ext/tk/sample/demos-en/menu.rb deleted file mode 100644 index db0541c608..0000000000 --- a/ext/tk/sample/demos-en/menu.rb +++ /dev/null @@ -1,197 +0,0 @@ -# frozen_string_literal: false -# -# menus widget demo (called by 'widget') -# - -# toplevel widget -if defined?($menu_demo) && $menu_demo - $menu_demo.destroy - $menu_demo = nil -end - -# demo toplevel widget -$menu_demo = TkToplevel.new {|w| - title("File Selection Dialogs") - iconname("menu") - positionWindow(w) -} - -base_frame = TkFrame.new($menu_demo).pack(:fill=>:both, :expand=>true) - -# menu frame -$menu_frame = TkFrame.new(base_frame, 'relief'=>'raised', 'bd'=>2) -$menu_frame.pack('side'=>'top', 'fill'=>'x') - -begin - windowingsystem = Tk.windowingsystem() -rescue - windowingsystem = "" -end - -# label -TkLabel.new(base_frame,'font'=>$font,'wraplength'=>'4i','justify'=>'left') { - if $tk_platform['platform'] == 'macintosh' || - windowingsystem == "classic" || windowingsystem == "aqua" - text("This window contains a menubar with cascaded menus. You can invoke entries with an accelerator by typing Command+x, where \"x\" is the character next to the command key symbol. The rightmost menu can be torn off into a palette by dragging outside of its bounds and releasing the mouse.") - else - text("This window contains a menubar with cascaded menus. You can post a menu from the keyboard by typing Alt+x, where \"x\" is the character underlined on the menu. You can then traverse among the menus using the arrow keys. When a menu is posted, you can invoke the current entry by typing space, or you can invoke any entry by typing its underlined character. If a menu entry has an accelerator, you can invoke the entry without posting the menu just by typing the accelerator. The rightmost menu can be torn off into a palette by selecting the first item in the menu.") - end -}.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $menu_demo - $menu_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'menu'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# menu -TkMenubutton.new($menu_frame, 'text'=>'File', 'underline'=>0) {|m| - pack('side'=>'left') - TkMenu.new(m, 'tearoff'=>false) {|file_menu| - m.configure('menu'=>file_menu) - add('command', 'label'=>'Open...', 'command'=>proc{fail 'this is just a demo: no action has been defined for the "Open..." entry'}) - add('command', 'label'=>'New', 'command'=>proc{fail 'this is just a demo: no action has been defined for the "New" entry'}) - add('command', 'label'=>'Save', 'command'=>proc{fail 'this is just a demo: no action has been defined for the "Save" entry'}) - add('command', 'label'=>'Save As...', 'command'=>proc{fail 'this is just a demo: no action has been defined for the "Save As..." entry'}) - add('separator') - add('command', 'label'=>'Print Setup...', 'command'=>proc{fail 'this is just a demo: no action has been defined for the "Print Setup..." entry'}) - add('command', 'label'=>'Print...', 'command'=>proc{fail 'this is just a demo: no action has been defined for the "Print..." entry'}) - add('separator') - add('command', 'label'=>'Dismiss Menus Demo', 'command'=>proc{$menu_demo.destroy}) - } -} - -if $tk_platform['platform'] == 'macintosh' || - windowingsystem == "classic" || windowingsystem == "aqua" - modifier = 'Command' -elsif $tk_platform['platform'] == 'windows' - modifier = 'Control' -else - modifier = 'Meta' -end - -TkMenubutton.new($menu_frame, 'text'=>'Basic', 'underline'=>0) {|m| - pack('side'=>'left') - TkMenu.new(m, 'tearoff'=>false) {|basic_menu| - m.configure('menu'=>basic_menu) - add('command', 'label'=>'Long entry that does nothing') - ['A','B','C','D','E','F','G'].each{|c| - add('command', 'label'=>"Print letter \"#{c}\"", - 'underline'=>14, - 'command'=>proc{print c,"\n"}, 'accelerator'=>"#{modifier}+#{c}") - $menu_demo.bind("#{modifier}-#{c.downcase}", proc{print c,"\n"}) - } - } -} - -TkMenubutton.new($menu_frame, 'text'=>'Cascades', 'underline'=>0) {|m| - pack('side'=>'left') - TkMenu.new(m, 'tearoff'=>false) {|cascade_menu| - m.configure('menu'=>cascade_menu) - add('command', 'label'=>'Print hello', - 'command'=>proc{print "Hello\n"}, - 'accelerator'=>"#{modifier}+H", 'underline'=>6) - $menu_demo.bind("#{modifier}-h", proc{print "Hello\n"}) - add('command', 'label'=>'Print goodbye', - 'command'=>proc{print "Goodbye\n"}, - 'accelerator'=>"#{modifier}+G", 'underline'=>6) - $menu_demo.bind("#{modifier}-g", proc{print "Goodbye\n"}) - - TkMenu.new(cascade_menu, 'tearoff'=>false) {|cascade_check| - cascade_menu.add('cascade', 'label'=>'Check buttons', - 'menu'=>cascade_check, 'underline'=>0) - oil = TkVariable.new(0) - add('check', 'label'=>'Oil checked', 'variable'=>oil) - trans = TkVariable.new(0) - add('check', 'label'=>'Transmission checked', 'variable'=>trans) - brakes = TkVariable.new(0) - add('check', 'label'=>'Brakes checked', 'variable'=>brakes) - lights = TkVariable.new(0) - add('check', 'label'=>'Lights checked', 'variable'=>lights) - add('separator') - add('command', 'label'=>'Show current values', - 'command'=>proc{showVars($menu_demo, - ['oil', oil], - ['trans', trans], - ['brakes', brakes], - ['lights', lights])} ) - invoke 1 - invoke 3 - } - - TkMenu.new(cascade_menu, 'tearoff'=>false) {|cascade_radio| - cascade_menu.add('cascade', 'label'=>'Radio buttons', - 'menu'=>cascade_radio, 'underline'=>0) - pointSize = TkVariable.new - add('radio', 'label'=>'10 point', 'variable'=>pointSize, 'value'=>10) - add('radio', 'label'=>'14 point', 'variable'=>pointSize, 'value'=>14) - add('radio', 'label'=>'18 point', 'variable'=>pointSize, 'value'=>18) - add('radio', 'label'=>'24 point', 'variable'=>pointSize, 'value'=>24) - add('radio', 'label'=>'32 point', 'variable'=>pointSize, 'value'=>32) - add('separator') - style = TkVariable.new - add('radio', 'label'=>'Roman', 'variable'=>style, 'value'=>'roman') - add('radio', 'label'=>'Bold', 'variable'=>style, 'value'=>'bold') - add('radio', 'label'=>'Italic', 'variable'=>style, 'value'=>'italic') - add('separator') - add('command', 'label'=>'Show current values', - 'command'=>proc{showVars($menu_demo, - ['pointSize', pointSize], - ['style', style])} ) - invoke 1 - invoke 7 - } - } -} - -TkMenubutton.new($menu_frame, 'text'=>'Icons', 'underline'=>0) {|m| - pack('side'=>'left') - TkMenu.new(m, 'tearoff'=>false) {|icon_menu| - m.configure('menu'=>icon_menu) - add('command', - 'bitmap'=>'@'+[$demo_dir,'..', - 'images','pattern.xbm'].join(File::Separator), - 'command'=>proc{TkDialog.new('title'=>'Bitmap Menu Entry', - 'text'=>'The menu entry you invoked displays a bitmap rather than a text string. Other than this, it is just like any other menu entry.', - 'bitmap'=>'', 'default'=>0, - 'buttons'=>'Dismiss')} ) - ['info', 'questhead', 'error'].each{|icon| - add('command', 'bitmap'=>icon, - 'command'=>proc{print "You invoked the #{icon} bitmap\n"}) - } - } -} - -TkMenubutton.new($menu_frame, 'text'=>'More', 'underline'=>0) {|m| - pack('side'=>'left') - TkMenu.new(m, 'tearoff'=>false) {|more_menu| - m.configure('menu'=>more_menu) - [ 'An entry','Another entry','Does nothing','Does almost nothing', - 'Make life meaningful' ].each{|i| - add('command', 'label'=>i, - 'command'=>proc{print "You invoked \"#{i}\"\n"}) - } - } -} - -TkMenubutton.new($menu_frame, 'text'=>'Colors', 'underline'=>0) {|m| - pack('side'=>'left') - TkMenu.new(m) {|colors_menu| - m.configure('menu'=>colors_menu) - ['red', 'orange', 'yellow', 'green', 'blue'].each{|c| - add('command', 'label'=>c, 'background'=>c, - 'command'=>proc{print "You invoked \"#{c}\"\n"}) - } - } -} diff --git a/ext/tk/sample/demos-en/menu84.rb b/ext/tk/sample/demos-en/menu84.rb deleted file mode 100644 index 714fb3c553..0000000000 --- a/ext/tk/sample/demos-en/menu84.rb +++ /dev/null @@ -1,216 +0,0 @@ -# frozen_string_literal: false -# -# menus widget demo (called by 'widget') -# - -# toplevel widget -if defined?($menu84_demo) && $menu84_demo - $menu84_demo.destroy - $menu84_demo = nil -end - -# demo toplevel widget -$menu84_demo = TkToplevel.new {|w| - title("File Selection Dialogs") - iconname("menu84") - positionWindow(w) -} - -base_frame = TkFrame.new($menu84_demo).pack(:fill=>:both, :expand=>true) - -begin - windowingsystem = Tk.windowingsystem() -rescue - windowingsystem = "" -end - -# label -TkLabel.new(base_frame,'font'=>$font,'wraplength'=>'4i','justify'=>'left') { - if $tk_platform['platform'] == 'macintosh' || - windowingsystem == "classic" || windowingsystem == "aqua" - text("This window contains a menubar with cascaded menus. You can invoke entries with an accelerator by typing Command+x, where \"x\" is the character next to the command key symbol. The rightmost menu can be torn off into a palette by dragging outside of its bounds and releasing the mouse.") - else - text("This window contains a menubar with cascaded menus. You can post a menu from the keyboard by typing Alt+x, where \"x\" is the character underlined on the menu. You can then traverse among the menus using the arrow keys. When a menu is posted, you can invoke the current entry by typing space, or you can invoke any entry by typing its underlined character. If a menu entry has an accelerator, you can invoke the entry without posting the menu just by typing the accelerator. The rightmost menu can be torn off into a palette by selecting the first item in the menu.") - end -}.pack('side'=>'top') - - -menustatus = TkVariable.new(" ") -TkFrame.new(base_frame) {|frame| - TkLabel.new(frame, 'textvariable'=>menustatus, 'relief'=>'sunken', - 'bd'=>1, 'font'=>['Helvetica', '10'], - 'anchor'=>'w').pack('side'=>'left', 'padx'=>2, - 'expand'=>true, 'fill'=>'both') - pack('side'=>'bottom', 'fill'=>'x', 'pady'=>2) -} - - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $menu84_demo - $menu84_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'menu84'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - - -# create menu frame -$menu84_frame = TkMenu.new($menu84_demo, 'tearoff'=>false) - -# menu -TkMenu.new($menu84_frame, 'tearoff'=>false) {|m| - $menu84_frame.add('cascade', 'label'=>'File', 'menu'=>m, 'underline'=>0) - add('command', 'label'=>'Open...', 'command'=>proc{fail 'this is just a demo: no action has been defined for the "Open..." entry'}) - add('command', 'label'=>'New', 'command'=>proc{fail 'this is just a demo: no action has been defined for the "New" entry'}) - add('command', 'label'=>'Save', 'command'=>proc{fail 'this is just a demo: no action has been defined for the "Save" entry'}) - add('command', 'label'=>'Save As...', 'command'=>proc{fail 'this is just a demo: no action has been defined for the "Save As..." entry'}) - add('separator') - add('command', 'label'=>'Print Setup...', 'command'=>proc{fail 'this is just a demo: no action has been defined for the "Print Setup..." entry'}) - add('command', 'label'=>'Print...', 'command'=>proc{fail 'this is just a demo: no action has been defined for the "Print..." entry'}) - add('separator') - add('command', 'label'=>'Dismiss Menus Demo', 'command'=>proc{$menu84_demo.destroy}) -} - -if $tk_platform['platform'] == 'macintosh' || - windowingsystem = "classic" || windowingsystem = "aqua" - modifier = 'Command' -elsif $tk_platform['platform'] == 'windows' - modifier = 'Control' -else - modifier = 'Meta' -end - -TkMenu.new($menu84_frame, 'tearoff'=>false) {|m| - $menu84_frame.add('cascade', 'label'=>'Basic', 'menu'=>m, 'underline'=>0) - add('command', 'label'=>'Long entry that does nothing') - ['A','B','C','D','E','F','G'].each{|c| - add('command', 'label'=>"Print letter \"#{c}\"", - 'underline'=>14, - 'command'=>proc{print c,"\n"}, 'accelerator'=>"#{modifier}+#{c}") - $menu84_demo.bind("#{modifier}-#{c.downcase}", proc{print c,"\n"}) - } -} - -TkMenu.new($menu84_frame, 'tearoff'=>false) {|m| - $menu84_frame.add('cascade', 'label'=>'Cascades', 'menu'=>m, 'underline'=>0) - add('command', 'label'=>'Print hello', - 'command'=>proc{print "Hello\n"}, - 'accelerator'=>"#{modifier}+H", 'underline'=>6) - $menu84_demo.bind("#{modifier}-h", proc{print "Hello\n"}) - add('command', 'label'=>'Print goodbye', - 'command'=>proc{print "Goodbye\n"}, - 'accelerator'=>"#{modifier}+G", 'underline'=>6) - $menu84_demo.bind("#{modifier}-g", proc{print "Goodbye\n"}) - - TkMenu.new(m, 'tearoff'=>false) {|cascade_check| - m.add('cascade', 'label'=>'Check buttons', - 'menu'=>cascade_check, 'underline'=>0) - oil = TkVariable.new(0) - add('check', 'label'=>'Oil checked', 'variable'=>oil) - trans = TkVariable.new(0) - add('check', 'label'=>'Transmission checked', 'variable'=>trans) - brakes = TkVariable.new(0) - add('check', 'label'=>'Brakes checked', 'variable'=>brakes) - lights = TkVariable.new(0) - add('check', 'label'=>'Lights checked', 'variable'=>lights) - add('separator') - add('command', 'label'=>'Show current values', - 'command'=>proc{showVars($menu84_demo, - ['oil', oil], - ['trans', trans], - ['brakes', brakes], - ['lights', lights])} ) - invoke 1 - invoke 3 - } - - TkMenu.new(m, 'tearoff'=>false) {|cascade_radio| - m.add('cascade', 'label'=>'Radio buttons', - 'menu'=>cascade_radio, 'underline'=>0) - pointSize = TkVariable.new - add('radio', 'label'=>'10 point', 'variable'=>pointSize, 'value'=>10) - add('radio', 'label'=>'14 point', 'variable'=>pointSize, 'value'=>14) - add('radio', 'label'=>'18 point', 'variable'=>pointSize, 'value'=>18) - add('radio', 'label'=>'24 point', 'variable'=>pointSize, 'value'=>24) - add('radio', 'label'=>'32 point', 'variable'=>pointSize, 'value'=>32) - add('separator') - style = TkVariable.new - add('radio', 'label'=>'Roman', 'variable'=>style, 'value'=>'roman') - add('radio', 'label'=>'Bold', 'variable'=>style, 'value'=>'bold') - add('radio', 'label'=>'Italic', 'variable'=>style, 'value'=>'italic') - add('separator') - add('command', 'label'=>'Show current values', - 'command'=>proc{showVars($menu84_demo, - ['pointSize', pointSize], - ['style', style])} ) - invoke 1 - invoke 7 - } -} - -TkMenu.new($menu84_frame, 'tearoff'=>false) {|m| - $menu84_frame.add('cascade', 'label'=>'Icons', 'menu'=>m, 'underline'=>0) - add('command', 'hidemargin'=>1, - 'bitmap'=>'@'+[$demo_dir,'..', - 'images','pattern.xbm'].join(File::Separator), - 'command'=>proc{TkDialog.new('title'=>'Bitmap Menu Entry', - 'text'=>'The menu entry you invoked displays a bitmap rather than a text string. Other than this, it is just like any other menu entry.', - 'bitmap'=>'', 'default'=>0, - 'buttons'=>'Dismiss')} ) - ['info', 'questhead', 'error'].each{|icon| - add('command', 'bitmap'=>icon, 'hidemargin'=>1, - 'command'=>proc{print "You invoked the #{icon} bitmap\n"}) - } - - entryconfigure(2, :columnbreak=>true) -} - -TkMenu.new($menu84_frame, 'tearoff'=>false) {|m| - $menu84_frame.add('cascade', 'label'=>'More', 'menu'=>m, 'underline'=>0) - [ 'An entry','Another entry','Does nothing','Does almost nothing', - 'Make life meaningful' ].each{|i| - add('command', 'label'=>i, - 'command'=>proc{print "You invoked \"#{i}\"\n"}) - } - - m.entryconfigure('Does almost nothing', - 'bitmap'=>'questhead', 'compound'=>'left', - 'command'=>proc{ - TkDialog.new('title'=>'Compound Menu Entry', - 'message'=>'The menu entry you invoked'+ - 'displays both a bitmap and '+ - 'a text string. Other than '+ - 'this, it is just like any '+ - 'other menu entry.', - 'buttons'=>['OK'], 'bitmap'=>'') - }) -} - -TkMenu.new($menu84_frame) {|m| - $menu84_frame.add('cascade', 'label'=>'Colors', 'menu'=>m, 'underline'=>0) - ['red', 'orange', 'yellow', 'green', 'blue'].each{|c| - add('command', 'label'=>c, 'background'=>c, - 'command'=>proc{print "You invoked \"#{c}\"\n"}) - } -} - -$menu84_demo.menu($menu84_frame) - -TkMenu.bind('', proc{|w| - begin - label = w.entrycget('active', 'label') - rescue - label = " " - end - menustatus.value = label - Tk.update(true) - }, '%W') diff --git a/ext/tk/sample/demos-en/menubu.rb b/ext/tk/sample/demos-en/menubu.rb deleted file mode 100644 index 9ff683d09c..0000000000 --- a/ext/tk/sample/demos-en/menubu.rb +++ /dev/null @@ -1,238 +0,0 @@ -# frozen_string_literal: false -# menubutton.rb -# -# This demonstration script creates a window with a bunch of menus -# and cascaded menus using menubuttons. - -require "tkcanvas" - -def optionMenu(menubutton, varName, firstValue, *rest) - varName.value = firstValue - configoptions = {'textvariable'=>varName,'indicatoron'=>'on', - 'relief'=>'raised','borderwidth'=>2,'highlightthickness'=>2, - 'anchor'=>'c','direction'=>'flush'} - configoptions.each {|key, value| - menubutton.configure(key, value) - } - menu = TkMenu.new(menubutton) { - tearoff 'off' - add 'radio', 'label'=>firstValue, 'variable'=>varName - } - menubutton.menu(menu) - for i in rest - menu.add 'radio', 'label'=>i, 'variable'=>varName - end - - return menu -end - -if defined?($menubu_demo) && $menubu_demo - $menubu_demo.destroy - $menubu_demo = nil -end - -$menubu_demo = TkToplevel.new {|w| - title("Menu Button Demonstration") - iconname("menubutton") -} - -positionWindow($menubu_demo) - -base_frame = TkFrame.new($menubu_demo).pack(:fill=>:both, :expand=>true) - -# version check -if $tk_version.to_f < 8.0 - -# label -TkLabel.new(base_frame,'font'=>$font,'wraplength'=>'4i','justify'=>'left') { - text("This is a demonstration of menubuttons. The \"Below\" menubutton pops its menu below the button; the \"Right\" button pops to the right, etc. There are two option menus directly below this text; one is just a standard menu and the other is a 16-color palette.") -}.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $menubu_demo - $menubu_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'menubu'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -else ; # Tk8.x - -body = TkFrame.new(base_frame) -body.pack('expand'=>'yes', 'fill'=>'both') - -below = TkMenubutton.new(body) { - text "Below" - underline 0 - direction 'below' - relief 'raised' -} -belowMenu = TkMenu.new(below) { - tearoff 0 - add 'command', 'label'=>"Below menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Below menu.\""} - add 'command', 'label'=>"Below menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Below menu.\""} -} -below.menu(belowMenu) -below.grid('row'=>0, 'column'=>1, 'sticky'=>'n') - -below = TkMenubutton.new(body) { - text "Below" - underline 0 - direction 'below' - relief 'raised' -} -belowMenu = TkMenu.new(below) { - tearoff 0 - add 'command', 'label'=>"Below menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Below menu.\""} - add 'command', 'label'=>"Below menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Below menu.\""} -} -below.menu(belowMenu) -below.grid('row'=>0, 'column'=>1, 'sticky'=>'n') - -below = TkMenubutton.new(body) { - text "Below" - underline 0 - direction 'below' - relief 'raised' -} -belowMenu = TkMenu.new(below) { - tearoff 0 - add 'command', 'label'=>"Below menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Below menu.\""} - add 'command', 'label'=>"Below menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Below menu.\""} -} -below.menu(belowMenu) -below.grid('row'=>0, 'column'=>1, 'sticky'=>'n') - -right = TkMenubutton.new(body) { - text "Right" - underline 0 - direction 'right' - relief 'raised' -} -rightMenu = TkMenu.new(right) { - tearoff 0 - add 'command', 'label'=>"Right menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Left menu.\""} - add 'command', 'label'=>"Right menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Right menu.\""} -} -right.menu(rightMenu) -right.grid('row'=>1, 'column'=>0, 'sticky'=>'w') - -left = TkMenubutton.new(body) { - text "Left" - underline 0 - direction 'left' - relief 'raised' -} -leftMenu = TkMenu.new(left) { - tearoff 0 - add 'command', 'label'=>"Left menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Left menu.\""} - add 'command', 'label'=>"Left menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Left menu.\""} -} -left.menu(leftMenu) -left.grid('row'=>1, 'column'=>2, 'sticky'=>'e') - -center = TkFrame.new(body) { - grid('row'=>1, 'column'=>1, 'sticky'=>'news') -} - -above = TkMenubutton.new(body) { - text "Above" - underline 0 - direction 'above' - relief 'raised' -} -aboveMenu = TkMenu.new(above) { - tearoff 0 - add 'command', 'label'=>"Above menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Above menu.\""} - add 'command', 'label'=>"Above menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Above menu.\""} -} -above.menu(aboveMenu) -above.grid('row'=>2, 'column'=>1, 'sticky'=>'s') - -center = TkFrame.new(body) { - grid('row'=>1, 'column'=>1, 'sticky'=>'news') -} - -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc { - tmppath = $menubu_demo - $menubu_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc { showCode 'menubu' } - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'expand'=>'yes', 'fill'=>'x', 'pady'=>'2m') - -msg = TkLabel.new(center) { -# font $font - wraplength '4i' - justify 'left' - text "This is a demonstration of menubuttons. The \"Below\" menubutton pops its menu below the button; the \"Right\" button pops to the right, etc. There are two option menus directly below this text; one is just a standard menu and the other is a 16-color palette." -} -msg.pack('side'=>'top', 'padx'=>25, 'pady'=>25) - -TkFrame.new(center) {|f| - menubuttonoptions = TkVariable.new - mbutton = TkMenubutton.new(f) - options = optionMenu(mbutton, menubuttonoptions, - 'one', 'two', 'three') - mbutton.pack('side'=>'left', 'padx'=>25, 'pady'=>25) - paletteColor = TkVariable.new - colors = ['Black','red4','DarkGreen','NavyBlue', 'gray75', - 'Red','Green','Blue','gray50','Yellow','Cyan','Magenta', - 'White','Brown','DarkSeaGreen','DarkViolet'] - colorMenuButton = TkMenubutton.new(f) - m = optionMenu(colorMenuButton, paletteColor, *colors) - begin - windowingsystem = Tk.windowingsystem() - rescue - windowingsystem = "" - end - if windowingsystem == "classic" || windowingsystem == "aqua" - topBorderColor = 'Black' - bottomBorderColor = 'Black' - else - topBorderColor = 'gray50' - bottomBorderColor = 'gray75' - end - for i in 0..15 - image = TkPhotoImage.new('height'=>16, 'width'=>16) - image.put(topBorderColor, 0, 0, 16, 1) - image.put(topBorderColor, 0, 1, 1, 16) - image.put(bottomBorderColor, 0, 15, 16, 16) - image.put(bottomBorderColor, 15, 1, 16, 16) - image.put(colors[i], 1, 1, 15, 15) - - selectimage = TkPhotoImage.new('height'=>16, 'width'=>16) - selectimage.put('Black', 0, 0, 16, 2) - selectimage.put('Black', 0, 2, 2, 16) - selectimage.put('Black', 2, 14, 16, 16) - selectimage.put('Black', 14, 2, 16, 14) - selectimage.put(colors[i], 2, 2, 14, 14) - - m.entryconfigure(i, 'image'=>image, 'selectimage'=>selectimage, 'hidemargin'=>'on') - end - m.configure('tearoff', 'on') - for c in ['Black', 'gray75', 'gray50', 'White'] - m.entryconfigure(c, 'columnbreak'=>1) - end - colorMenuButton.pack('side'=>'left', 'padx'=>25, 'pady'=>25) - pack 'padx'=>25, 'pady'=>25 -} - -end ; # Tk8.x diff --git a/ext/tk/sample/demos-en/msgbox.rb b/ext/tk/sample/demos-en/msgbox.rb deleted file mode 100644 index 9a5ff51b4b..0000000000 --- a/ext/tk/sample/demos-en/msgbox.rb +++ /dev/null @@ -1,91 +0,0 @@ -# frozen_string_literal: false -# msgbox.rb -# -# This demonstration script creates message boxes of various type -# -# message boxes widget demo (called by 'widget') -# - -# toplevel widget -if defined?($msgbox_demo) && $msgbox_demo - $msgbox_demo.destroy - $msgbox_demo = nil -end - -# demo toplevel widget -$msgbox_demo = TkToplevel.new {|w| - title("Message Box Demonstration") - iconname("messagebox") - positionWindow(w) -} - -base_frame = TkFrame.new($msgbox_demo).pack(:fill=>:both, :expand=>true) - -# label -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'4i', 'justify'=>'left', - 'text'=>"Choose the icon and type option of the message box. Then press the \"Message Box\" button to see the message box.").pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $msgbox_demo - $msgbox_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'msgbox'} - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Message Box' - command proc{showMessageBox $msgbox_demo} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -$msgbox_leftframe = TkFrame.new(base_frame) -$msgbox_rightframe = TkFrame.new(base_frame) -$msgbox_leftframe .pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y', - 'pady'=>'.5c', 'padx'=>'.5c') -$msgbox_rightframe.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y', - 'pady'=>'.5c', 'padx'=>'.5c') - -TkLabel.new($msgbox_leftframe, 'text'=>'Icon').pack('side'=>'top') -TkFrame.new($msgbox_leftframe, 'relief'=>'ridge', 'bd'=>1, 'height'=>2)\ -.pack('side'=>'top', 'fill'=>'x', 'expand'=>'no') - -$msgboxIcon = TkVariable.new('info') -['error', 'info', 'question', 'warning'].each {|icon| - TkRadioButton.new($msgbox_leftframe, 'text'=>icon, 'variable'=>$msgboxIcon, - 'relief'=>'flat', 'value'=>icon, 'width'=>16, - 'anchor'=>'w').pack('side'=>'top', 'pady'=>2, - 'anchor'=>'w', 'fill'=>'x') -} - -TkLabel.new($msgbox_rightframe, 'text'=>'Type').pack('side'=>'top') -TkFrame.new($msgbox_rightframe, 'relief'=>'ridge', 'bd'=>1, 'height'=>2)\ -.pack('side'=>'top', 'fill'=>'x', 'expand'=>'no') - -$msgboxType = TkVariable.new('ok') -['abortretryignore', 'ok', 'okcancel', - 'retrycancel', 'yesno', 'yesnocancel'].each {|type| - TkRadioButton.new($msgbox_rightframe, 'text'=>type, 'variable'=>$msgboxType, - 'relief'=>'flat', 'value'=>type, 'width'=>16, - 'anchor'=>'w').pack('side'=>'top', 'pady'=>2, - 'anchor'=>'w', 'fill'=>'x') -} - -def showMessageBox(w) - button = Tk.messageBox('icon'=>$msgboxIcon.value, 'type'=>$msgboxType.value, - 'title'=>'Message', 'parent'=>w, - 'message'=>"This is a \"#{$msgboxType.value}\" type messagebox with the \"#{$msgboxIcon.value}\" icon") - - Tk.messageBox('icon'=>'info', 'type'=>'ok', 'parent'=>w, - 'message'=>"You have selected \"#{button}\"") -end - diff --git a/ext/tk/sample/demos-en/msgbox2.rb b/ext/tk/sample/demos-en/msgbox2.rb deleted file mode 100644 index 0eb35c486d..0000000000 --- a/ext/tk/sample/demos-en/msgbox2.rb +++ /dev/null @@ -1,92 +0,0 @@ -# frozen_string_literal: false -# msgbox2.rb -# -# This demonstration script creates message boxes of various type -# -# message boxes widget demo (called by 'widget') -# - -# toplevel widget -if defined?($msgbox2_demo) && $msgbox2_demo - $msgbox2_demo.destroy - $msgbox2_demo = nil -end - -# demo toplevel widget -$msgbox2_demo = TkToplevel.new {|w| - title("Message Box Demonstration") - iconname("messagebox") - positionWindow(w) -} - -base_frame = TkFrame.new($msgbox2_demo).pack(:fill=>:both, :expand=>true) - -# label -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'4i', 'justify'=>'left', - 'text'=>"Choose the icon and type option of the message box. Then press the \"Message Box\" button to see the message box with both of a message and a detail.").pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $msgbox2_demo - $msgbox2_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'msgbox2'} - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Message Box' - command proc{showMessageBox2 $msgbox2_demo} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -$msgbox_leftframe = TkFrame.new(base_frame) -$msgbox_rightframe = TkFrame.new(base_frame) -$msgbox_leftframe .pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y', - 'pady'=>'.5c', 'padx'=>'.5c') -$msgbox_rightframe.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y', - 'pady'=>'.5c', 'padx'=>'.5c') - -TkLabel.new($msgbox_leftframe, 'text'=>'Icon').pack('side'=>'top') -TkFrame.new($msgbox_leftframe, 'relief'=>'ridge', 'bd'=>1, 'height'=>2)\ -.pack('side'=>'top', 'fill'=>'x', 'expand'=>'no') - -$msgboxIcon = TkVariable.new('info') -['error', 'info', 'question', 'warning'].each {|icon| - TkRadioButton.new($msgbox_leftframe, 'text'=>icon, 'variable'=>$msgboxIcon, - 'relief'=>'flat', 'value'=>icon, 'width'=>16, - 'anchor'=>'w').pack('side'=>'top', 'pady'=>2, - 'anchor'=>'w', 'fill'=>'x') -} - -TkLabel.new($msgbox_rightframe, 'text'=>'Type').pack('side'=>'top') -TkFrame.new($msgbox_rightframe, 'relief'=>'ridge', 'bd'=>1, 'height'=>2)\ -.pack('side'=>'top', 'fill'=>'x', 'expand'=>'no') - -$msgboxType = TkVariable.new('ok') -['abortretryignore', 'ok', 'okcancel', - 'retrycancel', 'yesno', 'yesnocancel'].each {|type| - TkRadioButton.new($msgbox_rightframe, 'text'=>type, 'variable'=>$msgboxType, - 'relief'=>'flat', 'value'=>type, 'width'=>16, - 'anchor'=>'w').pack('side'=>'top', 'pady'=>2, - 'anchor'=>'w', 'fill'=>'x') -} - -def showMessageBox2(w) - button = Tk.messageBox('icon'=>$msgboxIcon.value, 'type'=>$msgboxType.value, - 'title'=>'Message', 'parent'=>w, - 'message'=>"\"#{$msgboxType.value}\" Type MessageBox", - 'detail'=>"This is a \"#{$msgboxType.value}\" type messagebox with the \"#{$msgboxIcon.value}\" icon. Please click one of the following button.") - - Tk.messageBox('icon'=>'info', 'type'=>'ok', 'parent'=>w, - 'message'=>"You have selected \"#{button}\"") -end - diff --git a/ext/tk/sample/demos-en/paned1.rb b/ext/tk/sample/demos-en/paned1.rb deleted file mode 100644 index c14562a962..0000000000 --- a/ext/tk/sample/demos-en/paned1.rb +++ /dev/null @@ -1,48 +0,0 @@ -# frozen_string_literal: false -# paned1.rb -# -# This demonstration script creates a toplevel window containing -# a paned window that separates two windows horizontally. -# -# based on "Id: paned1.tcl,v 1.1 2002/02/22 14:07:01 dkf Exp" - -if defined?($paned1_demo) && $paned1_demo - $paned1_demo.destroy - $paned1_demo = nil -end - -$paned1_demo = TkToplevel.new {|w| - title("Horizontal Paned Window Demonstration") - iconname("paned1") - positionWindow(w) -} - -base_frame = TkFrame.new($paned1_demo).pack(:fill=>:both, :expand=>true) - -TkLabel.new(base_frame, - :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top) -The sash between the two coloured windows below can be used to divide the area between them. Use the left mouse button to resize without redrawing by just moving the sash, and use the middle mouse button to resize opaquely (always redrawing the windows in each position.) -If your Tk library linked to Ruby doesn't include a 'panedwindow', this demo doesn't work. Please use later version of Tk which supports a 'panedwindow'. -EOL - -# The bottom buttons -TkFrame.new(base_frame){|f| - pack(:side=>:bottom, :fill=>:x, :pady=>'2m') - - TkButton.new(f, :text=>'Dismiss', :width=>15, :command=>proc{ - $paned1_demo.destroy - $paned1_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'See Code', :width=>15, :command=>proc{ - showCode 'paned1' - }).pack(:side=>:left, :expand=>true) -} - -TkPanedwindow.new(base_frame, :orient=>:horizontal){|f| - add(Tk::Label.new(f, :text=>"This is the\nleft side", :bg=>'yellow'), - Tk::Label.new(f, :text=>"This is the\nright side", :bg=>'cyan')) - - pack(:side=>:top, :expand=>true, :fill=>:both, :pady=>2, :padx=>'2m') -} diff --git a/ext/tk/sample/demos-en/paned2.rb b/ext/tk/sample/demos-en/paned2.rb deleted file mode 100644 index 0c62235112..0000000000 --- a/ext/tk/sample/demos-en/paned2.rb +++ /dev/null @@ -1,95 +0,0 @@ -# frozen_string_literal: false -# paned2.rb -- -# -# This demonstration script creates a toplevel window containing -# a paned window that separates two windows vertically. -# -# based on "Id: paned2.tcl,v 1.1 2002/02/22 14:07:01 dkf Exp" - -if defined?($paned2_demo) && $paned2_demo - $paned2_demo.destroy - $paned2_demo = nil -end - -$paned2_demo = TkToplevel.new {|w| - title("Vertical Paned Window Demonstration") - iconname("paned2") - positionWindow(w) -} - -base_frame = TkFrame.new($paned2_demo).pack(:fill=>:both, :expand=>true) - -TkLabel.new(base_frame, - :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top) -The sash between the two scrolled windows below can be used to divide the area between them. Use the left mouse button to resize without redrawing by just moving the sash, and use the middle mouse button to resize opaquely (always redrawing the windows in each position.) -If your Tk library linked to Ruby doesn't include a 'panedwindow', this demo doesn't work. Please use later version of Tk which supports a 'panedwindow'. -EOL - -# The bottom buttons -TkFrame.new(base_frame){|f| - pack(:side=>:bottom, :fill=>:x, :pady=>'2m') - - TkButton.new(f, :text=>'Dismiss', :width=>15, :command=>proc{ - $paned2_demo.destroy - $paned2_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'See Code', :width=>15, :command=>proc{ - showCode 'paned2' - }).pack(:side=>:left, :expand=>true) -} - -paneList = TkVariable.new # define as normal variable (not array) -paneList.value = [ # ruby's array --> tcl's list - 'List of Ruby/Tk Widgets', - 'TkButton', - 'TkCanvas', - 'TkCheckbutton', - 'TkEntry', - 'TkFrame', - 'TkLabel', - 'TkLabelframe', - 'TkListbox', - 'TkMenu', - 'TkMenubutton', - 'TkMessage', - 'TkPanedwindow', - 'TkRadiobutton', - 'TkScale', - 'TkScrollbar', - 'TkSpinbox', - 'TkText', - 'TkToplevel' -] - -# Create the pane itself -TkPanedwindow.new(base_frame, :orient=>:vertical){|f| - pack(:side=>:top, :expand=>true, :fill=>:both, :pady=>2, :padx=>'2m') - - add(TkFrame.new(f){|paned2_top| - TkListbox.new(paned2_top, :listvariable=>paneList) { - # Invert the first item to highlight it - itemconfigure(0, :background=>self.cget(:foreground), - :foreground=>self.cget(:background) ) - yscrollbar(TkScrollbar.new(paned2_top).pack(:side=>:right, - :fill=>:y)) - pack(:fill=>:both, :expand=>true) - } - }, - - TkFrame.new(f, :height=>120) {|paned2_bottom| - # The bottom window is a text widget with scrollbar - paned2_xscr = TkScrollbar.new(paned2_bottom) - paned2_yscr = TkScrollbar.new(paned2_bottom) - paned2_text = TkText.new(paned2_bottom, :width=>30, :wrap=>:non) { - insert('1.0', "This is just a normal text widget") - xscrollbar(paned2_xscr) - yscrollbar(paned2_yscr) - } - Tk.grid(paned2_text, paned2_yscr, :sticky=>'nsew') - Tk.grid(paned2_xscr, :sticky=>'nsew') - TkGrid.columnconfigure(paned2_bottom, 0, :weight=>1) - TkGrid.rowconfigure(paned2_bottom, 0, :weight=>1) - } ) -} diff --git a/ext/tk/sample/demos-en/pendulum.rb b/ext/tk/sample/demos-en/pendulum.rb deleted file mode 100644 index 833a31084f..0000000000 --- a/ext/tk/sample/demos-en/pendulum.rb +++ /dev/null @@ -1,241 +0,0 @@ -# frozen_string_literal: false -# -# This demonstration illustrates how Tcl/Tk can be used to construct -# simulations of physical systems. -# (called by 'widget') -# -# based on Tcl/Tk8.5a2 widget demos - -# destroy toplevel widget for this demo script -if defined?($pendulum_demo) && $pendulum_demo - $pendulum_demo.destroy - $pendulum_demo = nil -end - -# create toplevel widget -$pendulum_demo = TkToplevel.new {|w| - title("Pendulum Animation Demonstration") - iconname("pendulum") - positionWindow(w) -} - -base_frame = TkFrame.new($pendulum_demo).pack(:fill=>:both, :expand=>true) - -# create label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text 'This demonstration shows how Ruby/Tk can be used to carry out animations that are linked to simulations of physical systems. In the left canvas is a graphical representation of the physical system itself, a simple pendulum, and in the right canvas is a graph of the phase space of the system, which is a plot of the angle (relative to the vertical) against the angular velocity. The pendulum bob may be repositioned by clicking and dragging anywhere on the left canvas.' -} -msg.pack('side'=>'top') - -# create frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $pendulum_demo - $pendulum_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'See Code' - command proc{showCode 'pendulum'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# animated wave -class PendulumAnimationDemo - def initialize(frame) - # Create some structural widgets - @pane = TkPanedWindow.new(frame, :orient=>:horizontal).pack(:fill=>:both, :expand=>true) -# @pane.add(@lf1 = TkLabelFrame.new(@pane, :text=>'Pendulum Simulation')) -# @pane.add(@lf2 = TkLabelFrame.new(@pane, :text=>'Phase Space')) - @lf1 = TkLabelFrame.new(@pane, :text=>'Pendulum Simulation') - @lf2 = TkLabelFrame.new(@pane, :text=>'Phase Space') - - # Create the canvas containing the graphical representation of the - # simulated system. - @c = TkCanvas.new(@lf1, :width=>320, :height=>200, :background=>'white', - :borderwidth=>2, :relief=>:sunken) - TkcText.new(@c, 5, 5, :anchor=>:nw, - :text=>'Click to Adjust Bob Start Position') - # Coordinates of these items don't matter; they will be set properly below - @plate = TkcLine.new(@c, 0, 25, 320, 25, :width=>2, :fill=>'grey50') - @rod = TkcLine.new(@c, 1, 1, 1, 1, :width=>3, :fill=>'black') - @bob = TkcOval.new(@c, 1, 1, 2, 2, - :width=>3, :fill=>'yellow', :outline=>'black') - TkcOval.new(@c, 155, 20, 165, 30, :fill=>'grey50', :outline=>'') - - # pack - @c.pack(:fill=>:both, :expand=>true) - - # Create the canvas containing the phase space graph; this consists of - # a line that gets gradually paler as it ages, which is an extremely - # effective visual trick. - @k = TkCanvas.new(@lf2, :width=>320, :height=>200, :background=>'white', - :borderwidth=>2, :relief=>:sunken) - @y_axis = TkcLine.new(@k, 160, 200, 160, 0, :fill=>'grey75', :arrow=>:last) - @x_axis = TkcLine.new(@k, 0, 100, 320, 100, :fill=>'grey75', :arrow=>:last) - - @graph = {} - 90.step(0, -10){|i| - # Coordinates of these items don't matter; - # they will be set properly below - @graph[i] = TkcLine.new(@k, 0, 0, 1, 1, :smooth=>true, :fill=>"grey#{i}") - } - - # labels - @label_theta = TkcText.new(@k, 0, 0, :anchor=>:ne, - :text=>'q', :font=>'Symbol 8') - @label_dtheta = TkcText.new(@k, 0, 0, :anchor=>:ne, - :text=>'dq', :font=>'Symbol 8') - - # pack - @k.pack(:fill=>:both, :expand=>true) - - # Initialize some variables - @points = [] - @theta = 45.0 - @dTheta = 0.0 - @length = 150 - - # animation loop - @timer = TkTimer.new(15){ repeat } - - # binding - @c.bindtags_unshift(btag = TkBindTag.new) - btag.bind('Destroy'){ @timer.stop } - btag.bind('1', proc{|x, y| @timer.stop; showPendulum(x.to_i, y.to_i)}, - '%x %y') - btag.bind('B1-Motion', proc{|x, y| showPendulum(x.to_i, y.to_i)}, '%x %y') - btag.bind('ButtonRelease-1', - proc{|x, y| showPendulum(x.to_i, y.to_i); @timer.start }, - '%x %y') - - btag.bind('Configure', proc{|w| @plate.coords(0, 25, w.to_i, 25)}, '%w') - - @k.bind('Configure', proc{|h, w| - h = h.to_i - w = w.to_i - @psh = h/2; - @psw = w/2 - @x_axis.coords(2, @psh, w-2, @psh) - @y_axis.coords(@psw, h-2, @psw, 2) - @label_theta.coords(@psw-4, 6) - @label_dtheta.coords(w-6, @psh+4) - }, '%h %w') - - # add - Tk.update - @pane.add(@lf1) - @pane.add(@lf2) - - # init display - showPendulum - - # animation start - @timer.start(500) - end - - # This procedure makes the pendulum appear at the correct place on the - # canvas. If the additional arguments x, y are passed instead of computing - # the position of the pendulum from the length of the pendulum rod and its - # angle, the length and angle are computed in reverse from the given - # location (which is taken to be the centre of the pendulum bob.) - def showPendulum(x=nil, y=nil) - if x && y && (x != 160 || y != 25) - @dTheta = 0.0 - x2 = x - 160 - y2 = y - 25 - @length = Math.hypot(x2, y2) - @theta = Math.atan2(x2,y2)*180/Math::PI - else - angle = @theta*Math::PI/180 - x = 160 + @length*Math.sin(angle) - y = 25 + @length*Math.cos(angle) - end - - @rod.coords(160, 25, x, y) - @bob.coords(x-15, y-15, x+15, y+15) - end - - # Update the phase-space graph according to the current angle and the - # rate at which the angle is changing (the first derivative with - # respect to time.) - def showPhase - unless @psw && @psh - @psw = @k.width/2 - @psh = @k.height/2 - end - @points << @theta + @psw << -20*@dTheta + @psh - if @points.length > 100 - @points = @points[-100..-1] - end - (0...100).step(10){|i| - first = - i - last = 11 - i - last = -1 if last >= 0 - next if first > last - lst = @points[first..last] - @graph[i].coords(lst) if lst && lst.length >= 4 - } - end - - # This procedure is the "business" part of the simulation that does - # simple numerical integration of the formula for a simple rotational - # pendulum. - def recomputeAngle - scaling = 3000.0/@length/@length - - # To estimate the integration accurately, we really need to - # compute the end-point of our time-step. But to do *that*, we - # need to estimate the integration accurately! So we try this - # technique, which is inaccurate, but better than doing it in a - # single step. What we really want is bound up in the - # differential equation: - # .. - sin theta - # theta + theta = ----------- - # length - # But my math skills are not good enough to solve this! - - # first estimate - firstDDTheta = -Math.sin(@theta * Math::PI/180) * scaling - midDTheta = @dTheta + firstDDTheta - midTheta = @theta + (@dTheta + midDTheta)/2 - # second estimate - midDDTheta = -Math.sin(midTheta * Math::PI/180) * scaling - midDTheta = @dTheta + (firstDDTheta + midDDTheta)/2 - midTheta = @theta + (@dTheta + midDTheta)/2 - # Now we do a double-estimate approach for getting the final value - # first estimate - midDDTheta = -Math.sin(midTheta * Math::PI/180) * scaling - lastDTheta = midDTheta + midDDTheta - lastTheta = midTheta + (midDTheta+ lastDTheta)/2 - # second estimate - lastDDTheta = -Math.sin(lastTheta * Math::PI/180) * scaling - lastDTheta = midDTheta + (midDDTheta + lastDDTheta)/2 - lastTheta = midTheta + (midDTheta + lastDTheta)/2 - # Now put the values back in our globals - @dTheta = lastDTheta - @theta = lastTheta - end - - # This method ties together the simulation engine and the graphical - # display code that visualizes it. - def repeat - # Simulate - recomputeAngle - - # Update the display - showPendulum - showPhase - end -end - -# Start the animation processing -PendulumAnimationDemo.new(base_frame) diff --git a/ext/tk/sample/demos-en/plot.rb b/ext/tk/sample/demos-en/plot.rb deleted file mode 100644 index 786695a85c..0000000000 --- a/ext/tk/sample/demos-en/plot.rb +++ /dev/null @@ -1,125 +0,0 @@ -# frozen_string_literal: false -# plot.rb -# -# This demonstration script creates a canvas widget showing a 2-D -# plot with data points that can be dragged with the mouse. -# -# 2-D plot widget demo (called by 'widget') -# - -# toplevel widget -if defined?($plot_demo) && $plot_demo - $plot_demo.destroy - $plot_demo = nil -end - -# demo toplevel widget -$plot_demo = TkToplevel.new {|w| - title("Plot Demonstration") - iconname("Plot") - positionWindow(w) -} - -base_frame = TkFrame.new($plot_demo).pack(:fill=>:both, :expand=>true) - -# label -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'4i', 'justify'=>'left', - 'text'=>"This window displays a canvas widget containing a simple 2-dimensional plot. You can doctor the data by dragging any of the points with mouse button 1."){ - pack('side'=>'top') -} - -# frame -$plot_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $plot_demo - $plot_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'plot'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$plot_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# font -plotFont = '-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' - -# canvas -$plot_canvas = TkCanvas.new(base_frame,'relief'=>'raised','width'=>450,'height'=>300) -$plot_canvas.pack('side'=>'top', 'fill'=>'x') - -# plot -TkcLine.new($plot_canvas, 100, 250, 400, 250, 'width'=>2) -TkcLine.new($plot_canvas, 100, 250, 100, 50, 'width'=>2) -TkcText.new($plot_canvas, 225, 20, - 'text'=>"A Simple Plot", 'font'=>plotFont, 'fill'=>'brown') - -(0..10).each {|i| - x = 100 + (i * 30) - TkcLine.new($plot_canvas, x, 250, x, 245, 'width'=>2) - TkcText.new($plot_canvas, x, 254, - 'text'=>10*i, 'font'=>plotFont, 'anchor'=>'n') -} -(0..5).each {|i| - y = 250 - (i * 40) - TkcLine.new($plot_canvas, 100, y, 105, y, 'width'=>2) - TkcText.new($plot_canvas, 96, y, - 'text'=>"#{i*50}.0", 'font'=>plotFont, 'anchor'=>'e') -} - -for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]] - x = 100 + (3*xx) - y = 250 - (4*yy)/5 - item = TkcOval.new($plot_canvas, x-6, y-6, x+6, y+6, - 'width'=>1, 'outline'=>'black', 'fill'=>'SkyBlue2') - item.addtag 'point' -end - -$plot_canvas.itembind('point', 'Any-Enter', - proc{$plot_canvas.itemconfigure 'current','fill','red'}) -$plot_canvas.itembind('point', 'Any-Leave', - proc{$plot_canvas.itemconfigure 'current','fill','SkyBlue2'}) -$plot_canvas.itembind('point', '1', - proc{|x,y| plotDown $plot_canvas,x,y}, "%x %y") -$plot_canvas.itembind('point', 'ButtonRelease-1', - proc{$plot_canvas.dtag 'selected'}) -$plot_canvas.bind('B1-Motion', - proc{|x,y| plotMove $plot_canvas,x,y}, "%x %y") - -$plot = {'lastX'=>0, 'lastY'=>0} - -# plotDown -- -# This method is invoked when the mouse is pressed over one of the -# data points. It sets up state to allow the point to be dragged. -# -# Arguments: -# w - The canvas window. -# x, y - The coordinates of the mouse press. - -def plotDown (w, x, y) - w.dtag 'selected' - w.addtag_withtag 'selected', 'current' - w.raise 'current' - $plot['lastX'] = x - $plot['lastY'] = y -end - -# plotMove -- -# This method is invoked during mouse motion events. It drags the -# current item. -# -# Arguments: -# w - The canvas window. -# x, y - The coordinates of the mouse. - -def plotMove (w, x, y) - w.move 'selected', x - $plot['lastX'], y - $plot['lastY'] - $plot['lastX'] = x - $plot['lastY'] = y -end - diff --git a/ext/tk/sample/demos-en/puzzle.rb b/ext/tk/sample/demos-en/puzzle.rb deleted file mode 100644 index edefa66d73..0000000000 --- a/ext/tk/sample/demos-en/puzzle.rb +++ /dev/null @@ -1,135 +0,0 @@ -# frozen_string_literal: false -# puzzle.rb -# -# This demonstration script creates a 15-puzzle game using a collection -# of buttons. -# -# widget demo 'puzzle' (called by 'widget') -# - -# toplevel widget -if defined?($puzzle_demo) && $puzzle_demo - $puzzle_demo.destroy - $puzzle_demo = nil -end - -# demo toplevel widget -$puzzle_demo = TkToplevel.new {|w| - title("15-Puzzle Demonstration") - iconname("15-Puzzle") - positionWindow(w) -} - -base_frame = TkFrame.new($puzzle_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "A 15-puzzle appears below as a collection of buttons. Click on any of the pieces next to the space, and that piece will slide over the space. Continue this until the pieces are arranged in numerical order from upper-left to lower-right." -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $puzzle_demo - $puzzle_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'puzzle'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame - -# Special trick: select a darker color for the space by creating a -# scrollbar widget and using its trough color. -begin - if Tk.windowingsystem() == 'aqua' - frameWidth = 168 - frameHeight = 168 - elsif Tk.default_widget_set == :Ttk - frameWidth = 148 - frameHeight = 124 - else - frameWidth = 120 - frameHeight = 120 - end -rescue - frameWidth = 120 - frameHeight = 120 -end - -# depend_on_button_width = true -depend_on_button_width = false - -s = TkScrollbar.new(base_frame) -base = TkFrame.new(base_frame) { - width frameWidth - height frameHeight - borderwidth 2 - relief 'sunken' - bg s['troughcolor'] -} -s.destroy -base.pack('side'=>'top', 'padx'=>'1c', 'pady'=>'1c') - -def def_puzzleswitch_proc(w, num) - proc{puzzleSwitch w, num} -end - -$xpos = {} -$ypos = {} -order = [3,1,6,2,5,7,15,13,4,11,8,9,14,10,12] -(0..14).each{|i| - num = order[i] - $xpos[num] = (i % 4) * 0.25 - $ypos[num] = (i / 4) * 0.25 - TkButton.new(base) {|w| - relief 'raised' - text num - highlightthickness 0 - command def_puzzleswitch_proc(w, num) - if depend_on_button_width && (w.winfo_reqwidth * 4 > base.width) - base.width = w.winfo_reqwidth * 4 - end - }.place('relx'=>$xpos[num], 'rely'=>$ypos[num], - 'relwidth'=>0.25, 'relheight'=>0.25) -} -$xpos['space'] = 0.75 -$ypos['space'] = 0.75 - - -# puzzleSwitch -- -# This procedure is invoked when the user clicks on a particular button; -# if the button is next to the empty space, it moves the button into the -# empty space. - -def puzzleSwitch(w, num) - if ( ($ypos[num] >= ($ypos['space'] - 0.01)) \ - && ($ypos[num] <= ($ypos['space'] + 0.01)) \ - && ($xpos[num] >= ($xpos['space'] - 0.26)) \ - && ($xpos[num] <= ($xpos['space'] + 0.26))) \ - || (($xpos[num] >= ($xpos['space'] - 0.01)) \ - && ($xpos[num] <= ($xpos['space'] + 0.01)) \ - && ($ypos[num] >= ($ypos['space'] - 0.26)) \ - && ($ypos[num] <= ($ypos['space'] + 0.26))) - tmp = $xpos['space'] - $xpos['space'] = $xpos[num] - $xpos[num] = tmp - tmp = $ypos['space'] - $ypos['space'] = $ypos[num] - $ypos[num] = tmp - w.place('relx'=>$xpos[num], 'rely'=>$ypos[num]) - end -end - diff --git a/ext/tk/sample/demos-en/radio.rb b/ext/tk/sample/demos-en/radio.rb deleted file mode 100644 index d6b3ffbcbe..0000000000 --- a/ext/tk/sample/demos-en/radio.rb +++ /dev/null @@ -1,87 +0,0 @@ -# frozen_string_literal: false -# radio.rb -# -# This demonstration script creates a toplevel window containing -# several radiobutton widgets. -# -# radiobutton widget demo (called by 'widget') -# - -# toplevel widget -if defined?($radio_demo) && $radio_demo - $radio_demo.destroy - $radio_demo = nil -end - -# demo toplevel widget -$radio_demo = TkToplevel.new {|w| - title("Radiobutton Demonstration") - iconname("radio") - positionWindow(w) -} - -base_frame = TkFrame.new($radio_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "Two groups of radiobuttons are displayed below. If you click on a button then the button will become selected exclusively among all the buttons in its group. A Tcl variable is associated with each group to indicate which of the group's buttons is selected. Click the \"See Variables\" button to see the current values of the variables." -} -msg.pack('side'=>'top') - -# -size = TkVariable.new -color = TkVariable.new - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $radio_demo - $radio_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'radio'} - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'See Variables' - command proc{ - showVars(base_frame, ['size', size], ['color', color]) - } - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -f_left = TkFrame.new(base_frame) -f_right = TkFrame.new(base_frame) -f_left.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'.5c', 'pady'=>'.5c') -f_right.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'.5c', 'pady'=>'.5c') - -# radiobutton -[10, 12, 18, 24].each {|sz| - TkRadioButton.new(f_left) { - text "Point Size #{sz}" - variable size - relief 'flat' - value sz - }.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') -} - -['Red', 'Green', 'Blue', 'Yellow', 'Orange', 'Purple'].each {|col| - TkRadioButton.new(f_right) { - text col - variable color - relief 'flat' - value col.downcase - }.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') -} - diff --git a/ext/tk/sample/demos-en/radio2.rb b/ext/tk/sample/demos-en/radio2.rb deleted file mode 100644 index ece7cfdf08..0000000000 --- a/ext/tk/sample/demos-en/radio2.rb +++ /dev/null @@ -1,110 +0,0 @@ -# frozen_string_literal: false -# radio2.rb -# -# This demonstration script creates a toplevel window containing -# several radiobutton widgets. -# -# radiobutton widget demo (called by 'widget') -# - -# toplevel widget -if defined?($radio2_demo) && $radio2_demo - $radio2_demo.destroy - $radio2_demo = nil -end - -# demo toplevel widget -$radio2_demo = TkToplevel.new {|w| - title("Radiobutton Demonstration 2") - iconname("radio2") - positionWindow(w) -} - -base_frame = TkFrame.new($radio2_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '5i' - justify 'left' - text "Three groups of radiobuttons are displayed below. If you click on a button then the button will become selected exclusively among all the buttons in its group. A Tcl variable is associated with each group to indicate which of the group's buttons is selected. Click the \"See Variables\" button to see the current values of the variables." -} -msg.pack('side'=>'top') - -# -size = TkVariable.new -color = TkVariable.new -align = TkVariable.new - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $radio2_demo - $radio2_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'radio2'} - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'See Variables' - command proc{ - showVars(base_frame, - ['size', size], ['color', color], ['compound', align]) - } - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -f_left = TkLabelFrame.new(base_frame, 'text'=>'Point Size', - 'pady'=>2, 'padx'=>2) -f_mid = TkLabelFrame.new(base_frame, 'text'=>'Color', - 'pady'=>2, 'padx'=>2) -f_right = TkLabelFrame.new(base_frame, 'text'=>'Alignment', - 'pady'=>2, 'padx'=>2) -f_left.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'.5c', 'pady'=>'.5c') -f_mid.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'.5c', 'pady'=>'.5c') -f_right.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'.5c', 'pady'=>'.5c') - -# radiobutton -[10, 12, 18, 24].each {|sz| - TkRadioButton.new(f_left) { - text "Point Size #{sz}" - variable size - relief 'flat' - value sz - }.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w', 'fill'=>'x') -} - -['Red', 'Green', 'Blue', 'Yellow', 'Orange', 'Purple'].each {|col| - TkRadioButton.new(f_mid) { - text col - variable color - relief 'flat' - value col.downcase - anchor 'w' - }.pack('side'=>'top', 'pady'=>2, 'fill'=>'x') -} - -# label = TkLabel.new(f_right, 'text'=>'Label', 'bitmap'=>'questhead', -label = Tk::Label.new(f_right, 'text'=>'Label', 'bitmap'=>'questhead', - 'compound'=>'left') -label.configure('width'=>TkWinfo.reqwidth(label), 'compound'=>'top') -label.height(TkWinfo.reqheight(label)) -abtn = ['Top', 'Left', 'Right', 'Bottom'].collect{|a| - lower = a.downcase - TkRadioButton.new(f_right, 'text'=>a, 'variable'=>align, 'relief'=>'flat', - 'value'=>lower, 'indicatoron'=>0, 'width'=>7, - 'command'=>proc{label.compound(align.value)}) -} - -Tk.grid('x', abtn[0]) -Tk.grid(abtn[1], label, abtn[2]) -Tk.grid('x', abtn[3]) diff --git a/ext/tk/sample/demos-en/radio3.rb b/ext/tk/sample/demos-en/radio3.rb deleted file mode 100644 index d1629c884e..0000000000 --- a/ext/tk/sample/demos-en/radio3.rb +++ /dev/null @@ -1,118 +0,0 @@ -# frozen_string_literal: false -# radio3.rb -# -# This demonstration script creates a toplevel window containing -# several radiobutton widgets. -# -# radiobutton widget demo (called by 'widget') -# - -# toplevel widget -if defined?($radio3_demo) && $radio3_demo - $radio3_demo.destroy - $radio3_demo = nil -end - -# demo toplevel widget -$radio3_demo = TkToplevel.new {|w| - title("Radiobutton Demonstration 3") - iconname("radio3") - positionWindow(w) -} - -base_frame = TkFrame.new($radio3_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '5i' - justify 'left' - text "Three groups of radiobuttons are displayed below. If you click on a button then the button will become selected exclusively among all the buttons in its group. A Tcl variable is associated with each group to indicate which of the group's buttons is selected. When the 'Tristate' button is pressed, the radio buttons will display the tri-state mode. Selecting any radio button will return the buttons to their respective on/off state. Click the \"See Variables\" button to see the current values of the variables." -} -msg.grid(:row=>0, :column=>0, :columnspan=>3, :sticky=>'nsew') - -# variable -size = TkVariable.new -color = TkVariable.new -align = TkVariable.new - -# frame -TkFrame.new(base_frame) {|frame| - TkGrid(TkFrame.new(frame, :height=>2, :relief=>:sunken, :bd=>2), - :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - TkButton.new(frame, :text=>'See Variables', - :image=>$image['view'], :compound=>:left, - :command=>proc{ - showVars(base_frame, ['size', size], - ['color', color], ['compound', align]) - }), - TkButton.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'radio3'}), - TkButton.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - tmppath = $radio3_demo - $radio3_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - }), - :padx=>4, :pady=>4) - frame.grid_columnconfigure(0, :weight=>1) - TkGrid(frame, :row=>3, :column=>0, :columnspan=>3, :sticky=>'nsew') -} - -# frame -f_left = TkLabelFrame.new(base_frame, 'text'=>'Point Size', - 'pady'=>2, 'padx'=>2) -f_mid = TkLabelFrame.new(base_frame, 'text'=>'Color', - 'pady'=>2, 'padx'=>2) -f_right = TkLabelFrame.new(base_frame, 'text'=>'Alignment', - 'pady'=>2, 'padx'=>2) -f_left .grid('column'=>0, 'row'=>1, 'pady'=>'.5c', 'padx'=>'.5c', 'rowspan'=>2) -f_mid .grid('column'=>1, 'row'=>1, 'pady'=>'.5c', 'padx'=>'.5c', 'rowspan'=>2) -f_right.grid('column'=>2, 'row'=>1, 'pady'=>'.5c', 'padx'=>'.5c') - -TkButton.new(base_frame, 'text'=>'Tristate', - 'command'=>proc{size.value = 'multi'; color.value = 'multi'}){ - grid('column'=>2, 'row'=>2, 'pady'=>'.5c', 'padx'=>'.5c') -} - -# radiobutton -[10, 12, 14, 18, 24].each {|sz| - TkRadioButton.new(f_left) { - text "Point Size #{sz}" - variable size - relief 'flat' - value sz - tristatevalue 'multi' - }.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w', 'fill'=>'x') -} - -['Red', 'Green', 'Blue', 'Yellow', 'Orange', 'Purple'].each {|col| - TkRadioButton.new(f_mid) { - text col - variable color - relief 'flat' - value col.downcase - anchor 'w' - tristatevalue 'multi' - command proc{f_mid.fg(color.value)} - }.pack('side'=>'top', 'pady'=>2, 'fill'=>'x') -} - -# label = TkLabel.new(f_right, 'text'=>'Label', 'bitmap'=>'questhead', -label = Tk::Label.new(f_right, 'text'=>'Label', 'bitmap'=>'questhead', - 'compound'=>'left') -label.configure('width'=>TkWinfo.reqwidth(label), 'compound'=>'top') -label.height(TkWinfo.reqheight(label)) -a_btn = ['Top', 'Left', 'Right', 'Bottom'].collect{|a| - TkRadioButton.new(f_right, 'text'=>a, 'variable'=>align, 'relief'=>'flat', - 'value'=>a.downcase, 'indicatoron'=>0, 'width'=>7, - 'command'=>proc{label.compound(align.value)}) -} - -Tk.grid('x', a_btn[0]) -Tk.grid(a_btn[1], label, a_btn[2]) -Tk.grid('x', a_btn[3]) diff --git a/ext/tk/sample/demos-en/rmt b/ext/tk/sample/demos-en/rmt deleted file mode 100644 index dcfb328fc8..0000000000 --- a/ext/tk/sample/demos-en/rmt +++ /dev/null @@ -1,268 +0,0 @@ -#!/usr/bin/env ruby - -# rmt -- -# This script implements a simple remote-control mechanism for -# Tk applications. It allows you to select an application and -# then type commands to that application. - -require 'tk' - -class Rmt - def initialize(parent=nil) - win = self - - unless parent - parent = TkRoot.new - end - root = TkWinfo.toplevel(parent) - root.minsize(1,1) - - # The instance variable below keeps track of the remote application - # that we're sending to. If it's an empty string then we execute - # the commands locally. - @app = 'local' - @mode = 'Ruby' - - # The instance variable below keeps track of whether we're in the - # middle of executing a command entered via the text. - @executing = 0 - - # The instance variable below keeps track of the last command executed, - # so it can be re-executed in response to !! commands. - @lastCommand = "" - - # Create menu bar. Arrange to recreate all the information in the - # applications sub-menu whenever it is cascaded to. - - TkFrame.new(root, 'relief'=>'raised', 'bd'=>2) {|f| - pack('side'=>'top', 'fill'=>'x') - TkMenubutton.new(f, 'text'=>'File', 'underline'=>0) {|mb| - TkMenu.new(mb) {|mf| - mb.menu(mf) - TkMenu.new(mf) {|ma| - postcommand proc{win.fillAppsMenu ma} - mf.add('cascade', 'label'=>'Select Application', - 'menu'=>ma, 'underline'=>0) - } - add('command', 'label'=>'Quit', - 'command'=>proc{root.destroy}, 'underline'=>0) - } - pack('side'=>'left') - } - } - - # Create text window and scrollbar. - - @txt = TkText.new(root, 'relief'=>'sunken', 'bd'=>2, 'setgrid'=>true) { - yscrollbar(TkScrollbar.new(root){pack('side'=>'right', 'fill'=>'y')}) - pack('side'=>'left') - } - - @promptEnd = TkTextMark.new(@txt, 'insert') - - # Create a binding to forward commands to the target application, - # plus modify many of the built-in bindings so that only information - # in the current command can be deleted (can still set the cursor - # earlier in the text and select and insert; just can't delete). - - @txt.bindtags([@txt, TkText, root, 'all']) - @txt.bind('Return', proc{ - @txt.set_insert('end - 1c') - @txt.insert('insert', "\n") - win.invoke - Tk.callback_break - }) - @txt.bind('Delete', proc{ - begin - @txt.tag_remove('sel', 'sel.first', @promptEnd) - rescue - end - if @txt.tag_nextrange('sel', '1.0', 'end') == [] - if @txt.compare('insert', '<', @promptEnd) - Tk.callback_break - end - end - }) - @txt.bind('BackSpace', proc{ - begin - @txt.tag_remove('sel', 'sel.first', @promptEnd) - rescue - end - if @txt.tag_nextrange('sel', '1.0', 'end') == [] - if @txt.compare('insert', '<', @promptEnd) - Tk.callback_break - end - end - }) - @txt.bind('Control-d', proc{ - if @txt.compare('insert', '<', @promptEnd) - Tk.callback_break - end - }) - @txt.bind('Control-k', proc{ - if @txt.compare('insert', '<', @promptEnd) - @txt.set_insert(@promptEnd) - end - }) - @txt.bind('Control-t', proc{ - if @txt.compare('insert', '<', @promptEnd) - Tk.callback_break - end - }) - @txt.bind('Meta-d', proc{ - if @txt.compare('insert', '<', @promptEnd) - Tk.callback_break - end - }) - @txt.bind('Meta-BackSpace', proc{ - if @txt.compare('insert', '<=', @promptEnd) - Tk.callback_break - end - }) - @txt.bind('Control-h', proc{ - if @txt.compare('insert', '<=', @promptEnd) - Tk.callback_break - end - }) - - @txt.tag_configure('bold', 'font'=>['Courier', 12, 'bold']) - - @app = Tk.appname('rmt') - if (@app =~ /^rmt(.*)$/) - root.title("Tk Remote Controller#{$1}") - root.iconname("Tk Remote#{$1}") - end - prompt - @txt.focus - #@app = TkWinfo.appname(TkRoot.new) - end - - def tkTextInsert(w,s) - return if s == "" - begin - if w.compare('sel.first','<=','insert') \ - && w.compare('sel.last','>=','insert') - w.tag_remove('sel', 'sel.first', @promptEnd) - w.delete('sel.first', 'sel.last') - end - rescue - end - w.insert('insert', s) - w.see('insert') - end - - # The method below is used to print out a prompt at the - # insertion point (which should be at the beginning of a line - # right now). - - def prompt - @txt.insert('insert', "#{@app}: ") - @promptEnd.set('insert') - @promptEnd.gravity = 'left' - @txt.tag_add('bold', "#{@promptEnd.path} linestart", @promptEnd) - end - - # The method below executes a command (it takes everything on the - # current line after the prompt and either sends it to the remote - # application or executes it locally, depending on "app". - - def invoke - cmd = @txt.get(@promptEnd, 'insert') - @executing += 1 - case (@mode) - when 'Tcl' - if Tk.info('complete', cmd) - if (cmd == "!!\n") - cmd = @lastCommand - else - @lastCommand = cmd - end - begin - msg = Tk.appsend(@app, false, cmd) - rescue - msg = "Error: #{$!}" - end - @txt.insert('insert', msg + "\n") if msg != "" - prompt - @promptEnd.set('insert') - end - - when 'Ruby' - if (cmd == "!!\n") - cmd = @lastCommand - end - complete = true - begin - eval("proc{#{cmd}}") - rescue - complete = false - end - if complete - @lastCommand = cmd - begin -# msg = Tk.appsend(@app, false, -# 'ruby', -# '"(' + cmd.gsub(/[][$"]/, '\\\\\&') + ').to_s"') - msg = Tk.rb_appsend(@app, false, cmd) - rescue - msg = "Error: #{$!}" - end - @txt.insert('insert', msg + "\n") if msg != "" - prompt - @promptEnd.set('insert') - end - end - - @executing -= 1 - @txt.yview_pickplace('insert') - end - - # The following method is invoked to change the application that - # we're talking to. It also updates the prompt for the current - # command, unless we're in the middle of executing a command from - # the text item (in which case a new prompt is about to be output - # so there's no need to change the old one). - - def newApp(appName, mode) - @app = appName - @mode = mode - if @executing == 0 - @promptEnd.gravity = 'right' - @txt.delete("#{@promptEnd.path} linestart", @promptEnd) - @txt.insert(@promptEnd, "#{appName}: ") - @txt.tag_add('bold', "#{@promptEnd.path} linestart", @promptEnd) - @promptEnd.gravity = 'left' - end - end - - # The method below will fill in the applications sub-menu with a list - # of all the applications that currently exist. - - def fillAppsMenu(menu) - win = self - begin - menu.delete(0,'last') - rescue - end - TkWinfo.interps.sort.each{|ip| - begin - if Tk.appsend(ip, false, 'info commands ruby') == "" - mode = 'Tcl' - else - mode = 'Ruby' - end - menu.add('command', 'label'=>format("%s (#{mode}/Tk)", ip), - 'command'=>proc{win.newApp ip, mode}) - rescue - menu.add('command', 'label'=>format("%s (unknown Tk)", ip), - 'command'=>proc{win.newApp ip, mode}, 'state'=>'disabled') - end - } - menu.add('command', 'label'=>format("local (Ruby/Tk)"), - 'command'=>proc{win.newApp 'local', 'Ruby'}) - end -end - -Rmt.new - -Tk.mainloop diff --git a/ext/tk/sample/demos-en/rolodex b/ext/tk/sample/demos-en/rolodex deleted file mode 100644 index b4c42b6199..0000000000 --- a/ext/tk/sample/demos-en/rolodex +++ /dev/null @@ -1,320 +0,0 @@ -#!/usr/bin/env ruby -# -# rolodex -- -# This script is a part of Tom LaStrange's rolodex -# -# Copyright (C) 1998 by Takaaki Tateishi -# Time-stamp: "03/08/02 06:23:06 nagai" -# - -require "tk" - - -def show_help(topic,x=0,y=0) - if( topic.is_a?(TkWindow) ) - w = TkWinfo.containing(x,y) - if( TkWinfo.exist?(w) ) - topic = w - end - end - - if( $helpTopics.include?(topic) ) - msg = $helpTopics[topic] - else - msg = "Sorry, but no help is available for this topic" - end - TkDialog.new("title"=>"Rolodex Help", - "message"=>"Information on #{topic}:\n\n#{msg}", - "default_button"=>0, - "buttons"=>["OK"]) -end - -def fillCard - clearAction - $root.frame.entry[1].insert(0,"Takaaki Tateishi") - $root.frame.entry[2].insert(0,"Japan Advanced Institute of Science and Techonology") - $root.frame.entry[3].insert(0,"1-1 Asahidai, Tatsunokuchi") - $root.frame.entry[4].insert(0,"Ishikawa 923-1292, Japan") - $root.frame.entry[5].insert(0,"private") - $root.frame.entry[6].insert(0,"***-***-****") - $root.frame.entry[7].insert(0,"***-***-****") -end - -def addAction - for i in 1..7 - STDERR.print format("%-12s %s\n", - RolodexFrame::LABEL[i], - $root.frame.entry[i].value) - end -end - -def clearAction - for i in 1..7 - $root.frame.entry[i].delete(0,"end") - end -end - -def fileAction - TkDialog.new("title"=>"File Selection", - "message"=>"This is a dummy file selection dialog box.\n", - "default_button"=>0, - "buttons"=>["OK"]) - STDERR.print "dummy file name\n" -end - -def deleteAction - result = TkDialog.new("title"=>"Confirm Action", - "message"=>"Are you sure?", - "default_button"=>0, - "buttons"=>["Cancel"]) - if( result.value == 0 ) - clearAction - end -end - - -class RolodexFrame < TkFrame - attr_reader :entry, :label - - LABEL = ["","Name:","Address:","","","Home Phone:","Work Phone:","Fax:"] - - def initialize(parent=nil,keys=nil) - super(parent,keys) - self["relief"] = "flat" - - @i = [] - @label = [] - @entry = [] - for i in 1..7 - @i[i] = TkFrame.new(self) - @i[i].pack("side"=>"top", - "pady"=>2, - "anchor"=>"e") - @label[i] = TkLabel.new(@i[i], - "text"=>LABEL[i], - "anchor"=>"e") - @entry[i] = TkEntry.new(@i[i], - "width"=>30, - "relief"=>"sunken") - @entry[i].pack("side"=>"right") - @label[i].pack("side"=>"right") - end - end -end - -class RolodexButtons < TkFrame - attr_reader :clear, :add, :search, :delete - - def initialize(parent,keys=nil) - super(parent,keys) - @clear = TkButton.new(self, - "text" => "Clear") - @add = TkButton.new(self, - "text" => "Add") - @search = TkButton.new(self, - "text" => "Search") - @delete = TkButton.new(self, - "text" => "Delete") - for w in [@clear,@add,@search,@delete] - w.pack("side"=>"left", "padx"=>2) - end - end -end - -class RolodexMenuFrame < TkFrame - attr_reader :file_menu, :help_menu, :file, :help - - def initialize(parent,keys=nil) - super(parent,keys) - configure("relief"=>"raised", - "borderwidth"=>1) - - @file = TkMenubutton.new(self, - "text"=>"File", - "underline"=>0) - @file_menu = TkMenu.new(@file) - @file_menu.add("command", - "label" => "Load ...", - "command" => proc{fileAction}, - "underline" => 0) - @file_menu.add("command", - "label" => "Exit", - "command" => proc{$root.destroy}, - "underline" => 0) - @file.menu(@file_menu) - @file.pack("side"=>"left") - - @help = TkMenubutton.new(self, - "text"=>"Help", - "underline"=>0) - @help_menu = TkMenu.new(@help) - @help_menu.add("command", - "label"=>"On Context...", - "command"=>proc{show_help("context")}, - "underline"=>3) - @help_menu.add("command", - "label"=>"On Help...", - "command"=>proc{show_help("help")}, - "underline"=>3) - @help_menu.add("command", - "label"=>"On Window...", - "command"=>proc{show_help("window")}, - "underline"=>3) - @help_menu.add("command", - "label"=>"On Keys...", - "command"=>proc{show_help("keys")}, - "underline"=>3) - @help_menu.add("command", - "label"=>"On version...", - "command"=>proc{show_help("version")}, - "underline"=>3) - @help.menu(@help_menu) - @help.pack("side"=>"right") - end -end - -class Rolodex < TkRoot - attr_reader :frame, :buttons, :menu - - def initialize(*args) - super(*args) - @frame = RolodexFrame.new(self) - @frame.pack("side"=>"top", - "fill"=>"y", - "anchor"=>"center") - @buttons = RolodexButtons.new(self) - @buttons.pack("side"=>"bottom", - "pady"=>2, - "anchor"=>"center") - @menu = RolodexMenuFrame.new(self) - @menu.pack("before"=>@frame, - "side"=>"top", - "fill"=>"x") - end -end - -$root = Rolodex.new - -$root.buttons.delete.configure("command"=>proc{deleteAction}) -$root.buttons.add.configure("command"=>proc{addAction}) -$root.buttons.clear.configure("command"=>proc{clearAction}) -$root.buttons.search.configure("command"=>proc{addAction; fillCard}) - -$root.buttons.clear.configure("text"=>"Clear Ctrl+C") -$root.bind("Control-c",proc{clearAction}) - -$root.buttons.add.configure("text"=>"Add Ctrl+A") -$root.bind("Control-a",proc{addAction}) - -$root.buttons.search.configure("text"=>"Search Ctrl+S") -$root.bind("Control-s",proc{addAction; fillCard}) - -$root.buttons.delete.configure("text"=>"Delete... Ctrl+D") -$root.bind("Control-d",proc{deleteAction}) - -$root.menu.file_menu.entryconfigure(1, "accel"=>"Ctrl+F") -$root.bind("Control-f",proc{fileAction}) - -$root.menu.file_menu.entryconfigure(2, "accel"=>"Ctrl+Q") -$root.bind("Control-q",proc{$root.destroy}) - -$root.frame.entry[1].focus - -$root.bind("Any-F1", - proc{|event| show_help(event.widget, event.x_root, event.y_root)}) -$root.bind("Any-Help", - proc{|event| show_help(event.widget, event.x_root, event.y_root)}) - - -$helpTopics = {} - -$helpTopics[$root.menu.file] = <:both, :expand=>true) - -# label -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'5i', 'justify'=>'left', - 'text'=>"This canvas widget shows a mock-up of a ruler. You can create tab stops by dragging them out of the well to the right of the ruler. You can also drag existing tab stops. If you drag a tab stop far enough up or down so that it turns dim, it will be deleted when you release the mouse button."){ - pack('side'=>'top') -} - -# frame -$ruler_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $ruler_demo - $ruler_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'ruler'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$ruler_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# canvas -$ruler_canvas = TkCanvas.new(base_frame, 'width'=>'14.8c', 'height'=>'2.5c') -$ruler_canvas.pack('side'=>'top', 'fill'=>'x') - -# -unless Struct.const_defined?("RulerInfo") - $demo_rulerInfo = Struct.new("RulerInfo", :grid, :left, :right, :x, :y, - :top, :bottom, :size, :normalStyle, - :activeStyle, :deleteStyle).new -end -$demo_rulerInfo.grid = '.25c' -$demo_rulerInfo.left = TkWinfo.fpixels($ruler_canvas, '1c') -$demo_rulerInfo.right = TkWinfo.fpixels($ruler_canvas, '13c') -$demo_rulerInfo.top = TkWinfo.fpixels($ruler_canvas, '1c') -$demo_rulerInfo.bottom = TkWinfo.fpixels($ruler_canvas, '1.5c') -$demo_rulerInfo.size = TkWinfo.fpixels($ruler_canvas, '.2c') -$demo_rulerInfo.normalStyle = {'fill'=>'black'} -if TkWinfo.depth($ruler_canvas) > 1 - $demo_rulerInfo.activeStyle = {'fill'=>'red', 'stipple'=>''} - $demo_rulerInfo.deleteStyle = {'fill'=>'red', - 'stipple'=>'@'+[$demo_dir, '..', - 'images', 'gray25.xbm'].join(File::Separator)} -else - $demo_rulerInfo.activeStyle = {'fill'=>'black', 'stipple'=>''} - $demo_rulerInfo.deleteStyle = {'fill'=>'black', - 'stipple'=>'@'+[$demo_dir, '..', - 'images', 'gray25.xbm'].join(File::Separator)} -end - -TkcLine.new($ruler_canvas, - '1c', '0.5c', '1c', '1c', '13c', '1c', '13c', '0.5c', 'width'=>1) -(0..11).each{|i| - x = i+1 - TkcLine.new($ruler_canvas, "#{x}c", '1c', "#{x}c", '0.6c', 'width'=>1) - TkcLine.new($ruler_canvas, "#{x}.25c", '1c', "#{x}.25c", '0.8c', 'width'=>1) - TkcLine.new($ruler_canvas, "#{x}.5c", '1c', "#{x}.5c", '0.7c', 'width'=>1) - TkcLine.new($ruler_canvas, "#{x}.75c", '1c', "#{x}.75c", '0.8c', 'width'=>1) - TkcText.new($ruler_canvas, "#{x}.15c", '0.75c', 'text'=>i, 'anchor'=>'sw') -} - -$rulerTag_well = TkcTag.new($ruler_canvas) -$ruler_canvas\ -.addtag_withtag($rulerTag_well, - TkcRectangle.new($ruler_canvas, - '13.2c', '1c', '13.8c', '0.5c', - 'outline'=>'black', - 'fill'=>($ruler_canvas\ - .configinfo('background'))[4]) ) -$ruler_canvas\ -.addtag_withtag($rulerTag_well, - rulerMkTab($ruler_canvas, - TkWinfo.pixels($ruler_canvas, '13.5c'), - TkWinfo.pixels($ruler_canvas, '.65c') ) ) - -$rulerTag_well.bind('1', proc{|x,y| rulerNewTab($ruler_canvas,x,y)}, '%x %y') -$ruler_canvas.itembind('tab', '1', - proc{|x,y| rulerSelectTab($ruler_canvas,x,y)}, '%x %y') -$ruler_canvas.bind('B1-Motion', - proc{|x,y| rulerMoveTab($ruler_canvas,x,y)}, '%x %y') -$ruler_canvas.bind('Any-ButtonRelease-1', proc{rulerReleaseTab($ruler_canvas)}) - -# rulerNewTab -- -# Does all the work of creating a tab stop, including creating the -# triangle object and adding tags to it to give it tab behavior. -# -# Arguments: -# c - The canvas window. -# x, y - The coordinates of the tab stop. - -def rulerNewTab(c,x,y) - v = $demo_rulerInfo - c.addtag_withtag('active', rulerMkTab(c,x,y)) - c.addtag_withtag('tab', 'active') - v.x = x - v.y = y - rulerMoveTab(c,x,y) -end - -# rulerSelectTab -- -# This method is invoked when mouse button 1 is pressed over -# a tab. It remembers information about the tab so that it can -# be dragged interactively. -# -# Arguments: -# c - The canvas widget. -# x, y - The coordinates of the mouse (identifies the point by -# which the tab was picked up for dragging). - -def rulerSelectTab(c,x,y) - v = $demo_rulerInfo - v.x = c.canvasx(x, v.grid) - v.y = v.top+2 - c.addtag_withtag('active', 'current') - c.itemconfigure('active', v.activeStyle) - c.raise('active') -end - -# rulerMoveTab -- -# This method is invoked during mouse motion events to drag a tab. -# It adjusts the position of the tab, and changes its appearance if -# it is about to be dragged out of the ruler. -# -# Arguments: -# c - The canvas widget. -# x, y - The coordinates of the mouse. - -def rulerMoveTab(c,x,y) - v = $demo_rulerInfo - return if c.find_withtag('active') == [] - cx = c.canvasx(x,v.grid) - cy = c.canvasy(y) - cx = v.left if cx < v.left - cx = v.right if cx > v.right - if (cy >= v.top && cy <= v.bottom) - cy = v.top+2 - c.itemconfigure('active', v.activeStyle) - else - cy = cy-v.size-2 - c.itemconfigure('active', v.deleteStyle) - end - c.move('active', cx-v.x, cy-v.y) - v.x = cx - v.y = cy -end - -# rulerReleaseTab -- -# This method is invoked during button release events that end -# a tab drag operation. It deselects the tab and deletes the tab if -# it was dragged out of the ruler. -# -# Arguments: -# c - The canvas widget. -# x, y - The coordinates of the mouse. - -def rulerReleaseTab(c) - v = $demo_rulerInfo - return if c.find_withtag('active') == [] - if v.y != v.top+2 - c.delete('active') - else - c.itemconfigure('active', v.normalStyle) - c.dtag('active') - end -end - diff --git a/ext/tk/sample/demos-en/sayings.rb b/ext/tk/sample/demos-en/sayings.rb deleted file mode 100644 index e7ddfe5b5d..0000000000 --- a/ext/tk/sample/demos-en/sayings.rb +++ /dev/null @@ -1,107 +0,0 @@ -# frozen_string_literal: false -# sayings.rb -# -# This demonstration script creates a listbox that can be scrolled -# both horizontally and vertically. It displays a collection of -# well-known sayings. -# -# listbox widget demo 'sayings' (called by 'widget') -# - -# toplevel widget -if defined?($sayings_demo) && $sayings_demo - $sayings_demo.destroy - $sayings_demo = nil -end - -# demo toplevel widget -$sayings_demo = TkToplevel.new {|w| - title("Listbox Demonstration (well-known sayings)") - iconname("sayings") - positionWindow(w) -} - -base_frame = TkFrame.new($sayings_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "The listbox below contains a collection of well-known sayings. You can scan the list using either of the scrollbars or by dragging in the listbox window with button 2 pressed." -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $sayings_demo - $sayings_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'sayings'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -sayings_lbox = nil -TkFrame.new(base_frame, 'borderwidth'=>10) {|w| - sv = TkScrollbar.new(w) - sh = TkScrollbar.new(w, 'orient'=>'horizontal') - sayings_lbox = TkListbox.new(w) { - setgrid 1 - width 20 - height 10 - yscrollcommand proc{|first,last| sv.set first,last} - xscrollcommand proc{|first,last| sh.set first,last} - } - sv.command(proc{|*args| sayings_lbox.yview(*args)}) - sh.command(proc{|*args| sayings_lbox.xview(*args)}) - - if $tk_version =~ /^4\.[01]/ - sv.pack('side'=>'right', 'fill'=>'y') - sh.pack('side'=>'bottom', 'fill'=>'x') - sayings_lbox.pack('expand'=>'yes', 'fill'=>'y') - - else - sayings_lbox.grid('row'=>0, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - sv.grid('row'=>0, 'column'=>1, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - sh.grid('row'=>1, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - TkGrid.rowconfigure(w, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure(w, 0, 'weight'=>1, 'minsize'=>0) - end - -}.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'y') - -sayings_lbox.insert(0, -"Waste not, want not", -"Early to bed and early to rise makes a man healthy, wealthy, and wise", -"Ask not what your country can do for you, ask what you can do for your country", -"I shall return", -"NOT", -"A picture is worth a thousand words", -"User interfaces are hard to build", -"Thou shalt not steal", -"A penny for your thoughts", -"Fool me once, shame on you; fool me twice, shame on me", -"Every cloud has a silver lining", -"Where there's smoke there's fire", -"It takes one to know one", -"Curiosity killed the cat; but satisfaction brought it back", -"Take this job and shove it", -"Up a creek without a paddle", -"I'm mad as hell and I'm not going to take it any more", -"An apple a day keeps the doctor away", -"Don't look a gift horse in the mouth" -) - diff --git a/ext/tk/sample/demos-en/search.rb b/ext/tk/sample/demos-en/search.rb deleted file mode 100644 index 82c0d169a9..0000000000 --- a/ext/tk/sample/demos-en/search.rb +++ /dev/null @@ -1,188 +0,0 @@ -# frozen_string_literal: false -# search.rb -# -# This demonstration script creates a collection of widgets that -# allow you to load a file into a text widget, then perform searches -# on that file. -# -# Text Search widget demo (called by 'widget') -# - -# textLoadFile -- -# This method below loads a file into a text widget, discarding -# the previous contents of the widget. Tags for the old widget are -# not affected, however. -# -# Arguments: -# w - The window into which to load the file. Must be a -# text widget. -# file - The name of the file to load. Must be readable. - -def textLoadFile(w,file) - w.delete('1.0', 'end') - f = open(file, 'r') - while(!f.eof?) - w.insert('end', f.read(1000)) - end - f.close -end - -# textSearch -- -# Search for all instances of a given string in a text widget and -# apply a given tag to each instance found. -# -# Arguments: -# w - The window in which to search. Must be a text widget. -# string - The string to search for. The search is done using -# exact matching only; no special characters. -# tag - Tag to apply to each instance of a matching string. - -def textSearch(w, string, tag) - tag.remove('0.0', 'end') - return if string == "" - cur = '1.0' - loop { - cur, len = w.search_with_length(string, cur, 'end') - break if cur == "" - tag.add(cur, "#{cur} + #{len} char") - cur = w.index("#{cur} + #{len} char") - } -end - -# textToggle -- -# This method is invoked repeatedly to invoke two commands at -# periodic intervals. It normally reschedules itself after each -# execution but if an error occurs (e.g. because the window was -# deleted) then it doesn't reschedule itself. -# -# Arguments: -# cmd1 - Command to execute when method is called. -# sleep1 - Ms to sleep after executing cmd1 before executing cmd2. -# cmd2 - Command to execute in the *next* invocation of this method. -# sleep2 - Ms to sleep after executing cmd2 before executing cmd1 again. - -def textToggle(cmd1,sleep1,cmd2,sleep2) - sleep_list = [sleep2, sleep1] - TkAfter.new(proc{sleep = sleep_list.shift; sleep_list.push(sleep); sleep}, - -1, cmd1, cmd2).start(sleep1) -end - -# toplevel widget -if defined?($search_demo) && $search_demo - $search_demo.destroy - $search_demo = nil -end - -# demo toplevel widget -$search_demo = TkToplevel.new {|w| - title("Text Demonstration - Search and Highlight") - iconname("search") - positionWindow(w) -} - -base_frame = TkFrame.new($search_demo).pack(:fill=>:both, :expand=>true) - -# frame -$search_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $search_demo - $search_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'search'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$search_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -TkFrame.new(base_frame) {|f| - TkLabel.new(f, 'text'=>'File name:', - 'width'=>13, 'anchor'=>'w').pack('side'=>'left') - $search_fileName = TkVariable.new - TkEntry.new(f, 'width'=>40, - 'textvariable'=>$search_fileName) { - pack('side'=>'left') - bind('Return', proc{textLoadFile($search_text, $search_fileName.value) - $search_string_entry.focus}) - focus - } - TkButton.new(f, 'text'=>'Load File', - 'command'=>proc{textLoadFile($search_text, - $search_fileName.value)})\ - .pack('side'=>'left', 'pady'=>5, 'padx'=>10) -}.pack('side'=>'top', 'fill'=>'x') - -TkFrame.new(base_frame) {|f| - TkLabel.new(f, 'text'=>'Search string:', - 'width'=>13, 'anchor'=>'w').pack('side'=>'left') - $search_searchString = TkVariable.new - $search_string_entry = TkEntry.new(f, 'width'=>40, - 'textvariable'=>$search_searchString) { - pack('side'=>'left') - bind('Return', proc{textSearch($search_text, $search_searchString.value, - $search_Tag)}) - } - TkButton.new(f, 'text'=>'Highlight', - 'command'=>proc{textSearch($search_text, - $search_searchString.value, - $search_Tag)}) { - pack('side'=>'left', 'pady'=>5, 'padx'=>10) - } -}.pack('side'=>'top', 'fill'=>'x') - -$search_text = TkText.new(base_frame, 'setgrid'=>true, 'wrap'=>'word') {|t| - $search_Tag = TkTextTag.new(t) - TkScrollbar.new(base_frame, 'command'=>proc{|*args| t.yview(*args)}) {|sc| - t.yscrollcommand(proc{|first,last| sc.set first,last}) - pack('side'=>'right', 'fill'=>'y') - } - pack('expand'=>'yes', 'fill'=>'both') -} - -# Set up display styles for text highlighting. - -if TkWinfo.depth($search_demo) > 1 - textToggle(proc{ - $search_Tag.configure('background'=>'#ce5555', - 'foreground'=>'white') - }, - 800, - proc{ - $search_Tag.configure('background'=>'', 'foreground'=>'') - }, - 200 ) -else - textToggle(proc{ - $search_Tag.configure('background'=>'black', - 'foreground'=>'white') - }, - 800, - proc{ - $search_Tag.configure('background'=>'', 'foreground'=>'') - }, - 200 ) -end -$search_text.insert('1.0', "\ -This window demonstrates how to use the tagging facilities in text \ -widgets to implement a searching mechanism. First, type a file name \ -in the top entry, then type or click on \"Load File\". Then \ -type a string in the lower entry and type or click on \ -\"Load File\". This will cause all of the instances of the string to \ -be tagged with the tag \"search\", and it will arrange for the tag\'s \ -display attributes to change to make all of the strings blink.") -$search_text.insert('end', "\ -The current directory to load a file is \"#{Dir.pwd}\".\ -") -$search_text.set_insert '0.0' - -$search_fileName.value = '' -$search_searchString.value = '' - -$search_text.width = 60 -$search_text.height = 20 diff --git a/ext/tk/sample/demos-en/spin.rb b/ext/tk/sample/demos-en/spin.rb deleted file mode 100644 index d3558d56d6..0000000000 --- a/ext/tk/sample/demos-en/spin.rb +++ /dev/null @@ -1,66 +0,0 @@ -# frozen_string_literal: false -# spin.rb -- -# -# This demonstration script creates several spinbox widgets. -# -# based on Tcl/Tk8.4.4 widget demos - -if defined?($spin_demo) && $spin_demo - $spin_demo.destroy - $spin_demo = nil -end - -$spin_demo = TkToplevel.new {|w| - title("Spinbox Demonstration") - iconname("spin") - positionWindow(w) -} - -base_frame = TkFrame.new($spin_demo).pack(:fill=>:both, :expand=>true) - -TkLabel.new(base_frame, - :font=>$font, :wraplength=>'5i', :justify=>:left, - :text=><:top) -Three different spin-boxes are displayed below. \ -You can add characters by pointing, clicking and typing. \ -The normal Motif editing characters are supported, along with \ -many Emacs bindings. For example, Backspace and Control-h \ -delete the character to the left of the insertion cursor and \ -Delete and Control-d delete the chararacter to the right of the \ -insertion cursor. For values that are too large to fit in the \ -window all at once, you can scan through the value by dragging \ -with mouse button2 pressed. Note that the first spin-box will \ -only permit you to type in integers, and the third selects from \ -a list of Australian cities. -If your Tk library linked to Ruby doesn't include a 'spinbox' widget, \ -this demo doesn't work. Please use later version of Tk \ -which supports a 'spinbox' widget. -EOL - -TkFrame.new(base_frame){|f| - pack(:side=>:bottom, :fill=>:x, :pady=>'2m') - - TkButton.new(f, :text=>'Dismiss', :width=>15, :command=>proc{ - $spin_demo.destroy - $spin_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'See Code', :width=>15, :command=>proc{ - showCode 'spin' - }).pack(:side=>:left, :expand=>true) -} - -australianCities = [ - 'Canberra', 'Sydney', 'Melbourne', 'Perth', 'Adelaide', - 'Brisbane', 'Hobart', 'Darwin', 'Alice Springs' -] - -[ - TkSpinbox.new(base_frame, :from=>1, :to=>10, :width=>10, :validate=>:key, - :validatecommand=>[ - proc{|s| s == '' || /^[+-]?\d+$/ =~ s }, '%P' - ]), - TkSpinbox.new(base_frame, :from=>0, :to=>3, :increment=>0.5, - :format=>'%05.2f', :width=>10), - TkSpinbox.new(base_frame, :values=>australianCities, :width=>10) -].each{|sbox| sbox.pack(:side=>:top, :pady=>5, :padx=>10)} diff --git a/ext/tk/sample/demos-en/square b/ext/tk/sample/demos-en/square deleted file mode 100644 index bb66282154..0000000000 --- a/ext/tk/sample/demos-en/square +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env ruby - -# square -- -# This script generates a demo application containing only -# a "square" widget. It's only usable if Tk has been compiled -# with tkSquare.c and with the -DSQUARE_DEMO compiler switch. -# This demo arranges the following bindings for the widget: -# -# Button-1 press/drag: moves square to mouse -# "a": toggle size animation on/off -# - -require 'tk' -require 'tkafter' - -class TkSquare'yes', 'fill'=>'both') - bind('1', proc{|x,y| center(x,y)}, '%s %y') - bind('B1-Motion', proc{|x,y| center(x,y)}, '%s %y') - bind('a', proc{animate}) - focus -} -TkRoot.new.minsize(1,1) - -# The procedure below centers the square on a given position. - -def center(x,y) - a = $s.size - $s.position(x-(a/2), y-(a/2)) -end - -# The procedures below provide a simple form of animation where -# the box changes size in a pulsing pattern: larger, smaller, larger, -# and so on. - -$inc = 0 - -def timer_proc - a = $s.size - return if $inc == 0 - $inc = -3 if a >= 40 - $inc = 3 if a <= 10 - $s.size(a+$inc) -end - -$timer = TkAfter.new(30, -1, proc{timer_proc}) - -def animate - if $inc == 0 - $inc = 3 - $timer.start - else - $inc = 0 - $timer.stop - end -end - -Tk.mainloop diff --git a/ext/tk/sample/demos-en/states.rb b/ext/tk/sample/demos-en/states.rb deleted file mode 100644 index 4eac7424e7..0000000000 --- a/ext/tk/sample/demos-en/states.rb +++ /dev/null @@ -1,81 +0,0 @@ -# frozen_string_literal: false -# states.rb -# -# This demonstration script creates a listbox widget that displays -# the names of the 50 states in the United States of America. -# -# listbox widget demo 'states' (called by 'widget') -# - -# toplevel widget -if defined?($states_demo) && $states_demo - $states_demo.destroy - $states_demo = nil -end - -# demo toplevel widget -$states_demo = TkToplevel.new {|w| - title("Listbox Demonstration (states)") - iconname("states") - positionWindow(w) -} - -base_frame = TkFrame.new($states_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "A listbox containing the 50 states is displayed below, along with a scrollbar. You can scan the list either using the scrollbar or by scanning. To scan, press button 2 in the widget and drag up or down." -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $states_demo - $states_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'states'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -states_lbox = nil -TkFrame.new(base_frame, 'borderwidth'=>'.5c') {|w| - s = TkScrollbar.new(w) - states_lbox = TkListbox.new(w) { - setgrid 1 - height 12 - yscrollcommand proc{|first,last| s.set first,last} - } - s.command(proc{|*args| states_lbox.yview(*args)}) - s.pack('side'=>'right', 'fill'=>'y') - states_lbox.pack('side'=>'left', 'expand'=>1, 'fill'=>'both') -}.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'y') - -ins_data = [ - 'Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', - 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', - 'Hawaii', 'Idaho', 'Illinois', - 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', - 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', - 'Montana', 'Nebraska', 'Nevada', 'New_Hampshire', 'New_Jersey', 'New_Mexico', - 'New_York', 'North_Carolina', 'North_Dakota', - 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode_Island', - 'South_Carolina', 'South_Dakota', - 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', - 'West_Virginia', 'Wisconsin', 'Wyoming' -] - -states_lbox.insert(0, *ins_data) - diff --git a/ext/tk/sample/demos-en/style.rb b/ext/tk/sample/demos-en/style.rb deleted file mode 100644 index 60185ed874..0000000000 --- a/ext/tk/sample/demos-en/style.rb +++ /dev/null @@ -1,232 +0,0 @@ -# frozen_string_literal: false -# style.rb -# -# This demonstration script creates a text widget that illustrates the -# various display styles that may be set for tags. -# -# text (display styles) widget demo (called by 'widget') -# - -# toplevel widget -if defined?($style_demo) && $style_demo - $style_demo.destroy - $style_demo = nil -end - -# demo toplevel widget -$style_demo = TkToplevel.new {|w| - title("Text Demonstration - Display Styles") - iconname("style") - positionWindow(w) -} - -base_frame = TkFrame.new($style_demo).pack(:fill=>:both, :expand=>true) - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $style_demo - $style_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'style'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# text -txt = TkText.new(base_frame){|t| - # - setgrid 'true' - #width 70 - #height 32 - wrap 'word' - font $font - TkScrollbar.new(base_frame) {|s| - pack('side'=>'right', 'fill'=>'y') - command proc{|*args| t.yview(*args)} - t.yscrollcommand proc{|first,last| s.set first,last} - } - pack('expand'=>'yes', 'fill'=>'both') - - # - family = 'Courier' - - if $tk_version =~ /^4.*/ - style_tag_bold = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-O-Normal--*-120-*-*-*-*-*-*') - style_tag_big = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=>$msg_kanji_font) - style_tag_verybig = TkTextTag.new(t, 'font'=>'-*-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*') - # style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=>$kanji_font) - style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*') - else - style_tag_bold = TkTextTag.new(t, 'font'=>[family, 12, :bold, :italic]) - style_tag_big = TkTextTag.new(t, 'font'=>[family, 14, :bold]) - style_tag_verybig = TkTextTag.new(t, 'font'=>['Helvetica', 24, :bold]) - style_tag_small = TkTextTag.new(t, 'font'=>'Times 8 bold') - end -### -# case($tk_version) -# when /^4.*/ -# style_tag_big = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=>$msg_kanji_font) -# style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=>$kanji_font) -# when /^8.*/ -# unless $style_demo_do_first -# $style_demo_do_first = true -# Tk.tk_call('font', 'create', '@bigascii', -# '-copy', '-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*') -# Tk.tk_call('font', 'create', '@smallascii', -# '-copy', '-Adobe-Helvetica-Bold-R-Normal-*-100-*') -# Tk.tk_call('font', 'create', '@cBigFont', -# '-compound', '@bigascii @msg_knj') -# Tk.tk_call('font', 'create', '@cSmallFont', -# '-compound', '@smallascii @kanji') -# end -# style_tag_big = TkTextTag.new(t, 'font'=>'@cBigFont') -# style_tag_small = TkTextTag.new(t, 'font'=>'@cSmallFont') -# end - - # - if TkWinfo.depth($root).to_i > 1 - style_tag_color1 = TkTextTag.new(t, 'background'=>'#a0b7ce') - style_tag_color2 = TkTextTag.new(t, 'foreground'=>'red') - style_tag_raised = TkTextTag.new(t, 'relief'=>'raised', 'borderwidth'=>1) - style_tag_sunken = TkTextTag.new(t, 'relief'=>'sunken', 'borderwidth'=>1) - else - style_tag_color1 = TkTextTag.new(t, 'background'=>'black', - 'foreground'=>'white') - style_tag_color2 = TkTextTag.new(t, 'background'=>'black', - 'foreground'=>'white') - style_tag_raised = TkTextTag.new(t, 'background'=>'white', - 'relief'=>'raised', 'borderwidth'=>1) - style_tag_sunken = TkTextTag.new(t, 'background'=>'white', - 'relief'=>'sunken', 'borderwidth'=>1) - end - - # - if $tk_version =~ /^4\.[01]/ - style_tag_bgstipple = TkTextTag.new(t, 'background'=>'black', - 'borderwidth'=>0, - 'bgstipple'=>'gray25') - else - style_tag_bgstipple = TkTextTag.new(t, 'background'=>'black', - 'borderwidth'=>0, - 'bgstipple'=>'gray12') - end - style_tag_fgstipple = TkTextTag.new(t, 'fgstipple'=>'gray50') - style_tag_underline = TkTextTag.new(t, 'underline'=>'on') - style_tag_overstrike = TkTextTag.new(t, 'overstrike'=>'on') - style_tag_right = TkTextTag.new(t, 'justify'=>'right') - style_tag_center = TkTextTag.new(t, 'justify'=>'center') - if $tk_version =~ /^4.*/ - style_tag_super = TkTextTag.new(t, 'offset'=>'4p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*') - style_tag_sub = TkTextTag.new(t, 'offset'=>'-2p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*') - else - style_tag_super = TkTextTag.new(t, 'offset'=>'4p', 'font'=>[family, 10]) - style_tag_sub = TkTextTag.new(t, 'offset'=>'-2p', 'font'=>[family, 10]) - end - style_tag_margins = TkTextTag.new(t, 'lmargin1'=>'12m', 'lmargin2'=>'6m', - 'rmargin'=>'10m') - style_tag_spacing = TkTextTag.new(t, 'spacing1'=>'10p', 'spacing2'=>'2p', - 'lmargin1'=>'12m', 'lmargin2'=>'6m', - 'rmargin'=>'10m') - - # - insert('end', 'Text widgets like this one allow you to display information in a -variety of styles. Display styles are controlled using a mechanism -called ') - insert('end', 'tags', style_tag_big) - insert('end', '. Tags are just textual names that you can apply to one -or more ranges of characters within a text widget. You can configure -tags with various display styles. If you do this, then the tagged -characters will be displayed with the styles you chose. The -available display styles are: -') - insert('end', "\n1. Font.", style_tag_big) - insert('end', " You can choose any X font, ") - insert('end', "large", style_tag_verybig) - insert('end', " or ") - insert('end', "small", style_tag_small) - insert('end', ".\n") - insert('end', "\n2. Color.", style_tag_big) - insert('end', " You can change either the ") - insert('end', "background", style_tag_color1) - insert('end', " or ") - insert('end', "foreground", style_tag_color2) - insert('end', "\ncolor, or ") - insert('end', "both", style_tag_color1, style_tag_color2) - insert('end', ".\n") - insert('end', "\n3. Stippling.", style_tag_big) - insert('end', " You can cause either the ") - insert('end', "background", style_tag_bgstipple) - insert('end', " or ") - insert('end', "foreground", style_tag_fgstipple) - insert('end', "\ninformation to be drawn with a stipple fill instead of a solid fill.\n") - insert('end', "\n4. Underlining.", style_tag_big) - insert('end', " You can ") - insert('end', "underline", style_tag_underline) - insert('end', " ranges of text.\n") - insert('end', "\n5. Overstrikes.", style_tag_big) - insert('end', " You can ") - insert('end', "draw lines through", style_tag_overstrike) - insert('end', " ranges of text.\n") - insert('end', "\n6. 3-D effects.", style_tag_big) - insert('end', " You can arrange for the background to be drawn\nwith a border that makes characters appear either\n") - insert('end', "raised", style_tag_raised) - insert('end', " or ") - insert('end', "sunken", style_tag_sunken) - insert('end', ".\n") - insert('end', "\n7. Justification.", style_tag_big) - insert('end', " You can arrange for lines to be displayed\n") - insert('end', "left-justified,\n") - insert('end', "right-justified, or\n", style_tag_right) - insert('end', "centered.\n", style_tag_center) - insert('end', "\n8. Superscripts and subscripts.", style_tag_big) - insert('end', " You can control the vertical\n") - insert('end', "position of text to generate superscript effects like 10") - insert('end', "n", style_tag_super) - insert('end', " or\nsubscript effects like X") - insert('end', "i", style_tag_sub) - insert('end', ".\n") - insert('end', "\n9. Margins.", style_tag_big) - insert('end', " You can control the amount of extra space left") - insert('end', " on\neach side of the text:\n") - insert('end', "This paragraph is an example of the use of ", style_tag_margins) - insert('end', "margins. It consists of a single line of text ", style_tag_margins) - insert('end', "that wraps around on the screen. There are two ", style_tag_margins) - insert('end', "separate left margin values, one for the first ", style_tag_margins) - insert('end', "display line associated with the text line, ", style_tag_margins) - insert('end', "and one for the subsequent display lines, which ", style_tag_margins) - insert('end', "occur because of wrapping. There is also a ", style_tag_margins) - insert('end', "separate specification for the right margin, ", style_tag_margins) - insert('end', "which is used to choose wrap points for lines.\n", style_tag_margins) - insert('end', "\n10. Spacing.", style_tag_big) - insert('end', " You can control the spacing of lines with three\n") - insert('end', "separate parameters. \"Spacing1\" tells how much ") - insert('end', "extra space to leave\nabove a line, \"spacing3\" ") - insert('end', "tells how much space to leave below a line,\nand ") - insert('end', "if a text line wraps, \"spacing2\" tells how much ") - insert('end', "space to leave\nbetween the display lines that ") - insert('end', "make up the text line.\n") - insert('end', "These indented paragraphs illustrate how spacing ", style_tag_spacing) - insert('end', "can be used. Each paragraph is actually a ", style_tag_spacing) - insert('end', "single line in the text widget, which is ", style_tag_spacing) - insert('end', "word-wrapped by the widget.\n", style_tag_spacing) - insert('end', "Spacing1 is set to 10 points for this text, ", style_tag_spacing) - insert('end', "which results in relatively large gaps between ", style_tag_spacing) - insert('end', "the paragraphs. Spacing2 is set to 2 points, ", style_tag_spacing) - insert('end', "which results in just a bit of extra space ", style_tag_spacing) - insert('end', "within a paragraph. Spacing3 isn't used ", style_tag_spacing) - insert('end', "in this example.\n", style_tag_spacing) - insert('end', "To see where the space is, select ranges of ", style_tag_spacing) - insert('end', "text within these paragraphs. The selection ", style_tag_spacing) - insert('end', "highlight will cover the extra space.", style_tag_spacing) - -} - -txt.width 70 -txt.height 32 diff --git a/ext/tk/sample/demos-en/tcolor b/ext/tk/sample/demos-en/tcolor deleted file mode 100644 index 48cda6d1da..0000000000 --- a/ext/tk/sample/demos-en/tcolor +++ /dev/null @@ -1,526 +0,0 @@ -#!/usr/bin/env ruby -# -# tcolor -- -# simple color editor which supports RGB, HSB and CYM color space -# -# Copyright (C) 1998 Takaaki Tateishi(ttate@jaist.ac.jp) -# last update: Thu Jun 18 06:32:35 JST 1998 -# - -require "tk" - - -# use TkVariable instance for the variable which is changed by Tk interpreter - -$colorSpace = TkVariable.new(:rgb) -$master = nil -$red = 65535 -$green = 0 -$blue = 0 -$color = "#ffff00000000" -$updating = TkVariable.new(0) -$autoUpdate = TkVariable.new(1) -$name = TkVariable.new($color) -$command = TkVariable.new("print(%%,\"\n\")") -# $command = TkVariable.new("") -$label1 = TkVariable.new("label1") -$label2 = TkVariable.new("label2") -$label3 = TkVariable.new("label3") - - -# setup the entry of the resourc database -if (TkVarAccess.new('tcl_platform')['platform'] == 'unix') - TkOptionDB.add('*Entry.background', 'white') -end - - -# methods for events - -def rgbToHsv(red,green,blue) - - if ( red > green ) - max = red - min = green - else - max = green - min = red - end - - if ( blue > max ) - max = blue - else - if ( blue < min ) - min = blue - end - end - - range = max - min - - if ( max == 0 ) - sat = 0.0 - else - sat = (max-min)/max - end - - if ( sat == 0 ) - hue = 0.0 - else - rc = (max-red)/range - gc = (max-green)/range - bc = (max-blue)/range - if ( red == max ) - hue = 0.166667 * (bc - gc) - else - if ( green == max ) - hue = 0.166667 * (2.0 + rc - bc) - else - hue = 0.166667 * (4.0 + gc - rc) - end - end - if ( hue < 0.0 ) - hue = hue + 1.0 - end - end - - [hue,sat,max/65535] -end - - -def hsbToRgb(hue,sat,value) - v = 65535.0 * value - if( sat == 0 ) - ans = [v,v,v] - else - hue = hue*6.0 - if ( hue >= 6 ) - hue = 0.0 - end - i = hue.to_i - f = hue - i - p = 65535.0 * value * (1.0 - sat) - q = 65535.0 * value * (1.0 - (sat * f)) - t = 65535.0 * value * (1.0 - (sat * (1.0 - f))) - case i - when 0 - ans = [v,t,p] - when 1 - ans = [q,v,p] - when 2 - ans = [p,v,t] - when 3 - ans = [p,q,v] - when 4 - ans = [t,p,v] - when 5 - ans = [v,p,q] - else - raise(eException,"i value #{i} is out of range") - end - end - return ans -end - - -def _null_binding - Module.new.instance_eval{binding} -end -private :_null_binding - -def doUpdate - newCmd = $command.to_s.gsub("%%","\"#{$color}\"") - eval(newCmd, _null_binding) -end - - -def tc_scaleChanged - if( $updating.to_i == 1 ) - return - end - - $master = :scale if $master == nil - - scale1 = $root.middle.middle.scale1 - scale2 = $root.middle.middle.scale2 - scale3 = $root.middle.middle.scale3 - - case $colorSpace.value.intern - when :rgb - $red = (scale1.get * 65.535).to_i - $green = (scale2.get * 65.535).to_i - $blue = (scale3.get * 65.535).to_i - when :cmy - $red = (65535 - scale1.get * 65.535).to_i - $green = (65535 - scale2.get * 65.535).to_i - $blue = (65535 - scale3.get * 65.535).to_i - when :hsb - list = hsbToRgb(scale1.get / 1000.0, - scale2.get / 1000.0, - scale3.get / 1000.0) - $red = list[0] - $green = list[1] - $blue = list[2] - else - raise(Exception,"unknown colorSpace") - end - $color = format("#%04x%04x%04x",$red.to_i,$green.to_i,$blue.to_i) - $name.value = $color if $master == :scale - $root.middle.right.set_color($color) - if( $autoUpdate.to_i == 1 ) - doUpdate - end - Tk.update(true) - $master = nil if $master == :scale -end - - -def tc_setScales - $updating.value = 1 - - scale1 = $root.middle.middle.scale1 - scale2 = $root.middle.middle.scale2 - scale3 = $root.middle.middle.scale3 - - case $colorSpace.value.intern - when :rgb - scale1.set($red / 65.535) - scale2.set($green / 65.535) - scale3.set($blue / 65.535) - when :cmy - scale1.set((65535 - $red) / 65.535) - scale2.set((65535 - $green) / 65.535) - scale3.set((65535 - $blue) / 65.535) - when :hsb - list = rgbToHsv($red,$green,$blue) - scale1.set( list[0] * 1000.0 ) - scale2.set( list[1] * 1000.0 ) - scale3.set( list[2] * 1000.0 ) - else - raise(Exception,"unknown colorSpace") - end - - $updating.value = 0 -end - - -def tc_loadNamedColor(name) - $name.value = name - $master = :name if $master == nil - if name[0,1] != "#" - list = TkWinfo.rgb($root.middle.right.swatch,name) - $red = list[0] - $green = list[1] - $blue = list[2] - else - case name.length - when 4 - fmt = /#(.{1})(.{1})(.{1})/ - shift = 12 - when 7 - fmt = /#(.{2})(.{2})(.{2})/ - shift = 8 - when 10 - fmt = /#(.{3})(.{3})(.{3})/ - shift = 4 - when 13 - fmt = /#(.{4})(.{4})(.{4})/ - shift = 0 - else - raise(eException,"syntax error in color name \"#{name}\"") - end - name.scan(fmt){|strlist| - if strlist.length != 3 - raise(eException,"syntax error in color name \"#{name}\"") - end - $red = strlist[0].hex - $green = strlist[1].hex - $blue = strlist[2].hex - } - $red = $red << shift - $green = $green << shift - $blue = $blue << shift - end - - tc_setScales - $color = format("#%04x%04x%04x",$red,$green,$blue) - $root.middle.right.set_color($color) - if $autoUpdate.to_i == 1 - doUpdate - end - Tk.update(true) - $master = nil if $master == :name -end - - -def changeColorSpace(space) - case space - when :rgb - $label1.value = "Red" - $label2.value = "Green" - $label3.value = "Blue" - when :cmy - $label1.value = "Cyan" - $label2.value = "Magenta" - $label3.value = "Yellow" - when :hsb - $label1.value = "Hue" - $label2.value = "Saturation" - $label3.value = "Brightness" - end - tc_setScales -end - - -# menu - -class TkColorMenuFrame"raised", - "borderwidth"=>"2") - - # File menubutton - @file = TkMenubutton.new(self){|button| - - # File menu - @file_menu = TkMenu.new(button){ - add "radio", - "label" => "RGB color space", - "variable" => $colorSpace, - "value" => :rgb, - "underline" => "0", - "command" => proc{changeColorSpace(:rgb)} - add "radio", - "label" => "CMY color space", - "variable" => $colorSpace, - "value" => :cmy, - "underline" => "0", - "command" => proc{changeColorSpace(:cmy)} - add "radio", - "label" => "HSB color space", - "variable" => $colorSpace, - "value" => :hsb, - "underline" => "0", - "command" => proc{changeColorSpace(:hsb)} - add "separator" - add "radio", - "label" => "Automatic updates", - "variable" => $autoUpdate, - "value" => "1", - "underline" => "0" - add "radio", - "label" => "Manual updates", - "variable" => $autoUpdate, - "value" => "0", - "underline" => "0" - add "separator" - add "command", - "label" => "Exit program", - "underline" => "0", - "command" => proc{exit} - } - - # assign File menu to File button - menu @file_menu - - text "File" - underline "0" - }.pack("side"=>"left") - - self - end -end - - -# bottom frame -class TkColorBotFrame "raised", - "borderwidth"=> 2) - - @commandLabel = TkLabel.new(self, - "text"=> "Command:") - @command = TkEntry.new(self, - "relief"=> "sunken", - "borderwidth"=> "2", - "textvariable"=> $command, - "font"=> "-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*") - @update = TkButton.new(self, - "text"=> "Update", - "command"=> proc{doUpdate}) - @commandLabel.pack("side"=>"left") - @update.pack("side"=>"right","pady"=>".1c","padx"=>".25c") - @command.pack("expand"=>"yes","fill"=>"x","ipadx"=>".25c") - - self - end -end - - -# left side frame of middle level -class TkColorMiddleLeftFrame"vertical", - "relief"=>"sunken", - "borderwidth"=>"2") - @scroll.pack("side"=>"right","fill"=>"y") - @names = TkListbox.new(self, - "width"=>"20", - "height"=>"12", - "yscrollcommand"=> proc{|first,last| @scroll.set first,last}, - "relief"=>"sunken", - "borderwidth"=>"2", - "exportselection"=>"false") - @scroll.command(proc{|*args| @names.yview(*args)}) - @names.bind("Double-1",proc{ - tc_loadNamedColor(@names.get(@names.curselection))}) - @names.pack("side"=>"left") - while (line = f.gets) - line.chop! - linelist = line.split(/[ \t]+/) - if linelist.length == 4 - @names.insert("end",linelist[3]) - end - end - f.close - break - end - - self - end -end - - -# middle frame of middle level -class TkColorMiddleMiddleFrame"top","expand"=>"yes") - end - @f4.pack("side"=>"top","expand"=>"yes","fill"=>"x") - - @label1 = TkLabel.new(self,"textvariable"=>$label1) - @scale1 = TkScale.new(self,"from"=>"0","to"=>"1000","length"=>"6c", - "orient"=>"horizontal", - "command"=>proc{tc_scaleChanged}) - @scale1.pack("side"=>"top","anchor"=>"w") - @label1.pack("side"=>"top","anchor"=>"w") - - @label2 = TkLabel.new(self,"textvariable"=>$label2) - @scale2 = TkScale.new(self,"from"=>"0","to"=>"1000","length"=>"6c", - "orient"=>"horizontal", - "command"=>proc{tc_scaleChanged}) - @scale2.pack("side"=>"top","anchor"=>"w") - @label2.pack("side"=>"top","anchor"=>"w") - - @label3 = TkLabel.new(self,"textvariable"=>$label3) - @scale3 = TkScale.new(self,"from"=>"0","to"=>"1000","length"=>"6c", - "orient"=>"horizontal", - "command"=>proc{tc_scaleChanged}) - @scale3.pack("side"=>"top","anchor"=>"w") - @label3.pack("side"=>"top","anchor"=>"w") - - @nameLabel = TkLabel.new(self,"text"=>"Name:") - @name = TkEntry.new(self,"relief"=>"sunken","borderwidth"=>"2", - "textvariable"=>$name,"width"=>"10", - "font"=>"-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*") - @nameLabel.pack("side"=>"left") - @name.pack("side"=>"right", "expand"=>"1", "fill"=>"x") - @name.bind("Return",proc{tc_loadNamedColor $name.to_s}) - - self - end -end - - -class TkColorMiddleRightFrame"2c", "height"=>"5c", - "background"=>$color) - @value = TkLabel.new(self, - "text"=>$color, - "width"=>"13", - "font"=>"-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*") - @swatch.pack("side"=>"top","expand"=>"yes","fill"=>"both") - @value.pack("side"=>"bottom","pady"=>".25c") - - self - end - - def set_color(color) - @swatch["background"] = color - @value["text"] = color - end -end - - - -# middle level frame -class TkColorMiddleFrame "raised", - "borderwidth"=> "2") - - @left = TkColorMiddleLeftFrame.new(self) - @left.pack("side"=>"left","padx"=>".25c","pady"=>".25c") - - @middle = TkColorMiddleMiddleFrame.new(self) - @middle.pack("side"=>"left","expand"=>"yes","fill"=>"y") - - @right = TkColorMiddleRightFrame.new(self) - @right.pack("side"=>"left","padx"=>".25c","pady"=>".25c","anchor"=>"s") - - self - end -end - - -class TkColor"top", "fill"=>"x") - - @bottom = TkColorBotFrame.new(self) - @bottom.pack("side"=>"bottom","fill"=>"x") - - @middle = TkColorMiddleFrame.new(self) - @middle.pack("side"=>"top","fill"=>"both") - - self - end -end - - -$root = TkColor.new -changeColorSpace :rgb - -# start eventloop -Tk.mainloop diff --git a/ext/tk/sample/demos-en/text.rb b/ext/tk/sample/demos-en/text.rb deleted file mode 100644 index c44be395b6..0000000000 --- a/ext/tk/sample/demos-en/text.rb +++ /dev/null @@ -1,129 +0,0 @@ -# frozen_string_literal: false -# text.rb -# -# This demonstration script creates a text widget that describes -# the basic editing functions. -# -# text (basic facilities) widget demo (called by 'widget') -# - -# toplevel widget -if defined?($text_demo) && $text_demo - $text_demo.destroy - $text_demo = nil -end - -# demo toplevel widget -$text_demo = TkToplevel.new {|w| - title("Text Demonstration - Basic Facilities") - iconname("text") - positionWindow(w) -} - -base_frame = TkFrame.new($text_demo).pack(:fill=>:both, :expand=>true) - -# version check -if ((Tk::TK_VERSION.split('.').collect{|n| n.to_i} <=> [8,4]) < 0) - undo_support = false -else - undo_support = true -end - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $text_demo - $text_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'text'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# text -TkText.new(base_frame){|t| - relief 'sunken' - bd 2 - setgrid 1 - height 30 - if undo_support - undo true - autoseparators true - end - TkScrollbar.new(base_frame) {|s| - pack('side'=>'right', 'fill'=>'y') - command proc{|*args| t.yview(*args)} - t.yscrollcommand proc{|first,last| s.set first,last} - } - pack('expand'=>'yes', 'fill'=>'both') - - # - insert('0.0', <:both, :expand=>true) - -count = [0] - -## Define a widget that we peer from; it won't ever actually be shown though -first = TkText.new(base_frame, :widgetname=>"text#{count[0] += 1}") -first.insert :end,"This is a coupled pair of text widgets; they are peers to " -first.insert :end,"each other. They have the same underlying data model, but " -first.insert :end,"can show different locations, have different current edit " -first.insert :end,"locations, and have different selections. You can also " -first.insert :end,"create additional peers of any of these text widgets using " -first.insert :end,"the Make Peer button beside the text widget to clone, and " -first.insert :end,"delete a particular peer widget using the Delete Peer " -first.insert :end,"button." - -Tk.update_idletasks ## for 'first' widget - -## Procedures to make and kill clones; most of this is just so that the demo -## looks nice... -def makeClone(count, win, txt) - cnt = (count[0] += 1) - peer = TkText::Peer.new(txt, win, :widgetname=>"text#{cnt}") - sbar = TkScrollbar.new(win, :widgetname=>"sb#{cnt}") - peer.yscrollbar sbar - b1 = TkButton.new(win, :widgetname=>"clone#{cnt}", :text=>'Make Peer', - :command=>proc{makeClone(count, win, peer)}) - b2 = TkButton.new(win, :widgetname=>"kill#{cnt}", :text=>'Delete Peer', - :command=>proc{killClone(win, cnt)}) - row = cnt * 2 - TkGrid.configure(peer, sbar, b1, :sticky=>'nsew', :row=>row) - TkGrid.configure('^', '^', b2, :sticky=>'nsew', :row=>(row+=1)) - TkGrid.configure(b1, b2, :sticky=>'new') - TkGrid.rowconfigure(win, b2, :weight=>1) -end - -def killClone(win, cnt) - Tk.destroy("#{win.path}.text#{cnt}", "#{win.path}.sb#{cnt}", - "#{win.path}.clone#{cnt}", "#{win.path}.kill#{cnt}") -end - -## Now set up the GUI -makeClone(count, base_frame, first) -makeClone(count, base_frame, first) -first.destroy - -## See Code / Dismiss buttons -TkFrame.new(base_frame){|f| - TkButton.new(f, :text=>'Dismiss', :width=>15, :command=>proc{ - $textpeer_demo.destroy - $textpeer_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'See Code', :width=>15, :command=>proc{ - showCode 'textpeer' - }).pack(:side=>:left, :expand=>true) - - TkGrid.configure(f, '-', '-', :sticky=>'ew', :row=>5000) -} -TkGrid.columnconfigure(base_frame, 0, :weight=>1) diff --git a/ext/tk/sample/demos-en/timer b/ext/tk/sample/demos-en/timer deleted file mode 100644 index 6cb7c87e09..0000000000 --- a/ext/tk/sample/demos-en/timer +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/env ruby -# -# timer -- -# This script generates a counter with start,stop and reset buttons. -# -# Copyright (C) 1998 Takaaki Tateishi (ttate@jaist.ac.jp) -# last update: Sat Jun 27 12:24:14 JST 1998 -# - -require "tk" -require "thread" -require "tkafter" - -$time = "0.00" -$m = Mutex.new -$loop = false - -def timer_stop - $loop = false - $m.lock -end - -def timer_start - $loop = true - $m.unlock -end - -def timer_reset - $time = "0.00" - $root.countframe.counter['text'] = $time -end - -def timer_loop - if $loop - $time = $time.succ - $root.countframe.counter['text'] = $time - end - Tk.after(10,proc{timer_loop}) -end - - -# -# thread version -# -def timer_loop2 - while true - $m.lock - $time = $time.succ - $root.countframe.counter['text'] = $time - sleep(0.01) - $m.unlock - end -end - -# -# TkAfter -# -def timer_loop3 - if $loop - $time = $time.succ - $root.countframe.counter['text'] = $time - end -end - - -class CountFrame < TkFrame - attr_reader :counter - - def initialize(parent=nil,keys=nil) - super(parent,keys) - @counter = TkLabel.new(self, - 'text'=>$time, - 'relief'=>'raised') - @counter.pack('fill'=>'both') - self - end -end - - -class ButtonFrame < TkFrame - def initialize(parent=nil,keys=nil) - super(parent,keys) -=begin - @stop = TkButton.new(self, - 'text'=>'Stop', - 'command'=>proc{timer_stop}) - @start = TkButton.new(self, - 'text'=>'Start', - 'command'=>proc{timer_start}) -=end - @stop = TkButton.new(self, :text=>'Stop', :state=>:disabled) - @start = TkButton.new(self, :text=>'Start', :state=>:normal) - - @stop.command proc{ - timer_stop - @start.state(:normal) - @stop.state(:disabled) - } - @start.command proc{ - timer_start - @stop.state(:normal) - @start.state(:disabled) - } - - @reset = TkButton.new(self, - 'text'=>'Reset', - 'command'=>proc{timer_reset}) - for b in [@stop,@start,@reset] - b.pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes') - end - end -end - - -class Timer < TkRoot - attr_reader :countframe - - def initialize(*args) - super(*args) - @countframe = CountFrame.new(self) - @buttonframe = ButtonFrame.new(self) - for f in [@buttonframe,@countframe] - f.pack('side'=>'top', 'fill'=>'both') - end - self - end -end - - -$root = Timer.new - -#$thread = Thread.start{timer_loop2} -#timer_loop -TkAfter.new(10,-1,proc{timer_loop3}).start - -Tk.mainloop diff --git a/ext/tk/sample/demos-en/tkencoding.rb b/ext/tk/sample/demos-en/tkencoding.rb deleted file mode 100644 index 01a11ad7ed..0000000000 --- a/ext/tk/sample/demos-en/tkencoding.rb +++ /dev/null @@ -1,43 +0,0 @@ -# frozen_string_literal: false -# -*- ruby -*- -# -# tkencoding.rb -# written by ttate@jaist.ac.jp - -class TclTkIp - alias __eval _eval - alias __invoke _invoke - private :__eval - private :__invoke - - attr_accessor :encoding - - def _eval(cmd) - if( @encoding ) - _fromUTF8(__eval(_toUTF8(cmd,@encoding)),@encoding) - else - __eval(cmd) - end - end - - def _invoke(*cmds) - if( @encoding ) - cmds = cmds.collect{|cmd| _toUTF8(cmd,@encoding)} - _fromUTF8(__invoke(*cmds),@encoding) - else - __invoke(*cmds) - end - end -end - -module Tk - INTERP = TkCore::INTERP - - def encoding=(name) - INTERP.encoding = name - end - - def encoding - INTERP.encoding - end -end diff --git a/ext/tk/sample/demos-en/toolbar.rb b/ext/tk/sample/demos-en/toolbar.rb deleted file mode 100644 index 074bb94c1c..0000000000 --- a/ext/tk/sample/demos-en/toolbar.rb +++ /dev/null @@ -1,131 +0,0 @@ -# frozen_string_literal: false -# toolbar.rb -- -# -# This demonstration script creates a toolbar that can be torn off. -# -# based on "Id: toolbar.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp" - -if defined?($toolbar_demo) && $toolbar_demo - $toolbar_demo.destroy - $toolbar_demo = nil -end - -$toolbar_demo = TkToplevel.new {|w| - title("Ttk Menu Buttons") - iconname("toolbar") - positionWindow(w) -} - -base_frame = Ttk::Frame.new($toolbar_demo).pack(:fill=>:both, :expand=>true) - -if Tk.windowingsystem != 'aqua' - msg = Ttk::Label.new(base_frame, :wraplength=>'4i', - :text=>Tk::UTF8_String.new(<'4i', - :text=>Tk::UTF8_String.new(<'toolbar') # for window title -sep = Ttk::Separator.new(base_frame) -to_base = Ttk::Frame.new(tbar_base, :cursor=>'fleur') -if Tk.windowingsystem != 'aqua' - to = Ttk::Separator.new(to_base, :orient=>:vertical) - to2 = Ttk::Separator.new(to_base, :orient=>:vertical) - to.pack(:fill=>:y, :expand=>true, :padx=>2, :side=>:left) - to2.pack(:fill=>:y, :expand=>true, :side=>:left) -end - -contents = Ttk::Frame.new(tbar_base) -Tk.grid(to_base, contents, :sticky=>'nsew') -tbar_base.grid_columnconfigure(contents, :weight=>1) -contents.grid_columnconfigure(1000, :weight=>1) - -if Tk.windowingsystem != 'aqua' - ## Bindings so that the toolbar can be torn off and reattached - to_base.bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)} - to. bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)} - to2. bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)} - def tbar_base.tearoff(w, x, y) - on_win = TkWinfo.containing(x, y) - return unless (on_win && on_win.path =~ /^#{@path}(\.|$)/) - self.grid_remove - w.grid_remove - self.wm_manage - # self.wm_title('Toolbar') # if you don't want to use its widget name as a window title. - self.wm_protocol('WM_DELETE_WINDOW'){ self.untearoff(w) } - end - def tbar_base.untearoff(w) - self.wm_forget - w.grid - self.grid - end -end - -## Some content for the rest of the toplevel -text = TkText.new(base_frame, :width=>40, :height=>10) - -## Toolbar contents -tb_btn = Ttk::Button.new(tbar_base, :text=>'Button', :style=>'Toolbutton', - :command=>proc{text.insert(:end, "Button Pressed\n")}) -tb_chk = Ttk::Checkbutton.new(tbar_base, :text=>'Check', :style=>'Toolbutton', - :variable=>(check = TkVariable.new), - :command=>proc{ - text.insert(:end, "Check is #{check.value}\n") - }) -tb_mbtn = Ttk::Menubutton.new(tbar_base, :text=>'Menu') -tb_combo = Ttk::Combobox.new(tbar_base, :value=>TkFont.families, - :state=>:readonly) -tb_mbtn.menu(menu = Tk::Menu.new(tb_mbtn)) -menu.add(:command, :label=>'Just', :command=>proc{text.insert(:end, "Just\n")}) -menu.add(:command, :label=>'An', :command=>proc{text.insert(:end, "An\n")}) -menu.add(:command, :label=>'Example', - :command=>proc{text.insert(:end, "Example\n")}) -tb_combo.bind(''){ text.font.family = tb_combo.get } - -## Arrange contents -Tk.grid(tb_btn, tb_chk, tb_mbtn, tb_combo, - :in=>contents, :padx=>2, :sticky=>'ns') -Tk.grid(tbar_base, :sticky=>'ew') -Tk.grid(sep, :sticky=>'ew') -Tk.grid(msg, :sticky=>'ew') -Tk.grid(text, :sticky=>'nsew') -base_frame.grid_rowconfigure(text, :weight=>1) -base_frame.grid_columnconfigure(text, :weight=>1) - -## See Code / Dismiss buttons -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'toolbar'}), - Ttk::Button.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $toolbar_demo.destroy - $toolbar_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - Tk.grid(frame, :sticky=>'ew') -} diff --git a/ext/tk/sample/demos-en/tree.rb b/ext/tk/sample/demos-en/tree.rb deleted file mode 100644 index e3e5527f79..0000000000 --- a/ext/tk/sample/demos-en/tree.rb +++ /dev/null @@ -1,120 +0,0 @@ -# frozen_string_literal: false -# tree.rb -- -# -# This demonstration script creates a toplevel window containing a Ttk -# tree widget. -# -# based on "Id: tree.tcl,v 1.4 2007/12/13 15:27:07 dgp Exp" - -if defined?($tree_demo) && $tree_demo - $tree_demo.destroy - $tree_demo = nil -end - -$tree_demo = TkToplevel.new {|w| - title("Directory Browser") - iconname("tree") - positionWindow(w) -} - -base_frame = TkFrame.new($tree_demo).pack(:fill=>:both, :expand=>true) - -## Explanatory text -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', - :justify=>:left, :anchor=>'n', :padding=>[10, 2, 10, 6], - :text=><:x) -Ttk is the new Tk themed widget set. \ -One of the widgets it includes is a tree widget, \ -which allows the user to browse a hierarchical data-set such as a filesystem. \ -The tree widget not only allows for the tree part itself, \ -but it also supports an arbitrary number of additional columns \ -which can show additional data (in this case, the size of the files \ -found in your filesystem). \ -You can also change the width of the columns \ -by dragging the boundary between them. -EOL - -## See Code / Dismiss -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'tree'}), - Ttk::Button.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $tree_demo.destroy - $tree_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -## Code to populate the roots of the tree (can be more than one on Windows) -def populate_roots(tree) - TkComm.simplelist(Tk.tk_call('file', 'volumes')).sort.each{|dir| - populate_tree(tree, tree.insert(nil, :end, :text=>dir, - :values=>[dir, 'directory'])) - } -end - -## Code to populate a node of the tree -def populate_tree(tree, node) - return if tree.get(node, :type) != 'directory' - - path = tree.get(node, :fullpath) - tree.delete(tree.children(node)) - Dir.glob("#{path}/*").sort.each{|f| - type = File.ftype(f) rescue nil - id = tree.insert(node, :end, - :text=>File.basename(f), :values=>[f, type]).id - if type == 'directory' - ## Make it so that this node is openable - tree.insert(id, 0, :text=>'dummy') - tree.itemconfigure(id, :text=>File.basename(f)) - elsif type == 'file' - size = File.size(f) - if size >= 1024*1024*1024 - size = '%.1f GB' % (size.to_f/1024/1024/1024) - elsif size >= 1024*1024 - size = '%.1f MB' % (size.to_f/1024/1024) - elsif size >= 1024 - size = '%.1f KB' % (size.to_f/1024) - else - size = '%.1f bytes' % (size.to_f/1024) - end - tree.set(id, :size, size) - end - } - - # Stop this code from rerunning on the current node - tree.set(node, :type, 'processed_directory') -end - -## Create the tree and set it up -tree = Ttk::Treeview.new(base_frame, :columns=>%w(fullpath type size), - :displaycolumns=>['size']) -if Tk.windowingsystem != 'aqua' - vsb = tree.yscrollbar(Ttk::Scrollbar.new(base_frame)) - hsb = tree.xscrollbar(Ttk::Scrollbar.new(base_frame)) -else - vsb = tree.yscrollbar(Tk::Scrollbar.new(base_frame)) - hsb = tree.xscrollbar(Tk::Scrollbar.new(base_frame)) -end - -tree.heading_configure('#0', :text=>'Directory Structure') -tree.heading_configure('size', :text=>'File Size') -tree.column_configure('size', :stretch=>0, :width=>70) -populate_roots(tree) -tree.bind('', '%W'){|w| populate_tree(w, w.focus_item)} - -## Arrange the tree and its scrollbars in the toplevel -container = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true) -container.lower -Tk.grid(tree, vsb, :in=>container, :sticky=>'nsew') -Tk.grid(hsb, :in=>container, :sticky=>'nsew') -container.grid_columnconfigure(0, :weight=>1) -container.grid_rowconfigure(0, :weight=>1) diff --git a/ext/tk/sample/demos-en/ttkbut.rb b/ext/tk/sample/demos-en/ttkbut.rb deleted file mode 100644 index e308cdd23f..0000000000 --- a/ext/tk/sample/demos-en/ttkbut.rb +++ /dev/null @@ -1,140 +0,0 @@ -# frozen_string_literal: false -# ttkbut.rb -# -# This demonstration script creates a toplevel window containing several -# simple Ttk widgets, such as labels, labelframes, buttons, checkbuttons and -# radiobuttons. -# -# based on "Id: ttkbut.tcl,v 1.4 2007/12/13 15:27:07 dgp Exp" - -if defined?($ttkbut_demo) && $ttkbut_demo - $ttkbut_demo.destroy - $ttkbut_demo = nil -end - -$ttkbut_demo = TkToplevel.new {|w| - title("Simple Ttk Widgets") - iconname("ttkbut") - positionWindow(w) -} - -base_frame = TkFrame.new($ttkbut_demo).pack(:fill=>:both, :expand=>true) - -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top, :fill=>:x) -Ttk is the new Tk themed widget set. This is a Ttk themed label, \ -and below are three groups of Ttk widgets in Ttk labelframes. \ -The first group are all buttons that set the current application theme \ -when pressed. The second group contains three sets of checkbuttons, \ -with a separator widget between the sets. Note that the "Enabled" \ -button controls whether all the other themed widgets in this toplevel are \ -in the disabled state. The third group has a collection of linked \ -radiobuttons. -EOL - -## Add buttons for setting the theme -buttons = Ttk::Labelframe.new(base_frame, :text=>'Buttons') -# Ttk::Style.theme_names.each{|theme| -# Ttk::Button.new(buttons, :text=>theme, -# :command=>proc{Ttk::Style.theme_use theme}).pack(:pady=>2) -# } -Ttk.themes.each{|theme| - Ttk::Button.new(buttons, :text=>theme, - :command=>proc{Ttk.set_theme theme}).pack(:pady=>2) -} - -## Helper procedure for the top checkbutton -def setState(root, value, *excepts) - return if excepts.member?(root) - - ## Non-Ttk widgets (e.g. the toplevel) will fail, so make it silent - begin - root.state = value - rescue - end - - ## Recursively invoke on all children of this root that are in the same - ## toplevel widget - root.winfo_children.each{|w| - setState(w, value, *excepts) if w.winfo_toplevel == root.winfo_toplevel - } -end - -## Set up the checkbutton group -checks = Ttk::Labelframe.new(base_frame, :text=>'Checkbuttons') -enabled = TkVariable.new(true) -e = Ttk::Checkbutton.new(checks, :text=>'Enabled', :variable=>enabled, - :command=>proc{ - setState($ttkbut_demo, - ((enabled.bool)? "!disabled" : "disabled"), - e) - }) - -## See ttk_widget(n) for other possible state flags -sep1 = Ttk::Separator.new(checks) -sep2 = Ttk::Separator.new(checks) - -cheese = TkVariable.new -tomato = TkVariable.new -basil = TkVariable.new -oregano = TkVariable.new - -c1 = Ttk::Checkbutton.new(checks, :text=>'Cheese', :variable=>cheese) -c2 = Ttk::Checkbutton.new(checks, :text=>'Tomato', :variable=>tomato) -c3 = Ttk::Checkbutton.new(checks, :text=>'Basil', :variable=>basil) -c4 = Ttk::Checkbutton.new(checks, :text=>'Oregano', :variable=>oregano) - -Tk.pack(e, sep1, c1, c2, sep2, c3, c4, :fill=>:x, :pady=>2) - -## Set up the radiobutton group -radios = Ttk::Labelframe.new(base_frame, :text=>'Radiobuttons') - -happiness = TkVariable.new - -r1 = Ttk::Radiobutton.new(radios, :variable=>happiness, - :text=>'Great', :value=>'great') -r2 = Ttk::Radiobutton.new(radios, :variable=>happiness, - :text=>'Good', :value=>'good') -r3 = Ttk::Radiobutton.new(radios, :variable=>happiness, - :text=>'Ok', :value=>'ok') -r4 = Ttk::Radiobutton.new(radios, :variable=>happiness, - :text=>'Poor', :value=>'poor') -r5 = Ttk::Radiobutton.new(radios, :variable=>happiness, - :text=>'Awful', :value=>'awful') - -Tk.pack(r1, r2, r3, r4, r5, :fill=>:x, :padx=>3, :pady=>2) - -## See Code / Dismiss -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'See Variables', - :image=>$image['view'], :compound=>:left, - :command=>proc{ - showVars(base_frame, ['enabled', enabled], - ['cheese', cheese], ['tomato', tomato], - ['basil', basil], ['oregano', oregano], - ['happiness', happiness]) - }), - Ttk::Button.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'ttkbut'}), - Ttk::Button.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - tmppath = $ttkbut_demo - $ttkbut_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x, :expand=>true) -} - -## Arrange things neatly -f = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true) -f.lower -Tk.grid(buttons, checks, radios, :in=>f, :sticky=>'nwe', :pady=>2, :padx=>3) -f.grid_columnconfigure([0, 1, 2], :weight=>1, :uniform=>:yes) diff --git a/ext/tk/sample/demos-en/ttkmenu.rb b/ext/tk/sample/demos-en/ttkmenu.rb deleted file mode 100644 index f84c9138d5..0000000000 --- a/ext/tk/sample/demos-en/ttkmenu.rb +++ /dev/null @@ -1,86 +0,0 @@ -# frozen_string_literal: false -# ttkmenu.rb -- -# -# This demonstration script creates a toplevel window containing several Ttk -# menubutton widgets. -# -# based on "Id: ttkmenu.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp" - -if defined?($ttkmenu_demo) && $ttkmenu_demo - $ttkmenu_demo.destroy - $ttkmenu_demo = nil -end - -$ttkmenu_demo = TkToplevel.new {|w| - title("Ttk Menu Buttons") - iconname("ttkmenu") - positionWindow(w) -} - -base_frame = Ttk::Frame.new($ttkmenu_demo).pack(:fill=>:both, :expand=>true) - -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top, :fill=>:x) -Ttk is the new Tk themed widget set, \ -and one widget that is available in themed form is the menubutton. \ -Below are some themed menu buttons \ -that allow you to pick the current theme in use. \ -Notice how picking a theme changes the way \ -that the menu buttons themselves look, \ -and that the central menu button is styled differently \ -(in a way that is normally suitable for toolbars). \ -However, there are no themed menus; the standard Tk menus were judged \ -to have a sufficiently good look-and-feel on all platforms, \ -especially as they are implemented as native controls in many places. -EOL - -Ttk::Separator.new(base_frame).pack(:side=>:top, :fill=>:x) - -## See Code / Dismiss -Ttk::Frame.new($ttkmenu_demo) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'ttkmenu'}), - Ttk::Button.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $ttkmenu_demo.destroy - $ttkmenu_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -b1 = Ttk::Menubutton.new(base_frame,:text=>'Select a theme',:direction=>:above) -b2 = Ttk::Menubutton.new(base_frame,:text=>'Select a theme',:direction=>:left) -b3 = Ttk::Menubutton.new(base_frame,:text=>'Select a theme',:direction=>:right) -b4 = Ttk::Menubutton.new(base_frame,:text=>'Select a theme',:direction=>:flush, - :style=>Ttk::Menubutton.style('Toolbutton')) -b5 = Ttk::Menubutton.new(base_frame,:text=>'Select a theme',:direction=>:below) - -b1.menu(m1 = Tk::Menu.new(b1, :tearoff=>false)) -b2.menu(m2 = Tk::Menu.new(b2, :tearoff=>false)) -b3.menu(m3 = Tk::Menu.new(b3, :tearoff=>false)) -b4.menu(m4 = Tk::Menu.new(b4, :tearoff=>false)) -b5.menu(m5 = Tk::Menu.new(b5, :tearoff=>false)) - -Ttk.themes.each{|theme| - m1.add(:command, :label=>theme, :command=>proc{Ttk.set_theme theme}) - m2.add(:command, :label=>theme, :command=>proc{Ttk.set_theme theme}) - m3.add(:command, :label=>theme, :command=>proc{Ttk.set_theme theme}) - m4.add(:command, :label=>theme, :command=>proc{Ttk.set_theme theme}) - m5.add(:command, :label=>theme, :command=>proc{Ttk.set_theme theme}) -} - -f = Ttk::Frame.new(base_frame).pack(:fill=>:x) -f1 = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true) -f.lower - -f.grid_anchor(:center) -TkGrid('x', b1, 'x', :in=>f, :padx=>3, :pady=>2) -TkGrid(b2, b4, b3, :in=>f, :padx=>3, :pady=>2) -TkGrid('x', b5, 'x', :in=>f, :padx=>3, :pady=>2) diff --git a/ext/tk/sample/demos-en/ttknote.rb b/ext/tk/sample/demos-en/ttknote.rb deleted file mode 100644 index 7540fde3ce..0000000000 --- a/ext/tk/sample/demos-en/ttknote.rb +++ /dev/null @@ -1,90 +0,0 @@ -# frozen_string_literal: false -# ttknote.rb -- -# -# This demonstration script creates a toplevel window containing a Ttk -# notebook widget. -# -# based on "Id: ttknote.tcl,v 1.5 2007/12/13 15:27:07 dgp Exp" - -if defined?($ttknote_demo) && $ttknote_demo - $ttknote_demo.destroy - $ttknote_demo = nil -end - -$ttknote_demo = TkToplevel.new {|w| - title("Ttk Notebook Widget") - iconname("ttknote") - positionWindow(w) -} - -## See Code / Dismiss -Ttk::Frame.new($ttknote_demo) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'ttknote'}), - Ttk::Button.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $ttknote_demo.destroy - $ttknote_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -base_frame = Ttk::Frame.new($ttknote_demo).pack(:fill=>:both, :expand=>true) - -## Make the notebook and set up Ctrl+Tab traversal -notebook = Ttk::Notebook.new(base_frame).pack(:fill=>:both, :expand=>true, - :padx=>2, :pady=>3) -notebook.enable_traversal - -## Populate the first pane -f_msg = Ttk::Frame.new(notebook) -msg_m = Ttk::Label.new(f_msg, :font=>$font, :wraplength=>'4i', - :justify=>:left, :anchor=>'n', :text=><'Neat!', :underline=>0, - :command=>proc{ - neat.value = 'Yeah, I know...' - Tk.after_cancel(after_id) if after_id - after_id = Tk.after(500){neat.value = ''} - }) -msg_b.winfo_toplevel.bind('Alt-n'){ msg_b.focus; msg_b.invoke } -msg_l = Ttk::Label.new(f_msg, :textvariable=>neat) -notebook.add(f_msg, :text=>'Description', :underline=>0, :padding=>2) -Tk.grid(msg_m, '-', :sticky=>'new', :pady=>2) -Tk.grid(msg_b, msg_l, :pady=>[2, 4]) -f_msg.grid_rowconfigure(1, :weight=>1) -f_msg.grid_columnconfigure([0, 1], :weight=>1, :uniform=>1) - -## Populate the second pane. Note that the content doesn't really matter -f_disabled = Ttk::Frame.new(notebook) -notebook.add(f_disabled, :text=>'Disabled', :state=>:disabled) - -## Populate the third pane -f_editor = Ttk::Frame.new(notebook) -notebook.add(f_editor, :text=>'Text Editor', :underline=>0) -editor_t = Tk::Text.new(f_editor, :width=>40, :height=>10, :wrap=>:char) -if Tk.windowingsystem != 'aqua' - editor_s = editor_t.yscrollbar(Ttk::Scrollbar.new(f_editor)) -else - editor_s = editor_t.yscrollbar(Tk::Scrollbar.new(f_editor)) -end -editor_s.pack(:side=>:right, :fill=>:y, :padx=>[0,2], :pady=>2) -editor_t.pack(:fill=>:both, :expand=>true, :padx=>[2,0], :pady=>2) diff --git a/ext/tk/sample/demos-en/ttkpane.rb b/ext/tk/sample/demos-en/ttkpane.rb deleted file mode 100644 index 7eb4c29731..0000000000 --- a/ext/tk/sample/demos-en/ttkpane.rb +++ /dev/null @@ -1,214 +0,0 @@ -# frozen_string_literal: false -# ttkpane.rb -- -# -# This demonstration script creates a Ttk pane with some content. -# -# based on "Id: ttkpane.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp" - -if defined?($ttkpane_demo) && $ttkpane_demo - $ttkpane_demo.destroy - $ttkpane_demo = nil -end - -$ttkpane_demo = TkToplevel.new {|w| - title("Themed Nested Panes") - iconname("ttkpane") - positionWindow(w) -} - -base_frame = TkFrame.new($ttkpane_demo).pack(:fill=>:both, :expand=>true) - -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top, :fill=>:x) -This demonstration shows off a nested set of themed paned windows. \ -Their sizes can be changed by grabbing the area \ -between each contained pane and dragging the divider. -EOL - -Ttk::Separator.new(base_frame).pack(:side=>:top, :fill=>:x) - -## See Code / Dismiss -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'ttkpane'}), - Ttk::Button.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $ttkpane_demo.destroy - $ttkpane_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -frame = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true) - -outer = Ttk::Panedwindow.new(frame, :orient=>:horizontal) -outer.add(in_left = Ttk::Panedwindow.new(outer, :orient=>:vertical)) -outer.add(in_right = Ttk::Panedwindow.new(outer, :orient=>:vertical)) -in_left.add(left_top = Ttk::Labelframe.new(in_left, :text=>'Button')) -in_left.add(left_bot = Ttk::Labelframe.new(in_left, :text=>'Clocks')) -in_right.add(right_top = Ttk::Labelframe.new(in_right, :text=>'Progress')) -in_right.add(right_bot = Ttk::Labelframe.new(in_right, :text=>'Text')) -if Tk.windowingsystem == 'aqua' - [left_top, left_bot, right_top, right_bot].each{|w| w.padding(3) } -end - -# Fill the button pane -Ttk::Button.new(left_top, :text=>'Press Me', - :command=>proc{ - Tk.messageBox(:type=>'ok', :icon=>'info', :message=>'Ouch!', - :detail=>'That hurt...', :parent=>base_frame, - :title=>'Button Pressed') - }).pack(:padx=>2, :pady=>5) - - -zones_list = [ - [':Europe/Berlin'], - [':America/Argentina/Buenos_Aires', ':America/Buenos_Aires'], - [':Africa/Johannesburg'], - [':Europe/London'], - [':America/Los_Angeles'], - [':Europe/Moscow'], - [':America/New_York'], - [':Asia/Singapore'], - [':Australia/Sydney'], - [':Asia/Tokyo'], -] - -zones = [] - -# Check tzinfo support -if $tk_major_ver > 8 || ($tk_major_ver == 8 && $tk_minor_ver >= 5) - tzinfo = :tcl - - # Force a pre-load of all the timezones needed; otherwise can end up - # poor-looking synch problems! - zones_list.each{|list| - list.each{|zone| - begin - Tk.tk_call('clock', 'format', '0', '-timezone', zone) - rescue RuntimeError - # ignore - else - zones << [zone, zone[%r<[^/:]+$>].tr('_', ' ')] - break - end - } - } - -else - begin - require 'tzinfo' - tzinfo = :tzinfo - rescue Exception - begin - require 'tzfile' - tzinfo = :tzfile - rescue Exception - tzinfo = nil - end - end - - case tzinfo - when :tzinfo - zones_list.each{|list| - list.each{|zone| - begin - tz = TZInfo::Timezone.get(zone[%r<[^:]+$>]) - rescue Exception - # ignore - else - zones << [tz, zone[%r<[^/:]+$>].tr('_', ' ')] - break - end - } - } - - when :tzfile - zones_list.each{|list| - list.each{|zone| - begin - tz = TZFile.create(zone[%r<[^:]+$>]) - rescue Exception - # ignore - else - zones << [tz, zone[%r<[^/:]+$>].tr('_', ' ')] - break - end - } - } - - else - [ -7, -4, -2, -1, 0, +1, +3, +8, +9, +10 ].each{|zone| - zones << [zone, 'UTC%+03d00' % zone] - } - end -end - -time = TkVariable.new_hash - -case tzinfo -when :tcl - update_proc = proc{|now, tz, label| - time[label] = Tk.tk_call('clock', 'format', now.tv_sec, - '-timezone', tz, '-format', '%T') - } -when :tzinfo - update_proc = proc{|now, tz, label| - time[label] = tz.utc_to_local(now).strftime('%H:%M:%S') - } -when :tzfile - update_proc = proc{|now, tz, label| - time[label] = tz.at(now.tv_sec).strftime('%H:%M:%S') - } -else - update_proc = proc{|now, tz, label| - time[label] = (now + (tz * 3600)).strftime('%H:%M:%S') - } -end - -# Fill the clocks pane -zones.each_with_index{|(zone, label), idx| - Ttk::Separator.new(left_bot).pack(:fill=>:x) if idx > 0 - Ttk::Label.new(left_bot, :text=>label, :anchor=>'w').pack(:fill=>:x) - Ttk::Label.new(left_bot, :textvariable=>time.ref(label), - :anchor=>'w').pack(:fill=>:x) -} - -# Timer start -every = proc{ - now = Time.now.utc - zones.each{|zone, label| update_proc.call(now, zone, label) } -} -TkRTTimer.new(1000, -1, every).start(0, every) - -# Fill the progress pane -Ttk::Progressbar.new(right_top, :mode=>:indeterminate).pack(:fill=>:both, :expand=>true).start - -# Fill the text pane -if Tk.windowingsystem != 'aqua' - # The trick with the ttk::frame makes the text widget look like it fits with - # the current Ttk theme despite not being a themed widget itself. It is done - # by styling the frame like an entry, turning off the border in the text - # widget, and putting the text widget in the frame with enough space to allow - # the surrounding border to show through (2 pixels seems to be enough). - f = Ttk::Frame.new(right_bot, :style=>Ttk::Entry) - txt = TkText.new(frame, :wrap=>:word, :width=>30, :borderwidth=>0) - txt.pack(:fill=>:both, :expand=>true, :in=>f, :pady=>2, :padx=>2) - scr = txt.yscrollbar(Ttk::Scrollbar.new(frame)) - scr.pack(:side=>:right, :fill=>:y, :in=>right_bot) - f.pack(:fill=>:both, :expand=>true) - outer.pack(:fill=>:both, :expand=>true) -else - txt = TkText.new(frame, :wrap=>:word, :width=>30, :borderwidth=>0) - scr = txt.yscrollbar(TkScrollbar.new(frame)) - scr.pack(:side=>:right, :fill=>:y, :in=>right_bot) - txt.pack(:fill=>:both, :expand=>true, :in=>right_bot) - outer.pack(:fill=>:both, :expand=>true, :padx=>10, :pady=>[6, 10]) -end diff --git a/ext/tk/sample/demos-en/ttkprogress.rb b/ext/tk/sample/demos-en/ttkprogress.rb deleted file mode 100644 index 09bf398e17..0000000000 --- a/ext/tk/sample/demos-en/ttkprogress.rb +++ /dev/null @@ -1,67 +0,0 @@ -# frozen_string_literal: false -# ttkprogress.rb -- -# -# This demonstration script creates several progress bar widgets. -# -# based on "Id: ttkprogress.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp" - -if defined?($ttkprogress_demo) && $ttkprogress_demo - $ttkprogress_demo.destroy - $ttkprogress_demo = nil -end - -$ttkprogress_demo = TkToplevel.new {|w| - title("Progress Bar Demonstration") - iconname("ttkprogress") - positionWindow(w) -} - -base_frame = TkFrame.new($ttkprogress_demo).pack(:fill=>:both, :expand=>true) - -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=>Tk::UTF8_String.new(<:top, :fill=>:x) -Below are two progress bars. \ -The top one is a \\u201Cdeterminate\\u201D progress bar, \ -which is used for showing how far through a defined task the program has got. \ -The bottom one is an \\u201Cindeterminate\\u201D progress bar, \ -which is used to show that the program is busy \ -but does not know how long for. Both are run here in self-animated mode, \ -which can be turned on and off using the buttons underneath. -EOL - -## See Code / Dismiss buttons -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'ttkprogress'}), - Ttk::Button.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $ttkprogress_demo.destroy - $ttkprogress_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -frame = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true) - -p1 = Ttk::Progressbar.new(frame, :mode=>:determinate) -p2 = Ttk::Progressbar.new(frame, :mode=>:indeterminate) - -start = Ttk::Button.new(frame, :text=>'Start Progress', - :command=>proc{ p1.start; p2.start }) -stop = Ttk::Button.new(frame, :text=>'Stop Progress', - :command=>proc{ p1.stop; p2.stop }) - -Tk.grid(p1, '-', :pady=>5, :padx=>10) -Tk.grid(p2, '-', :pady=>5, :padx=>10) -Tk.grid(start, stop, :padx=>10, :pady=>5) -start.grid_configure(:sticky=>'e') -stop.grid_configure(:sticky=>'w') -frame.grid_columnconfigure(:all, :weight=>1) - diff --git a/ext/tk/sample/demos-en/twind.rb b/ext/tk/sample/demos-en/twind.rb deleted file mode 100644 index a709f0d188..0000000000 --- a/ext/tk/sample/demos-en/twind.rb +++ /dev/null @@ -1,292 +0,0 @@ -# frozen_string_literal: false -# twind.rb -# -# This demonstration script creates a text widget with a bunch of -# embedded windows. -# -# text (embedded windows) widget demo (called by 'widget') -# - -# toplevel widget -if defined?($twind_demo) && $twind_demo - $twind_demo.destroy - $twind_demo = nil -end - -# demo toplevel widget -$twind_demo = TkToplevel.new {|w| - title("Text Demonstration - Embedded Windows") - iconname("Embedded Windows") - positionWindow(w) -} - -base_frame = TkFrame.new($twind_demo).pack(:fill=>:both, :expand=>true) - -# frame -$twind_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc{ - tmppath = $twind_demo - $twind_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc{showCode 'twind'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$twind_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -$twind_text = nil -TkFrame.new(base_frame, 'highlightthickness'=>2, 'borderwidth'=>2, - 'relief'=>'sunken') {|f| - $twind_text = TkText.new(f, 'setgrid'=>'true', 'font'=>$font, - 'width'=>'70', 'height'=>35, 'wrap'=>'word', - 'highlightthickness'=>0, 'borderwidth'=>0 ){|t| - TkScrollbar.new(f) {|s| - command proc{|*args| t.yview(*args)} - t.yscrollcommand proc{|first,last| s.set first,last} - }.pack('side'=>'right', 'fill'=>'y') - }.pack('expand'=>'yes', 'fill'=>'both') -}.pack('expand'=>'yes', 'fill'=>'both') - -# -$tag_center = TkTextTag.new($twind_text, - 'justify' =>'center', - 'spacing1'=>'5m', - 'spacing3'=>'5m' ) -$tag_buttons = TkTextTag.new($twind_text, - 'lmargin1'=>'1c', - 'lmargin2'=>'1c', - 'rmargin' =>'1c', - 'spacing1'=>'3m', - 'spacing2'=>0, - 'spacing3'=>0 ) - -$twind_text.insert('end', "A text widget can contain other widgets embedded ") -$twind_text.insert('end', "it. These are called \"embedded windows\", ") -$twind_text.insert('end', "and they can consist of arbitrary widgets. ") -$twind_text.insert('end', "For example, here are two embedded button ") -$twind_text.insert('end', "widgets. You can click on the first button to ") -TkTextWindow.new($twind_text, 'end', - 'window'=>TkButton.new($twind_text) { - #text 'ON' - text 'Turn On' - command proc{textWindOn $twind_text,$twind_buttons} - cursor 'top_left_arrow' - }) -$twind_text.insert('end', " horizontal scrolling, which also turns off ") -$twind_text.insert('end', "word wrapping. Or, you can click on the second ") -$twind_text.insert('end', "button to\n") -TkTextWindow.new($twind_text, 'end', - 'window'=>TkButton.new($twind_text) { - #text 'OFF' - text 'Turn Off' - command proc{textWindOff $twind_text} - cursor 'top_left_arrow' - }) - -$twind_text.insert('end', " horizontal scrolling and turn back on word wrapping.\n\n") -$twind_text.insert('end', "Or, here is another example. If you ") -TkTextWindow.new($twind_text, 'end', - 'window'=>TkButton.new($twind_text) { - text 'Click Here' - command proc{textWindPlot $twind_text} - cursor 'top_left_arrow' - }) -$twind_text.insert('end', " a canvas displaying an x-y plot will appear right here.") -$mark_plot = TkTextMark.new($twind_text, 'insert') -$mark_plot.gravity='left' -$twind_text.insert('end', " You can drag the data points around with the mouse, ") -$twind_text.insert('end', "or you can click here to ") -TkTextWindow.new($twind_text, 'end', - 'window'=>TkButton.new($twind_text) { - text 'Delete' - command proc{textWindDel $twind_text} - cursor 'top_left_arrow' - }) - -$twind_text.insert('end', " the plot again.\n\n") -$twind_text.insert('end', "You may also find it useful to put embedded windows in ") -$twind_text.insert('end', "a text without any actual text. In this case the ") -$twind_text.insert('end', "text widget acts like a geometry manager. For ") -$twind_text.insert('end', "example, here is a collection of buttons laid out ") -$twind_text.insert('end', "neatly into rows by the text widget. These buttons ") -$twind_text.insert('end', "can be used to change the background color of the ") -$twind_text.insert('end', "text widget (\"Default\" restores the color to ") -$twind_text.insert('end', "its default). If you click on the button labeled ") -$twind_text.insert('end', "\"Short\", it changes to a longer string so that ") -$twind_text.insert('end', "you can see how the text widget automatically ") -$twind_text.insert('end', "changes the layout. Click on the button again ") -$twind_text.insert('end', "to restore the short string.\n") - - -TkTextWindow.new($twind_text, 'end', - 'window'=>TkButton.new($twind_text) {|b| - text 'Default' - command proc{embDefBg $twind_text} - cursor 'top_left_arrow' - $tag_buttons.add('end') - }, - 'padx'=>3 ) -embToggle = TkVariable.new('Short') -TkTextWindow.new($twind_text, 'end', - 'window'=>TkCheckButton.new($twind_text) { - textvariable embToggle - indicatoron 0 - variable embToggle - onvalue 'A much longer string' - offvalue 'Short' - cursor 'top_left_arrow' - pady 5 - padx 2 - }, - 'padx'=>3, - 'pady'=>2 ) - -[ 'AntiqueWhite3', 'Bisque1', 'Bisque2', 'Bisque3', 'Bisque4', - 'SlateBlue3', 'RoyalBlue1', 'SteelBlue2', 'DeepSkyBlue3', 'LightBlue1', - 'DarkSlateGray1', 'Aquamarine2', 'DarkSeaGreen2', 'SeaGreen1', - 'Yellow1', 'IndianRed1', 'IndianRed2', 'Tan1', 'Tan4' -].each{|twind_color| - TkTextWindow.new($twind_text, 'end', - 'window'=>TkButton.new($twind_text) { - text twind_color - cursor 'top_left_arrow' - command proc{$twind_text.bg twind_color} - }, - 'padx'=>3, - 'pady'=>2 ) -} - -# -def textWindOn (w,f) - if defined? $twind_scroll - begin - $twind_scroll.destroy - rescue - end - $twind_scroll = nil - end - - base = TkWinfo.parent( TkWinfo.parent(w) ) - $twind_scroll = TkScrollbar.new(base) {|s| - orient 'horizontal' - command proc{|*args| w.xview(*args)} - w.xscrollcommand proc{|first,last| s.set first,last} - w.wrap 'none' - pack('after'=>f, 'side'=>'bottom', 'fill'=>'x') - } - - return nil -end - -def textWindOff (w) - if defined? $twind_scroll - begin - $twind_scroll.destroy - rescue - end - $twind_scroll = nil - end - w.xscrollcommand '' - w.wrap 'word' -end - -def textWindPlot (t) - if (defined? $twind_plot) && TkWinfo.exist?($twind_plot) - return - end - - $twind_plot = TkCanvas.new(t) { - relief 'sunken' - width 450 - height 300 - cursor 'top_left_arrow' - } - - if $tk_version =~ /^4.*/ - font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' - else - font = 'Helvetica 18' - end - - TkcLine.new($twind_plot, 100, 250, 400, 250, 'width'=>2) - TkcLine.new($twind_plot, 100, 250, 100, 50, 'width'=>2) - TkcText.new($twind_plot, 225, 20, - 'text'=>"A Simple Plot", 'font'=>font, 'fill'=>'brown') - - (0..10).each {|i| - x = 100 + (i * 30) - TkcLine.new($twind_plot, x, 250, x, 245, 'width'=>2) - TkcText.new($twind_plot, x, 254, - 'text'=>10*i, 'font'=>font, 'anchor'=>'n') - } - (0..5).each {|i| - y = 250 - (i * 40) - TkcLine.new($twind_plot, 100, y, 105, y, 'width'=>2) - TkcText.new($twind_plot, 96, y, - 'text'=>"#{i*50}.0", 'font'=>font, 'anchor'=>'e') - } - - for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]] - x = 100 + (3*xx) - y = 250 - (4*yy)/5 - item = TkcOval.new($twind_plot, x-6, y-6, x+6, y+6, - 'width'=>1, 'outline'=>'black', 'fill'=>'SkyBlue2') - item.addtag 'point' - end - - $twind_plot.itembind('point', 'Any-Enter', - proc{$twind_plot.itemconfigure 'current', 'fill', 'red'}) - $twind_plot.itembind('point', 'Any-Leave', - proc{$twind_plot.itemconfigure 'current', 'fill', 'SkyBlue2'}) - $twind_plot.itembind('point', '1', - proc{|x,y| embPlotDown $twind_plot,x,y}, "%x %y") - $twind_plot.itembind('point', 'ButtonRelease-1', - proc{$twind_plot.dtag 'selected'}) - $twind_plot.bind('B1-Motion', - proc{|x,y| embPlotMove $twind_plot,x,y}, "%x %y") - while ($twind_text.get($mark_plot) =~ /[ \t\n]/) - $twind_text.delete $mark_plot - end - $twind_text.insert $mark_plot,"\n" - TkTextWindow.new($twind_text, $mark_plot, 'window'=>$twind_plot) - $tag_center.add $mark_plot - $twind_text.insert $mark_plot,"\n" -end - -$embPlot = {'lastX'=>0, 'lastY'=>0} - -def embPlotDown (w, x, y) - w.dtag 'selected' - w.addtag_withtag 'selected', 'current' - w.raise 'current' - $embPlot['lastX'] = x - $embPlot['lastY'] = y -end - -def embPlotMove (w, x, y) - w.move 'selected', x - $embPlot['lastX'], y - $embPlot['lastY'] - $embPlot['lastX'] = x - $embPlot['lastY'] = y -end - -def textWindDel (w) - if (defined? $twind_text) && TkWinfo.exist?($twind_plot) - $twind_text.delete $twind_plot - $twind_plot = nil - while ($twind_text.get($mark_plot) =~ /[ \t\n]/) - $twind_text.delete $mark_plot - end - $twind_text.insert $mark_plot," " - end -end - -def embDefBg (w) - w['background'] = w.configinfo('background')[3] -end diff --git a/ext/tk/sample/demos-en/twind2.rb b/ext/tk/sample/demos-en/twind2.rb deleted file mode 100644 index 4a59a2e613..0000000000 --- a/ext/tk/sample/demos-en/twind2.rb +++ /dev/null @@ -1,385 +0,0 @@ -# frozen_string_literal: false -# -# text (embedded windows) widget demo 2 (called by 'widget') -# - -# delete toplevel widget -if defined?($twind2_demo) && $twind2_demo - $twind2_demo.destroy - $twind2_demo = nil -end - -# demo toplevel widget -$twind2_demo = TkToplevel.new {|w| - title("Text Demonstration - Embedded Windows 2") - iconname("Embedded Windows") - positionWindow(w) -} - -base_frame = TkFrame.new($twind2_demo).pack(:fill=>:both, :expand=>true) - -# frame -$twind2_buttons = TkFrame.new(base_frame) {|frame| - TkGrid(TkFrame.new(frame, :height=>2, :relief=>:sunken, :bd=>2), - :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - TkButton.new(frame, :text=>'See Code', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'twind2'}), - TkButton.new(frame, :text=>'Dismiss', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - tmppath = $twind2_demo - $twind2_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - }), - :padx=>4, :pady=>4) - frame.grid_columnconfigure(0, :weight=>1) -} -$twind2_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -$twind2_text = nil -TkFrame.new(base_frame, 'highlightthickness'=>2, 'borderwidth'=>2, - 'relief'=>'sunken') {|f| - $twind2_text = TkText.new(f, 'setgrid'=>true, 'font'=>$font, - # 'width'=>'70', 'height'=>35, 'wrap'=>'word', - 'width'=>'70', 'height'=>35, 'wrap'=>'char', - 'highlightthickness'=>0, 'borderwidth'=>0 ){|t| - TkScrollbar.new(f) {|s| - command proc{|*args| t.yview(*args)} - t.yscrollcommand proc{|first,last| s.set first,last} - }.pack('side'=>'right', 'fill'=>'y') - }.pack('expand'=>'yes', 'fill'=>'both') -}.pack('expand'=>'yes', 'fill'=>'both') - -# text tags -$tag2_center = TkTextTag.new($twind2_text, - 'justify' =>'center', - 'spacing1'=>'5m', - 'spacing3'=>'5m' ) -$tag2_buttons = TkTextTag.new($twind2_text, - 'lmargin1'=>'1c', - 'lmargin2'=>'1c', - 'rmargin' =>'1c', - 'spacing1'=>'3m', - 'spacing2'=>0, - 'spacing3'=>0 ) - -# insert text -$twind2_text.insert('end', - 'A text widget can contain many different kinds of items, ') -$twind2_text.insert('end', - "both active and passive. It can lay these out in various ") -$twind2_text.insert('end', - "ways, with wrapping, tabs, centering, etc. In addition, ") -$twind2_text.insert('end', - "when the contents are too big for the window, smooth ") -$twind2_text.insert('end', "scrolling in all directions is provided.\n\n") - -$twind2_text.insert('end', "A text widget can contain other widgets embedded ") -$twind2_text.insert('end', "it. These are called \"embedded windows\", ") -$twind2_text.insert('end', "and they can consist of arbitrary widgets. ") -$twind2_text.insert('end', "For example, here are two embedded button ") -$twind2_text.insert('end', "widgets. You can click on the first button to ") -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text) { - text 'ON' - command proc{textWindOn2 $twind2_text,$twind2_buttons} - cursor 'top_left_arrow' - }) -$twind2_text.insert('end', " horizontal scrolling, which also turns off ") -$twind2_text.insert('end', "word wrapping. Or, you can click on the second ") -$twind2_text.insert('end', "button to\n") -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text) { - text 'OFF' - command proc{textWindOff2 $twind2_text} - cursor 'top_left_arrow' - }) -$twind2_text.insert('end', - " horizontal scrolling and turn back on word wrapping.\n\n") - -$twind2_text.insert('end', "Or, here is another example. If you ") -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text) { - text 'Click Here' - command proc{textWindPlot2 $twind2_text} - cursor 'top_left_arrow' - }) -$twind2_text.insert('end', - " a canvas displaying an x-y plot will appear right here.") -$mark2_plot = TkTextMark.new($twind2_text, 'insert') -$mark2_plot.gravity='left' -$twind2_text.insert('end', - " You can drag the data points around with the mouse, ") -$twind2_text.insert('end', "or you can click here to ") -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text) { - text 'Delete' - command proc{textWindDel2 $twind2_text} - cursor 'top_left_arrow' - }) -$twind2_text.insert('end', " the plot again.\n\n") - -$twind2_text.insert('end', - "You may also find it useful to put embedded windows in ") -$twind2_text.insert('end', - "a text without any actual text. In this case the ") -$twind2_text.insert('end', "text widget acts like a geometry manager. For ") -$twind2_text.insert('end', - "example, here is a collection of buttons laid out ") -$twind2_text.insert('end', - "neatly into rows by the text widget. These buttons ") -$twind2_text.insert('end', - "can be used to change the background color of the ") -$twind2_text.insert('end', "text widget (\"Default\" restores the color to ") -$twind2_text.insert('end', - "its default). If you click on the button labeled ") -$twind2_text.insert('end', "\"Short\", it changes to a longer string so that ") -$twind2_text.insert('end', "you can see how the text widget automatically ") -$twind2_text.insert('end', "changes the layout. Click on the button again ") -$twind2_text.insert('end', "to restore the short string.\n") - -btn_default = TkButton.new($twind2_text) {|b| - text 'Default' - command proc{embDefBg2 $twind2_text} - cursor 'top_left_arrow' -} -TkTextWindow.new($twind2_text, 'end', 'window'=>btn_default, 'padx'=>3) -embToggle = TkVariable.new('Short') -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkCheckButton.new($twind2_text) { - textvariable embToggle - indicatoron 0 - variable embToggle - onvalue 'A much longer string' - offvalue 'Short' - cursor 'top_left_arrow' - pady 5 - padx 2 - }, - 'padx'=>3, - 'pady'=>2 ) - -[ 'AntiqueWhite3', 'Bisque1', 'Bisque2', 'Bisque3', 'Bisque4', - 'SlateBlue3', 'RoyalBlue1', 'SteelBlue2', 'DeepSkyBlue3', 'LightBlue1', - 'DarkSlateGray1', 'Aquamarine2', 'DarkSeaGreen2', 'SeaGreen1', - 'Yellow1', 'IndianRed1', 'IndianRed2', 'Tan1', 'Tan4' -].each{|twind_color| - TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text) { - text twind_color - cursor 'top_left_arrow' - command proc{$twind2_text.bg twind_color} - }, - 'padx'=>3, - 'pady'=>2 ) -} - -$tag2_buttons.add(btn_default, 'end') - -$text_normal2 = {} -$text_normal2['border'] = $twind2_text.cget('borderwidth') -$text_normal2['highlight'] = $twind2_text.cget('highlightthickness') -$text_normal2['pad'] = $twind2_text.cget('padx') - -$twind2_text.insert('end', "\nYou can also change the usual border width and ") -$twind2_text.insert('end', "highlightthickness and padding.\n") - -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text, :text=>"Big borders", - :cursor=>'top_left_arrow', - 'command'=>proc{ - textWinBigB2 $twind2_text - })) - -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text, :text=>"Small borders", - :cursor=>'top_left_arrow', - 'command'=>proc{ - textWinSmallB2 $twind2_text - })) - -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text, :text=>"Big highlight", - :cursor=>'top_left_arrow', - 'command'=>proc{ - textWinBigH2 $twind2_text - })) - -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text, :text=>"Small highlight", - :cursor=>'top_left_arrow', - 'command'=>proc{ - textWinSmallH2 $twind2_text - })) - -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text, :text=>"Big pad", - :cursor=>'top_left_arrow', - 'command'=>proc{ - textWinBigP2 $twind2_text - })) - -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text, :text=>"Small pad", - :cursor=>'top_left_arrow', - 'command'=>proc{ - textWinSmallP2 $twind2_text - })) - -$twind2_text.insert('end', - "\n\nFinally, images fit comfortably in text widgets too:") - -TkTextImage.new($twind2_text, 'end', - 'image'=>TkBitmapImage.new(:file=>[ - $demo_dir, '..', - 'images', 'face.xbm' - ].join(File::Separator))) - -# methods -def textWinBigB2(w) - w.borderwidth 15 -end -def textWinSmallB2(w) - w.borderwidth $text_normal2['border'] -end -def textWinBigH2(w) - w.highlightthickness 15 -end -def textWinSmallH2(w) - w.highlightthickness $text_normal2['highlight'] -end -def textWinBigP2(w) - w.configure(:padx=>15, :pady=>15) -end -def textWinSmallP2(w) - w.configure(:padx=>$text_normal2['pad'], :pady=>$text_normal2['pad']) -end - -def textWindOn2 (w,f) - if defined? $twind2_scroll - begin - $twind2_scroll.destroy - rescue - end - $twind2_scroll = nil - end - - base = TkWinfo.parent( TkWinfo.parent(w) ) - $twind2_scroll = TkScrollbar.new(base) {|s| - orient 'horizontal' - command proc{|*args| w.xview(*args)} - w.xscrollcommand proc{|first,last| s.set first,last} - w.wrap 'none' - pack('after'=>f, 'side'=>'bottom', 'fill'=>'x') - } - - return nil -end - -def textWindOff2 (w) - if defined? $twind2_scroll - begin - $twind2_scroll.destroy - rescue - end - $twind2_scroll = nil - end - w.xscrollcommand '' - #w.wrap 'word' - w.wrap 'char' -end - -def textWindPlot2 (t) - if (defined? $twind2_plot) && (TkWinfo.exist?($twind2_plot)) - return - end - - $twind2_plot = TkCanvas.new(t) { - relief 'sunken' - width 450 - height 300 - cursor 'top_left_arrow' - } - - #font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' - font = 'Helvetica 18' - - TkcLine.new($twind2_plot, 100, 250, 400, 250, 'width'=>2) - TkcLine.new($twind2_plot, 100, 250, 100, 50, 'width'=>2) - TkcText.new($twind2_plot, 225, 20, - 'text'=>"A Simple Plot", 'font'=>font, 'fill'=>'brown') - - (0..10).each {|i| - x = 100 + (i * 30) - TkcLine.new($twind2_plot, x, 250, x, 245, 'width'=>2) - TkcText.new($twind2_plot, x, 254, - 'text'=>10*i, 'font'=>font, 'anchor'=>'n') - } - (0..5).each {|i| - y = 250 - (i * 40) - TkcLine.new($twind2_plot, 100, y, 105, y, 'width'=>2) - TkcText.new($twind2_plot, 96, y, - 'text'=>"#{i*50}.0", 'font'=>font, 'anchor'=>'e') - } - - for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]] - x = 100 + (3*xx) - y = 250 - (4*yy)/5 - item = TkcOval.new($twind2_plot, x-6, y-6, x+6, y+6, - 'width'=>1, 'outline'=>'black', 'fill'=>'SkyBlue2') - item.addtag 'point' - end - - $twind2_plot.itembind('point', 'Any-Enter', - proc{$twind2_plot.itemconfigure 'current', 'fill', 'red'}) - $twind2_plot.itembind('point', 'Any-Leave', - proc{$twind2_plot.itemconfigure 'current', 'fill', 'SkyBlue2'}) - $twind2_plot.itembind('point', '1', - proc{|x,y| embPlotDown2 $twind2_plot,x,y}, "%x %y") - $twind2_plot.itembind('point', 'ButtonRelease-1', - proc{$twind2_plot.dtag 'selected'}) - $twind2_plot.bind('B1-Motion', - proc{|x,y| embPlotMove2 $twind2_plot,x,y}, "%x %y") - while ($twind2_text.get($mark2_plot) =~ /[ \t\n]/) - $twind2_text.delete $mark2_plot - end - $twind2_text.insert $mark2_plot,"\n" - TkTextWindow.new($twind2_text, $mark2_plot, 'window'=>$twind2_plot) - $tag2_center.add $mark2_plot - $twind2_text.insert $mark2_plot,"\n" -end - -$embPlot2 = {'lastX'=>0, 'lastY'=>0} - -def embPlotDown2 (w, x, y) - w.dtag 'selected' - w.addtag_withtag 'selected', 'current' - w.raise 'current' - $embPlot2['lastX'] = x - $embPlot2['lastY'] = y -end - -def embPlotMove2 (w, x, y) - w.move 'selected', x - $embPlot2['lastX'], y - $embPlot2['lastY'] - $embPlot2['lastX'] = x - $embPlot2['lastY'] = y -end - -def textWindDel2 (w) - if (defined? $twind2_text) && TkWinfo.exist?($twind2_plot) - $twind2_text.delete $twind2_plot - $twind2_plot = nil - while ($twind2_text.get($mark2_plot) =~ /[ \t\n]/) - $twind2_text.delete $mark2_plot - end - $twind2_text.insert $mark2_plot," " - end -end - -def embDefBg2 (w) - w['background'] = w.configinfo('background')[3] -end diff --git a/ext/tk/sample/demos-en/unicodeout.rb b/ext/tk/sample/demos-en/unicodeout.rb deleted file mode 100644 index 910dff38b7..0000000000 --- a/ext/tk/sample/demos-en/unicodeout.rb +++ /dev/null @@ -1,115 +0,0 @@ -# frozen_string_literal: false -# unicodeout.rb -- -# -# This demonstration script shows how you can produce output (in label -# widgets) using many different alphabets. -# -# based on Tcl/Tk8.4.4 widget demos - -if defined?($unicodeout_demo) && $unicodeout_demo - $unicodeout_demo.destroy - $unicodeout_demo = nil -end - -$unicodeout_demo = TkToplevel.new {|w| - title("Unicode Label Demonstration") - iconname("unicodeout") - positionWindow(w) -} - -base_frame = TkFrame.new($unicodeout_demo).pack(:fill=>:both, :expand=>true) - -TkLabel.new(base_frame, - :font=>$font, :wraplength=>'5.4i', :justify=>:left, - :text=><:top) -This is a sample of Tk's support for languages that use non-Western \ -character sets. However, what you will actually see below depends \ -largely on what character sets you have installed, and what you see \ -for characters that are not present varies greatly between platforms as well. \ -Please try to click the 'See Code' button, \ -and click the 'Rerun Demo' button after editing \ -(the source file is not changed) \ -the definition of @@font on the Unicodeout_SampleFrame class. -The strings are written in Tcl using UNICODE characters \ -using the \\uXXXX escape so as to do so in a portable fashion. - -ATTENTION: -The strings are converted to the encoded string objects \ -(completed to rewrite Tcl's escapes) by Tk::UTF8_String method. \ -And the Tk::UTF8_String objects are passed to the label widgets. -EOL - -TkFrame.new(base_frame){|f| - pack(:side=>:bottom, :fill=>:x, :pady=>'2m') - - TkButton.new(f, :text=>'Dismiss', :width=>15, :command=>proc{ - $unicodeout_demo.destroy - $unicodeout_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'See Code', :width=>15, :command=>proc{ - showCode 'unicodeout' - }).pack(:side=>:left, :expand=>true) -} - -wait_msg = TkLabel.new(base_frame, - :text=>"Please wait while loading fonts...", - :font=>"Helvetica 12 italic").pack - -class Unicodeout_SampleFrame < TkFrame - @@font = $font - # @@font = 'Helvetica 14' - # @@font = 'Courier 12' - # @@font = 'clearlyu 16' - # @@font = 'fixed 12' - # @@font = 'Times 12' - # @@font = 'Newspaper 12' - # @@font = '{New century schoolbook} 12' - - def initialize(base) - super(base) - grid_columnconfig(1, :weight=>1) - end - - def add_sample(lang, *args) - sample_txt = Tk::UTF8_String(args.join('')) - l = TkLabel.new(self, :font=>@@font, :text=>lang+':', - :anchor=>:nw, :pady=>0) - #s = TkLabel.new(self, :font=>@@font, :text=>sample_txt, - s = TkLabel.new(self, :font=>TkFont.new(@@font), :text=>sample_txt, - :anchor=>:nw, :width=>30, :pady=>0) - Tk.grid(l, s, :sticky=>:ew, :pady=>0) - l.grid_config(:padx, '1m') - end -end -f = Unicodeout_SampleFrame.new(base_frame) -f.pack(:expand=>true, :fill=>:both, :padx=>'2m', :pady=>'1m') - -# Processing when some characters are missing might take a while, so make -# sure we're displaying something in the meantime... - -oldCursor = $unicodeout_demo.cursor -$unicodeout_demo.cursor('watch') -Tk.update - -f.add_sample('Arabic', - '\uFE94\uFEF4\uFE91\uFEAE\uFECC\uFEDF\uFE8D\uFE94', - '\uFEE4\uFEE0\uFEDC\uFEDF\uFE8D') -f.add_sample('Trad. Chinese', '\u4E2D\u570B\u7684\u6F22\u5B57') -f.add_sample('Simpl. Chinese', '\u6C49\u8BED') -f.add_sample('Greek', - '\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AE ', - '\u03B3\u03BB\u03CE\u03C3\u03C3\u03B1') -f.add_sample('Hebrew', - '\u05DD\u05D9\u05DC\u05E9\u05D5\u05E8\u05D9 ', - '\u05DC\u05D9\u05D0\u05E8\u05E9\u05D9') -f.add_sample('Japanese', - '\u65E5\u672C\u8A9E\u306E\u3072\u3089\u304C\u306A, ', - '\u6F22\u5B57\u3068\u30AB\u30BF\u30AB\u30CA') -f.add_sample('Korean', '\uB300\uD55C\uBBFC\uAD6D\uC758 \uD55C\uAE00') -f.add_sample('Russian', - '\u0420\u0443\u0441\u0441\u043A\u0438\u0439 ', - '\u044F\u0437\u044B\u043A') - -wait_msg.destroy -$unicodeout_demo.cursor(oldCursor) diff --git a/ext/tk/sample/demos-en/vscale.rb b/ext/tk/sample/demos-en/vscale.rb deleted file mode 100644 index 2ce522f7be..0000000000 --- a/ext/tk/sample/demos-en/vscale.rb +++ /dev/null @@ -1,80 +0,0 @@ -# frozen_string_literal: false -# vscale.rb -# -# This demonstration script shows an example with a vertical scale. - -require "tkcanvas" - -if defined?($vscale_demo) && $vscale_demo - $vscale_demo.destroy - $vscale_demo = nil -end - -$vscale_demo = TkToplevel.new {|w| - title("Vertical Scale Demonstration") - iconname("vscale") -} -positionWindow($vscale_demo) - -base_frame = TkFrame.new($vscale_demo).pack(:fill=>:both, :expand=>true) - -msg = TkLabel.new(base_frame) { - font $font - wraplength '3.5i' - justify 'left' - text "An arrow and a vertical scale are displayed below. If you click or drag mouse button 1 in the scale, you can change the size of the arrow." -} -msg.pack('side'=>'top', 'padx'=>'.5c') - -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - text 'Dismiss' - command proc { - tmppath = $vscale_demo - $vscale_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'Show Code' - command proc { showCode 'vscale' } - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -def setHeight(w, height) - height = height + 21 - y2 = height - 30 - if y2 < 21 - y2 = 21 - end - w.coords 'poly',15,20,35,20,35,y2,45,y2,25,height,5,y2,15,y2,15,20 - w.coords 'line',15,20,35,20,35,y2,45,y2,25,height,5,y2,15,y2,15,20 -end - -TkFrame.new(base_frame) {|frame| - borderwidth 10 - canvas = TkCanvas.new(frame) {|c| - width 50 - height 50 - bd 0 - highlightthickness 0 - TkcPolygon.new(c, 0, 0, 1, 1, 2, 2) { - fill 'SeaGreen3' - tags 'poly' - } - TkcLine.new(c, 0, 0, 1, 1, 2, 2, 0, 0) { - fill 'black' - tags 'line' - } - }.pack('side'=>'left', 'anchor'=>'nw', 'fill'=>'y') - scale = TkScale.new(frame) { - orient 'vertical' - length 284 - from 0 - to 250 - command proc{|value| setHeight(canvas, value)} - tickinterval 50 - }.pack('side'=>'left', 'anchor'=>'ne') - scale.set 75 -}.pack diff --git a/ext/tk/sample/demos-en/widget b/ext/tk/sample/demos-en/widget deleted file mode 100644 index fb49a746b9..0000000000 --- a/ext/tk/sample/demos-en/widget +++ /dev/null @@ -1,1087 +0,0 @@ -#!/usr/bin/env ruby - -# widget -- -# This script demonstrates the various widgets provided by Tk, -# along with many of the features of the Tk toolkit. This file -# only contains code to generate the main window for the -# application, which invokes individual demonstrations. The -# code for the actual demonstrations is contained in separate -# ".rb" files is this directory, which are sourced by this script -# as needed. - -require 'tk' -# require 'tkafter' - -### $DEBUG=1 ########## - -$RubyTk_WidgetDemo = true - -#---------------------------------------------------------------- -# The code below create the main window, consisting of a menu bar -# and a text widget that explains how to use the program, plus lists -# all of the demos as hypertext items. -#---------------------------------------------------------------- - -# widget demo directory -# $demo_dir = File.dirname($0) -$demo_dir = File.dirname(__FILE__) - -# root -$root = TkRoot.new{title "Ruby/Tk Widget Demonstration"} - -# tk -$tk_version = Tk::TK_VERSION -$tk_major_ver, $tk_minor_ver = $tk_version.split('.').map{|n| n.to_i} -$tk_patchlevel = Tk::TK_PATCHLEVEL - -# tcl_platform -$tk_platform = TkVarAccess.new('tcl_platform') - -# -case($tk_version) -when /^4.*/ - $font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', nil) -else - $font = TkFont.new('Helvetica -12') -end - -# images -$image = {} - -if $tk_major_ver >= 8 -$image['refresh'] = TkPhotoImage.new(:height=>16, :format=>'GIF', :data=><= 8 -$image['view'] = TkPhotoImage.new(:height=>16, :format=>'GIF', :data=><= 8 -$image['delete'] = TkPhotoImage.new(:height=>16, :format=>'GIF', :data=><= 8 -$image['print'] = TkPhotoImage.new(:height=>19, :format=>'GIF', :data=><= 8 - $root.add_menubar([[['File', 0], - ['About ... ', proc{aboutBox}, 0, ''], - '---', - ['Quit', proc{exit}, 0, 'Ctrl-Q'] - ]]) -else - TkMenubar.new($root, - [[['File', 0], - ['About ... ', proc{aboutBox}, 0, ''], - '---', - ['Quit', proc{exit}, 0, 'Ctrl-Q'] - ]]).pack('side'=>'top', 'fill'=>'x') -end -$root.bind('F1', proc{aboutBox}) -$root.bind('Control-q', proc{exit}) - -=begin -TkFrame.new($root){|frame| - TkMenubutton.new(frame){|button| - m = TkMenu.new(button) { - add 'command', 'label'=>'Quit', 'command'=>proc{exit}, 'underline'=>0 - } - menu m - text 'File' - underline 0 - }.pack('side'=>'left') -}.pack('side'=>'top', 'fill'=>'x') -=end - -# -if $tk_version =~ /^4\.[01]/ - scr = TkScrollbar.new($root, 'orient'=>'vertical') - txt = TkText.new($root) { - wrap 'word' - width 70 - height 30 - font $font - setgrid 'yes' - yscrollcommand proc{|first,last| scr.set first,last} - } - scr.command(proc{|*args| txt.yview(*args)}) - scr.pack('side'=>'right', 'fill'=>'y') - txt.pack('expand'=>'yes', 'fill'=>'both') -else - textFrame = TkFrame.new($root) - scr = TkScrollbar.new($root, 'orient'=>'vertical', - 'highlightthickness'=>0, 'takefocus'=>1) { - pack('in'=>textFrame, 'side'=>'right', 'fill'=>'y', 'padx'=>1) - } - txt = TkText.new($root) { - wrap 'word' - width 70 - height 30 - font $font - setgrid 'yes' - highlightthickness 0 - padx 4 - pady 2 - takefocus 0 - bd 1 - yscrollcommand proc{|first,last| scr.set first,last} - } - scr.command(proc{|*args| txt.yview(*args)}) -# txt.pack('in'=>textFrame, 'expand'=>'yes', 'fill'=>'both', 'padx'=>1) -# txt.pack('in'=>textFrame, 'expand'=>'yes', 'fill'=>'both') -# textFrame.pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>2) - textFrame.pack('expand'=>'yes', 'fill'=>'both') - # $root.withdraw.deiconify - Tk.update_idletasks - txt.pack('in'=>textFrame, 'expand'=>'yes', 'fill'=>'both') - - statusBar = TkFrame.new($root) {|f| - if $tk_version =~ /^4.*/ - statusfont = '-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*' - else - statusfont = 'Helvetica 10' - end - $statusBarLabel = \ - TkLabel.new(f, 'text'=>" ", 'relief'=>'sunken', 'bd'=>1, 'anchor'=>'w', - 'font'=>statusfont) \ - .pack('side'=>'left', 'padx'=>2, 'expand'=>'yes', 'fill'=>'both') - TkLabel.new(f, 'width'=>8, 'relief'=>'sunken', 'bd'=>1, 'anchor'=>'w', - 'font'=>statusfont) \ - .pack('side'=>'left', 'padx'=>2) - }.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>2) -end - -# Create a bunch of tags to use in the text widget, such as those for -# section titles and demo descriptions. Also define the bindings for -# tags. - -if $tk_version =~ /^4.*/ - tag_title = TkTextTag.new(txt, 'font'=>'-*-Helvetica-Bold-R-Normal--*-180-*-*-*-*-*-*') -else - tag_title = TkTextTag.new(txt, 'font'=>'Helvetica 18 bold') -end - -# We put some "space" characters to the left and right of each demo description -# so that the descriptions are highlighted only when the mouse cursor -# is right over them (but not when the cursor is to their left or right) - -tag_demospace = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c') - -if TkWinfo.depth($root) == 1 - tag_demo = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c', - 'underline'=>1) - $tag_visited = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c', - 'underline'=>1) - tag_hot = TkTextTag.new(txt, 'background'=>'black', 'foreground'=>'white') -else - tag_demo = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c', - 'foreground'=>'blue', 'underline'=>1) - $tag_visited = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c', - 'foreground'=>'#303080', 'underline'=>1) -# tag_hot = TkTextTag.new(txt, 'relief'=>'raised', 'borderwidth'=>1, -# 'background'=>'SeaGreen3') - tag_hot = TkTextTag.new(txt, 'borderwidth'=>1, 'foreground'=>'red') -end - -#tag_demo.bind('Button-1', proc{invoke txt, txt.index('current')}) -tag_demo.bind('ButtonRelease-1', - proc{|x,y|invoke txt, txt.index("@#{x},#{y}")}, '%x %y') - -lastLine = TkVariable.new("") -newLine = TkVariable.new("") -tag_demo.bind('Enter', proc{|x,y| - lastLine.value = txt.index("@#{x},#{y} linestart") - tag_hot.add(lastLine.value, "#{lastLine.value} lineend") - showStatus txt, txt.index("@#{x},#{y}") - }, - '%x %y') -tag_demo.bind('Leave', - proc{ - tag_hot.remove('1.0','end') - txt.configure('cursor','xterm') - $statusBarLabel.configure('text'=>"") - }) -tag_demo.bind('Motion', proc{|x, y| - newLine.value = txt.index("@#{x},#{y} linestart") - if newLine.value != lastLine.value - tag_hot.remove('1.0','end') - lastLine.value = newLine.value - if ( txt.tag_names("@#{x},#{y}").find{|t| - t.kind_of?(String) && t =~ /^demo-/ - } ) - tag_hot.add(lastLine.value, - "#{lastLine.value} lineend -1 chars") - end - end - showStatus txt, txt.index("@#{x},#{y}") - }, - '%x %y') - -# Create the text for the text widget. - -txt.insert('end', "Ruby/Tk Widget Demonstrations\n\n", tag_title) -txt.insert('end', <:both, :expand=>true) - TkLabel.new(base) { - text "Variable values:" - width 20 - anchor 'center' - if $tk_version =~ /^4.*/ - font '-Adobe-helvetica-medium-r-normal--*-180-*-*-*-*-*-*' - else - font 'Helvetica 14' - end - }.pack('side'=>'top', 'fill'=>'x') - len = 1 - args.each{|vnam,vbody| - len = vnam.to_s.length if vnam.to_s.length > len - } - args.each{|vnam,vbody| - TkFrame.new(w){|f| - #TkLabel.new(f, 'text'=>"#{vnam}: ").pack('side'=>'left') - TkLabel.new(f, 'text'=>"#{vnam}: ",'width'=>len+2).pack('side'=>'left') - TkLabel.new(f, 'textvariable'=>vbody, 'anchor'=>'w')\ - .pack('side'=>'left', 'expand'=>'yes', 'fill'=>'x') - }.pack('side'=>'top', 'anchor'=>'w', 'fill'=>'x') - } - TkButton.new(base) { - text "OK" - command proc{w.destroy} - }.pack('side'=>'bottom', 'pady'=>2) - } - $showVarsWin[parent.path] = w -end - -def showVars2(parent, *args) - if $showVarsWin[parent.path] - begin - $showVarsWin[parent.path].destroy - rescue - end - end - $showVarsWin[parent.path] = TkToplevel.new(parent) {|top| - title "Variable values" - - base = TkFrame.new(top).pack(:fill=>:both, :expand=>true) - - TkLabelFrame.new(base, :text=>"Variable values:", - :font=>{:family=>'Helvetica', :size=>14}){|f| - args.each{|vnam,vbody| - TkGrid(TkLabel.new(f, :text=>"#{vnam}: ", :anchor=>'w'), - TkLabel.new(f, :textvariable=>vbody, :anchor=>'w'), - :padx=>2, :pady=>2, :sticky=>'w') - } - - f.grid(:sticky=>'news', :padx=>4) - f.grid_columnconfig(1, :weight=>1) - f.grid_rowconfig(100, :weight=>1) - } - TkButton.new(base, :text=>"OK", :width=>8, :default=>:active, - :command=>proc{top.destroy}){|b| - top.bind('Return', proc{b.invoke}) - top.bind('Escape', proc{b.invoke}) - - b.grid(:sticky=>'e', :padx=>4, :pady=>[6, 4]) - } - base.grid_columnconfig(0, :weight=>1) - base.grid_rowconfig(0, :weight=>1) - } -end - -if $tk_major_ver < 8 - alias showVars showVars1 -elsif $tk_major_ver == 8 && $tk_minor_ver < 4 - alias showVars showVars1 -else # ver >= 8.4 - alias showVars showVars2 -end - -# Pseudo-Toplevel support -module PseudoToplevel_Evaluable - def pseudo_toplevel_eval(body = Proc.new) - Thread.current[:TOPLEVEL] = self - begin - body.call - ensure - Thread.current[:TOPLEVEL] = nil - end - end - - def pseudo_toplevel_evaluable? - @pseudo_toplevel_evaluable - end - def pseudo_toplevel_evaluable=(mode) - @pseudo_toplevel_evaluable = (mode)? true: false - end - - def self.extended(mod) - mod.__send__(:extend_object, mod) - mod.instance_variable_set('@pseudo_toplevel_evaluable', true) - end -end - -class Object - alias __method_missing__ method_missing - private :__method_missing__ - - def method_missing(id, *args) - begin - has_top = (top = Thread.current[:TOPLEVEL]) && - top.respond_to?(:pseudo_toplevel_evaluable?) && - top.pseudo_toplevel_evaluable? && - top.respond_to?(id) - rescue Exception => e - has_top = false - end - - if has_top - top.__send__(id, *args) - else - __method_missing__(id, *args) - end - end -end - -class Proc - def initialize(*args) - super - @__pseudo_toplevel__ = Thread.current[:TOPLEVEL] - end - - alias __call__ call - def call(*args, &b) - if top = @__pseudo_toplevel__ - orig_top = Thread.current[:TOPLEVEL] - Thread.current[:TOPLEVEL] = top - begin - __call__(*args, &b) - ensure - Thread.current[:TOPLEVEL] = orig_top - end - else - __call__(*args, &b) - end - end -end - -def proc(&b) - Proc.new(&b) -end -def lambda(&b) - Proc.new(&b) -end - -def _null_binding - Module.new.instance_eval{extend PseudoToplevel_Evaluable} - # binding - # Module.new.instance_eval{binding} -end -private :_null_binding - -def eval_samplecode(code, file=nil) - #eval(code) - #_null_binding.pseudo_toplevel_eval{ eval(code) } - #Thread.new{ _null_binding.pseudo_toplevel_eval{ eval(code) } } - Thread.new{ - _null_binding.pseudo_toplevel_eval{ - begin - if file - eval(code, binding, "(eval:#{file})") - else - eval(code) - end - rescue Exception=>e - #p e - TkBgError.show(e.class.inspect + ': ' + e.message + "\n" + - "\n---< backtrace of Ruby side >-----\n" + - e.backtrace.join("\n") + - "\n---< backtrace of Tk side >-------") - end - } - } - Tk.update rescue nil -end - -# invoke -- -# This procedure is called when the user clicks on a demo description. -# It is responsible for invoking the demonstration. -# -# Arguments: -# txt - Name of text widget -# index - The index of the character that the user clicked on. -def invoke(txt, idx) - tag = txt.tag_names(idx).find{|t| t.kind_of?(String) && t =~ /^demo-/} - return unless tag - - cursor = txt.cget('cursor') - txt.cursor('watch') - Tk.update rescue nil - # eval(IO.readlines("#{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb").join, _null_binding) - # Tk.update - eval_samplecode(IO.readlines("#{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb").join, tag[5..-1] + '.rb') - txt.cursor(cursor) - - $tag_visited.add("#{idx} linestart +1 chars", "#{idx} lineend +1 chars") -end -=begin -def invoke (txt, idx) - tag = txt.tag_names(idx).find{|t| t.kind_of?(String) && t =~ /^demo-/} - return unless tag - current_cursor = txt.cget('cursor') - txt.cursor('watch') - Tk.update -# eval `cat #{tag[5..-1]}.rb` -# eval `cat #{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb` - eval IO.readlines("#{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb").join - Tk.update -# txt.cursor('xterm') - txt.cursor(current_cursor) - - $tag_visited.add("#{idx} linestart +1 chars", "#{idx} lineend +1 chars") -end -=end -# showStatus -- -# -# Show the name of the demo program in the status bar. This procedure -# is called when the user moves the cursor over a demo description. -# - -def showStatus (txt, index) - tag = txt.tag_names(index).find{|t| t.kind_of?(String) && t =~ /^demo-/} - cursor = txt.cget('cursor') - unless tag - $statusBarLabel.configure('text', " ") - newcursor = 'xterm' - else - demoname = tag[5..-1] - $statusBarLabel.configure('text', - "Run the \"#{demoname}\" sample program") - newcursor = 'hand2' - end - txt.configure('cursor'=>newcursor) if cursor != newcursor -end - -# showCode -- -# This procedure creates a toplevel window that displays the code for -# a demonstration and allows it to be edited and reinvoked. -# -# Arguments: -# demo - The name of the demonstration's window, which can be -# used to derive the name of the file containing its code. - -def showCode1(demo) - file = "#{demo}.rb" - $code_window = nil unless defined? $code_window - if $code_window == nil || TkWinfo.exist?($code_window) == false - $code_window = TkToplevel.new(nil) - f = TkFrame.new($code_window) - - TkButton.new(f) { - text "Dismiss" - command proc{ - $code_window.destroy - $code_window = nil - } - }.pack('side'=>'right', 'expand'=>'false', 'pady'=>2, 'padx'=>25) - TkButton.new(f) { - text "Rerun Demo" - # command proc{eval($code_text.get('1.0','end'), _null_binding)} - command proc{eval_samplecode($code_text.get('1.0','end'), '')} - }.pack('side'=>'right', 'expand'=>'false', 'pady'=>2) - - TkLabel.new(f,'text'=>'line:').pack('side'=>'left') - linenum =TkLabel.new(f,'text'=>'').pack('side'=>'left') - TkLabel.new(f,'text'=>' pos:').pack('side'=>'left') - posnum =TkLabel.new(f,'text'=>'').pack('side'=>'left') - - $set_linenum = proc{|w| - line, pos = w.index('insert').split('.') - linenum.text = line - posnum.text = pos - } - - f.pack('side'=>'bottom', 'expand'=>'true', 'fill'=>'x') - - if $tk_version =~ /^4\.[01]/ - s = TkScrollbar.new($code_window, 'orient'=>'vertical') - $code_text = TkText.new($code_window) { - height 40 - setgrid 'yes' - yscrollcommand proc{|first,last| s.set first,last} - } - s.command(proc{|*args| $code_text.yview(*args)}) - s.pack('side'=>'right', 'fill'=>'y') - $code_text.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'both') - else - TkFrame.new($code_window) {|f| - pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>1) - - hs = TkScrollbar.new($code_window, 'highlightthickness'=>0, - 'orient'=>'horizontal') - vs = TkScrollbar.new($code_window, 'highlightthickness'=>0, - 'orient'=>'vertical') - $code_text = TkText.new($code_window) {|t| - height 40 - wrap 'word' - xscrollcommand proc{|first,last| hs.set first,last} - yscrollcommand proc{|first,last| vs.set first,last} - setgrid 'yes' - highlightthickness 0 - pady 2 - padx 3 - hs.command(proc{|*args| $code_text.xview(*args)}) - vs.command(proc{|*args| $code_text.yview(*args)}) - } - - $code_text.grid('in'=>f, 'padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - vs.grid('in'=>f, 'padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>1, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') -# xs.grid('in'=>f, 'padx'=>1, 'pady'=>1, 'row'=>1, 'column'=>0, -# 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - -# JKC 2001-07-26: segfaults under 1.7.1 (2001-06-19) [i686-linux] - TkGrid.rowconfigure(f, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure(f, 0, 'weight'=>1, 'minsize'=>0) - } - end - - btag = TkBindTag.new - - btag.bind('Key', $set_linenum, '%W') - btag.bind('Button', $set_linenum, '%W') - - btags = $code_text.bindtags - btags.insert(btags.index($code_text.class) + 1, btag) - $code_text.bindtags = btags - - else - $code_window.deiconify - $code_window.raise - end - - $code_window.title("Demo code: #{file}") - $code_window.iconname(file) -# fid = open(file, 'r') - fid = open([$demo_dir, file].join(File::Separator), 'r') - $code_text.delete('1.0', 'end') - #$code_text.insert('1.0', `cat #{file}`) - $code_text.insert('1.0', fid.read) - #$code_mark = TkTextMark.new($code_text, '1.0') - #$code_text.set_insert('1.0') - TkTextMarkInsert.new($code_text,'1.0') - - $set_linenum.call($code_text) - - fid.close -end - -def showCode2(demo) - file = "#{demo}.rb" - $code_window = nil unless defined? $code_window - if $code_window == nil || TkWinfo.exist?($code_window) == false - $code_window = TkToplevel.new(nil) - tf = TkFrame.new($code_window) - $code_text = TkText.new(tf, :font=>'Courier 10', :height=>30, - :wrap=>'word', :bd=>1, :setgrid=>true, - :highlightthickness=>0, :pady=>2, :padx=>3) - xscr = TkScrollbar.new(tf, :bd=>1){assign($code_text)} - yscr = TkScrollbar.new(tf, :bd=>1){assign($code_text)} - TkGrid($code_text, yscr, :sticky=>'news') - #TkGrid(xscr) - tf.grid_rowconfigure(0, :weight=>1) - tf.grid_columnconfigure(0, :weight=>1) - - bf = TkFrame.new($code_window) - - lf = TkFrame.new(bf) - TkLabel.new(lf, :text=>'line:').pack(:side=>:left) - linenum =TkLabel.new(lf, :text=>'').pack(:side=>:left) - TkLabel.new(lf, :text=>' pos:').pack(:side=>:left) - posnum =TkLabel.new(lf, :text=>'').pack(:side=>:left) - - $set_linenum = proc{|w| - line, pos = w.index('insert').split('.') - linenum.text = line - posnum.text = pos - } - - b_dis = TkButton.new(bf, :text=>'Dismiss', :default=>:active, - :command=>proc{ - $code_window.destroy - $code_window = nil - }, - :image=>$image['delete'], :compound=>:left) - b_prn = TkButton.new(bf, :text=>'Print Code', - :command=>proc{printCode($code_text, file)}, - :image=>$image['print'], :compound=>:left) - b_run = TkButton.new(bf, :text=>'Rerun Demo', - :command=>proc{ - # eval($code_text.get('1.0','end'), _null_binding) - eval_samplecode($code_text.get('1.0','end'), '') - }, - :image=>$image['refresh'], :compound=>:left) - - TkGrid(lf, 'x', b_run, b_prn, b_dis, :padx=>4, :pady=>[6,4]) - bf.grid_columnconfigure(1, :weight=>1) - - TkGrid(tf, :sticky=>'news') - TkGrid(bf, :sticky=>'ew') - $code_window.grid_columnconfigure(0, :weight=>1) - $code_window.grid_rowconfigure(0, :weight=>1) - - $code_window.bind('Return', proc{|win| - b_dis.invoke unless win.kind_of?(TkText) - }, '%W') - $code_window.bindinfo('Return').each{|cmd, arg| - $code_window.bind_append('Escape', cmd, arg) - } - - btag = TkBindTag.new - - btag.bind('Key', $set_linenum, '%W') - btag.bind('Button', $set_linenum, '%W') - btag.bind('Configure', $set_linenum, '%W') - - btags = $code_text.bindtags - btags.insert(btags.index($code_text.class) + 1, btag) - $code_text.bindtags = btags - - else - $code_window.deiconify - $code_window.raise - end - - $code_window.title("Demo code: #{file}") - $code_window.iconname(file) - fid = open([$demo_dir, file].join(File::Separator), 'r') - $code_text.delete('1.0', 'end') - $code_text.insert('1.0', fid.read) - TkTextMarkInsert.new($code_text,'1.0') - - $set_linenum.call($code_text) - - fid.close -end - -if $tk_major_ver < 8 - alias showCode showCode1 -elsif $tk_major_ver == 8 && $tk_minor_ver < 4 - alias showCode showCode1 -else # ver >= 8.4 - alias showCode showCode2 -end - - -# printCode -- -# Prints the source code currently displayed in the See Code dialog. -# Much thanks to Arjen Markus for this. -# -# Arguments: -# txt - Name of text widget containing code to print -# file - Name of the original file (implicitly for title) - -def printCode(txt, file) - code = txt.get('1.0', 'end - 1c') - dir = '.' - dir = ENV['HOME'] if ENV['HOME'] - dir = ENV['TMP'] if ENV['TMP'] - dir = ENV['TEMP'] if ENV['TEMP'] - - fname = [dir, 'tkdemo-' + file].join(File::Separator) - open(fname, 'w'){|fid| fid.print(code)} - begin - case Tk::TCL_PLATFORM('platform') - when 'unix' - msg = `lp -c #{fname}` - unless $?.exitstatus == 0 - Tk.messageBox(:title=>'Print spooling failure', - :message=>'Print spooling probably failed: ' + msg) - end - when 'windows' - begin - printTextWin32(fname) - rescue => e - Tk.messageBox(:title=>'Print spooling failure', - :message=>'Print spooling probably failed: ' + - e.message) - end - when 'macintosh' - Tk.messageBox(:title=>'Operation not Implemented', - :message=>'Oops, sorry: not implemented yet!') - else - Tk.messageBox(:title=>'Operation not Implemented', - :message=>'Wow! Unknown platform: ' + - Tk::TCL_PLATFORM('platform')) - end - ensure - File.delete(fname) - end -end - -# printTextWin32 -- -# Print a file under Windows -# -# Arguments: -# filename - Name of the file -# -def printTextWin32(fname) - require 'win32/registry' - begin - app = Win32::Registry::HKEY_CLASSES_ROOT['.txt'] - pcmd = nil - Win32::Registry::HKEY_CLASSES_ROOT.open("#{app}\\shell\\print"){|reg| - pcmd = reg['command'] - } - rescue - app = Tk.tk_call('auto_execok', 'notepad.exe') - pcmd = "#{app} /p %1" - end - - pcmd.gsub!('%1', fname) - puts pcmd - cmd = Tk.tk_call('auto_execok', 'start') + ' /min ' + pcmd - - msg = `#{cmd}` - unless $?.exitstatus == 0 - fail RuntimeError, msg - end -end - -# aboutBox -# -# Pops up a message box with an "about" message -# -def aboutBox - Tk.messageBox('icon'=>'info', 'type'=>'ok', 'title'=>'About Widget Demo', - 'message'=>"Ruby/Tk widget demonstration Ver.1.7.1-en\n\n" + - "based on demos of Tk8.1 -- 8.5 " + - "( Copyright of Tcl/Tk demos:: " + - "(c) 1996-1997 Sun Microsystems, Inc. / " + - "(c) 1997-2000 Ajuba Solutions, Inc. / " + - "(c) 2001-2007 Donal K. Fellows / " + - "(c) 2002-2007 Daniel A. Steffen )\n\n" + - "Your Ruby & Tk Version ::\n" + - "Ruby#{RUBY_VERSION}(#{RUBY_RELEASE_DATE})[#{RUBY_PLATFORM}] / Tk#{$tk_patchlevel}#{(Tk::JAPANIZED_TK)? '-jp': ''}\n\n" + - "Ruby/Tk release date :: tcltklib #{TclTkLib::RELEASE_DATE}; tk #{Tk::RELEASE_DATE}") -end - -######################################### -# start demos if given at command line -no_launcher = false -if ARGV[0] == '-n' - ARGV.shift - no_launcher = true if ARGV.size > 0 -else - # show the root widget to make it lower then demo windows - Tk.update rescue nil -end -ARGV.each{|cmd| - if cmd =~ /(.*).rb/ - cmd = $1 - end - #eval(IO.readlines("#{[$demo_dir, cmd].join(File::Separator)}.rb").join, - # _null_binding) - eval_samplecode(IO.readlines("#{[$demo_dir, cmd].join(File::Separator)}.rb").join, cmd + '.rb') -} -if no_launcher - $root.withdraw # hide root window - Thread.start{ - loop do - count = 0 - $root.winfo_children.each{|w| - count += 1 if w.kind_of?(TkToplevel) - } - $root.destroy if count == 0 - end - } -end - -######################################### -# start eventloop -Tk.mainloop - diff --git a/ext/tk/sample/demos-jp/README b/ext/tk/sample/demos-jp/README deleted file mode 100644 index 4278124659..0000000000 --- a/ext/tk/sample/demos-jp/README +++ /dev/null @@ -1,54 +0,0 @@ - - Ruby/Tk widget-demo - version 1.2 ( 2000/04/08 ) - 永井@知能.ä¹å·¥å¤§ (nagai@ai.kyutech.ac.jp) - -標準é…布㮠Tcl/Tk 拡張パッケージをå–ã‚Šè¾¼ã‚“ã  Ruby (以下 Ruby/Tk ã¨å‘¼ã³ã¾ã™) -ã§ã¯ï¼ŒTk widget を用ã„㟠GUI ã®ä½œæˆã‚’è¡Œã†ã“ã¨ãŒã§ãã¾ã™ï¼Žå®Ÿéš›ã« GUI ã‚’ä½œæˆ -ã—ã¦ã„ãå ´åˆã«ã¯æ§˜ã€…ãªå®Ÿä¾‹ãŒã‚µãƒ³ãƒ—ルã¨ã—ã¦å­˜åœ¨ã™ã‚‹ã¨ä¾¿åˆ©ãªã®ã§ã™ãŒï¼ŒRuby/Tk -ã«ã¯ãã®ã‚ˆã†ãªé©å½“ãªã‚µãƒ³ãƒ—ルスクリプト集åˆã¯å­˜åœ¨ã—ã¾ã›ã‚“ã§ã—ãŸï¼Žãã‚Œã«å¯¾ã—, -拡張パッケージã®å…ƒã§ã‚ã‚‹ Tcl/Tk ã«ã¯ï¼ŒTk widget を用ã„ã¦ã©ã®ã‚ˆã†ãªã“ã¨ãŒã§ -ãã‚‹ã‹ã‚’示ã™ã‚‚ã®ã¨ã—㦠widget-demo ãŒå­˜åœ¨ã—ãŠã‚Šï¼ŒTcl/Tk を用ã„㟠GUI ã®ä½œæˆ -ã‚’ç¿’å¾—ã™ã‚‹éš›ã®ä»£è¡¨çš„サンプルã¨ãªã£ã¦ã„ã¾ã™ï¼Žæœ¬ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã¯ï¼ŒRuby/Tk ã®ç¿’å¾—ã® -ãŸã‚ã®ä»£è¡¨çš„ãªã‚µãƒ³ãƒ—ルスクリプトã¨ã™ã¹ã,Tcl/Tk ã® widget-demo を移æ¤ã—ãŸã‚‚ -ã®ã§ã™ï¼Ž - -今回ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ ruby-1.4.x ã«å¯¾å¿œã¨ã—ã¦ãŠãã¾ã™ãŒï¼Œæ—§ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«æ¯”ã¹ã¦ï¼Œ -ã»ã¨ã‚“ã©å¤‰æ›´ã¯ã‚ã‚Šã¾ã›ã‚“.ruby-1.1c2 以上ãªã‚‰å‹•ãã¨æ€ã„ã¾ã™ï¼Žruby-1.5.x ã«ã¤ -ã„ã¦ã¯ãƒ†ã‚¹ãƒˆã—ã¦ã„ã¾ã›ã‚“.ãã®ãŸã‚,éžäº’æ›ã®å½±éŸ¿ãŒå‡ºã‚‹ã“ã¨ãŒã‚ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã› -ã‚“ãŒï¼Œãã®å ´åˆã§ã‚‚å°‘ã—ã®ä¿®æ­£ã§å‹•ã‹ã›ã‚‹ã¨æ€ã„ã¾ã™ï¼Žçµ„ã¿è¾¼ã‚€ Tk ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ï¼Œ -4.2 ã§ã‚‚ 8.0 ã§ã‚‚修正ãªãå‹•ã‹ã›ã‚‹ã¯ãšã§ã™ï¼ŽãŸã ã—,日本語版ã§ã®ç§»æ¤ã¨ãªã£ã¦ -ã„ã‚‹ãŸã‚,日本語化ã•ã‚ŒãŸ Tk ã‚’ã”利用ãã ã•ã„.スクリプトã®ãƒ†ã‚¹ãƒˆã¯ï¼Œæ—§ãƒãƒ¼ã‚¸ãƒ§ -ンã®éš›ã« Tk4.2jp 㨠Tk8.0jp ã®ä¸Šã§è¡Œã£ã¦ã„ã¾ã™ (完璧ã«ã§ã¯ãªã„ã§ã™ãŒ).今回 -ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ ruby-1.4.x + Tk8.0jp 上ã§ã®ç°¡å˜ãªãƒ†ã‚¹ãƒˆã—ã‹è¡Œã£ã¦ã„ã¾ã›ã‚“ãŒï¼Œ -修正ã¨ã„ã†ã»ã©ã®ä¿®æ­£ã¯ã—ã¦ã„ã¾ã›ã‚“ã®ã§å•é¡Œã¯ãªã„ã¨è€ƒãˆã¦ã„ã¾ã™ï¼Ž - -本アーカイブã«å«ã¾ã‚Œã‚‹ã‚¹ã‚¯ãƒªãƒ—トã®å¤šãã¯ï¼Œå…ƒã¨ãªã£ã¦ã„ã‚‹ Tcl/Tk 版ã«æ¯”較的近 -ã„スクリプト記述ã¨ãªã‚‹ã‚ˆã†ã«ã—ã¦ã„ã¾ã™ï¼Žãã®ãŸã‚,Ruby/Tk ã®ã‚µãƒ³ãƒ—ルã¨è¨€ã†ã« -ã¯ï¼Œã‚ã¾ã‚Š Ruby らã—ããªã„ã¨ã‚‚言ãˆã‚‹ã§ã—ょã†ï¼Žã«ã‚‚ã‹ã‹ã‚らãšï¼Œãã®ã‚ˆã†ãªè¨˜è¿° -ã‚’å–ã£ã¦ã„ã‚‹ç†ç”±ã¯ï¼ŒRuby/Tk ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆä¸è¶³ã«ã‚ã‚Šã¾ã™ï¼Ž - -Tcl/Tk ã«ã¯é©å½“ãªå‚考書ãŒä½•å†Šã‹å­˜åœ¨ã—ã¦ã„ã¾ã™ã‹ã‚‰ï¼ŒRuby/Tk ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’ä½œæˆ -ã™ã‚‹éš›ã¯ï¼Œãã®ã‚ˆã†ãª Tcl/Tk ã®å‚考書ã§æƒ…報を補ã„ãªãŒã‚‰ä½œæˆã™ã‚‹ã“ã¨ã«ãªã‚‹ã¨æ€ -ã„ã¾ã™ï¼Žå„ widget ã®ä½¿ç”¨ä¾‹ã¨ã—ã¦ï¼ŒTcl/Tk ã® widget-demo ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã‚‚ã‚ã‚‹ -ã§ã—ょã†ï¼ŽRuby/Tk 版ã®è¨˜è¿°ã‚’ widget-demo ã‚’ Tcl/Tk 版ã®è¨˜è¿°ã«è¿‘ã„ã‚‚ã®ã«ã—㦠-ãŠã‘ã°ï¼Œãã®å¯¾æ¯”ã«ã‚ˆã£ã¦ï¼ŒRuby/Tk ã®ç†è§£ã‚’æ—©ã‚ã‚‹ã“ã¨ãŒã§ãã‚‹ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ï¼Ž -一旦 Ruby/Tk ã§ã® å„ widget ã®ä½¿ç”¨æ–¹æ³•ã‚’ç¿’å¾—ã—ã¦ã—ã¾ãˆã°ï¼ŒRuby らã—ã„スクリ -プトを作æˆã™ã‚‹ã“ã¨ã¯é›£ã—ããªã„ã§ã—ょã†ï¼Žæœ¬ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ï¼ŒRuby/Tk -を最åˆã«ç¿’å¾—ã™ã‚‹ã¾ã§ã®è¸å°ã¨ã—ã¦åˆ©ç”¨ã—ã¦ã„ãŸã ã‘ã‚Œã°å¹¸ã„ã§ã™ï¼Ž - -widget-demo ã®ç§»æ¤ã«ã‚ãŸã£ã¦ã¯ï¼Œæ¬¡ã®æ–¹ã«ã‚‚移æ¤ã—ãŸã‚¹ã‚¯ãƒªãƒ—トをæä¾›ã—ã¦ã„ãŸã  -ãã¾ã—ãŸï¼Žã“ã“ã«æ„Ÿè¬ã®æ„を表ã—ã¾ã™ï¼Ž - - 立石@JAIST (ttate@jaist.ac.jp) ã•ã‚“ - å¹³æ¾ç¥¥å² (hiramatu@cdrom.co.jp) ã•ã‚“ - -å¹³æ¾ã•ã‚“ã«ã‚ˆã‚‹ Ruby/Tk 入門㮠Web page (http://www.cdrom.co.jp/~hiramatu/) -ã‚‚ Ruby/Tk ã®ç¿’å¾—ã«æœ‰ç”¨ã¨æ€ãˆã¾ã™ã®ã§ï¼Œãœã²ã”å‚ç…§ãã ã•ã„. - -ã¾ãŸï¼Œå‰æ©‹ (maebashi@iij.ad.jp) ã•ã‚“ã‚’ã¯ã˜ã‚ã¨ã—ã¦ï¼Œwidget-demo ã®ç§»æ¤ã«éš›ã— -ã¦å¿…è¦ã¨ãªã£ãŸ Ruby ã® Tk 関連ライブラリ修正ã«ã¤ã„ã¦ï¼Œå•é¡Œç‚¹ï¼Œãƒã‚°ã®æŒ‡æ‘˜ã‚’ã— -ã¦ã„ãŸã ã„ãŸæ–¹ã€…ã«ã‚‚æ„Ÿè¬è‡´ã—ã¾ã™ï¼Ž - -ãã—ã¦æœ€å¾Œã«æœ€å¤§ã®æ„Ÿè¬ã‚’ Ruby 設計者㮠ã¾ã¤ã‚‚㨠ゆãã²ã‚ (matz@netlab.co.jp) -ã•ã‚“ã«æ§ã’ãŸã„ã¨æ€ã„ã¾ã™ï¼Ž diff --git a/ext/tk/sample/demos-jp/README.1st b/ext/tk/sample/demos-jp/README.1st deleted file mode 100644 index 68caf8b14d..0000000000 --- a/ext/tk/sample/demos-jp/README.1st +++ /dev/null @@ -1,20 +0,0 @@ -ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã¯ Ruby/Tk ã®ãƒ‡ãƒ¢ã‚¹ã‚¯ãƒªãƒ—トãŒåŽã‚られã¦ã„ã¾ã™ï¼Ž - -'.rb' ã¨ã„ã†æ‹¡å¼µå­ã‚’æŒã£ã¦ã„るファイルã¯ï¼Œãƒ©ãƒ³ãƒãƒ£â”€ã‚¹ã‚¯ãƒªãƒ—ト㧠-ã‚ã‚‹ 'widget' ã‹ã‚‰å‘¼ã³å‡ºã•ã‚Œã‚‹ã‚µãƒ–スクリプトã§ã™ï¼Žãã‚Œãžã‚Œç‹¬ç«‹ã« -ã¯å‹•ãã¾ã›ã‚“.'widget' スクリプトã‹ã‚‰å‘¼ã³å‡ºã—ã¦ãã ã•ã„. - -ã‚‚ã—ランãƒãƒ£â”€ã‚¹ã‚¯ãƒªãƒ—ト 'widget' ã®èµ·å‹•ã¨åŒæ™‚ã«ã„ãã¤ã‹ã®ã‚µãƒ–ス -クリプトを起動ã—ãŸã‘ã‚Œã°ï¼Œãã®ã‚µãƒ–スクリプトã®åå‰ã‚’引数ã¨ã—ã¦ä¸Ž -ãˆã¦ãã ã•ã„. -( 例: /usr/local/bin/ruby widget button.rb entry1.rb text.rb ) -サブスクリプトã®æ‹¡å¼µå­ '.rb' ã¯çœç•¥ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ï¼Ž -( 例: /usr/local/bin/ruby widget button entry1 text ) - -ã‚‚ã—ランãƒãƒ£â”€ã‚¹ã‚¯ãƒªãƒ—トã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒå¿…è¦ãªã„å ´åˆã«ã¯ï¼Œ'-n' オ -プションを与ãˆã¦ãã ã•ã„. -( 例: /usr/local/bin/ruby widget -n button.rb entry1.rb text.rb ) - -ä»–ã®ãƒ•ã‚¡ã‚¤ãƒ« (browse1 ã‚„ hello ãªã©) ã¯å˜ç‹¬ã§å‹•ã‹ã™ã“ã¨ãŒå¯èƒ½ã§ã™ï¼Ž - - 2004/04/14 Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) diff --git a/ext/tk/sample/demos-jp/anilabel.rb b/ext/tk/sample/demos-jp/anilabel.rb deleted file mode 100644 index ccad73ffc6..0000000000 --- a/ext/tk/sample/demos-jp/anilabel.rb +++ /dev/null @@ -1,178 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# animated label widget demo (called by 'widget') -# -# based on Tcl/Tk8.5a2 widget demos - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($anilabel_demo) && $anilabel_demo - $anilabel_demo.destroy - $anilabel_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$anilabel_demo = TkToplevel.new {|w| - title("Animated Label Demonstration") - iconname("anilabel") - positionWindow(w) -} - -base_frame = TkFrame.new($anilabel_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "下ã«ã¯4ã¤ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒ©ãƒ™ãƒ«ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚å·¦å´ã«ã‚るラベルã¯ã€å†…部ã®ãƒ†ã‚­ã‚¹ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’スクロールã—ãŸã‚ˆã†ã«è¦‹ã›ã‚‹ã“ã¨ã§å‹•ãを付ã‘ã¦ã„ã¾ã™ã€‚å³å´ã®ãƒ©ãƒ™ãƒ«ã¯ã€è¡¨ç¤ºã™ã‚‹ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’変化ã•ã›ã‚‹ã“ã¨ã§å‹•ãを与ãˆã¦ã„ã¾ã™ã€‚" -} -msg.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $anilabel_demo - $anilabel_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'anilabel'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# label demo ç”¨ãƒ•ãƒ¬ãƒ¼ãƒ ç”Ÿæˆ -f_left = TkLabelFrame.new(base_frame, :text=>'Scrolling Texts') -f_right = TkLabelFrame.new(base_frame, :text=>'GIF Image') -Tk.pack(f_left, f_right, 'side'=>'left', 'expand'=>'yes', 'fill'=>'both', - 'padx'=>10, 'pady'=>10) - -# animated label -class AnimatedTextLabel < TkLabel - def initialize(*args) - super(*args) - @timer = TkTimer.new{ _animation_callback } - @timer.loop_exec = -1 - # bind('Destroy'){ @timer.stop } - @btag = TkBindTag.new('Destroy'){ @timer.stop } - self.bindtags_unshift(@btag) - end - - def _animation_callback() - txt = self.text - self.text = (txt[1..-1] << txt[0]) - end - private :_animation_callback - - def start(interval) - @timer.set_interval(interval) - @timer.start - end - - def stop - @timer.stop - end -end - -# animated image -class AnimatedImageLabel < AnimatedTextLabel - def initialize(*args) - super(*args) - @destroy_image = false - @btag.bind_append('Destroy'){ - if @destroy_image - begin - self.image.delete - rescue - end - end - } - end - attr_accessor :destroy_image - - def _animation_callback() - img = self.image - - fmt = img.format - if fmt.kind_of?(Array) - if fmt[1].kind_of?(Hash) - # fmt == ['GIF', {'index'=>idx}] - idx = fmt[1]['index'] - else - # fmt == ['GIF', '-index', idx] :: Ruby1.8.2 returns this. - idx = fmt[2] - end - elsif fmt.kind_of?(String) && fmt =~ /GIF -index (\d+)/ - idx = $1.to_i - else - idx = -1 - end - - begin - img.format("GIF -index #{idx + 1}") - rescue => e - img.format("GIF -index 0") - end - end - private :_animation_callback -end - -# label ç”Ÿæˆ -l1 = AnimatedTextLabel.new(f_left, :borderwidth=>4, :relief=>:ridge, - :font=>{:family=>'Courier', :size=>10}) -l2 = AnimatedTextLabel.new(f_left, :borderwidth=>4, :relief=>:groove, - :font=>{:family=>'Courier', :size=>10}) -l3 = AnimatedTextLabel.new(f_left, :borderwidth=>4, :relief=>:flat, - :font=>{:family=>'Courier', :size=>10}, :width=>18) -Tk.pack(l1, l2, l3, - :side=>:top, :expand=>true, :anchor=>:w, :padx=>10, :pady=>10) - -limg = AnimatedImageLabel.new(f_right, :borderwidth=>0) -limg.pack(:side=>:top, :expand=>true, :padx=>10, :pady=>10) - -# base64-encoded animated GIF file -tclPowerdData = <'GIF', :data=>tclPowerdData)).start(100) diff --git a/ext/tk/sample/demos-jp/aniwave.rb b/ext/tk/sample/demos-jp/aniwave.rb deleted file mode 100644 index 6973de7f09..0000000000 --- a/ext/tk/sample/demos-jp/aniwave.rb +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# animated wave demo (called by 'widget') -# -# based on Tcl/Tk8.5a2 widget demos - -# destroy toplevel widget for this demo script -if defined?($aniwave_demo) && $aniwave_demo - $aniwave_demo.destroy - $aniwave_demo = nil -end - -# create toplevel widget -$aniwave_demo = TkToplevel.new {|w| - title("Animated Wave Demonstration") - iconname("aniwave") - positionWindow(w) -} - -base_frame = TkFrame.new($aniwave_demo).pack(:fill=>:both, :expand=>true) - -# create label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text 'ã“ã®ãƒ‡ãƒ¢ã§ã¯ã€ãƒ©ã‚¤ãƒ³ã‚¢ã‚¤ãƒ†ãƒ ãŒä¸€ã¤ã ã‘æã‹ã‚ŒãŸã‚­ãƒ£ãƒ³ãƒã‚¹ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚アニメーション処ç†ã¯ã€ãã®ãƒ©ã‚¤ãƒ³ã‚¢ã‚¤ãƒ†ãƒ ã®åº§æ¨™å€¤ã‚’変更ã™ã‚‹ã“ã¨ã§å®Ÿç¾ã—ã¦ã„ã¾ã™ã€‚' -} -msg.pack('side'=>'top') - -# create frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $aniwave_demo - $aniwave_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'aniwave'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# animated wave -class AnimatedWaveDemo - def initialize(frame, dir=:left) - @direction = dir - - # create canvas widget - @c = TkCanvas.new(frame, :width=>300, :height=>200, - :background=>'black') - @c.pack(:padx=>10, :pady=>10, :expand=>true) - - # Creates a coordinates list of a wave. - @waveCoords = [] - @backupCoords = [] - n = 0 - (-10..300).step(5){|n| @waveCoords << [n, 100]; @backupCoords << [n, 100] } - n = 305 - @waveCoords << [n, 0]; @backupCoords << [n, 0] - @waveCoords << [n+5, 200]; @backupCoords << [n+5, 200] - @coordsLen = @waveCoords.length - - # Create a smoothed line and arrange for its coordinates to be the - # contents of the variable waveCoords. - @line = TkcLine.new(@c, @waveCoords, - :width=>1, :fill=>'green', :smooth=>true) - - # Main animation "loop". - # Theoretically 100 frames-per-second (==10ms between frames) - @timer = TkTimer.new(10){ basicMotion; reverser } - - # Arrange for the animation loop to stop when the canvas is deleted - @c.bindtags_unshift(TkBindTag.new('Destroy'){ @timer.stop }) - end - - # Basic motion handler. Given what direction the wave is travelling - # in, it advances the y coordinates in the coordinate-list one step in - # that direction. - def basicMotion - @backupCoords, @waveCoords = @waveCoords, @backupCoords - (0...@coordsLen).each{|idx| - if @direction == :left - @waveCoords[idx][1] = @backupCoords[(idx+1 == @coordsLen)? 0: idx+1][1] - else - @waveCoords[idx][1] = @backupCoords[(idx == 0)? -1: idx-1][1] - end - } - @line.coords(@waveCoords) - end - - # Oscillation handler. This detects whether to reverse the direction - # of the wave by checking to see if the peak of the wave has moved off - # the screen (whose size we know already.) - def reverser - if @waveCoords[0][1] < 10 - @direction = :right - elsif @waveCoords[-1][1] < 10 - @direction = :left - end - end - - # animation control - def move - @timer.start - end - - def stop - @timer.stop - end -end - -# Start the animation processing -AnimatedWaveDemo.new(base_frame, :left).move diff --git a/ext/tk/sample/demos-jp/arrow.rb b/ext/tk/sample/demos-jp/arrow.rb deleted file mode 100644 index 12ab4af2b1..0000000000 --- a/ext/tk/sample/demos-jp/arrow.rb +++ /dev/null @@ -1,248 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# arrowhead widget demo (called by 'widget') -# - -# arrowSetup -- -# This method regenerates all the text and graphics in the canvas -# window. It's called when the canvas is initially created, and also -# whenever any of the parameters of the arrow head are changed -# interactively. -# -# Arguments: -# c - Name of the canvas widget. - -def arrowSetup(c) - v = $demo_arrowInfo - - # Remember the current box, if there is one. - tags = c.gettags('current') - if tags != [] - cur = tags.find{|t| t.kind_of?(String) && t =~ /^box[1-3]$/ } - else - cur = nil - end - - # Create the arrow and outline. - c.delete('all') - TkcLine.new(c, v.x1, v.y, v.x2, v.y, - { 'width'=>10 * v.width, - 'arrowshape'=>[10*v.a, 10*v.b, 10*v.c], - 'arrow'=>'last' - }.update(v.bigLineStyle) ) - xtip = v.x2 - 10*v.b - deltaY = 10*v.c + 5*v.width - TkcLine.new(c, v.x2, v.y, xtip, v.y + deltaY, - v.x2 - 10*v.a, v.y, xtip, v.y - deltaY, v.x2, v.y, - 'width'=>2, 'capstyle'=>'round', 'joinstyle'=>'round') - - # Create the boxes for reshaping the line and arrowhead. - TkcRectangle.new(c, v.x2-10*v.a-5, v.y-5, v.x2-10*v.a+5, v.y+5, - {'tags'=>['box1', $arrowTag_box]}.update(v.boxStyle) ) - TkcRectangle.new(c, xtip-5, v.y-deltaY-5, xtip+5, v.y-deltaY+5, - {'tags'=>['box2', $arrowTag_box]}.update(v.boxStyle) ) - TkcRectangle.new(c, v.x1-5, v.y-5*v.width-5, v.x1+5, v.y-5*v.width+5, - {'tags'=>['box3', $arrowTag_box]}.update(v.boxStyle) ) - c.itemconfigure cur, v.activeStyle if cur - - # Create three arrows in actual size with the same parameters - TkcLine.new(c, v.x2+50, 0, v.x2+50, 1000, 'width'=>2) - tmp = v.x2+100 - TkcLine.new(c, tmp, v.y-125, tmp, v.y-75, 'width'=>v.width, - 'arrow'=>'both', 'arrowshape'=>[v.a, v.b, v.c]) - TkcLine.new(c, tmp-25, v.y, tmp+25, v.y, 'width'=>v.width, - 'arrow'=>'both', 'arrowshape'=>[v.a, v.b, v.c]) - TkcLine.new(c, tmp-25, v.y+75, tmp+25, v.y+125, 'width'=>v.width, - 'arrow'=>'both', 'arrowshape'=>[v.a, v.b, v.c]) - - # Create a bunch of other arrows and text items showing the - # current dimensions. - tmp = v.x2+10 - TkcLine.new(c, tmp, v.y-5*v.width, tmp, v.y-deltaY, - 'arrow'=>'both', 'arrowshape'=>v.smallTips) - TkcText.new(c, v.x2+15, v.y-deltaY+5*v.c, 'text'=>v.c, 'anchor'=>'w') - tmp = v.x1-10 - TkcLine.new(c, tmp, v.y-5*v.width, tmp, v.y+5*v.width, - 'arrow'=>'both', 'arrowshape'=>v.smallTips) - TkcText.new(c, v.x1-15, v.y, 'text'=>v.width, 'anchor'=>'e') - tmp = v.y+5*v.width+10*v.c+10 - TkcLine.new(c, v.x2-10*v.a, tmp, v.x2, tmp, - 'arrow'=>'both', 'arrowshape'=>v.smallTips) - TkcText.new(c, v.x2-5*v.a, tmp+5, 'text'=>v.a, 'anchor'=>'n') - tmp = tmp+25 - TkcLine.new(c, v.x2-10*v.b, tmp, v.x2, tmp, - 'arrow'=>'both', 'arrowshape'=>v.smallTips) - TkcText.new(c, v.x2-5*v.b, tmp+5, 'text'=>v.b, 'anchor'=>'n') - - if $tk_version =~ /^4.*/ - TkcText.new(c, v.x1, 310, 'text'=>"'width'=>#{v.width}", 'anchor'=>'w', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*') - TkcText.new(c, v.x1, 330, - 'text'=>"'arrowshape'=>[#{v.a}, #{v.b}, #{v.c}]",'anchor'=>'w', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*') - else - TkcText.new(c, v.x1, 310, 'text'=>"'width'=>#{v.width}", 'anchor'=>'w', - 'font'=>'Helvetica 18') - TkcText.new(c, v.x1, 330, - 'text'=>"'arrowshape'=>[#{v.a}, #{v.b}, #{v.c}]", - 'anchor'=>'w', 'font'=>'Helvetica 18') - end - - v.count += 1 -end - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($arrow_demo) && $arrow_demo - $arrow_demo.destroy - $arrow_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$arrow_demo = TkToplevel.new {|w| - title("Arrowhead Editor Demonstration") - iconname("arrow") - positionWindow(w) -} - -base_frame = TkFrame.new($arrow_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'5i', 'justify'=>'left', - 'text'=>"ã“ã® widget ã§ã€ã‚­ãƒ£ãƒ³ãƒã‚¹ã§ä½¿ã‚れるラインã«ã¤ã„ã¦æ§˜ã€…ãªå¹…や矢å°ã®é ­ã®å½¢ã‚’試ã—ã¦ã¿ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ç·šã®å¹…や矢å°ã®å½¢ã‚’変ãˆã‚‹ã«ã¯ã€æ‹¡å¤§ã•ã‚ŒãŸçŸ¢å°ã«ã¤ã„ã¦ã„ã‚‹ 3ã¤ã®å››è§’をドラッグã—ã¦ãã ã•ã„。å³å´ã®çŸ¢å°ã¯æ™®é€šã®å¤§ãã•ã§ã®ã‚µãƒ³ãƒ—ルを示ã—ã¦ã„ã¾ã™ã€‚下ã®ãƒ†ã‚­ã‚¹ãƒˆã¯ãƒ©ã‚¤ãƒ³ã‚¢ã‚¤ãƒ†ãƒ ã«å¯¾ã™ã‚‹è¨­å®šã‚ªãƒ—ションã§ã™ã€‚"){ - pack('side'=>'top') -} - -# frame ç”Ÿæˆ -$arrow_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $arrow_demo - $arrow_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'arrow'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$arrow_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# canvas 設定 -$arrow_canvas = TkCanvas.new(base_frame, 'width'=>500, 'height'=>350, - 'relief'=>'sunken', 'borderwidth'=>2) -$arrow_canvas.pack('expand'=>'yes', 'fill'=>'both') - -# 値設定 -unless Struct.const_defined?("ArrowInfo") - $demo_arrowInfo = Struct.new("ArrowInfo", :a, :b, :c, :width, :motionProc, - :x1, :x2, :y, :smallTips, :count, - :bigLineStyle, :boxStyle, :activeStyle).new -end -$demo_arrowInfo.a = 8 -$demo_arrowInfo.b = 10 -$demo_arrowInfo.c = 3 -$demo_arrowInfo.width = 2 -$demo_arrowInfo.motionProc = proc{} -$demo_arrowInfo.x1 = 40 -$demo_arrowInfo.x2 = 350 -$demo_arrowInfo.y = 150 -$demo_arrowInfo.smallTips = [5, 5, 2] -$demo_arrowInfo.count = 0 -if TkWinfo.depth($arrow_canvas) > 1 - $demo_arrowInfo.bigLineStyle = {'fill'=>'SkyBlue1'} - $demo_arrowInfo.boxStyle = {'fill'=>'', 'outline'=>'black', 'width'=>1} - $demo_arrowInfo.activeStyle = {'fill'=>'red', 'outline'=>'black', 'width'=>1} -else - $demo_arrowInfo.bigLineStyle = {'fill'=>'black', - 'stipple'=>'@'+[$demo_dir,'..','images','grey.25'].join(File::Separator)} - $demo_arrowInfo.boxStyle = {'fill'=>'', 'outline'=>'black', 'width'=>1} - $demo_arrowInfo.activeStyle = {'fill'=>'black','outline'=>'black','width'=>1} -end -$arrowTag_box = TkcTag.new($arrow_canvas) -arrowSetup $arrow_canvas -$arrowTag_box.bind('Enter', proc{$arrow_canvas.itemconfigure('current', $demo_arrowInfo.activeStyle)}) -$arrowTag_box.bind('Leave', proc{$arrow_canvas.itemconfigure('current', $demo_arrowInfo.boxStyle)}) -$arrowTag_box.bind('B1-Enter', proc{}) -$arrowTag_box.bind('B1-Leave', proc{}) -$arrow_canvas.itembind('box1', '1', - proc{$demo_arrowInfo.motionProc \ - = proc{|x,y| arrowMove1 $arrow_canvas, x, y}}) -$arrow_canvas.itembind('box2', '1', - proc{$demo_arrowInfo.motionProc \ - = proc{|x,y| arrowMove2 $arrow_canvas, x, y}}) -$arrow_canvas.itembind('box3', '1', - proc{$demo_arrowInfo.motionProc \ - = proc{|x,y| arrowMove3 $arrow_canvas, x, y}}) -$arrowTag_box.bind('B1-Motion', - proc{|x,y| $demo_arrowInfo.motionProc.call(x,y)}, "%x %y") -$arrow_canvas.bind('Any-ButtonRelease-1', proc{arrowSetup $arrow_canvas}) - -# arrowMove1 -- -# This method is called for each mouse motion event on box1 (the -# one at the vertex of the arrow). It updates the controlling parameters -# for the line and arrowhead. -# -# Arguments: -# c - The name of the canvas window. -# x, y - The coordinates of the mouse. - -def arrowMove1(c,x,y) - v = $demo_arrowInfo - newA = (v.x2+5-c.canvasx(x).round)/10 - newA = 0 if newA < 0 - newA = 25 if newA > 25 - if newA != v.a - c.move('box1', 10*(v.a-newA), 0) - v.a = newA - end -end - -# arrowMove2 -- -# This method is called for each mouse motion event on box2 (the -# one at the trailing tip of the arrowhead). It updates the controlling -# parameters for the line and arrowhead. -# -# Arguments: -# c - The name of the canvas window. -# x, y - The coordinates of the mouse. - -def arrowMove2(c,x,y) - v = $demo_arrowInfo - newB = (v.x2+5-c.canvasx(x).round)/10 - newB = 0 if newB < 0 - newB = 25 if newB > 25 - newC = (v.y+5-c.canvasy(y).round-5*v.width)/10 - newC = 0 if newC < 0 - newC = 20 if newC > 20 - if newB != v.b || newC != v.c - c.move('box2', 10*(v.b-newB), 10*(v.c-newC)) - v.b = newB - v.c = newC - end -end - -# arrowMove3 -- -# This method is called for each mouse motion event on box3 (the -# one that controls the thickness of the line). It updates the -# controlling parameters for the line and arrowhead. -# -# Arguments: -# c - The name of the canvas window. -# x, y - The coordinates of the mouse. - -def arrowMove3(c,x,y) - v = $demo_arrowInfo - newWidth = (v.y+2-c.canvasy(y).round)/5 - newWidth = 0 if newWidth < 0 - newWidth = 20 if newWidth > 20 - if newWidth != v.width - c.move('box3', 0, 5*(v.width-newWidth)) - v.width = newWidth - end -end - diff --git a/ext/tk/sample/demos-jp/bind.rb b/ext/tk/sample/demos-jp/bind.rb deleted file mode 100644 index 74ddf0217a..0000000000 --- a/ext/tk/sample/demos-jp/bind.rb +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# text (tag bindings) widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($bind_demo) && $bind_demo - $bind_demo.destroy - $bind_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$bind_demo = TkToplevel.new {|w| - title("Text Demonstration - Tag Bindings") - iconname("bind") - positionWindow(w) -} - -base_frame = TkFrame.new($bind_demo).pack(:fill=>:both, :expand=>true) - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $bind_demo - $bind_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'bind'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# bind 用メソッド -def tag_binding_for_bind_demo(tag, enter_style, leave_style) - tag.bind('Any-Enter', proc{tag.configure enter_style}) - tag.bind('Any-Leave', proc{tag.configure leave_style}) -end - -# text ç”Ÿæˆ -txt = TkText.new(base_frame){|t| - # ç”Ÿæˆ - setgrid 'true' - #width 60 - #height 24 - font $font - wrap 'word' - TkScrollbar.new(base_frame) {|s| - pack('side'=>'right', 'fill'=>'y') - command proc{|*args| t.yview(*args)} - t.yscrollcommand proc{|first,last| s.set first,last} - } - pack('expand'=>'yes', 'fill'=>'both') - - # スタイル設定 - if TkWinfo.depth($root).to_i > 1 - tagstyle_bold = {'background'=>'#43ce80', 'relief'=>'raised', - 'borderwidth'=>1} - tagstyle_normal = {'background'=>'', 'relief'=>'flat'} - else - tagstyle_bold = {'foreground'=>'white', 'background'=>'black'} - tagstyle_normal = {'foreground'=>'', 'background'=>''} - end - - # テキスト挿入 - insert 'insert', "テキストwidgetã®è¡¨ç¤ºã‚¹ã‚¿ã‚¤ãƒ«ã‚’制御ã™ã‚‹ã®ã¨åŒã˜ã‚¿ã‚°ã®ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã‚’使ã£ã¦ã€ãƒ†ã‚­ã‚¹ãƒˆã«Tclã®ã‚³ãƒžãƒ³ãƒ‰ã‚’割り当ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€ãƒžã‚¦ã‚¹ã‚„キーボードã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã§ç‰¹å®šã®Tclã®ã‚³ãƒžãƒ³ãƒ‰ãŒå®Ÿè¡Œã•ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚例ãˆã°ã€ä¸‹ã®ã‚­ãƒ£ãƒ³ãƒã‚¹ã®ãƒ‡ãƒ¢ãƒ—ログラムã«ã¤ã„ã¦ã®èª¬æ˜Žæ–‡ã«ã¯ãã®ã‚ˆã†ãªã‚¿ã‚°ãŒã¤ã„ã¦ã„ã¾ã™ã€‚マウスを説明文ã®ä¸Šã«æŒã£ã¦ã„ãã¨èª¬æ˜Žæ–‡ãŒå…‰ã‚Šã€ãƒœã‚¿ãƒ³1を押ã™ã¨ãã®èª¬æ˜Žã®ãƒ‡ãƒ¢ãŒå§‹ã¾ã‚Šã¾ã™ã€‚ - -" - insert('end', '1. キャンãƒã‚¹ widget ã«ä½œã‚‹ã“ã¨ã®ã§ãるアイテムã®ç¨®é¡žå…¨ã¦ã«é–¢ã™ã‚‹ã‚µãƒ³ãƒ—ル。', (d1 = TkTextTag.new(t)) ) - insert('end', "\n\n") - insert('end', '2. ç°¡å˜ãª 2次元ã®ãƒ—ロット。データを表ã™ç‚¹ã‚’å‹•ã‹ã™ã“ã¨ãŒã§ãる。', (d2 = TkTextTag.new(t)) ) - insert('end', "\n\n") - insert('end', '3. テキストアイテムã®ã‚¢ãƒ³ã‚«ãƒ¼ã¨è¡Œæƒãˆã€‚', - (d3 = TkTextTag.new(t)) ) - insert('end', "\n\n") - insert('end', '4. ラインアイテムã®ãŸã‚ã®çŸ¢å°ã®é ­ã®å½¢ã®ã‚¨ãƒ‡ã‚£ã‚¿ã€‚', - (d4 = TkTextTag.new(t)) ) - insert('end', "\n\n") - insert('end', '5. タブストップを変更ã™ã‚‹ãŸã‚ã®æ©Ÿèƒ½ã¤ãã®ãƒ«ãƒ¼ãƒ©ãƒ¼ã€‚', - (d5 = TkTextTag.new(t)) ) - insert('end', "\n\n") - insert('end', - '6. キャンãƒã‚¹ãŒã©ã†ã‚„ã£ã¦ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã™ã‚‹ã®ã‹ã‚’示ã™ã‚°ãƒªãƒƒãƒ‰ã€‚', - (d6 = TkTextTag.new(t)) ) - - # binding - [d1, d2, d3, d4, d5, d6].each{|tag| - tag_binding_for_bind_demo(tag, tagstyle_bold, tagstyle_normal) - } - d1.bind('1', - proc{ - eval_samplecode(`cat #{[$demo_dir,'items.rb'].join(File::Separator)}`, 'items.rb') - }) - d2.bind('1', - proc{ - eval_samplecode(`cat #{[$demo_dir,'plot.rb'].join(File::Separator)}`, 'plot.rb') - }) - d3.bind('1', - proc{ - eval_samplecode(`cat #{[$demo_dir,'ctext.rb'].join(File::Separator)}`, 'ctext.rb') - }) - d4.bind('1', - proc{ - eval_samplecode(`cat #{[$demo_dir,'arrow.rb'].join(File::Separator)}`, 'arrow.rb') - }) - d5.bind('1', - proc{ - eval_samplecode(`cat #{[$demo_dir,'ruler.rb'].join(File::Separator)}`, 'ruler.rb') - }) - d6.bind('1', - proc{ - eval_samplecode(`cat #{[$demo_dir,'cscroll.rb'].join(File::Separator)}`, 'cscroll.rb') - }) - - TkTextMarkInsert.new(t, '0.0') - configure('state','disabled') -} - -txt.width 60 -txt.height 24 diff --git a/ext/tk/sample/demos-jp/bitmap.rb b/ext/tk/sample/demos-jp/bitmap.rb deleted file mode 100644 index 2cc9c28fbd..0000000000 --- a/ext/tk/sample/demos-jp/bitmap.rb +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# bitmap widget demo (called by 'widget') -# - -# bitmapRow -- -# Create a row of bitmap items in a window. -# -# Arguments: -# w - The parent window that is to contain the row. -# args - The names of one or more bitmaps, which will be displayed -# in a new row across the bottom of w along with their -# names. - -def bitmapRow(w,*args) - TkFrame.new(w){|row| - pack('side'=>'top', 'fill'=>'both') - for bitmap in args - TkFrame.new(row){|base| - pack('side'=>'left', 'fill'=>'both', 'pady'=>'.25c', 'padx'=>'.25c') - TkLabel.new(base, 'text'=>bitmap, 'width'=>9).pack('side'=>'bottom') - Tk::Label.new(base, 'bitmap'=>bitmap).pack('side'=>'bottom') - } - end - } -end - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($bitmap_demo) && $bitmap_demo - $bitmap_demo.destroy - $bitmap_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$bitmap_demo = TkToplevel.new {|w| - title("Bitmap Demonstration") - iconname("bitmap") - positionWindow(w) -} - -base_frame = TkFrame.new($bitmap_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -TkLabel.new(base_frame,'font'=>$font,'wraplength'=>'4i','justify'=>'left', - 'text'=>"ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯ã€Tk ã«çµ„ã¿è¾¼ã¾ã‚ŒãŸã™ã¹ã¦ã®ãƒ“ットマップãŒã€ãれらã®åå‰ã¨å…±ã«è¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚Tcl ã®ã‚¹ã‚¯ãƒªãƒ—ト中ã§ã¯ã€ãã‚Œãžã‚Œã®åå‰ã‚’用ã„ã¦å‚ç…§ã—ã¾ã™ã€‚"){ - pack('side'=>'top') -} - -# frame ç”Ÿæˆ -$bitmap_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $bitmap_demo - $bitmap_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'bitmap'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$bitmap_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame 設定 -TkFrame.new(base_frame){|f| - bitmapRow(f,'error','gray25','gray50','hourglass') - bitmapRow(f,'info','question','questhead','warning') - pack('side'=>'top', 'expand'=>'yes', 'fill'=>'both') -} - diff --git a/ext/tk/sample/demos-jp/browse1 b/ext/tk/sample/demos-jp/browse1 deleted file mode 100644 index 568892e4a8..0000000000 --- a/ext/tk/sample/demos-jp/browse1 +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env ruby - -# browse -- -# This script generates a directory browser, which lists the working -# directory and allow you to open files or subdirectories by -# double-clicking. - -require 'tk' - -# Create a scrollbar on the right side of the main window and a listbox -# on the left side. - -listbox = TkListbox.new(nil, 'relief'=>'sunken', - 'width'=>20, 'height'=>20, 'setgrid'=>'yes') {|l| - TkScrollbar.new(nil, 'command'=>proc{|*args| l.yview *args}) {|s| - pack('side'=>'right', 'fill'=>'y') - l.yscrollcommand(proc{|first,last| s.set(first,last)}) - } - - pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes') -} - -root = TkRoot.new -root.minsize(1,1) - -# The procedure below is invoked to open a browser on a given file; if the -# file is a directory then another instance of this program is invoked; if -# the file is a regular file then the Mx editor is invoked to display -# the file. - -def browse (dir, file) - file = dir + File::Separator + file if dir != '.' - type = File.ftype(file) - if type == 'directory' - system($0 + ' ' + file + ' &') - else - if type == 'file' - if ENV['EDITOR'] - system(ENV['EDITOR'] + ' ' + file + ' &') - else - system('xedit ' + file + ' &') - end - else - STDOUT.print "\"#{file}\" isn't a directory or regular file" - end - end -end - -# Fill the listbox with a list of all the files in the directory (run -# the "ls" command to get that information). - -dir = ARGV[0] ? ARGV[0] : '.' -open("|ls -a #{dir}", 'r'){|fid| fid.readlines}.each{|fname| - listbox.insert('end', fname.chomp) -} - -# Set up bindings for the browser. - -Tk.bind_all('Control-c', proc{root.destroy}) -listbox.bind('Double-Button-1', - proc{TkSelection.get.each{|f| browse dir, f}}) - -Tk.mainloop diff --git a/ext/tk/sample/demos-jp/browse2 b/ext/tk/sample/demos-jp/browse2 deleted file mode 100644 index 1a511c8d29..0000000000 --- a/ext/tk/sample/demos-jp/browse2 +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env ruby - -# browse -- -# This script generates a directory browser, which lists the working -# directory and allow you to open files or subdirectories by -# double-clicking. - -require 'tk' - -class Browse - BROWSE_WIN_COUNTER = TkVariable.new(0) - - def initialize(dir) - BROWSE_WIN_COUNTER.value = BROWSE_WIN_COUNTER.to_i + 1 - - # create base frame - base = TkToplevel.new { - minsize(1,1) - title('Browse : ' + dir) - } - - # Create a scrollbar on the right side of the main window and a listbox - # on the left side. - list = TkListbox.new(base, 'relief'=>'sunken', - 'width'=>20, 'height'=>20, 'setgrid'=>'yes') {|l| - TkScrollbar.new(base, 'command'=>proc{|*args| l.yview *args}) {|s| - pack('side'=>'right', 'fill'=>'y') - l.yscrollcommand(proc{|first,last| s.set(first,last)}) - } - - pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes') - - # Fill the listbox with a list of all the files in the directory (run - # the "ls" command to get that information). - open("|ls -a #{dir}", 'r'){|fid| fid.readlines}.each{|fname| - l.insert('end', fname.chomp) - } - - } - - # Set up bindings for the browser. - base.bind('Destroy', proc{ - Browse::BROWSE_WIN_COUNTER.value = \ - Browse::BROWSE_WIN_COUNTER.to_i - 1 - }) - base.bind('Control-c', proc{base.destroy}) - list.bind('Double-Button-1', - proc{TkSelection.get.each{|f| self.browse dir, f}}) - end - - # The method below is invoked to open a browser on a given file; if the - # file is a directory then another instance of this program is invoked; if - # the file is a regular file then the Mx editor is invoked to display - # the file. - def browse (dir, file) - file = dir + File::Separator + file if dir != '.' - type = File.ftype(file) - if type == 'directory' - Browse.new(file) - else - if type == 'file' - if ENV['EDITOR'] - system(ENV['EDITOR'] + ' ' + file + ' &') - else - system('xedit ' + file + ' &') - end - else - STDOUT.print "\"#{file}\" isn't a directory or regular file" - end - end - end - -end - -Browse.new(ARGV[0] ? ARGV[0] : '.') - -TkRoot.new { - withdraw - Browse::BROWSE_WIN_COUNTER.trace('w', proc{exit if Browse::BROWSE_WIN_COUNTER.to_i == 0}) -} - -Tk.mainloop diff --git a/ext/tk/sample/demos-jp/button.rb b/ext/tk/sample/demos-jp/button.rb deleted file mode 100644 index 204f5eab86..0000000000 --- a/ext/tk/sample/demos-jp/button.rb +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# button widget demo (called by 'widget') -# -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($button_demo) && $button_demo - $button_demo.destroy - $button_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$button_demo = TkToplevel.new {|w| - title("Button Demonstration") - iconname("button") - positionWindow(w) -} - -# label ç”Ÿæˆ -msg = TkLabel.new($button_demo) { - font $kanji_font - wraplength '4i' - justify 'left' - text "ボタンをクリックã™ã‚‹ã¨ã€ãƒœã‚¿ãƒ³ã®èƒŒæ™¯è‰²ãŒãã®ãƒœã‚¿ãƒ³ã«æ›¸ã‹ã‚Œã¦ã„る色ã«ãªã‚Šã¾ã™ã€‚ボタンã‹ã‚‰ãƒœã‚¿ãƒ³ã¸ã®ç§»å‹•ã¯ã‚¿ãƒ–を押ã™ã“ã¨ã§ã‚‚å¯èƒ½ã§ã™ã€‚ã¾ãŸã‚¹ãƒšãƒ¼ã‚¹ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" -} -msg.pack('side'=>'top') - -# frame ç”Ÿæˆ -$button_buttons = Tk::Frame.new($button_demo) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $button_demo - $button_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'button'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# button ç”Ÿæˆ -TkButton.new($button_demo){ - text "Peach Puff" - width 10 - command proc{ - $button_demo.configure('bg','PeachPuff1') - $button_buttons.configure('bg','PeachPuff1') - } -}.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2) - -TkButton.new($button_demo){ - text "Light Blue" - width 10 - command proc{ - $button_demo.configure('bg','LightBlue1') - $button_buttons.configure('bg','LightBlue1') - } -}.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2) - -TkButton.new($button_demo){ - text "Sea Green" - width 10 - command proc{ - $button_demo.configure('bg','SeaGreen2') - $button_buttons.configure('bg','SeaGreen2') - } -}.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2) - -TkButton.new($button_demo){ - text "Yellow" - width 10 - command proc{ - $button_demo.configure('bg','Yellow1') - $button_buttons.configure('bg','Yellow1') - } -}.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2) diff --git a/ext/tk/sample/demos-jp/check.rb b/ext/tk/sample/demos-jp/check.rb deleted file mode 100644 index 04a47c8101..0000000000 --- a/ext/tk/sample/demos-jp/check.rb +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# checkbutton widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($check_demo) && $check_demo - $check_demo.destroy - $check_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$check_demo = TkToplevel.new {|w| - title("Checkbutton Demonstration") - iconname("check") - positionWindow(w) -} - -base_frame = TkFrame.new($check_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "下ã«ã¯ 3 ã¤ã®ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚クリックã™ã‚‹ã¨ãƒœã‚¿ãƒ³ã®é¸æŠžçŠ¶æ…‹ãŒå¤‰ã‚ã‚Šã€Tcl 変数 ( TkVariable オブジェクトã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ ) ã«ãã®ãƒœã‚¿ãƒ³ã®çŠ¶æ…‹ã‚’示ã™å€¤ã‚’設定ã—ã¾ã™ã€‚ç¾åœ¨ã®å¤‰æ•°ã®å€¤ã‚’見るã«ã¯ã€Œå¤‰æ•°å‚ç…§ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。" -} -msg.pack('side'=>'top') - -# å¤‰æ•°ç”Ÿæˆ -wipers = TkVariable.new(0) -brakes = TkVariable.new(0) -sober = TkVariable.new(0) - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $check_demo - $check_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'check'} - }.pack('side'=>'left', 'expand'=>'yes') - - - TkButton.new(frame) { - text '変数å‚ç…§' - command proc{ - showVars(base_frame, - ['wipers', wipers], ['brakes', brakes], ['sober', sober]) - } - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - - -# checkbutton ç”Ÿæˆ -[ TkCheckButton.new(base_frame, 'text'=>'ワイパー OK', 'variable'=>wipers), - TkCheckButton.new(base_frame, 'text'=>'ブレーキ OK', 'variable'=>brakes), - TkCheckButton.new(base_frame, 'text'=>'é‹è»¢æ‰‹ ç´ é¢', 'variable'=>sober) -].each{|w| w.relief('flat'); w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w')} - diff --git a/ext/tk/sample/demos-jp/check2.rb b/ext/tk/sample/demos-jp/check2.rb deleted file mode 100644 index 609f6830d8..0000000000 --- a/ext/tk/sample/demos-jp/check2.rb +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# checkbutton widget demo2 (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($check2_demo) && $check2_demo - $check2_demo.destroy - $check2_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$check2_demo = TkToplevel.new {|w| - title("Checkbutton Demonstration 2") - iconname("check2") - positionWindow(w) -} - -base_frame = TkFrame.new($check2_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "下ã«ã¯ï¼”ã¤ã®ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚クリックã™ã‚‹ã¨ãƒœã‚¿ãƒ³ã®é¸æŠžçŠ¶æ…‹ãŒå¤‰ã‚ã‚Šã€Tcl変数(TkVariableオブジェクトã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ï¼‰ã«ãã®ãƒœã‚¿ãƒ³ã®çŠ¶æ…‹ã‚’示ã™å€¤ã‚’設定ã—ã¾ã™ã€‚最åˆã®ãƒœã‚¿ãƒ³ã®çŠ¶æ…‹ã¯ä»–ã®ï¼“ã¤ã®ãƒœã‚¿ãƒ³ã®çŠ¶æ…‹ã«ã‚‚ä¾å­˜ã—ã¦å¤‰åŒ–ã—ã¾ã™ã€‚ã‚‚ã—3ã¤ã®ãƒœã‚¿ãƒ³ã®ä¸€éƒ¨ã ã‘ã«ãƒã‚§ãƒƒã‚¯ãŒä»˜ã‘られã¦ã„ã‚‹å ´åˆã€æœ€åˆã®ãƒœã‚¿ãƒ³ã¯ãƒˆãƒ©ã‚¤ã‚¹ãƒ†ãƒ¼ãƒˆï¼ˆï¼“状態)モードã§ã®è¡¨ç¤ºã‚’è¡Œã„ã¾ã™ã€‚ç¾åœ¨ã®å¤‰æ•°ã®å€¤ã‚’見るã«ã¯ã€Œå¤‰æ•°å‚ç…§ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。" -} -msg.pack('side'=>'top') - -# å¤‰æ•°ç”Ÿæˆ -safety = TkVariable.new(0) -wipers = TkVariable.new(0) -brakes = TkVariable.new(0) -sober = TkVariable.new(0) - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkGrid(TkFrame.new(frame, :height=>2, :relief=>:sunken, :bd=>2), - :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - TkButton.new(frame, :text=>'変数å‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{ - showVars($check2_demo, - ['safety', safety], ['wipers', wipers], - ['brakes', brakes], ['sober', sober]) - }), - TkButton.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'check2'}), - TkButton.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - tmppath = $check2_demo - $check2_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - }), - :padx=>4, :pady=>4) - frame.grid_columnconfigure(0, :weight=>1) -}.pack('side'=>'bottom', 'fill'=>'x') - - -# checkbutton ç”Ÿæˆ -TkCheckButton.new(base_frame, :text=>'安全性検査', :variable=>safety, - :relief=>:flat, :onvalue=>'all', :offvalue=>'none', - :tristatevalue=>'partial'){ - pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') -} - -[ TkCheckButton.new(base_frame, 'text'=>'ワイパー OK', 'variable'=>wipers), - TkCheckButton.new(base_frame, 'text'=>'ブレーキ OK', 'variable'=>brakes), - TkCheckButton.new(base_frame, 'text'=>'é‹è»¢æ‰‹ ç´ é¢', 'variable'=>sober) -].each{|w| - w.relief('flat') - w.pack('side'=>'top', 'padx'=>15, 'pady'=>2, 'anchor'=>'w') -} - -# tristate check -in_check = false -tristate_check = proc{|n1,n2,op| - unless in_check - in_check = true - begin - if n1 == safety - if safety == 'none' - wipers.value = 0 - brakes.value = 0 - sober.value = 0 - elsif safety == 'all' - wipers.value = 1 - brakes.value = 1 - sober.value = 1 - end - else - if wipers == 1 && brakes == 1 && sober == 1 - safety.value = 'all' - elsif wipers == 1 || brakes == 1 || sober == 1 - safety.value = 'partial' - else - safety.value = 'none' - end - end - ensure - in_check = false - end - end -} - -[wipers, brakes, sober, safety].each{|v| v.trace('w', tristate_check)} diff --git a/ext/tk/sample/demos-jp/clrpick.rb b/ext/tk/sample/demos-jp/clrpick.rb deleted file mode 100644 index 31a3f25b7c..0000000000 --- a/ext/tk/sample/demos-jp/clrpick.rb +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# widget demo prompts the user to select a color (called by 'widget') -# -# Note: don't support ttk_wrapper. work with standard widgets only. -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($clrpick_demo) && $clrpick_demo - $clrpick_demo.destroy - $clrpick_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$clrpick_demo = TkToplevel.new {|w| - title("Color Selection Dialogs") - iconname("colors") - positionWindow(w) -} - -# label ç”Ÿæˆ -#TkLabel.new($clrpick_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left', -Tk::Label.new($clrpick_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left', - 'text'=>"以下ã®ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ã€ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ä¸Šã«ã‚るウィジェットã®å‰æ™¯è‰²ã¨èƒŒæ™¯è‰²ã‚’é¸æŠžã—ã¦ä¸‹ã•ã„。").pack('side'=>'top') - -# frame ç”Ÿæˆ -# TkFrame.new($clrpick_demo) {|frame| -Tk::Frame.new($clrpick_demo) {|frame| - # TkButton.new(frame) { - Tk::Button.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $clrpick_demo - $clrpick_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - # TkButton.new(frame) { - Tk::Button.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'clrpick'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# button ç”Ÿæˆ -# TkButton.new($clrpick_demo, 'text'=>'背景色を設定 ...') {|b| -Tk::Button.new($clrpick_demo, 'text'=>'背景色を設定 ...') {|b| - command(proc{setColor $clrpick_demo, b, 'background', - ['background', 'highlightbackground']}) - pack('side'=>'top', 'anchor'=>'c', 'pady'=>'2m') -} - -# TkButton.new($clrpick_demo, 'text'=>'å‰æ™¯è‰²ã‚’設定 ...') {|b| -Tk::Button.new($clrpick_demo, 'text'=>'å‰æ™¯è‰²ã‚’設定 ...') {|b| - command(proc{setColor $clrpick_demo, b, 'foreground', ['foreground']}) - pack('side'=>'top', 'anchor'=>'c', 'pady'=>'2m') -} - -def setColor(w,button,name,options) - w.grab - initialColor = button[name] - color = Tk.chooseColor('title'=>"Choose a #{name} color", 'parent'=>w, - 'initialcolor'=>initialColor) - if color != "" - setColor_helper(w,options,color) - end - - w.grab('release') -end - -def setColor_helper(w, options, color) - options.each{|opt| - begin - w[opt] = color - rescue - end - } - TkWinfo.children(w).each{|child| - setColor_helper child, options, color - } -end - diff --git a/ext/tk/sample/demos-jp/colors.rb b/ext/tk/sample/demos-jp/colors.rb deleted file mode 100644 index c0145daaf6..0000000000 --- a/ext/tk/sample/demos-jp/colors.rb +++ /dev/null @@ -1,156 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# listbox widget demo 'colors' (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($colors_demo) && $colors_demo - $colors_demo.destroy - $colors_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$colors_demo = TkToplevel.new {|w| - title("Listbox Demonstration (colors)") - iconname("colors") - positionWindow(w) -} - -base_frame = TkFrame.new($colors_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "下ã«ã¯è‰²ã®åå‰ãŒå…¥ã£ãŸã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ãƒãƒ¼ä»˜ã®ãƒªã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚リストをスクロールã•ã›ã‚‹ã®ã¯ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ãƒãƒ¼ã§ã‚‚ã§ãã¾ã™ã—ã€ãƒªã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã®ä¸­ã§ãƒžã‚¦ã‚¹ã®ãƒœã‚¿ãƒ³2(中ボタン)を押ã—ãŸã¾ã¾ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã‚‚ã§ãã¾ã™ã€‚ã‚る色をボタン1(左ボタン)ã§ãƒ€ãƒ–ルクリックã™ã‚‹ã¨ã‚¢ãƒ—リケーション全体ãŒãã®è‰²ã«ãªã‚Šã¾ã™ã€‚" -} -msg.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $colors_demo - $colors_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'colors'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -colors_lbox = nil -TkFrame.new(base_frame, 'borderwidth'=>10) {|w| - s = TkScrollbar.new(w) - colors_lbox = TkListbox.new(w) { - setgrid 1 - width 10 - height 12 - yscrollcommand proc{|first,last| s.set first,last} - } - s.command(proc{|*args| colors_lbox.yview(*args)}) - s.pack('side'=>'right', 'fill'=>'y') - colors_lbox.pack('side'=>'left', 'expand'=>1, 'fill'=>'both') -}.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'y') - -#colors_lbox.bind('Double-1', proc{TkPalette.setPalette TkSelection.get}) -colors_lbox.bind('Double-1', proc{ - begin - TkPalette.setPalette TkSelection.get - rescue => e - p e - Tk.tk_call_without_enc('destroy', '.___tk_set_palette') - end - }) - -ins_data = [ - 'gray60','gray70','gray80','gray85','gray90','gray95', - 'snow1','snow2','snow3','snow4','seashell1','seashell2', - 'seashell3','seashell4','AntiqueWhite1','AntiqueWhite2', - 'AntiqueWhite3','AntiqueWhite4','bisque1','bisque2', - 'bisque3','bisque4','PeachPuff1','PeachPuff2', - 'PeachPuff3','PeachPuff4','NavajoWhite1','NavajoWhite2', - 'NavajoWhite3','NavajoWhite4','LemonChiffon1', - 'LemonChiffon2','LemonChiffon3','LemonChiffon4', - 'cornsilk1','cornsilk2','cornsilk3','cornsilk4', - 'ivory1','ivory2','ivory3','ivory4','honeydew1', - 'honeydew2','honeydew3','honeydew4','LavenderBlush1', - 'LavenderBlush2','LavenderBlush3','LavenderBlush4', - 'MistyRose1','MistyRose2','MistyRose3','MistyRose4', - 'azure1','azure2','azure3','azure4','SlateBlue1', - 'SlateBlue2','SlateBlue3','SlateBlue4','RoyalBlue1', - 'RoyalBlue2','RoyalBlue3','RoyalBlue4','blue1','blue2', - 'blue3','blue4','DodgerBlue1','DodgerBlue2', - 'DodgerBlue3','DodgerBlue4','SteelBlue1','SteelBlue2', - 'SteelBlue3','SteelBlue4','DeepSkyBlue1','DeepSkyBlue2', - 'DeepSkyBlue3','DeepSkyBlue4','SkyBlue1','SkyBlue2', - 'SkyBlue3','SkyBlue4','LightSkyBlue1','LightSkyBlue2', - 'LightSkyBlue3','LightSkyBlue4','SlateGray1', - 'SlateGray2','SlateGray3','SlateGray4', - 'LightSteelBlue1','LightSteelBlue2','LightSteelBlue3', - 'LightSteelBlue4','LightBlue1','LightBlue2', - 'LightBlue3','LightBlue4','LightCyan1','LightCyan2', - 'LightCyan3','LightCyan4','PaleTurquoise1', - 'PaleTurquoise2','PaleTurquoise3','PaleTurquoise4', - 'CadetBlue1','CadetBlue2','CadetBlue3','CadetBlue4', - 'turquoise1','turquoise2','turquoise3','turquoise4', - 'cyan1','cyan2','cyan3','cyan4','DarkSlateGray1', - 'DarkSlateGray2','DarkSlateGray3','DarkSlateGray4', - 'aquamarine1','aquamarine2','aquamarine3','aquamarine4', - 'DarkSeaGreen1','DarkSeaGreen2','DarkSeaGreen3', - 'DarkSeaGreen4','SeaGreen1','SeaGreen2','SeaGreen3', - 'SeaGreen4','PaleGreen1','PaleGreen2','PaleGreen3', - 'PaleGreen4','SpringGreen1','SpringGreen2', - 'SpringGreen3','SpringGreen4','green1','green2', - 'green3','green4','chartreuse1','chartreuse2', - 'chartreuse3','chartreuse4','OliveDrab1','OliveDrab2', - 'OliveDrab3','OliveDrab4','DarkOliveGreen1', - 'DarkOliveGreen2','DarkOliveGreen3','DarkOliveGreen4', - 'khaki1','khaki2','khaki3','khaki4','LightGoldenrod1', - 'LightGoldenrod2','LightGoldenrod3','LightGoldenrod4', - 'LightYellow1','LightYellow2','LightYellow3', - 'LightYellow4','yellow1','yellow2','yellow3','yellow4', - 'gold1','gold2','gold3','gold4','goldenrod1', - 'goldenrod2','goldenrod3','goldenrod4','DarkGoldenrod1', - 'DarkGoldenrod2','DarkGoldenrod3','DarkGoldenrod4', - 'RosyBrown1','RosyBrown2','RosyBrown3','RosyBrown4', - 'IndianRed1','IndianRed2','IndianRed3','IndianRed4', - 'sienna1','sienna2','sienna3','sienna4','burlywood1', - 'burlywood2','burlywood3','burlywood4','wheat1', - 'wheat2','wheat3','wheat4','tan1','tan2','tan3','tan4', - 'chocolate1','chocolate2','chocolate3','chocolate4', - 'firebrick1','firebrick2','firebrick3','firebrick4', - 'brown1','brown2','brown3','brown4','salmon1','salmon2', - 'salmon3','salmon4','LightSalmon1','LightSalmon2', - 'LightSalmon3','LightSalmon4','orange1','orange2', - 'orange3','orange4','DarkOrange1','DarkOrange2', - 'DarkOrange3','DarkOrange4','coral1','coral2','coral3', - 'coral4','tomato1','tomato2','tomato3','tomato4', - 'OrangeRed1','OrangeRed2','OrangeRed3','OrangeRed4', - 'red1','red2','red3','red4','DeepPink1','DeepPink2', - 'DeepPink3','DeepPink4','HotPink1','HotPink2', - 'HotPink3','HotPink4','pink1','pink2','pink3','pink4', - 'LightPink1','LightPink2','LightPink3','LightPink4', - 'PaleVioletRed1','PaleVioletRed2','PaleVioletRed3', - 'PaleVioletRed4','maroon1','maroon2','maroon3', - 'maroon4','VioletRed1','VioletRed2','VioletRed3', - 'VioletRed4','magenta1','magenta2','magenta3', - 'magenta4','orchid1','orchid2','orchid3','orchid4', - 'plum1','plum2','plum3','plum4','MediumOrchid1', - 'MediumOrchid2','MediumOrchid3','MediumOrchid4', - 'DarkOrchid1','DarkOrchid2','DarkOrchid3', - 'DarkOrchid4','purple1','purple2','purple3','purple4', - 'MediumPurple1','MediumPurple2','MediumPurple3', - 'MediumPurple4','thistle1','thistle2','thistle3', 'thistle4' -] - -colors_lbox.insert(0, *ins_data) diff --git a/ext/tk/sample/demos-jp/combo.rb b/ext/tk/sample/demos-jp/combo.rb deleted file mode 100644 index 0f3e808606..0000000000 --- a/ext/tk/sample/demos-jp/combo.rb +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# combo.rb -- -# -# This demonstration script creates several combobox widgets. -# -# based on "Id: combo.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp" - -if defined?($combo_demo) && $combo_demo - $combo_demo.destroy - $combo_demo = nil -end - -$combo_demo = TkToplevel.new {|w| - title("Combobox Demonstration") - iconname("combo") - positionWindow(w) -} - -base_frame = TkFrame.new($combo_demo).pack(:fill=>:both, :expand=>true) - -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'5i', :justify=>:left, - :text=><:top, :fill=>:x) -以下ã§ã¯3種類ã®ã‚³ãƒ³ãƒœãƒœãƒƒã‚¯ã‚¹ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ï¼Ž\ -最åˆã®ã‚‚ã®ã¯ï¼Œã‚¨ãƒ³ãƒˆãƒªã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã¨åŒã˜æ§˜ã«ï¼Œ\ -ãƒã‚¤ãƒ³ãƒˆã—ãŸã‚Šï¼Œã‚¯ãƒªãƒƒã‚¯ã—ãŸã‚Šï¼Œã‚¿ã‚¤ãƒ—ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼Ž\ -ã¾ãŸï¼ŒReturnキーを入力ã™ã‚Œã°ç¾åœ¨ã®å€¤ãŒãƒªã‚¹ãƒˆã«è¿½åŠ ã•ã‚Œï¼Œ\ -ドロップダウンリストã‹ã‚‰é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ï¼Ž\ -↓(下å‘ã矢å°)キーを押ã—ã¦è¡¨ç¤ºã•ã‚ŒãŸãƒªã‚¹ãƒˆã‹ã‚‰\ -矢å°ã‚­ãƒ¼ã§ä»–ã®å€™è£œã‚’é¸ã‚“ã§Returnキーを押ã›ã°ï¼Œå€¤ã‚’é¸æŠžã§ãã¾ã™ï¼Ž\ -2番目ã®ã‚³ãƒ³ãƒœãƒœãƒƒã‚¯ã‚¹ã¯ç‰¹å®šã®å€¤ã«å›ºå®šã•ã‚Œã¦ãŠã‚Šï¼Œä¸€åˆ‡å¤‰æ›´ã§ãã¾ã›ã‚“.\ -3番目ã®ã‚‚ã®ã¯ã‚ªãƒ¼ã‚¹ãƒˆãƒ©ãƒªã‚¢ã®éƒ½å¸‚ã®ãƒ‰ãƒ­ãƒƒãƒ—ダウンリストã‹ã‚‰\ -é¸æŠžã™ã‚‹ã“ã¨ã ã‘ãŒå¯èƒ½ã¨ãªã£ã¦ã„ã¾ã™ï¼Ž -EOL - -## variables -firstValue = TkVariable.new -secondValue = TkVariable.new -ozCity = TkVariable.new - -## See Code / Dismiss buttons -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'変数å‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{ - showVars(base_frame, - ['firstVariable', firstValue], - ['secondVariable', secondValue], - ['ozCity', ozCity]) - }), - Ttk::Button.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'combo'}), - Ttk::Button.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $combo_demo.destroy - $combo_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -frame = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true) - -australianCities = [ - 'キャンベラ', 'シドニー', 'メルボルン', 'パース', 'アデレード', - 'ブリスベーン', 'ホãƒãƒ¼ãƒˆ', 'ダーウィン', 'アリス スプリングス' -] - - -secondValue.value = '変更ä¸å¯' -ozCity.value = 'シドニー' - -Tk.pack(Ttk::Labelframe.new(frame, :text=>'Fully Editable'){|f| - Ttk::Combobox.new(f, :textvariable=>firstValue){|b| - b.bind('Return', '%W'){|w| - w.values <<= w.value unless w.values.include?(w.value) - } - }.pack(:pady=>5, :padx=>10) - }, - - Ttk::LabelFrame.new(frame, :text=>'Disabled'){|f| - Ttk::Combobox.new(f, :textvariable=>secondValue, :state=>:disabled) . - pack(:pady=>5, :padx=>10) - }, - - Ttk::LabelFrame.new(frame, :text=>'Defined List Only'){|f| - Ttk::Combobox.new(f, :textvariable=>ozCity, :state=>:readonly, - :values=>australianCities) . - pack(:pady=>5, :padx=>10) - }, - - :side=>:top, :pady=>5, :padx=>10) diff --git a/ext/tk/sample/demos-jp/cscroll.rb b/ext/tk/sample/demos-jp/cscroll.rb deleted file mode 100644 index 6cce3d4369..0000000000 --- a/ext/tk/sample/demos-jp/cscroll.rb +++ /dev/null @@ -1,135 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# simple scrollable canvas widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($cscroll_demo) && $cscroll_demo - $cscroll_demo.destroy - $cscroll_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$cscroll_demo = TkToplevel.new {|w| - title("Scrollable Canvas Demonstration") - iconname("cscroll") - positionWindow(w) -} - -base_frame = TkFrame.new($cscroll_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'4i', - 'justify'=>'left', 'text'=>"ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ãƒãƒ¼ã‚„マウスã®ãƒœã‚¿ãƒ³2 ã§ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã§ãるキャンãƒã‚¹ widget ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚四角ã®ä¸Šã§ãƒœã‚¿ãƒ³1 をクリックã™ã‚‹ã¨ã€ãã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãŒæ¨™æº–出力ã«å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚"){ - pack('side'=>'top') -} - -# frame ç”Ÿæˆ -$cscroll_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $cscroll_demo - $cscroll_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'cscroll'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$cscroll_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame 設定 -unless $tk_version =~ /^4\.[01]/ - $cscroll_grid = TkFrame.new(base_frame) { - pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>1) - } - TkGrid.rowconfigure($cscroll_grid, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure($cscroll_grid, 0, 'weight'=>1, 'minsize'=>0) -end - -# canvas 設定 -$cscroll_canvas = TkCanvas.new(base_frame, - 'relief'=>'sunken', 'borderwidth'=>2, - 'scrollregion'=>['-11c', '-11c', '50c', '20c'] - ) {|c| - if $tk_version =~ /^4\.[01]/ - pack('expand'=>'yes', 'fill'=>'both') - else - grid('in'=>$cscroll_grid, 'padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - end - - TkScrollbar.new(base_frame, 'command'=>proc{|*args| c.yview(*args)}) {|vs| - c.yscrollcommand(proc{|first,last| vs.set first,last}) - if $tk_version =~ /^4\.[01]/ - pack('side'=>'right', 'fill'=>'y') - else - grid('in'=>$cscroll_grid, 'padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>1, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - end - } - - TkScrollbar.new(base_frame, 'orient'=>'horiz', - 'command'=>proc{|*args| c.xview(*args)}) {|hs| - c.xscrollcommand(proc{|first,last| hs.set first,last}) - if $tk_version =~ /^4\.[01]/ - pack('side'=>'bottom', 'fill'=>'x') - else - grid('in'=>$cscroll_grid, 'padx'=>1, 'pady'=>1, 'row'=>1, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - end - } -} - -bg = $cscroll_canvas.configinfo('bg')[4] -(0..19).each{|i| - x = -10+3*i - y = -10 - (0..9).each{|j| - TkcRectangle.new($cscroll_canvas, "#{x}c", "#{y}c", "#{x+2}c", "#{y+2}c", - 'outline'=>'black', 'fill'=>bg, 'tags'=>'rect') - TkcText.new($cscroll_canvas, "#{x+1}c", "#{y+1}c", - 'text'=>"#{i},#{j}", 'anchor'=>'center', 'tags'=>'text') - y += 3 - } -} - -$cscroll_canvas.itembind('all', 'Any-Enter', proc{scrollEnter $cscroll_canvas}) -$cscroll_canvas.itembind('all', 'Any-Leave', proc{scrollLeave $cscroll_canvas}) -$cscroll_canvas.itembind('all', '1', proc{scrollButton $cscroll_canvas}) -$cscroll_canvas.itembind('all', 'Any-Enter', proc{scrollEnter $cscroll_canvas}) -$cscroll_canvas.bind('2', proc{|x,y| $cscroll_canvas.scan_mark(x,y)}, '%x %y') -$cscroll_canvas.bind('B2-Motion', - proc{|x,y| $cscroll_canvas.scan_dragto(x,y)}, '%x %y') - -def scrollEnter(c) - id = c.find_withtag('current')[0].id - id -= 1 if c.gettags('current').include?('text') - $oldFill = c.itemconfiginfo(id, 'fill')[4] - if TkWinfo.depth(c) > 1 - c.itemconfigure(id, 'fill'=>'SeaGreen1') - else - c.itemconfigure(id, 'fill'=>'black') - c.itemconfigure(id+1, 'fill'=>'white') - end -end - -def scrollLeave(c) - id = c.find_withtag('current')[0].id - id -= 1 if c.gettags('current').include?('text') - c.itemconfigure(id, 'fill'=>$oldFill) - c.itemconfigure(id+1, 'fill'=>'black') -end - -def scrollButton(c) - id = c.find_withtag('current')[0].id - id += 1 unless c.gettags('current').include?('text') - print "You buttoned at #{c.itemconfiginfo(id,'text')[4]}\n" -end - diff --git a/ext/tk/sample/demos-jp/ctext.rb b/ext/tk/sample/demos-jp/ctext.rb deleted file mode 100644 index 15ec84b421..0000000000 --- a/ext/tk/sample/demos-jp/ctext.rb +++ /dev/null @@ -1,205 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# Canvas Text widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($ctext_demo) && $ctext_demo - $ctext_demo.destroy - $ctext_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$ctext_demo = TkToplevel.new {|w| - title("Canvas Text Demonstration") - iconname("Text") - positionWindow(w) -} - -base_frame = TkFrame.new($ctext_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'5i', 'justify'=>'left', - 'text'=>"ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯ã‚­ãƒ£ãƒ³ãƒã‚¹widgetã®ãƒ†ã‚­ã‚¹ãƒˆæ©Ÿèƒ½ã‚’デモã™ã‚‹ãŸã‚ã®ãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚マウスを四角ã®ä¸­ã«æŒã£ã¦ã„ãã€ã‚¯ãƒªãƒƒã‚¯ã™ã‚‹ã¨ä½ç½®ãŽã‚用ã®ç‚¹ã‹ã‚‰ã®ç›¸å¯¾ä½ç½®ã‚’変ãˆãŸã‚Šã€è¡Œæƒãˆã‚’変ãˆãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸä»¥ä¸‹ã®ã‚ˆã†ãªç·¨é›†ã®ãŸã‚ã®ç°¡å˜ãªãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ - - 1. マウスをæŒã£ã¦ã„ãã€ã‚¯ãƒªãƒƒã‚¯ã—ã€å…¥åŠ›ã§ãã¾ã™ã€‚ - 2. ボタン1ã§é¸æŠžã§ãã¾ã™ã€‚ - 3. マウスã®ä½ç½®ã«ãƒœã‚¿ãƒ³2ã§é¸æŠžã—ãŸãƒ†ã‚­ã‚¹ãƒˆã‚’コピーã§ãã¾ã™ã€‚ - 4.ãƒãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¹ã‚’コントロール-Hã§æŒ¿å…¥ã‚«ãƒ¼ã‚½ãƒ«ã®ç›´å‰ã®æ–‡å­—を削除ã—ã¾ã™ã€‚ - 5. Deleteキーã¯æŒ¿å…¥ã‚«ãƒ¼ã‚½ãƒ«ã®ç›´å¾Œã®æ–‡å­—を削除ã—ã¾ã™ã€‚"){ - pack('side'=>'top') -} - -# frame ç”Ÿæˆ -$ctext_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $ctext_demo - $ctext_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'ctext'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$ctext_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# canvas ç”Ÿæˆ -$ctext_canvas = TkCanvas.new(base_frame, 'relief'=>'flat', - 'borderwidth'=>0, 'width'=>500, 'height'=>350) -$ctext_canvas.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'both') - -# font 設定 -if $tk_version =~ /^4.*/ - textFont = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*' -else - textFont = 'Helvetica 24' -end - -# canvas 設定 -TkcRectangle.new($ctext_canvas, 245, 195, 255, 205, - 'outline'=>'black', 'fill'=>'red') - -ctag_text_param = { - 'text'=>"ã“ã‚Œã¯ã‚­ãƒ£ãƒ³ãƒã‚¹widgetã®ãƒ†ã‚­ã‚¹ãƒˆæ©Ÿèƒ½ã‚’デモã™ã‚‹ãŸã‚ã®æ–‡å­—列ã§ã™ã€‚\n上ã§è¿°ã¹ãŸã‚ˆã†ãªç·¨é›†ã‚’å¯èƒ½ã¨ã™ã‚‹ãŸã‚ã®ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚’æ–½ã—ã¦ã„ã¾ã™ã€‚", - 'width'=>440, 'anchor'=>'n', 'justify'=>'left' -} -if $tk_version =~ /^4.*/ - ctag_text_param['font'] = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*' - ctag_text_param['kanjifont'] = '-*-r-*--24-*-jisx0208.1983-0' -else - ctag_text_param['font'] = 'Helvetica 24' -end -$ctag_text = TkcTag.new($ctext_canvas) -$ctag_text.withtag(TkcText.new($ctext_canvas, 250, 200, ctag_text_param)) - -$ctag_text.bind('1', proc{|x,y| textB1Press $ctext_canvas,x,y}, "%x %y") -$ctag_text.bind('B1-Motion', proc{|x,y| textB1Move $ctext_canvas,x,y}, "%x %y") -$ctag_text.bind('Shift-1', - proc{|x,y| $ctext_canvas.select_adjust 'current', "@#{x},#{y}"}, - "%x %y") -$ctag_text.bind('Shift-B1-Motion', - proc{|x,y| textB1Move $ctext_canvas,x,y}, "%x %y") -$ctag_text.bind('KeyPress', proc{|a| textInsert $ctext_canvas,a}, "%A") -$ctag_text.bind('Return', proc{textInsert $ctext_canvas,"\n"}) -$ctag_text.bind('Control-h', proc{textBs $ctext_canvas}) -$ctag_text.bind('BackSpace', proc{textBs $ctext_canvas}) -$ctag_text.bind('Delete', proc{textDel $ctext_canvas}) -$ctag_text.bind('2', proc{|x,y| textPaste $ctext_canvas, "@#{x},#{y}"}, - "%x %y") - -# Next, create some items that allow the text's anchor position -# to be edited. - -def mkTextConfig(w,x,y,option,value,color) - item = TkcRectangle.new(w, x, y, x+30, y+30, - 'outline'=>'black', 'fill'=>color, 'width'=>1) - item.bind('1', proc{$ctag_text.configure option, value}) - w.addtag_withtag('config', item) -end - -x = 50 -y = 50 -color = 'LightSkyBlue1' -mkTextConfig $ctext_canvas, x, y, 'anchor', 'se', color -mkTextConfig $ctext_canvas, x+30, y, 'anchor', 's', color -mkTextConfig $ctext_canvas, x+60, y, 'anchor', 'sw', color -mkTextConfig $ctext_canvas, x, y+30, 'anchor', 'e', color -mkTextConfig $ctext_canvas, x+30, y+30, 'anchor', 'center', color -mkTextConfig $ctext_canvas, x+60, y+30, 'anchor', 'w', color -mkTextConfig $ctext_canvas, x, y+60, 'anchor', 'ne', color -mkTextConfig $ctext_canvas, x+30, y+60, 'anchor', 'n', color -mkTextConfig $ctext_canvas, x+60, y+60, 'anchor', 'nw', color -item = TkcRectangle.new($ctext_canvas, x+40, y+40, x+50, y+50, - 'outline'=>'black', 'fill'=>'red') -item.bind('1', proc{$ctag_text.configure 'anchor', 'center'}) -if $tk_version =~ /^4.*/ - TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Text Position', - 'font'=>'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', - 'anchor'=>'s', 'fill'=>'brown') -else - TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Text Position', - 'font'=>'Times 24', 'anchor'=>'s', 'fill'=>'brown') -end - -# Lastly, create some items that allow the text's justification to be -# changed. - -x = 350 -y = 50 -color = 'SeaGreen2' -mkTextConfig $ctext_canvas, x, y, 'justify', 'left', color -mkTextConfig $ctext_canvas, x+30, y, 'justify', 'center', color -mkTextConfig $ctext_canvas, x+60, y, 'justify', 'right', color -if $tk_version =~ /^4.*/ - TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Justification', - 'font'=>'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', - 'anchor'=>'s', 'fill'=>'brown') -else - TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Justification', - 'font'=>'Times 24', 'anchor'=>'s', 'fill'=>'brown') -end - -$ctext_canvas.itembind('config', 'Enter', proc{textEnter $ctext_canvas}) -$ctext_canvas.itembind('config', 'Leave', - proc{$ctext_canvas\ - .itemconfigure('current', - 'fill'=>$textConfigFill)}) - -$textConfigFill = '' - -def textEnter(w) - $textConfigFill = (w.itemconfiginfo 'current', 'fill')[4] - w.itemconfigure 'current', 'fill', 'black' -end - -def textInsert(w, string) - return if string == "" - begin - $ctag_text.dchars 'sel.first', 'sel.last' - rescue - end - $ctag_text.insert 'insert', string -end - -def textPaste(w, pos) - begin - $ctag_text.insert pos, TkSelection.get - rescue - end -end - -def textB1Press(w,x,y) - w.icursor 'current', "@#{x},#{y}" - w.itemfocus 'current' - w.focus - w.select_from 'current', "@#{x},#{y}" -end - -def textB1Move(w,x,y) - w.select_to 'current', "@#{x},#{y}" -end - -def textBs(w) - begin - $ctag_text.dchars 'sel.first', 'sel.last' - rescue - char = $ctag_text.index('insert').to_i - 1 - $ctag_text.dchars(char) if char >= 0 - end -end - -def textDel(w) - begin - $ctag_text.dchars 'sel.first', 'sel.last' - rescue - $ctag_text.dchars 'insert' - end -end - diff --git a/ext/tk/sample/demos-jp/dialog1.rb b/ext/tk/sample/demos-jp/dialog1.rb deleted file mode 100644 index 9d54f93b35..0000000000 --- a/ext/tk/sample/demos-jp/dialog1.rb +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# a dialog box with a local grab (called by 'widget') -# -class TkDialog_Demo1 < TkDialog - ############### - private - ############### - def title - "Dialog with local grab" - end - - def message - 'モーダルダイアログボックスã§ã™ã€‚Tk ã® "grab" コマンドを使用ã—ã¦ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ãƒœãƒƒã‚¯ã‚¹ã§ã€Œãƒ­ãƒ¼ã‚«ãƒ«ã‚°ãƒ©ãƒ–ã€ã—ã¦ã„ã¾ã™ã€‚下ã®ã„ãšã‚Œã‹ã®ãƒœã‚¿ãƒ³ã‚’実行ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã€ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã«ç­”ãˆã‚‹ã¾ã§ã€ã“ã®ã‚°ãƒ©ãƒ–ã«ã‚ˆã£ã¦ã‚¢ãƒ—リケーションã®ä»–ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã§ã¯ã€ãƒã‚¤ãƒ³ã‚¿é–¢ä¿‚ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’å—ã‘å–ã‚‹ã“ã¨ãŒã§ããªããªã£ã¦ã„ã¾ã™ã€‚' - end - - def bitmap - 'info' - end - - def default_button - 0 - end - - def buttons -# "了解 キャンセル コードå‚ç…§" - ["了解", "キャンセル", "コードå‚ç…§"] - end -end - -ret = TkDialog_Demo1.new('message_config'=>{'wraplength'=>'4i'}).value -case ret -when 0 - print "ã‚ãªãŸã¯ã€Œäº†è§£ã€ã‚’押ã—ã¾ã—ãŸã­ã€‚\n" -when 1 - print "ã‚ãªãŸã¯ã€Œã‚­ãƒ£ãƒ³ã‚»ãƒ«ã€ã‚’押ã—ã¾ã—ãŸã­ã€‚\n" -when 2 - showCode 'dialog1' -end diff --git a/ext/tk/sample/demos-jp/dialog2.rb b/ext/tk/sample/demos-jp/dialog2.rb deleted file mode 100644 index c8506b6cf8..0000000000 --- a/ext/tk/sample/demos-jp/dialog2.rb +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# a dialog box with a global grab (called by 'widget') -# -class TkDialog_Demo2 < TkDialog - ############### - private - ############### - def title - "Dialog with global grab" - end - - def message - 'ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ãƒœãƒƒã‚¯ã‚¹ã¯ã‚°ãƒ­ãƒ¼ãƒãƒ«ã‚°ãƒ©ãƒ–を使用ã—ã¦ã„ã¾ã™ã€‚下ã®ãƒœã‚¿ãƒ³ã‚’実行ã™ã‚‹ã¾ã§ã€ãƒ‡ã‚£ã‚¹ãƒ—レイ上ã®ã„ã‹ãªã‚‹ã‚‚ã®ã¨ã‚‚対話ã§ãã¾ã›ã‚“。グローãƒãƒ«ã‚°ãƒ©ãƒ–を使用ã™ã‚‹ã“ã¨ã¯ã€ã¾ãšè‰¯ã„考ãˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã©ã†ã—ã¦ã‚‚å¿…è¦ã«ãªã‚‹ã¾ã§ä½¿ãŠã†ã¨æ€ã‚ãªã„ã§ä¸‹ã•ã„。' - end - - def bitmap - 'info' - end - - def default_button - 0 - end - - def buttons -# "了解 キャンセル コードå‚ç…§" - ["了解", "キャンセル", "コードå‚ç…§"] - end -end - -ret = TkDialog_Demo2.new('message_config'=>{'wraplength'=>'4i'}, - 'prev_command'=>proc{|dialog| - Tk.after 100, proc{dialog.grab('global')} - }).value -case ret -when 0 - print "ã‚ãªãŸã¯ã€Œäº†è§£ã€ã‚’押ã—ã¾ã—ãŸã­ã€‚\n" -when 1 - print "ã‚ãªãŸã¯ã€Œã‚­ãƒ£ãƒ³ã‚»ãƒ«ã€ã‚’押ã—ã¾ã—ãŸã­ã€‚\n" -when 2 - showCode 'dialog2' -end - diff --git a/ext/tk/sample/demos-jp/doc.org/README b/ext/tk/sample/demos-jp/doc.org/README deleted file mode 100644 index 90677d3316..0000000000 --- a/ext/tk/sample/demos-jp/doc.org/README +++ /dev/null @@ -1,7 +0,0 @@ -This directory contains a collection of demonstration programs that -are translated into Japanese. You need to use a Japanized "wish" to -see these Japanese-translated demonstration programs. You also need -to put this directory ("demos.jp") at the next to "demos" since some -of the programs refer to the image files at "demos". - -Please refer to the README file at "demos" for more detail. diff --git a/ext/tk/sample/demos-jp/doc.org/README.JP b/ext/tk/sample/demos-jp/doc.org/README.JP deleted file mode 100644 index 42b4929378..0000000000 --- a/ext/tk/sample/demos-jp/doc.org/README.JP +++ /dev/null @@ -1,14 +0,0 @@ -This directory contains "widget" demo for the Japanized Tcl7.6/Tk4.2. -Most of the messages in the original are translated to Japanese. -But other tools in this directory are not translated. - -Following 2 kanji fonts are defined at the beginning of the file "widget." - - -*--24-*-jisx0208.1983-0 - -*--16-*-jisx0208.1983-0 - -These fonts are all part of the core distribution of X11R5, so -if you are running X11R5, you don't have to modify the file. - -But if you don't have these fonts, replace them with appropriate ones. -"-*--14-*-jisx0208.1983-0" will be a good choice. diff --git a/ext/tk/sample/demos-jp/doc.org/README.tk80 b/ext/tk/sample/demos-jp/doc.org/README.tk80 deleted file mode 100644 index c71f977d74..0000000000 --- a/ext/tk/sample/demos-jp/doc.org/README.tk80 +++ /dev/null @@ -1,46 +0,0 @@ -This directory contains a collection of programs to demonstrate -the features of the Tk toolkit. The programs are all scripts for -"wish", a windowing shell. If wish has been installed in /usr/local -then you can invoke any of the programs in this directory just -by typing its file name to your command shell. Otherwise invoke -wish with the file as its first argument, e.g., "wish hello". -The rest of this file contains a brief description of each program. -Files with names ending in ".tcl" are procedure packages used by one -or more of the demo programs; they can't be used as programs by -themselves so they aren't described below. - -hello - Creates a single button; if you click on it, a message - is typed and the application terminates. - -widget - Contains a collection of demonstrations of the widgets - currently available in the Tk library. Most of the .tcl - files are scripts for individual demos available through - the "widget" program. - -ixset - A simple Tk-based wrapper for the "xset" program, which - allows you to interactively query and set various X options - such as mouse acceleration and bell volume. Thanks to - Pierre David for contributing this example. - -rolodex - A mock-up of a simple rolodex application. It has much of - the user interface for such an application but no back-end - database. This program was written in response to Tom - LaStrange's toolkit benchmark challenge. - -tcolor - A color editor. Allows you to edit colors in several - different ways, and will also perform automatic updates - using "send". - -rmt - Allows you to "hook-up" remotely to any Tk application - on the display. Select an application with the menu, - then just type commands: they'll go to that application. - -timer - Displays a seconds timer with start and stop buttons. - Control-c and control-q cause it to exit. - -browse - A simple directory browser. Invoke it with and argument - giving the name of the directory you'd like to browse. - Double-click on files or subdirectories to browse them. - Control-c and control-q cause the program to exit. - -sccs id = SCCS: @(#) README 1.3 96/02/16 10:49:14 diff --git a/ext/tk/sample/demos-jp/doc.org/license.terms b/ext/tk/sample/demos-jp/doc.org/license.terms deleted file mode 100644 index c0a44d3fc2..0000000000 --- a/ext/tk/sample/demos-jp/doc.org/license.terms +++ /dev/null @@ -1,39 +0,0 @@ -This software is copyrighted by the Regents of the University of -California, Sun Microsystems, Inc., and other parties. The following -terms apply to all files associated with the software unless explicitly -disclaimed in individual files. - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - -GOVERNMENT USE: If you are acquiring this software on behalf of the -U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal -Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you -are acquiring the software on behalf of the Department of Defense, the -software shall be classified as "Commercial Computer Software" and the -Government shall have only "Restricted Rights" as defined in Clause -252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the -authors grant the U.S. Government and others acting in its behalf -permission to use and distribute the software in accordance with the -terms specified in this license. diff --git a/ext/tk/sample/demos-jp/doc.org/license.terms.tk80 b/ext/tk/sample/demos-jp/doc.org/license.terms.tk80 deleted file mode 100644 index c0a44d3fc2..0000000000 --- a/ext/tk/sample/demos-jp/doc.org/license.terms.tk80 +++ /dev/null @@ -1,39 +0,0 @@ -This software is copyrighted by the Regents of the University of -California, Sun Microsystems, Inc., and other parties. The following -terms apply to all files associated with the software unless explicitly -disclaimed in individual files. - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - -GOVERNMENT USE: If you are acquiring this software on behalf of the -U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal -Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you -are acquiring the software on behalf of the Department of Defense, the -software shall be classified as "Commercial Computer Software" and the -Government shall have only "Restricted Rights" as defined in Clause -252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the -authors grant the U.S. Government and others acting in its behalf -permission to use and distribute the software in accordance with the -terms specified in this license. diff --git a/ext/tk/sample/demos-jp/entry1.rb b/ext/tk/sample/demos-jp/entry1.rb deleted file mode 100644 index 0fbbeb8259..0000000000 --- a/ext/tk/sample/demos-jp/entry1.rb +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# entry (no scrollbars) widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($entry1_demo) && $entry1_demo - $entry1_demo.destroy - $entry1_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$entry1_demo = TkToplevel.new {|w| - title("Entry Demonstration (no scrollbars)") - iconname("entry1") - positionWindow(w) -} - -base_frame = TkFrame.new($entry1_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '5i' - justify 'left' - text "3種類ã®ç•°ãªã‚‹ã‚¨ãƒ³ãƒˆãƒªãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚文字を入力ã™ã‚‹ã«ã¯ãƒã‚¤ãƒ³ã‚¿ã‚’æŒã£ã¦è¡Œãã€ã‚¯ãƒªãƒƒã‚¯ã—ã¦ã‹ã‚‰ã‚¿ã‚¤ãƒ—ã—ã¦ãã ã•ã„。標準的ãªMotifã®ç·¨é›†æ©Ÿèƒ½ãŒã€Emacsã®ã‚­ãƒ¼ãƒã‚¤ãƒ³ãƒ‰ã¨ã¨ã‚‚ã«ã€ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚例ãˆã°ã€ãƒãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¹ã¨ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«-Hã¯ã‚«ãƒ¼ã‚½ãƒ«ã®å·¦ã®æ–‡å­—を削除ã—ã€ãƒ‡ãƒªãƒ¼ãƒˆã‚­ãƒ¼ã¨ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«-Dã¯ã‚«ãƒ¼ã‚½ãƒ«ã®å³å´ã®æ–‡å­—を削除ã—ã¾ã™ã€‚é•·éŽãŽã¦ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«å…¥ã‚Šåˆ‡ã‚‰ãªã„ã‚‚ã®ã¯ã€ãƒžã‚¦ã‚¹ã®ãƒœã‚¿ãƒ³2を押ã—ãŸã¾ã¾ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã§ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚日本語を入力ã™ã‚‹ã®ã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«-ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã§ã™ã€‚kinput2ãŒå‹•ã„ã¦ã„ã‚Œã°å…¥åŠ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" -} -msg.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $entry1_demo - $entry1_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'entry1'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# entry ç”Ÿæˆ -e1 = TkEntry.new(base_frame, 'relief'=>'sunken') -e2 = TkEntry.new(base_frame, 'relief'=>'sunken') -e3 = TkEntry.new(base_frame, 'relief'=>'sunken') -[e1,e2,e3].each{|w| w.pack('side'=>'top', 'padx'=>10, 'pady'=>5, 'fill'=>'x')} - -# åˆæœŸå€¤æŒ¿å…¥ -e1.insert(0, 'åˆæœŸå€¤') -e2.insert('end', "ã“ã®ã‚¨ãƒ³ãƒˆãƒªã«ã¯é•·ã„文字列ãŒå…¥ã£ã¦ã„ã¦ã€") -e2.insert('end', "é•·ã™ãŽã¦ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯å…¥ã‚Šåˆ‡ã‚‰ãªã„ã®ã§ã€") -e2.insert('end', "実際ã®æ‰€çµ‚ã‚Šã¾ã§è¦‹ã‚‹ã«ã¯ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã•ã›ãªã‘ã‚Œã°") -e2.insert('end', "ãªã‚‰ãªã„ã§ã—ょã†ã€‚") - diff --git a/ext/tk/sample/demos-jp/entry2.rb b/ext/tk/sample/demos-jp/entry2.rb deleted file mode 100644 index 294c82490f..0000000000 --- a/ext/tk/sample/demos-jp/entry2.rb +++ /dev/null @@ -1,92 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# entry (with scrollbars) widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($entry2_demo) && $entry2_demo - $entry2_demo.destroy - $entry2_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$entry2_demo = TkToplevel.new {|w| - title("Entry Demonstration (with scrollbars)") - iconname("entry2") - positionWindow(w) -} - -base_frame = TkFrame.new($entry2_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '5i' - justify 'left' - text "3種類ã®ç•°ãªã‚‹ã‚¨ãƒ³ãƒˆãƒªãŒå„々スクロールãƒãƒ¼ä»˜ã§è¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚文字を入力ã™ã‚‹ã«ã¯ãƒã‚¤ãƒ³ã‚¿ã‚’æŒã£ã¦è¡Œãã€ã‚¯ãƒªãƒƒã‚¯ã—ã¦ã‹ã‚‰ã‚¿ã‚¤ãƒ—ã—ã¦ãã ã•ã„。標準的ãªMotifã®ç·¨é›†æ©Ÿèƒ½ãŒã€Emacsã®ã‚­ãƒ¼ãƒã‚¤ãƒ³ãƒ‰ã¨ã¨ã‚‚ã«ã€ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚例ãˆã°ã€ãƒãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¹ã¨ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«-Hã¯ã‚«ãƒ¼ã‚½ãƒ«ã®å·¦ã®æ–‡å­—を削除ã—ã€ãƒ‡ãƒªãƒ¼ãƒˆã‚­ãƒ¼ã¨ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«-Dã¯ã‚«ãƒ¼ã‚½ãƒ«ã®å³å´ã®æ–‡å­—を削除ã—ã¾ã™ã€‚é•·éŽãŽã¦ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«å…¥ã‚Šåˆ‡ã‚‰ãªã„ã‚‚ã®ã¯ã€ãƒžã‚¦ã‚¹ã®ãƒœã‚¿ãƒ³2を押ã—ãŸã¾ã¾ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã§ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚日本語を入力ã™ã‚‹ã®ã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«-ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã§ã™ã€‚kinput2ãŒå‹•ã„ã¦ã„ã‚Œã°å…¥åŠ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" -} -msg.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $entry2_demo - $entry2_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'entry2'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame, 'borderwidth'=>10) {|w| - # entry 1 - s1 = TkScrollbar.new(w, 'relief'=>'sunken', 'orient'=>'horiz') - e1 = TkEntry.new(w, 'relief'=>'sunken') { - xscrollcommand proc{|first,last| s1.set first,last} - } - s1.command(proc{|*args| e1.xview(*args)}) - e1.pack('side'=>'top', 'fill'=>'x') - s1.pack('side'=>'top', 'fill'=>'x') - - # spacer - TkFrame.new(w, 'width'=>20, 'height'=>10).pack('side'=>'top', 'fill'=>'x') - - # entry 2 - s2 = TkScrollbar.new(w, 'relief'=>'sunken', 'orient'=>'horiz') - e2 = TkEntry.new(w, 'relief'=>'sunken') { - xscrollcommand proc{|first,last| s2.set first,last} - } - s2.command(proc{|*args| e2.xview(*args)}) - e2.pack('side'=>'top', 'fill'=>'x') - s2.pack('side'=>'top', 'fill'=>'x') - - # spacer - TkFrame.new(w, 'width'=>20, 'height'=>10).pack('side'=>'top', 'fill'=>'x') - - # entry 3 - s3 = TkScrollbar.new(w, 'relief'=>'sunken', 'orient'=>'horiz') - e3 = TkEntry.new(w, 'relief'=>'sunken') { - xscrollcommand proc{|first,last| s3.set first,last} - } - s3.command(proc{|*args| e3.xview(*args)}) - e3.pack('side'=>'top', 'fill'=>'x') - s3.pack('side'=>'top', 'fill'=>'x') - - # åˆæœŸå€¤æŒ¿å…¥ - e1.insert(0, 'åˆæœŸå€¤') - e2.insert('end', "ã“ã®ã‚¨ãƒ³ãƒˆãƒªã«ã¯é•·ã„文字列ãŒå…¥ã£ã¦ã„ã¦ã€") - e2.insert('end', "é•·ã™ãŽã¦ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯å…¥ã‚Šåˆ‡ã‚‰ãªã„ã®ã§ã€") - e2.insert('end', "実際ã®æ‰€çµ‚ã‚Šã¾ã§è¦‹ã‚‹ã«ã¯ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã•ã›ãªã‘ã‚Œã°") - e2.insert('end', "ãªã‚‰ãªã„ã§ã—ょã†ã€‚") - -}.pack('side'=>'top', 'fill'=>'x', 'expand'=>'yes') - diff --git a/ext/tk/sample/demos-jp/entry3.rb b/ext/tk/sample/demos-jp/entry3.rb deleted file mode 100644 index 6f8ba943e9..0000000000 --- a/ext/tk/sample/demos-jp/entry3.rb +++ /dev/null @@ -1,226 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# entry3.rb -- -# -# This demonstration script creates several entry widgets whose -# permitted input is constrained in some way. It also shows off a -# password entry. -# -# based on Tcl/Tk8.4.4 widget demos - -if defined?($entry3_demo) && $entry3_demo - $entry3_demo.destroy - $entry3_demo = nil -end - -$entry3_demo = TkToplevel.new {|w| - title("Constrained Entry Demonstration") - iconname("entry3") - positionWindow(w) -} - -base_frame = TkFrame.new($entry3_demo).pack(:fill=>:both, :expand=>true) - -TkLabel.new(base_frame, - :font=>$font, :wraplength=>'5i', :justify=>:left, - :text=><:top) -以下ã«ã¯ï¼”種類ã®ã‚¨ãƒ³ãƒˆãƒªãƒœãƒƒã‚¯ã‚¹ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ï¼Žå„エントリボックスã¯ï¼Œ\ -マウスクリックã§é¸æŠžã—文字を打ã¡è¾¼ã‚€ã“ã¨ãŒå¯èƒ½ã§ã™ãŒï¼Œãã‚Œãžã‚ŒãŒã©ã®ã‚ˆã†ãª\ -入力をå—ã‘付ã‘ã‚‹ã“ã¨ãŒã§ãã‚‹ã‹ã«ã¯åˆ¶ç´„ãŒè¨­ã‘られã¦ã„ã¾ã™ï¼Ž\ -一ã¤ã‚ã®ã‚¨ãƒ³ãƒˆãƒªãƒœãƒƒã‚¯ã‚¹ã¯æ•´æ•°ã¨è¦‹ãªã•ã‚Œã‚‹æ–‡å­—列ã‹å…¥åŠ›æ–‡å­—ãŒãªã„空ã®çŠ¶æ…‹ã‹\ -ã®å ´åˆã ã‘ã‚’å—ã‘付ã‘,å•é¡ŒãŒã‚ã‚‹å ´åˆã¯ã‚¨ãƒ³ãƒˆãƒªãƒœãƒƒã‚¯ã‚¹ãŒç‚¹æ»…ã—ã¾ã™\ -(フォーカスãŒåŽ»ã‚‹æ™‚ã«ãƒã‚§ãƒƒã‚¯ã•ã‚Œã¾ã™ï¼‰ï¼Ž\ -二ã¤ã‚ã®ã‚¨ãƒ³ãƒˆãƒªãƒœãƒƒã‚¯ã‚¹ã¯ï¼Œå…¥åŠ›ã•ã‚ŒãŸæ–‡å­—列ã®é•·ã•ãŒ\ -1ï¼æ–‡å­—未満ã®å ´åˆã ã‘ã‚’å—ã‘付ã‘,制é™ã‚’越ãˆã¦æ›¸ã込もã†ã¨ã—ãŸã¨ãã«ã¯\ -ベルを鳴らã—ã¦çŸ¥ã‚‰ã›ã¾ã™ï¼Ž\ -三ã¤ã‚ã¯ç±³å›½ã®é›»è©±ç•ªå·ã‚’å—ã‘付ã‘るエントリボックスã§ã™ï¼Ž\ -アルファベットã¯ï¼Œé›»è©±æ©Ÿã®ãƒ€ã‚¤ãƒ¤ãƒ«ä¸Šã§å¯¾å¿œã¥ã‘られã¦ã„ã‚‹æ•°å­—ã«å¤‰æ›ã•ã‚Œã¾ã™ï¼Ž\ -ä¸é©åˆ‡ãªæ–‡å­—ãŒå…¥åŠ›ã•ã‚ŒãŸã‚Šæ•°å­—以外ã®æ–‡å­—ã®ä½ç½®ã«æ•°å­—を入力ã—よã†ã¨ã—ãŸã‚Š\ -ã—ãŸå ´åˆã«ã¯è­¦å‘Šã®ãƒ™ãƒ«ãŒé³´ã‚Šã¾ã™ï¼Ž\ -å››ã¤ã‚ã®ã‚¨ãƒ³ãƒˆãƒªãƒœãƒƒã‚¯ã‚¹ã¯ï¼Œï¼˜æ–‡å­—ã¾ã§ã®å…¥åŠ›ã‚’å—ã‘付ã‘ã‚‹\ -パスワードフィールドã§ã™ï¼ˆï¼˜æ–‡å­—以上ã¯ç‰¹ã«è­¦å‘Šã‚’出ã™ã“ã¨ãªã無視ã•ã‚Œã¾ã™ï¼‰ï¼Ž\ -入力ã•ã‚ŒãŸæ–‡å­—ã¯ã‚¢ã‚¹ã‚¿ãƒªã‚¹ã‚¯è¨˜å·ã«ç½®ãæ›ãˆã¦è¡¨ç¤ºã•ã‚Œã¾ã™ï¼Ž -EOL - -TkFrame.new(base_frame){|f| - pack(:side=>:bottom, :fill=>:x, :pady=>'2m') - - TkButton.new(f, :text=>'é–‰ã˜ã‚‹', :width=>15, :command=>proc{ - $entry3_demo.destroy - $entry3_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'コードå‚ç…§', :width=>15, :command=>proc{ - showCode 'entry3' - }).pack(:side=>:left, :expand=>true) -} - -# focusAndFlash -- -# Error handler for entry widgets that forces the focus onto the -# widget and makes the widget flash by exchanging the foreground and -# background colours at intervals of 200ms (i.e. at approximately -# 2.5Hz). -# -# Arguments: -# widget - entry widget to flash -# fg - Initial foreground colour -# bg - Initial background colour -# count - Counter to control the number of times flashed -def focusAndFlash(widget, fg, bg, count=5) - return if count <= 0 - if fg && !fg.empty? && bg && !bg.empty? - TkTimer.new(200, count, - proc{widget.configure(:foreground=>bg, :background=>fg)}, - proc{widget.configure(:foreground=>fg, :background=>bg)} - ).start - else - # TkTimer.new(150, 3){Tk.bell}.start - Tk.bell - TkTimer.new(200, count, - proc{widget.configure(:foreground=>'white', - :background=>'black')}, - proc{widget.configure(:foreground=>'black', - :background=>'white')} - ).at_end{begin - widget.configure(:foreground=>fg, - :background=>bg) - rescue - # ignore - end}.start - end - widget.focus(true) -end - -l1 = TkLabelFrame.new(base_frame, :text=>"整数エントリ") -TkEntry.new(l1, :validate=>:focus, - :vcmd=>[ - proc{|s| s == '' || /^[+-]?\d+$/ =~ s }, '%P' - ]) {|e| - fg = e.foreground - bg = e.background - invalidcommand [proc{|w| focusAndFlash(w, fg, bg)}, '%W'] - pack(:fill=>:x, :expand=>true, :padx=>'1m', :pady=>'1m') -} - -l2 = TkLabelFrame.new(base_frame, :text=>"é•·ã•åˆ¶ç´„付ãエントリ") -TkEntry.new(l2, :validate=>:key, :invcmd=>proc{Tk.bell}, - :vcmd=>[proc{|s| s.length < 10}, '%P'] - ).pack(:fill=>:x, :expand=>true, :padx=>'1m', :pady=>'1m') - -### PHONE NUMBER ENTRY ### -# Note that the source to this is quite a bit longer as the behaviour -# demonstrated is a lot more ambitious than with the others. - -# Initial content for the third entry widget -entry3content = TkVariable.new("1-(000)-000-0000") - -# Mapping from alphabetic characters to numbers. -$phoneNumberMap = {} -Hash[*(%w(abc 2 def 3 ghi 4 jkl 5 mno 6 pqrs 7 tuv 8 wxyz 9))].each{|chars, n| - chars.split('').each{|c| - $phoneNumberMap[c] = n - $phoneNumberMap[c.upcase] = n - } -} - -# phoneSkipLeft -- -# Skip over fixed characters in a phone-number string when moving left. -# -# Arguments: -# widget - The entry widget containing the phone-number. -def phoneSkipLeft(widget) - idx = widget.index('insert') - if idx == 8 - # Skip back two extra characters - widget.cursor = idx - 2 - elsif idx == 7 || idx == 12 - # Skip back one extra character - widget.cursor = idx - 1 - elsif idx <= 3 - # Can't move any further - Tk.bell - Tk.callback_break - end -end - -# phoneSkipRight -- -# Skip over fixed characters in a phone-number string when moving right. -# -# Arguments: -# widget - The entry widget containing the phone-number. -# add - Offset to add to index before calculation (used by validation.) -def phoneSkipRight(widget, add = 0) - idx = widget.index('insert') - if (idx + add == 5) - # Skip forward two extra characters - widget.cursor = idx + 2 - elsif (idx + add == 6 || idx + add == 10) - # Skip forward one extra character - widget.cursor = idx + 1 - elsif (idx + add == 15 && add == 0) - # Can't move any further - Tk.bell - Tk.callback_break - end -end - -# validatePhoneChange -- -# Checks that the replacement (mapped to a digit) of the given -# character in an entry widget at the given position will leave a -# valid phone number in the widget. -# -# widget - entry widget to validate -# vmode - The widget's validation mode -# idx - The index where replacement is to occur -# char - The character (or string, though that will always be -# refused) to be overwritten at that point. - -def validatePhoneChange(widget, vmode, idx, char) - return true if idx == nil - Tk.after_idle(proc{widget.configure(:validate=>vmode, - :invcmd=>proc{Tk.bell})}) - if !(idx<3 || idx==6 || idx==7 || idx==11 || idx>15) && char =~ /[0-9A-Za-z]/ - widget.delete(idx) - widget.insert(idx, $phoneNumberMap[char] || char) - Tk.after_idle(proc{phoneSkipRight(widget, -1)}) - # Tk.update(true) # <- Don't work 'update' inter validation callback. - # It depends on Tcl/Tk side (tested on Tcl/Tk8.5a1). - return true - end - return false -end - - -l3 = TkLabelFrame.new(base_frame, :text=>"米国電話番å·ã‚¨ãƒ³ãƒˆãƒª") -TkEntry.new(l3, :validate=>:key, :invcmd=>proc{Tk.bell}, - :textvariable=>entry3content, - :vcmd=>[ - proc{|w,v,i,s| validatePhoneChange(w,v,i,s)}, - "%W %v %i %S" - ]){|e| - # Click to focus goes to the first editable character... - bind('FocusIn', proc{|d,w| - if d != "NotifyAncestor" - w.cursor = 3 - Tk.after_idle(proc{w.selection_clear}) - end - }, '%d %W') - bind('Left', proc{|w| phoneSkipLeft(w)}, '%W') - bind('Right', proc{|w| phoneSkipRight(w)}, '%W') - pack(:fill=>:x, :expand=>true, :padx=>'1m', :pady=>'1m') -} - -l4 = TkLabelFrame.new(base_frame, :text=>"パスワードエントリ") -TkEntry.new(l4, :validate=>:key, :show=>'*', - :vcmd=>[ - proc{|s| s.length <= 8}, - '%P' - ]).pack(:fill=>:x, :expand=>true, :padx=>'1m', :pady=>'1m') - -TkFrame.new(base_frame){|f| - lower - TkGrid.configure(l1, l2, :in=>f, :padx=>'3m', :pady=>'1m', :sticky=>:ew) - TkGrid.configure(l3, l4, :in=>f, :padx=>'3m', :pady=>'1m', :sticky=>:ew) - TkGrid.columnconfigure(f, [0,1], :uniform=>1) - pack(:fill=>:both, :expand=>true) -} diff --git a/ext/tk/sample/demos-jp/filebox.rb b/ext/tk/sample/demos-jp/filebox.rb deleted file mode 100644 index 800dd5ddbf..0000000000 --- a/ext/tk/sample/demos-jp/filebox.rb +++ /dev/null @@ -1,103 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# widget demo prompts the user to select a file (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($filebox_demo) && $entry2_demo - $filebox_demo.destroy - $filebox_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$filebox_demo = TkToplevel.new {|w| - title("File Selection Dialogs") - iconname("filebox") - positionWindow(w) -} - -base_frame = TkFrame.new($filebox_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -TkLabel.new(base_frame,'font'=>$font,'wraplength'=>'4i','justify'=>'left', - 'text'=>"エントリã«ãƒ•ã‚¡ã‚¤ãƒ«åを直接入力ã™ã‚‹ã‹ã€\"Browse\" ボタンを押ã—ã¦ãƒ•ã‚¡ã‚¤ãƒ«é¸æŠžãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã‹ã‚‰ãƒ•ã‚¡ã‚¤ãƒ«åã‚’é¸ã‚“ã§ä¸‹ã•ã„。").pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $filebox_demo - $filebox_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'filebox'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -['é–‹ã', 'ä¿å­˜'].each{|type| - TkFrame.new(base_frame) {|f| - TkLabel.new(f, 'text'=>"ファイルを#{type}: ", 'anchor'=>'e')\ - .pack('side'=>'left') - - TkEntry.new(f, 'width'=>20) {|e| - pack('side'=>'left', 'expand'=>'yes', 'fill'=>'x') - - TkButton.new(f, 'text'=>'Browse ...', - 'command'=>proc{fileDialog base_frame,e,type})\ - .pack('side'=>'left') - } - - pack('fill'=>'x', 'padx'=>'1c', 'pady'=>3) - } -} - -$tk_strictMotif = TkVarAccess.new('tk_strictMotif') -if ($tk_platform['platform'] == 'unix') - TkCheckButton.new(base_frame, - 'text'=>'Motifスタイルã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã‚’用ã„ã‚‹', - 'variable'=>$tk_strictMotif, - 'onvalue'=>1, 'offvalue'=>0 ).pack('anchor'=>'c') -end - -def fileDialog(w,ent,operation) - # Type names Extension(s) Mac File Type(s) - # - #-------------------------------------------------------- - types = [ - ['Text files', ['.txt','.doc'] ], - ['Text files', [], 'TEXT' ], - ['Ruby Scripts', ['.rb'], 'TEXT' ], - ['Tcl Scripts', ['.tcl'], 'TEXT' ], - ['C Source Files', ['.c','.h'] ], - ['All Source Files', ['.rb','.tcl','.c','.h'] ], - ['Image Files', ['.gif'] ], - ['Image Files', ['.jpeg','.jpg'] ], - ['Image Files', [], ['GIFF','JPEG']], - ['All files', '*' ] - ] - - if operation == 'é–‹ã' - file = Tk.getOpenFile('filetypes'=>types, 'parent'=>w) - else - file = Tk.getSaveFile('filetypes'=>types, 'parent'=>w, - 'initialfile'=>'Untitled', - 'defaultextension'=>'.txt') - end - if file != "" - ent.delete 0, 'end' - ent.insert 0, file - # ent.xview 'end' - Tk.update_idletasks # need this for Tk::Tile::Entry - # (to find right position of 'xview'). - ent.xview(ent.index('end')) - end -end - diff --git a/ext/tk/sample/demos-jp/floor.rb b/ext/tk/sample/demos-jp/floor.rb deleted file mode 100644 index 8a079035c9..0000000000 --- a/ext/tk/sample/demos-jp/floor.rb +++ /dev/null @@ -1,1722 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# floorDisplay widget demo (called by 'widget') -# - -# floorDisplay -- -# Recreate the floorplan display in the canvas given by "w". The -# floor given by "active" is displayed on top with its office structure -# visible. -# -# Arguments: -# w - Name of the canvas window. -# active - Number of active floor (1, 2, or 3). - -def floorDisplay(w,active) - return if $activeFloor == active - - w.delete('all') - $activeFloor = active - - # First go through the three floors, displaying the backgrounds for - # each floor. - - floor_bg1(w,$floor_colors['bg1'],$floor_colors['outline1']) - floor_bg2(w,$floor_colors['bg2'],$floor_colors['outline2']) - floor_bg3(w,$floor_colors['bg3'],$floor_colors['outline3']) - - # Raise the background for the active floor so that it's on top. - - w.raise("floor#{active}") - - # Create a dummy item just to mark this point in the display list, - # so we can insert highlights here. - - TkcRectangle.new(w,0,100,1,101, 'fill'=>'', 'outline'=>'', 'tags'=>'marker') - - # Add the walls and labels for the active floor, along with - # transparent polygons that define the rooms on the floor. - # Make sure that the room polygons are on top. - - $floorLabels.clear - $floorItems.clear - send("floor_fg#{active}", w, $floor_colors['offices']) - w.raise('room') - - # Offset the floors diagonally from each other. - - w.move('floor1', '2c', '2c') - w.move('floor2', '1c', '1c') - - # Create items for the room entry and its label. - TkcWindow.new(w, 600, 100, 'anchor'=>'w', 'window'=>$floor_entry) - TkcText.new(w, 600, 100, 'anchor'=>'e', 'text'=>"部屋番å·: ") - w['scrollregion'] = w.bbox('all') -end - -# newRoom -- -# This method is invoked whenever the mouse enters a room -# in the floorplan. It changes tags so that the current room is -# highlighted. -# -# Arguments: -# w - The name of the canvas window. - -def newRoom(w) - id = w.find_withtag('current')[0] - $currentRoom.value = $floorLabels[id.id] if id != "" - Tk.update(true) -end - -# roomChanged -- -# This method is invoked whenever the currentRoom variable changes. -# It highlights the current room and unhighlights any previous room. -# -# Arguments: -# w - The canvas window displaying the floorplan. -# args - Not used. - -def roomChanged(w,*args) - w.delete('highlight') - item = $floorItems[$currentRoom.value] - return if item == nil - new = TkcPolygon.new(w, *(w.coords(item))) - new.configure('fill'=>$floor_colors['active'], 'tags'=>'highlight') - w.raise(new, 'marker') -end - -# floor_bg1 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the background information for the first -# floor. -# -# Arguments: -# w - The canvas window. -# fill - Fill color to use for the floor's background. -# outline - Color to use for the floor's outline. - -def floor_bg1(w,fill,outline) - TkcPolygon.new(w,347,80,349,82,351,84,353,85,363,92,375,99,386,104, - 386,129,398,129,398,162,484,162,484,129,559,129,559,133,725, - 133,725,129,802,129,802,389,644,389,644,391,559,391,559,327, - 508,327,508,311,484,311,484,278,395,278,395,288,400,288,404, - 288,409,290,413,292,418,297,421,302,422,309,421,318,417,325, - 411,330,405,332,397,333,344,333,340,334,336,336,335,338,332, - 342,331,347,332,351,334,354,336,357,341,359,340,360,335,363, - 331,365,326,366,304,366,304,355,258,355,258,387,60,387,60,391, - 0,391,0,337,3,337,3,114,8,114,8,25,30,25,30,5,93,5,98,5,104,7, - 110,10,116,16,119,20,122,28,123,32,123,68,220,68,220,34,221, - 22,223,17,227,13,231,8,236,4,242,2,246,0,260,0,283,1,300,5, - 321,14,335,22,348,25,365,29,363,39,358,48,352,56,337,70, - 344,76,347,80, 'tags'=>['floor1','bg'], 'fill'=>fill) - TkcLine.new(w,386,129,398,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,258,355,258,387, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,60,387,60,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,0,337,0,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,60,391,0,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,3,114,3,337, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,258,387,60,387, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,484,162,398,162, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,398,162,398,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,484,278,484,311, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,484,311,508,311, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,508,327,508,311, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,559,327,508,327, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,644,391,559,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,644,389,644,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,559,129,484,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,484,162,484,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,725,133,559,133, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,559,129,559,133, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,725,129,802,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,802,389,802,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,3,337,0,337, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,559,391,559,327, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,802,389,644,389, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,725,133,725,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,8,25,8,114, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,8,114,3,114, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,30,25,8,25, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,484,278,395,278, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,30,25,30,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,93,5,30,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,98,5,93,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,104,7,98,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,110,10,104,7, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,116,16,110,10, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,119,20,116,16, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,122,28,119,20, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,123,32,122,28, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,123,68,123,32, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,220,68,123,68, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,386,129,386,104, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,386,104,375,99, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,375,99,363,92, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,353,85,363,92, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,220,68,220,34, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,337,70,352,56, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,352,56,358,48, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,358,48,363,39, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,363,39,365,29, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,365,29,348,25, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,348,25,335,22, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,335,22,321,14, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,321,14,300,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,300,5,283,1, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,283,1,260,0, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,260,0,246,0, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,246,0,242,2, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,242,2,236,4, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,236,4,231,8, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,231,8,227,13, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,223,17,227,13, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,221,22,223,17, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,220,34,221,22, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,340,360,335,363, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,335,363,331,365, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,331,365,326,366, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,326,366,304,366, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,304,355,304,366, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,395,288,400,288, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,404,288,400,288, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,409,290,404,288, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,413,292,409,290, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,418,297,413,292, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,421,302,418,297, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,422,309,421,302, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,421,318,422,309, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,421,318,417,325, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,417,325,411,330, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,411,330,405,332, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,405,332,397,333, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,397,333,344,333, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,344,333,340,334, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,340,334,336,336, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,336,336,335,338, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,335,338,332,342, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,331,347,332,342, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,332,351,331,347, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,334,354,332,351, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,336,357,334,354, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,341,359,336,357, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,341,359,340,360, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,395,288,395,278, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,304,355,258,355, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,347,80,344,76, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,344,76,337,70, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,349,82,347,80, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,351,84,349,82, 'fill'=>outline, 'tags'=>['floor1','bg']) - TkcLine.new(w,353,85,351,84, 'fill'=>outline, 'tags'=>['floor1','bg']) -end - -# floor_bg2 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the background information for the first -# floor. -# -# Arguments: -# w - The canvas window. -# fill - Fill color to use for the floor's background. -# outline - Color to use for the floor's outline. - -def floor_bg2(w,fill,outline) - TkcPolygon.new(w,559,129,484,129,484,162,398,162,398,129,315,129, - 315,133,176,133,176,129,96,129,96,133,3,133,3,339,0,339,0,391, - 60,391,60,387,258,387,258,329,350,329,350,311,395,311,395,280, - 484,280,484,311,508,311,508,327,558,327,558,391,644,391,644, - 367,802,367,802,129,725,129,725,133,559,133,559,129, - 'tags'=>['floor2','bg'], 'fill'=>fill) - TkcLine.new(w,350,311,350,329, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,398,129,398,162, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,802,367,802,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,802,129,725,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,725,133,725,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,559,129,559,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,559,133,725,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,484,162,484,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,559,129,484,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,802,367,644,367, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,644,367,644,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,644,391,558,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,558,327,558,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,558,327,508,327, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,508,327,508,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,484,311,508,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,484,280,484,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,398,162,484,162, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,484,280,395,280, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,395,280,395,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,258,387,60,387, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,3,133,3,339, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,3,339,0,339, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,60,391,0,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,0,339,0,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,60,387,60,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,258,329,258,387, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,350,329,258,329, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,395,311,350,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,398,129,315,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,176,133,315,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,176,129,96,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,3,133,96,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,315,133,315,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,176,133,176,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - TkcLine.new(w,96,133,96,129, 'fill'=>outline, 'tags'=>['floor2','bg']) -end - -# floor_bg3 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the background information for the first -# floor. -# -# Arguments: -# w - The canvas window. -# fill - Fill color to use for the floor's background. -# outline - Color to use for the floor's outline. - -def floor_bg3(w,fill,outline) - TkcPolygon.new(w,159,300,107,300,107,248,159,248,159,129,96,129,96, - 133,21,133,21,331,0,331,0,391,60,391,60,370,159,370,159,300, - 'tags'=>['floor3','bg'], 'fill'=>fill) - TkcPolygon.new(w,258,370,258,329,350,329,350,311,399,311,399,129, - 315,129,315,133,176,133,176,129,159,129,159,370,258,370, - 'tags'=>['floor3','bg'], 'fill'=>fill) - TkcLine.new(w,96,133,96,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,176,129,96,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,176,129,176,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,315,133,176,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,315,133,315,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,399,129,315,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,399,311,399,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,399,311,350,311, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,350,329,350,311, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,350,329,258,329, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,258,370,258,329, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,60,370,258,370, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,60,370,60,391, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,60,391,0,391, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,0,391,0,331, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,21,331,0,331, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,21,331,21,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,96,133,21,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - TkcLine.new(w,107,300,159,300,159,248,107,248,107,300, - 'fill'=>outline, 'tags'=>['floor3','bg']) -end - -# floor_fg1 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the foreground information for the first -# floor (office outlines and numbers). -# -# Arguments: -# w - The canvas window. -# color - Color to use for drawing foreground information. - -def floor_fg1(w,color) - i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '101' - $floorItems['101'] = i - TkcText.new(w,358,209, 'text'=>'101', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Pub Lift1' - $floorItems['Pub Lift1'] = i - TkcText.new(w,323,223, 'text'=>'Pub Lift1', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Priv Lift1' - $floorItems['Priv Lift1'] = i - TkcText.new(w,323,188, 'text'=>'Priv Lift1', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,42,389,42,337,1,337,1,389, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '110' - $floorItems['110'] = i - TkcText.new(w,21.5,363, 'text'=>'110', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,59,389,59,385,90,385,90,337,44,337,44,389, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '109' - $floorItems['109'] = i - TkcText.new(w,67,363, 'text'=>'109', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,51,300,51,253,6,253,6,300, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '111' - $floorItems['111'] = i - TkcText.new(w,28.5,276.5, 'text'=>'111', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,98,248,98,309,79,309,79,248, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '117B' - $floorItems['117B'] = i - TkcText.new(w,88.5,278.5, 'text'=>'117B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,51,251,51,204,6,204,6,251, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '112' - $floorItems['112'] = i - TkcText.new(w,28.5,227.5, 'text'=>'112', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,6,156,51,156,51,203,6,203, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '113' - $floorItems['113'] = i - TkcText.new(w,28.5,179.5, 'text'=>'113', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,85,169,79,169,79,192,85,192, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '117A' - $floorItems['117A'] = i - TkcText.new(w,82,180.5, 'text'=>'117A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,77,302,77,168,53,168,53,302, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '117' - $floorItems['117'] = i - TkcText.new(w,65,235, 'text'=>'117', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,51,155,51,115,6,115,6,155, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '114' - $floorItems['114'] = i - TkcText.new(w,28.5,135, 'text'=>'114', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,95,115,53,115,53,168,95,168, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '115' - $floorItems['115'] = i - TkcText.new(w,74,141.5, 'text'=>'115', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,87,113,87,27,10,27,10,113, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '116' - $floorItems['116'] = i - TkcText.new(w,48.5,70, 'text'=>'116', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,89,91,128,91,128,113,89,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '118' - $floorItems['118'] = i - TkcText.new(w,108.5,102, 'text'=>'118', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,178,128,178,132,216,132,216,91, - 163,91,163,112,149,112,149,128, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '120' - $floorItems['120'] = i - TkcText.new(w,189.5,111.5, 'text'=>'120', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,79,193,87,193,87,169,136,169,136,192, - 156,192,156,169,175,169,175,246,79,246, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '122' - $floorItems['122'] = i - TkcText.new(w,131,207.5, 'text'=>'122', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,138,169,154,169,154,191,138,191, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '121' - $floorItems['121'] = i - TkcText.new(w,146,180, 'text'=>'121', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,99,300,126,300,126,309,99,309, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '106A' - $floorItems['106A'] = i - TkcText.new(w,112.5,304.5, 'text'=>'106A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,128,299,128,309,150,309,150,248,99,248,99,299, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '105' - $floorItems['105'] = i - TkcText.new(w,124.5,278.5, 'text'=>'105', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,174,309,174,300,152,300,152,309, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '106B' - $floorItems['106B'] = i - TkcText.new(w,163,304.5, 'text'=>'106B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,176,299,176,309,216,309,216,248,152,248,152,299, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '104' - $floorItems['104'] = i - TkcText.new(w,184,278.5, 'text'=>'104', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,138,385,138,337,91,337,91,385, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '108' - $floorItems['108'] = i - TkcText.new(w,114.5,361, 'text'=>'108', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,256,337,140,337,140,385,256,385, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '107' - $floorItems['107'] = i - TkcText.new(w,198,361, 'text'=>'107', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,300,353,300,329,260,329,260,353, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Smoking' - $floorItems['Smoking'] = i - TkcText.new(w,280,341, 'text'=>'Smoking', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,314,135,314,170,306,170,306,246,177,246,177,135, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '123' - $floorItems['123'] = i - TkcText.new(w,245.5,190.5, 'text'=>'123', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,217,248,301,248,301,326,257,326,257,310,217,310, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '103' - $floorItems['103'] = i - TkcText.new(w,259,287, 'text'=>'103', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,396,188,377,188,377,169,316,169,316,131,396,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '124' - $floorItems['124'] = i - TkcText.new(w,356,150, 'text'=>'124', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,397,226,407,226,407,189,377,189,377,246,397,246, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '125' - $floorItems['125'] = i - TkcText.new(w,392,217.5, 'text'=>'125', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,399,187,409,187,409,207,474,207,474,164,399,164, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '126' - $floorItems['126'] = i - TkcText.new(w,436.5,185.5, 'text'=>'126', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,409,209,409,229,399,229,399,253, - 486,253,486,239,474,239,474,209, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '127' - $floorItems['127'] = i - TkcText.new(w,436.5,'231', 'text'=>'127', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,501,164,501,174,495,174,495,188, - 490,188,490,204,476,204,476,164, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'MShower' - $floorItems['MShower'] = i - TkcText.new(w,488.5,'184', 'text'=>'MShower', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,497,176,513,176,513,204,492,204,492,190,497,190, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Closet' - $floorItems['Closet'] = i - TkcText.new(w,502.5,190, 'text'=>'Closet', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,476,237,476,206,513,206,513,254,488,254,488,237, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'WShower' - $floorItems['WShower'] = i - TkcText.new(w,494.5,230, 'text'=>'WShower', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,486,131,558,131,558,135,724,135,724,166, - 697,166,697,275,553,275,531,254,515,254, - 515,174,503,174,503,161,486,161, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '130' - $floorItems['130'] = i - TkcText.new(w,638.5,205, 'text'=>'130', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,308,242,339,242,339,248,342,248, - 342,246,397,246,397,276,393,276, - 393,309,300,309,300,248,308,248, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '102' - $floorItems['102'] = i - TkcText.new(w,367.5,278.5, 'text'=>'102', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,397,255,486,255,486,276,397,276, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '128' - $floorItems['128'] = i - TkcText.new(w,441.5,265.5, 'text'=>'128', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,510,309,486,309,486,255,530,255, - 552,277,561,277,561,325,510,325, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '129' - $floorItems['129'] = i - TkcText.new(w,535.5,293, 'text'=>'129', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,696,281,740,281,740,387,642,387, - 642,389,561,389,561,277,696,277, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '133' - $floorItems['133'] = i - TkcText.new(w,628.5,335, 'text'=>'133', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,742,387,742,281,800,281,800,387, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '132' - $floorItems['132'] = i - TkcText.new(w,771,334, 'text'=>'132', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,800,168,800,280,699,280,699,168, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '134' - $floorItems['134'] = i - TkcText.new(w,749.5,224, 'text'=>'134', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,726,131,726,166,800,166,800,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '135' - $floorItems['135'] = i - TkcText.new(w,763,148.5, 'text'=>'135', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,340,360,335,363,331,365,326,366,304,366, - 304,312,396,312,396,288,400,288,404,288, - 409,290,413,292,418,297,421,302,422,309, - 421,318,417,325,411,330,405,332,397,333, - 344,333,340,334,336,336,335,338,332,342, - 331,347,332,351,334,354,336,357,341,359, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Ramona Stair' - $floorItems['Ramona Stair'] = i - TkcText.new(w,368,323, 'text'=>'Ramona Stair', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,30,23,30,5,93,5,98,5,104,7,110,10,116,16,119,20, - 122,28,123,32,123,68,220,68,220,87,90,87,90,23, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'University Stair' - $floorItems['University Stair'] = i - TkcText.new(w,155,77.5, 'text'=>'University Stair', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,282,37,295,40,312,49,323,56,337,70,352,56, - 358,48,363,39,365,29,348,25,335,22,321,14, - 300,5,283,1,260,0,246,0,242,2,236,4,231,8, - 227,13,223,17,221,22,220,34,260,34, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Plaza Stair' - $floorItems['Plaza Stair'] = i - TkcText.new(w,317.5,28.5, 'text'=>'Plaza Stair', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,220,34,260,34,282,37,295,40,312,49, - 323,56,337,70,350,83,365,94,377,100, - 386,104,386,128,220,128, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = 'Plaza Deck' - $floorItems['Plaza Deck'] = i - TkcText.new(w,303,81, 'text'=>'Plaza Deck', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,257,336,77,336,6,336,6,301,77,301,77,310,257,310, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '106' - $floorItems['106'] = i - TkcText.new(w,131.5,318.5, 'text'=>'106', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,146,110,162,110,162,91,130,91,130,115,95,115, - 95,128,114,128,114,151,157,151,157,153,112,153, - 112,130,97,130,97,168,175,168,175,131,146,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels[i.id] = '119' - $floorItems['119'] = i - TkcText.new(w,143.5,133, 'text'=>'119', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - TkcLine.new(w,155,191,155,189, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,155,177,155,169, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,96,129,96,169, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,78,169,176,169, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,176,247,176,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,340,206,307,206, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,340,187,340,170, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,340,210,340,201, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,340,247,340,224, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,340,241,307,241, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,376,246,376,170, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,307,247,307,170, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,376,170,307,170, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,315,129,315,170, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,147,129,176,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,202,133,176,133, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,398,129,315,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,258,352,258,387, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,60,387,60,391, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,0,337,0,391, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,60,391,0,391, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,3,114,3,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,258,387,60,387, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,237,52,273, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,189,52,225, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,140,52,177, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,395,306,395,311, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,531,254,398,254, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,475,178,475,238, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,502,162,398,162, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,398,129,398,188, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,383,188,376,188, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,408,188,408,194, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,398,227,398,254, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,408,227,398,227, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,408,222,408,227, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,408,206,408,210, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,408,208,475,208, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,484,278,484,311, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,484,311,508,311, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,508,327,508,311, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,559,327,508,327, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,644,391,559,391, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,644,389,644,391, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,514,205,475,205, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,496,189,496,187, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,559,129,484,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,484,162,484,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,725,133,559,133, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,559,129,559,133, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,725,149,725,167, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,725,129,802,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,802,389,802,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,739,167,802,167, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,396,188,408,188, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,0,337,9,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,58,337,21,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,43,391,43,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,105,337,75,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,91,387,91,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,154,337,117,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,139,387,139,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,227,337,166,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,258,337,251,337, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,258,328,302,328, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,302,355,302,311, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,395,311,302,311, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,484,278,395,278, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,395,294,395,278, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,473,278,473,275, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,473,256,473,254, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,533,257,531,254, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,553,276,551,274, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,698,276,553,276, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,559,391,559,327, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,802,389,644,389, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,741,314,741,389, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,698,280,698,167, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,707,280,698,280, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,802,280,731,280, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,741,280,741,302, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,698,167,727,167, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,725,137,725,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,514,254,514,175, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,496,175,514,175, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,502,175,502,162, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,475,166,475,162, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,496,176,496,175, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,491,189,496,189, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,491,205,491,189, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,487,238,475,238, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,487,240,487,238, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,487,252,487,254, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,315,133,304,133, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,256,133,280,133, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,78,247,270,247, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,307,247,294,247, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,214,133,232,133, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,217,247,217,266, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,217,309,217,291, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,217,309,172,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,154,309,148,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,175,300,175,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,151,300,175,300, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,151,247,151,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,78,237,78,265, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,78,286,78,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,106,309,78,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,130,309,125,309, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,99,309,99,247, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,127,299,99,299, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,127,309,127,299, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,155,191,137,191, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,137,169,137,191, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,78,171,78,169, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,78,190,78,218, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,86,192,86,169, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,86,192,78,192, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,301,3,301, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,286,52,301, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,252,3,252, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,203,3,203, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,3,156,52,156, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,8,25,8,114, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,63,114,3,114, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,75,114,97,114, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,108,114,129,114, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,129,114,129,89, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,52,114,52,128, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,132,89,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,88,25,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,88,114,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,218,89,144,89, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,147,111,147,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,162,111,147,111, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,162,109,162,111, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,162,96,162,89, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,218,89,218,94, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,218,89,218,119, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,8,25,88,25, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,258,337,258,328, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,113,129,96,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,302,355,258,355, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,386,104,386,129, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,377,100,386,104, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,365,94,377,100, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,350,83,365,94, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,337,70,350,83, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,337,70,323,56, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,312,49,323,56, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,295,40,312,49, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,282,37,295,40, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,260,34,282,37, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,253,34,260,34, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,386,128,386,104, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,113,152,156,152, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,113,152,156,152, 'fill'=>color, 'tags'=>['floor1','wall']) - TkcLine.new(w,113,152,113,129, 'fill'=>color, 'tags'=>['floor1','wall']) -end - -# floor_fg2 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the foreground information for the second -# floor (office outlines and numbers). -# -# Arguments: -# w - The canvas window. -# color - Color to use for drawing foreground information. - -def floor_fg2(w,color) - i = TkcPolygon.new(w,748,188,755,188,755,205,758,205,758,222, - 800,222,800,168,748,168, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '238' - $floorItems['238'] = i - TkcText.new(w,774,195, 'text'=>'238', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,726,188,746,188,746,166,800,166,800,131,726,131, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '237' - $floorItems['237'] = i - TkcText.new(w,763,148.5, 'text'=>'237', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,497,187,497,204,559,204,559,324,641,324, - 643,324,643,291,641,291,641,205,696,205, - 696,291,694,291,694,314,715,314,715,291, - 715,205,755,205,755,190,724,190,724,187, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '246' - $floorItems['246'] = i - TkcText.new(w,600,264, 'text'=>'246', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,694,279,643,279,643,314,694,314, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '247' - $floorItems['247'] = i - TkcText.new(w,668.5,296.5, 'text'=>'247', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,232,250,308,250,308,242,339,242,339,246, - 397,246,397,255,476,255,476,250,482,250,559,250, - 559,274,482,274,482,278,396,278,396,274,232,274, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '202' - $floorItems['202'] = i - TkcText.new(w,285.5,260, 'text'=>'202', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,53,228,53,338,176,338,233,338,233,196, - 306,196,306,180,175,180,175,169,156,169, - 156,196,176,196,176,228, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '206' - $floorItems['206'] = i - TkcText.new(w,143,267, 'text'=>'206', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,277,6,277,6,338,51,338, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '212' - $floorItems['212'] = i - TkcText.new(w,28.5,307.5, 'text'=>'212', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,557,276,486,276,486,309,510,309,510,325,557,325, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '245' - $floorItems['245'] = i - TkcText.new(w,521.5,300.5, 'text'=>'245', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,560,389,599,389,599,326,560,326, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '244' - $floorItems['244'] = i - TkcText.new(w,579.5,357.5, 'text'=>'244', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,601,389,601,326,643,326,643,389, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '243' - $floorItems['243'] = i - TkcText.new(w,622,357.5, 'text'=>'243', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,688,316,645,316,645,365,688,365, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '242' - $floorItems['242'] = i - TkcText.new(w,666.5,340.5, 'text'=>'242', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,802,367,759,367,759,226,802,226, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = 'Barbecue Deck' - $floorItems['Barbecue Deck'] = i - TkcText.new(w,780.5,296.5, 'text'=>'Barbecue Deck', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,755,262,755,314,717,314,717,262, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '240' - $floorItems['240'] = i - TkcText.new(w,736,288, 'text'=>'240', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,755,316,689,316,689,365,755,365, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '241' - $floorItems['241'] = i - TkcText.new(w,722,340.5, 'text'=>'241', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,755,206,717,206,717,261,755,261, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '239' - $floorItems['239'] = i - TkcText.new(w,736,233.5, 'text'=>'239', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,695,277,643,277,643,206,695,206, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '248' - $floorItems['248'] = i - TkcText.new(w,669,241.5, 'text'=>'248', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,676,135,676,185,724,185,724,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '236' - $floorItems['236'] = i - TkcText.new(w,700,160, 'text'=>'236', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,675,135,635,135,635,145,628,145,628,185,675,185, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '235' - $floorItems['235'] = i - TkcText.new(w,651.5,160, 'text'=>'235', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,626,143,633,143,633,135,572,135, - 572,143,579,143,579,185,626,185, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '234' - $floorItems['234'] = i - TkcText.new(w,606,160, 'text'=>'234', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,557,135,571,135,571,145,578,145, - 578,185,527,185,527,131,557,131, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '233' - $floorItems['233'] = i - TkcText.new(w,552.5,158, 'text'=>'233', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,476,249,557,249,557,205,476,205, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '230' - $floorItems['230'] = i - TkcText.new(w,516.5,227, 'text'=>'230', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,476,164,486,164,486,131,525,131,525,185,476,185, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '232' - $floorItems['232'] = i - TkcText.new(w,500.5,158, 'text'=>'232', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,476,186,495,186,495,204,476,204, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '229' - $floorItems['229'] = i - TkcText.new(w,485.5,195, 'text'=>'229', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,474,207,409,207,409,187,399,187,399,164,474,164, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '227' - $floorItems['227'] = i - TkcText.new(w,436.5,185.5, 'text'=>'227', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,399,228,399,253,474,253,474,209,409,209,409,228, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '228' - $floorItems['228'] = i - TkcText.new(w,436.5,231, 'text'=>'228', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,397,246,397,226,407,226,407,189,377,189,377,246, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '226' - $floorItems['226'] = i - TkcText.new(w,392,217.5, 'text'=>'226', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,377,169,316,169,316,131,397,131,397,188,377,188, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '225' - $floorItems['225'] = i - TkcText.new(w,356.5,150, 'text'=>'225', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,234,198,306,198,306,249,234,249, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '224' - $floorItems['224'] = i - TkcText.new(w,270,223.5, 'text'=>'224', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,270,179,306,179,306,170,314,170,314,135,270,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '223' - $floorItems['223'] = i - TkcText.new(w,292,157, 'text'=>'223', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,268,179,221,179,221,135,268,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '222' - $floorItems['222'] = i - TkcText.new(w,244.5,157, 'text'=>'222', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,177,179,219,179,219,135,177,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '221' - $floorItems['221'] = i - TkcText.new(w,198,157, 'text'=>'221', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,299,327,349,327,349,284,341,284,341,276,299,276, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '204' - $floorItems['204'] = i - TkcText.new(w,324,301.5, 'text'=>'204', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,234,276,297,276,297,327,257,327,257,338,234,338, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '205' - $floorItems['205'] = i - TkcText.new(w,265.5,307, 'text'=>'205', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,256,385,256,340,212,340,212,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '207' - $floorItems['207'] = i - TkcText.new(w,234,362.5, 'text'=>'207', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,210,340,164,340,164,385,210,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '208' - $floorItems['208'] = i - TkcText.new(w,187,362.5, 'text'=>'208', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,115,340,162,340,162,385,115,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '209' - $floorItems['209'] = i - TkcText.new(w,138.5,362.5, 'text'=>'209', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,89,228,89,156,53,156,53,228, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '217' - $floorItems['217'] = i - TkcText.new(w,71,192, 'text'=>'217', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,89,169,97,169,97,190,89,190, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '217A' - $floorItems['217A'] = i - TkcText.new(w,93,179.5, 'text'=>'217A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,89,156,89,168,95,168,95,135,53,135,53,156, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '216' - $floorItems['216'] = i - TkcText.new(w,71,145.5, 'text'=>'216', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,179,51,135,6,135,6,179, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '215' - $floorItems['215'] = i - TkcText.new(w,28.5,157, 'text'=>'215', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,227,6,227,6,180,51,180, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '214' - $floorItems['214'] = i - TkcText.new(w,28.5,203.5, 'text'=>'214', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,275,6,275,6,229,51,229, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '213' - $floorItems['213'] = i - TkcText.new(w,28.5,252, 'text'=>'213', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,114,340,67,340,67,385,114,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '210' - $floorItems['210'] = i - TkcText.new(w,90.5,362.5, 'text'=>'210', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,59,389,59,385,65,385,65,340,1,340,1,389, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '211' - $floorItems['211'] = i - TkcText.new(w,33,364.5, 'text'=>'211', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,393,309,350,309,350,282,342,282,342,276,393,276, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '203' - $floorItems['203'] = i - TkcText.new(w,367.5,292.5, 'text'=>'203', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,99,191,91,191,91,226,174,226,174,198, - 154,198,154,192,109,192,109,169,99,169, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '220' - $floorItems['220'] = i - TkcText.new(w,132.5,208.5, 'text'=>'220', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = 'Priv Lift2' - $floorItems['Priv Lift2'] = i - TkcText.new(w,323,188, 'text'=>'Priv Lift2', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = 'Pub Lift 2' - $floorItems['Pub Lift 2'] = i - TkcText.new(w,323,223, 'text'=>'Pub Lift 2', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '218' - $floorItems['218'] = i - TkcText.new(w,136,149.5, 'text'=>'218', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '219' - $floorItems['219'] = i - TkcText.new(w,132.5,180, 'text'=>'219', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels[i.id] = '201' - $floorItems['201'] = i - TkcText.new(w,358,209, 'text'=>'201', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - TkcLine.new(w,641,186,678,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,350,757,367, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,634,133,634,144, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,634,144,627,144, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,572,133,572,144, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,572,144,579,144, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,398,129,398,162, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,174,197,175,197, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,175,197,175,227, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,206,757,221, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,396,188,408,188, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,727,189,725,189, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,747,167,802,167, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,747,167,747,189, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,755,189,739,189, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,769,224,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,802,224,802,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,802,129,725,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,725,189,725,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,725,186,690,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,676,133,676,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,627,144,627,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,629,186,593,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,579,144,579,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,559,129,559,133, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,725,133,559,133, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,484,162,484,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,559,129,484,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,526,129,526,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,540,186,581,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,528,186,523,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,511,186,475,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,496,190,496,186, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,496,205,496,202, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,475,205,527,205, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,205,539,205, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,205,558,249, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,249,475,249, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,662,206,642,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,695,206,675,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,695,278,642,278, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,642,291,642,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,695,291,695,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,716,208,716,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,206,716,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,221,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,793,224,802,224, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,262,716,262, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,716,220,716,264, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,716,315,716,276, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,315,703,315, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,325,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,757,367,644,367, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,689,367,689,315, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,647,315,644,315, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,659,315,691,315, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,600,325,600,391, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,627,325,644,325, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,644,391,644,315, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,615,325,575,325, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,644,391,558,391, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,563,325,558,325, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,391,558,314, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,327,508,327, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,275,484,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,558,302,558,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,508,327,508,311, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,484,311,508,311, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,484,275,484,311, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,475,208,408,208, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,408,206,408,210, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,408,222,408,227, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,408,227,398,227, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,398,227,398,254, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,408,188,408,194, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,383,188,376,188, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,398,188,398,162, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,398,162,484,162, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,475,162,475,254, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,398,254,475,254, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,484,280,395,280, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,395,311,395,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,307,197,293,197, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,278,197,233,197, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,233,197,233,249, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,307,179,284,179, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,233,249,278,249, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,269,179,269,133, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,220,179,220,133, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,155,191,110,191, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,90,190,98,190, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,98,169,98,190, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,133,52,165, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,214,52,177, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,226,52,262, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,274,52,276, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,234,275,234,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,226,339,258,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,211,387,211,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,214,339,177,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,258,387,60,387, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,3,133,3,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,165,339,129,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,117,339,80,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,68,339,59,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,0,339,46,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,60,391,0,391, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,0,339,0,391, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,60,387,60,391, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,258,329,258,387, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,350,329,258,329, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,395,311,350,311, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,398,129,315,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,176,133,315,133, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,176,129,96,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,3,133,96,133, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,66,387,66,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,115,387,115,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,163,387,163,339, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,234,275,276,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,288,275,309,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,298,275,298,329, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,341,283,350,283, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,321,275,341,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,375,275,395,275, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,315,129,315,170, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,376,170,307,170, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,307,250,307,170, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,376,245,376,170, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,340,241,307,241, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,340,245,340,224, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,340,210,340,201, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,340,187,340,170, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,340,206,307,206, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,293,250,307,250, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,271,179,238,179, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,226,179,195,179, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,176,129,176,179, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,182,179,176,179, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,174,169,176,169, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,162,169,90,169, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,96,169,96,129, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,175,227,90,227, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,90,190,90,227, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,179,3,179, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,228,3,228, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,52,276,3,276, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,155,177,155,169, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,110,191,110,169, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,155,189,155,197, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,350,283,350,329, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,162,197,155,197, 'fill'=>color, 'tags'=>['floor2','wall']) - TkcLine.new(w,341,275,341,283, 'fill'=>color, 'tags'=>['floor2','wall']) -end - -# floor_fg3 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the foreground information for the third -# floor (office outlines and numbers). -# -# Arguments: -# w - The canvas window. -# color - Color to use for drawing foreground information. - -def floor_fg3(w,color) - i = TkcPolygon.new(w,89,228,89,180,70,180,70,228, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '316' - $floorItems['316'] = i - TkcText.new(w,79.5,204, 'text'=>'316', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,115,368,162,368,162,323,115,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '309' - $floorItems['309'] = i - TkcText.new(w,138.5,345.5, 'text'=>'309', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,164,323,164,368,211,368,211,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '308' - $floorItems['308'] = i - TkcText.new(w,187.5,345.5, 'text'=>'308', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,256,368,212,368,212,323,256,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '307' - $floorItems['307'] = i - TkcText.new(w,234,345.5, 'text'=>'307', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,244,276,297,276,297,327,260,327,260,321,244,321, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '305' - $floorItems['305'] = i - TkcText.new(w,270.5,301.5, 'text'=>'305', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,251,219,251,203,244,203,244,219, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '324B' - $floorItems['324B'] = i - TkcText.new(w,247.5,211, 'text'=>'324B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,251,249,244,249,244,232,251,232, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '324A' - $floorItems['324A'] = i - TkcText.new(w,247.5,240.5, 'text'=>'324A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,223,135,223,179,177,179,177,135, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '320' - $floorItems['320'] = i - TkcText.new(w,200,157, 'text'=>'320', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,114,368,114,323,67,323,67,368, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '310' - $floorItems['310'] = i - TkcText.new(w,90.5,345.5, 'text'=>'310', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,23,277,23,321,68,321,68,277, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '312' - $floorItems['312'] = i - TkcText.new(w,45.5,299, 'text'=>'312', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,23,229,68,229,68,275,23,275, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '313' - $floorItems['313'] = i - TkcText.new(w,45.5,252, 'text'=>'313', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,68,227,23,227,23,180,68,180, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '314' - $floorItems['314'] = i - TkcText.new(w,40.5,203.5, 'text'=>'314', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,95,179,95,135,23,135,23,179, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '315' - $floorItems['315'] = i - TkcText.new(w,59,157, 'text'=>'315', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,99,226,99,204,91,204,91,226, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '316B' - $floorItems['316B'] = i - TkcText.new(w,95,215, 'text'=>'316B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,91,202,99,202,99,180,91,180, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '316A' - $floorItems['316A'] = i - TkcText.new(w,95,191, 'text'=>'316A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,97,169,109,169,109,192,154,192,154,198, - 174,198,174,226,101,226,101,179,97,179, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '319' - $floorItems['319'] = i - TkcText.new(w,141.5,209, 'text'=>'319', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,65,368,58,368,58,389,1,389,1,333,23,333,23,323,65,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '311' - $floorItems['311'] = i - TkcText.new(w,29.5,361, 'text'=>'311', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '318' - $floorItems['318'] = i - TkcText.new(w,132.5,180, 'text'=>'318', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '317' - $floorItems['317'] = i - TkcText.new(w,136,149.5, 'text'=>'317', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,274,194,274,221,306,221,306,194, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '323' - $floorItems['323'] = i - TkcText.new(w,290,207.5, 'text'=>'323', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,306,222,274,222,274,249,306,249, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '325' - $floorItems['325'] = i - TkcText.new(w,290,235.5, 'text'=>'325', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,263,179,224,179,224,135,263,135, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '321' - $floorItems['321'] = i - TkcText.new(w,243.5,157, 'text'=>'321', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,314,169,306,169,306,192,273,192, - 264,181,264,135,314,135, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '322' - $floorItems['322'] = i - TkcText.new(w,293.5,163.5, 'text'=>'322', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = 'Pub Lift3' - $floorItems['Pub Lift3'] = i - TkcText.new(w,323,223, 'text'=>'Pub Lift3', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = 'Priv Lift3' - $floorItems['Priv Lift3'] = i - TkcText.new(w,323,188, 'text'=>'Priv Lift3', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,350,284,376,284,376,276,397,276,397,309,350,309, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '303' - $floorItems['303'] = i - TkcText.new(w,373.5,292.5, 'text'=>'303', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,272,203,272,249,252,249,252,230, - 244,230,244,221,252,221,252,203, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '324' - $floorItems['324'] = i - TkcText.new(w,262,226, 'text'=>'324', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,299,276,299,327,349,327,349,284,341,284,341,276, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '304' - $floorItems['304'] = i - TkcText.new(w,324,301.5, 'text'=>'304', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '301' - $floorItems['301'] = i - TkcText.new(w,358,209, 'text'=>'301', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,397,246,377,246,377,185,397,185, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '327' - $floorItems['327'] = i - TkcText.new(w,387,215.5, 'text'=>'327', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,316,131,316,169,377,169,377,185,397,185,397,131, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '326' - $floorItems['326'] = i - TkcText.new(w,365.5,150, 'text'=>'326', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,308,251,242,251,242,274,342,274,342,282,375, 282, - 375,274,397,274,397,248,339,248,339,242,308,242, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '302' - $floorItems['302'] = i - TkcText.new(w,319.5,261, 'text'=>'302', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,70,321,242,321,242,200,259,200,259,203,272,203, - 272,193,263,180,242,180,175,180,175,169,156,169, - 156,196,177,196,177,228,107,228,70,228,70,275,107,275, - 107,248,160,248,160,301,107,301,107,275,70,275, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels[i.id] = '306' - $floorItems['306'] = i - TkcText.new(w,200.5,284.5, 'text'=>'306', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - TkcLine.new(w,341,275,341,283, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,162,197,155,197, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,396,247,399,247, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,399,129,399,311, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,258,202,243,202, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,350,283,350,329, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,251,231,243,231, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,243,220,251,220, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,243,250,243,202, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,155,197,155,190, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,110,192,110,169, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,155,192,110,192, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,155,177,155,169, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,176,197,176,227, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,69,280,69,274, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,21,276,69,276, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,69,262,69,226, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,21,228,69,228, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,21,179,75,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,69,179,69,214, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,90,220,90,227, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,90,204,90,202, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,90,203,100,203, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,90,187,90,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,90,227,176,227, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,100,179,100,227, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,100,179,87,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,96,179,96,129, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,162,169,96,169, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,173,169,176,169, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,182,179,176,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,176,129,176,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,195,179,226,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,224,133,224,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,264,179,264,133, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,238,179,264,179, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,207,273,193, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,235,273,250, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,224,273,219, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,193,307,193, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,222,307,222, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,250,307,250, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,384,247,376,247, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,340,206,307,206, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,340,187,340,170, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,340,210,340,201, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,340,247,340,224, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,340,241,307,241, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,376,247,376,170, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,307,250,307,170, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,376,170,307,170, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,315,129,315,170, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,376,283,366,283, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,376,283,376,275, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,399,275,376,275, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,341,275,320,275, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,341,283,350,283, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,298,275,298,329, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,308,275,298,275, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,243,322,243,275, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,243,275,284,275, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,258,322,226,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,212,370,212,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,214,322,177,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,163,370,163,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,165,322,129,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,84,322,117,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,71,322,64,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,115,322,115,370, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,66,322,66,370, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,52,322,21,322, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,21,331,0,331, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,21,331,21,133, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,96,133,21,133, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,176,129,96,129, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,315,133,176,133, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,315,129,399,129, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,399,311,350,311, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,350,329,258,329, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,258,322,258,370, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,60,370,258,370, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,60,370,60,391, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,0,391,0,331, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,60,391,0,391, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,307,250,307,242, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,273,250,307,250, 'fill'=>color, 'tags'=>['floor3','wall']) - TkcLine.new(w,258,250,243,250, 'fill'=>color, 'tags'=>['floor3','wall']) -end - -# Below is the "main program" that creates the floorplan demonstration. - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($floor_demo) && $floor_demo - $floor_demo.destroy - $floor_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$floor_demo = TkToplevel.new {|w| - title("Floorplan Canvas Demonstration") - iconname("Floorplan") - positionWindow(w) - geometry('+20+20') - minsize(100,100) -} - -base_frame = TkFrame.new($floor_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'8i', 'justify'=>'left', - 'text'=>"ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯ãƒ‡ã‚£ã‚¸ã‚¿ãƒ«ã‚¨ã‚¯ã‚¤ãƒƒãƒ—メント社ã®ã‚¦ã‚§ã‚¹ã‚¿ãƒ³ãƒªã‚µãƒ¼ãƒãƒ©ãƒœãƒ©ãƒˆãƒª (DECWRL) ã®é–“å–ã‚ŠãŒæ›¸ã‹ã‚ŒãŸã‚­ãƒ£ãƒ³ãƒã‚¹ widget ãŒå…¥ã£ã¦ã„ã¾ã™ã€‚ã“れ㯠3階建ã¦ã§ã€å¸¸ã«ãã®ã†ã¡ã®1階分ãŒé¸æŠžã€ã¤ã¾ã‚Šãã®é–“å–ã‚ŠãŒè¡¨ç¤ºã•ã‚Œã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚ã‚る階をé¸æŠžã™ã‚‹ã«ã¯ã€ãã®ä¸Šã§ãƒžã‚¦ã‚¹ã®å·¦ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。マウスãŒé¸æŠžã•ã‚Œã¦ã„る階ã®ä¸Šã‚’å‹•ãã¨ã€ãã®ä¸‹ã«ã‚る部屋ã®è‰²ãŒå¤‰ã‚ã‚Šã€éƒ¨å±‹ç•ªå·ãŒã€Œéƒ¨å±‹ç•ªå·:ã€ã‚¨ãƒ³ãƒˆãƒªã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ã¾ãŸã€ã‚¨ãƒ³ãƒˆãƒªã«éƒ¨å±‹ç•ªå·ã‚’書ãã¨ãã®éƒ¨å±‹ã®è‰²ãŒå¤‰ã‚ã‚Šã¾ã™ã€‚"){ - pack('side'=>'top') -} - -# frame ç”Ÿæˆ -$floor_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $floor_demo - $floor_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'floor'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$floor_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# 変数設定 -$floorLabels = {} -$floorItems = {} - -# canvas 設定 -if $tk_version =~ /^4\.[01]/ - $floor_canvas_frame = TkFrame.new(base_frame,'bd'=>2,'relief'=>'sunken', - 'highlightthickness'=>2) - $floor_canvas = TkCanvas.new($floor_canvas_frame, - 'width'=>900, 'height'=>500, 'borderwidth'=>0, - 'highlightthickness'=>0) {|c| - TkScrollbar.new(base_frame, 'orient'=>'horiz', - 'command'=>proc{|*args| c.xview(*args)}){|hs| - c.xscrollcommand(proc{|first,last| hs.set first,last}) - pack('side'=>'bottom', 'fill'=>'x') - } - TkScrollbar.new(base_frame, 'command'=>proc{|*args| c.yview(*args)}){|vs| - c.yscrollcommand(proc{|first,last| vs.set first,last}) - pack('side'=>'right', 'fill'=>'y') - } - } - $floor_canvas_frame.pack('side'=>'top','fill'=>'both', 'expand'=>'yes') - $floor_canvas.pack('expand'=>'yes', 'fill'=>'both') - -else - TkFrame.new(base_frame) {|f| - pack('side'=>'top', 'fill'=>'both', 'expand'=>'yes') - - h = TkScrollbar.new(f, 'highlightthickness'=>0, 'orient'=>'horizontal') - v = TkScrollbar.new(f, 'highlightthickness'=>0, 'orient'=>'vertical') - - TkFrame.new(f, 'bd'=>2, 'relief'=>'sunken') {|f1| - $floor_canvas = TkCanvas.new(f1, 'width'=>900, 'height'=>500, - 'borderwidth'=>0, - 'highlightthickness'=>0) { - xscrollcommand(proc{|first,last| h.set first,last}) - yscrollcommand(proc{|first,last| v.set first,last}) - pack('expand'=>'yes', 'fill'=>'both') - } - grid('padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - } - - v.grid('padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>1, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - h.grid('padx'=>1, 'pady'=>1, 'row'=>1, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - - TkGrid.rowconfigure(f, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure(f, 0, 'weight'=>1, 'minsize'=>0) - - pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>1) - - v.command(proc{|*args| $floor_canvas.yview(*args)}) - h.command(proc{|*args| $floor_canvas.xview(*args)}) - } -end - - -# Create an entry for displaying and typing in current room. - -$currentRoom = TkVariable.new -$floor_entry = TkEntry.new($floor_canvas, 'width'=>10, 'relief'=>'sunken', - 'bd'=>2, 'textvariable'=>$currentRoom) - -# Choose colors, then fill in the floorplan. - -$floor_colors = {} -if TkWinfo.depth($floor_canvas) > 1 - $floor_colors['bg1'] = '#a9c1da' - $floor_colors['outline1'] = '#77889a' - $floor_colors['bg2'] = '#9ab0c6' - $floor_colors['outline2'] = '#687786' - $floor_colors['bg3'] = '#8ba0b3' - $floor_colors['outline3'] = '#596673' - $floor_colors['offices'] = 'Black' - $floor_colors['active'] = '#c4d1df' -else - $floor_colors['bg1'] = 'white' - $floor_colors['outline1'] = 'black' - $floor_colors['bg2'] = 'white' - $floor_colors['outline2'] = 'black' - $floor_colors['bg3'] = 'white' - $floor_colors['outline3'] = 'black' - $floor_colors['offices'] = 'Black' - $floor_colors['active'] = 'black' -end - -$activeFloor = '' -floorDisplay $floor_canvas,3 - -# Set up event bindings for canvas: - -$floor_canvas.itembind('floor1', '1', proc{floorDisplay $floor_canvas,1}) -$floor_canvas.itembind('floor2', '1', proc{floorDisplay $floor_canvas,2}) -$floor_canvas.itembind('floor3', '1', proc{floorDisplay $floor_canvas,3}) -$floor_canvas.itembind('room', 'Enter', proc{newRoom $floor_canvas}) -$floor_canvas.itembind('room', 'Leave', proc{$currentRoom.value = ''}) -$floor_canvas.bind('2', proc{|x,y| $floor_canvas.scan_mark x,y}, '%x %y') -$floor_canvas.bind('B2-Motion', - proc{|x,y| $floor_canvas.scan_dragto x,y}, '%x %y') -$floor_canvas.bind('Destroy', proc{$currentRoom.unset}) -$currentRoom.value = '' -$currentRoom.trace('w',proc{roomChanged $floor_canvas}) - diff --git a/ext/tk/sample/demos-jp/floor2.rb b/ext/tk/sample/demos-jp/floor2.rb deleted file mode 100644 index 7f294ce82e..0000000000 --- a/ext/tk/sample/demos-jp/floor2.rb +++ /dev/null @@ -1,1720 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# floorDisplay widget demo 2 (called by 'widget') -# - -# floorDisplay2 -- -# Recreate the floorplan display in the canvas given by "w". The -# floor given by "active" is displayed on top with its office structure -# visible. -# -# Arguments: -# w - Name of the canvas window. -# active - Number of active floor (1, 2, or 3). - -def floorDisplay2(w,active) - return if $activeFloor2 == active - - w.delete('all') - $activeFloor2 = active - - # First go through the three floors, displaying the backgrounds for - # each floor. - - floor2_bg1(w,$floor2_colors['bg1'],$floor2_colors['outline1']) - floor2_bg2(w,$floor2_colors['bg2'],$floor2_colors['outline2']) - floor2_bg3(w,$floor2_colors['bg3'],$floor2_colors['outline3']) - - # Raise the background for the active floor so that it's on top. - - w.raise("floor#{active}") - - # Create a dummy item just to mark this point in the display list, - # so we can insert highlights here. - - w.create(TkcRectangle,0,100,1,101,'fill'=>'','outline'=>'','tags'=>'marker') - - # Add the walls and labels for the active floor, along with - # transparent polygons that define the rooms on the floor. - # Make sure that the room polygons are on top. - - $floorLabels2.clear - $floorItems2.clear - send("floor2_fg#{active}", w, $floor2_colors['offices']) - w.raise('room') - - # Offset the floors diagonally from each other. - - w.move('floor1', '2c', '2c') - w.move('floor2', '1c', '1c') - - # Create items for the room entry and its label. - w.create(TkcWindow, 600, 100, 'anchor'=>'w', 'window'=>$floor2_entry) - w.create(TkcText, 600, 100, 'anchor'=>'e', 'text'=>"部屋番å·: ") - w['scrollregion'] = w.bbox('all') -end - -# newRoom2 -- -# This method is invoked whenever the mouse enters a room -# in the floorplan. It changes tags so that the current room is -# highlighted. -# -# Arguments: -# w - The name of the canvas window. - -def newRoom2(w) - id = w.find_withtag('current')[0] - $currentRoom2.value = $floorLabels2[id.id] if id != "" - Tk.update(true) -end - -# roomChanged2 -- -# This method is invoked whenever the currentRoom variable changes. -# It highlights the current room and unhighlights any previous room. -# -# Arguments: -# w - The canvas window displaying the floorplan. -# args - Not used. - -def roomChanged2(w,*args) - w.delete('highlight') - item = $floorItems2[$currentRoom2.value] - return if item == nil - new = TkcPolygon.new(w, *(w.coords(item))) - new.configure('fill'=>$floor2_colors['active'], 'tags'=>'highlight') - w.raise(new, 'marker') -end - -# floor2_bg1 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the background information for the first -# floor. -# -# Arguments: -# w - The canvas window. -# fill - Fill color to use for the floor's background. -# outline - Color to use for the floor's outline. - -def floor2_bg1(w,fill,outline) - w.create(TkcPolygon,347,80,349,82,351,84,353,85,363,92,375,99,386,104, - 386,129,398,129,398,162,484,162,484,129,559,129,559,133,725, - 133,725,129,802,129,802,389,644,389,644,391,559,391,559,327, - 508,327,508,311,484,311,484,278,395,278,395,288,400,288,404, - 288,409,290,413,292,418,297,421,302,422,309,421,318,417,325, - 411,330,405,332,397,333,344,333,340,334,336,336,335,338,332, - 342,331,347,332,351,334,354,336,357,341,359,340,360,335,363, - 331,365,326,366,304,366,304,355,258,355,258,387,60,387,60,391, - 0,391,0,337,3,337,3,114,8,114,8,25,30,25,30,5,93,5,98,5,104,7, - 110,10,116,16,119,20,122,28,123,32,123,68,220,68,220,34,221, - 22,223,17,227,13,231,8,236,4,242,2,246,0,260,0,283,1,300,5, - 321,14,335,22,348,25,365,29,363,39,358,48,352,56,337,70, - 344,76,347,80, 'tags'=>['floor1','bg'], 'fill'=>fill) - w.create(TkcLine,386,129,398,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,258,355,258,387, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,60,387,60,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,0,337,0,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,60,391,0,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,3,114,3,337, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,258,387,60,387, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,484,162,398,162, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,398,162,398,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,484,278,484,311, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,484,311,508,311, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,508,327,508,311, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,559,327,508,327, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,644,391,559,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,644,389,644,391, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,559,129,484,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,484,162,484,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,725,133,559,133, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,559,129,559,133, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,725,129,802,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,802,389,802,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,3,337,0,337, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,559,391,559,327, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,802,389,644,389, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,725,133,725,129, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,8,25,8,114, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,8,114,3,114, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,30,25,8,25, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,484,278,395,278, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,30,25,30,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,93,5,30,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,98,5,93,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,104,7,98,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,110,10,104,7, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,116,16,110,10, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,119,20,116,16, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,122,28,119,20, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,123,32,122,28, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,123,68,123,32, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,220,68,123,68, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,386,129,386,104, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,386,104,375,99, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,375,99,363,92, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,353,85,363,92, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,220,68,220,34, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,337,70,352,56, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,352,56,358,48, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,358,48,363,39, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,363,39,365,29, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,365,29,348,25, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,348,25,335,22, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,335,22,321,14, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,321,14,300,5, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,300,5,283,1, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,283,1,260,0, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,260,0,246,0, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,246,0,242,2, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,242,2,236,4, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,236,4,231,8, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,231,8,227,13, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,223,17,227,13, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,221,22,223,17, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,220,34,221,22, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,340,360,335,363, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,335,363,331,365, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,331,365,326,366, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,326,366,304,366, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,304,355,304,366, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,395,288,400,288, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,404,288,400,288, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,409,290,404,288, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,413,292,409,290, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,418,297,413,292, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,421,302,418,297, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,422,309,421,302, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,421,318,422,309, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,421,318,417,325, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,417,325,411,330, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,411,330,405,332, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,405,332,397,333, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,397,333,344,333, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,344,333,340,334, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,340,334,336,336, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,336,336,335,338, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,335,338,332,342, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,331,347,332,342, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,332,351,331,347, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,334,354,332,351, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,336,357,334,354, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,341,359,336,357, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,341,359,340,360, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,395,288,395,278, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,304,355,258,355, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,347,80,344,76, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,344,76,337,70, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,349,82,347,80, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,351,84,349,82, 'fill'=>outline, 'tags'=>['floor1','bg']) - w.create(TkcLine,353,85,351,84, 'fill'=>outline, 'tags'=>['floor1','bg']) -end - -# floor2_bg2 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the background information for the first -# floor. -# -# Arguments: -# w - The canvas window. -# fill - Fill color to use for the floor's background. -# outline - Color to use for the floor's outline. - -def floor2_bg2(w,fill,outline) - w.create(TkcPolygon,559,129,484,129,484,162,398,162,398,129,315,129, - 315,133,176,133,176,129,96,129,96,133,3,133,3,339,0,339,0,391, - 60,391,60,387,258,387,258,329,350,329,350,311,395,311,395,280, - 484,280,484,311,508,311,508,327,558,327,558,391,644,391,644, - 367,802,367,802,129,725,129,725,133,559,133,559,129, - 'tags'=>['floor2','bg'], 'fill'=>fill) - w.create(TkcLine,350,311,350,329, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,398,129,398,162, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,802,367,802,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,802,129,725,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,725,133,725,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,559,129,559,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,559,133,725,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,484,162,484,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,559,129,484,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,802,367,644,367, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,644,367,644,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,644,391,558,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,558,327,558,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,558,327,508,327, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,508,327,508,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,484,311,508,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,484,280,484,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,398,162,484,162, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,484,280,395,280, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,395,280,395,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,258,387,60,387, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,3,133,3,339, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,3,339,0,339, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,60,391,0,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,0,339,0,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,60,387,60,391, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,258,329,258,387, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,350,329,258,329, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,395,311,350,311, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,398,129,315,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,176,133,315,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,176,129,96,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,3,133,96,133, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,315,133,315,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,176,133,176,129, 'fill'=>outline, 'tags'=>['floor2','bg']) - w.create(TkcLine,96,133,96,129, 'fill'=>outline, 'tags'=>['floor2','bg']) -end - -# floor2_bg3 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the background information for the first -# floor. -# -# Arguments: -# w - The canvas window. -# fill - Fill color to use for the floor's background. -# outline - Color to use for the floor's outline. - -def floor2_bg3(w,fill,outline) - w.create(TkcPolygon,159,300,107,300,107,248,159,248,159,129,96,129,96, - 133,21,133,21,331,0,331,0,391,60,391,60,370,159,370,159,300, - 'tags'=>['floor3','bg'], 'fill'=>fill) - w.create(TkcPolygon,258,370,258,329,350,329,350,311,399,311,399,129, - 315,129,315,133,176,133,176,129,159,129,159,370,258,370, - 'tags'=>['floor3','bg'], 'fill'=>fill) - w.create(TkcLine,96,133,96,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,176,129,96,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,176,129,176,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,315,133,176,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,315,133,315,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,399,129,315,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,399,311,399,129, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,399,311,350,311, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,350,329,350,311, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,350,329,258,329, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,258,370,258,329, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,60,370,258,370, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,60,370,60,391, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,60,391,0,391, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,0,391,0,331, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,21,331,0,331, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,21,331,21,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,96,133,21,133, 'fill'=>outline, 'tags'=>['floor3','bg']) - w.create(TkcLine,107,300,159,300,159,248,107,248,107,300, - 'fill'=>outline, 'tags'=>['floor3','bg']) -end - -# floor2_fg1 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the foreground information for the first -# floor (office outlines and numbers). -# -# Arguments: -# w - The canvas window. -# color - Color to use for drawing foreground information. - -def floor2_fg1(w,color) - i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '101' - $floorItems2['101'] = i - w.create(TkcText,358,209, 'text'=>'101', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Pub Lift1' - $floorItems2['Pub Lift1'] = i - w.create(TkcText,323,223, 'text'=>'Pub Lift1', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Priv Lift1' - $floorItems2['Priv Lift1'] = i - w.create(TkcText,323,188, 'text'=>'Priv Lift1', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,42,389,42,337,1,337,1,389, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '110' - $floorItems2['110'] = i - w.create(TkcText,21.5,363, 'text'=>'110', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,59,389,59,385,90,385,90,337,44,337,44,389, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '109' - $floorItems2['109'] = i - w.create(TkcText,67,363, 'text'=>'109', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,51,300,51,253,6,253,6,300, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '111' - $floorItems2['111'] = i - w.create(TkcText,28.5,276.5, 'text'=>'111', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,98,248,98,309,79,309,79,248, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '117B' - $floorItems2['117B'] = i - w.create(TkcText,88.5,278.5, 'text'=>'117B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,51,251,51,204,6,204,6,251, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '112' - $floorItems2['112'] = i - w.create(TkcText,28.5,227.5, 'text'=>'112', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,6,156,51,156,51,203,6,203, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '113' - $floorItems2['113'] = i - w.create(TkcText,28.5,179.5, 'text'=>'113', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,85,169,79,169,79,192,85,192, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '117A' - $floorItems2['117A'] = i - w.create(TkcText,82,180.5, 'text'=>'117A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,77,302,77,168,53,168,53,302, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '117' - $floorItems2['117'] = i - w.create(TkcText,65,235, 'text'=>'117', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,51,155,51,115,6,115,6,155, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '114' - $floorItems2['114'] = i - w.create(TkcText,28.5,135, 'text'=>'114', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,95,115,53,115,53,168,95,168, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '115' - $floorItems2['115'] = i - w.create(TkcText,74,141.5, 'text'=>'115', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,87,113,87,27,10,27,10,113, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '116' - $floorItems2['116'] = i - w.create(TkcText,48.5,70, 'text'=>'116', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,89,91,128,91,128,113,89,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '118' - $floorItems2['118'] = i - w.create(TkcText,108.5,102, 'text'=>'118', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,178,128,178,132,216,132,216,91, - 163,91,163,112,149,112,149,128, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '120' - $floorItems2['120'] = i - w.create(TkcText,189.5,111.5, 'text'=>'120', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,79,193,87,193,87,169,136,169,136,192, - 156,192,156,169,175,169,175,246,79,246, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '122' - $floorItems2['122'] = i - w.create(TkcText,131,207.5, 'text'=>'122', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,138,169,154,169,154,191,138,191, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '121' - $floorItems2['121'] = i - w.create(TkcText,146,180, 'text'=>'121', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,99,300,126,300,126,309,99,309, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '106A' - $floorItems2['106A'] = i - w.create(TkcText,112.5,304.5, 'text'=>'106A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,128,299,128,309,150,309,150,248,99,248,99,299, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '105' - $floorItems2['105'] = i - w.create(TkcText,124.5,278.5, 'text'=>'105', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,174,309,174,300,152,300,152,309, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '106B' - $floorItems2['106B'] = i - w.create(TkcText,163,304.5, 'text'=>'106B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,176,299,176,309,216,309,216,248,152,248,152,299, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '104' - $floorItems2['104'] = i - w.create(TkcText,184,278.5, 'text'=>'104', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,138,385,138,337,91,337,91,385, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '108' - $floorItems2['108'] = i - w.create(TkcText,114.5,361, 'text'=>'108', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,256,337,140,337,140,385,256,385, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '107' - $floorItems2['107'] = i - w.create(TkcText,198,361, 'text'=>'107', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,300,353,300,329,260,329,260,353, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Smoking' - $floorItems2['Smoking'] = i - w.create(TkcText,280,341, 'text'=>'Smoking', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,314,135,314,170,306,170,306,246,177,246,177,135, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '123' - $floorItems2['123'] = i - w.create(TkcText,245.5,190.5, 'text'=>'123', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,217,248,301,248,301,326,257,326,257,310,217,310, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '103' - $floorItems2['103'] = i - w.create(TkcText,259,287, 'text'=>'103', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,396,188,377,188,377,169,316,169,316,131,396,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '124' - $floorItems2['124'] = i - w.create(TkcText,356,150, 'text'=>'124', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,397,226,407,226,407,189,377,189,377,246,397,246, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '125' - $floorItems2['125'] = i - w.create(TkcText,392,217.5, 'text'=>'125', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,399,187,409,187,409,207,474,207,474,164,399,164, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '126' - $floorItems2['126'] = i - w.create(TkcText,436.5,185.5, 'text'=>'126', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,409,209,409,229,399,229,399,253, - 486,253,486,239,474,239,474,209, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '127' - $floorItems2['127'] = i - w.create(TkcText,436.5,'231', 'text'=>'127', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,501,164,501,174,495,174,495,188, - 490,188,490,204,476,204,476,164, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'MShower' - $floorItems2['MShower'] = i - w.create(TkcText,488.5,'184', 'text'=>'MShower', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,497,176,513,176,513,204,492,204,492,190,497,190, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Closet' - $floorItems2['Closet'] = i - w.create(TkcText,502.5,190, 'text'=>'Closet', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,476,237,476,206,513,206,513,254,488,254,488,237, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'WShower' - $floorItems2['WShower'] = i - w.create(TkcText,494.5,230, 'text'=>'WShower', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,486,131,558,131,558,135,724,135,724,166, - 697,166,697,275,553,275,531,254,515,254, - 515,174,503,174,503,161,486,161, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '130' - $floorItems2['130'] = i - w.create(TkcText,638.5,205, 'text'=>'130', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,308,242,339,242,339,248,342,248, - 342,246,397,246,397,276,393,276, - 393,309,300,309,300,248,308,248, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '102' - $floorItems2['102'] = i - w.create(TkcText,367.5,278.5, 'text'=>'102', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,397,255,486,255,486,276,397,276, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '128' - $floorItems2['128'] = i - w.create(TkcText,441.5,265.5, 'text'=>'128', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,510,309,486,309,486,255,530,255, - 552,277,561,277,561,325,510,325, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '129' - $floorItems2['129'] = i - w.create(TkcText,535.5,293, 'text'=>'129', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,696,281,740,281,740,387,642,387, - 642,389,561,389,561,277,696,277, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '133' - $floorItems2['133'] = i - w.create(TkcText,628.5,335, 'text'=>'133', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,742,387,742,281,800,281,800,387, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '132' - $floorItems2['132'] = i - w.create(TkcText,771,334, 'text'=>'132', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,800,168,800,280,699,280,699,168, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '134' - $floorItems2['134'] = i - w.create(TkcText,749.5,224, 'text'=>'134', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,726,131,726,166,800,166,800,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '135' - $floorItems2['135'] = i - w.create(TkcText,763,148.5, 'text'=>'135', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,340,360,335,363,331,365,326,366,304,366, - 304,312,396,312,396,288,400,288,404,288, - 409,290,413,292,418,297,421,302,422,309, - 421,318,417,325,411,330,405,332,397,333, - 344,333,340,334,336,336,335,338,332,342, - 331,347,332,351,334,354,336,357,341,359, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Ramona Stair' - $floorItems2['Ramona Stair'] = i - w.create(TkcText,368,323, 'text'=>'Ramona Stair', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,30,23,30,5,93,5,98,5,104,7,110,10,116,16,119,20, - 122,28,123,32,123,68,220,68,220,87,90,87,90,23, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'University Stair' - $floorItems2['University Stair'] = i - w.create(TkcText,155,77.5, 'text'=>'University Stair', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,282,37,295,40,312,49,323,56,337,70,352,56, - 358,48,363,39,365,29,348,25,335,22,321,14, - 300,5,283,1,260,0,246,0,242,2,236,4,231,8, - 227,13,223,17,221,22,220,34,260,34, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Plaza Stair' - $floorItems2['Plaza Stair'] = i - w.create(TkcText,317.5,28.5, 'text'=>'Plaza Stair', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,220,34,260,34,282,37,295,40,312,49, - 323,56,337,70,350,83,365,94,377,100, - 386,104,386,128,220,128, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = 'Plaza Deck' - $floorItems2['Plaza Deck'] = i - w.create(TkcText,303,81, 'text'=>'Plaza Deck', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,257,336,77,336,6,336,6,301,77,301,77,310,257,310, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '106' - $floorItems2['106'] = i - w.create(TkcText,131.5,318.5, 'text'=>'106', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - i = TkcPolygon.new(w,146,110,162,110,162,91,130,91,130,115,95,115, - 95,128,114,128,114,151,157,151,157,153,112,153, - 112,130,97,130,97,168,175,168,175,131,146,131, - 'fill'=>'', 'tags'=>['floor1','room']) - $floorLabels2[i.id] = '119' - $floorItems2['119'] = i - w.create(TkcText,143.5,133, 'text'=>'119', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor1','label']) - w.create(TkcLine,155,191,155,189, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,155,177,155,169, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,96,129,96,169, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,78,169,176,169, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,176,247,176,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,340,206,307,206, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,340,187,340,170, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,340,210,340,201, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,340,247,340,224, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,340,241,307,241, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,376,246,376,170, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,307,247,307,170, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,376,170,307,170, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,315,129,315,170, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,147,129,176,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,202,133,176,133, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,398,129,315,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,258,352,258,387, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,60,387,60,391, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,0,337,0,391, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,60,391,0,391, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,3,114,3,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,258,387,60,387, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,237,52,273, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,189,52,225, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,140,52,177, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,395,306,395,311, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,531,254,398,254, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,475,178,475,238, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,502,162,398,162, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,398,129,398,188, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,383,188,376,188, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,408,188,408,194, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,398,227,398,254, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,408,227,398,227, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,408,222,408,227, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,408,206,408,210, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,408,208,475,208, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,484,278,484,311, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,484,311,508,311, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,508,327,508,311, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,559,327,508,327, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,644,391,559,391, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,644,389,644,391, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,514,205,475,205, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,496,189,496,187, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,559,129,484,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,484,162,484,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,725,133,559,133, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,559,129,559,133, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,725,149,725,167, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,725,129,802,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,802,389,802,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,739,167,802,167, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,396,188,408,188, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,0,337,9,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,58,337,21,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,43,391,43,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,105,337,75,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,91,387,91,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,154,337,117,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,139,387,139,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,227,337,166,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,258,337,251,337, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,258,328,302,328, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,302,355,302,311, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,395,311,302,311, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,484,278,395,278, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,395,294,395,278, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,473,278,473,275, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,473,256,473,254, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,533,257,531,254, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,553,276,551,274, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,698,276,553,276, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,559,391,559,327, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,802,389,644,389, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,741,314,741,389, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,698,280,698,167, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,707,280,698,280, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,802,280,731,280, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,741,280,741,302, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,698,167,727,167, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,725,137,725,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,514,254,514,175, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,496,175,514,175, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,502,175,502,162, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,475,166,475,162, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,496,176,496,175, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,491,189,496,189, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,491,205,491,189, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,487,238,475,238, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,487,240,487,238, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,487,252,487,254, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,315,133,304,133, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,256,133,280,133, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,78,247,270,247, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,307,247,294,247, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,214,133,232,133, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,217,247,217,266, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,217,309,217,291, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,217,309,172,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,154,309,148,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,175,300,175,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,151,300,175,300, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,151,247,151,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,78,237,78,265, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,78,286,78,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,106,309,78,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,130,309,125,309, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,99,309,99,247, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,127,299,99,299, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,127,309,127,299, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,155,191,137,191, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,137,169,137,191, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,78,171,78,169, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,78,190,78,218, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,86,192,86,169, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,86,192,78,192, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,301,3,301, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,286,52,301, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,252,3,252, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,203,3,203, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,3,156,52,156, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,8,25,8,114, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,63,114,3,114, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,75,114,97,114, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,108,114,129,114, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,129,114,129,89, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,52,114,52,128, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,132,89,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,88,25,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,88,114,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,218,89,144,89, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,147,111,147,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,162,111,147,111, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,162,109,162,111, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,162,96,162,89, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,218,89,218,94, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,218,89,218,119, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,8,25,88,25, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,258,337,258,328, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,113,129,96,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,302,355,258,355, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,386,104,386,129, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,377,100,386,104, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,365,94,377,100, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,350,83,365,94, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,337,70,350,83, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,337,70,323,56, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,312,49,323,56, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,295,40,312,49, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,282,37,295,40, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,260,34,282,37, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,253,34,260,34, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,386,128,386,104, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,113,152,156,152, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,113,152,156,152, 'fill'=>color, 'tags'=>['floor1','wall']) - w.create(TkcLine,113,152,113,129, 'fill'=>color, 'tags'=>['floor1','wall']) -end - -# floor2_fg2 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the foreground information for the second -# floor (office outlines and numbers). -# -# Arguments: -# w - The canvas window. -# color - Color to use for drawing foreground information. - -def floor2_fg2(w,color) - i = TkcPolygon.new(w,748,188,755,188,755,205,758,205,758,222, - 800,222,800,168,748,168, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '238' - $floorItems2['238'] = i - w.create(TkcText,774,195, 'text'=>'238', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,726,188,746,188,746,166,800,166,800,131,726,131, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '237' - $floorItems2['237'] = i - w.create(TkcText,763,148.5, 'text'=>'237', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,497,187,497,204,559,204,559,324,641,324, - 643,324,643,291,641,291,641,205,696,205, - 696,291,694,291,694,314,715,314,715,291, - 715,205,755,205,755,190,724,190,724,187, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '246' - $floorItems2['246'] = i - w.create(TkcText,600,264, 'text'=>'246', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,694,279,643,279,643,314,694,314, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '247' - $floorItems2['247'] = i - w.create(TkcText,668.5,296.5, 'text'=>'247', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,232,250,308,250,308,242,339,242,339,246, - 397,246,397,255,476,255,476,250,482,250,559,250, - 559,274,482,274,482,278,396,278,396,274,232,274, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '202' - $floorItems2['202'] = i - w.create(TkcText,285.5,260, 'text'=>'202', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,53,228,53,338,176,338,233,338,233,196, - 306,196,306,180,175,180,175,169,156,169, - 156,196,176,196,176,228, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '206' - $floorItems2['206'] = i - w.create(TkcText,143,267, 'text'=>'206', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,277,6,277,6,338,51,338, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '212' - $floorItems2['212'] = i - w.create(TkcText,28.5,307.5, 'text'=>'212', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,557,276,486,276,486,309,510,309,510,325,557,325, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '245' - $floorItems2['245'] = i - w.create(TkcText,521.5,300.5, 'text'=>'245', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,560,389,599,389,599,326,560,326, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '244' - $floorItems2['244'] = i - w.create(TkcText,579.5,357.5, 'text'=>'244', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,601,389,601,326,643,326,643,389, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '243' - $floorItems2['243'] = i - w.create(TkcText,622,357.5, 'text'=>'243', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,688,316,645,316,645,365,688,365, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '242' - $floorItems2['242'] = i - w.create(TkcText,666.5,340.5, 'text'=>'242', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,802,367,759,367,759,226,802,226, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = 'Barbecue Deck' - $floorItems2['Barbecue Deck'] = i - w.create(TkcText,780.5,296.5, 'text'=>'Barbecue Deck', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,755,262,755,314,717,314,717,262, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '240' - $floorItems2['240'] = i - w.create(TkcText,736,288, 'text'=>'240', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,755,316,689,316,689,365,755,365, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '241' - $floorItems2['241'] = i - w.create(TkcText,722,340.5, 'text'=>'241', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,755,206,717,206,717,261,755,261, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '239' - $floorItems2['239'] = i - w.create(TkcText,736,233.5, 'text'=>'239', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,695,277,643,277,643,206,695,206, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '248' - $floorItems2['248'] = i - w.create(TkcText,669,241.5, 'text'=>'248', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,676,135,676,185,724,185,724,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '236' - $floorItems2['236'] = i - w.create(TkcText,700,160, 'text'=>'236', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,675,135,635,135,635,145,628,145,628,185,675,185, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '235' - $floorItems2['235'] = i - w.create(TkcText,651.5,160, 'text'=>'235', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,626,143,633,143,633,135,572,135, - 572,143,579,143,579,185,626,185, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '234' - $floorItems2['234'] = i - w.create(TkcText,606,160, 'text'=>'234', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,557,135,571,135,571,145,578,145, - 578,185,527,185,527,131,557,131, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '233' - $floorItems2['233'] = i - w.create(TkcText,552.5,158, 'text'=>'233', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,476,249,557,249,557,205,476,205, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '230' - $floorItems2['230'] = i - w.create(TkcText,516.5,227, 'text'=>'230', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,476,164,486,164,486,131,525,131,525,185,476,185, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '232' - $floorItems2['232'] = i - w.create(TkcText,500.5,158, 'text'=>'232', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,476,186,495,186,495,204,476,204, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '229' - $floorItems2['229'] = i - w.create(TkcText,485.5,195, 'text'=>'229', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,474,207,409,207,409,187,399,187,399,164,474,164, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '227' - $floorItems2['227'] = i - w.create(TkcText,436.5,185.5, 'text'=>'227', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,399,228,399,253,474,253,474,209,409,209,409,228, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '228' - $floorItems2['228'] = i - w.create(TkcText,436.5,231, 'text'=>'228', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,397,246,397,226,407,226,407,189,377,189,377,246, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '226' - $floorItems2['226'] = i - w.create(TkcText,392,217.5, 'text'=>'226', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,377,169,316,169,316,131,397,131,397,188,377,188, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '225' - $floorItems2['225'] = i - w.create(TkcText,356.5,150, 'text'=>'225', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,234,198,306,198,306,249,234,249, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '224' - $floorItems2['224'] = i - w.create(TkcText,270,223.5, 'text'=>'224', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,270,179,306,179,306,170,314,170,314,135,270,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '223' - $floorItems2['223'] = i - w.create(TkcText,292,157, 'text'=>'223', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,268,179,221,179,221,135,268,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '222' - $floorItems2['222'] = i - w.create(TkcText,244.5,157, 'text'=>'222', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,177,179,219,179,219,135,177,135, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '221' - $floorItems2['221'] = i - w.create(TkcText,198,157, 'text'=>'221', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,299,327,349,327,349,284,341,284,341,276,299,276, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '204' - $floorItems2['204'] = i - w.create(TkcText,324,301.5, 'text'=>'204', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,234,276,297,276,297,327,257,327,257,338,234,338, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '205' - $floorItems2['205'] = i - w.create(TkcText,265.5,307, 'text'=>'205', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,256,385,256,340,212,340,212,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '207' - $floorItems2['207'] = i - w.create(TkcText,234,362.5, 'text'=>'207', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,210,340,164,340,164,385,210,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '208' - $floorItems2['208'] = i - w.create(TkcText,187,362.5, 'text'=>'208', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,115,340,162,340,162,385,115,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '209' - $floorItems2['209'] = i - w.create(TkcText,138.5,362.5, 'text'=>'209', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,89,228,89,156,53,156,53,228, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '217' - $floorItems2['217'] = i - w.create(TkcText,71,192, 'text'=>'217', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,89,169,97,169,97,190,89,190, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '217A' - $floorItems2['217A'] = i - w.create(TkcText,93,179.5, 'text'=>'217A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,89,156,89,168,95,168,95,135,53,135,53,156, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '216' - $floorItems2['216'] = i - w.create(TkcText,71,145.5, 'text'=>'216', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,179,51,135,6,135,6,179, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '215' - $floorItems2['215'] = i - w.create(TkcText,28.5,157, 'text'=>'215', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,227,6,227,6,180,51,180, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '214' - $floorItems2['214'] = i - w.create(TkcText,28.5,203.5, 'text'=>'214', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,51,275,6,275,6,229,51,229, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '213' - $floorItems2['213'] = i - w.create(TkcText,28.5,252, 'text'=>'213', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,114,340,67,340,67,385,114,385, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '210' - $floorItems2['210'] = i - w.create(TkcText,90.5,362.5, 'text'=>'210', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,59,389,59,385,65,385,65,340,1,340,1,389, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '211' - $floorItems2['211'] = i - w.create(TkcText,33,364.5, 'text'=>'211', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,393,309,350,309,350,282,342,282,342,276,393,276, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '203' - $floorItems2['203'] = i - w.create(TkcText,367.5,292.5, 'text'=>'203', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,99,191,91,191,91,226,174,226,174,198, - 154,198,154,192,109,192,109,169,99,169, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '220' - $floorItems2['220'] = i - w.create(TkcText,132.5,208.5, 'text'=>'220', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = 'Priv Lift2' - $floorItems2['Priv Lift2'] = i - w.create(TkcText,323,188, 'text'=>'Priv Lift2', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = 'Pub Lift 2' - $floorItems2['Pub Lift 2'] = i - w.create(TkcText,323,223, 'text'=>'Pub Lift 2', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '218' - $floorItems2['218'] = i - w.create(TkcText,136,149.5, 'text'=>'218', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '219' - $floorItems2['219'] = i - w.create(TkcText,132.5,180, 'text'=>'219', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, - 'fill'=>'', 'tags'=>['floor2','room']) - $floorLabels2[i.id] = '201' - $floorItems2['201'] = i - w.create(TkcText,358,209, 'text'=>'201', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor2','label']) - w.create(TkcLine,641,186,678,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,350,757,367, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,634,133,634,144, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,634,144,627,144, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,572,133,572,144, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,572,144,579,144, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,398,129,398,162, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,174,197,175,197, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,175,197,175,227, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,206,757,221, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,396,188,408,188, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,727,189,725,189, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,747,167,802,167, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,747,167,747,189, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,755,189,739,189, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,769,224,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,802,224,802,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,802,129,725,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,725,189,725,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,725,186,690,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,676,133,676,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,627,144,627,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,629,186,593,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,579,144,579,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,559,129,559,133, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,725,133,559,133, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,484,162,484,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,559,129,484,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,526,129,526,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,540,186,581,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,528,186,523,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,511,186,475,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,496,190,496,186, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,496,205,496,202, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,475,205,527,205, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,205,539,205, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,205,558,249, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,249,475,249, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,662,206,642,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,695,206,675,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,695,278,642,278, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,642,291,642,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,695,291,695,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,716,208,716,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,206,716,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,221,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,793,224,802,224, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,262,716,262, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,716,220,716,264, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,716,315,716,276, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,315,703,315, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,325,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,757,367,644,367, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,689,367,689,315, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,647,315,644,315, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,659,315,691,315, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,600,325,600,391, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,627,325,644,325, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,644,391,644,315, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,615,325,575,325, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,644,391,558,391, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,563,325,558,325, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,391,558,314, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,327,508,327, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,275,484,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,558,302,558,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,508,327,508,311, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,484,311,508,311, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,484,275,484,311, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,475,208,408,208, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,408,206,408,210, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,408,222,408,227, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,408,227,398,227, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,398,227,398,254, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,408,188,408,194, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,383,188,376,188, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,398,188,398,162, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,398,162,484,162, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,475,162,475,254, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,398,254,475,254, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,484,280,395,280, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,395,311,395,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,307,197,293,197, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,278,197,233,197, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,233,197,233,249, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,307,179,284,179, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,233,249,278,249, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,269,179,269,133, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,220,179,220,133, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,155,191,110,191, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,90,190,98,190, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,98,169,98,190, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,133,52,165, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,214,52,177, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,226,52,262, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,274,52,276, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,234,275,234,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,226,339,258,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,211,387,211,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,214,339,177,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,258,387,60,387, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,3,133,3,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,165,339,129,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,117,339,80,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,68,339,59,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,0,339,46,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,60,391,0,391, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,0,339,0,391, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,60,387,60,391, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,258,329,258,387, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,350,329,258,329, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,395,311,350,311, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,398,129,315,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,176,133,315,133, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,176,129,96,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,3,133,96,133, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,66,387,66,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,115,387,115,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,163,387,163,339, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,234,275,276,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,288,275,309,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,298,275,298,329, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,341,283,350,283, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,321,275,341,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,375,275,395,275, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,315,129,315,170, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,376,170,307,170, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,307,250,307,170, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,376,245,376,170, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,340,241,307,241, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,340,245,340,224, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,340,210,340,201, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,340,187,340,170, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,340,206,307,206, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,293,250,307,250, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,271,179,238,179, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,226,179,195,179, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,176,129,176,179, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,182,179,176,179, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,174,169,176,169, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,162,169,90,169, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,96,169,96,129, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,175,227,90,227, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,90,190,90,227, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,179,3,179, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,228,3,228, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,52,276,3,276, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,155,177,155,169, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,110,191,110,169, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,155,189,155,197, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,350,283,350,329, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,162,197,155,197, 'fill'=>color, 'tags'=>['floor2','wall']) - w.create(TkcLine,341,275,341,283, 'fill'=>color, 'tags'=>['floor2','wall']) -end - -# floor2_fg3 -- -# This method represents part of the floorplan database. When -# invoked, it instantiates the foreground information for the third -# floor (office outlines and numbers). -# -# Arguments: -# w - The canvas window. -# color - Color to use for drawing foreground information. - -def floor2_fg3(w,color) - i = TkcPolygon.new(w,89,228,89,180,70,180,70,228, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '316' - $floorItems2['316'] = i - w.create(TkcText,79.5,204, 'text'=>'316', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,115,368,162,368,162,323,115,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '309' - $floorItems2['309'] = i - w.create(TkcText,138.5,345.5, 'text'=>'309', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,164,323,164,368,211,368,211,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '308' - $floorItems2['308'] = i - w.create(TkcText,187.5,345.5, 'text'=>'308', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,256,368,212,368,212,323,256,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '307' - $floorItems2['307'] = i - w.create(TkcText,234,345.5, 'text'=>'307', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,244,276,297,276,297,327,260,327,260,321,244,321, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '305' - $floorItems2['305'] = i - w.create(TkcText,270.5,301.5, 'text'=>'305', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,251,219,251,203,244,203,244,219, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '324B' - $floorItems2['324B'] = i - w.create(TkcText,247.5,211, 'text'=>'324B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,251,249,244,249,244,232,251,232, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '324A' - $floorItems2['324A'] = i - w.create(TkcText,247.5,240.5, 'text'=>'324A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,223,135,223,179,177,179,177,135, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '320' - $floorItems2['320'] = i - w.create(TkcText,200,157, 'text'=>'320', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,114,368,114,323,67,323,67,368, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '310' - $floorItems2['310'] = i - w.create(TkcText,90.5,345.5, 'text'=>'310', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,23,277,23,321,68,321,68,277, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '312' - $floorItems2['312'] = i - w.create(TkcText,45.5,299, 'text'=>'312', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,23,229,68,229,68,275,23,275, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '313' - $floorItems2['313'] = i - w.create(TkcText,45.5,252, 'text'=>'313', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,68,227,23,227,23,180,68,180, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '314' - $floorItems2['314'] = i - w.create(TkcText,40.5,203.5, 'text'=>'314', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,95,179,95,135,23,135,23,179, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '315' - $floorItems2['315'] = i - w.create(TkcText,59,157, 'text'=>'315', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,99,226,99,204,91,204,91,226, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '316B' - $floorItems2['316B'] = i - w.create(TkcText,95,215, 'text'=>'316B', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,91,202,99,202,99,180,91,180, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '316A' - $floorItems2['316A'] = i - w.create(TkcText,95,191, 'text'=>'316A', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,97,169,109,169,109,192,154,192,154,198, - 174,198,174,226,101,226,101,179,97,179, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '319' - $floorItems2['319'] = i - w.create(TkcText,141.5,209, 'text'=>'319', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,65,368,58,368,58,389,1,389,1,333,23,333,23,323,65,323, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '311' - $floorItems2['311'] = i - w.create(TkcText,29.5,361, 'text'=>'311', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '318' - $floorItems2['318'] = i - w.create(TkcText,132.5,180, 'text'=>'318', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '317' - $floorItems2['317'] = i - w.create(TkcText,136,149.5, 'text'=>'317', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,274,194,274,221,306,221,306,194, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '323' - $floorItems2['323'] = i - w.create(TkcText,290,207.5, 'text'=>'323', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,306,222,274,222,274,249,306,249, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '325' - $floorItems2['325'] = i - w.create(TkcText,290,235.5, 'text'=>'325', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,263,179,224,179,224,135,263,135, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '321' - $floorItems2['321'] = i - w.create(TkcText,243.5,157, 'text'=>'321', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,314,169,306,169,306,192,273,192, - 264,181,264,135,314,135, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '322' - $floorItems2['322'] = i - w.create(TkcText,293.5,163.5, 'text'=>'322', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = 'Pub Lift3' - $floorItems2['Pub Lift3'] = i - w.create(TkcText,323,223, 'text'=>'Pub Lift3', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = 'Priv Lift3' - $floorItems2['Priv Lift3'] = i - w.create(TkcText,323,188, 'text'=>'Priv Lift3', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,350,284,376,284,376,276,397,276,397,309,350,309, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '303' - $floorItems2['303'] = i - w.create(TkcText,373.5,292.5, 'text'=>'303', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,272,203,272,249,252,249,252,230, - 244,230,244,221,252,221,252,203, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '324' - $floorItems2['324'] = i - w.create(TkcText,262,226, 'text'=>'324', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,299,276,299,327,349,327,349,284,341,284,341,276, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '304' - $floorItems2['304'] = i - w.create(TkcText,324,301.5, 'text'=>'304', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '301' - $floorItems2['301'] = i - w.create(TkcText,358,209, 'text'=>'301', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,397,246,377,246,377,185,397,185, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '327' - $floorItems2['327'] = i - w.create(TkcText,387,215.5, 'text'=>'327', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,316,131,316,169,377,169,377,185,397,185,397,131, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '326' - $floorItems2['326'] = i - w.create(TkcText,365.5,150, 'text'=>'326', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,308,251,242,251,242,274,342,274,342,282,375, 282, - 375,274,397,274,397,248,339,248,339,242,308,242, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '302' - $floorItems2['302'] = i - w.create(TkcText,319.5,261, 'text'=>'302', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - i = TkcPolygon.new(w,70,321,242,321,242,200,259,200,259,203,272,203, - 272,193,263,180,242,180,175,180,175,169,156,169, - 156,196,177,196,177,228,107,228,70,228,70,275,107,275, - 107,248,160,248,160,301,107,301,107,275,70,275, - 'fill'=>'', 'tags'=>['floor3','room']) - $floorLabels2[i.id] = '306' - $floorItems2['306'] = i - w.create(TkcText,200.5,284.5, 'text'=>'306', 'fill'=>color, - 'anchor'=>'c', 'tags'=>['floor3','label']) - w.create(TkcLine,341,275,341,283, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,162,197,155,197, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,396,247,399,247, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,399,129,399,311, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,258,202,243,202, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,350,283,350,329, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,251,231,243,231, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,243,220,251,220, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,243,250,243,202, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,155,197,155,190, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,110,192,110,169, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,155,192,110,192, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,155,177,155,169, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,176,197,176,227, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,69,280,69,274, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,21,276,69,276, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,69,262,69,226, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,21,228,69,228, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,21,179,75,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,69,179,69,214, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,90,220,90,227, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,90,204,90,202, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,90,203,100,203, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,90,187,90,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,90,227,176,227, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,100,179,100,227, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,100,179,87,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,96,179,96,129, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,162,169,96,169, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,173,169,176,169, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,182,179,176,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,176,129,176,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,195,179,226,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,224,133,224,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,264,179,264,133, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,238,179,264,179, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,207,273,193, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,235,273,250, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,224,273,219, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,193,307,193, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,222,307,222, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,250,307,250, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,384,247,376,247, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,340,206,307,206, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,340,187,340,170, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,340,210,340,201, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,340,247,340,224, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,340,241,307,241, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,376,247,376,170, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,307,250,307,170, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,376,170,307,170, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,315,129,315,170, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,376,283,366,283, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,376,283,376,275, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,399,275,376,275, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,341,275,320,275, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,341,283,350,283, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,298,275,298,329, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,308,275,298,275, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,243,322,243,275, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,243,275,284,275, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,258,322,226,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,212,370,212,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,214,322,177,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,163,370,163,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,165,322,129,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,84,322,117,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,71,322,64,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,115,322,115,370, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,66,322,66,370, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,52,322,21,322, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,21,331,0,331, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,21,331,21,133, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,96,133,21,133, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,176,129,96,129, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,315,133,176,133, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,315,129,399,129, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,399,311,350,311, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,350,329,258,329, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,258,322,258,370, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,60,370,258,370, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,60,370,60,391, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,0,391,0,331, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,60,391,0,391, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,307,250,307,242, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,273,250,307,250, 'fill'=>color, 'tags'=>['floor3','wall']) - w.create(TkcLine,258,250,243,250, 'fill'=>color, 'tags'=>['floor3','wall']) -end - -# Below is the "main program" that creates the floorplan demonstration. - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($floor2_demo) && $floor2_demo - $floor2_demo.destroy - $floor2_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$floor2_demo = TkToplevel.new {|w| - title("Floorplan Canvas Demonstration 2") - iconname("Floorplan2") - positionWindow(w) - geometry('+20+20') - minsize(100,100) -} - -base_frame = TkFrame.new($floor2_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'8i', 'justify'=>'left', - 'text'=>"ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯ãƒ‡ã‚£ã‚¸ã‚¿ãƒ«ã‚¨ã‚¯ã‚¤ãƒƒãƒ—メント社ã®ã‚¦ã‚§ã‚¹ã‚¿ãƒ³ãƒªã‚µãƒ¼ãƒãƒ©ãƒœãƒ©ãƒˆãƒª (DECWRL) ã®é–“å–ã‚ŠãŒæ›¸ã‹ã‚ŒãŸã‚­ãƒ£ãƒ³ãƒã‚¹ widget ãŒå…¥ã£ã¦ã„ã¾ã™ã€‚ã“れ㯠3階建ã¦ã§ã€å¸¸ã«ãã®ã†ã¡ã®1階分ãŒé¸æŠžã€ã¤ã¾ã‚Šãã®é–“å–ã‚ŠãŒè¡¨ç¤ºã•ã‚Œã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚ã‚る階をé¸æŠžã™ã‚‹ã«ã¯ã€ãã®ä¸Šã§ãƒžã‚¦ã‚¹ã®å·¦ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。マウスãŒé¸æŠžã•ã‚Œã¦ã„る階ã®ä¸Šã‚’å‹•ãã¨ã€ãã®ä¸‹ã«ã‚る部屋ã®è‰²ãŒå¤‰ã‚ã‚Šã€éƒ¨å±‹ç•ªå·ãŒã€Œéƒ¨å±‹ç•ªå·:ã€ã‚¨ãƒ³ãƒˆãƒªã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ã¾ãŸã€ã‚¨ãƒ³ãƒˆãƒªã«éƒ¨å±‹ç•ªå·ã‚’書ãã¨ãã®éƒ¨å±‹ã®è‰²ãŒå¤‰ã‚ã‚Šã¾ã™ã€‚"){ - pack('side'=>'top') -} - -# frame ç”Ÿæˆ -$floor2_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $floor2_demo - $floor2_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'floor2'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$floor2_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# 変数設定 -$floorLabels2 = {} -$floorItems2 = {} - -# canvas 設定 -if $tk_version =~ /^4\.[01]/ - $floor2_canvas_frame = TkFrame.new(base_frame,'bd'=>2,'relief'=>'sunken', - 'highlightthickness'=>2) - $floor2_canvas = TkCanvas.new($floor2_canvas_frame, - 'width'=>900, 'height'=>500, 'borderwidth'=>0, - 'highlightthickness'=>0) {|c| - TkScrollbar.new(base_frame, 'orient'=>'horiz', - 'command'=>proc{|*args| c.xview(*args)}){|hs| - c.xscrollcommand(proc{|first,last| hs.set first,last}) - pack('side'=>'bottom', 'fill'=>'x') - } - TkScrollbar.new(base_frame, 'command'=>proc{|*args| c.yview(*args)}){|vs| - c.yscrollcommand(proc{|first,last| vs.set first,last}) - pack('side'=>'right', 'fill'=>'y') - } - } - $floor2_canvas_frame.pack('side'=>'top','fill'=>'both', 'expand'=>'yes') - $floor2_canvas.pack('expand'=>'yes', 'fill'=>'both') - -else - TkFrame.new(base_frame) {|f| - pack('side'=>'top', 'fill'=>'both', 'expand'=>'yes') - - h = TkScrollbar.new(f, 'highlightthickness'=>0, 'orient'=>'horizontal') - v = TkScrollbar.new(f, 'highlightthickness'=>0, 'orient'=>'vertical') - - TkFrame.new(f, 'bd'=>2, 'relief'=>'sunken') {|f1| - $floor2_canvas = TkCanvas.new(f1, 'width'=>900, 'height'=>500, - 'borderwidth'=>0, - 'highlightthickness'=>0) { - xscrollcommand(proc{|first,last| h.set first,last}) - yscrollcommand(proc{|first,last| v.set first,last}) - pack('expand'=>'yes', 'fill'=>'both') - } - grid('padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - } - - v.grid('padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>1, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - h.grid('padx'=>1, 'pady'=>1, 'row'=>1, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - - TkGrid.rowconfigure(f, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure(f, 0, 'weight'=>1, 'minsize'=>0) - - pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>1) - - v.command(proc{|*args| $floor2_canvas.yview(*args)}) - h.command(proc{|*args| $floor2_canvas.xview(*args)}) - } -end - -# Create an entry for displaying and typing in current room. - -$currentRoom2 = TkVariable.new -$floor2_entry = TkEntry.new($floor2_canvas, 'width'=>10, 'relief'=>'sunken', - 'bd'=>2, 'textvariable'=>$currentRoom2) - -# Choose colors, then fill in the floorplan. - -$floor2_colors = {} -if TkWinfo.depth($floor2_canvas) > 1 - $floor2_colors['bg1'] = '#a9c1da' - $floor2_colors['outline1'] = '#77889a' - $floor2_colors['bg2'] = '#9ab0c6' - $floor2_colors['outline2'] = '#687786' - $floor2_colors['bg3'] = '#8ba0b3' - $floor2_colors['outline3'] = '#596673' - $floor2_colors['offices'] = 'Black' - $floor2_colors['active'] = '#c4d1df' -else - $floor2_colors['bg1'] = 'white' - $floor2_colors['outline1'] = 'black' - $floor2_colors['bg2'] = 'white' - $floor2_colors['outline2'] = 'black' - $floor2_colors['bg3'] = 'white' - $floor2_colors['outline3'] = 'black' - $floor2_colors['offices'] = 'Black' - $floor2_colors['active'] = 'black' -end - -$activeFloor2 = '' -floorDisplay2 $floor2_canvas,3 - -# Set up event bindings for canvas: - -$floor2_canvas.itembind('floor1', '1', proc{floorDisplay2 $floor2_canvas,1}) -$floor2_canvas.itembind('floor2', '1', proc{floorDisplay2 $floor2_canvas,2}) -$floor2_canvas.itembind('floor3', '1', proc{floorDisplay2 $floor2_canvas,3}) -$floor2_canvas.itembind('room', 'Enter', proc{newRoom2 $floor2_canvas}) -$floor2_canvas.itembind('room', 'Leave', proc{$currentRoom2.value = ''}) -$floor2_canvas.bind('2', proc{|x,y| $floor2_canvas.scan_mark x,y}, '%x %y') -$floor2_canvas.bind('B2-Motion', - proc{|x,y| $floor2_canvas.scan_dragto x,y}, '%x %y') -$floor2_canvas.bind('Destroy', proc{$currentRoom2.unset}) -$currentRoom2.value = '' -$currentRoom2.trace('w',proc{roomChanged2 $floor2_canvas}) diff --git a/ext/tk/sample/demos-jp/form.rb b/ext/tk/sample/demos-jp/form.rb deleted file mode 100644 index 751852cbf7..0000000000 --- a/ext/tk/sample/demos-jp/form.rb +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# form widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($form_demo) && $form_demo - $form_demo.destroy - $form_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$form_demo = TkToplevel.new {|w| - title("Form Demonstration") - iconname("form") - positionWindow(w) -} - -base_frame = TkFrame.new($form_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯ç°¡å˜ãªãƒ•ã‚©ãƒ¼ãƒ å…¥åŠ›ç”¨ã«ãªã£ã¦ã„ã¦ã€ã•ã¾ã–ã¾ãªã‚¨ãƒ³ãƒˆãƒªã«å…¥åŠ›ãŒã§ãã¾ã™ã€‚タブã§ã‚¨ãƒ³ãƒˆãƒªã®åˆ‡æ›¿ãˆãŒã§ãã¾ã™ã€‚" -} -msg.pack('side'=>'top', 'fill'=>'x') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $form_demo - $form_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'form'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# entry ç”Ÿæˆ -form_data = [] -(1..5).each{|i| - f = TkFrame.new(base_frame, 'bd'=>2) - e = TkEntry.new(f, 'relief'=>'sunken', 'width'=>40) - l = TkLabel.new(f) - e.pack('side'=>'right') - l.pack('side'=>'left') - form_data[i] = {'frame'=>f, 'entry'=>e, 'label'=>l} -} - -# 文字列設定 -form_data[1]['label'].text('åå‰:') -form_data[2]['label'].text('ä½æ‰€:') -form_data[5]['label'].text('電話:') - -# pack -(1..5).each{|i| form_data[i]['frame'].pack('side'=>'top', 'fill'=>'x')} - diff --git a/ext/tk/sample/demos-jp/goldberg.rb b/ext/tk/sample/demos-jp/goldberg.rb deleted file mode 100644 index a5718dae6b..0000000000 --- a/ext/tk/sample/demos-jp/goldberg.rb +++ /dev/null @@ -1,2012 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# Ruby/Tk Goldverg demo (called by 'widget') -# -# Based on Tcl/Tk8.5a2 widget demos. -# The following is the original comment of TkGoldberg.tcl. -# -#>>##+################################################################# -#>># -#>># TkGoldberg.tcl -#>># by Keith Vetter, March 13, 2003 -#>># -#>># "Man will always find a difficult means to perform a simple task" -#>># Rube Goldberg -#>># -#>># Reproduced here with permission. -#>># -#>>##+################################################################# -#>># -#>># Keith Vetter 2003-03-21: this started out as a simple little program -#>># but was so much fun that it grew and grew. So I apologize about the -#>># size but I just couldn't resist sharing it. -#>># -#>># This is a whizzlet that does a Rube Goldberg type animation, the -#>># design of which comes from an New Years e-card from IncrediMail. -#>># That version had nice sound effects which I eschewed. On the other -#>># hand, that version was in black and white (actually dark blue and -#>># light blue) and this one is fully colorized. -#>># -#>># One thing I learned from this project is that drawing filled complex -#>># objects on a canvas is really hard. More often than not I had to -#>># draw each item twice--once with the desired fill color but no -#>># outline, and once with no fill but with the outline. Another trick -#>># is erasing by drawing with the background color. Having a flood fill -#>># command would have been extremely helpful. -#>># -#>># Two wiki pages were extremely helpful: Drawing rounded rectangles -#>># which I generalized into Drawing rounded polygons, and regular -#>># polygons which allowed me to convert ovals and arcs into polygons -#>># which could then be rotated (see Canvas Rotation). I also wrote -#>># Named Colors to aid in the color selection. -#>># -#>># I could comment on the code, but it's just 26 state machines with -#>># lots of canvas create and move calls. - -if defined?($goldberg_demo) && $goldberg_demo - $goldberg_demo.destroy - $goldberg_demo = nil -end - -# demo toplevel widget -$goldberg_demo = TkToplevel.new {|w| - title("Tk Goldberg (demonstration)") - iconname("goldberg") -# positionWindow(w) -} - -base_frame = TkFrame.new($goldberg_demo).pack(:fill=>:both, :expand=>true) - -=begin -# label -msg = TkLabel.new($goldberg_demo) { - font 'Arial 10' - wraplength '4i' - justify 'left' - text "ã“ã‚Œã¯ã€ã‚ãªãŸãŒè‡ªåˆ†ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ã„ã‹ã«å…¥ã‚Šçµ„ã‚“ã ã‚‚ã®ã«ã§ãã‚‹ã‹ã‚’示ã™ã¨ã„ã†ã ã‘ã®ãŸã‚ã®ãƒ‡ãƒ¢ã§ã™ã€‚ボールをクリックã™ã‚Œã°ç‰©ãŒå‹•ã始ã‚ã¾ã™ï¼\n\n\"Man will always find a difficult means to perform a simple task\"\n - Rube Goldberg" -} -msg.pack('side'=>'top') -=end - -=begin -# frame -TkFrame.new($goldberg_demo) {|frame| - TkButton.new(frame) { - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $goldberg_demo - $goldberg_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'goldberg'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') -=end - -######################################### - -class TkGoldberg_Demo - def initialize(parent) - @parent = parent - - @S = {} - @S['title'] = 'Tk Goldberg' - @S['speed'] = TkVariable.new(5) - @S['cnt'] = TkVariable.new(0) - # @S['message'] = TkVariable.new("\\nWelcome\\nto\\nRuby/Tk") - @S['message'] = TkVariable.new("\\n よã†ã“ãï¼\\nRuby/Tk\\nã®\\n世界ã¸") - @S['pause'] = TkVariable.new - @S['details'] = TkVariable.new(true) - - @S['mode'] = TkVariable.new(:MSTART, :symbol) - # :MSTART, :MGO, :MPAUSE, :MSSTEP, :MBSTEP, :MDONE, :MDEBUG - - # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 - @speed = [1, 10, 20, 50, 80, 100, 150, 200, 300, 400, 500] - - # colors - @C = {} - @C['fg'] = 'black' - # @C['bg'] = 'gray75' - @C['bg'] = 'cornflowerblue' - - @C['0'] = 'white'; @C['1a'] = 'darkgreen'; @C['1b'] = 'yellow' - @C['2'] = 'red'; @C['3a'] = 'green'; @C['3b'] = 'darkblue' - @C['4'] = @C['fg']; @C['5a'] = 'brown'; @C['5b'] = 'white' - @C['6'] = 'magenta'; @C['7'] = 'green'; @C['8'] = @C['fg'] - @C['9'] = 'blue4'; @C['10a'] = 'white'; @C['10b'] = 'cyan' - @C['11a'] = 'yellow'; @C['11b'] = 'mediumblue'; @C['12'] = 'tan2' - @C['13a'] = 'yellow'; @C['13b'] = 'red'; @C['14'] = 'white' - @C['15a'] = 'green'; @C['15b'] = 'yellow'; @C['16'] = 'gray65' - @C['17'] = '#A65353'; @C['18'] = @C['fg']; @C['19'] = 'gray50' - @C['20'] = 'cyan'; @C['21'] = 'gray65'; @C['22'] = @C['20'] - @C['23a'] = 'blue'; @C['23b'] = 'red'; @C['23c'] = 'yellow' - @C['24a'] = 'red'; @C['24b'] = 'white'; - - @STEP = TkVariable.new_hash - @STEP.default_value_type = :numeric - - @XY = {} - - @XY6 = { - '-1'=>[366, 207], '-2'=>[349, 204], '-3'=>[359, 193], '-4'=>[375, 192], - '-5'=>[340, 190], '-6'=>[349, 177], '-7'=>[366, 177], '-8'=>[380, 176], - '-9'=>[332, 172], '-10'=>[342, 161], '-11'=>[357, 164], - '-12'=>[372, 163], '-13'=>[381, 149], '-14'=>[364, 151], - '-15'=>[349, 146], '-16'=>[333, 148], '0'=>[357, 219], - '1'=>[359, 261], '2'=>[359, 291], '3'=>[359, 318], '4'=>[361, 324], - '5'=>[365, 329], '6'=>[367, 334], '7'=>[367, 340], '8'=>[366, 346], - '9'=>[364, 350], '10'=>[361, 355], '11'=>[359, 370], '12'=>[359, 391], - '13,0'=>[360, 456], '13,1'=>[376, 456], '13,2'=>[346, 456], - '13,3'=>[330, 456], '13,4'=>[353, 444], '13,5'=>[368, 443], - '13,6'=>[339, 442], '13,7'=>[359, 431], '13,8'=>[380, 437], - '13,9'=>[345, 428], '13,10'=>[328, 434], '13,11'=>[373, 424], - '13,12'=>[331, 420], '13,13'=>[360, 417], '13,14'=>[345, 412], - '13,15'=>[376, 410], '13,16'=>[360, 403] - } - - @timer = TkTimer.new(@speed[@S['speed'].numeric]){|timer| - timer.set_interval(go) - } - - do_display - reset - - # Start everything going - @timer.start - end - - def do_display() - @ctrl = TkFrame.new(@parent, :relief=>:ridge, :bd=>2, :padx=>5, :pady=>5) - @screen = TkFrame.new(@parent, :bd=>2, - :relief=>:raised).pack(:side=>:left, :fill=>:both, - :expand=>true) - - @canvas = TkCanvas.new(@parent, :width=>850, :height=>700, - :bg=>@C['bg'], :highlightthickness=>0){ - scrollregion([0, 0, 1000, 1000]) # Kludge to move everything up - yview_moveto(0.05) - }.pack(:in=>@screen, :side=>:top, :fill=>:both, :expand=>true) - - @canvas.bind('3'){ @pause.invoke } - @canvas.bind('Destroy'){ @timer.stop } - - do_ctrl_frame - do_detail_frame - - # msg = TkLabel.new(@parent, :bg=>@C['bg'], :fg=>'white') { - msg = Tk::Label.new(@parent, :bg=>@C['bg'], :fg=>'white') { - font 'Arial 10' - wraplength 600 - justify 'left' - text "ã“ã‚Œã¯ã€ã‚ãªãŸãŒè‡ªåˆ†ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ã„ã‹ã«å…¥ã‚Šçµ„ã‚“ã ã‚‚ã®ã«ã§ãã‚‹ã‹ã‚’示ã™ã¨ã„ã†ã ã‘ã®ãŸã‚ã®ãƒ‡ãƒ¢ã§ã™ã€‚ボールをクリックã™ã‚Œã°ç‰©ãŒå‹•ã始ã‚ã¾ã™ï¼\n\"Man will always find a difficult means to perform a simple task\" - Rube Goldberg" - } - msg.place(:in=>@canvas, :relx=>0, :rely=>0, :anchor=>:nw) - - frame = TkFrame.new(@parent, :bg=>@C['bg']) - - # TkButton.new(frame, :bg=>@C['bg'], :activebackground=>@C['bg']) { - Tk::Button.new(frame, :bg=>@C['bg'], :activebackground=>@C['bg']) { - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $goldberg_demo - $goldberg_demo = nil - tmppath.destroy - } - }.pack('side'=>'left') - - # TkButton.new(frame, :bg=>@C['bg'], :activebackground=>@C['bg']) { - Tk::Button.new(frame, :bg=>@C['bg'], :activebackground=>@C['bg']) { - text 'コードå‚ç…§' - command proc{showCode 'goldberg'} - }.pack('side'=>'left', 'padx'=>5) - - # @show = TkButton.new(frame, :text=>'>>', :command=>proc{show_ctrl}, - @show = Tk::Button.new(frame, :text=>'>>', :command=>proc{show_ctrl}, - :bg=>@C['bg'], :activebackground=>@C['bg']) - @show.pack('side'=>'left') - frame.place(:in=>@canvas, :relx=>1, :rely=>0, :anchor=>:ne) - - Tk.update - end - - def do_ctrl_frame - @start = Tk::Button.new(@parent, :text=>'Start', :bd=>6, - :command=>proc{do_button(0)}) - if font = @start['font'] - @start.font(font.weight('bold')) - end - - @pause = TkCheckbutton.new(@parent, :text=>'Pause', :font=>font, - :command=>proc{do_button(1)}, :relief=>:raised, - :variable=>@S['pause']) - - @step = TkButton.new(@parent, :text=>'Single Step', :font=>font, - :command=>proc{do_button(2)}) - @bstep = TkButton.new(@parent, :text=>'Big Step', :font=>font, - :command=>proc{do_button(4)}) - @reset = TkButton.new(@parent, :text=>'Reset', :font=>font, - :command=>proc{do_button(3)}) - - @details = TkFrame.new(@parent, :bd=>2, :relief=>:ridge) - @detail = TkCheckbutton.new(@parent, :text=>'Details', :font=>font, - :relief=>:raised, :variable=>@S['details']) - - @msg_entry = TkEntry.new(@parent, :textvariable=>@S['message'], - :justify=>:center) - @speed_scale = TkScale.new(@parent, :orient=>:horizontal, - :from=>1, :to=>10, :font=>font, - :variable=>@S['speed'], :bd=>2, - :relief=>:ridge, :showvalue=>false) - @about = TkButton.new(@parent, :text=>'About', - :command=>proc{about}, :font=>font) - - Tk.grid(@start, :in=>@ctrl, :row=>0, :sticky=>:ew) - @ctrl.grid_rowconfigure(1, :minsize=>10) - Tk.grid(@pause, :in=>@ctrl, :row=>2, :sticky=>:ew) - Tk.grid(@step, :in=>@ctrl, :sticky=>:ew) - Tk.grid(@bstep, :in=>@ctrl, :sticky=>:ew) - Tk.grid(@reset, :in=>@ctrl, :sticky=>:ew) - @ctrl.grid_rowconfigure(10, :minsize=>20) - Tk.grid(@details, :in=>@ctrl, :row=>11, :sticky=>:ew) - Tk.grid(@detail, :in=>@details, :row=>0, :sticky=>:ew) - @ctrl.grid_rowconfigure(50, :weight=>1) - - @S['mode'].trace('w', proc{|*args| active_GUI(*args)}) - @S['details'].trace('w', proc{|*args| active_GUI(*args)}) - @S['speed'].trace('w', proc{|*args| active_GUI(*args)}) - - Tk.grid(@msg_entry, :in=>@ctrl, :row=>98, :sticky=>:ew, :pady=>5) - Tk.grid(@speed_scale, :in=>@ctrl, :row=>99, :sticky=>:ew) - Tk.grid(@about, :in=>@ctrl, :row=>100, :sticky=>:ew) - - @reset.bind('3'){@S['mode'].value = -1} # Debugging - end - - def do_detail_frame - @f_details = TkFrame.new(@details) - - @label = TkLabel.new(@f_details, :textvariable=>@S['cnt'], - :bd=>1, :relief=>:solid, :bg=>'white') - Tk.grid(@label, '-', '-', '-', :sticky=>:ew, :row=>0) - - idx = 1 - loop { - break unless respond_to?("move#{idx}") - l = TkLabel.new(@f_details, :text=>idx, :anchor=>:e, - :width=>2, :bd=>1, :relief=>:solid, :bg=>'white') - @STEP[idx] = 0 - ll = TkLabel.new(@f_details, :textvariable=>@STEP.ref(idx), - :width=>5, :bd=>1, :relief=>:solid, :bg=>'white') - row = (idx + 1)/2 - col = ((idx + 1) & 1) * 2 - Tk.grid(l, :sticky=>:ew, :row=>row, :column=>col) - Tk.grid(ll, :sticky=>:ew, :row=>row, :column=>(col + 1)) - idx += 1 - } - @f_details.grid_columnconfigure(1, :weight=>1) - end - - def show_ctrl - if @ctrl.winfo_mapped? - @ctrl.pack_forget - @show.text('>>') - else - @ctrl.pack(:side=>:right, :fill=>:both, :ipady=>5) - @show.text('<<') - end - end - - def draw_all - reset_step - @canvas.delete(:all) - idx = 0 - loop{ - m = "draw#{idx}" - break unless respond_to?(m) - send(m) - idx += 1 - } - end - - def active_GUI(var1, var2, op) - st = {false=>:disabled, true=>:normal} - - m = @S['mode'].to_sym - @S['pause'].value = (m == :MPAUSE) - @start.state(st[m != :MGO]) - @pause.state(st[m != :MSTART && m != :MDONE]) - @step.state(st[m != :MGO && m != :MDONE]) - @bstep.state(st[m != :MGO && m != :MDONE]) - @reset.state(st[m != :MSTART]) - - if @S['details'].bool - Tk.grid(@f_details, :in=>@details, :row=>2, :sticky=>:ew) - else - Tk.grid_forget(@f_details) - end - @speed_scale.label("Speed: #{@S['speed'].value}") - end - - def start - @S['mode'].value = :MGO - end - - def do_button(what) - case what - when 0 # Start - reset if @S['mode'].to_sym == :MDONE - @S['mode'].value = :MGO - - when 1 # Pause - @S['mode'].value = ((@S['pause'].bool)? :MPAUSE: :MGO) - - when 2 # Step - @S['mode'].value = :MSSTEP - - when 3 # Reset - reset - - when 4 # Big step - @S['mode'].value = :MBSTEP - end - end - - def go(who = nil) - now = Tk::Clock.clicks(:milliseconds) - if who # Start here for debugging - @S['active'] = [who] - @S['mode'].value = :MGO - end - return if @S['mode'].to_sym == :MDEBUG # Debugging - # If not paused, do the next move - n = next_step if @S['mode'].to_sym != :MPAUSE - @S['mode'].value = :MPAUSE if @S['mode'].to_sym == :MSSTEP # Single step - @S['mode'].value = :MSSTEP if @S['mode'].to_sym == :MBSTEP && n # big step - elapsed = Tk::Clock.clicks(:milliseconds) - now - delay = @speed[@S['speed'].to_i] - elapsed - delay = 1 if delay <= 0 - return delay - end - - def next_step - retval = false # Return value - - if @S['mode'].to_sym != :MSTART && @S['mode'].to_sym != :MDONE - @S['cnt'].numeric += 1 - end - alive = [] - @S['active'].each{|who| - who = who.to_i - n = send("move#{who}") - if (n & 1).nonzero? # This guy still alive - alive << who - end - if (n & 2).nonzero? # Next guy is active - alive << (who + 1) - retval = true - end - if (n & 4).nonzero? # End of puzzle flag - @S['mode'].value = :MDONE # Done mode - @S['active'] = [] # No more animation - return true - end - } - @S['active'] = alive - return retval - end - - def about - msg = "Ruby/Tk Version ::\nby Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)\n\n" - msg += "Original Version ::\n" - msg += "#{@S['title']}\nby Keith Vetter, March 2003\n(Reproduced by kind permission of the author)\n\n" - msg += "Man will always find a difficult means to perform a simple task" - msg += "\nRube Goldberg" - Tk.messageBox(:message=>msg, :title=>'About') - end - - ################################################################ - # - # All the drawing and moving routines - # - - # START HERE! banner - def draw0 - color = @C['0'] - TkcText.new(@canvas, - # [579, 119], :text=>'START HERE!', - [558, 119], :text=>'ã“ã“ã‹ã‚‰ã‚¹ã‚¿ãƒ¼ãƒˆï¼', - :fill=>color, :anchor=>:w, - :tag=>'I0', :font=>['Times Roman', 12, :italic, :bold]) - TkcLine.new(@canvas, [719, 119, 763, 119], :tag=>'I0', :fill=>color, - :width=>5, :arrow=>:last, :arrowshape=>[18, 18, 5]) - @canvas.itembind('I0', '1'){ start } - end - - def move0(step = nil) - step = get_step(0, step) - - if @S['mode'].to_sym != :MSTART # Start the ball rolling - move_abs('I0', [-100, -100]) # Hide the banner - return 2 - end - - pos = [ - [673, 119], [678, 119], [683, 119], [688, 119], - [693, 119], [688, 119], [683, 119], [678, 119] - ] - step = step % pos.length - move_abs('I0', pos[step]) - return 1 - end - - # Dropping ball - def draw1 - color = @C['1a'] - color2 = @C['1b'] - TkcPolygon.new(@canvas, - [ 844, 133, 800, 133, 800, 346, 820, 346, - 820, 168, 844, 168, 844, 133 ], - :width=>3, :fill=>color, :outline=>'') - TkcPolygon.new(@canvas, - [ 771, 133, 685, 133, 685, 168, 751, 168, - 751, 346, 771, 346, 771, 133 ], - :width=>3, :fill=>color, :outline=>'') - TkcOval.new(@canvas, box(812, 122, 9), - :tag=>'I1', :fill=>color2, :outline=>'') - - @canvas.itembind('I1', '1'){ start } - end - - def move1(step = nil) - step = get_step(1, step) - pos = [ - [807, 122], [802, 122], [797, 123], [793, 124], [789, 129], [785, 153], - [785, 203], [785, 278, :x], [785, 367], [810, 392], [816, 438], - [821, 503], [824, 585, :y], [838, 587], [848, 593], [857, 601], - [-100, -100] - ] - return 0 if step >= pos.length - where = pos[step] - move_abs('I1', where) - move15a if where[2] == :y - return 3 if where[2] == :x - return 1 - end - - # Lighting the match - def draw2 - color = @C['2'] - - # Fulcrum - TkcPolygon.new(@canvas, [750, 369, 740, 392, 760, 392], - :fill=>@C['fg'], :outline=>@C['fg']) - - # Strike box - TkcRectangle.new(@canvas, [628, 335, 660, 383], - :fill=>'', :outline=>@C['fg']) - (0..2).each{|y| - yy = 335 + y*16 - TkcBitmap.new(@canvas, [628, yy], :bitmap=>'gray25', - :anchor=>:nw, :foreground=>@C['fg']) - TkcBitmap.new(@canvas, [644, yy], :bitmap=>'gray25', - :anchor=>:nw, :foreground=>@C['fg']) - } - - # Lever - TkcLine.new(@canvas, [702, 366, 798, 366], - :fill=>@C['fg'], :width=>6, :tag=>'I2_0') - - # R strap - TkcLine.new(@canvas, [712, 363, 712, 355], - :fill=>@C['fg'], :width=>3, :tag=>'I2_1') - - # L strap - TkcLine.new(@canvas, [705, 363, 705, 355], - :fill=>@C['fg'], :width=>3, :tag=>'I2_2') - - # Match stick - TkcLine.new(@canvas, [679, 356, 679, 360, 717, 360, 717, 356, 679, 356], - :fill=>@C['fg'], :width=>3, :tag=>'I2_3') - - # Match head - TkcPolygon.new(@canvas, - [ 671, 352, 677.4, 353.9, 680, 358.5, 677.4, 363.1, - 671, 365, 664.6, 363.1, 662, 358.5, 664.6, 353.9 ], - :fill=>color, :outline=>color, :tag=>'I2_4') - end - - def move2(step = nil) - step = get_step(2, step) - - stages = [0, 0, 1, 2, 0, 2, 1, 0, 1, 2, 0, 2, 1] - xy = [] - xy[0] = [ - 686, 333, 692, 323, 682, 316, 674, 309, 671, 295, 668, 307, - 662, 318, 662, 328, 671, 336 - ] - xy[1] = [ - 687, 331, 698, 322, 703, 295, 680, 320, 668, 297, 663, 311, - 661, 327, 671, 335 - ] - xy[2] = [ - 686, 331, 704, 322, 688, 300, 678, 283, 678, 283, 674, 298, - 666, 309, 660, 324, 672, 336 - ] - - if step >= stages.length - @canvas.delete('I2') - return 0 - end - - if step == 0 # Rotate the match - beta = 20 - - ox, oy = anchor('I2_0', :s) # Where to pivot - - i = 0 - until @canvas.find_withtag("I2_#{i}").empty? - rotate_item("I2_#{i}", ox, oy, beta) - i += 1 - end - - # For the flame - TkcPolygon.new(@canvas, [], :tag=>'I2', :smooth=>true, :fill=>@C['2']) - - return 1 - end - @canvas.coords('I2', xy[stages[step]]) - return ((step == 7)? 3: 1) - end - - # Weight and pulleys - def draw3 - color = @C['3a'] - color2 = @C['3b'] - - xy = [ [602, 296], [577, 174], [518, 174] ] - xy.each{|x, y| # 3 Pulleys - TkcOval.new(@canvas, box(x, y, 13), - :fill=>color, :outline=>@C['fg'], :width=>3) - TkcOval.new(@canvas, box(x, y, 2), :fill=>@C['fg'], :outline=>@C['fg']) - } - - # Wall to flame - TkcLine.new(@canvas, [750, 309, 670, 309], :tag=>'I3_s', - :width=>3, :fill=>@C['fg'], :smooth=>true) - - # Flame to pulley 1 - TkcLine.new(@canvas, [670, 309, 650, 309], :tag=>'I3_0', - :width=>3, :fill=>@C['fg'], :smooth=>true) - TkcLine.new(@canvas, [650, 309, 600, 309], :tag=>'I3_1', - :width=>3, :fill=>@C['fg'], :smooth=>true) - - # Pulley 1 half way to 2 - TkcLine.new(@canvas, [589, 296, 589, 235], :tag=>'I3_2', - :width=>3, :fill=>@C['fg']) - - # Pulley 1 other half to 2 - TkcLine.new(@canvas, [589, 235, 589, 174], :width=>3, :fill=>@C['fg']) - - # Across the top - TkcLine.new(@canvas, [577, 161, 518, 161], :width=>3, :fill=>@C['fg']) - - # Down to weight - TkcLine.new(@canvas, [505, 174, 505, 205], :tag=>'I3_w', - :width=>3, :fill=>@C['fg']) - - # Draw the weight as 2 circles, two rectangles and 1 rounded rectangle - x1, y1, x2, y2 = [515, 207, 495, 207] - TkcOval.new(@canvas, box(x1, y1, 6), - :tag=>'I3_', :fill=>color2, :outline=>color2) - TkcOval.new(@canvas, box(x2, y2, 6), - :tag=>'I3_', :fill=>color2, :outline=>color2) - TkcRectangle.new(@canvas, x1, y1 - 6, x2, y2 + 6, - :tag=>'I3_', :fill=>color2, :outline=>color2) - - TkcPolygon.new(@canvas, round_rect([492, 220, 518, 263], 15), - :smooth=>true, :tag=>'I3_', :fill=>color2, :outline=>color2) - - TkcLine.new(@canvas, [500, 217, 511, 217], - :tag=>'I3_', :fill=>color2, :width=>10) - - # Bottom weight target - TkcLine.new(@canvas, [502, 393, 522, 393, 522, 465], - :tag=>'I3__', :fill=>@C['fg'], :joinstyle=>:miter, :width=>10) - end - - def move3(step = nil) - step = get_step(3, step) - - pos = [ [505, 247], [505, 297], [505, 386.5], [505, 386.5] ] - rope = [] - rope[0] = [750, 309, 729, 301, 711, 324, 690, 300] - rope[1] = [750, 309, 737, 292, 736, 335, 717, 315, 712, 320] - rope[2] = [750, 309, 737, 309, 740, 343, 736, 351, 725, 340] - rope[3] = [750, 309, 738, 321, 746, 345, 742, 356] - - return 0 if step >= pos.length - - @canvas.delete("I3_#{step}") # Delete part of the rope - move_abs('I3_', pos[step]) # Move weight down - @canvas.coords('I3_s', rope[step]) # Flapping rope end - @canvas.coords('I3_w', [505, 174].concat(pos[step])) - if step == 2 - @canvas.move('I3__', 0, 30) - return 2 - end - return 1 - end - - # Cage and door - def draw4 - color = @C['4'] - x0, y0, x1, y1 = [527, 356, 611, 464] - - # Horizontal bars - y0.step(y1, 12){|y| - TkcLine.new(@canvas, [x0, y, x1, y], :fill=>color, :width=>1) - } - - # Vertical bars - x0.step(x1, 12){|x| - TkcLine.new(@canvas, [x, y0, x, y1], :fill=>color, :width=>1) - } - - # Swing gate - TkcLine.new(@canvas, [518, 464, 518, 428], - :tag=>'I4', :fill=>color, :width=>1) - end - - def move4(step = nil) - step = get_step(4, step) - - angles = [-10, -20, -30, -30] - return 0 if step >= angles.length - - rotate_item('I4', 518, 464, angles[step]) - @canvas.raise('I4') - - return((step == 3)? 3: 1) - end - - # Mouse - def draw5 - color = @C['5a'] - color2 = @C['5b'] - - xy = [377, 248, 410, 248, 410, 465, 518, 465] # Mouse course - xy.concat [518, 428, 451, 428, 451, 212, 377, 212] - - TkcPolygon.new(@canvas, xy, :fill=>color2, :outline=>@C['fg'], :width=>3) - - xy = [ - 534.5, 445.5, 541, 440, 552, 436, 560, 436, 569, 440, 574, 446, - 575, 452, 574, 454, 566, 456, 554, 456, 545, 456, 537, 454, 530, 452 - ] - TkcPolygon.new(@canvas, xy, :tag=>['I5', 'I5_0'], :fill=>color) - - TkcLine.new(@canvas, [573, 452, 592, 458, 601, 460, 613, 456], # Tail - :tag=>['I5', 'I5_1'], :fill=>color, :smooth=>true, :width=>3) - - xy = box(540, 446, 2) # Eye - xy = [540, 444, 541, 445, 541, 447, 540, 448, 538, 447, 538, 445] - TkcPolygon.new(@canvas, xy, :tag=>['I5', 'I5_2'], :fill=>@C['bg'], - :outline=>'', :smooth=>true) - - xy = [538, 454, 535, 461] # Front leg - TkcLine.new(@canvas, xy, :tag=>['I5', 'I5_3'], :fill=>color, :width=>2) - - xy = [566, 455, 569, 462] # Back leg - TkcLine.new(@canvas, xy, :tag=>['I5', 'I5_4'], :fill=>color, :width=>2) - - xy = [544, 455, 545, 460] # 2nd front leg - TkcLine.new(@canvas, xy, :tag=>['I5', 'I5_5'], :fill=>color, :width=>2) - - xy = [560, 455, 558, 460] # 2nd back leg - TkcLine.new(@canvas, xy, :tag=>['I5', 'I5_6'], :fill=>color, :width=>2) - end - - def move5(step = nil) - step = get_step(5, step) - - pos = [ - [553, 452], [533, 452], [513, 452], [493, 452], [473, 452], - [463, 442, 30], [445.5, 441.5, 30], [425.5, 434.5, 30], [422, 414], - [422, 394], [422, 374], [422, 354], [422, 334], [422, 314], [422, 294], - [422, 274, -30], [422, 260.5, -30, :x], [422.5, 248.5, -28], [425, 237] - ] - - return 0 if step >= pos.length - - x, y, beta, nxt = pos[step] - move_abs('I5', [x, y]) - if beta - ox, oy = centroid('I5_0') - (0..6).each{|id| rotate_item("I5_#{id}", ox, oy, beta) } - end - return 3 if nxt == :x - return 1 - end - - # Dropping gumballs - def draw6 - color = @C['6'] - xy = [324, 130, 391, 204] # Ball holder - xy = round_rect(xy, 10) - TkcPolygon.new(@canvas, xy, :smooth=>true, - :outline=>@C['fg'], :width=>3, :fill=>color) - xy = [339, 204, 376, 253] # Below the ball holder - TkcRectangle.new(@canvas, xy, :outline=>@C['fg'], :width=>3, - :fill=>color, :tag=>'I6c') - xy = box(346, 339, 28) - TkcOval.new(@canvas, xy, :fill=>color, :outline=>'') # Roter - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>2, :style=>:arc, - :start=>80, :extent=>205) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>2, :style=>:arc, - :start=>-41, :extent=>85) - - xy = box(346, 339, 15) # Center of rotor - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>@C['fg'], :tag=>'I6m') - xy = [352, 312, 352, 254, 368, 254, 368, 322] # Top drop to rotor - TkcPolygon.new(@canvas, xy, :fill=>color, :outline=>'') - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2) - - xy = [353, 240, 367, 300] # Poke bottom hole - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>'') - xy = [341, 190, 375, 210] # Poke another hole - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>'') - - xy = [ - 368, 356, 368, 403, 389, 403, 389, 464, 320, 464, 320, 403, - 352, 403, 352, 366 - ] - TkcPolygon.new(@canvas, xy, :fill=>color, :outline=>'', - :width=>2) # Below rotor - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2) - xy = box(275, 342, 7) # On/off rotor - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>@C['fg']) - xy = [276, 334, 342, 325] # Fan belt top - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - xy = [276, 349, 342, 353] # Fan belt bottom - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - - xy = [337, 212, 337, 247] # What the mouse pushes - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I6_') - xy = [392, 212, 392, 247] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I6_') - xy = [337, 230, 392, 230] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>7, :tag=>'I6_') - - who = -1 # All the balls - colors = %w(red cyan orange green blue darkblue) - colors *= 3 - - (0..16).each{|i| - loc = -i - color = colors[i] - x, y = @XY6["#{loc}"] - TkcOval.new(@canvas, box(x, y, 5), - :fill=>color, :outline=>color, :tag=>"I6_b#{i}") - } - draw6a(12) # The wheel - end - - def draw6a(beta) - @canvas.delete('I6_0') - ox, oy = [346, 339] - (0..3).each{|i| - b = beta + i * 45 - x, y = rotate_c(28, 0, 0, 0, b) - xy = [ox + x, oy + y, ox - x, oy - y] - TkcLine.new(@canvas, xy, :tag=>'I6_0', :fill=>@C['fg'], :width=>2) - } - end - - def move6(step = nil) - step = get_step(6, step) - - return 0 if step > 62 - - if step < 2 # Open gate for balls to drop - @canvas.move('I6_', -7, 0) - if step == 1 # Poke a hole - xy = [348, 226, 365, 240] - TkcRectangle.new(@canvas, xy, :fill=>@canvas.itemcget('I6c', :fill), - :outline=>'') - end - return 1 - end - - s = step - 1 # Do the gumball drop dance - (0..(((s - 1)/3).to_i)).each{|i| - tag = "I6_b#{i}" - break if @canvas.find_withtag(tag).empty? - loc = s - 3*i - - if @XY6["#{loc},#{i}"] - move_abs(tag, @XY6["#{loc},#{i}"]) - elsif @XY6["#{loc}"] - move_abs(tag, @XY6["#{loc}"]) - end - } - if s % 3 == 1 - first = (s + 2)/3 - i = first - loop { - tag = "I6_b#{i}" - break if @canvas.find_withtag(tag).empty? - loc = first - i - move_abs(tag, @XY6["#{loc}"]) - i += 1 - } - end - if s >= 3 # Rotate the motor - idx = s % 3 - draw6a(12 + s * 15) - end - return((s == 3)? 3 : 1) - end - - # On/off switch - def draw7 - color = @C['7'] - xy = [198, 306, 277, 374] # Box - TkcRectangle.new(@canvas, xy, :outline=>@C['fg'], :width=>2, - :fill=>color, :tag=>'I7z') - @canvas.lower('I7z') - xy = [275, 343, 230, 349] - TkcLine.new(@canvas, xy, :tag=>'I7', :fill=>@C['fg'], :arrow=>:last, - :arrowshape=>[23, 23, 8], :width=>6) - xy = [225, 324] # On button - x, y = xy - TkcOval.new(@canvas, box(x, y, 3), :fill=>@C['fg'], :outline=>@C['fg']) - xy = [218, 323] # On text - font = ['Times Roman', 8] - TkcText.new(@canvas, xy, :text=>'on', :anchor=>:e, - :fill=>@C['fg'], :font=>font) - xy = [225, 350] # Off button - x, y = xy - TkcOval.new(@canvas, box(x, y, 3), :fill=>@C['fg'], :outline=>@C['fg']) - xy = [218, 349] # Off text - TkcText.new(@canvas, xy, :text=>'off', :anchor=>:e, - :fill=>@C['fg'], :font=>font) - end - - def move7(step = nil) - step = get_step(7, step) - - numsteps = 30 - return 0 if step > numsteps - beta = 30.0 / numsteps - rotate_item('I7', 275, 343, beta) - - return((step == numsteps)? 3: 1) - end - - # Electricity to the fan - def draw8 - sine([271, 248, 271, 306], 5, 8, :tag=>'I8_s', :fill=>@C['8'], :width=>3) - end - - def move8(step = nil) - step = get_step(8, step) - - return 0 if step > 3 - if step == 0 - sparkle(anchor('I8_s', :s), 'I8') - return 1 - elsif step == 1 - move_abs('I8', anchor('I8_s', :c)) - elsif step == 2 - move_abs('I8', anchor('I8_s', :n)) - else - @canvas.delete('I8') - end - return((step == 2)? 3: 1) - end - - # Fan - def draw9 - color = @C['9'] - xy = [266, 194, 310, 220] - TkcOval.new(@canvas, xy, :outline=>color, :fill=>color) - xy = [280, 209, 296, 248] - TkcOval.new(@canvas, xy, :outline=>color, :fill=>color) - xy = [ - 288, 249, 252, 249, 260, 240, 280, 234, - 296, 234, 316, 240, 324, 249, 288, 249 - ] - TkcPolygon.new(@canvas, xy, :fill=>color, :smooth=>true) - - xy = [248, 205, 265, 214, 264, 205, 265, 196] # Spinner - TkcPolygon.new(@canvas, xy, :fill=>color) - - xy = [255, 206, 265, 234] # Fan blades - TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], - :width=>3, :tag=>'I9_0') - xy = [255, 176, 265, 204] - TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], - :width=>3, :tag=>'I9_0') - xy = [255, 206, 265, 220] - TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], - :width=>1, :tag=>'I9_1') - xy = [255, 190, 265, 204] - TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], - :width=>1, :tag=>'I9_1') - end - - def move9(step = nil) - step = get_step(9, step) - - if (step & 1).nonzero? - @canvas.itemconfigure('I9_0', :width=>4) - @canvas.itemconfigure('I9_1', :width=>1) - @canvas.lower('I9_1', 'I9_0') - else - @canvas.itemconfigure('I9_0', :width=>1) - @canvas.itemconfigure('I9_1', :width=>4) - @canvas.lower('I9_0', 'I9_1') - end - return 3 if step == 0 - return 1 - end - - # Boat - def draw10 - color = @C['10a'] - color2 = @C['10b'] - xy = [191, 230, 233, 230, 233, 178, 191, 178] # Sail - TkcPolygon.new(@canvas, xy, :fill=>color, :width=>3, :outline=>@C['fg'], - :tag=>'I10') - xy = box(209, 204, 31) # Front - TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :style=>:pie, - :start=>120, :extent=>120, :tag=>'I10') - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc, - :start=>120, :extent=>120, :tag=>'I10') - xy = box(249, 204, 31) # Back - TkcArc.new(@canvas, xy, :outline=>'', :fill=>@C['bg'], :width=>3, - :style=>:pie, :start=>120, :extent=>120, :tag=>'I10') - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc, - :start=>120, :extent=>120, :tag=>'I10') - - xy = [200, 171, 200, 249] # Mast - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I10') - xy = [159, 234, 182, 234] # Bow sprit - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I10') - xy = [180, 234, 180, 251, 220, 251] # Hull - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>6, :tag=>'I10') - - xy = [92, 255, 221, 255] # Waves - sine(xy, 2, 25, :fill=>color2, :width=>1, :tag=>'I10w') - - xy = @canvas.coords('I10w')[4..-5] # Water - xy.concat([222, 266, 222, 277, 99, 277]) - TkcPolygon.new(@canvas, xy, :fill=>color2, :outline=>color2) - xy = [222, 266, 222, 277, 97, 277, 97, 266] # Water bottom - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - - xy = box(239, 262, 17) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc, - :start=>95, :extent=>103) - xy = box(76, 266, 21) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc, - :extent=>190) - end - - def move10(step = nil) - step = get_step(10, step) - - pos = [ - [195, 212], [193, 212], [190, 212], [186, 212], [181, 212], [176, 212], - [171, 212], [166, 212], [161, 212], [156, 212], [151, 212], [147, 212], - [142, 212], [137, 212], [132, 212, :x], [127, 212], [121, 212], - [116, 212], [111, 212] - ] - - return 0 if step >= pos.length - - where = pos[step] - move_abs('I10', where) - - return 3 if where[2] == :x - return 1 - end - - # 2nd ball drop - def draw11 - color = @C['11a'] - color2 = @C['11b'] - xy = [23, 264, 55, 591] # Color the down tube - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>'') - xy = box(71, 460, 48) # Color the outer loop - TkcOval.new(@canvas, xy, :fill=>color, :outline=>'') - - xy = [55, 264, 55, 458] # Top right side - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - xy = [55, 504, 55, 591] # Bottom right side - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - xy = box(71, 460, 48) # Outer loop - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc, - :start=>110, :extent=>-290, :tag=>'I11i') - xy = box(71, 460, 16) # Inner loop - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>'', - :width=>3, :tag=>'I11i') - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>@C['bg'], :width=>3) - - xy = [23, 264, 23, 591] # Left side - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - xy = box(1, 266, 23) # Top left curve - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, - :style=>:arc, :extent=>90) - - xy = box(75, 235, 9) # The ball - TkcOval.new(@canvas, xy, :fill=>color2, :outline=>'', - :width=>3, :tag=>'I11') - end - - def move11(step = nil) - step = get_step(11, step) - - pos = [ - [75, 235], [70, 235], [65, 237], [56, 240], [46, 247], [38, 266], - [38, 296], [38, 333], [38, 399], [38, 475], [74, 496], [105, 472], - [100, 437], [65, 423], [-100, -100], [38, 505], [38, 527, :x], [38, 591] - ] - - return 0 if step >= pos.length - where = pos[step] - move_abs('I11', where) - return 3 if where[2] == :x - return 1 - end - - # Hand - def draw12 - xy = [ - 20, 637, 20, 617, 20, 610, 20, 590, 40, 590, 40, 590, - 60, 590, 60, 610, 60, 610 - ] - xy.concat([60, 610, 65, 620, 60, 631]) # Thumb - xy.concat([60, 631, 60, 637, 60, 662, 60, 669, 52, 669, - 56, 669, 50, 669, 50, 662, 50, 637]) - - y0 = 637 # Bumps for fingers - y1 = 645 - 50.step(21, -10){|x| - x1 = x - 5 - x2 = x - 10 - xy << x << y0 << x1 << y1 << x2 << y0 - } - TkcPolygon.new(@canvas, xy, :fill=>@C['12'], :outline=>@C['fg'], - :smooth=>true, :tag=>'I12', :width=>3) - end - - def move12(step = nil) - step = get_step(12, step) - - pos = [[42.5, 641, :x]] - return 0 if step >= pos.length - where = pos[step] - move_abs('I12', where) - return 3 if where[2] == :x - return 1 - end - - # Fax - def draw13 - color = @C['13a'] - xy = [86, 663, 149, 663, 149, 704, 50, 704, 50, 681, 64, 681, 86, 671] - xy2 = [ - 784, 663, 721, 663, 721, 704, 820, 704, 820, 681, 806, 681, 784, 671 - ] - radii = [2, 9, 9, 8, 5, 5, 2] - - round_poly(@canvas, xy, radii, :width=>3, - :outline=>@C['fg'], :fill=>color) - round_poly(@canvas, xy2, radii, :width=>3, - :outline=>@C['fg'], :fill=>color) - - xy = [56, 677] - x, y = xy - TkcRectangle.new(@canvas, box(x, y, 4), :fill=>'', :outline=>@C['fg'], - :width=>3, :tag=>'I13') - xy = [809, 677] - x, y = xy - TkcRectangle.new(@canvas, box(x, y, 4), :fill=>'', :outline=>@C['fg'], - :width=>3, :tag=>'I13R') - - xy = [112, 687] # Label - TkcText.new(@canvas, xy, :text=>'FAX', :fill=>@C['fg'], - :font=>['Times Roman', 12, :bold]) - xy = [762, 687] - TkcText.new(@canvas, xy, :text=>'FAX', :fill=>@C['fg'], - :font=>['Times Roman', 12, :bold]) - - xy = [138, 663, 148, 636, 178, 636] # Paper guide - TkcLine.new(@canvas, xy, :smooth=>true, :fill=>@C['fg'], :width=>3) - xy = [732, 663, 722, 636, 692, 636] - TkcLine.new(@canvas, xy, :smooth=>true, :fill=>@C['fg'], :width=>3) - - sine([149, 688, 720, 688], 5, 15, - :tag=>'I13_s', :fill=>@C['fg'], :width=>3) - end - - def move13(step = nil) - step = get_step(13, step) - - numsteps = 7 - - if step == numsteps + 2 - move_abs('I13_star', [-100, -100]) - @canvas.itemconfigure('I13R', :fill=>@C['13b'], :width=>2) - return 2 - end - if step == 0 # Button down - @canvas.delete('I13') - sparkle([-100, -100], 'I13_star') # Create off screen - return 1 - end - x0, y0 = anchor('I13_s', :w) - x1, y1 = anchor('I13_s', :e) - x = x0 + (x1 - x0) * (step - 1) / numsteps.to_f - move_abs('I13_star', [x, y0]) - return 1 - end - - # Paper in fax - def draw14 - color = @C['14'] - xy = [102, 661, 113, 632, 130, 618] # Left paper edge - TkcLine.new(@canvas, xy, :smooth=>true, :fill=>color, - :width=>3, :tag=>'I14L_0') - xy = [148, 629, 125, 640, 124, 662] # Right paper edge - TkcLine.new(@canvas, xy, :smooth=>true, :fill=>color, - :width=>3, :tag=>'I14L_1') - draw14a('L') - - xy = [ - 768.0, 662.5, 767.991316225, 662.433786215, 767.926187912, 662.396880171 - ] - TkcLine.new(@canvas, xy, :smooth=>true, :fill=>color, - :width=>3, :tag=>'I14R_0') - @canvas.lower('I14R_0') - # NB. these numbers are VERY sensitive, you must start with final size - # and shrink down to get the values - xy = [ - 745.947897349, 662.428358855, 745.997829056, 662.452239237, 746.0, 662.5 - ] - TkcLine.new(@canvas, xy, :smooth=>true, :fill=>color, - :width=>3, :tag=>'I14R_1') - @canvas.lower('I14R_1') - end - - def draw14a(side) - color = @C['14'] - xy = @canvas.coords("I14#{side}_0") - xy2 = @canvas.coords("I14#{side}_1") - x0, y0, x1, y1, x2, y2 = xy - x3, y3, x4, y4, x5, y5 = xy2 - - zz = [ - x0, y0, x0, y0, xy, x2, y2, x2, y2, - x3, y3, x3, y3, xy2, x5, y5, x5, y5 - ].flatten - @canvas.delete("I14#{side}") - TkcPolygon.new(@canvas, zz, :tag=>"I14#{side}", :smooth=>true, - :fill=>color, :outline=>color, :width=>3) - @canvas.lower("I14#{side}") - end - - def move14(step = nil) - step = get_step(14, step) - - # Paper going down - sc = 0.9 - 0.05*step - if sc < 0.3 - @canvas.delete('I14L') - return 0 - end - - ox, oy = @canvas.coords('I14L_0') - @canvas.scale('I14L_0', ox, oy, sc, sc) - ox, oy = @canvas.coords('I14L_1')[-2..-1] - @canvas.scale('I14L_1', ox, oy, sc, sc) - draw14a('L') - - # Paper going up - sc = 0.35 + 0.05*step - sc = 1/sc - - ox, oy = @canvas.coords('I14R_0') - @canvas.scale('I14R_0', ox, oy, sc, sc) - ox, oy = @canvas.coords('I14R_1')[-2..-1] - @canvas.scale('I14R_1', ox, oy, sc, sc) - draw14a('R') - - return((step == 10)? 3: 1) - end - - # Light beam - def draw15 - color = @C['15a'] - xy = [824, 599, 824, 585, 820, 585, 829, 585] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I15a') - xy = [789, 599, 836, 643] - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>3) - xy = [778, 610, 788, 632] - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>3) - xy = [766, 617, 776, 625] - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>3) - - xy = [633, 600, 681, 640] - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>3) - xy = [635, 567, 657, 599] - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>2) - xy = [765, 557, 784, 583] - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>2) - - sine([658, 580, 765, 580], 3, 15, - :tag=>'I15_s', :fill=>@C['fg'], :width=>3) - end - - def move15a - color = @C['15b'] - @canvas.scale('I15a', 824, 599, 1, 0.3) # Button down - xy = [765, 621, 681, 621] - TkcLine.new(@canvas, xy, :dash=>'-', :width=>3, :fill=>color, :tag=>'I15') - end - - def move15(step = nil) - step = get_step(15, step) - - numsteps = 6 - - if step == numsteps + 2 - move_abs('I15_star', [-100, -100]) - return 2 - end - if step == 0 # Break the light beam - sparkle([-100, -100], 'I15_star') - xy = [765, 621, 745, 621] - @canvas.coords('I15', xy) - return 1 - end - x0, y0 = anchor('I15_s', :w) - x1, y1 = anchor('I15_s', :e) - x = x0 + (x1 - x0) * (step - 1) / numsteps.to_f - move_abs('I15_star', [x, y0]) - return 1 - end - - # Bell - def draw16 - color = @C['16'] - xy = [722, 485, 791, 556] - TkcRectangle.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], :width=>3) - xy = box(752, 515, 25) # Bell - TkcOval.new(@canvas, xy, :fill=>color, :outline=>'black', - :tag=>'I16b', :width=>2) - xy = box(752, 515, 5) # Bell button - TkcOval.new(@canvas, xy, :fill=>'black', :outline=>'black', :tag=>'I16b') - - xy = [784, 523, 764, 549] # Clapper - TkcLine.new(@canvas, xy, :width=>3, :tag=>'I16c', :fill=>@C['fg']) - xy = box(784, 523, 4) - TkcOval.new(@canvas, xy, :fill=>@C['fg'], :outline=>@C['fg'], :tag=>'I16d') - end - - def move16(step = nil) - step = get_step(16, step) - - # Note: we never stop - ox, oy = [760, 553] - if (step & 1).nonzero? - beta = 12 - @canvas.move('I16b', 3, 0) - else - beta = -12 - @canvas.move('I16b', -3, 0) - end - rotate_item('I16c', ox, oy, beta) - rotate_item('I16d', ox, oy, beta) - - return ((step == 1)? 3: 1) - end - - # Cat - def draw17 - color = @C['17'] - - xy = [584, 556, 722, 556] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - xy = [584, 485, 722, 485] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3) - - xy = [664, 523, 717, 549] # Body - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :fill=>color, :width=>3, - :style=>:chord, :start=>128, :extent=>260, :tag=>'I17') - - xy = [709, 554, 690, 543] # Paw - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>color, - :width=>3, :tag=>'I17') - xy = [657, 544, 676, 555] - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>color, - :width=>3, :tag=>'I17') - - xy = box(660, 535, 15) # Lower face - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc, - :start=>150, :extent=>240, :tag=>'I17_') - TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :width=>1, - :style=>:chord, :start=>150, :extent=>240, :tag=>'I17_') - xy = [674, 529, 670, 513, 662, 521, 658, 521, 650, 513, 647, 529] # Ears - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - TkcPolygon.new(@canvas, xy, :fill=>color, :outline=>'', :width=>1, - :tag=>['I17_', 'I17_c']) - xy = [652, 542, 628, 539] # Whiskers - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - xy = [652, 543, 632, 545] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - xy = [652, 546, 632, 552] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - - xy = [668, 543, 687, 538] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, - :tag=>['I17_', 'I17_w']) - xy = [668, 544, 688, 546] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, - :tag=>['I17_', 'I17_w']) - xy = [668, 547, 688, 553] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, - :tag=>['I17_', 'I17_w']) - - xy = [649, 530, 654, 538, 659, 530] # Left eye - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, - :smooth=>true, :tag=>'I17') - xy = [671, 530, 666, 538, 661, 530] # Right eye - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, - :smooth=>true, :tag=>'I17') - xy = [655, 543, 660, 551, 665, 543] # Mouth - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, - :smooth=>true, :tag=>'I17') - end - - def move17(step = nil) - step = get_step(17, step) - - if step == 0 - @canvas.delete('I17') # Delete most of the cat - xy = [655, 543, 660, 535, 665, 543] # Mouth - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, - :smooth=>true, :tag=>'I17_') - xy = box(654, 530, 4) # Left eye - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :fill=>'', - :tag=>'I17_') - xy = box(666, 530, 4) # Right eye - TkcOval.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :fill=>'', - :tag=>'I17_') - - @canvas.move('I17_', 0, -20) # Move face up - xy = [652, 528, 652, 554] # Front leg - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - xy = [670, 528, 670, 554] # 2nd front leg - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - - xy = [ # Body - 675, 506, 694, 489, 715, 513, 715, 513, 715, 513, 716, 525, - 716, 525, 716, 525, 706, 530, 695, 530, 679, 535, 668, 527, - 668, 527, 668, 527, 675, 522, 676, 517, 677, 512 - ] - TkcPolygon.new(@canvas, xy, :fill=>@canvas.itemcget('I17_c', :fill), - :outline=>@C['fg'], :width=>3, :smooth=>true, - :tag=>'I17_') - xy = [716, 514, 716, 554] # Back leg - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - xy = [694, 532, 694, 554] # 2nd back leg - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_') - xy = [715, 514, 718, 506, 719, 495, 716, 488] # Tail - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, - :smooth=>true, :tag=>'I17_') - - @canvas.raise('I17w') # Make whiskers visible - @canvas.move('I17_', -5, 0) # Move away from the wall a bit - return 2 - end - return 0 - end - - # Sling shot - def draw18 - color = @C['18'] - xy = [721, 506, 627, 506] # Sling hold - TkcLine.new(@canvas, xy, :width=>4, :fill=>@C['fg'], :tag=>'I18') - - xy = [607, 500, 628, 513] # Sling rock - TkcOval.new(@canvas, xy, :fill=>color, :outline=>'', :tag=>'I18a') - - xy = [526, 513, 606, 507, 494, 502] # Sling band - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>4, :tag=>'I18b') - xy = [485, 490, 510, 540, 510, 575, 510, 540, 535, 491] # Sling - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>6) - end - - def move18(step = nil) - step = get_step(18, step) - - pos = [ - [587, 506], [537, 506], [466, 506], [376, 506], [266, 506, :x], - [136, 506], [16, 506], [-100, -100] - ] - - b = [] - b[0] = [490, 502, 719, 507, 524, 512] # Band collapsing - b[1] = [ - 491, 503, 524, 557, 563, 505, 559, 496, 546, 506, 551, 525, - 553, 536, 538, 534, 532, 519, 529, 499 - ] - b[2] = [ - 491, 503, 508, 563, 542, 533, 551, 526, 561, 539, 549, 550, 530, 500 - ] - b[3] = [ - 491, 503, 508, 563, 530, 554, 541, 562, 525, 568, 519, 544, 530, 501 - ] - - return 0 if step >= pos.length - - if step == 0 - @canvas.delete('I18') - @canvas.itemconfigure('I18b', :smooth=>true) - end - if b[step] - @canvas.coords('I18b', b[step]) - end - - where = pos[step] - move_abs('I18a', where) - return 3 if where[2] == :x - return 1 - end - - # Water pipe - def draw19 - color = @C['19'] - xx = [[249, 181], [155, 118], [86, 55], [22, 0]] - xx.each{|x1, x2| - TkcRectangle.new(@canvas, x1, 453, x2, 467, - :fill=>color, :outline=>'', :tag=>'I19') - TkcLine.new(@canvas, x1, 453, x2, 453, - :fill=>@C['fg'], :width=>1) # Pipe top - TkcLine.new(@canvas, x1, 467, x2, 467, - :fill=>@C['fg'], :width=>1) # Pipe bottom - } - @canvas.raise('I11i') - - xy = box(168, 460, 16) # Bulge by the joint - TkcOval.new(@canvas, xy, :fill=>color, :outline=>'') - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, :style=>:arc, - :start=>21, :extent=>136) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, :style=>:arc, - :start=>-21, :extent=>-130) - - xy = [249, 447, 255, 473] # First joint 26x6 - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1) - - xy = box(257, 433, 34) # Bend up - TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :width=>1, - :style=>:pie, :start=>0, :extent=>-91) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, - :style=>:arc, :start=>0, :extent=>-90) - xy = box(257, 433, 20) - TkcArc.new(@canvas, xy, :outline=>'', :fill=>@C['bg'], :width=>1, - :style=>:pie, :start=>0, :extent=>-92) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, - :style=>:arc, :start=>0, :extent=>-90) - xy = box(257, 421, 34) # Bend left - TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :width=>1, - :style=>:pie, :start=>0, :extent=>91) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, - :style=>:arc, :start=>0, :extent=>90) - xy = box(257, 421, 20) - TkcArc.new(@canvas, xy, :outline=>'', :fill=>@C['bg'], :width=>1, - :style=>:pie, :start=>0, :extent=>90) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, - :style=>:arc, :start=>0, :extent=>90) - xy = box(243, 421, 34) # Bend down - TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :width=>1, - :style=>:pie, :start=>90, :extent=>90) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, - :style=>:arc, :start=>90, :extent=>90) - xy = box(243, 421, 20) - TkcArc.new(@canvas, xy, :outline=>'', :fill=>@C['bg'], :width=>1, - :style=>:pie, :start=>90, :extent=>90) - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, - :style=>:arc, :start=>90, :extent=>90) - - xy = [270, 427, 296, 433] # 2nd joint bottom - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1) - xy = [270, 421, 296, 427] # 2nd joint top - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1) - xy = [249, 382, 255, 408] # Third joint right - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1) - xy = [243, 382, 249, 408] # Third joint left - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1) - xy = [203, 420, 229, 426] # Last joint - TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1) - - xy = box(168, 460, 6) # Handle joint - TkcOval.new(@canvas, xy, :fill=>@C['fg'], :outline=>'', :tag=>'I19a') - xy = [168, 460, 168, 512] # Handle bar - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>5, :tag=>'I19b') - end - - def move19(step = nil) - step = get_step(19, step) - - angles = [30, 30, 30] - return 2 if step == angles.length - ox, oy = centroid('I19a') - rotate_item('I19b', ox, oy, angles[step]) - - return 1 - end - - # Water pouring - def draw20 - # do nothing - end - - def move20(step = nil) - step = get_step(20, step) - - pos = [451, 462, 473, 484, 496, 504, 513, 523, 532] - freq = [20, 40, 40, 40, 40, 40, 40, 40, 40] - pos = [ - [451, 20], [462, 40], [473, 40], [484, 40], [496, 40], - [504, 40], [513, 40], [523, 40], [532, 40, :x] - ] - return 0 if step >= pos.length - - @canvas.delete('I20') - where = pos[step] - y, f = where - h20(y, f) - return 3 if where[2] == :x - return 1 - end - - def h20(y, f) - color = @C['20'] - @canvas.delete('I20') - - sine([208, 428, 208, y], 4, f, :tag=>['I20', 'I20s'], - :width=>3, :fill=>color, :smooth=>true) - TkcLine.new(@canvas, @canvas.coords('I20s'), :width=>3, - :fill=>color, :smooth=>1, :tag=>['I20', 'I20a']) - TkcLine.new(@canvas, @canvas.coords('I20s'), :width=>3, - :fill=>color, :smooth=>1, :tag=>['I20', 'I20b']) - @canvas.move('I20a', 8, 0) - @canvas.move('I20b', 16, 0) - end - - # Bucket - def draw21 - color = @C['21'] - xy = [217, 451, 244, 490] # Right handle - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, :tag=>'I21_a') - xy = [201, 467, 182, 490] # Left handle - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, :tag=>'I21_a') - - xy = [245, 490, 237, 535] # Right side - xy2 = [189, 535, 181, 490] # Left side - TkcPolygon.new(@canvas, xy + xy2, :fill=>color, :outline=>'', - :tag=>['I21', 'I21f']) - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, :tag=>'I21') - TkcLine.new(@canvas, xy2, :fill=>@C['fg'], :width=>2, :tag=>'I21') - - xy = [182, 486, 244, 498] # Top - TkcOval.new(@canvas, xy, :fill=>color, :outline=>'', :width=>2, - :tag=>['I21', 'I21f']) - TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], :width=>2, - :tag=>['I21', 'I21t']) - xy = [189, 532, 237, 540] # Bottom - TkcOval.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>2, - :tag=>['I21', 'I21b']) - end - - def move21(step = nil) - step = get_step(21, step) - - numsteps = 30 - return 0 if step >= numsteps - - x1, y1, x2, y2 = @canvas.coords('I21b') - # lx1, ly1, lx2, ly2 = @canvas.coords('I21t') - lx1, ly1, lx2, ly2 = [183, 492, 243, 504] - - f = step / numsteps.to_f - y2 = y2 - 3 - xx1 = x1 + (lx1 - x1) * f - yy1 = y1 + (ly1 - y1) * f - xx2 = x2 + (lx2 - x2) * f - yy2 = y2 + (ly2 - y2) * f - - @canvas.itemconfigure('I21b', :fill=>@C['20']) - @canvas.delete('I21w') - TkcPolygon.new(@canvas, x2, y2, x1, y1, xx1, yy1, xx2, yy1, - :tag=>['I21', 'I21w'], :outline=>'', :fill=>@C['20']) - @canvas.lower('I21w', 'I21') - @canvas.raise('I21b') - @canvas.lower('I21f') - - return((step == numsteps - 1)? 3: 1) - end - - # Bucket drop - def draw22 - # do nothing - end - - def move22(step = nil) - step = get_step(22, step) - pos = [[213, 513], [213, 523], [213, 543, :x], [213, 583], [213, 593]] - - @canvas.itemconfigure('I21f', :fill=>@C['22']) if step == 0 - return 0 if step >= pos.length - where = pos[step] - move_abs('I21', where) - h20(where[1], 40) - @canvas.delete('I21_a') # Delete handles - - return 3 if where[2] == :x - return 1 - end - - # Blow dart - def draw23 - color = @C['23a'] - color2 = @C['23b'] - color3 = @C['23c'] - - xy = [185, 623, 253, 650] # Block - TkcRectangle.new(@canvas, xy, :fill=>'black', :outline=>@C['fg'], - :width=>2, :tag=>'I23a') - xy = [187, 592, 241, 623] # Balloon - TkcOval.new(@canvas, xy, :outline=>'', :fill=>color, :tag=>'I23b') - TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :tag=>'I23b', - :style=>:arc, :start=>12, :extent=>336) - xy = [239, 604, 258, 589, 258, 625, 239, 610] # Balloon nozzle - TkcPolygon.new(@canvas, xy, :outline=>'', :fill=>color, :tag=>'I23b') - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I23b') - - xy = [285, 611, 250, 603] # Dart body - TkcOval.new(@canvas, xy, :fill=>color2, :outline=>@C['fg'], - :width=>3, :tag=>'I23d') - xy = [249, 596, 249, 618, 264, 607, 249, 596] # Dart tail - TkcPolygon.new(@canvas, xy, :fill=>color3, :outline=>@C['fg'], - :width=>3, :tag=>'I23d') - xy = [249, 607, 268, 607] # Dart detail - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I23d') - xy = [285, 607, 305, 607] # Dart needle - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I23d') - end - - def move23(step = nil) - step = get_step(23, step) - - pos = [ - [277, 607], [287, 607], [307, 607, :x], [347, 607], [407, 607], - [487, 607], [587, 607], [687, 607], [787, 607], [-100, -100] - ] - - return 0 if step >= pos.length - if step <= 1 - ox, oy = anchor('I23a', :n) - @canvas.scale('I23b', ox, oy, 0.9, 0.5) - end - where = pos[step] - move_abs('I23d', where) - - return 3 if where[2] == :x - return 1 - end - - # Balloon - def draw24 - color = @C['24a'] - xy = [366, 518, 462, 665] # Balloon - TkcOval.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], - :width=>3, :tag=>'I24') - xy = [414, 666, 414, 729] # String - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I24') - xy = [410, 666, 404, 673, 422, 673, 418, 666] # Nozzle - TkcPolygon.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], - :width=>3, :tag=>'I24') - - xy = [387, 567, 390, 549, 404, 542] # Reflections - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :smooth=>true, - :width=>2, :tag=>'I24') - xy = [395, 568, 399, 554, 413, 547] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :smooth=>true, - :width=>2, :tag=>'I24') - xy = [403, 570, 396, 555, 381, 553] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :smooth=>true, - :width=>2, :tag=>'I24') - xy = [408, 564, 402, 547, 386, 545] - TkcLine.new(@canvas, xy, :fill=>@C['fg'], :smooth=>true, - :width=>2, :tag=>'I24') - end - - def move24(step = nil) - step = get_step(24, step) - - return 0 if step > 4 - return 2 if step == 4 - - if step == 0 - @canvas.delete('I24') # Exploding balloon - xy = [ - 347, 465, 361, 557, 271, 503, 272, 503, 342, 574, 259, 594, - 259, 593, 362, 626, 320, 737, 320, 740, 398, 691, 436, 738, - 436, 739, 476, 679, 528, 701, 527, 702, 494, 627, 548, 613, - 548, 613, 480, 574, 577, 473, 577, 473, 474, 538, 445, 508, - 431, 441, 431, 440, 400, 502, 347, 465, 347, 465 - ] - TkcPolygon.new(@canvas, xy, :tag=>'I24', :fill=>@C['24b'], - :outline=>@C['24a'], :width=>10, :smooth=>true) - msg = Tk.subst(@S['message'].value) - TkcText.new(@canvas, centroid('I24'), :text=>msg, :tag=>['I24', 'I24t'], - :justify=>:center, :font=>['Times Roman', 18, :bold]) - return 1 - end - - @canvas.itemconfigure('I24t', :font=>['Times Roman', 18 + 6*step, :bold]) - @canvas.move('I24', 0, -60) - ox, oy = centroid('I24') - @canvas.scale('I24', ox, oy, 1.25, 1.25) - return 1 - end - - # Displaying the message - def move25(step = nil) - step = get_step(25, step) - - if step == 0 - @XY['25'] = Tk::Clock.clicks(:milliseconds) - return 1 - end - elapsed = Tk::Clock.clicks(:milliseconds) - @XY['25'] - return 1 if elapsed < 5000 - return 2 - end - - # Collapsing balloon - def move26(step = nil) - step = get_step(26, step) - - if step >= 3 - @canvas.delete('I24', 'I26') - TkcText.new(@canvas, 430, 735, :anchor=>:s, :tag=>'I26', - #:text=>'click to continue', - :text=>'クリックã§ãƒªã‚»ãƒƒãƒˆã—ã¾ã™', - :font=>['Times Roman', 20, :bold]) - @canvas.bind('1', proc{reset}) - return 4 - end - - ox, oy = centroid('I24') - @canvas.scale('I24', ox, oy, 0.8, 0.8) - @canvas.move('I24', 0, 60) - @canvas.itemconfigure('I24t', :font=>['Times Roman', 30 - 6*step, :bold]) - return 1 - end - - ################################################################ - # - # Helper functions - # - def box(x, y, r) - [x - r, y - r, x + r, y + r] - end - - def move_abs(item, xy) - x, y = xy - ox, oy = centroid(item) - dx = x - ox - dy = y - oy - @canvas.move(item, dx, dy) - end - - def rotate_item(item, ox, oy, beta) - xy = @canvas.coords(item) - xy2 = [] - 0.step(xy.length - 1, 2){|idx| - x, y = xy[idx, 2] - xy2.concat(rotate_c(x, y, ox, oy, beta)) - } - @canvas.coords(item, xy2) - end - - def rotate_c(x, y, ox, oy, beta) - # rotates vector (ox,oy)->(x,y) by beta degrees clockwise - - x -= ox # Shift to origin - y -= oy - - beta = beta * Math.atan(1) * 4 / 180.0 # Radians - xx = x * Math.cos(beta) - y * Math.sin(beta) # Rotate - yy = x * Math.sin(beta) + y * Math.cos(beta) - - xx += ox # Shift back - yy += oy - - [xx, yy] - end - - def reset - draw_all - @canvas.bind_remove('1') - @S['mode'].value = :MSTART - @S['active'] = [0] - end - - # Each Move## keeps its state info in STEP, this retrieves and increments it - def get_step(who, step) - if step - @STEP[who] = step - else - if !@STEP.exist?(who) || @STEP[who] == "" - @STEP[who] = 0 - else - @STEP[who] += 1 - end - end - @STEP[who] - end - - def reset_step - @S['cnt'].value = 0 - @STEP.keys.each{|k| @STEP[k] = ''} - end - - def sine(xy0, amp, freq, opts = {}) - x0, y0, x1, y1 = xy0 - step = 2 - xy = [] - if y0 == y1 # Horizontal - x0.step(x1, step){|x| - beta = (x - x0) * 2 * Math::PI / freq - y = y0 + amp * Math.sin(beta) - xy << x << y - } - else - y0.step(y1, step){|y| - beta = (y - y0) * 2 * Math::PI / freq - x = x0 + amp * Math.sin(beta) - xy << x << y - } - end - TkcLine.new(@canvas, xy, opts) - end - - def round_rect(xy, radius, opts={}) - x0, y0, x3, y3 = xy - r = @canvas.winfo_pixels(radius) - d = 2 * r - - # Make sure that the radius of the curve is less than 3/8 size of the box! - maxr = 0.75 - if d > maxr * (x3 - x0) - d = maxr * (x3 - x0) - end - if d > maxr * (y3 - y0) - d = maxr * (y3 - y0) - end - - x1 = x0 + d - x2 = x3 - d - y1 = y0 + d - y2 = y3 - d - - xy = [x0, y0, x1, y0, x2, y0, x3, y0, x3, y1, x3, y2] - xy.concat([x3, y3, x2, y3, x1, y3, x0, y3, x0, y2, x0, y1]) - return xy - end - - def round_poly(canv, xy, radii, opts) - lenXY = xy.length - lenR = radii.length - if lenXY != 2*lenR - raise "wrong number of vertices and radii" - end - - knots = [] - x0 = xy[-2]; y0 = xy[-1] - x1 = xy[0]; y1 = xy[1] - xy << xy[0] << xy[1] - - 0.step(lenXY - 1, 2){|i| - radius = radii[i/2] - r = canv.winfo_pixels(radius) - - x2 = xy[i+2]; y2 = xy[i+3] - z = _round_poly2(x0, y0, x1, y1, x2, y2, r) - knots.concat(z) - - x0 = x1; y0 = y1 - x1 = x2; y1 = y2 - } - TkcPolygon.new(canv, knots, {:smooth=>true}.update(opts)) - end - - def _round_poly2(x0, y0, x1, y1, x2, y2, radius) - d = 2 * radius - maxr = 0.75 - - v1x = x0 - x1 - v1y = y0 - y1 - v2x = x2 - x1 - v2y = y2 - y1 - - vlen1 = Math.sqrt(v1x*v1x + v1y*v1y) - vlen2 = Math.sqrt(v2x*v2x + v2y*v2y) - - if d > maxr * vlen1 - d = maxr * vlen1 - end - if d > maxr * vlen2 - d = maxr * vlen2 - end - - xy = [] - xy << (x1 + d * v1x / vlen1) << (y1 + d * v1y / vlen1) - xy << x1 << y1 - xy << (x1 + d * v2x / vlen2) << (y1 + d * v2y / vlen2) - - return xy - end - - def sparkle(oxy, tag) - xy = [ - [299, 283], [298, 302], [295, 314], [271, 331], - [239, 310], [242, 292], [256, 274], [281, 273] - ] - xy.each{|x, y| - TkcLine.new(@canvas, 271, 304, x, y, - :fill=>'white', :width=>3, :tag=>tag) - } - move_abs(tag, oxy) - end - - def centroid(item) - anchor(item, :c) - end - - def anchor(item, where) - x1, y1, x2, y2 = @canvas.bbox(item) - case(where) - when :n - y = y1 - when :s - y = y2 - else - y = (y1 + y2) / 2.0 - end - case(where) - when :w - x = x1 - when :e - x = x2 - else - x = (x1 + x2) / 2.0 - end - return [x, y] - end -end - -TkGoldberg_Demo.new(base_frame) diff --git a/ext/tk/sample/demos-jp/hello b/ext/tk/sample/demos-jp/hello deleted file mode 100644 index e942f3d851..0000000000 --- a/ext/tk/sample/demos-jp/hello +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- -require 'tk' - -TkButton.new(nil, - 'text'=>"ã“ã‚“ã«ã¡ã¯ã€ä¸–ç•Œ", - 'command'=>proc{print "ã“ã‚“ã«ã¡ã¯ã€ä¸–ç•Œ\n"; exit} -).pack - -Tk.mainloop diff --git a/ext/tk/sample/demos-jp/hscale.rb b/ext/tk/sample/demos-jp/hscale.rb deleted file mode 100644 index 2d2e11336f..0000000000 --- a/ext/tk/sample/demos-jp/hscale.rb +++ /dev/null @@ -1,79 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -require "tkcanvas" - -if defined?($hscale_demo) && $hscale_demo - $hscale_demo.destroy - $hscale_demo = nil -end - -$hscale_demo = TkToplevel.new {|w| - title("Horizontal Scale Demonstration") - iconname("hscale") -} -positionWindow($hscale_demo) - -base_frame = TkFrame.new($hscale_demo).pack(:fill=>:both, :expand=>true) - -msg = TkLabel.new(base_frame) { - font $font - wraplength '3.5i' - justify 'left' - text "下ã«ã¯çŸ¢å°ãŒ1ã¤ã¨æ°´å¹³ãªã‚¹ã‚±ãƒ¼ãƒ«ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚\ -スケール上ã§ãƒžã‚¦ã‚¹ãƒœã‚¿ãƒ³1をクリックã€ã¾ãŸã¯ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã¨\ -矢å°ã®é•·ã•ã‚’変ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" -} -msg.pack('side'=>'top') - -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc { - tmppath = $hscale_demo - $hscale_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc { showCode 'hscale' } - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -def setWidth(w, width) - width = width + 21 - x2 = width - 30 - if x2 < 21 - x2 = 21 - end - w.coords 'poly',20,15,20,35,x2,35,x2,45,width,25,x2,5,x2,15,20,15 - w.coords 'line',20,15,20,35,x2,35,x2,45,width,25,x2,5,x2,15,20,15 -end - -TkFrame.new(base_frame) {|frame| - canvas = TkCanvas.new(frame) {|c| - width 50 - height 50 - bd 0 - highlightthickness 0 - TkcPolygon.new(c, '0', '0', '1', '1', '2', '2') { - fill 'DeepSkyBlue' - tags 'poly' - } - TkcLine.new(c, '0', '0', '1', '1', '2', '2', '0', '0') { - fill 'black' - tags 'line' - } - }.pack('side'=>'top', 'expand'=>'yes', 'anchor'=>'s', 'fill'=>'x', 'padx'=>'15') - scale = TkScale.new(frame) { - orient 'horizontal' - length 284 - from 0 - to 250 - command proc{|value| setWidth(canvas, value)} - tickinterval 50 - }.pack('side'=>'bottom', 'expand'=>'yes', 'anchor'=>'n') - scale.set 75 -}.pack('side'=>'top', 'fill'=>'x') diff --git a/ext/tk/sample/demos-jp/icon.rb b/ext/tk/sample/demos-jp/icon.rb deleted file mode 100644 index 7bf6d9731b..0000000000 --- a/ext/tk/sample/demos-jp/icon.rb +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# iconic button widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($icon_demo) && $icon_demo - $icon_demo.destroy - $icon_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$icon_demo = TkToplevel.new {|w| - title("Iconic Button Demonstration") - iconname("icon") - positionWindow(w) -} - -base_frame = TkFrame.new($icon_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '5i' - justify 'left' - text "ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã¨ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³ä¸Šã«ãƒ“ットマップや画åƒã‚’表示ã™ã‚‹ 3 ã¤ã®æ–¹æ³•ã‚’示ã—ã¦ã„ã¾ã™ã€‚å·¦ã«ã‚ã‚‹ã®ã¯2ã¤ã®ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã§ã€ãã‚Œãžã‚ŒãŒã€ãƒ“ットマップã¨é¸æŠžã‚’示ã™ã‚¤ãƒ³ã‚¸ã‚±ãƒ¼ã‚¿ã§ã§ãã¦ã„ã¾ã™ã€‚中央ã«ã‚ã‚‹ã®ã¯ã€é¸æŠžæ¸ˆã¿ã‹ã©ã†ã‹ã«ã‚ˆã£ã¦ç•°ãªã‚‹ç”»åƒã‚’表示ã™ã‚‹ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³ã§ã™ã€‚å³å´ã«ã‚ã‚‹ã®ã¯é¸æŠžæ¸ˆã¿ã‹ã©ã†ã‹ã«ã‚ˆã£ã¦èƒŒæ™¯è‰²ãŒå¤‰ã‚るビットマップを表示ã™ã‚‹ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³ã§ã™ã€‚" -} -msg.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $icon_demo - $icon_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'icon'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# image ç”Ÿæˆ -flagup = \ -TkBitmapImage.new('file'=>[$demo_dir,'..', - 'images','flagup.xbm'].join(File::Separator), - 'maskfile'=>\ - [$demo_dir,'..','images','flagup.xbm'].join(File::Separator)) -flagdown = \ -TkBitmapImage.new('file'=>[$demo_dir,'..', - 'images','flagdown.xbm'].join(File::Separator), - 'maskfile'=>\ - [$demo_dir,'..', - 'images','flagdown.xbm'].join(File::Separator)) - -# å¤‰æ•°ç”Ÿæˆ -letters = TkVariable.new - -# frame ç”Ÿæˆ -TkFrame.new(base_frame, 'borderwidth'=>10){|w| - TkFrame.new(w) {|f| - # TkRadioButton.new(f){ - Tk::RadioButton.new(f){ - bitmap '@' + [$demo_dir,'..', - 'images','letters.xbm'].join(File::Separator) - variable letters - value 'full' - }.pack('side'=>'top', 'expand'=>'yes') - - # TkRadioButton.new(f){ - Tk::RadioButton.new(f){ - bitmap '@' + [$demo_dir,'..', - 'images','noletter.xbm'].join(File::Separator) - variable letters - value 'empty' - }.pack('side'=>'top', 'expand'=>'yes') - - }.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'5m') - - # TkCheckButton.new(w) { - Tk::CheckButton.new(w) { - image flagdown - selectimage flagup - indicatoron 0 - selectcolor self['background'] - }.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'5m') - - # TkCheckButton.new(w) { - Tk::CheckButton.new(w) { - bitmap '@' + [$demo_dir,'..', - 'images','letters.xbm'].join(File::Separator) - indicatoron 0 - selectcolor 'SeaGreen1' - }.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'5m') - -}.pack('side'=>'top') - diff --git a/ext/tk/sample/demos-jp/image1.rb b/ext/tk/sample/demos-jp/image1.rb deleted file mode 100644 index e07f1d3afc..0000000000 --- a/ext/tk/sample/demos-jp/image1.rb +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# two image widgets demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($image1_demo) && $image1_demo - $image1_demo.destroy - $image1_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$image1_demo = TkToplevel.new {|w| - title('Image Demonstration #1') - iconname("Image1") - positionWindow(w) -} - -base_frame = TkFrame.new($image1_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "ã“ã®ãƒ‡ãƒ¢ã§ã¯2ã¤ã®ãƒ©ãƒ™ãƒ«ä¸Šã«ç”»åƒã‚’ãã‚Œãžã‚Œè¡¨ç¤ºã—ã¦ã„ã¾ã™ã€‚" -} -msg.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $image1_demo - $image1_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'image1'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# image ç”Ÿæˆ -image1a = \ -TkPhotoImage.new('file'=>[$demo_dir,'..', - 'images','earth.gif'].join(File::Separator)) -image1b = \ -TkPhotoImage.new('file'=>[$demo_dir,'..', - 'images','earthris.gif'].join(File::Separator)) - -# label ç”Ÿæˆ -#[ TkLabel.new(base_frame, 'image'=>image1a, 'bd'=>1, 'relief'=>'sunken'), -# TkLabel.new(base_frame, 'image'=>image1b, 'bd'=>1, 'relief'=>'sunken') -#].each{|w| w.pack('side'=>'top', 'padx'=>'.5m', 'pady'=>'.5m')} -[ Tk::Label.new(base_frame, 'image'=>image1a, 'bd'=>1, 'relief'=>'sunken'), - Tk::Label.new(base_frame, 'image'=>image1b, 'bd'=>1, 'relief'=>'sunken') -].each{|w| w.pack('side'=>'top', 'padx'=>'.5m', 'pady'=>'.5m')} - diff --git a/ext/tk/sample/demos-jp/image2.rb b/ext/tk/sample/demos-jp/image2.rb deleted file mode 100644 index 312ec41f2a..0000000000 --- a/ext/tk/sample/demos-jp/image2.rb +++ /dev/null @@ -1,107 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# widget demo 'load image' (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($image2_demo) && $image2_demo - $image2_demo.destroy - $image2_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$image2_demo = TkToplevel.new {|w| - title('Image Demonstration #2') - iconname("Image2") - positionWindow(w) -} - -base_frame = TkFrame.new($image2_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "ã“ã®ãƒ‡ãƒ¢ã§ã¯Tkã® photo image を使用ã—ã¦ç”»åƒã‚’見るã“ã¨ãŒã§ãã¾ã™ã€‚最åˆã«ã‚¨ãƒ³ãƒˆãƒªå†…ã«ã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªåを入れã¦ä¸‹ã•ã„。次ã«ä¸‹ã®ãƒªã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã«ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’ロードã™ã‚‹ãŸã‚ã€ãƒªã‚¿ãƒ¼ãƒ³ã‚’押ã—ã¦ãã ã•ã„。ãã®å¾Œã€ç”»åƒã‚’é¸æŠžã™ã‚‹ãŸã‚ã«ãƒªã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã®ä¸­ã®ãƒ•ã‚¡ã‚¤ãƒ«åをダブルクリックã—ã¦ä¸‹ã•ã„。" -} -msg.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $image2_demo - $image2_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'image2'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# å¤‰æ•°ç”Ÿæˆ -$dirName = TkVariable.new([$demo_dir,'..','images'].join(File::Separator)) - -# image ç”Ÿæˆ -$image2a = TkPhotoImage.new - -# ファイルå入力部 -TkLabel.new(base_frame, 'text'=>'ディレクトリ:')\ -.pack('side'=>'top', 'anchor'=>'w') - -image2_e = TkEntry.new(base_frame) { - width 30 - textvariable $dirName -}.pack('side'=>'top', 'anchor'=>'w') - -TkFrame.new(base_frame, 'height'=>'3m', 'width'=>20)\ -.pack('side'=>'top', 'anchor'=>'w') - -TkLabel.new(base_frame, 'text'=>'ファイル:')\ -.pack('side'=>'top', 'anchor'=>'w') - -TkFrame.new(base_frame){|w| - s = TkScrollbar.new(w) - l = TkListbox.new(w) { - width 20 - height 10 - yscrollcommand proc{|first,last| s.set first,last} - } - s.command(proc{|*args| l.yview(*args)}) - l.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y') - s.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y') - #l.insert(0,'earth.gif', 'earthris.gif', 'mickey.gif', 'teapot.ppm') - l.insert(0,'earth.gif', 'earthris.gif', 'teapot.ppm') - l.bind('Double-1', proc{|x,y| loadImage $image2a,l,x,y}, '%x %y') - - image2_e.bind 'Return', proc{loadDir l} - -}.pack('side'=>'top', 'anchor'=>'w') - -# image é…ç½® -[ TkFrame.new(base_frame, 'height'=>'3m', 'width'=>20), - TkLabel.new(base_frame, 'text'=>'ç”»åƒ:'), - # TkLabel.new(base_frame, 'image'=>$image2a) - Tk::Label.new(base_frame, 'image'=>$image2a) -].each{|w| w.pack('side'=>'top', 'anchor'=>'w')} - -# メソッド定義 -def loadDir(w) - w.delete(0,'end') - Dir.glob([$dirName,'*'].join(File::Separator)).sort.each{|f| - w.insert('end',File.basename(f)) - } -end - -def loadImage(img,w,x,y) - img.file([$dirName, w.get("@#{x},#{y}")].join(File::Separator)) -end - diff --git a/ext/tk/sample/demos-jp/image3.rb b/ext/tk/sample/demos-jp/image3.rb deleted file mode 100644 index e5bb1846c9..0000000000 --- a/ext/tk/sample/demos-jp/image3.rb +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# image3.rb -# -# This demonstration script creates a simple collection of widgets -# that allow you to select and view images in a Tk label. -# -# widget demo 'load image' (called by 'widget') -# - -# toplevel widget -if defined?($image3_demo) && $image3_demo - $image3_demo.destroy - $image3_demo = nil -end - -# demo toplevel widget -$image3_demo = TkToplevel.new {|w| - title('Image Demonstration #3') - iconname("Image3") - positionWindow(w) -} - -base_frame = TkFrame.new($image3_demo).pack(:fill=>:both, :expand=>true) - -# -def loadDir3(w) - w.delete(0,'end') - Dir.glob([$dirName,'*'].join(File::Separator)).sort.each{|f| - w.insert('end',File.basename(f)) - } -end - -# selectAndLoadDir3 -- -# This procedure pops up a dialog to ask for a directory to load into -# the listbox and (if the user presses OK) reloads the directory -# listbox from the directory named in the demo's entry. -# -# Arguments: -# w - Name of the toplevel window of the demo. -def selectAndLoadDir3(w, lbox) - dir = Tk.chooseDirectory(:initialdir=>$dirName.value, - :parent=>w, :mustexist=>true) - if dir.length > 0 - $dirName.value = dir - loadDir3(lbox) - end -end - -def loadImage3(w,x,y) - $image3a.file([$dirName, w.get("@#{x},#{y}")].join(File::Separator)) -end - - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "ã“ã®ãƒ‡ãƒ¢ã§ã¯Tkã® photo image を使用ã—ã¦ç”»åƒã‚’ 見るã“ã¨ãŒã§ãã¾ã™ã€‚最åˆã«ã‚¨ãƒ³ãƒˆãƒªå†…ã«ã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªåを入れã¦ä¸‹ã•ã„。次ã«ä¸‹ã®ãƒªã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã«ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’ロードã™ã‚‹ãŸã‚ã€ãƒªã‚¿ãƒ¼ãƒ³ã‚’押ã—ã¦ãã ã•ã„。ãã®å¾Œã€ç”»åƒã‚’é¸æŠžã™ã‚‹ãŸã‚ã«ãƒªã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã®ä¸­ã®ãƒ•ã‚¡ã‚¤ãƒ«åをダブルクリックã—ã¦ä¸‹ã•ã„。" -} -msg.pack('side'=>'top') - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $image3_demo - $image3_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'image3'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# variable -$dirName = TkVariable.new([$demo_dir,'..','images'].join(File::Separator)) - -# image -begin - $image3a.delete -rescue -end -$image3a = TkPhotoImage.new - -# -image3_f = TkFrame.new(base_frame).pack(:fill=>:both, :expand=>true) - -image3_df = TkLabelFrame.new(base_frame, :text=>'ディレクトリ:') - -image3_ff = TkLabelFrame.new(base_frame, :text=>'ファイル:', - :padx=>'2m', :pady=>'2m') -image3_lbx = TkListbox.new(image3_ff, :width=>20, :height=>10) { - pack(:side=>:left, :fill=>:y, :expand=>true) - yscrollbar(TkScrollbar.new(image3_ff).pack(:side=>:left, :fill=>:y, - :expand=>true)) - insert(0, *(%w(earth.gif earthris.gif teapot.ppm))) - bind('Double-1', proc{|x,y| loadImage3(self, x, y)}, '%x %y') -} - -image3_ent = TkEntry.new(image3_df, :width=>30, :textvariable=>$dirName){ - pack(:side=>:left, :fill=>:both, :padx=>'2m', :pady=>'2m', :expand=>true) - bind('Return', proc{loadDir3(image3_lbx)}) -} - -TkButton.new(image3_df, :pady=>0, :padx=>'2m', :text=>"ディレクトリé¸æŠž", - :command=>proc{selectAndLoadDir3(image3_ent, image3_lbx)}) { - pack(:side=>:left, :fill=>:y, :padx=>[0, '2m'], :pady=>'2m') -} - -image3_if = TkLabelFrame.new(base_frame, :text=>'イメージ:') {|f| - # TkLabel.new(f, :image=>$image3a).pack(:padx=>'2m', :pady=>'2m') - Tk::Label.new(f, :image=>$image3a).pack(:padx=>'2m', :pady=>'2m') -} - -Tk.grid(image3_df, '-', - :sticky=>:ew, :padx=>'1m', :pady=>'1m', :in=>image3_f) -Tk.grid(image3_ff, image3_if, - :sticky=>:nw, :padx=>'1m', :pady=>'1m', :in=>image3_f) -TkGrid.columnconfigure(image3_f, 1, :weight=>1) - diff --git a/ext/tk/sample/demos-jp/items.rb b/ext/tk/sample/demos-jp/items.rb deleted file mode 100644 index 9fef0bedda..0000000000 --- a/ext/tk/sample/demos-jp/items.rb +++ /dev/null @@ -1,380 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# canvas item types widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($items_demo) && $items_demo - $items_demo.destroy - $items_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$items_demo = TkToplevel.new {|w| - title("Canvas Item Demonstration") - iconname("Items") - positionWindow(w) -} - -base_frame = TkFrame.new($items_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -TkLabel.new(base_frame) { - font $font - wraplength '5i' - justify 'left' - text "ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯ã‚­ãƒ£ãƒ³ãƒã‚¹ widget ãŒå…¥ã£ã¦ãŠã‚Šã€ãã®ä¸­ã«ã¯ã‚­ãƒ£ãƒ³ãƒã‚¹ widget ãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹æ§˜ã€…ãªã‚¿ã‚¤ãƒ—ã®ã‚¢ã‚¤ãƒ†ãƒ ã®ä¾‹ãŒå…¥ã£ã¦ã„ã¾ã™ã€‚次ã®ã‚ˆã†ãªæ“作ãŒã§ãã¾ã™ã€‚\n ボタン-1 ドラッグ:\tアイテムを動ã‹ã™ã€‚\n ボタン-2 ドラッグ:\t見ãˆã¦ã„る部分をãšã‚‰ã™ã€‚\n ボタン-3 ドラッグ:\t領域を囲ã†ã€‚\n コントロール-F:\t領域ã®ä¸‹ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’表示ã™ã‚‹ã€‚" -}.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $items_demo - $items_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'items'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -cvs = nil -TkFrame.new(base_frame) {|cf| - # canvas ç”Ÿæˆ - cvs = TkCanvas.new(cf) {|c| - focus - scrollregion '0c 0c 30c 24c' - width '15c' - height '10c' - relief 'sunken' - borderwidth 2 - - hs = TkScrollbar.new(cf) {|s| - orient 'horizontal' - command proc{|*args| c.xview(*args)} - c.xscrollcommand proc{|first,last| s.set first,last} - } - - vs = TkScrollbar.new(cf) {|s| - command proc{|*args| c.yview(*args)} - c.yscrollcommand proc{|first,last| s.set first,last} - } - - if $tk_version =~ /^4\.[01]/ - hs.pack('side'=>'bottom', 'fill'=>'x') - vs.pack('side'=>'right', 'fill'=>'y') - c.pack('in'=>cf, 'expand'=>'yes', 'fill'=>'both') - - else - c.grid('in'=>cf, 'row'=>0, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - vs.grid('row'=>0, 'column'=>1, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - hs.grid('row'=>1, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - TkGrid.rowconfigure(cf, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure(cf, 0, 'weight'=>1, 'minsize'=>0) - - end - - } -}.pack('side'=>'top', 'fill'=>'both', 'expand'=>'yes') - -# Display a 3x3 rectangular grid -TkcRectangle.new(cvs, '0c', '0c', '30c', '24c', 'width'=>2) -TkcLine.new(cvs, '0c', '8c', '30c', '8c', 'width'=>2) -TkcLine.new(cvs, '0c', '16c', '30c', '16c', 'width'=>2) -TkcLine.new(cvs, '10c', '0c', '10c', '24c', 'width'=>2) -TkcLine.new(cvs, '20c', '0c', '20c', '24c', 'width'=>2) - -if $tk_version =~ /^4.*/ - font1 = '-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*' - font2 = '-Adobe-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*' -else - font1 = 'Helvetica 12' - font2 = 'Helvetica 24 bold' -end -if TkWinfo.depth($root).to_i > 1 - blue = 'DeepSkyBlue3' - red = 'red' - bisque = 'bisque3' - green = 'SeaGreen3' -else - blue = 'black' - red = 'black' - bisque = 'black' - green = 'black' -end - -# tag ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’ç”Ÿæˆ -$tag_item = TkcGroup.new(cvs) - -# Set up demos within each of the areas of the grid. -TkcText.new(cvs, '5c', '.2c', 'text'=>'ライン', 'anchor'=>'n') -TkcLine.new(cvs, '1c', '1c', '3c', '1c', '1c', '4c', '3c', '4c', - 'width'=>2, 'fill'=>blue, 'capstyle'=>'butt', - 'join'=>'miter', 'tags'=>$tag_item ) -TkcLine.new(cvs, '4.67c','1c','4.67c','4c', 'arrow'=>'last', 'tags'=>$tag_item) -TkcLine.new(cvs, '6.33c','1c','6.33c','4c', 'arrow'=>'both', 'tags'=>$tag_item) -TkcLine.new(cvs, '5c','6c','9c','6c','9c','1c','8c','1c','8c','4.8c','8.8c', - '4.8c','8.8c','1.2c','8.2c','1.2c','8.2c','4.6c','8.6c','4.6c', - '8.6c','1.4c','8.4c','1.4c','8.4c','4.4c', - 'width'=>3, 'fill'=>red, 'tags'=>$tag_item ) -TkcLine.new(cvs, '1c','5c','7c','5c','7c','7c','9c','7c', 'width'=>'.5c', - 'stipple'=>'@'+[$demo_dir,'..', - 'images','gray25.xbm'].join(File::Separator), - 'arrow'=>'both', 'arrowshape'=>'15 15 7', 'tags'=>$tag_item ) -TkcLine.new(cvs, '1c','7c','1.75c','5.8c','2.5c','7c','3.25c','5.8c','4c','7c', - 'width'=>'.5c', 'capstyle'=>'round', 'join'=>'round', - 'tags'=>$tag_item ) - -TkcText.new(cvs, '15c', '.2c', - 'text'=>'曲線 (滑らã‹ã«ã¤ãªã„ã ç›´ç·š)', 'anchor'=>'n') -TkcLine.new(cvs, '11c','4c','11.5c','1c','13.5c','1c','14c','4c', - 'smooth'=>'on', 'fill'=>blue, 'tags'=>$tag_item ) -TkcLine.new(cvs, '15.5c','1c','19.5c','1.5c','15.5c','4.5c','19.5c','4c', - 'smooth'=>'on', 'arrow'=>'both', 'width'=>3, 'tags'=>$tag_item ) -TkcLine.new(cvs, '12c','6c','13.5c','4.5c','16.5c','7.5c','18c','6c', - '16.5c','4.5c','13.5c','7.5c','12c','6c', - 'smooth'=>'on', 'width'=>'3m', 'capstyle'=>'round', - 'stipple'=>'@'+[$demo_dir, '..', - 'images', 'gray25.xbm'].join(File::Separator), - 'fill'=>red, 'tags'=>$tag_item ) - -TkcText.new(cvs, '25c', '.2c', 'text'=>'多角形', 'anchor'=>'n') -TkcPolygon.new(cvs, '21c','1.0c','22.5c','1.75c','24c','1.0c','23.25c','2.5c', - '24c','4.0c','22.5c','3.25c','21c','4.0c','21.75c','2.5c', - 'fill'=>'green', 'outline'=>'black', 'width'=>4, - 'tags'=>$tag_item ) -TkcPolygon.new(cvs, '25c','4c','25c','4c','25c','1c','26c','1c','27c','4c', - '28c','1c','29c','1c','29c','4c','29c','4c', - 'fill'=>red, 'smooth'=>'on', 'tags'=> $tag_item) -TkcPolygon.new(cvs, '22c','4.5c','25c','4.5c','25c','6.75c','28c','6.75c', - '28c','5.25c','24c','5.25c','24c','6.0c','26c','6c','26c', - '7.5c','22c','7.5c', - 'stipple'=>'@' + [$demo_dir, '..', - 'images', 'gray25.xbm'].join(File::Separator), - 'outline'=>'black', 'tags'=>$tag_item ) - -TkcText.new(cvs, '5c', '8.2c', 'text'=>'矩形', 'anchor'=>'n') -TkcRectangle.new(cvs, '1c','9.5c','4c','12.5c', - 'outline'=>red, 'width'=>'3m', 'tags'=>$tag_item) -TkcRectangle.new(cvs, '0.5c','13.5c','4.5c','15.5c', - 'fill'=>green, 'tags'=>$tag_item ) -TkcRectangle.new(cvs, '6c','10c','9c','15c', 'outline'=>'', - 'stipple'=>'@'+[$demo_dir,'..', - 'images','gray25.xbm'].join(File::Separator), - 'fill'=>blue, 'tags'=>$tag_item ) - -TkcText.new(cvs, '15c', '8.2c', 'text'=>'楕円', 'anchor'=>'n') -TkcOval.new(cvs, '11c','9.5c','14c','12.5c', - 'outline'=>red, 'width'=>'3m', 'tags'=>$tag_item) -TkcOval.new(cvs, '10.5c','13.5c','14.5c','15.5c', - 'fill'=>green, 'tags'=>$tag_item ) -TkcOval.new(cvs, '16c','10c','19c','15c', 'outline'=>'', - 'stipple'=>'@'+[$demo_dir,'..', - 'images','gray25.xbm'].join(File::Separator), - 'fill'=>blue, 'tags'=>$tag_item ) - -TkcText.new(cvs, '25c', '8.2c', 'text'=>'テキスト', 'anchor'=>'n') -TkcRectangle.new(cvs, '22.4c','8.9c','22.6c','9.1c') -TkcText.new(cvs, '22.5c', '9c', 'anchor'=>'n', 'font'=>font1, 'width'=>'4c', - 'text'=>'短ã„テキスト。ワードラップã€å·¦æƒãˆã€ã‚¢ãƒ³ã‚«ãƒ¼ã¯åŒ—(上)。□ã¯å„テキストã®ã‚¢ãƒ³ã‚«ãƒ¼ãƒã‚¤ãƒ³ãƒˆã‚’示ã™ã€‚', 'tags'=>$tag_item ) -TkcRectangle.new(cvs, '25.4c','10.9c','25.6c','11.1c') -TkcText.new(cvs, '25.5c', '11c', 'anchor'=>'w', 'font'=>font1, 'fill'=>blue, - 'text'=>"ã„ãã¤ã‹ã®è¡Œã€‚\nãã‚Œãžã‚Œç‹¬ç«‹ã«\nè¡Œæƒãˆã€‚\nå…¨ã¦å·¦ç«¯ãŒã‚¢ãƒ³ã‚«ãƒ¼ã•ã‚Œã¦ã„る。", 'justify'=>'center', 'tags'=>$tag_item ) -TkcRectangle.new(cvs, '24.9c','13.9c','25.1c','14.1c') -if $tk_version =~ /^4\.[01]/ - TkcText.new(cvs, '25c', '14c', 'anchor'=>'c', 'font'=>font2, 'fill'=>red, - 'stipple'=>'@' + [$demo_dir, '..', - 'images', 'grey.5'].join(File::Separator), - 'text'=>'Stippled characters', 'tags'=>$tag_item ) -else - TkcText.new(cvs, '25c', '14c', 'anchor'=>'c', 'font'=>font2, 'fill'=>red, - 'stipple'=>'gray50', 'text'=>'Stippled characters', - 'tags'=>$tag_item ) -end - -TkcText.new(cvs, '5c', '16.2c', 'text'=>'弧', 'anchor'=>'n') -TkcArc.new(cvs, '0.5c','17c','7c','20c', 'fill'=>green, 'outline'=>'black', - 'start'=>45, 'extent'=>270, 'style'=>'pieslice', 'tags'=>$tag_item) -#TkcArc.new(cvs, '6.5c','17c','9.5c','20c', 'width'=>'4m', 'style'=>'arc', -# 'outline'=>blue, 'start'=>135, 'extent'=>270, -# 'outlinestipple'=>'@' + ['images', 'grey.25'].join(File::Separator), -# 'tags'=>$tag_item) -TkcArc.new(cvs, '6.5c','17c','9.5c','20c', 'width'=>'4m', 'style'=>'arc', - 'outline'=>blue, 'start'=>135, 'extent'=>270, - 'outlinestipple'=>'@'+[$demo_dir, '..', - 'images','gray25.xbm'].join(File::Separator), - 'tags'=>$tag_item) -TkcArc.new(cvs, '0.5c','20c','9.5c','24c', 'width'=>'4m', 'style'=>'pieslice', - 'fill'=>'', 'outline'=>red, 'start'=>225, 'extent'=>90, - 'tags'=>$tag_item) -TkcArc.new(cvs, '5.5c','20.5c','9.5c','23.5c', 'width'=>'4m', 'style'=>'chord', - 'fill'=>blue, 'outline'=>'', 'start'=>45, 'extent'=>270, - 'tags'=>$tag_item) - -TkcText.new(cvs, '15c', '16.2c', 'text'=>'ビットマップ', 'anchor'=>'n') -#TkcBitmap.new(cvs, '13c','20c', -# 'bitmap'=>'@' + ['images', 'face'].join(File::Separator), -# 'tags'=>$tag_item) -TkcBitmap.new(cvs, '13c','20c', - 'bitmap'=>'@' + [$demo_dir, '..', - 'images', 'face.xbm'].join(File::Separator), - 'tags'=>$tag_item) -#TkcBitmap.new(cvs, '17c','18.5c', -# 'bitmap'=>'@' + ['images', 'noletters'].join(File::Separator), -# 'tags'=>$tag_item) -TkcBitmap.new(cvs, '17c','18.5c', - 'bitmap'=>'@' + [$demo_dir, '..', - 'images', 'noletter.xbm'].join(File::Separator), - 'tags'=>$tag_item) -#TkcBitmap.new(cvs, '17c','21.5c', -# 'bitmap'=>'@' + ['images', 'letters'].join(File::Separator), -# 'tags'=>$tag_item) -# ↓ã®å½¢å¼ã§ã‚‚å¯èƒ½ -TkcBitmap.new(cvs, '17c','21.5c') { - bitmap '@' + [$demo_dir, '..', 'images', 'letters.xbm'].join(File::Separator) - tags $tag_item -} -#TkcBitmap.new(cvs, '17c','21.5c') { -# bitmap '@' + ['images', 'letters'].join(File::Separator) -# tags $tag_item -#} - -TkcText.new(cvs, '25c', '16.2c', 'text'=>'ウィンドウ', 'anchor'=>'n') -TkButton.new(cvs) {|b| - text '押ã—ã¦ã­' - command proc{butPress cvs, red} - TkcWindow.new(cvs, '21c','18c', - 'window'=>b, 'anchor'=>'nw', 'tags'=>$tag_item) -} -TkEntry.new(cvs, 'width'=>20, 'relief'=>'sunken') {|e| - insert 'end', '編集ã—ã¦ã­' - TkcWindow.new(cvs, '21c','21c', - 'window'=>e, 'anchor'=>'nw', 'tags'=>$tag_item) -} -TkScale.new(cvs, 'from'=>0, 'to'=>100, 'length'=>'6c', 'sliderlength'=>'.4c', - 'width'=>'.5c', 'tickinterval'=>0 ) {|scl| - TkcWindow.new(cvs, '28.5c','17.5c', - 'window'=>scl, 'anchor'=>'n', 'tags'=>$tag_item) -} -TkcText.new(cvs, '21c', '17.9c', 'text'=>'ボタン:', 'anchor'=>'sw') -TkcText.new(cvs, '21c', '20.9c', 'text'=>'エントリ:', 'anchor'=>'sw') -TkcText.new(cvs, '28.5c', '17.4c', 'text'=>'スケール:', 'anchor'=>'s') - -# Set up event bindings for canvas: -cvs.itembind($tag_item, 'Any-Enter', proc{itemEnter cvs}) -cvs.itembind($tag_item, 'Any-Leave', proc{itemLeave cvs}) -cvs.bind('2', proc{|x,y| cvs.scan_mark x,y}, '%x %y') -cvs.bind('B2-Motion', proc{|x,y| cvs.scan_dragto x,y}, '%x %y') -cvs.bind('3', proc{|x,y| itemMark cvs,x,y}, '%x %y') -cvs.bind('B3-Motion', proc{|x,y| itemStroke cvs,x,y}, '%x %y') -cvs.bind('Control-f', proc{itemsUnderArea cvs}) -cvs.bind('1', proc{|x,y| itemStartDrag cvs,x,y}, '%x %y') -cvs.bind('B1-Motion', proc{|x,y| itemDrag cvs,x,y}, '%x %y') -# Utility methods for highlighting the item under the pointer - -$restoreCmd = nil -def itemEnter (c) - if TkWinfo.depth(c).to_i == 1 - $restoreCmd = nil - return - end - type = c.itemtype('current') - if type == TkcWindow - $restoreCmd = nil - return - end - if type == TkcBitmap - bg = (c.itemconfiginfo('current', 'background'))[4] - $restoreCmd = proc{c.itemconfigure 'current', 'background', bg} - c.itemconfigure 'current', 'background', 'SteelBlue2' - return - end - fill = (c.itemconfiginfo('current', 'fill'))[4] - if (type == TkcRectangle || type == TkcOval || type == TkcArc) && fill == [] - outline = (c.itemconfiginfo('current', 'outline'))[4] - $restoreCmd = proc{c.itemconfigure 'current', 'outline', outline} - c.itemconfigure 'current', 'outline', 'SteelBlue2' - else - $restoreCmd = proc{c.itemconfigure 'current', 'fill', fill} - c.itemconfigure 'current', 'fill', 'SteelBlue2' - end -end - -def itemLeave(c) - $restoreCmd.call if $restoreCmd -end - -# Utility methods for stroking out a rectangle and printing what's -# underneath the rectangle's area. - -def itemMark(c,x,y) - $areaX1 = c.canvasx(x) - $areaY1 = c.canvasy(y) - c.delete 'area' -end - -def itemStroke(c,x,y) - x = c.canvasx(x) - y = c.canvasy(y) - if $areaX1 != x && $areaY1 != y - c.delete 'area' - c.addtag_withtag 'area', TkcRectangle.new(c, $areaX1, $areaY1, x, y, - '-outline', 'black') - $areaX2 = x - $areaY2 = y - end -end - -def itemsUnderArea(c) - area = c.find_withtag('area') - items = [] - c.find_enclosed($areaX1,$areaY1,$areaX2,$areaY2).each{|i| - items.push(i) if i.gettags.include?($tag_item) - } - print "Items enclosed by area: #{items.inspect}\n"; STDOUT.flush - items.clear - c.find_overlapping($areaX1,$areaY1,$areaX2,$areaY2).each{|i| - items.push(i) if i.gettags.include?($tag_item) - } - print "Items overlapping area: #{items.inspect}\n"; STDOUT.flush -end - -$areaX1 = 0 -$areaY1 = 0 -$areaX2 = 0 -$areaY2 = 0 - -# Utility methods to support dragging of items. - -def itemStartDrag(c,x,y) - $lastX = c.canvasx(x) - $lastY = c.canvasy(y) -end - -def itemDrag(c,x,y) - x = c.canvasx(x) - y = c.canvasy(y) - c.move('current', x - $lastX, y - $lastY) - $lastX = x - $lastY = y -end - -# Method that's invoked when the button embedded in the canvas -# is invoked. - -def butPress(w,color) - i = TkcText.new(w, '25c', '18.1c', - 'text'=>'ã„ã¦ã¦!!', 'fill'=>color, 'anchor'=>'n') - Tk.after(500, proc{w.delete i}) -end diff --git a/ext/tk/sample/demos-jp/ixset b/ext/tk/sample/demos-jp/ixset deleted file mode 100644 index 40a77f487c..0000000000 --- a/ext/tk/sample/demos-jp/ixset +++ /dev/null @@ -1,333 +0,0 @@ -#!/usr/bin/env ruby - -# ixset -- -# A nice interface to "xset" to change X server settings -# - -require 'tk' - -class Xsettings - # - # Button actions - # - def quit - @root.destroy - end - - def ok - writesettings - quit - end - - def cancel - readsettings - dispsettings - end - - # apply is just "writesettings" - - - # - # Read current settings - # - def readsettings - xfd = open("|xset q", 'r') - xfd.readlines.each{|line| - fields = line.chomp.strip.split(/\s+/) - case fields[0] - when "auto" - if fields[1] == 'repeat:' - @kbdrep = fields[2] - @w_kbdrep.set(@kbdrep) - @kbdcli = fields[6] - end - - when "bell" - @bellvol = fields[2] - @bellpit = fields[5] - @belldur = fields[8] - - when "acceleration:" - @mouseacc = fields[1] - @mousethr = fields[3] - - when "prefer" - if fields[2] == 'yes' - @screenbla = 'blank' - else - @screenbla = 'noblank' - end - @w_screenbla.set(@screenbla) - - when "timeout:" - @screentim = fields[1] - @screencyc = fields[3] - - end - } - - xfd.close - end - - # - # Write settings into the X server - # - def writesettings - @bellvol = @w_bellvol.get - @bellpit = @w_bellpit.get - @belldur = @w_belldur.get - - @kbdrep = @w_kbdrep.get - if @kbdrep == 'on' - @kbdcli = @w_kbdcli.get - else - @kbdcli = 'off' - end - - @mouseacc = @w_mouseacc.get - @mousethr = @w_mousethr.get - - @screentim = @w_screentim.get - @screencyc = @w_screencyc.get - @screenbla = @w_screenbla.get - - system("xset \ - b #{@bellvol} #{@bellpit} #{@belldur} \ - c #{@kbdcli} \ - r #{@kbdrep} \ - m #{@mouseacc} #{@mousethr} \ - s #{@screentim} #{@screencyc} \ - s #{@screenbla}") - end - - # - # Sends all settings to the window - # - def dispsettings - @w_bellvol.set(@bellvol) - @w_bellpit.set(@bellpit) - @w_belldur.set(@belldur) - - @w_kbdonoff.set(@w_kbdrep.get) - @w_kbdcli.set(@kbdcli) - - @w_mouseacc.set(@mouseacc) - @w_mousethr.set(@mousethr) - - @w_screenblank.set(@w_screenbla.get) - @w_screenpat.set(@w_screenbla.get) - - @w_screentim.set(@screentim) - @w_screencyc.set(@screencyc) - end - - # - # Create all windows, and pack them - # - class LabelEntry - def initialize(parent, text, length) - @frame = TkFrame.new(parent) - TkLabel.new(@frame, 'text'=>text).pack('side'=>'left','expand'=>'y') - @entry = TkEntry.new(@frame, 'width'=>length, 'relief'=>'sunken') { - pack('side'=>'left','expand'=>'y') - } - end - def pack(keys) - @frame.pack(keys) - end - def get - @entry.value - end - def set(value) - @entry.delete(0,'end') - @entry.insert(0, value) - end - end - - def createwindows - win = self - - # - # Buttons - # - buttons = TkFrame.new(@root) {|f| - [ TkButton.new(f, 'command'=>proc{win.ok}, 'text'=>'Ok'), - TkButton.new(f, 'command'=>proc{win.writesettings}, 'text'=>'Apply'), - TkButton.new(f, 'command'=>proc{win.cancel}, 'text'=>'Cancel'), - TkButton.new(f, 'command'=>proc{win.quit}, 'text'=>'Quit') ].each{|b| - b.pack('side'=>'left', 'expand'=>'yes', 'pady'=>5) - } - } - - # - # Bell settings - # - bell = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2) - l = TkLabel.new(bell, 'text'=>'Bell Settings') - @w_bellvol = TkScale.new(bell, 'from'=>0, 'to'=>100, 'length'=>200, - 'tickinterval'=>20, 'orient'=>'horizontal', - 'label'=>"Volume (%)") - - f = TkFrame.new(bell) - @w_bellpit = LabelEntry.new(f, "Pitch (Hz)", 6) - @w_bellpit.pack('side'=>'left', 'padx'=>5) - @w_belldur = LabelEntry.new(f, "Duration (ms)", 6) - @w_belldur.pack('side'=>'right', 'padx'=>5) - - l.pack('side'=>'top', 'expand'=>'yes') - @w_bellvol.pack('side'=>'top', 'expand'=>'yes') - f.pack('side'=>'top', 'expand'=>'yes') - - # - # Keyboard settings - # - kbdonoff = nil - kbdcli = nil - kbd = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2) - l = TkLabel.new(kbd, 'text'=>'Keyboard Repeat Settings') - f = TkFrame.new(kbd) - @w_kbdonoff = TkCheckButton.new(f, 'text'=>'On', 'relief'=>'flat', - 'onvalue'=>'on', 'offvalue'=>'off', - 'variable'=>@w_kbdrep ) { - def self.set(value) - if value == 'on' - self.select - else - self.deselect - end - end - pack('side'=>'left', 'expand'=>'yes', 'fill'=>'both') - } - @w_kbdcli = TkScale.new(f, 'from'=>0, 'to'=>100, 'length'=>200, - 'tickinterval'=>20, 'orient'=>'horizontal', - 'label'=>'Click Volume (%)') - @w_kbdcli.pack('side'=>'left', 'expand'=>'yes') - l.pack('side'=>'top', 'expand'=>'yes') - f.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2, 'fill'=>'x') - - # - # Mouse settings - # - mouse = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2) - l = TkLabel.new(mouse, 'text'=>'Mouse Settings') - f = TkFrame.new(mouse) - @w_mouseacc = LabelEntry.new(f, 'Acceleration', 3) - @w_mouseacc.pack('side'=>'left') - @w_mousethr = LabelEntry.new(f, 'Threshold (pixels)', 3) - @w_mousethr.pack('side'=>'right') - l.pack('side'=>'top') - f.pack('side'=>'top', 'expand'=>'yes') - - # - # Screen Saver settings - # - screen = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2) - l = TkLabel.new(screen, 'text'=>'Screen-saver Settings') - f = TkFrame.new(screen) - ff1 = TkFrame.new(f) - [ @w_screenblank = TkRadioButton.new(ff1, 'text'=>'Blank', - 'relief'=>'flat', - 'variable'=>@w_screenbla, - 'value'=>'blank') { - def self.set(value) - if value == 'blank' - self.select - else - self.deselect - end - end - }, - @w_screenpat = TkRadioButton.new(ff1, 'text'=>'Pattern', - 'relief'=>'flat', - 'variable'=>@w_screenbla, - 'value'=>'noblank') { - def self.set(value) - if value != 'blank' - self.select - else - self.deselect - end - end - } - ].each {|w| w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') } - - ff2 = TkFrame.new(f) - [ @w_screentim = LabelEntry.new(ff2, 'Timeout (s)', 5), - @w_screencyc = LabelEntry.new(ff2, 'Cycle (s)', 5) ].each{|w| - w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'e') - } - - ff1.pack('side'=>'left') - ff2.pack('side'=>'left') - - l.pack('side'=>'top') - f.pack('side'=>'top', 'expand'=>'yes') - - # - # Main window - # - buttons.pack('side'=>'top', 'fill'=>'both') - bell.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes') - kbd.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes') - mouse.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes') - screen.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes') - - # - # Let the user resize our window - # - @root.minsize(10,10) - end - - def initialize - @root = TkRoot.new - - @kbdrep = 'on' - @w_kbdrep = TkVariable.new(@kbdrep) - def @w_kbdrep.get - self.value - end - def @w_kbdrep.set(val) - self.value=val - end - - @kbdcli = 0 - - @bellvol = 100 - @bellpit = 440 - @belldur = 100 - - @mouseacc = "3/1" - @mousethr = 4 - - @screenbla = "blank" - @w_screenbla = TkVariable.new(@screenbla) - def @w_screenbla.get - self.value - end - def @w_screenbla.set(val) - self.value=val - end - - @screentim = 600 - @screencyc = 600 - - # - # Listen what "xset" tells us... - # - readsettings - - # - # Create all windows - # - createwindows - - # - # Write xset parameters - # - dispsettings - end -end - -Xsettings.new - -Tk.mainloop diff --git a/ext/tk/sample/demos-jp/ixset2 b/ext/tk/sample/demos-jp/ixset2 deleted file mode 100644 index e11ce2ac8f..0000000000 --- a/ext/tk/sample/demos-jp/ixset2 +++ /dev/null @@ -1,369 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- -# -# ixset -- -# A nice interface to "xset" to change X server settings -# - -require 'tk' - -class Xsettings - # - # Button actions - # - def quit - @root.destroy - end - - def ok - writesettings - quit - end - - def cancel - readsettings - dispsettings - @btn_APPLY.state(:disabled) - @btn_CANCEL.state(:disabled) - end - - # apply is just "writesettings" - def apply - writesettings - @btn_APPLY.state(:disabled) - @btn_CANCEL.state(:disabled) - end - - # - # Read current settings - # - def readsettings - xfd = open("|xset q", 'r') - xfd.readlines.each{|line| - fields = line.chomp.strip.split(/\s+/) - case fields[0] - when "auto" - if fields[1] == 'repeat:' - @kbdrep = fields[2] - @w_kbdrep.set(@kbdrep) - @kbdcli = fields[6] - end - - when "bell" - @bellvol = fields[2] - @bellpit = fields[5] - @belldur = fields[8] - - when "acceleration:" - @mouseacc = fields[1] - @mousethr = fields[3] - - when "prefer" - if fields[2] == 'yes' - @screenbla = 'blank' - else - @screenbla = 'noblank' - end - @w_screenbla.set(@screenbla) - - when "timeout:" - @screentim = fields[1] - @screencyc = fields[3] - - end - } - - xfd.close - end - - # - # Write settings into the X server - # - def writesettings - @bellvol = @w_bellvol.get - @bellpit = @w_bellpit.get - @belldur = @w_belldur.get - - @kbdrep = @w_kbdrep.get - if @kbdrep == 'on' - @kbdcli = @w_kbdcli.get - else - @kbdcli = 'off' - end - - @mouseacc = @w_mouseacc.get - @mousethr = @w_mousethr.get - - @screentim = @w_screentim.get - @screencyc = @w_screencyc.get - @screenbla = @w_screenbla.get - - system("xset \ - b #{@bellvol} #{@bellpit} #{@belldur} \ - c #{@kbdcli} \ - r #{@kbdrep} \ - m #{@mouseacc} #{@mousethr} \ - s #{@screentim} #{@screencyc} \ - s #{@screenbla}") - end - - # - # Sends all settings to the window - # - def dispsettings - @w_bellvol.set(@bellvol) - @w_bellpit.set(@bellpit) - @w_belldur.set(@belldur) - - @w_kbdonoff.set(@w_kbdrep.get) - @w_kbdcli.set(@kbdcli) - - @w_mouseacc.set(@mouseacc) - @w_mousethr.set(@mousethr) - - @w_screenblank.set(@w_screenbla.get) - @w_screenpat.set(@w_screenbla.get) - - @w_screentim.set(@screentim) - @w_screencyc.set(@screencyc) - end - - # - # Create all windows, and pack them - # - class LabelEntry - def initialize(parent, text, length, range=[]) - @frame = TkFrame.new(parent) - TkLabel.new(@frame, 'text'=>text).pack('side'=>'left') - if range.size > 0 - @entry = TkSpinbox.new(@frame, 'width'=>length, 'relief'=>'sunken', - 'from'=>range[0], 'to'=>range[1]) - else - @entry = TkEntry.new(@frame, 'width'=>length, 'relief'=>'sunken') - end - @entry.pack('side'=>'right','expand'=>'y', 'fill'=>'x') - end - def epath - @frame - end - def pack(keys) - @frame.pack(keys) - end - def get - @entry.value - end - def set(value) - @entry.delete(0,'end') - @entry.insert(0, value) - end - end - - def createwindows - win = self - - # - # Buttons - # - btn_frame = TkFrame.new(@root) - buttons = [ - @btn_OK = TkButton.new(btn_frame, 'command'=>proc{win.ok}, - 'default'=>'active', 'text'=>'了解'), - @btn_APPLY = TkButton.new(btn_frame, 'command'=>proc{win.writesettings}, - 'default'=>'normal', 'text'=>'é©ç”¨', - 'state'=>'disabled'), - @btn_CANCEL = TkButton.new(btn_frame, 'command'=>proc{win.cancel}, - 'default'=>'normal', 'text'=>'å–消', - 'state'=>'disabled'), - @btn_QUIT = TkButton.new(btn_frame, 'command'=>proc{win.quit}, - 'default'=>'normal', 'text'=>'中止') - ] - buttons.each{|b| b.pack('side'=>'left', 'expand'=>'yes', 'pady'=>5) } - - @root.bind('Return', proc{@btn_OK.flash; @btn_OK.invoke}) - @root.bind('Escape', proc{@btn_QUIT.flash; @btn_QUIT.invoke}) - @root.bind('1', proc{|w| - unless buttons.index(w) - @btn_APPLY.state(:normal) - @btn_CANCEL.state(:normal) - end - }, '%W') - @root.bind('Key', proc{|w, k| - unless buttons.index(w) - case k - when 'Return', 'Escape', 'Tab', /.*Shift.*/ - # do nothing - else - @btn_APPLY.state(:normal) - @btn_CANCEL.state(:normal) - end - end - }, '%W %K') - - # - # Bell settings - # - bell = TkLabelframe.new(@root, 'text'=>'ベル設定', - 'padx'=>'1.5m', 'pady'=>'1.5m') - @w_bellvol = TkScale.new(bell, 'from'=>0, 'to'=>100, 'length'=>200, - 'tickinterval'=>20, 'orient'=>'horizontal', - 'label'=>"éŸ³é‡ (%)") - - f = TkFrame.new(bell) - @w_bellpit = LabelEntry.new(f, "音程 (Hz)", 6, [25, 20000]) - @w_bellpit.pack('side'=>'left', 'padx'=>5) - @w_belldur = LabelEntry.new(f, "æŒç¶šæ™‚é–“ (ms)", 6, [1, 10000]) - @w_belldur.pack('side'=>'right', 'padx'=>5) - - @w_bellvol.pack('side'=>'top', 'expand'=>'yes') - f.pack('side'=>'top', 'expand'=>'yes') - - # - # Keyboard settings - # - kbdonoff = nil - kbdcli = nil - kbd = TkLabelframe.new(@root, 'text'=>'キーボードリピート設定', - 'padx'=>'1.5m', 'pady'=>'1.5m') - f = TkFrame.new(kbd) - @w_kbdonoff = TkCheckButton.new(f, 'text'=>'クリック音ã‚ã‚Š', - 'relief'=>'flat', - 'onvalue'=>'on', 'offvalue'=>'off', - 'variable'=>@w_kbdrep ) { - def self.set(value) - if value == 'on' - self.select - else - self.deselect - end - end - pack('side'=>'left', 'expand'=>'yes', 'fill'=>'x', 'padx'=>[0, '1m']) - } - @w_kbdcli = TkScale.new(f, 'from'=>0, 'to'=>100, 'length'=>200, - 'tickinterval'=>20, 'orient'=>'horizontal', - 'label'=>'ã‚¯ãƒªãƒƒã‚¯éŸ³é‡ (%)') - @w_kbdcli.pack('side'=>'left', 'expand'=>'yes', - 'fill'=>'x', 'padx'=>['1m', 0]) - f.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2, 'fill'=>'x') - - # - # Mouse settings - # - mouse = TkLabelframe.new(@root, 'text'=>'マウス設定', - 'padx'=>'1.5m', 'pady'=>'1.5m') - f = TkFrame.new(mouse) - @w_mouseacc = LabelEntry.new(f, '加速é‡', 5) - @w_mouseacc.pack('side'=>'left', 'padx'=>[0, '1m']) - @w_mousethr = LabelEntry.new(f, '閾値 (pixels)', 3, [1, 2000]) - @w_mousethr.pack('side'=>'right', 'padx'=>['1m', 0]) - f.pack('side'=>'top', 'expand'=>'yes') - - # - # Screen Saver settings - # - screen = TkLabelframe.new(@root, 'text'=>'スクリーンセーãƒè¨­å®š', - 'padx'=>'1.5m', 'pady'=>'1.5m') - @w_screenblank = TkRadioButton.new(screen, 'text'=>'ブランク表示', - 'relief'=>'flat', 'anchor'=>'w', - 'variable'=>@w_screenbla, - 'value'=>'blank') { - def self.set(value) - if value == 'blank' - self.select - else - self.deselect - end - end - } - - @w_screenpat = TkRadioButton.new(screen, 'text'=>'パターン表示', - 'relief'=>'flat', 'anchor'=>'w', - 'variable'=>@w_screenbla, - 'value'=>'noblank') { - def self.set(value) - if value != 'blank' - self.select - else - self.deselect - end - end - } - - @w_screentim = LabelEntry.new(screen, 'タイムアウト (s)', 5, [1, 100000]) - @w_screencyc = LabelEntry.new(screen, '周期 (s)', 5, [1, 100000]) - - Tk.grid(@w_screenblank, @w_screentim, 'sticky'=>'e') - Tk.grid(@w_screenpat, @w_screencyc, 'sticky'=>'e') - TkGrid.configure(@w_screenblank, @w_screenpat, 'sticky'=>'ew') - - # - # Main window - # - param = { - 'side'=>'top', 'fill'=>'both', 'expand'=>'yes', - 'padx'=>'1m', 'pady'=>'1m' - } - btn_frame.pack('side'=>'top', 'fill'=>'both') - bell.pack(param) - kbd.pack(param) - mouse.pack(param) - screen.pack(param) - - # - # Let the user resize our window - # - @root.minsize(10,10) - end - - def initialize(title) - @root = TkRoot.new('title'=>title) - - @kbdrep = 'on' - @w_kbdrep = TkVariable.new(@kbdrep) - def @w_kbdrep.get - self.value - end - def @w_kbdrep.set(val) - self.value=val - end - - @kbdcli = 0 - - @bellvol = 100 - @bellpit = 440 - @belldur = 100 - - @mouseacc = "3/1" - @mousethr = 4 - - @screenbla = "blank" - @w_screenbla = TkVariable.new(@screenbla) - def @w_screenbla.get - self.value - end - def @w_screenbla.set(val) - self.value=val - end - - @screentim = 600 - @screencyc = 600 - - # - # Listen what "xset" tells us... - # - readsettings - - # - # Create all windows - # - createwindows - - # - # Write xset parameters - # - dispsettings - end -end - -Xsettings.new(File.basename($0,'.rb')) - -Tk.mainloop diff --git a/ext/tk/sample/demos-jp/knightstour.rb b/ext/tk/sample/demos-jp/knightstour.rb deleted file mode 100644 index f4de10b3b3..0000000000 --- a/ext/tk/sample/demos-jp/knightstour.rb +++ /dev/null @@ -1,274 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# Based on the widget demo of Tcl/Tk8.5.2 -# The following is the original copyright text. -#---------------------------------------------------------------------------- -# Copyright (C) 2008 Pat Thoyts -# -# Calculate a Knight's tour of a chessboard. -# -# This uses Warnsdorff's rule to calculate the next square each -# time. This specifies that the next square should be the one that -# has the least number of available moves. -# -# Using this rule it is possible to get to a position where -# there are no squares available to move into. In this implementation -# this occurs when the starting square is d6. -# -# To solve this fault an enhancement to the rule is that if we -# have a choice of squares with an equal score, we should choose -# the one nearest the edge of the board. -# -# If the call to the Edgemost function is commented out you can see -# this occur. -# -# You can drag the knight to a specific square to start if you wish. -# If you let it repeat then it will choose random start positions -# for each new tour. -#---------------------------------------------------------------------------- -require 'tk' - -class Knights_Tour - # Return a list of accessible squares from a given square - def valid_moves(square) - moves = [] - [ - [-1,-2], [-2,-1], [-2,1], [-1,2], [1,2], [2,1], [2,-1], [1,-2] - ].each{|col_delta, row_delta| - col = (square % 8) + col_delta - row = (square.div(8)) + row_delta - moves << (row * 8 + col) if row > -1 && row < 8 && col > -1 && col < 8 - } - moves - end - - # Return the number of available moves for this square - def check_square(square) - valid_moves(square).find_all{|pos| ! @visited.include?(pos)}.length - end - - # Select the next square to move to. Returns -1 if there are no available - # squares remaining that we can move to. - def next_square(square) - minimum = 9 - nxt = -1 - valid_moves(square).each{|pos| - unless @visited.include?(pos) - cnt = check_square(pos) - if cnt < minimum - minimum = cnt - nxt = pos - elsif cnt == minimum - nxt = edgemost(nxt, pos) - end - end - } - nxt - end - - # Select the square nearest the edge of the board - def edgemost(nxt, pos) - col_A = 3 - ((3.5 - nxt % 8).abs.to_i) - col_B = 3 - ((3.5 - pos % 8).abs.to_i) - row_A = 3 - ((3.5 - nxt.div(8)).abs.to_i) - row_B = 3 - ((3.5 - pos.div(8)).abs.to_i) - (col_A * row_A < col_B * row_B)? nxt : pos - end - - # Display a square number as a standard chess square notation. - def _N(square) - '%c%d' % [(97 + square % 8), (square.div(8) + 1)] - end - - # Perform a Knight's move and schedule the next move. - def move_piece(last, square) - @log.insert(:end, "#{@visited.length}. #{_N last} -> #{_N square}\n", '') - @log.see(:end) - @board.itemconfigure(1+last, :state=>:normal, :outline=>'black') - @board.itemconfigure(1+square, :state=>:normal, :outline=>'red') - @knight.coords(@board.coords(1+square)[0..1]) - @visited << square - if (nxt = next_square(square)) != -1 - @after_id = Tk.after(@delay.numeric){move_piece(square, nxt) rescue nil} - else - @start_btn.state :normal - if @visited.length == 64 - if @initial == square - @log.insert :end, '周éŠ(closed tour)æˆåŠŸï¼' - else - @log.insert :end, "æˆåŠŸ\n", {} - Tk.after(@delay.numeric * 2){tour(rand(64))} if @continuous.bool - end - else - @log.insert :end, "失敗ï¼\n", {} - end - end - end - - # Begin a new tour of the board given a random start position - def tour(square = nil) - @visited.clear - @log.clear - @start_btn.state :disabled - 1.upto(64){|n| - @board.itemconfigure(n, :state=>:disabled, :outline=>'black') - } - unless square - square = @board.find_closest(*(@knight.coords << 0 << 65))[0].to_i - 1 - end - @initial = square - Tk.after_idle{ move_piece(@initial, @initial) rescue nil } - end - - def _stop - Tk.after_cancel(@after_id) rescue nil - end - - def _exit - _stop - $knightstour.destroy - end - - def set_delay(new) - @delay.numeric = new.to_i - end - - def drag_start(w, x, y) - w.dtag('selected') - w.addtag('selected', :withtag, 'current') - @dragging = [x, y] - end - - def drag_motion(w, x, y) - return unless @dragging - w.move('selected', x - @dragging[0], y - @dragging[1]) - @dragging = [x, y] - end - - def drag_end(w, x, y) - square = w.find_closest(x, y, 0, 65) - w.coords('selected', w.coords(square)[0..1]) - w.dtag('selected') - @dragging = nil - end - - def make_SeeDismiss - ## See Code / Dismiss - frame = Ttk::Frame.new($knightstour) - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'knightstour'}), - Ttk::Button.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $knightstour.destroy - $knightstour = nil - }), - :padx=>4, :pady=>4) - frame.grid_columnconfigure(0, :weight=>1) - frame - end - - def create_gui(parent = nil) - $knightstour.destroy rescue nil - $knightstour = Tk::Toplevel.new(parent, :title=>"Knight's tour") - $knightstour.withdraw - base_f = Ttk::Frame.new($knightstour) - @board = Tk::Canvas.new(base_f, :width=>240, :height=>240) - @log = Tk::Text.new(base_f, :width=>12, :height=>1, - :font=>'Arial 8', :background=>'white') - scr = @log.yscrollbar(Ttk::Scrollbar.new(base_f)) - - @visited = [] - @delay = TkVariable.new(600) - @continuous = TkVariable.new(false) - - tool_f = Ttk::Frame.new($knightstour) - label = Ttk::Label.new(tool_f, :text=>'実行速度') - scale = Ttk::Scale.new(tool_f, :from=>8, :to=>2000, :variable=>@delay, - :command=>proc{|n| set_delay(n)}) - check = Ttk::Checkbutton.new(tool_f, :text=>'å復', - :variable=>@continuous) - @start_btn = Ttk::Button.new(tool_f, :text=>'開始', - :command=>proc{tour()}) - @exit_btn = Ttk::Button.new(tool_f, :text=>'終了', - :command=>proc{_exit()}) - - 7.downto(0){|row| - 0.upto(7){|col| - if ((col & 1) ^ (row & 1)).zero? - fill = 'bisque' - dfill = 'bisque3' - else - fill = 'tan3' - dfill = 'tan4' - end - coords = [col * 30 + 4, row * 30 + 4, col * 30 + 30, row * 30 + 30] - @board.create(TkcRectangle, coords, - :fill=>fill, :disabledfill=>dfill, - :width=>2, :state=>:disabled) - } - } - - @knight_font = TkFont.new(:size=>-24) - @knight = TkcText.new(@board, 0, 0, :font=>@knight_font, - :text=>Tk::UTF8_String.new('\u265e'), - :anchor=>'nw', # :tags=>'knight', - :fill=>'black', :activefill=>'#600000') - @knight.coords(@board.coords(rand(64)+1)[0..1]) - @knight.bind('ButtonPress-1', '%W %x %y'){|w,x,y| drag_start(w,x,y)} - @knight.bind('Motion', '%W %x %y'){|w,x,y| drag_motion(w,x,y)} - @knight.bind('ButtonRelease-1', '%W %x %y'){|w,x,y| drag_end(w,x,y)} - - Tk.grid(@board, @log, scr, :sticky=>'news') - base_f.grid_rowconfigure(0, :weight=>1) - base_f.grid_columnconfigure(0, :weight=>1) - - Tk.grid(base_f, '-', '-', '-', '-', '-', :sticky=>'news') - widgets = [label, scale, check, @start_btn] - sg = nil - unless $RubyTk_WidgetDemo - widgets << @exit_btn - if Tk.windowingsystem != 'aqua' - #widgets.unshift(Ttk::SizeGrip.new(tool_f)) - Ttk::SizeGrip.new(tool_f).pack(:side=>:right, :anchor=>'se') - end - end - Tk.pack(widgets, :side=>:right) - if Tk.windowingsystem == 'aqua' - TkPack.configure(widgets, :padx=>[4, 4], :pady=>[12, 12]) - TkPack.configure(widgets[0], :padx=>[4, 24]) - TkPack.configure(widgets[-1], :padx=>[16, 4]) - end - - Tk.grid(tool_f, '-', '-', '-', '-', '-', :sticky=>'ew') - - if $RubyTk_WidgetDemo - Tk.grid(make_SeeDismiss(), '-', '-', '-', '-', '-', :sticky=>'ew') - end - - $knightstour.grid_rowconfigure(0, :weight=>1) - $knightstour.grid_columnconfigure(0, :weight=>1) - - $knightstour.bind('Control-F2'){TkConsole.show} - $knightstour.bind('Return'){@start_btn.invoke} - $knightstour.bind('Escape'){@exit_btn.invoke} - $knightstour.bind('Destroy'){ _stop } - $knightstour.protocol('WM_DELETE_WINDOW'){ _exit } - - $knightstour.deiconify - $knightstour.tkwait_destroy - end - - def initialize(parent = nil) - create_gui(parent) - end -end - -Tk.root.withdraw unless $RubyTk_WidgetDemo -Thread.new{Tk.mainloop} if __FILE__ == $0 -Knights_Tour.new diff --git a/ext/tk/sample/demos-jp/label.rb b/ext/tk/sample/demos-jp/label.rb deleted file mode 100644 index 6164ac1ebc..0000000000 --- a/ext/tk/sample/demos-jp/label.rb +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# label widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($label_demo) && $label_demo - $label_demo.destroy - $label_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$label_demo = TkToplevel.new {|w| - title("Label Demonstration") - iconname("label") - positionWindow(w) -} - -base_frame = TkFrame.new($label_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "下ã«ã¯5ã¤ã®ãƒ©ãƒ™ãƒ«ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚å·¦å´ã«ã¯ãƒ†ã‚­ã‚¹ãƒˆãƒ©ãƒ™ãƒ«ãŒ3ã¤ã‚ã‚Šã€å³å´ã«ã¯ãƒ“ットマップラベルã¨ãƒ†ã‚­ã‚¹ãƒˆãƒ©ãƒ™ãƒ«ãŒã‚ã‚Šã¾ã™ã€‚ラベルã¨ã„ã†ã®ã¯ã‚ã¾ã‚Šé¢ç™½ã„ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ãªãœãªã‚‰çœºã‚る以外何もã§ããªã„ã‹ã‚‰ã§ã™ã€‚" -} -msg.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $label_demo - $label_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'label'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# label demo ç”¨ãƒ•ãƒ¬ãƒ¼ãƒ ç”Ÿæˆ -f_left = TkFrame.new(base_frame) -f_right = TkFrame.new(base_frame) -[f_left, f_right].each{|w| w.pack('side'=>'left', 'expand'=>'yes', - 'padx'=>10, 'pady'=>10, 'fill'=>'both')} - -# label ç”Ÿæˆ -[ TkLabel.new(f_left, 'text'=>'最åˆã®ãƒ©ãƒ™ãƒ«'), - TkLabel.new(f_left, 'text'=>'2 番目。ã¡ã‚‡ã£ã¨æµ®ã上ãŒã‚‰ã›ã¦ã¿ã¾ã—ãŸ', - 'relief'=>'raised'), - TkLabel.new(f_left, 'text'=>'3 番目。沈んã§ã„ã¾ã™ ', 'relief'=>'sunken') -].each{|w| w.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2, 'anchor'=>'w')} - -# TkLabel.new(f_right) { -Tk::Label.new(f_right) { - bitmap('@' + [$demo_dir,'..','images','face.xbm'].join(File::Separator)) - borderwidth 2 - relief 'sunken' -}.pack('side'=>'top') - -TkLabel.new(f_right) { text 'Tcl/Tk 所有者' }.pack('side'=>'top') diff --git a/ext/tk/sample/demos-jp/labelframe.rb b/ext/tk/sample/demos-jp/labelframe.rb deleted file mode 100644 index 3dcd1dc3f1..0000000000 --- a/ext/tk/sample/demos-jp/labelframe.rb +++ /dev/null @@ -1,103 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# labelframe.rb -# -# This demonstration script creates a toplevel window containing -# several labelframe widgets. -# -# based on "Id: labelframe.tcl,v 1.2 2001/10/30 11:21:50 dkf Exp" - - -if defined?($labelframe_demo) && $labelframe_demo - $labelframe_demo.destroy - $labelframe_demo = nil -end - -$labelframe_demo = TkToplevel.new {|w| - title("Labelframe Demonstration") - iconname("labelframe") - positionWindow(w) -} - -base_frame = TkFrame.new($labelframe_demo).pack(:fill=>:both, :expand=>true) - -# Some information -TkLabel.new(base_frame, - :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top) -TkLabelFrame ウィジェットã¯é–¢é€£ã™ã‚‹ widget -群をã¾ã¨ã‚ã¦å–り扱ã†ãŸã‚ã«ç”¨ã„られã¾ã™ã€‚ラ -ベルã¯é€šå¸¸ã®æ–‡å­—列ã§ã‚‚何らã‹ã®ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆ -ã§ã‚‚ã‹ã¾ã„ã¾ã›ã‚“。もã—ã‚ãªãŸãŒä½¿ã£ã¦ã„ã‚‹ -Ruby ã«ãƒªãƒ³ã‚¯ã•ã‚Œã¦ã„ã‚‹ Tk ライブラリ㌠-labelframe ウィジェットを実装ã—ã¦ã„ãªã„ -å ´åˆã€ã“ã®ãƒ‡ãƒ¢ã¯ã†ã¾ãå‹•ã‹ãªã„ã¯ãšã§ã™ã€‚ -ãã®å ´åˆã«ã¯ labelframe ウィジェットãŒå®Ÿè£… -ã•ã‚Œã¦ã„るよã†ãªã‚ˆã‚Šæ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Tk -を組ã¿åˆã‚ã›ã¦è©¦ã™ã‚ˆã†ã«ã—ã¦ãã ã•ã„。 -EOL - -# The bottom buttons -TkFrame.new(base_frame){|f| - pack(:side=>:bottom, :fill=>:x, :pady=>'2m') - - TkButton.new(f, :text=>'é–‰ã˜ã‚‹', :width=>15, :command=>proc{ - $labelframe_demo.destroy - $labelframe_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'コードå‚ç…§', :width=>15, :command=>proc{ - showCode 'labelframe' - }).pack(:side=>:left, :expand=>true) -} - -# Demo area -w = TkFrame.new(base_frame).pack(:side=>:bottom, :fill=>:both, - :expand=>true) - -# A group of radiobuttons in a labelframe -TkLabelFrame.new(w, :text=>'é¸æŠžå€¤', - :padx=>2, :pady=>2) {|f| - grid(:row=>0, :column=>0, :pady=>'2m', :padx=>'2m') - - v = TkVariable.new - (1..4).each{|i| - TkRadiobutton.new(f, :text=>"This is value #{i}", - :variable=>v, :value=>i) { - pack(:side=>:top, :fill=>:x, :pady=>2) - } - } -} - - -# Using a label window to control a group of options. -$lfdummy = TkVariable.new(0) - -def lfEnableButtons(w) - TkWinfo.children(w).each{|child| - next if child.path =~ /\.cb$/ - if $lfdummy == 1 - child.state(:normal) - else - child.state(:disabled) - end - } -end - -TkLabelFrame.new(w, :pady=>2, :padx=>2){|f| - TkCheckButton.new(f, :widgetname=>'cb', :variable=>$lfdummy, - :text=>"オプションを使用", :padx=>0) {|cb| - command proc{lfEnableButtons(f)} - f.labelwidget(cb) - } - grid(:row=>0, :column=>1, :pady=>'2m', :padx=>'2m') - - %w(オプション1 オプション2 オプション3).each{|str| - TkCheckbutton.new(f, :text=>str).pack(:side=>:top, :fill=>:x, :pady=>2) - } - - lfEnableButtons(f) -} - -TkGrid.columnconfigure(w, [0,1], :weight=>1) diff --git a/ext/tk/sample/demos-jp/mclist.rb b/ext/tk/sample/demos-jp/mclist.rb deleted file mode 100644 index a222ed3f81..0000000000 --- a/ext/tk/sample/demos-jp/mclist.rb +++ /dev/null @@ -1,122 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# mclist.rb -- -# -# This demonstration script creates a toplevel window containing a Ttk -# tree widget configured as a multi-column listbox. -# -# based on "Id: mclist.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp" - -if defined?($mclist_demo) && $mclist_demo - $mclist_demo.destroy - $mclist_demo = nil -end - -$mclist_demo = TkToplevel.new {|w| - title("Multi-Column List") - iconname("mclist") - positionWindow(w) -} - -base_frame = TkFrame.new($mclist_demo).pack(:fill=>:both, :expand=>true) - -## Explanatory text -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', - :justify=>:left, :anchor=>'n', :padding=>[10, 2, 10, 6], - :text=><:x) -Ttkã¨ã¯ï¼Œãƒ†ãƒ¼ãƒžæŒ‡å®šå¯èƒ½ãªæ–°ã—ã„ウィジェット集åˆã§ã™ï¼Ž\ -Ttk::Treeviewウィジェットã¯\ -Ttkウィジェットセットã«å«ã¾ã‚Œã‚‹ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®ä¸€ã¤ã§ï¼Œ\ -ãã‚ŒãŒä¿æŒã™ã‚‹æœ¨æ§‹é€ ã®ãƒ‡ãƒ¼ã‚¿ãã®ã‚‚ã®ã¾ã§ã¯è¡¨ç¤ºã™ã‚‹ã“ã¨ãªã,\ -示ã—ãŸã„情報をマルãƒã‚«ãƒ©ãƒ ã§è¡¨ç¤ºã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼Ž -ã“ã®ã‚µãƒ³ãƒ—ルã¯ï¼Œè¤‡æ•°ã®ã‚«ãƒ©ãƒ ã‚’æŒã£ãŸãƒªã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã‚’作æˆã™ã‚‹ç°¡å˜ãªä¾‹ã§ã™ï¼Ž -å„カラムã®ã‚¿ã‚¤ãƒˆãƒ«(heading)をクリックã™ã‚Œã°ï¼Œ\ -ãã®ã‚«ãƒ©ãƒ ã®æƒ…å ±ã«åŸºã¥ã„ã¦ãƒªã‚¹ãƒˆã®ä¸¦ã¹æ›¿ãˆãŒãªã•ã‚Œã‚‹ã¯ãšã§ã™ï¼Ž\ -ã¾ãŸï¼Œã‚«ãƒ©ãƒ ã®ã‚¿ã‚¤ãƒˆãƒ«é–“ã®åŒºåˆ‡ã‚Šéƒ¨åˆ†ã‚’ドラッグã™ã‚‹ã“ã¨ã§ï¼Œ\ -カラムã®å¹…を変更ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ï¼Ž -EOL - -## See Code / Dismiss -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'mclist'}), - Ttk::Button.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $mclist_demo.destroy - $mclist_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -container = Ttk::Frame.new(base_frame) -tree = Ttk::Treeview.new(base_frame, :columns=>%w(country capital currency), - :show=>:headings) -if Tk.windowingsystem != 'aqua' - vsb = tree.yscrollbar(Ttk::Scrollbar.new(base_frame)) - hsb = tree.xscrollbar(Ttk::Scrollbar.new(base_frame)) -else - vsb = tree.yscrollbar(Tk::Scrollbar.new(base_frame)) - hsb = tree.xscrollbar(Tk::Scrollbar.new(base_frame)) -end - -container.pack(:fill=>:both, :expand=>true) -Tk.grid(tree, vsb, :in=>container, :sticky=>'nsew') -Tk.grid(hsb, :in=>container, :sticky=>'nsew') -container.grid_columnconfigure(0, :weight=>1) -container.grid_rowconfigure(0, :weight=>1) - -## The data we're going to insert -data = [ - ['アルゼンãƒãƒ³', 'ブエノスアイレス', 'ARS'], - ['オーストラリア', 'キャンベラ', 'AUD'], - ['ブラジル', 'ブラジリア', 'BRL'], - ['カナダ', 'オタワ', 'CAD'], - ['中国', '北京', 'CNY'], - ['フランス', 'パリ', 'EUR'], - ['ドイツ', 'ベルリン', 'EUR'], - ['インド', 'ニューデリー', 'INR'], - ['イタリア', 'ローマ', 'EUR'], - ['日本', 'æ±äº¬', 'JPY'], - ['メキシコ', 'メキシコシティ', 'MXN'], - ['ロシア', 'モスクワ', 'RUB'], - ['å—アフリカ', 'プレトリア', 'ZAR'], - ['英国', 'ロンドン', 'GBP'], - ['アメリカ', 'ワシントン D.C.', 'USD'], -] - -## Code to insert the data nicely -font = Ttk::Style.lookup(tree[:style], :font) -cols = %w(country capital currency) -cols.zip(%w(国å 首都 通貨)).each{|col, name| - tree.heading_configure(col, :text=>name, - :command=>proc{sort_by(tree, col, false)}) - tree.column_configure(col, :width=>TkFont.measure(font, name)) -} - -data.each{|country, capital, currency| - #tree.insert('', :end, :values=>[country, capital, currency]) - tree.insert(nil, :end, :values=>[country, capital, currency]) - cols.zip([country, capital, currency]).each{|col, val| - len = TkFont.measure(font, "#{val} ") - if tree.column_cget(col, :width) < len - tree.column_configure(col, :width=>len) - end - } -} - -## Code to do the sorting of the tree contents when clicked on -def sort_by(tree, col, direction) - tree.children(nil).map!{|row| [tree.get(row, col), row.id]} . - sort(&((direction)? proc{|x, y| y <=> x}: proc{|x, y| x <=> y})) . - each_with_index{|info, idx| tree.move(info[1], nil, idx)} - - tree.heading_configure(col, :command=>proc{sort_by(tree, col, ! direction)}) -end diff --git a/ext/tk/sample/demos-jp/menu.rb b/ext/tk/sample/demos-jp/menu.rb deleted file mode 100644 index 012e2458d2..0000000000 --- a/ext/tk/sample/demos-jp/menu.rb +++ /dev/null @@ -1,202 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# menus widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($menu_demo) && $menu_demo - $menu_demo.destroy - $menu_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$menu_demo = TkToplevel.new {|w| - title("File Selection Dialogs") - iconname("menu") - positionWindow(w) -} - -base_frame = TkFrame.new($menu_demo).pack(:fill=>:both, :expand=>true) - -# menu frame ç”Ÿæˆ -$menu_frame = TkFrame.new(base_frame, 'relief'=>'raised', 'bd'=>2) -$menu_frame.pack('side'=>'top', 'fill'=>'x') - -begin - windowingsystem = Tk.windowingsystem() -rescue - windowingsystem = "" -end - -# label ç”Ÿæˆ -TkLabel.new(base_frame,'font'=>$font,'wraplength'=>'4i','justify'=>'left') { - if $tk_platform['platform'] == 'macintosh' || - windowingsystem == "classic" || windowingsystem == "aqua" - text("ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯æ§˜ã€…ãªãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¨ã‚«ã‚¹ã‚±ãƒ¼ãƒ‰ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰æ§‹æˆã•ã‚Œã¦ã„ã¾ã™ã€‚Command-X を入力ã™ã‚‹ã¨ã€XãŒã‚³ãƒžãƒ³ãƒ‰ã‚­ãƒ¼è¨˜å·ã«ç¶šã„ã¦è¡¨ç¤ºã•ã‚Œã¦ã„る文字ãªã‚‰ã°ã€ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚¿ã‚’使ã£ãŸé …目起動を行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚メニューè¦ç´ ä¸­ã€æœ€å¾Œã®ã‚‚ã®ã¯ã€ãã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®æœ€åˆã®é …目をé¸æŠžã™ã‚‹ã“ã¨ã§ç‹¬ç«‹ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚") - else - text("ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯æ§˜ã€…ãªãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¨ã‚«ã‚¹ã‚±ãƒ¼ãƒ‰ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰æ§‹æˆã•ã‚Œã¦ã„ã¾ã™ã€‚Alt-X を入力ã™ã‚‹ã¨ã€XãŒãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«ã‚¢ãƒ³ãƒ€ãƒ¼ãƒ©ã‚¤ãƒ³ä»˜ãã§è¡¨ç¤ºã•ã‚Œã¦ã„る文字ãªã‚‰ã°ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‹ã‚‰ã®æŒ‡å®šãŒã§ãã¾ã™ã€‚矢å°ã‚­ãƒ¼ã§ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®ãƒˆãƒ©ãƒãƒ¼ã‚¹ã‚‚å¯èƒ½ã§ã™ã€‚メニューãŒæŒ‡å®šã•ã‚ŒãŸéš›ã«ã¯ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚­ãƒ¼ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã‚ã‚‹ã„ã¯ã€ã‚¢ãƒ³ãƒ€ãƒ¼ãƒ©ã‚¤ãƒ³ä»˜ãã®æ–‡å­—を入力ã™ã‚‹ã“ã¨ã§ã‚‚実行ã§ãã¾ã™ã€‚メニューã®ã‚¨ãƒ³ãƒˆãƒªãŒã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚¿ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã¯ã€ãã®ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚¿ã‚’入力ã™ã‚‹ã“ã¨ã§ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’指定ã™ã‚‹ã“ã¨ãªã—ã«å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚メニューè¦ç´ ä¸­ã€æœ€å¾Œã®ã‚‚ã®ã¯ã€ãã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®æœ€åˆã®é …目をé¸æŠžã™ã‚‹ã“ã¨ã§ç‹¬ç«‹ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚") - end -}.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $menu_demo - $menu_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'menu'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# menu ç”Ÿæˆ -TkMenubutton.new($menu_frame, 'text'=>'File', 'underline'=>0) {|m| - pack('side'=>'left') - TkMenu.new(m, 'tearoff'=>false) {|file_menu| - m.configure('menu'=>file_menu) - add('command', 'label'=>'é–‹ã ...', 'command'=>proc{fail 'ã“ã‚Œã¯ã€ãƒ‡ãƒ¢ã§ã™ã®ã§"é–‹ã ..."ã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。'}) - add('command', 'label'=>'æ–°è¦', 'command'=>proc{fail 'ã“ã‚Œã¯ã€ãƒ‡ãƒ¢ã§ã™ã®ã§"æ–°è¦"ã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。'}) - add('command', 'label'=>'ä¿å­˜', 'command'=>proc{fail 'ã“ã‚Œã¯ã€ãƒ‡ãƒ¢ã§ã™ã®ã§"ä¿å­˜"ã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。'}) - add('command', 'label'=>'ä¿å­˜(指定) ...', 'command'=>proc{fail 'ã“ã‚Œã¯ã€ãƒ‡ãƒ¢ã§ã™ã®ã§"ä¿å­˜(指定) ..."ã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。'}) - add('separator') - add('command', 'label'=>'プリント設定 ...', 'command'=>proc{fail 'ã“ã‚Œã¯ã€ãƒ‡ãƒ¢ã§ã™ã®ã§"プリント設定 ..."ã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。'}) - add('command', 'label'=>'プリント ...', 'command'=>proc{fail 'ã“ã‚Œã¯ã€ãƒ‡ãƒ¢ã§ã™ã®ã§"プリント ..."ã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。'}) - add('separator') - add('command', 'label'=>'終了', 'command'=>proc{$menu_demo.destroy}) - } -} - -if $tk_platform['platform'] == 'macintosh' || - windowingsystem == "classic" || windowingsystem == "aqua" - modifier = 'Command' -elsif $tk_platform['platform'] == 'windows' - modifier = 'Control' -else - modifier = 'Meta' -end - -TkMenubutton.new($menu_frame, 'text'=>'Basic', 'underline'=>0) {|m| - pack('side'=>'left') - TkMenu.new(m, 'tearoff'=>false) {|basic_menu| - m.configure('menu'=>basic_menu) - add('command', 'label'=>'何もã—ãªã„é•·ã„エントリ') - ['A','B','C','D','E','F','G'].each{|c| - # add('command', 'label'=>"文字 \"#{c}\" ã‚’å°å­—", 'underline'=>4, - add('command', 'label'=>"Print letter \"#{c}\" (文字 \"#{c}\" ã‚’å°å­—)", - 'underline'=>14, - 'command'=>proc{print c,"\n"}, 'accelerator'=>"#{modifier}+#{c}") - $menu_demo.bind("#{modifier}-#{c.downcase}", proc{print c,"\n"}) - } - } -} - -TkMenubutton.new($menu_frame, 'text'=>'Cascades', 'underline'=>0) {|m| - pack('side'=>'left') - TkMenu.new(m, 'tearoff'=>false) {|cascade_menu| - m.configure('menu'=>cascade_menu) - add('command', 'label'=>'Print hello(ã“ã‚“ã«ã¡ã¯)', - 'command'=>proc{print "Hello(ã“ã‚“ã«ã¡ã¯)\n"}, - 'accelerator'=>"#{modifier}+H", 'underline'=>6) - $menu_demo.bind("#{modifier}-h", proc{print "Hello(ã“ã‚“ã«ã¡ã¯)\n"}) - add('command', 'label'=>'Print goodbye(ã•ã‚ˆã†ãªã‚‰)', - 'command'=>proc{print "Goodbye(ã•ã‚ˆã†ãªã‚‰)\n"}, - 'accelerator'=>"#{modifier}+G", 'underline'=>6) - $menu_demo.bind("#{modifier}-g", proc{print "Goodbye(ã•ã‚ˆã†ãªã‚‰)\n"}) - - # TkMenu.new(m, 'tearoff'=>false) {|cascade_check| - TkMenu.new(cascade_menu, 'tearoff'=>false) {|cascade_check| - cascade_menu.add('cascade', 'label'=>'Check buttons(ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³)', - 'menu'=>cascade_check, 'underline'=>0) - oil = TkVariable.new(0) - add('check', 'label'=>'オイル点検', 'variable'=>oil) - trans = TkVariable.new(0) - add('check', 'label'=>'トランスミッション点検', 'variable'=>trans) - brakes = TkVariable.new(0) - add('check', 'label'=>'ブレーキ点検', 'variable'=>brakes) - lights = TkVariable.new(0) - add('check', 'label'=>'ライト点検', 'variable'=>lights) - add('separator') - add('command', 'label'=>'ç¾åœ¨ã®å€¤ã‚’表示', - 'command'=>proc{showVars($menu_demo, - ['オイル点検', oil], - ['トランスミッション点検', trans], - ['ブレーキ点検', brakes], - ['ライト点検', lights])} ) - invoke 1 - invoke 3 - } - - #TkMenu.new(m, 'tearoff'=>false) {|cascade_radio| - TkMenu.new(cascade_menu, 'tearoff'=>false) {|cascade_radio| - cascade_menu.add('cascade', 'label'=>'Radio buttons(ラジオボタン)', - 'menu'=>cascade_radio, 'underline'=>0) - pointSize = TkVariable.new - add('radio', 'label'=>'10 ãƒã‚¤ãƒ³ãƒˆ', 'variable'=>pointSize, 'value'=>10) - add('radio', 'label'=>'14 ãƒã‚¤ãƒ³ãƒˆ', 'variable'=>pointSize, 'value'=>14) - add('radio', 'label'=>'18 ãƒã‚¤ãƒ³ãƒˆ', 'variable'=>pointSize, 'value'=>18) - add('radio', 'label'=>'24 ãƒã‚¤ãƒ³ãƒˆ', 'variable'=>pointSize, 'value'=>24) - add('radio', 'label'=>'32 ãƒã‚¤ãƒ³ãƒˆ', 'variable'=>pointSize, 'value'=>32) - add('separator') - style = TkVariable.new - add('radio', 'label'=>'ローマン', 'variable'=>style, 'value'=>'roman') - add('radio', 'label'=>'ボールド', 'variable'=>style, 'value'=>'bold') - add('radio', 'label'=>'イタリック', 'variable'=>style, 'value'=>'italic') - add('separator') - add('command', 'label'=>'ç¾åœ¨ã®å€¤ã‚’表示', - 'command'=>proc{showVars($menu_demo, - ['ãƒã‚¤ãƒ³ãƒˆã‚µã‚¤ã‚º', pointSize], - ['スタイル', style])} ) - invoke 1 - invoke 7 - } - } -} - -TkMenubutton.new($menu_frame, 'text'=>'Icons', 'underline'=>0) {|m| - pack('side'=>'left') - TkMenu.new(m, 'tearoff'=>false) {|icon_menu| - m.configure('menu'=>icon_menu) - add('command', - 'bitmap'=>'@'+[$demo_dir,'..', - 'images','pattern.xbm'].join(File::Separator), - 'command'=>proc{TkDialog.new('title'=>'Bitmap Menu Entry', - 'text'=>'今ã‚ãªãŸãŒé¸æŠžã—ãŸãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®é …ç›®ã¯ãƒ†ã‚­ã‚¹ãƒˆã§ã¯ãªãビットマップを表示ã—ã¦ã„ã¾ã—ãŸã€‚ãれ以外ã®ç‚¹ã§ã¯ä»–ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼é …ç›®ã¨å¤‰ã‚ã‚Šã¾ã›ã‚“。', - 'bitmap'=>'', 'default'=>0, - 'buttons'=>'了解')} ) - ['info', 'questhead', 'error'].each{|icon| - add('command', 'bitmap'=>icon, - 'command'=>proc{print "You invoked the #{icon} bitmap\n"}) - } - } -} - -TkMenubutton.new($menu_frame, 'text'=>'More', 'underline'=>0) {|m| - pack('side'=>'left') - TkMenu.new(m, 'tearoff'=>false) {|more_menu| - m.configure('menu'=>more_menu) - [ 'エントリ','別ã®ã‚¨ãƒ³ãƒˆãƒª','何もã—ãªã„','ã»ã¨ã‚“ã©ä½•ã‚‚ã—ãªã„', - '人生をæ„義ã‚ã‚‹ã‚‚ã®ã«' ].each{|i| - add('command', 'label'=>i, - 'command'=>proc{print "You invoked \"#{i}\"\n"}) - } - } -} - -TkMenubutton.new($menu_frame, 'text'=>'Colors', 'underline'=>0) {|m| - pack('side'=>'left') - TkMenu.new(m) {|colors_menu| - m.configure('menu'=>colors_menu) - ['red', 'orange', 'yellow', 'green', 'blue'].each{|c| - add('command', 'label'=>c, 'background'=>c, - 'command'=>proc{print "You invoked \"#{c}\"\n"}) - } - } -} diff --git a/ext/tk/sample/demos-jp/menu84.rb b/ext/tk/sample/demos-jp/menu84.rb deleted file mode 100644 index ab6d1b85b4..0000000000 --- a/ext/tk/sample/demos-jp/menu84.rb +++ /dev/null @@ -1,214 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# menus widget demo (called by 'widget') -# - -# toplevel widget -if defined?($menu84_demo) && $menu84_demo - $menu84_demo.destroy - $menu84_demo = nil -end - -# demo toplevel widget -$menu84_demo = TkToplevel.new {|w| - title("File Selection Dialogs") - iconname("menu84") - positionWindow(w) -} - -base_frame = TkFrame.new($menu84_demo).pack(:fill=>:both, :expand=>true) - -begin - windowingsystem = Tk.windowingsystem() -rescue - windowingsystem = "" -end - -# label -TkLabel.new(base_frame,'font'=>$font,'wraplength'=>'4i','justify'=>'left') { - if $tk_platform['platform'] == 'macintosh' || - windowingsystem == "classic" || windowingsystem == "aqua" - text("ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯ã‚«ã‚¹ã‚±ãƒ¼ãƒ‰ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’æŒã¤ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒãƒ¼ãŒä»˜ã‘られã¦ã„ã¾ã™ã€‚Command+x ('x'ã¯ã‚³ãƒžãƒ³ãƒ‰ã‚­ãƒ¼ã‚·ãƒ³ãƒœãƒ«ã«ç¶šã‘ã¦è¡¨ç¤ºã•ã‚Œã¦ã„る文字ã§ã™) ã¨ã‚¿ã‚¤ãƒ—ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã‚‚é …ç›®ã®æ©Ÿèƒ½ã‚’呼ã³å‡ºã™ã“ã¨ãŒã§ãã¾ã™ã€‚最後ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¯ã€ãƒžã‚¦ã‚¹ã§ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®å¤–ã«ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã€ç‹¬ç«‹ã—ãŸãƒ‘レットã¨ãªã‚‹ã‚ˆã†ã«åˆ‡ã‚Šæ”¾ã™ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚") - else - text("ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯ã‚«ã‚¹ã‚±ãƒ¼ãƒ‰ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’æŒã¤ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒãƒ¼ãŒä»˜ã‘られã¦ã„ã¾ã™ã€‚Alt+x ('x'ã¯ãƒ¡ãƒ‹ãƒ¥ãƒ¼ä¸Šã§ä¸‹ç·šãŒå¼•ã‹ã‚ŒãŸæ–‡å­—ã§ã™) ã¨ã‚¿ã‚¤ãƒ—ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã‚‚メニューを呼ã³å‡ºã™ã“ã¨ãŒã§ãã¾ã™ã€‚矢å°ã‚­ãƒ¼ã‚’使ã£ã¦ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼é–“を移動ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚メニューãŒè¡¨ç¤ºã•ã‚Œã¦ã„る時ã«ã¯ã€ç¾åœ¨ä½ç½®ã®é …目をスペースキーã§é¸æŠžã—ãŸã‚Šã€ä¸‹ç·šãŒå¼•ã‹ã‚ŒãŸæ–‡å­—を入力ã™ã‚‹ã“ã¨ã§ãã®é …目をé¸æŠžã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã‚‚ã—é …ç›®ã«ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚¿ã®æŒ‡å®šãŒãªã•ã‚Œã¦ã„ãŸãªã‚‰ã°ã€ãã®æŒ‡å®šã•ã‚ŒãŸã‚­ãƒ¼å…¥åŠ›ã‚’è¡Œã†ã“ã¨ã§ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’表示ã•ã›ã‚‹ã“ã¨ãªã直接ãã®é …ç›®ã®æ©Ÿèƒ½ã‚’呼ã³å‡ºã›ã¾ã™ã€‚最後ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¯ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®æœ€åˆã®é …目をé¸æŠžã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã€ç‹¬ç«‹ã—ãŸãƒ‘レットã¨ãªã‚‹ã‚ˆã†ã«åˆ‡ã‚Šæ”¾ã™ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚") - end -}.pack('side'=>'top') - - -menustatus = TkVariable.new(" ") -TkFrame.new(base_frame) {|frame| - TkLabel.new(frame, 'textvariable'=>menustatus, 'relief'=>'sunken', - 'bd'=>1, 'font'=>['Helvetica', '10'], - 'anchor'=>'w').pack('side'=>'left', 'padx'=>2, - 'expand'=>true, 'fill'=>'both') - pack('side'=>'bottom', 'fill'=>'x', 'pady'=>2) -} - - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $menu84_demo - $menu84_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'menu84'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - - -# create menu frame -$menu84_frame = TkMenu.new($menu84_demo, 'tearoff'=>false) - -# menu -TkMenu.new($menu84_frame, 'tearoff'=>false) {|m| - $menu84_frame.add('cascade', 'label'=>'File', 'menu'=>m, 'underline'=>0) - add('command', 'label'=>'Open...', 'command'=>proc{fail 'ã“ã‚Œã¯å˜ãªã‚‹ãƒ‡ãƒ¢ã§ã™ã‹ã‚‰ã€"Open..." é …ç›®ã®æ©Ÿèƒ½ã¯ç‰¹ã«å®šç¾©ã•ã‚Œã¦ã¯ã„ã¾ã›ã‚“。'}) - add('command', 'label'=>'New', 'command'=>proc{fail 'ã“ã‚Œã¯å˜ãªã‚‹ãƒ‡ãƒ¢ã§ã™ã‹ã‚‰ã€"New" é …ç›®ã®æ©Ÿèƒ½ã¯ç‰¹ã«å®šç¾©ã•ã‚Œã¦ã¯ã„ã¾ã›ã‚“。'}) - add('command', 'label'=>'Save', 'command'=>proc{fail 'ã“ã‚Œã¯å˜ãªã‚‹ãƒ‡ãƒ¢ã§ã™ã‹ã‚‰ã€"Save" é …ç›®ã®æ©Ÿèƒ½ã¯ç‰¹ã«å®šç¾©ã•ã‚Œã¦ã¯ã„ã¾ã›ã‚“。'}) - add('command', 'label'=>'Save As...', 'command'=>proc{fail 'ã“ã‚Œã¯å˜ãªã‚‹ãƒ‡ãƒ¢ã§ã™ã‹ã‚‰ã€"Save As..." é …ç›®ã®æ©Ÿèƒ½ã¯ç‰¹ã«å®šç¾©ã•ã‚Œã¦ã¯ã„ã¾ã›ã‚“。'}) - add('separator') - add('command', 'label'=>'Print Setup...', 'command'=>proc{fail 'ã“ã‚Œã¯å˜ãªã‚‹ãƒ‡ãƒ¢ã§ã™ã‹ã‚‰ã€"Print Setup..." é …ç›®ã®æ©Ÿèƒ½ã¯ç‰¹ã«å®šç¾©ã•ã‚Œã¦ã¯ã„ã¾ã›ã‚“。'}) - add('command', 'label'=>'Print...', 'command'=>proc{fail 'ã“ã‚Œã¯å˜ãªã‚‹ãƒ‡ãƒ¢ã§ã™ã‹ã‚‰ã€"Print..." é …ç›®ã®æ©Ÿèƒ½ã¯ç‰¹ã«å®šç¾©ã•ã‚Œã¦ã¯ã„ã¾ã›ã‚“。'}) - add('separator') - add('command', 'label'=>'Dismiss Menus Demo', 'command'=>proc{$menu84_demo.destroy}) -} - -if $tk_platform['platform'] == 'macintosh' || - windowingsystem = "classic" || windowingsystem = "aqua" - modifier = 'Command' -elsif $tk_platform['platform'] == 'windows' - modifier = 'Control' -else - modifier = 'Meta' -end - -TkMenu.new($menu84_frame, 'tearoff'=>false) {|m| - $menu84_frame.add('cascade', 'label'=>'Basic', 'menu'=>m, 'underline'=>0) - add('command', 'label'=>'Long entry that does nothing') - ['A','B','C','D','E','F','G'].each{|c| - add('command', 'label'=>"Print letter \"#{c}\"", - 'underline'=>14, - 'command'=>proc{print c,"\n"}, 'accelerator'=>"#{modifier}+#{c}") - $menu84_demo.bind("#{modifier}-#{c.downcase}", proc{print c,"\n"}) - } -} - -TkMenu.new($menu84_frame, 'tearoff'=>false) {|m| - $menu84_frame.add('cascade', 'label'=>'Cascades', 'menu'=>m, 'underline'=>0) - add('command', 'label'=>'Print hello', - 'command'=>proc{print "Hello\n"}, - 'accelerator'=>"#{modifier}+H", 'underline'=>6) - $menu84_demo.bind("#{modifier}-h", proc{print "Hello\n"}) - add('command', 'label'=>'Print goodbye', - 'command'=>proc{print "Goodbye\n"}, - 'accelerator'=>"#{modifier}+G", 'underline'=>6) - $menu84_demo.bind("#{modifier}-g", proc{print "Goodbye\n"}) - - TkMenu.new(m, 'tearoff'=>false) {|cascade_check| - m.add('cascade', 'label'=>'Check button', - 'menu'=>cascade_check, 'underline'=>0) - oil = TkVariable.new(0) - add('check', 'label'=>'オイル検査', 'variable'=>oil) - trans = TkVariable.new(0) - add('check', 'label'=>'トランスミッション検査', 'variable'=>trans) - brakes = TkVariable.new(0) - add('check', 'label'=>'ブレーキ検査', 'variable'=>brakes) - lights = TkVariable.new(0) - add('check', 'label'=>'ライト検査', 'variable'=>lights) - add('separator') - add('command', 'label'=>'Show current values', - 'command'=>proc{showVars($menu84_demo, - ['オイル', oil], - ['トランスミッション', trans], - ['ブレーキ', brakes], - ['ライト', lights])} ) - invoke 1 - invoke 3 - } - - TkMenu.new(m, 'tearoff'=>false) {|cascade_radio| - m.add('cascade', 'label'=>'Radio buttons', - 'menu'=>cascade_radio, 'underline'=>0) - pointSize = TkVariable.new - add('radio', 'label'=>'10 point', 'variable'=>pointSize, 'value'=>10) - add('radio', 'label'=>'14 point', 'variable'=>pointSize, 'value'=>14) - add('radio', 'label'=>'18 point', 'variable'=>pointSize, 'value'=>18) - add('radio', 'label'=>'24 point', 'variable'=>pointSize, 'value'=>24) - add('radio', 'label'=>'32 point', 'variable'=>pointSize, 'value'=>32) - add('separator') - style = TkVariable.new - add('radio', 'label'=>'Roman', 'variable'=>style, 'value'=>'roman') - add('radio', 'label'=>'Bold', 'variable'=>style, 'value'=>'bold') - add('radio', 'label'=>'Italic', 'variable'=>style, 'value'=>'italic') - add('separator') - add('command', 'label'=>'ç¾åœ¨å€¤ã®è¡¨ç¤º', - 'command'=>proc{showVars($menu84_demo, - ['pointSize', pointSize], - ['style', style])} ) - invoke 1 - invoke 7 - } -} - -TkMenu.new($menu84_frame, 'tearoff'=>false) {|m| - $menu84_frame.add('cascade', 'label'=>'Icons', 'menu'=>m, 'underline'=>0) - add('command', 'hidemargin'=>1, - 'bitmap'=>'@'+[$demo_dir,'..', - 'images','pattern.xbm'].join(File::Separator), - 'command'=>proc{TkDialog.new('title'=>'Bitmap Menu Entry', - 'text'=>'ã‚ãªãŸãŒé¸æŠžã—ãŸãƒ¡ãƒ‹ãƒ¥ãƒ¼é …ç›®ã¯ã€æ–‡å­—列ã®ä»£ã‚ã‚Šã«ãƒ“ットマップイメージã§é …目を表示ã—ãŸã‚‚ã®ã§ã™ã€‚ãれ以外ã®ç‚¹ã§ã¯ã€ã»ã‹ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼é …ç›®ã¨ã®é–“ã§ç‰¹ã«é•ã„ãŒã‚ã‚‹ã‚ã‘ã§ã¯ã‚ã‚Šã¾ã›ã‚“。', - 'bitmap'=>'', 'default'=>0, - 'buttons'=>'é–‰ã˜ã‚‹')} ) - ['info', 'questhead', 'error'].each{|icon| - add('command', 'bitmap'=>icon, 'hidemargin'=>1, - 'command'=>proc{print "You invoked the #{icon} bitmap\n"}) - } - - entryconfigure(2, :columnbreak=>true) -} - -TkMenu.new($menu84_frame, 'tearoff'=>false) {|m| - $menu84_frame.add('cascade', 'label'=>'More', 'menu'=>m, 'underline'=>0) - [ 'An entry','Another entry','Does nothing','Does almost nothing', - 'Make life meaningful' ].each{|i| - add('command', 'label'=>i, - 'command'=>proc{print "You invoked \"#{i}\"\n"}) - } - - m.entryconfigure('Does almost nothing', - 'bitmap'=>'questhead', 'compound'=>'left', - 'command'=>proc{ - TkDialog.new('title'=>'Compound Menu Entry', - 'message'=>'ã‚ãªãŸãŒé¸æŠžã—ãŸãƒ¡ãƒ‹ãƒ¥ãƒ¼é …ç›®ã¯ã€ãƒ“ットマップイメージã¨æ–‡å­—列ã¨ã‚’åŒæ™‚ã«ä¸€ã¤ã®é …ç›®ã«è¡¨ç¤ºã™ã‚‹ã‚ˆã†ã«ã—ãŸã‚‚ã®ã§ã™ã€‚ãれ以外ã®ç‚¹ã§ã¯ã€ã»ã‹ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼é …ç›®ã¨ã®é–“ã§ç‰¹ã«é•ã„ãŒã‚ã‚‹ã‚ã‘ã§ã¯ã‚ã‚Šã¾ã›ã‚“。', - 'buttons'=>['了解'], 'bitmap'=>'') - }) -} - -TkMenu.new($menu84_frame) {|m| - $menu84_frame.add('cascade', 'label'=>'Colors', 'menu'=>m, 'underline'=>0) - ['red', 'orange', 'yellow', 'green', 'blue'].each{|c| - add('command', 'label'=>c, 'background'=>c, - 'command'=>proc{print "You invoked \"#{c}\"\n"}) - } -} - -$menu84_demo.menu($menu84_frame) - -TkMenu.bind('', proc{|w| - begin - label = w.entrycget('active', 'label') - rescue - label = " " - end - menustatus.value = label - Tk.update(true) - }, '%W') diff --git a/ext/tk/sample/demos-jp/menu8x.rb b/ext/tk/sample/demos-jp/menu8x.rb deleted file mode 100644 index c61753dd19..0000000000 --- a/ext/tk/sample/demos-jp/menu8x.rb +++ /dev/null @@ -1,234 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# menus widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($menu8x_demo) && $menu8x_demo - $menu8x_demo.destroy - $menu8x_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$menu8x_demo = TkToplevel.new {|w| - title("Menu Demonstration (Tk8.x)") - iconname("menu") - positionWindow(w) -} - -base_frame = TkFrame.new($menu8x_demo).pack(:fill=>:both, :expand=>true) - -# version check -if $tk_version.to_f < 8.0 - -# label ç”Ÿæˆ -TkLabel.new(base_frame,'font'=>$font,'wraplength'=>'4i','justify'=>'left') { - text("実行ã—よã†ã¨ã—ãŸã‚¹ã‚¯ãƒªãƒ—ト㯠Tk8.0 以上ã§åˆ©ç”¨ã§ãる機能を利用ã—ã¦ã„ã‚‹ãŸã‚ã€ã‚ãªãŸã® Ruby#{VERSION}/Tk#{$tk_version}#{(Tk::JAPANIZED_TK)? 'jp': ''} ã§ã¯æ­£å¸¸ã«å®Ÿè¡Œã§ãã¾ã›ã‚“。よã£ã¦ãƒ‡ãƒ¢ã®å®Ÿè¡Œã‚’中止ã—ã¾ã—ãŸã€‚ãŸã ã—ã€ä¸‹ã®ã‚³ãƒ¼ãƒ‰å‚照ボタンを押ã™ã“ã¨ã§ã€å®Ÿè¡ŒãŒä¸­æ­¢ã•ã‚ŒãŸã‚¹ã‚¯ãƒªãƒ—トã®ã‚½ãƒ¼ã‚¹ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã™ã€‚") -}.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $menu8x_demo - $menu8x_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'menu8x'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -else ; # Tk8.x - -begin - windowingsystem = Tk.windowingsystem() -rescue - windowingsystem = "" -end - -# label ç”Ÿæˆ -TkLabel.new(base_frame,'font'=>$font,'wraplength'=>'4i','justify'=>'left') { - if $tk_platform['platform'] == 'macintosh' || - windowingsystem == "classic" || windowingsystem == "aqua" - text("ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯æ§˜ã€…ãªãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¨ã‚«ã‚¹ã‚±ãƒ¼ãƒ‰ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰æ§‹æˆã•ã‚Œã¦ã„ã¾ã™ã€‚Command-X を入力ã™ã‚‹ã¨ã€XãŒã‚³ãƒžãƒ³ãƒ‰ã‚­ãƒ¼è¨˜å·ã«ç¶šã„ã¦è¡¨ç¤ºã•ã‚Œã¦ã„る文字ãªã‚‰ã°ã€ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚¿ã‚’使ã£ãŸé …目起動を行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚メニューè¦ç´ ä¸­ã€æœ€å¾Œã®ã‚‚ã®ã¯ã€ãã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®æœ€åˆã®é …目をé¸æŠžã™ã‚‹ã“ã¨ã§ç‹¬ç«‹ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚") - else - text("ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯æ§˜ã€…ãªãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¨ã‚«ã‚¹ã‚±ãƒ¼ãƒ‰ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰æ§‹æˆã•ã‚Œã¦ã„ã¾ã™ã€‚Alt-X を入力ã™ã‚‹ã¨ã€XãŒãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«ã‚¢ãƒ³ãƒ€ãƒ¼ãƒ©ã‚¤ãƒ³ä»˜ãã§è¡¨ç¤ºã•ã‚Œã¦ã„る文字ãªã‚‰ã°ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‹ã‚‰ã®æŒ‡å®šãŒã§ãã¾ã™ã€‚矢å°ã‚­ãƒ¼ã§ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®ãƒˆãƒ©ãƒãƒ¼ã‚¹ã‚‚å¯èƒ½ã§ã™ã€‚メニューãŒæŒ‡å®šã•ã‚ŒãŸéš›ã«ã¯ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚­ãƒ¼ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã‚ã‚‹ã„ã¯ã€ã‚¢ãƒ³ãƒ€ãƒ¼ãƒ©ã‚¤ãƒ³ä»˜ãã®æ–‡å­—を入力ã™ã‚‹ã“ã¨ã§ã‚‚実行ã§ãã¾ã™ã€‚メニューã®ã‚¨ãƒ³ãƒˆãƒªãŒã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚¿ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã¯ã€ãã®ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚¿ã‚’入力ã™ã‚‹ã“ã¨ã§ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’指定ã™ã‚‹ã“ã¨ãªã—ã«å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚メニューè¦ç´ ä¸­ã€æœ€å¾Œã®ã‚‚ã®ã¯ã€ãã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®æœ€åˆã®é …目をé¸æŠžã™ã‚‹ã“ã¨ã§ç‹¬ç«‹ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚") - end -}.pack('side'=>'top') - -# 状態表示ã®ç”Ÿæˆ -$menu8xstatus = TkVariable.new(" ") -TkFrame.new(base_frame) {|frame| - TkLabel.new(frame, 'textvariable'=>$menu8xstatus, 'relief'=>'sunken', - 'bd'=>1, 'font'=>['Helvetica', '10'], 'anchor'=>'w')\ - .pack('side'=>'left', 'padx'=>2, 'expand'=>'yes', 'fill'=>'both') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>2) - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $menu8x_demo - $menu8x_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'menu8x'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# menu ç”Ÿæˆ -TkMenu.new($menu8x_demo, 'tearoff'=>false) {|m| - TkMenu.new(m, 'tearoff'=>false) {|file_menu| - m.add('cascade', 'label'=>'File', 'menu'=>file_menu, 'underline'=>0) - add('command', 'label'=>'é–‹ã ...', 'command'=>proc{fail 'ã“ã‚Œã¯ã€ãƒ‡ãƒ¢ã§ã™ã®ã§"é–‹ã ..."ã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。'}) - add('command', 'label'=>'æ–°è¦', 'command'=>proc{fail 'ã“ã‚Œã¯ã€ãƒ‡ãƒ¢ã§ã™ã®ã§"æ–°è¦"ã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。'}) - add('command', 'label'=>'ä¿å­˜', 'command'=>proc{fail 'ã“ã‚Œã¯ã€ãƒ‡ãƒ¢ã§ã™ã®ã§"ä¿å­˜"ã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。'}) - add('command', 'label'=>'ä¿å­˜(指定) ...', 'command'=>proc{fail 'ã“ã‚Œã¯ã€ãƒ‡ãƒ¢ã§ã™ã®ã§"ä¿å­˜(指定) ..."ã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。'}) - add('separator') - add('command', 'label'=>'プリント設定 ...', 'command'=>proc{fail 'ã“ã‚Œã¯ã€ãƒ‡ãƒ¢ã§ã™ã®ã§"プリント設定 ..."ã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。'}) - add('command', 'label'=>'プリント ...', 'command'=>proc{fail 'ã“ã‚Œã¯ã€ãƒ‡ãƒ¢ã§ã™ã®ã§"プリント ..."ã«å¯¾ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。'}) - add('separator') - add('command', 'label'=>'終了', 'command'=>proc{$menu8x_demo.destroy}) - } - - if $tk_platform['platform'] == 'macintosh' || - windowingsystem == "classic" || windowingsystem == "aqua" - modifier = 'Command' - elsif $tk_platform['platform'] == 'windows' - modifier = 'Control' - else - modifier = 'Meta' - end - - TkMenu.new(m, 'tearoff'=>false) {|basic_menu| - m.add('cascade', 'label'=>'Basic', 'menu'=>basic_menu, 'underline'=>0) - add('command', 'label'=>'何もã—ãªã„é•·ã„エントリ') - ['A','B','C','D','E','F','G'].each{|c| - # add('command', 'label'=>"文字 \"#{c}\" ã‚’å°å­—", 'underline'=>4, - add('command', 'label'=>"Print letter \"#{c}\" (文字 \"#{c}\" ã‚’å°å­—)", - 'underline'=>14, - 'command'=>proc{print c,"\n"}, 'accelerator'=>"#{modifier}+#{c}") - $menu8x_demo.bind("#{modifier}-#{c.downcase}", proc{print c,"\n"}) - } - } - - TkMenu.new(m, 'tearoff'=>false) {|cascade_menu| - m.add('cascade', 'label'=>'Cascades', 'menu'=>cascade_menu, 'underline'=>0) - add('command', 'label'=>'Print hello(ã“ã‚“ã«ã¡ã¯)', - 'command'=>proc{print "Hello(ã“ã‚“ã«ã¡ã¯)\n"}, - 'accelerator'=>"#{modifier}+H", 'underline'=>6) - $menu8x_demo.bind("#{modifier}-h", proc{print "Hello(ã“ã‚“ã«ã¡ã¯)\n"}) - add('command', 'label'=>'Print goodbye(ã•ã‚ˆã†ãªã‚‰)', - 'command'=>proc{print "Goodbye(ã•ã‚ˆã†ãªã‚‰)\n"}, - 'accelerator'=>"#{modifier}+G", 'underline'=>6) - $menu8x_demo.bind("#{modifier}-g", proc{print "Goodbye(ã•ã‚ˆã†ãªã‚‰)\n"}) - - TkMenu.new(m, 'tearoff'=>false) {|cascade_check| - cascade_menu.add('cascade', 'label'=>'Check buttons(ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³)', - 'menu'=>cascade_check, 'underline'=>0) - oil = TkVariable.new(0) - add('check', 'label'=>'オイル点検', 'variable'=>oil) - trans = TkVariable.new(0) - add('check', 'label'=>'トランスミッション点検', 'variable'=>trans) - brakes = TkVariable.new(0) - add('check', 'label'=>'ブレーキ点検', 'variable'=>brakes) - lights = TkVariable.new(0) - add('check', 'label'=>'ライト点検', 'variable'=>lights) - add('separator') - add('command', 'label'=>'ç¾åœ¨ã®å€¤ã‚’表示', - 'command'=>proc{showVars($menu8x_demo, - ['オイル点検', oil], - ['トランスミッション点検', trans], - ['ブレーキ点検', brakes], - ['ライト点検', lights])} ) - invoke 1 - invoke 3 - } - - TkMenu.new(m, 'tearoff'=>false) {|cascade_radio| - cascade_menu.add('cascade', 'label'=>'Radio buttons(ラジオボタン)', - 'menu'=>cascade_radio, 'underline'=>0) - pointSize = TkVariable.new - add('radio', 'label'=>'10 ãƒã‚¤ãƒ³ãƒˆ', 'variable'=>pointSize, 'value'=>10) - add('radio', 'label'=>'14 ãƒã‚¤ãƒ³ãƒˆ', 'variable'=>pointSize, 'value'=>14) - add('radio', 'label'=>'18 ãƒã‚¤ãƒ³ãƒˆ', 'variable'=>pointSize, 'value'=>18) - add('radio', 'label'=>'24 ãƒã‚¤ãƒ³ãƒˆ', 'variable'=>pointSize, 'value'=>24) - add('radio', 'label'=>'32 ãƒã‚¤ãƒ³ãƒˆ', 'variable'=>pointSize, 'value'=>32) - add('separator') - style = TkVariable.new - add('radio', 'label'=>'ローマン', 'variable'=>style, 'value'=>'roman') - add('radio', 'label'=>'ボールド', 'variable'=>style, 'value'=>'bold') - add('radio', 'label'=>'イタリック', 'variable'=>style, 'value'=>'italic') - add('separator') - add('command', 'label'=>'ç¾åœ¨ã®å€¤ã‚’表示', - 'command'=>proc{showVars($menu8x_demo, - ['ãƒã‚¤ãƒ³ãƒˆã‚µã‚¤ã‚º', pointSize], - ['スタイル', style])} ) - invoke 1 - invoke 7 - } - } - - TkMenu.new(m, 'tearoff'=>false) {|icon_menu| - m.add('cascade', 'label'=>'Icons', 'menu'=>icon_menu, 'underline'=>0) - add('command', - 'bitmap'=>'@'+[$demo_dir,'..', - 'images','pattern.xbm'].join(File::Separator), - 'hidemargin'=>1, - 'command'=>proc{TkDialog.new('title'=>'Bitmap Menu Entry', - 'text'=>'今ã‚ãªãŸãŒé¸æŠžã—ãŸãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®é …ç›®ã¯ãƒ†ã‚­ã‚¹ãƒˆã§ã¯ãªãビットマップを表示ã—ã¦ã„ã¾ã—ãŸã€‚ãれ以外ã®ç‚¹ã§ã¯ä»–ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼é …ç›®ã¨å¤‰ã‚ã‚Šã¾ã›ã‚“。', - 'bitmap'=>'', 'default'=>0, - 'buttons'=>'了解')} ) - ['info', 'questhead', 'error'].each{|icon| - add('command', 'bitmap'=>icon, 'hidemargin'=>1, - 'command'=>proc{print "You invoked the #{icon} bitmap\n"}) - } - - entryconfigure(2, 'columnbreak'=>1) - } - - TkMenu.new(m, 'tearoff'=>false) {|more_menu| - m.add('cascade', 'label'=>'More', 'menu'=>more_menu, 'underline'=>0) - [ 'エントリ','別ã®ã‚¨ãƒ³ãƒˆãƒª','何もã—ãªã„','ã»ã¨ã‚“ã©ä½•ã‚‚ã—ãªã„', - '人生をæ„義ã‚ã‚‹ã‚‚ã®ã«' ].each{|i| - add('command', 'label'=>i, - 'command'=>proc{print "You invoked \"#{i}\"\n"}) - } - } - - TkMenu.new(m) {|colors_menu| - m.add('cascade', 'label'=>'Colors', 'menu'=>colors_menu, 'underline'=>1) - ['red', 'orange', 'yellow', 'green', 'blue'].each{|c| - add('command', 'label'=>c, 'background'=>c, - 'command'=>proc{print "You invoked \"#{c}\"\n"}) - } - } - - $menu8x_demo.configure('menu'=>m) -} - -TkMenu.bind('', - proc{|w| - begin - label = w.entrycget('active', 'label') - rescue - label = ' ' - end - $menu8xstatus.value = label - Tk.update('idletasks') - }, '%W') - -end ; # Tk 8.x diff --git a/ext/tk/sample/demos-jp/menubu.rb b/ext/tk/sample/demos-jp/menubu.rb deleted file mode 100644 index 57b1d41420..0000000000 --- a/ext/tk/sample/demos-jp/menubu.rb +++ /dev/null @@ -1,239 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -require "tkcanvas" - -def optionMenu(menubutton, varName, firstValue, *rest) - varName.value = firstValue - configoptions = {'textvariable'=>varName,'indicatoron'=>'on', - 'relief'=>'raised','borderwidth'=>2,'highlightthickness'=>2, - 'anchor'=>'c','direction'=>'flush'} - configoptions.each {|key, value| - menubutton.configure(key, value) - } - menu = TkMenu.new(menubutton) { - tearoff 'off' - add 'radio', 'label'=>firstValue, 'variable'=>varName - } - menubutton.menu(menu) - for i in rest - menu.add 'radio', 'label'=>i, 'variable'=>varName - end - - return menu -end - -if defined?($menubu_demo) && $menubu_demo - $menubu_demo.destroy - $menubu_demo = nil -end - -$menubu_demo = TkToplevel.new {|w| - title("Menu Button Demonstration") - iconname("menubutton") -} - -positionWindow($menubu_demo) - -base_frame = TkFrame.new($menubu_demo).pack(:fill=>:both, :expand=>true) - -# version check -if $tk_version.to_f < 8.0 - -# label ç”Ÿæˆ -TkLabel.new(base_frame,'font'=>$font,'wraplength'=>'4i','justify'=>'left') { - text("実行ã—よã†ã¨ã—ãŸã‚¹ã‚¯ãƒªãƒ—ト㯠Tk8.0 以上ã§åˆ©ç”¨ã§ãる機能を利用ã—ã¦ã„ã‚‹ãŸã‚ã€ã‚ãªãŸã® Ruby#{VERSION}/Tk#{$tk_version}#{(Tk::JAPANIZED_TK)? 'jp': ''} ã§ã¯æ­£å¸¸ã«å®Ÿè¡Œã§ãã¾ã›ã‚“。よã£ã¦ãƒ‡ãƒ¢ã®å®Ÿè¡Œã‚’中止ã—ã¾ã—ãŸã€‚ãŸã ã—ã€ä¸‹ã®ã‚³ãƒ¼ãƒ‰å‚照ボタンを押ã™ã“ã¨ã§ã€å®Ÿè¡ŒãŒä¸­æ­¢ã•ã‚ŒãŸã‚¹ã‚¯ãƒªãƒ—トã®ã‚½ãƒ¼ã‚¹ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã™ã€‚") -}.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $menubu_demo - $menubu_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'menubu'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -else ; # Tk8.x - -body = TkFrame.new(base_frame) -body.pack('expand'=>'yes', 'fill'=>'both') - -below = TkMenubutton.new(body) { - text "Below" - underline 0 - direction 'below' - relief 'raised' -} -belowMenu = TkMenu.new(below) { - tearoff 0 - add 'command', 'label'=>"Below menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Below menu.\""} - add 'command', 'label'=>"Below menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Below menu.\""} -} -below.menu(belowMenu) -below.grid('row'=>0, 'column'=>1, 'sticky'=>'n') - -below = TkMenubutton.new(body) { - text "Below" - underline 0 - direction 'below' - relief 'raised' -} -belowMenu = TkMenu.new(below) { - tearoff 0 - add 'command', 'label'=>"Below menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Below menu.\""} - add 'command', 'label'=>"Below menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Below menu.\""} -} -below.menu(belowMenu) -below.grid('row'=>0, 'column'=>1, 'sticky'=>'n') - -below = TkMenubutton.new(body) { - text "Below" - underline 0 - direction 'below' - relief 'raised' -} -belowMenu = TkMenu.new(below) { - tearoff 0 - add 'command', 'label'=>"Below menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Below menu.\""} - add 'command', 'label'=>"Below menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Below menu.\""} -} -below.menu(belowMenu) -below.grid('row'=>0, 'column'=>1, 'sticky'=>'n') - -right = TkMenubutton.new(body) { - text "Right" - underline 0 - direction 'right' - relief 'raised' -} -rightMenu = TkMenu.new(right) { - tearoff 0 - add 'command', 'label'=>"Right menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Left menu.\""} - add 'command', 'label'=>"Right menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Right menu.\""} -} -right.menu(rightMenu) -right.grid('row'=>1, 'column'=>0, 'sticky'=>'w') - -left = TkMenubutton.new(body) { - text "Left" - underline 0 - direction 'left' - relief 'raised' -} -leftMenu = TkMenu.new(left) { - tearoff 0 - add 'command', 'label'=>"Left menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Left menu.\""} - add 'command', 'label'=>"Left menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Left menu.\""} -} -left.menu(leftMenu) -left.grid('row'=>1, 'column'=>2, 'sticky'=>'e') - -center = TkFrame.new(body) { - grid('row'=>1, 'column'=>1, 'sticky'=>'news') -} - -above = TkMenubutton.new(body) { - text "Above" - underline 0 - direction 'above' - relief 'raised' -} -aboveMenu = TkMenu.new(above) { - tearoff 0 - add 'command', 'label'=>"Above menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Above menu.\""} - add 'command', 'label'=>"Above menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Above menu.\""} -} -above.menu(aboveMenu) -above.grid('row'=>2, 'column'=>1, 'sticky'=>'s') - -center = TkFrame.new(body) { - grid('row'=>1, 'column'=>1, 'sticky'=>'news') -} - -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc { - tmppath = $menubu_demo - $menubu_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc { showCode 'menubu' } - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'expand'=>'yes', 'fill'=>'x', 'pady'=>'2m') - -msg = TkLabel.new(center) { -# font $font - wraplength '4i' - justify 'left' - text "ã“ã‚Œã¯ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒœã‚¿ãƒ³ã®ãƒ‡ãƒ¢ã§ã™ã€‚\"Below\"ã®ãƒœã‚¿ãƒ³ã¯\ -下ã«ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’出ã—ã€\"Right\"ã®ãƒœã‚¿ãƒ³ã¯å³ã«ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’出ã—ã¦ã€\ -……ã¨ãªã‚Šã¾ã™ã€‚ã“ã®æ–‡ç« ã®ä¸‹ã«ã¯2ã¤ã®ã‚ªãƒ—ションメニューãŒã‚ã‚Šã¾ã™ã€‚\ -1ã¤ã¯æ™®é€šã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§ã€ã‚‚ã†1ã¤ã¯16色ã®ãƒ‘レットã§ã™ã€‚" -} -msg.pack('side'=>'top', 'padx'=>25, 'pady'=>25) - -TkFrame.new(center) {|f| - menubuttonoptions = TkVariable.new - mbutton = TkMenubutton.new(f) - options = optionMenu(mbutton, menubuttonoptions, - 'one', 'two', 'three') - mbutton.pack('side'=>'left', 'padx'=>25, 'pady'=>25) - paletteColor = TkVariable.new - colors = ['Black','red4','DarkGreen','NavyBlue', 'gray75', - 'Red','Green','Blue','gray50','Yellow','Cyan','Magenta', - 'White','Brown','DarkSeaGreen','DarkViolet'] - colorMenuButton = TkMenubutton.new(f) - m = optionMenu(colorMenuButton, paletteColor, *colors) - begin - windowingsystem = Tk.windowingsystem() - rescue - windowingsystem = "" - end - if windowingsystem == "classic" || windowingsystem == "aqua" - topBorderColor = 'Black' - bottomBorderColor = 'Black' - else - topBorderColor = 'gray50' - bottomBorderColor = 'gray75' - end - for i in 0..15 - image = TkPhotoImage.new('height'=>16, 'width'=>16) - image.put(topBorderColor, 0, 0, 16, 1) - image.put(topBorderColor, 0, 1, 1, 16) - image.put(bottomBorderColor, 0, 15, 16, 16) - image.put(bottomBorderColor, 15, 1, 16, 16) - image.put(colors[i], 1, 1, 15, 15) - - selectimage = TkPhotoImage.new('height'=>16, 'width'=>16) - selectimage.put('Black', 0, 0, 16, 2) - selectimage.put('Black', 0, 2, 2, 16) - selectimage.put('Black', 2, 14, 16, 16) - selectimage.put('Black', 14, 2, 16, 14) - selectimage.put(colors[i], 2, 2, 14, 14) - - m.entryconfigure(i, 'image'=>image, 'selectimage'=>selectimage, 'hidemargin'=>'on') - end - m.configure('tearoff', 'on') - for c in ['Black', 'gray75', 'gray50', 'White'] - m.entryconfigure(c, 'columnbreak'=>1) - end - colorMenuButton.pack('side'=>'left', 'padx'=>25, 'pady'=>25) - pack 'padx'=>25, 'pady'=>25 -} - -end ; # Tk8.x diff --git a/ext/tk/sample/demos-jp/msgbox.rb b/ext/tk/sample/demos-jp/msgbox.rb deleted file mode 100644 index 45d8b8e9f9..0000000000 --- a/ext/tk/sample/demos-jp/msgbox.rb +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# message boxes widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($msgbox_demo) && $msgbox_demo - $msgbox_demo.destroy - $msgbox_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$msgbox_demo = TkToplevel.new {|w| - title("Message Box Demonstration") - iconname("messagebox") - positionWindow(w) -} - -base_frame = TkFrame.new($msgbox_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'4i', 'justify'=>'left', - 'text'=>"ã¾ãšè¡¨ç¤ºã™ã‚‹ã‚¢ã‚¤ã‚³ãƒ³ã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒœãƒƒã‚¯ã‚¹ã®ç¨®é¡žã‚’é¸ã‚“ã§ä¸‹ã•ã„。ãã®å¾Œã«\"メッセージボックス\"ボタンを押ã™ã¨ã€æŒ‡å®šã—ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒœãƒƒã‚¯ã‚¹ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚").pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $msgbox_demo - $msgbox_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'msgbox'} - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'メッセージボックス' - command proc{showMessageBox $msgbox_demo} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -$msgbox_leftframe = TkFrame.new(base_frame) -$msgbox_rightframe = TkFrame.new(base_frame) -$msgbox_leftframe .pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y', - 'pady'=>'.5c', 'padx'=>'.5c') -$msgbox_rightframe.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y', - 'pady'=>'.5c', 'padx'=>'.5c') - -TkLabel.new($msgbox_leftframe, 'text'=>'アイコン').pack('side'=>'top') -TkFrame.new($msgbox_leftframe, 'relief'=>'ridge', 'bd'=>1, 'height'=>2)\ -.pack('side'=>'top', 'fill'=>'x', 'expand'=>'no') - -$msgboxIcon = TkVariable.new('info') -['error', 'info', 'question', 'warning'].each {|icon| - TkRadioButton.new($msgbox_leftframe, 'text'=>icon, 'variable'=>$msgboxIcon, - 'relief'=>'flat', 'value'=>icon, 'width'=>16, - 'anchor'=>'w').pack('side'=>'top', 'pady'=>2, - 'anchor'=>'w', 'fill'=>'x') -} - -TkLabel.new($msgbox_rightframe, 'text'=>'種類').pack('side'=>'top') -TkFrame.new($msgbox_rightframe, 'relief'=>'ridge', 'bd'=>1, 'height'=>2)\ -.pack('side'=>'top', 'fill'=>'x', 'expand'=>'no') - -$msgboxType = TkVariable.new('ok') -['abortretryignore', 'ok', 'okcancel', - 'retrycancel', 'yesno', 'yesnocancel'].each {|type| - TkRadioButton.new($msgbox_rightframe, 'text'=>type, 'variable'=>$msgboxType, - 'relief'=>'flat', 'value'=>type, 'width'=>16, - 'anchor'=>'w').pack('side'=>'top', 'pady'=>2, - 'anchor'=>'w', 'fill'=>'x') -} - -def showMessageBox(w) - button = Tk.messageBox('icon'=>$msgboxIcon.value, 'type'=>$msgboxType.value, - 'title'=>'Message', 'parent'=>w, - 'message'=>"ã“ã‚Œã¯\"#{$msgboxType.value}\"ã¨ã„ã†ç¨®é¡žã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒœãƒƒã‚¯ã‚¹ã§ã€\"#{$msgboxIcon.value}\"ã®ã‚¢ã‚¤ã‚³ãƒ³ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚") - - Tk.messageBox('icon'=>'info', 'type'=>'ok', 'parent'=>w, - 'message'=>"ã‚ãªãŸã¯ \"#{button}\" を押ã—ã¾ã—ãŸã­ã€‚") -end - diff --git a/ext/tk/sample/demos-jp/msgbox2.rb b/ext/tk/sample/demos-jp/msgbox2.rb deleted file mode 100644 index 51a0ca9dcc..0000000000 --- a/ext/tk/sample/demos-jp/msgbox2.rb +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# message boxes widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($msgbox2_demo) && $msgbox2_demo - $msgbox2_demo.destroy - $msgbox2_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$msgbox2_demo = TkToplevel.new {|w| - title("Message Box Demonstration") - iconname("messagebox") - positionWindow(w) -} - -base_frame = TkFrame.new($msgbox2_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'4i', 'justify'=>'left', - 'text'=>"ã¾ãšè¡¨ç¤ºã™ã‚‹ã‚¢ã‚¤ã‚³ãƒ³ã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒœãƒƒã‚¯ã‚¹ã®ç¨®é¡žã‚’é¸ã‚“ã§ä¸‹ã•ã„。ãã®å¾Œã«\"メッセージボックス\"ボタンを押ã™ã¨ã€æŒ‡å®šã•ã‚ŒãŸå½¢å¼ã§ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨è©³ç´°ãƒ†ã‚­ã‚¹ãƒˆã¨ã‚’æŒã£ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒœãƒƒã‚¯ã‚¹ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚").pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $msgbox2_demo - $msgbox2_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'msgbox2'} - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'メッセージボックス' - command proc{showMessageBox2 $msgbox2_demo} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -$msgbox_leftframe = TkFrame.new(base_frame) -$msgbox_rightframe = TkFrame.new(base_frame) -$msgbox_leftframe .pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y', - 'pady'=>'.5c', 'padx'=>'.5c') -$msgbox_rightframe.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y', - 'pady'=>'.5c', 'padx'=>'.5c') - -TkLabel.new($msgbox_leftframe, 'text'=>'アイコン').pack('side'=>'top') -TkFrame.new($msgbox_leftframe, 'relief'=>'ridge', 'bd'=>1, 'height'=>2)\ -.pack('side'=>'top', 'fill'=>'x', 'expand'=>'no') - -$msgboxIcon = TkVariable.new('info') -['error', 'info', 'question', 'warning'].each {|icon| - TkRadioButton.new($msgbox_leftframe, 'text'=>icon, 'variable'=>$msgboxIcon, - 'relief'=>'flat', 'value'=>icon, 'width'=>16, - 'anchor'=>'w').pack('side'=>'top', 'pady'=>2, - 'anchor'=>'w', 'fill'=>'x') -} - -TkLabel.new($msgbox_rightframe, 'text'=>'種類').pack('side'=>'top') -TkFrame.new($msgbox_rightframe, 'relief'=>'ridge', 'bd'=>1, 'height'=>2)\ -.pack('side'=>'top', 'fill'=>'x', 'expand'=>'no') - -$msgboxType = TkVariable.new('ok') -['abortretryignore', 'ok', 'okcancel', - 'retrycancel', 'yesno', 'yesnocancel'].each {|type| - TkRadioButton.new($msgbox_rightframe, 'text'=>type, 'variable'=>$msgboxType, - 'relief'=>'flat', 'value'=>type, 'width'=>16, - 'anchor'=>'w').pack('side'=>'top', 'pady'=>2, - 'anchor'=>'w', 'fill'=>'x') -} - -def showMessageBox2(w) - button = Tk.messageBox('icon'=>$msgboxIcon.value, 'type'=>$msgboxType.value, - 'title'=>'Message', 'parent'=>w, - 'message'=>"\"#{$msgboxType.value}\"タイプã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒœãƒƒã‚¯ã‚¹", - 'detail'=>"ã“ã‚Œã¯\"#{$msgboxType.value}\"ã¨ã„ã†ç¨®é¡žã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒœãƒƒã‚¯ã‚¹ã§ã€\"#{$msgboxIcon.value}\"ã®ã‚¢ã‚¤ã‚³ãƒ³ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚下ã®ãƒœã‚¿ãƒ³ã®ã„ãšã‚Œã‹ã‚’é¸æŠžã—ã¦ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã ã•ã„。") - - Tk.messageBox('icon'=>'info', 'type'=>'ok', 'parent'=>w, - 'message'=>"ã‚ãªãŸã¯ \"#{button}\" を押ã—ã¾ã—ãŸã­ã€‚") -end - diff --git a/ext/tk/sample/demos-jp/paned1.rb b/ext/tk/sample/demos-jp/paned1.rb deleted file mode 100644 index 96e419bec0..0000000000 --- a/ext/tk/sample/demos-jp/paned1.rb +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# paned1.rb -# -# This demonstration script creates a toplevel window containing -# a paned window that separates two windows horizontally. -# -# based on "Id: paned1.tcl,v 1.1 2002/02/22 14:07:01 dkf Exp" - -if defined?($paned1_demo) && $paned1_demo - $paned1_demo.destroy - $paned1_demo = nil -end - -$paned1_demo = TkToplevel.new {|w| - title("Horizontal Paned Window Demonstration") - iconname("paned1") - positionWindow(w) -} - -base_frame = TkFrame.new($paned1_demo).pack(:fill=>:both, :expand=>true) - -TkLabel.new(base_frame, - :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top) -下ã®è‰²ä»˜ã‘ã•ã‚ŒãŸäºŒã¤ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®é–“ã®ä»•åˆ‡ã‚Šæž ã¯ã€ä¸€ã¤ã®é ˜åŸŸã‚’ãã‚Œãžã‚Œã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ãŸã‚ã«åˆ†å‰²ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚左ボタンã§ä»•åˆ‡ã‚Šã‚’æ“作ã™ã‚‹ã¨ã€åˆ†å‰²ã‚µã‚¤ã‚ºå¤‰æ›´ã®æ“作途中ã§ã¯å†è¡¨ç¤ºã¯ãªã•ã‚Œãšã€ç¢ºå®šã•ã›ãŸã¨ãã«è¡¨ç¤ºãŒæ›´æ–°ã•ã‚Œã¾ã™ã€‚マウスã«ã‚ˆã‚‹ä»•åˆ‡ã‚Šã®æ“作ã«è¿½éšã—ã¦ã‚µã‚¤ã‚ºã‚’変更ã—ãŸè¡¨ç¤ºãŒãªã‚れるよã†ã«ã—ãŸã„å ´åˆã¯ã€ãƒžã‚¦ã‚¹ã®ä¸­å¤®ãƒœã‚¿ãƒ³ã‚’使ã£ã¦ãã ã•ã„。 -ã‚‚ã—ã‚ãªãŸãŒä½¿ã£ã¦ã„ã‚‹ Ruby ã«ãƒªãƒ³ã‚¯ã•ã‚Œã¦ã„ã‚‹ Tk ライブラリ㌠panedwindow を実装ã—ã¦ã„ãªã„ -å ´åˆã€ã“ã®ãƒ‡ãƒ¢ã¯ã†ã¾ãå‹•ã‹ãªã„ã¯ãšã§ã™ã€‚ãã®å ´åˆã«ã¯ panedwindow ãŒå®Ÿè£…ã•ã‚Œã¦ã„るよã†ãª -より新ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Tk を組ã¿åˆã‚ã›ã¦è©¦ã™ -よã†ã«ã—ã¦ãã ã•ã„。 -EOL - -# The bottom buttons -TkFrame.new(base_frame){|f| - pack(:side=>:bottom, :fill=>:x, :pady=>'2m') - - TkButton.new(f, :text=>'é–‰ã˜ã‚‹', :width=>15, :command=>proc{ - $paned1_demo.destroy - $paned1_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'コードå‚ç…§', :width=>15, :command=>proc{ - showCode 'paned1' - }).pack(:side=>:left, :expand=>true) -} - -TkPanedwindow.new(base_frame, :orient=>:horizontal){|f| - add(Tk::Label.new(f, :text=>"This is the\nleft side", :bg=>'yellow'), - Tk::Label.new(f, :text=>"This is the\nright side", :bg=>'cyan')) - - pack(:side=>:top, :expand=>true, :fill=>:both, :pady=>2, :padx=>'2m') -} diff --git a/ext/tk/sample/demos-jp/paned2.rb b/ext/tk/sample/demos-jp/paned2.rb deleted file mode 100644 index 11a02abe73..0000000000 --- a/ext/tk/sample/demos-jp/paned2.rb +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# paned2.rb -- -# -# This demonstration script creates a toplevel window containing -# a paned window that separates two windows vertically. -# -# based on "Id: paned2.tcl,v 1.1 2002/02/22 14:07:01 dkf Exp" - -if defined?($paned2_demo) && $paned2_demo - $paned2_demo.destroy - $paned2_demo = nil -end - -$paned2_demo = TkToplevel.new {|w| - title("Vertical Paned Window Demonstration") - iconname("paned2") - positionWindow(w) -} - -base_frame = TkFrame.new($paned2_demo).pack(:fill=>:both, :expand=>true) - -TkLabel.new(base_frame, - :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top) -下ã®ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ãƒãƒ¼ä»˜ãã®ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆãŒç½®ã‹ã‚ŒãŸäºŒã¤ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®é–“ã®ä»•åˆ‡ã‚Šæž ã¯ã€ä¸€ã¤ã®é ˜åŸŸã‚’ãã‚Œãžã‚Œã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ãŸã‚ã«åˆ†å‰²ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚左ボタンã§ä»•åˆ‡ã‚Šã‚’æ“作ã™ã‚‹ã¨ã€åˆ†å‰²ã‚µã‚¤ã‚ºå¤‰æ›´ã®æ“作途中ã§ã¯å†è¡¨ç¤ºã¯ãªã•ã‚Œãšã€ç¢ºå®šã•ã›ãŸã¨ãã«è¡¨ç¤ºãŒæ›´æ–°ã•ã‚Œã¾ã™ã€‚マウスã«ã‚ˆã‚‹ä»•åˆ‡ã‚Šã®æ“作ã«è¿½éšã—ã¦ã‚µã‚¤ã‚ºã‚’変更ã—ãŸè¡¨ç¤ºãŒãªã‚れるよã†ã«ã—ãŸã„å ´åˆã¯ã€ãƒžã‚¦ã‚¹ã®ä¸­å¤®ãƒœã‚¿ãƒ³ã‚’使ã£ã¦ãã ã•ã„。 -ã‚‚ã—ã‚ãªãŸãŒä½¿ã£ã¦ã„ã‚‹ Ruby ã«ãƒªãƒ³ã‚¯ã•ã‚Œã¦ã„ã‚‹ Tk ライブラリ㌠panedwindow を実装ã—ã¦ã„ãªã„ -å ´åˆã€ã“ã®ãƒ‡ãƒ¢ã¯ã†ã¾ãå‹•ã‹ãªã„ã¯ãšã§ã™ã€‚ãã®å ´åˆã«ã¯ panedwindow ãŒå®Ÿè£…ã•ã‚Œã¦ã„るよã†ãª -より新ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Tk を組ã¿åˆã‚ã›ã¦è©¦ã™ -よã†ã«ã—ã¦ãã ã•ã„。 -EOL - -# The bottom buttons -TkFrame.new(base_frame){|f| - pack(:side=>:bottom, :fill=>:x, :pady=>'2m') - - TkButton.new(f, :text=>'é–‰ã˜ã‚‹', :width=>15, :command=>proc{ - $paned2_demo.destroy - $paned2_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'コードå‚ç…§', :width=>15, :command=>proc{ - showCode 'paned2' - }).pack(:side=>:left, :expand=>true) -} - -paneList = TkVariable.new # define as normal variable (not array) -paneList.value = [ # ruby's array --> tcl's list - 'Ruby/Tk ã®ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆä¸€è¦§', - 'TkButton', - 'TkCanvas', - 'TkCheckbutton', - 'TkEntry', - 'TkFrame', - 'TkLabel', - 'TkLabelframe', - 'TkListbox', - 'TkMenu', - 'TkMenubutton', - 'TkMessage', - 'TkPanedwindow', - 'TkRadiobutton', - 'TkScale', - 'TkScrollbar', - 'TkSpinbox', - 'TkText', - 'TkToplevel' -] - -# Create the pane itself -TkPanedwindow.new(base_frame, :orient=>:vertical){|f| - pack(:side=>:top, :expand=>true, :fill=>:both, :pady=>2, :padx=>'2m') - - add(TkFrame.new(f){|paned2_top| - TkListbox.new(paned2_top, :listvariable=>paneList) { - # Invert the first item to highlight it - itemconfigure(0, :background=>self.cget(:foreground), - :foreground=>self.cget(:background) ) - yscrollbar(TkScrollbar.new(paned2_top).pack(:side=>:right, - :fill=>:y)) - pack(:fill=>:both, :expand=>true) - } - }, - - TkFrame.new(f, :height=>120) {|paned2_bottom| - # The bottom window is a text widget with scrollbar - paned2_xscr = TkScrollbar.new(paned2_bottom) - paned2_yscr = TkScrollbar.new(paned2_bottom) - paned2_text = TkText.new(paned2_bottom, :width=>30, :wrap=>:non) { - insert('1.0', 'ã“ã“ã«é…ç½®ã•ã‚Œã¦ã„ã‚‹ã®ã¯ã€' + - 'ã”ã普通ã®ãƒ†ã‚­ã‚¹ãƒˆã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã§ã™ã€‚') - xscrollbar(paned2_xscr) - yscrollbar(paned2_yscr) - } - Tk.grid(paned2_text, paned2_yscr, :sticky=>'nsew') - Tk.grid(paned2_xscr, :sticky=>'nsew') - TkGrid.columnconfigure(paned2_bottom, 0, :weight=>1) - TkGrid.rowconfigure(paned2_bottom, 0, :weight=>1) - } ) -} diff --git a/ext/tk/sample/demos-jp/pendulum.rb b/ext/tk/sample/demos-jp/pendulum.rb deleted file mode 100644 index 06e6933548..0000000000 --- a/ext/tk/sample/demos-jp/pendulum.rb +++ /dev/null @@ -1,243 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# This demonstration illustrates how Tcl/Tk can be used to construct -# simulations of physical systems. -# (called by 'widget') -# -# based on Tcl/Tk8.5a2 widget demos - -# destroy toplevel widget for this demo script -if defined?($pendulum_demo) && $pendulum_demo - $pendulum_demo.destroy - $pendulum_demo = nil -end - -# create toplevel widget -$pendulum_demo = TkToplevel.new {|w| - title("Pendulum Animation Demonstration") - iconname("pendulum") - positionWindow(w) -} - -base_frame = TkFrame.new($pendulum_demo).pack(:fill=>:both, :expand=>true) - -# create label -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text 'ã“ã®ãƒ‡ãƒ¢ã¯ã€ç‰©ç†ç³»ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã«é–¢ã‚るよã†ãªã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³å®Ÿè¡Œã™ã‚‹ãŸã‚ã« Ruby/Tk ã‚’ã©ã®ã‚ˆã†ã«ç”¨ã„ã‚‹ã“ã¨ãŒã§ãã‚‹ã‹ã‚’示ã—ã¦ã„ã¾ã™ã€‚å·¦å´ã®ã‚­ãƒ£ãƒ³ãƒã‚¹ã¯å˜ç´”ãªæŒ¯ã‚Šå­ã§ã‚る物ç†ç³»è‡ªä½“ã®ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«è¡¨ç¾ã§ã‚ã‚‹ã®ã«å¯¾ã—ã€å³å´ã®ã‚­ãƒ£ãƒ³ãƒã‚¹ã¯ç³»ã®ä½ç›¸ç©ºé–“ã®ã‚°ãƒ©ãƒ•ï¼ˆè§’速度ã¨è§’度ã¨ã‚’プロットã—ãŸã‚‚ã®ï¼‰ã«ãªã£ã¦ã„ã¾ã™ã€‚å·¦å´ã®ã‚­ãƒ£ãƒ³ãƒã‚¹ä¸Šã§ã‚¯ãƒªãƒƒã‚¯ãŠã‚ˆã³ãƒ‰ãƒ©ãƒƒã‚°ã‚’è¡Œã£ã¦æŒ¯ã‚Šå­ã®é‡ã‚Šã®ä½ç½®ã‚’変ãˆã¦ã¿ã¦ãã ã•ã„。' -} -msg.pack('side'=>'top') - -# create frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $pendulum_demo - $pendulum_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'pendulum'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# animated wave -class PendulumAnimationDemo - def initialize(frame) - # Create some structural widgets - @pane = TkPanedWindow.new(frame, :orient=>:horizontal).pack(:fill=>:both, :expand=>true) -# @pane.add(@lf1 = TkLabelFrame.new(@pane, :text=>'Pendulum Simulation')) -# @pane.add(@lf2 = TkLabelFrame.new(@pane, :text=>'Phase Space')) - @lf1 = TkLabelFrame.new(@pane, :text=>'Pendulum Simulation') - @lf2 = TkLabelFrame.new(@pane, :text=>'Phase Space') - - # Create the canvas containing the graphical representation of the - # simulated system. - @c = TkCanvas.new(@lf1, :width=>320, :height=>200, :background=>'white', - :borderwidth=>2, :relief=>:sunken) - TkcText.new(@c, 5, 5, :anchor=>:nw, - :text=>'Click to Adjust Bob Start Position') - # Coordinates of these items don't matter; they will be set properly below - @plate = TkcLine.new(@c, 0, 25, 320, 25, :width=>2, :fill=>'grey50') - @rod = TkcLine.new(@c, 1, 1, 1, 1, :width=>3, :fill=>'black') - @bob = TkcOval.new(@c, 1, 1, 2, 2, - :width=>3, :fill=>'yellow', :outline=>'black') - TkcOval.new(@c, 155, 20, 165, 30, :fill=>'grey50', :outline=>'') - - # pack - @c.pack(:fill=>:both, :expand=>true) - - # Create the canvas containing the phase space graph; this consists of - # a line that gets gradually paler as it ages, which is an extremely - # effective visual trick. - @k = TkCanvas.new(@lf2, :width=>320, :height=>200, :background=>'white', - :borderwidth=>2, :relief=>:sunken) - @y_axis = TkcLine.new(@k, 160, 200, 160, 0, :fill=>'grey75', :arrow=>:last) - @x_axis = TkcLine.new(@k, 0, 100, 320, 100, :fill=>'grey75', :arrow=>:last) - - @graph = {} - 90.step(0, -10){|i| - # Coordinates of these items don't matter; - # they will be set properly below - @graph[i] = TkcLine.new(@k, 0, 0, 1, 1, :smooth=>true, :fill=>"grey#{i}") - } - - # labels - @label_theta = TkcText.new(@k, 0, 0, :anchor=>:ne, - :text=>'q', :font=>'Symbol 8') - @label_dtheta = TkcText.new(@k, 0, 0, :anchor=>:ne, - :text=>'dq', :font=>'Symbol 8') - - # pack - @k.pack(:fill=>:both, :expand=>true) - - # Initialize some variables - @points = [] - @theta = 45.0 - @dTheta = 0.0 - @length = 150 - - # animation loop - @timer = TkTimer.new(15){ repeat } - - # binding - @c.bindtags_unshift(btag = TkBindTag.new) - btag.bind('Destroy'){ @timer.stop } - btag.bind('1', proc{|x, y| @timer.stop; showPendulum(x.to_i, y.to_i)}, - '%x %y') - btag.bind('B1-Motion', proc{|x, y| showPendulum(x.to_i, y.to_i)}, '%x %y') - btag.bind('ButtonRelease-1', - proc{|x, y| showPendulum(x.to_i, y.to_i); @timer.start }, - '%x %y') - - btag.bind('Configure', proc{|w| @plate.coords(0, 25, w.to_i, 25)}, '%w') - - @k.bind('Configure', proc{|h, w| - h = h.to_i - w = w.to_i - @psh = h/2; - @psw = w/2 - @x_axis.coords(2, @psh, w-2, @psh) - @y_axis.coords(@psw, h-2, @psw, 2) - @label_theta.coords(@psw-4, 6) - @label_dtheta.coords(w-6, @psh+4) - }, '%h %w') - - # add - Tk.update - @pane.add(@lf1) - @pane.add(@lf2) - - # init display - showPendulum - - # animation start - @timer.start(500) - end - - # This procedure makes the pendulum appear at the correct place on the - # canvas. If the additional arguments x, y are passed instead of computing - # the position of the pendulum from the length of the pendulum rod and its - # angle, the length and angle are computed in reverse from the given - # location (which is taken to be the centre of the pendulum bob.) - def showPendulum(x=nil, y=nil) - if x && y && (x != 160 || y != 25) - @dTheta = 0.0 - x2 = x - 160 - y2 = y - 25 - @length = Math.hypot(x2, y2) - @theta = Math.atan2(x2,y2)*180/Math::PI - else - angle = @theta*Math::PI/180 - x = 160 + @length*Math.sin(angle) - y = 25 + @length*Math.cos(angle) - end - - @rod.coords(160, 25, x, y) - @bob.coords(x-15, y-15, x+15, y+15) - end - - # Update the phase-space graph according to the current angle and the - # rate at which the angle is changing (the first derivative with - # respect to time.) - def showPhase - unless @psw && @psh - @psw = @k.width/2 - @psh = @k.height/2 - end - @points << @theta + @psw << -20*@dTheta + @psh - if @points.length > 100 - @points = @points[-100..-1] - end - (0...100).step(10){|i| - first = - i - last = 11 - i - last = -1 if last >= 0 - next if first > last - lst = @points[first..last] - @graph[i].coords(lst) if lst && lst.length >= 4 - } - end - - # This procedure is the "business" part of the simulation that does - # simple numerical integration of the formula for a simple rotational - # pendulum. - def recomputeAngle - scaling = 3000.0/@length/@length - - # To estimate the integration accurately, we really need to - # compute the end-point of our time-step. But to do *that*, we - # need to estimate the integration accurately! So we try this - # technique, which is inaccurate, but better than doing it in a - # single step. What we really want is bound up in the - # differential equation: - # .. - sin theta - # theta + theta = ----------- - # length - # But my math skills are not good enough to solve this! - - # first estimate - firstDDTheta = -Math.sin(@theta * Math::PI/180) * scaling - midDTheta = @dTheta + firstDDTheta - midTheta = @theta + (@dTheta + midDTheta)/2 - # second estimate - midDDTheta = -Math.sin(midTheta * Math::PI/180) * scaling - midDTheta = @dTheta + (firstDDTheta + midDDTheta)/2 - midTheta = @theta + (@dTheta + midDTheta)/2 - # Now we do a double-estimate approach for getting the final value - # first estimate - midDDTheta = -Math.sin(midTheta * Math::PI/180) * scaling - lastDTheta = midDTheta + midDDTheta - lastTheta = midTheta + (midDTheta+ lastDTheta)/2 - # second estimate - lastDDTheta = -Math.sin(lastTheta * Math::PI/180) * scaling - lastDTheta = midDTheta + (midDDTheta + lastDDTheta)/2 - lastTheta = midTheta + (midDTheta + lastDTheta)/2 - # Now put the values back in our globals - @dTheta = lastDTheta - @theta = lastTheta - end - - # This method ties together the simulation engine and the graphical - # display code that visualizes it. - def repeat - # Simulate - recomputeAngle - - # Update the display - showPendulum - showPhase - end -end - -# Start the animation processing -PendulumAnimationDemo.new(base_frame) diff --git a/ext/tk/sample/demos-jp/plot.rb b/ext/tk/sample/demos-jp/plot.rb deleted file mode 100644 index 85970bb5b3..0000000000 --- a/ext/tk/sample/demos-jp/plot.rb +++ /dev/null @@ -1,127 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# 2-D plot widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($plot_demo) && $plot_demo - $plot_demo.destroy - $plot_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$plot_demo = TkToplevel.new {|w| - title("Plot Demonstration") - iconname("Plot") - positionWindow(w) -} - -base_frame = TkFrame.new($plot_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'4i', 'justify'=>'left', - 'text'=>"ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯ç°¡å˜ãª2次元ã®ãƒ—ロットをå«ã‚“ã ã‚­ãƒ£ãƒ³ãƒã‚¹ widgetã§ã™ã€‚表示ã•ã‚ŒãŸç‚¹ã‚’マウスボタン1ã§ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ãƒ‡ãƒ¼ã‚¿ã‚’ã„ã˜ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"){ - pack('side'=>'top') -} - -# frame ç”Ÿæˆ -$plot_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $plot_demo - $plot_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'plot'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$plot_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# font 設定 - if $tk_version =~ /^4.*/ - plotFont = '-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' - else - font = 'Helvetica 18' - end - -# canvas 設定 -$plot_canvas = TkCanvas.new(base_frame,'relief'=>'raised','width'=>450,'height'=>300) -$plot_canvas.pack('side'=>'top', 'fill'=>'x') - -# plot ç”Ÿæˆ -TkcLine.new($plot_canvas, 100, 250, 400, 250, 'width'=>2) -TkcLine.new($plot_canvas, 100, 250, 100, 50, 'width'=>2) -TkcText.new($plot_canvas, 225, 20, - 'text'=>"ç°¡å˜ãªãƒ—ロット", 'font'=>plotFont, 'fill'=>'brown') - -(0..10).each {|i| - x = 100 + (i * 30) - TkcLine.new($plot_canvas, x, 250, x, 245, 'width'=>2) - TkcText.new($plot_canvas, x, 254, - 'text'=>10*i, 'font'=>plotFont, 'anchor'=>'n') -} -(0..5).each {|i| - y = 250 - (i * 40) - TkcLine.new($plot_canvas, 100, y, 105, y, 'width'=>2) - TkcText.new($plot_canvas, 96, y, - 'text'=>"#{i*50}.0", 'font'=>plotFont, 'anchor'=>'e') -} - -for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]] - x = 100 + (3*xx) - y = 250 - (4*yy)/5 - item = TkcOval.new($plot_canvas, x-6, y-6, x+6, y+6, - 'width'=>1, 'outline'=>'black', 'fill'=>'SkyBlue2') - item.addtag 'point' -end - -$plot_canvas.itembind('point', 'Any-Enter', - proc{$plot_canvas.itemconfigure 'current','fill','red'}) -$plot_canvas.itembind('point', 'Any-Leave', - proc{$plot_canvas.itemconfigure 'current','fill','SkyBlue2'}) -$plot_canvas.itembind('point', '1', - proc{|x,y| plotDown $plot_canvas,x,y}, "%x %y") -$plot_canvas.itembind('point', 'ButtonRelease-1', - proc{$plot_canvas.dtag 'selected'}) -$plot_canvas.bind('B1-Motion', - proc{|x,y| plotMove $plot_canvas,x,y}, "%x %y") - -$plot = {'lastX'=>0, 'lastY'=>0} - -# plotDown -- -# This method is invoked when the mouse is pressed over one of the -# data points. It sets up state to allow the point to be dragged. -# -# Arguments: -# w - The canvas window. -# x, y - The coordinates of the mouse press. - -def plotDown (w, x, y) - w.dtag 'selected' - w.addtag_withtag 'selected', 'current' - w.raise 'current' - $plot['lastX'] = x - $plot['lastY'] = y -end - -# plotMove -- -# This method is invoked during mouse motion events. It drags the -# current item. -# -# Arguments: -# w - The canvas window. -# x, y - The coordinates of the mouse. - -def plotMove (w, x, y) - w.move 'selected', x - $plot['lastX'], y - $plot['lastY'] - $plot['lastX'] = x - $plot['lastY'] = y -end - diff --git a/ext/tk/sample/demos-jp/puzzle.rb b/ext/tk/sample/demos-jp/puzzle.rb deleted file mode 100644 index 8a0803ad3d..0000000000 --- a/ext/tk/sample/demos-jp/puzzle.rb +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# widget demo 'puzzle' (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($puzzle_demo) && $puzzle_demo - $puzzle_demo.destroy - $puzzle_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$puzzle_demo = TkToplevel.new {|w| - title("15-Puzzle Demonstration") - iconname("15-Puzzle") - positionWindow(w) -} - -base_frame = TkFrame.new($puzzle_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "下ã®15-パズルã¯ãƒœã‚¿ãƒ³ã‚’集ã‚ã¦ã§ãã¦ã„ã¾ã™ã€‚空ã„ã¦ã„る所ã®éš£ã®ãƒ”ースをクリックã™ã‚‹ã¨ã€ãã®ãƒ”ースãŒãã®ç©ºã„ã¦ã„る場所ã«ã‚¹ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚ã“ã®æ“作を続ã‘ã€ãƒ”ースãŒãã®æ•°ã®é †ã«ä¸Šã‹ã‚‰ä¸‹ã€å·¦ã‹ã‚‰å³ã«ä¸¦ã¶ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" -} -msg.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $puzzle_demo - $puzzle_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'puzzle'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -# -# Special trick: scrollbar widget を生æˆã—ã¦ãã® trough color を用ã„ã‚‹ã“ã¨ã§ -# 空白部分ã®ãŸã‚ã®æš—色をé¸æŠžã—,設定ã™ã‚‹ -# -begin - if Tk.windowingsystem() == 'aqua' - frameWidth = 168 - frameHeight = 168 - elsif Tk.default_widget_set == :Ttk - frameWidth = 148 - frameHeight = 124 - else - frameWidth = 120 - frameHeight = 120 - end -rescue - frameWidth = 120 - frameHeight = 120 -end - -# depend_on_button_width = true -depend_on_button_width = false - -s = TkScrollbar.new(base_frame) -base = TkFrame.new(base_frame) { - width frameWidth - height frameHeight - borderwidth 2 - relief 'sunken' - bg s['troughcolor'] -} -s.destroy -base.pack('side'=>'top', 'padx'=>'1c', 'pady'=>'1c') - -# proc ã®ã‚¹ã‚³ãƒ¼ãƒ—ã‚’é–‰ã˜ã‚‹ãŸã‚,proc 生æˆãƒ¡ã‚½ãƒƒãƒ‰ã‚’ç”¨æ„ -# ã“ã†ã—ã¦ãŠã‹ã­ã°ï¼Œãƒ«ãƒ¼ãƒ—中ã§å€¤ãŒå¤‰åŒ–ã™ã‚‹ num ã®å½±éŸ¿ã‚’å—ã‘㦠-# puzzleSwitch ã®ç¬¬ 2 引数ãŒå¤‰åŒ–ã—ã¦ã—ã¾ã„,期待通りã«ã¯ãªã‚‰ãªã„. -def def_puzzleswitch_proc(w, num) - proc{puzzleSwitch w, num} -end - -$xpos = {} -$ypos = {} -order = [3,1,6,2,5,7,15,13,4,11,8,9,14,10,12] -(0..14).each{|i| - num = order[i] - $xpos[num] = (i % 4) * 0.25 - $ypos[num] = (i / 4) * 0.25 - TkButton.new(base) {|w| - relief 'raised' - text num - highlightthickness 0 - command def_puzzleswitch_proc(w, num) - if depend_on_button_width && (w.winfo_reqwidth * 4 > base.width) - base.width = w.winfo_reqwidth * 4 - end - }.place('relx'=>$xpos[num], 'rely'=>$ypos[num], - 'relwidth'=>0.25, 'relheight'=>0.25) -} -$xpos['space'] = 0.75 -$ypos['space'] = 0.75 - -############ -def puzzleSwitch(w, num) - if ( ($ypos[num] >= ($ypos['space'] - 0.01)) \ - && ($ypos[num] <= ($ypos['space'] + 0.01)) \ - && ($xpos[num] >= ($xpos['space'] - 0.26)) \ - && ($xpos[num] <= ($xpos['space'] + 0.26))) \ - || (($xpos[num] >= ($xpos['space'] - 0.01)) \ - && ($xpos[num] <= ($xpos['space'] + 0.01)) \ - && ($ypos[num] >= ($ypos['space'] - 0.26)) \ - && ($ypos[num] <= ($ypos['space'] + 0.26))) - tmp = $xpos['space'] - $xpos['space'] = $xpos[num] - $xpos[num] = tmp - tmp = $ypos['space'] - $ypos['space'] = $ypos[num] - $ypos[num] = tmp - w.place('relx'=>$xpos[num], 'rely'=>$ypos[num]) - end -end - diff --git a/ext/tk/sample/demos-jp/radio.rb b/ext/tk/sample/demos-jp/radio.rb deleted file mode 100644 index 4d84441687..0000000000 --- a/ext/tk/sample/demos-jp/radio.rb +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# radiobutton widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($radio_demo) && $radio_demo - $radio_demo.destroy - $radio_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$radio_demo = TkToplevel.new {|w| - title("Radiobutton Demonstration") - iconname("radio") - positionWindow(w) -} - -base_frame = TkFrame.new($radio_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "下ã«ã¯2ã¤ã®ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã‚°ãƒ«ãƒ¼ãƒ—ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚ボタンをクリックã™ã‚‹ã¨ã€ãã®ãƒœã‚¿ãƒ³ã ã‘ãŒãã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸­ã§é¸æŠžã•ã‚Œã¾ã™ã€‚å„グループã«å¯¾ã—ã¦ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸­ã®ã©ã®ãƒœã‚¿ãƒ³ãŒé¸æŠžã•ã‚Œã¦ã„ã‚‹ã‹ã‚’示ã™å¤‰æ•°ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚ç¾åœ¨ã®å¤‰æ•°ã®å€¤ã‚’見るã«ã¯ã€Œå¤‰æ•°å‚ç…§ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。" -} -msg.pack('side'=>'top') - -# å¤‰æ•°ç”Ÿæˆ -size = TkVariable.new -color = TkVariable.new - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $radio_demo - $radio_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'radio'} - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text '変数å‚ç…§' - command proc{ - showVars(base_frame, ['size', size], ['color', color]) - } - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -f_left = TkFrame.new(base_frame) -f_right = TkFrame.new(base_frame) -f_left.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'.5c', 'pady'=>'.5c') -f_right.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'.5c', 'pady'=>'.5c') - -# radiobutton ç”Ÿæˆ -[10, 12, 18, 24].each {|sz| - TkRadioButton.new(f_left) { - text "ãƒã‚¤ãƒ³ãƒˆã‚µã‚¤ã‚º #{sz}" - variable size - relief 'flat' - value sz - }.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') -} - -['赤', 'ç·‘', 'é’', '黄', 'æ©™', 'ç´«'].each {|col| - TkRadioButton.new(f_right) { - text col - variable color - relief 'flat' - value col.downcase - }.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') -} - diff --git a/ext/tk/sample/demos-jp/radio2.rb b/ext/tk/sample/demos-jp/radio2.rb deleted file mode 100644 index 4416122876..0000000000 --- a/ext/tk/sample/demos-jp/radio2.rb +++ /dev/null @@ -1,113 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# radio2.rb -# -# This demonstration script creates a toplevel window containing -# several radiobutton widgets. -# -# radiobutton widget demo (called by 'widget') -# - -# toplevel widget -if defined?($radio2_demo) && $radio2_demo - $radio2_demo.destroy - $radio2_demo = nil -end - -# demo toplevel widget -$radio2_demo = TkToplevel.new {|w| - title("Radiobutton Demonstration 2") - iconname("radio2") - positionWindow(w) -} - -base_frame = TkFrame.new($radio2_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '5i' - justify 'left' - text "下ã«ã¯3ã¤ã®ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã‚°ãƒ«ãƒ¼ãƒ—ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚ボタンをクリックã™ã‚‹ã¨ã€ãã®ãƒœã‚¿ãƒ³ã ã‘ãŒãã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸­ã§é¸æŠžã•ã‚Œã¾ã™ã€‚å„グループã«å¯¾ã—ã¦ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸­ã®ã©ã®ãƒœã‚¿ãƒ³ãŒé¸æŠžã•ã‚Œã¦ã„ã‚‹ã‹ã‚’示ã™å¤‰æ•°ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚ç¾åœ¨ã®å¤‰æ•°ã®å€¤ã‚’見るã«ã¯ã€Œå¤‰æ•°å‚ç…§ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。" -} -msg.pack('side'=>'top') - -# -size = TkVariable.new -color = TkVariable.new -align = TkVariable.new - -# frame -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $radio2_demo - $radio2_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'radio2'} - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text '変数å‚ç…§' - command proc{ - showVars(base_frame, - ['size', size], ['color', color], ['compound', align]) - } - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame -f_left = TkLabelFrame.new(base_frame, 'text'=>'文字サイズ', - 'pady'=>2, 'padx'=>2) -f_mid = TkLabelFrame.new(base_frame, 'text'=>'色', - 'pady'=>2, 'padx'=>2) -f_right = TkLabelFrame.new(base_frame, 'text'=>'ビットマップé…ç½®', - 'pady'=>2, 'padx'=>2) -f_left.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'.5c', 'pady'=>'.5c') -f_mid.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'.5c', 'pady'=>'.5c') -f_right.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'.5c', 'pady'=>'.5c') - -# radiobutton -[10, 12, 18, 24].each {|sz| - TkRadioButton.new(f_left) { - text "ãƒã‚¤ãƒ³ãƒˆã‚µã‚¤ã‚º #{sz}" - variable size - relief 'flat' - value sz - }.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w', 'fill'=>'x') -} - -['赤', 'ç·‘', 'é’', '黄', 'æ©™', 'ç´«'].each {|col| - TkRadioButton.new(f_mid) { - text col - variable color - relief 'flat' - value col.downcase - anchor 'w' - }.pack('side'=>'top', 'pady'=>2, 'fill'=>'x') -} - -# label = TkLabel.new(f_right, 'text'=>'ラベル', 'bitmap'=>'questhead', -label = Tk::Label.new(f_right, 'text'=>'ラベル', 'bitmap'=>'questhead', - 'compound'=>'left') -label.configure('width'=>TkWinfo.reqwidth(label), 'compound'=>'top') -label.height(TkWinfo.reqheight(label)) -abtn = ['Top', 'Left', 'Right', 'Bottom'].collect{|a| - lower = a.downcase - TkRadioButton.new(f_right, 'text'=>a, 'variable'=>align, 'relief'=>'flat', - 'value'=>lower, 'indicatoron'=>0, 'width'=>7, - 'command'=>proc{label.compound(align.value)}) -} - -Tk.grid('x', abtn[0]) -Tk.grid(abtn[1], label, abtn[2]) -Tk.grid('x', abtn[3]) diff --git a/ext/tk/sample/demos-jp/radio3.rb b/ext/tk/sample/demos-jp/radio3.rb deleted file mode 100644 index 3f26ffb847..0000000000 --- a/ext/tk/sample/demos-jp/radio3.rb +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# radio3.rb -# -# This demonstration script creates a toplevel window containing -# several radiobutton widgets. -# -# radiobutton widget demo (called by 'widget') -# - -# toplevel widget -if defined?($radio3_demo) && $radio3_demo - $radio3_demo.destroy - $radio3_demo = nil -end - -# demo toplevel widget -$radio3_demo = TkToplevel.new {|w| - title("Radiobutton Demonstration 3") - iconname("radio3") - positionWindow(w) -} - -base_frame = TkFrame.new($radio3_demo).pack(:fill=>:both, :expand=>true) - -# label -msg = TkLabel.new(base_frame) { - font $font - wraplength '5i' - justify 'left' - text '下ã«ã¯3ã¤ã®ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã‚°ãƒ«ãƒ¼ãƒ—ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚ボタンをクリックã™ã‚‹ã¨ã€ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å±žã™ã‚‹ã™ã¹ã¦ã®ãƒœã‚¿ãƒ³ã®ä¸­ã§ã‚¯ãƒªãƒƒã‚¯ã—ãŸãƒœã‚¿ãƒ³ã ã‘ãŒé¸æŠžã•ã‚ŒãŸçŠ¶æ…‹ã«ãªã‚Šã¾ã™ã€‚å„グループã«ã¯ã€ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸­ã®ã©ã®ãƒœã‚¿ãƒ³ãŒé¸æŠžã•ã‚Œã¦ã„ã‚‹ã‹ã‚’示ã™å¤‰æ•°ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚「トライステートã€ãƒœã‚¿ãƒ³ãŒæŠ¼ã•ã‚ŒãŸã¨ãã«ã¯ã€ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã®è¡¨ç¤ºãŒãƒˆãƒ©ã‚¤ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¢ãƒ¼ãƒ‰ã«ãªã‚Šã¾ã™ã€‚ã„ãšã‚Œã‹ã®ãƒœã‚¿ãƒ³ã‚’é¸æŠžã™ã‚Œã°ã€ãƒœã‚¿ãƒ³ã®çŠ¶æ…‹ã¯å…ƒã®ã‚ˆã†ã«å€‹ã€…ã®ãƒœã‚¿ãƒ³ã®on/off状態を示ã™ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ç¾åœ¨ã®å¤‰æ•°ã®å€¤ã‚’見るã«ã¯ã€Œå¤‰æ•°å‚ç…§ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。' -} -msg.grid(:row=>0, :column=>0, :columnspan=>3, :sticky=>'nsew') - -# variable -size = TkVariable.new -color = TkVariable.new -align = TkVariable.new - -# frame -TkFrame.new(base_frame) {|frame| - TkGrid(TkFrame.new(frame, :height=>2, :relief=>:sunken, :bd=>2), - :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - TkButton.new(frame, :text=>'変数å‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{ - showVars(base_frame, ['size', size], - ['color', color], ['compound', align]) - }), - TkButton.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'radio3'}), - TkButton.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - tmppath = $radio3_demo - $radio3_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - }), - :padx=>4, :pady=>4) - frame.grid_columnconfigure(0, :weight=>1) - TkGrid(frame, :row=>3, :column=>0, :columnspan=>3, :sticky=>'nsew') -} - -# frame -f_left = TkLabelFrame.new(base_frame, 'text'=>'文字サイズ', - 'pady'=>2, 'padx'=>2) -f_mid = TkLabelFrame.new(base_frame, 'text'=>'色', - 'pady'=>2, 'padx'=>2) -f_right = TkLabelFrame.new(base_frame, 'text'=>'ビットマップé…ç½®', - 'pady'=>2, 'padx'=>2) -f_left .grid('column'=>0, 'row'=>1, 'pady'=>'.5c', 'padx'=>'.5c', 'rowspan'=>2) -f_mid .grid('column'=>1, 'row'=>1, 'pady'=>'.5c', 'padx'=>'.5c', 'rowspan'=>2) -f_right.grid('column'=>2, 'row'=>1, 'pady'=>'.5c', 'padx'=>'.5c') - -TkButton.new(base_frame, 'text'=>'トライステート', - 'command'=>proc{size.value = 'multi'; color.value = 'multi'}){ - grid('column'=>2, 'row'=>2, 'pady'=>'.5c', 'padx'=>'.5c') -} - -# radiobutton -[10, 12, 14, 18, 24].each {|sz| - TkRadioButton.new(f_left) { - text "ãƒã‚¤ãƒ³ãƒˆã‚µã‚¤ã‚º #{sz}" - variable size - relief 'flat' - value sz - tristatevalue 'multi' - }.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w', 'fill'=>'x') -} - -['Red', 'Green', 'Blue', 'Yellow', 'Orange', 'Purple'].each {|col| - TkRadioButton.new(f_mid) { - text col - variable color - relief 'flat' - value col.downcase - anchor 'w' - tristatevalue 'multi' - command proc{f_mid.fg(color.value)} - }.pack('side'=>'top', 'pady'=>2, 'fill'=>'x') -} - -# label = TkLabel.new(f_right, 'text'=>'ラベル', 'bitmap'=>'questhead', -label = Tk::Label.new(f_right, 'text'=>'ラベル', 'bitmap'=>'questhead', - 'compound'=>'left') -label.configure('width'=>TkWinfo.reqwidth(label), 'compound'=>'top') -label.height(TkWinfo.reqheight(label)) -a_btn = ['Top', 'Left', 'Right', 'Bottom'].collect{|a| - TkRadioButton.new(f_right, 'text'=>a, 'variable'=>align, 'relief'=>'flat', - 'value'=>a.downcase, 'indicatoron'=>0, 'width'=>7, - 'command'=>proc{label.compound(align.value)}) -} - -Tk.grid('x', a_btn[0]) -Tk.grid(a_btn[1], label, a_btn[2]) -Tk.grid('x', a_btn[3]) diff --git a/ext/tk/sample/demos-jp/rmt b/ext/tk/sample/demos-jp/rmt deleted file mode 100644 index dcfb328fc8..0000000000 --- a/ext/tk/sample/demos-jp/rmt +++ /dev/null @@ -1,268 +0,0 @@ -#!/usr/bin/env ruby - -# rmt -- -# This script implements a simple remote-control mechanism for -# Tk applications. It allows you to select an application and -# then type commands to that application. - -require 'tk' - -class Rmt - def initialize(parent=nil) - win = self - - unless parent - parent = TkRoot.new - end - root = TkWinfo.toplevel(parent) - root.minsize(1,1) - - # The instance variable below keeps track of the remote application - # that we're sending to. If it's an empty string then we execute - # the commands locally. - @app = 'local' - @mode = 'Ruby' - - # The instance variable below keeps track of whether we're in the - # middle of executing a command entered via the text. - @executing = 0 - - # The instance variable below keeps track of the last command executed, - # so it can be re-executed in response to !! commands. - @lastCommand = "" - - # Create menu bar. Arrange to recreate all the information in the - # applications sub-menu whenever it is cascaded to. - - TkFrame.new(root, 'relief'=>'raised', 'bd'=>2) {|f| - pack('side'=>'top', 'fill'=>'x') - TkMenubutton.new(f, 'text'=>'File', 'underline'=>0) {|mb| - TkMenu.new(mb) {|mf| - mb.menu(mf) - TkMenu.new(mf) {|ma| - postcommand proc{win.fillAppsMenu ma} - mf.add('cascade', 'label'=>'Select Application', - 'menu'=>ma, 'underline'=>0) - } - add('command', 'label'=>'Quit', - 'command'=>proc{root.destroy}, 'underline'=>0) - } - pack('side'=>'left') - } - } - - # Create text window and scrollbar. - - @txt = TkText.new(root, 'relief'=>'sunken', 'bd'=>2, 'setgrid'=>true) { - yscrollbar(TkScrollbar.new(root){pack('side'=>'right', 'fill'=>'y')}) - pack('side'=>'left') - } - - @promptEnd = TkTextMark.new(@txt, 'insert') - - # Create a binding to forward commands to the target application, - # plus modify many of the built-in bindings so that only information - # in the current command can be deleted (can still set the cursor - # earlier in the text and select and insert; just can't delete). - - @txt.bindtags([@txt, TkText, root, 'all']) - @txt.bind('Return', proc{ - @txt.set_insert('end - 1c') - @txt.insert('insert', "\n") - win.invoke - Tk.callback_break - }) - @txt.bind('Delete', proc{ - begin - @txt.tag_remove('sel', 'sel.first', @promptEnd) - rescue - end - if @txt.tag_nextrange('sel', '1.0', 'end') == [] - if @txt.compare('insert', '<', @promptEnd) - Tk.callback_break - end - end - }) - @txt.bind('BackSpace', proc{ - begin - @txt.tag_remove('sel', 'sel.first', @promptEnd) - rescue - end - if @txt.tag_nextrange('sel', '1.0', 'end') == [] - if @txt.compare('insert', '<', @promptEnd) - Tk.callback_break - end - end - }) - @txt.bind('Control-d', proc{ - if @txt.compare('insert', '<', @promptEnd) - Tk.callback_break - end - }) - @txt.bind('Control-k', proc{ - if @txt.compare('insert', '<', @promptEnd) - @txt.set_insert(@promptEnd) - end - }) - @txt.bind('Control-t', proc{ - if @txt.compare('insert', '<', @promptEnd) - Tk.callback_break - end - }) - @txt.bind('Meta-d', proc{ - if @txt.compare('insert', '<', @promptEnd) - Tk.callback_break - end - }) - @txt.bind('Meta-BackSpace', proc{ - if @txt.compare('insert', '<=', @promptEnd) - Tk.callback_break - end - }) - @txt.bind('Control-h', proc{ - if @txt.compare('insert', '<=', @promptEnd) - Tk.callback_break - end - }) - - @txt.tag_configure('bold', 'font'=>['Courier', 12, 'bold']) - - @app = Tk.appname('rmt') - if (@app =~ /^rmt(.*)$/) - root.title("Tk Remote Controller#{$1}") - root.iconname("Tk Remote#{$1}") - end - prompt - @txt.focus - #@app = TkWinfo.appname(TkRoot.new) - end - - def tkTextInsert(w,s) - return if s == "" - begin - if w.compare('sel.first','<=','insert') \ - && w.compare('sel.last','>=','insert') - w.tag_remove('sel', 'sel.first', @promptEnd) - w.delete('sel.first', 'sel.last') - end - rescue - end - w.insert('insert', s) - w.see('insert') - end - - # The method below is used to print out a prompt at the - # insertion point (which should be at the beginning of a line - # right now). - - def prompt - @txt.insert('insert', "#{@app}: ") - @promptEnd.set('insert') - @promptEnd.gravity = 'left' - @txt.tag_add('bold', "#{@promptEnd.path} linestart", @promptEnd) - end - - # The method below executes a command (it takes everything on the - # current line after the prompt and either sends it to the remote - # application or executes it locally, depending on "app". - - def invoke - cmd = @txt.get(@promptEnd, 'insert') - @executing += 1 - case (@mode) - when 'Tcl' - if Tk.info('complete', cmd) - if (cmd == "!!\n") - cmd = @lastCommand - else - @lastCommand = cmd - end - begin - msg = Tk.appsend(@app, false, cmd) - rescue - msg = "Error: #{$!}" - end - @txt.insert('insert', msg + "\n") if msg != "" - prompt - @promptEnd.set('insert') - end - - when 'Ruby' - if (cmd == "!!\n") - cmd = @lastCommand - end - complete = true - begin - eval("proc{#{cmd}}") - rescue - complete = false - end - if complete - @lastCommand = cmd - begin -# msg = Tk.appsend(@app, false, -# 'ruby', -# '"(' + cmd.gsub(/[][$"]/, '\\\\\&') + ').to_s"') - msg = Tk.rb_appsend(@app, false, cmd) - rescue - msg = "Error: #{$!}" - end - @txt.insert('insert', msg + "\n") if msg != "" - prompt - @promptEnd.set('insert') - end - end - - @executing -= 1 - @txt.yview_pickplace('insert') - end - - # The following method is invoked to change the application that - # we're talking to. It also updates the prompt for the current - # command, unless we're in the middle of executing a command from - # the text item (in which case a new prompt is about to be output - # so there's no need to change the old one). - - def newApp(appName, mode) - @app = appName - @mode = mode - if @executing == 0 - @promptEnd.gravity = 'right' - @txt.delete("#{@promptEnd.path} linestart", @promptEnd) - @txt.insert(@promptEnd, "#{appName}: ") - @txt.tag_add('bold', "#{@promptEnd.path} linestart", @promptEnd) - @promptEnd.gravity = 'left' - end - end - - # The method below will fill in the applications sub-menu with a list - # of all the applications that currently exist. - - def fillAppsMenu(menu) - win = self - begin - menu.delete(0,'last') - rescue - end - TkWinfo.interps.sort.each{|ip| - begin - if Tk.appsend(ip, false, 'info commands ruby') == "" - mode = 'Tcl' - else - mode = 'Ruby' - end - menu.add('command', 'label'=>format("%s (#{mode}/Tk)", ip), - 'command'=>proc{win.newApp ip, mode}) - rescue - menu.add('command', 'label'=>format("%s (unknown Tk)", ip), - 'command'=>proc{win.newApp ip, mode}, 'state'=>'disabled') - end - } - menu.add('command', 'label'=>format("local (Ruby/Tk)"), - 'command'=>proc{win.newApp 'local', 'Ruby'}) - end -end - -Rmt.new - -Tk.mainloop diff --git a/ext/tk/sample/demos-jp/rolodex b/ext/tk/sample/demos-jp/rolodex deleted file mode 100644 index 95c0e3b869..0000000000 --- a/ext/tk/sample/demos-jp/rolodex +++ /dev/null @@ -1,320 +0,0 @@ -#!/usr/bin/env ruby -# -# rolodex -- -# This script is a part of Tom LaStrange's rolodex -# -# Copyright (C) 1998 by Takaaki Tateishi -# Time-stamp: "03/08/02 12:45:21 nagai" -# - -require "tk" - - -def show_help(topic,x=0,y=0) - if( topic.is_a?(TkWindow) ) - w = TkWinfo.containing(x,y) - if( TkWinfo.exist?(w) ) - topic = w - end - end - - if( $helpTopics.include?(topic) ) - msg = $helpTopics[topic] - else - msg = "Sorry, but no help is available for this topic" - end - TkDialog.new("title"=>"Rolodex Help", - "message"=>"Information on #{topic}:\n\n#{msg}", - "default_button"=>0, - "buttons"=>["OK"]) -end - -def fillCard - clearAction - $root.frame.entry[1].insert(0,"Takaaki Tateishi") - $root.frame.entry[2].insert(0,"Japan Advanced Institute of Science and Techonology") - $root.frame.entry[3].insert(0,"1-1 Asahidai, Tatsunokuchi") - $root.frame.entry[4].insert(0,"Ishikawa 923-1292, Japan") - $root.frame.entry[5].insert(0,"private") - $root.frame.entry[6].insert(0,"***-***-****") - $root.frame.entry[7].insert(0,"***-***-****") -end - -def addAction - for i in 1..7 - STDERR.print format("%-12s %s\n", - RolodexFrame::LABEL[i], - $root.frame.entry[i].value) - end -end - -def clearAction - for i in 1..7 - $root.frame.entry[i].delete(0,"end") - end -end - -def fileAction - TkDialog.new("title"=>"File Selection", - "message"=>"This is a dummy file selection dialog box.\n", - "default_button"=>0, - "buttons"=>["OK"]) - STDERR.print "dummy file name\n" -end - -def deleteAction - result = TkDialog.new("title"=>"Confirm Action", - "message"=>"Are you sure?", - "default_button"=>0, - "buttons"=>["Cancel"]) - if( result.value == 0 ) - clearAction - end -end - - -class RolodexFrame < TkFrame - attr_reader :entry, :label - - LABEL = ["","Name:","Address:","","","Home Phone:","Work Phone:","Fax:"] - - def initialize(parent=nil,keys=nil) - super(parent,keys) - self["relief"] = "flat" - - @i = [] - @label = [] - @entry = [] - for i in 1..7 - @i[i] = TkFrame.new(self) - @i[i].pack("side"=>"top", - "pady"=>2, - "anchor"=>"e") - @label[i] = TkLabel.new(@i[i], - "text"=>LABEL[i], - "anchor"=>"e") - @entry[i] = TkEntry.new(@i[i], - "width"=>30, - "relief"=>"sunken") - @entry[i].pack("side"=>"right") - @label[i].pack("side"=>"right") - end - end -end - -class RolodexButtons < TkFrame - attr_reader :clear, :add, :search, :delete - - def initialize(parent,keys=nil) - super(parent,keys) - @clear = TkButton.new(self, - "text" => "Clear") - @add = TkButton.new(self, - "text" => "Add") - @search = TkButton.new(self, - "text" => "Search") - @delete = TkButton.new(self, - "text" => "Delete") - for w in [@clear,@add,@search,@delete] - w.pack("side"=>"left", "padx"=>2) - end - end -end - -class RolodexMenuFrame < TkFrame - attr_reader :file_menu, :help_menu, :file, :help - - def initialize(parent,keys=nil) - super(parent,keys) - configure("relief"=>"raised", - "borderwidth"=>1) - - @file = TkMenubutton.new(self, - "text"=>"File", - "underline"=>0) - @file_menu = TkMenu.new(@file) - @file_menu.add("command", - "label" => "Load ...", - "command" => proc{fileAction}, - "underline" => 0) - @file_menu.add("command", - "label" => "Exit", - "command" => proc{$root.destroy}, - "underline" => 0) - @file.menu(@file_menu) - @file.pack("side"=>"left") - - @help = TkMenubutton.new(self, - "text"=>"Help", - "underline"=>0) - @help_menu = TkMenu.new(@help) - @help_menu.add("command", - "label"=>"On Context...", - "command"=>proc{show_help("context")}, - "underline"=>3) - @help_menu.add("command", - "label"=>"On Help...", - "command"=>proc{show_help("help")}, - "underline"=>3) - @help_menu.add("command", - "label"=>"On Window...", - "command"=>proc{show_help("window")}, - "underline"=>3) - @help_menu.add("command", - "label"=>"On Keys...", - "command"=>proc{show_help("keys")}, - "underline"=>3) - @help_menu.add("command", - "label"=>"On version...", - "command"=>proc{show_help("version")}, - "underline"=>3) - @help.menu(@help_menu) - @help.pack("side"=>"right") - end -end - -class Rolodex < TkRoot - attr_reader :frame, :buttons, :menu - - def initialize(*args) - super(*args) - @frame = RolodexFrame.new(self) - @frame.pack("side"=>"top", - "fill"=>"y", - "anchor"=>"center") - @buttons = RolodexButtons.new(self) - @buttons.pack("side"=>"bottom", - "pady"=>2, - "anchor"=>"center") - @menu = RolodexMenuFrame.new(self) - @menu.pack("before"=>@frame, - "side"=>"top", - "fill"=>"x") - end -end - -$root = Rolodex.new - -$root.buttons.delete.configure("command"=>proc{deleteAction}) -$root.buttons.add.configure("command"=>proc{addAction}) -$root.buttons.clear.configure("command"=>proc{clearAction}) -$root.buttons.search.configure("command"=>proc{addAction; fillCard}) - -$root.buttons.clear.configure("text"=>"Clear Ctrl+C") -$root.bind("Control-c",proc{clearAction}) - -$root.buttons.add.configure("text"=>"Add Ctrl+A") -$root.bind("Control-a",proc{addAction}) - -$root.buttons.search.configure("text"=>"Search Ctrl+S") -$root.bind("Control-s",proc{addAction; fillCard}) - -$root.buttons.delete.configure("text"=>"Delete... Ctrl+D") -$root.bind("Control-d",proc{deleteAction}) - -$root.menu.file_menu.entryconfigure(1, "accel"=>"Ctrl+F") -$root.bind("Control-f",proc{fileAction}) - -$root.menu.file_menu.entryconfigure(2, "accel"=>"Ctrl+Q") -$root.bind("Control-q",proc{$root.destroy}) - -$root.frame.entry[1].focus - -$root.bind("Any-F1", - proc{|event| show_help(event.widget, event.x_root, event.y_root)}) -$root.bind("Any-Help", - proc{|event| show_help(event.widget, event.x_root, event.y_root)}) - - -$helpTopics = {} - -$helpTopics[$root.menu.file] = < -# Time-stamp: "04/04/09 00:32:12 nagai" -# - -require "tk" -Tk.encoding = "utf-8" - -def show_help(topic,x=0,y=0) - if( topic.is_a?(TkWindow) ) - w = TkWinfo.containing(x,y) - if( w.is_a?(TkWindow) ) - if( TkWinfo.exist?(w) ) - topic = w - end - end - end - - if( $helpTopics.include?(topic) ) - msg = $helpTopics[topic] - else - msg = "ã“ã®ãƒˆãƒ”ックã«ã¤ã„ã¦ã®ãƒ˜ãƒ«ãƒ—ã¯ã¾ã ä½¿ç”¨ã§ãã¾ã›ã‚“" - end - TkDialog.new("title"=>"Rolodex Help", - "message"=>"「#{topic}ã€\n\n#{msg}", - "default_button"=>0, - "buttons"=>["OK"]) -end - -def fillCard - clearAction - $root.frame.entry[1].insert(0, "立石 å­å½°") - $root.frame.entry[2].insert(0, "923-1292 石å·çœŒ") - $root.frame.entry[3].insert(0, "è¾°å£ç”º æ—­å° 1-1") - $root.frame.entry[4].insert(0, "北陸先端科学技術大学院大学") - $root.frame.entry[5].insert(0,"private") - $root.frame.entry[6].insert(0,"***-***-****") - $root.frame.entry[7].insert(0,"***-***-****") -end - -def addAction - for i in 1..7 - STDERR.print format("%-12s %s\n", - RolodexFrame::LABEL[i], - $root.frame.entry[i].value) - end -end - -def clearAction - for i in 1..7 - $root.frame.entry[i].delete(0,"end") - end -end - -def fileAction - TkDialog.new("title"=>"File Selection", - "message"=>"ã“ã‚Œã¯ãƒ•ã‚¡ã‚¤ãƒ«é¸æŠžãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã®ãƒ€ãƒŸãƒ¼ã§ã™ã€‚\n", - "default_button"=>0, - "buttons"=>["OK"]) - STDERR.print "dummy file name\n" -end - -def deleteAction - result = TkDialog.new("title"=>"Confirm Action", - "message"=>"よã‚ã—ã„ã§ã™ã‹ï¼Ÿ", - "default_button"=>0, - "buttons"=>["キャンセル"]) - if( result.value == 0 ) - clearAction - end -end - - -class RolodexFrame < TkFrame - attr_reader :entry, :label - - LABEL = ["","åå‰:","ä½æ‰€","","","電話(自宅):","電話(会社):","Fax:"] - - def initialize(parent=nil,keys=nil) - super(parent,keys) - self["relief"] = "flat" - @i = [] - @label = [] - @entry = [] - for i in 1..7 - @i[i] = TkFrame.new(self) - @i[i].pack("side"=>"top", - "pady"=>2, - "anchor"=>"e") - @label[i] = TkLabel.new(@i[i], - "text"=>LABEL[i], - "anchor"=>"e") - @entry[i] = TkEntry.new(@i[i], - "width"=>30, - "relief"=>"sunken") - @entry[i].pack("side"=>"right") - @label[i].pack("side"=>"right") - end - end -end - -class RolodexButtons < TkFrame - attr_reader :clear, :add, :search, :delete - - def initialize(parent,keys=nil) - super(parent,keys) - @clear = TkButton.new(self,"text" => "クリアー") - @add = TkButton.new(self, "text" => "追加") - @search = TkButton.new(self, "text" => "検索") - @delete = TkButton.new(self, "text" => "消去") - for w in [@clear,@add,@search,@delete] - w.pack("side"=>"left", "padx"=>2) - end - end -end - -class RolodexMenuFrame < TkFrame - attr_reader :file_menu, :help_menu, :file, :help - - def initialize(parent,keys=nil) - super(parent,keys) - configure("relief"=>"raised", - "borderwidth"=>1) - - @file = TkMenubutton.new(self, - "text"=> "ファイル", - "underline"=>0) - @file_menu = TkMenu.new(@file) - @file_menu.add("command", - "label" => "読ã¿è¾¼ã¿ ...", - "command" => proc{fileAction}, - "underline" => 0) - @file_menu.add("command", - "label" => "終了", - "command" => proc{$root.destroy}, - "underline" => 0) - @file.menu(@file_menu) - @file.pack("side"=>"left") - - @help = TkMenubutton.new(self, - "text"=> "ヘルプ", - "underline"=>0) - @help_menu = TkMenu.new(@help) - @help_menu.add("command", - "label"=> "コンテキストã«ã¤ã„ã¦", - "command"=>proc{show_help("コンテキスト")}, - "underline"=>3) - @help_menu.add("command", - "label"=> "ヘルプã«ã¤ã„ã¦", - "command"=>proc{show_help("ヘルプ")}, - "underline"=>3) - @help_menu.add("command", - "label"=> "ウィンドウã«ã¤ã„ã¦", - "command"=>proc{show_help("ウィンドウ")}, - "underline"=>3) - @help_menu.add("command", - "label"=> "キーæ“作ã«ã¤ã„ã¦", - "command"=>proc{show_help("キーæ“作")}, - "underline"=>3) - @help_menu.add("command", - "label"=> "ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±", - "command"=>proc{show_help("ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±")}, - "underline"=>3) - @help.menu(@help_menu) - @help.pack("side"=>"right") - end -end - -class Rolodex < TkRoot - attr_reader :frame, :buttons, :menu - - def initialize(*args) - super(*args) - @frame = RolodexFrame.new(self) - @frame.pack("side"=>"top", - "fill"=>"y", - "anchor"=>"center") - @buttons = RolodexButtons.new(self) - @buttons.pack("side"=>"bottom", - "pady"=>2, - "anchor"=>"center") - @menu = RolodexMenuFrame.new(self) - @menu.pack("before"=>@frame, - "side"=>"top", - "fill"=>"x") - end -end - -$root = Rolodex.new - -$root.buttons.delete.configure("command"=>proc{deleteAction}) -$root.buttons.add.configure("command"=>proc{addAction}) -$root.buttons.clear.configure("command"=>proc{clearAction}) -$root.buttons.search.configure("command"=>proc{addAction; fillCard}) - -$root.buttons.clear.configure("text"=> "クリアー Ctrl+C") -$root.bind("Control-c",proc{clearAction}) - -$root.buttons.add.configure("text"=> "追加 Ctrl+A") -$root.bind("Control-a",proc{addAction}) - -$root.buttons.search.configure("text"=> "検索 Ctrl+S") -$root.bind("Control-s",proc{addAction; fillCard}) - -$root.buttons.delete.configure("text"=> "消去 Ctrl+D") -$root.bind("Control-d",proc{deleteAction}) - -$root.menu.file_menu.entryconfigure(1, "accel"=>"Ctrl+F") -$root.bind("Control-f",proc{fileAction}) - -$root.menu.file_menu.entryconfigure(2, "accel"=>"Ctrl+Q") -$root.bind("Control-q",proc{$root.destroy}) - -$root.frame.entry[1].focus - -$root.bind("Any-F1", - proc{|event| show_help(event.widget, event.x_root, event.y_root)}) -$root.bind("Any-Help", - proc{|event| show_help(event.widget, event.x_root, event.y_root)}) - - -$helpTopics = {} - -$helpTopics[$root.menu.file] = <:both, :expand=>true) - -# label ç”Ÿæˆ -TkLabel.new(base_frame, 'font'=>$font, 'wraplength'=>'5i', 'justify'=>'left', - 'text'=>"ã“ã®ã‚­ãƒ£ãƒ³ãƒã‚¹widgetã¯ãƒ«ãƒ¼ãƒ©ãƒ¼ã®æ¨¡åž‹ã§ã™ã€‚ルーラーã®å³ã«ã‚ã‚‹ã®ã¯ã‚¿ãƒ–ストップã®äº•æˆ¸ã§ã€ã“ã“ã‹ã‚‰å¼•ã£å¼µã£ã¦ãã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã‚¿ãƒ–ストップを作るã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ã™ã§ã«ã‚るタブストップを動ã‹ã™ã“ã¨ã‚‚ã§ãã¾ã™ã€‚タブストップを上方ã¾ãŸã¯ä¸‹æ–¹ã«ã‹ã™ã‚Œã¦è¡¨ç¤ºã•ã‚Œã‚‹ã¾ã§ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã¨ã€ãƒžã‚¦ã‚¹ãƒœã‚¿ãƒ³ã‚’離ã—ãŸæ™‚ã«ãã®ã‚¿ãƒ–ストップã¯æ¶ˆãˆã¾ã™ã€‚"){ - pack('side'=>'top') -} - -# frame ç”Ÿæˆ -$ruler_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $ruler_demo - $ruler_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'ruler'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$ruler_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# canvas 設定 -$ruler_canvas = TkCanvas.new(base_frame, 'width'=>'14.8c', 'height'=>'2.5c') -$ruler_canvas.pack('side'=>'top', 'fill'=>'x') - -# 値設定 -unless Struct.const_defined?("RulerInfo") - $demo_rulerInfo = Struct.new("RulerInfo", :grid, :left, :right, :x, :y, - :top, :bottom, :size, :normalStyle, - :activeStyle, :deleteStyle).new -end -$demo_rulerInfo.grid = '.25c' -$demo_rulerInfo.left = TkWinfo.fpixels($ruler_canvas, '1c') -$demo_rulerInfo.right = TkWinfo.fpixels($ruler_canvas, '13c') -$demo_rulerInfo.top = TkWinfo.fpixels($ruler_canvas, '1c') -$demo_rulerInfo.bottom = TkWinfo.fpixels($ruler_canvas, '1.5c') -$demo_rulerInfo.size = TkWinfo.fpixels($ruler_canvas, '.2c') -$demo_rulerInfo.normalStyle = {'fill'=>'black'} -if TkWinfo.depth($ruler_canvas) > 1 - $demo_rulerInfo.activeStyle = {'fill'=>'red', 'stipple'=>''} - $demo_rulerInfo.deleteStyle = {'fill'=>'red', - 'stipple'=>'@'+[$demo_dir, '..', - 'images', 'gray25.xbm'].join(File::Separator)} -else - $demo_rulerInfo.activeStyle = {'fill'=>'black', 'stipple'=>''} - $demo_rulerInfo.deleteStyle = {'fill'=>'black', - 'stipple'=>'@'+[$demo_dir, '..', - 'images', 'gray25.xbm'].join(File::Separator)} -end - -TkcLine.new($ruler_canvas, - '1c', '0.5c', '1c', '1c', '13c', '1c', '13c', '0.5c', 'width'=>1) -(0..11).each{|i| - x = i+1 - TkcLine.new($ruler_canvas, "#{x}c", '1c', "#{x}c", '0.6c', 'width'=>1) - TkcLine.new($ruler_canvas, "#{x}.25c", '1c', "#{x}.25c", '0.8c', 'width'=>1) - TkcLine.new($ruler_canvas, "#{x}.5c", '1c', "#{x}.5c", '0.7c', 'width'=>1) - TkcLine.new($ruler_canvas, "#{x}.75c", '1c', "#{x}.75c", '0.8c', 'width'=>1) - TkcText.new($ruler_canvas, "#{x}.15c", '0.75c', 'text'=>i, 'anchor'=>'sw') -} - -$rulerTag_well = TkcTag.new($ruler_canvas) -$ruler_canvas\ -.addtag_withtag($rulerTag_well, - TkcRectangle.new($ruler_canvas, - '13.2c', '1c', '13.8c', '0.5c', - 'outline'=>'black', - 'fill'=>($ruler_canvas\ - .configinfo('background'))[4]) ) -$ruler_canvas\ -.addtag_withtag($rulerTag_well, - rulerMkTab($ruler_canvas, - TkWinfo.pixels($ruler_canvas, '13.5c'), - TkWinfo.pixels($ruler_canvas, '.65c') ) ) - -$rulerTag_well.bind('1', proc{|x,y| rulerNewTab($ruler_canvas,x,y)}, '%x %y') -$ruler_canvas.itembind('tab', '1', - proc{|x,y| rulerSelectTab($ruler_canvas,x,y)}, '%x %y') -$ruler_canvas.bind('B1-Motion', - proc{|x,y| rulerMoveTab($ruler_canvas,x,y)}, '%x %y') -$ruler_canvas.bind('Any-ButtonRelease-1', proc{rulerReleaseTab($ruler_canvas)}) - -# rulerNewTab -- -# Does all the work of creating a tab stop, including creating the -# triangle object and adding tags to it to give it tab behavior. -# -# Arguments: -# c - The canvas window. -# x, y - The coordinates of the tab stop. - -def rulerNewTab(c,x,y) - v = $demo_rulerInfo - c.addtag_withtag('active', rulerMkTab(c,x,y)) - c.addtag_withtag('tab', 'active') - v.x = x - v.y = y - rulerMoveTab(c,x,y) -end - -# rulerSelectTab -- -# This method is invoked when mouse button 1 is pressed over -# a tab. It remembers information about the tab so that it can -# be dragged interactively. -# -# Arguments: -# c - The canvas widget. -# x, y - The coordinates of the mouse (identifies the point by -# which the tab was picked up for dragging). - -def rulerSelectTab(c,x,y) - v = $demo_rulerInfo - v.x = c.canvasx(x, v.grid) - v.y = v.top+2 - c.addtag_withtag('active', 'current') - c.itemconfigure('active', v.activeStyle) - c.raise('active') -end - -# rulerMoveTab -- -# This method is invoked during mouse motion events to drag a tab. -# It adjusts the position of the tab, and changes its appearance if -# it is about to be dragged out of the ruler. -# -# Arguments: -# c - The canvas widget. -# x, y - The coordinates of the mouse. - -def rulerMoveTab(c,x,y) - v = $demo_rulerInfo - return if c.find_withtag('active') == [] - cx = c.canvasx(x,v.grid) - cy = c.canvasy(y) - cx = v.left if cx < v.left - cx = v.right if cx > v.right - if (cy >= v.top && cy <= v.bottom) - cy = v.top+2 - c.itemconfigure('active', v.activeStyle) - else - cy = cy-v.size-2 - c.itemconfigure('active', v.deleteStyle) - end - c.move('active', cx-v.x, cy-v.y) - v.x = cx - v.y = cy -end - -# rulerReleaseTab -- -# This method is invoked during button release events that end -# a tab drag operation. It deselects the tab and deletes the tab if -# it was dragged out of the ruler. -# -# Arguments: -# c - The canvas widget. -# x, y - The coordinates of the mouse. - -def rulerReleaseTab(c) - v = $demo_rulerInfo - return if c.find_withtag('active') == [] - if v.y != v.top+2 - c.delete('active') - else - c.itemconfigure('active', v.normalStyle) - c.dtag('active') - end -end - diff --git a/ext/tk/sample/demos-jp/sayings.rb b/ext/tk/sample/demos-jp/sayings.rb deleted file mode 100644 index a60b0bf2e5..0000000000 --- a/ext/tk/sample/demos-jp/sayings.rb +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# listbox widget demo 'sayings' (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($sayings_demo) && $sayings_demo - $sayings_demo.destroy - $sayings_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$sayings_demo = TkToplevel.new {|w| - title("Listbox Demonstration (well-known sayings)") - iconname("sayings") - positionWindow(w) -} - -base_frame = TkFrame.new($sayings_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "下ã®ãƒªã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã«ã¯ã„ã‚ã„ã‚ãªæ ¼è¨€ãŒå…¥ã£ã¦ã„ã¾ã™ã€‚リストをスクロールã•ã›ã‚‹ã®ã¯ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ãƒãƒ¼ã§ã‚‚ã§ãã¾ã™ã—ã€ãƒªã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã®ä¸­ã§ãƒžã‚¦ã‚¹ã®ãƒœã‚¿ãƒ³2(中ボタン)を押ã—ãŸã¾ã¾ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã‚‚ã§ãã¾ã™ã€‚" -} -msg.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $sayings_demo - $sayings_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'sayings'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -sayings_lbox = nil -TkFrame.new(base_frame, 'borderwidth'=>10) {|w| - sv = TkScrollbar.new(w) - sh = TkScrollbar.new(w, 'orient'=>'horizontal') - sayings_lbox = TkListbox.new(w) { - setgrid 1 - width 20 - height 10 - yscrollcommand proc{|first,last| sv.set first,last} - xscrollcommand proc{|first,last| sh.set first,last} - } - sv.command(proc{|*args| sayings_lbox.yview(*args)}) - sh.command(proc{|*args| sayings_lbox.xview(*args)}) - - if $tk_version =~ /^4\.[01]/ - sv.pack('side'=>'right', 'fill'=>'y') - sh.pack('side'=>'bottom', 'fill'=>'x') - sayings_lbox.pack('expand'=>'yes', 'fill'=>'y') - - else - sayings_lbox.grid('row'=>0, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - sv.grid('row'=>0, 'column'=>1, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - sh.grid('row'=>1, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - TkGrid.rowconfigure(w, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure(w, 0, 'weight'=>1, 'minsize'=>0) - end - -}.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'y') - -sayings_lbox.insert(0, -"Waste not, want not", -"Early to bed and early to rise makes a man healthy, wealthy, and wise", -"Ask not what your country can do for you, ask what you can do for your country", -"I shall return", -"NOT", -"A picture is worth a thousand words", -"User interfaces are hard to build", -"Thou shalt not steal", -"A penny for your thoughts", -"Fool me once, shame on you; fool me twice, shame on me", -"Every cloud has a silver lining", -"Where there's smoke there's fire", -"It takes one to know one", -"Curiosity killed the cat", -"Take this job and shove it", -"Up a creek without a paddle", -"I'm mad as hell and I'm not going to take it any more", -"An apple a day keeps the doctor away", -"Don't look a gift horse in the mouth" -) - diff --git a/ext/tk/sample/demos-jp/search.rb b/ext/tk/sample/demos-jp/search.rb deleted file mode 100644 index dffccf1a48..0000000000 --- a/ext/tk/sample/demos-jp/search.rb +++ /dev/null @@ -1,185 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# Text Search widget demo (called by 'widget') -# - -# textLoadFile -- -# This method below loads a file into a text widget, discarding -# the previous contents of the widget. Tags for the old widget are -# not affected, however. -# -# Arguments: -# w - The window into which to load the file. Must be a -# text widget. -# file - The name of the file to load. Must be readable. - -def textLoadFile(w,file) - w.delete('1.0', 'end') - f = open(file, 'r') - while(!f.eof?) - w.insert('end', f.read(1000)) - end - f.close -end - -# textSearch -- -# Search for all instances of a given string in a text widget and -# apply a given tag to each instance found. -# -# Arguments: -# w - The window in which to search. Must be a text widget. -# string - The string to search for. The search is done using -# exact matching only; no special characters. -# tag - Tag to apply to each instance of a matching string. - -def textSearch(w, string, tag) - tag.remove('0.0', 'end') - return if string == "" - cur = '1.0' - loop { - cur, len = w.search_with_length(string, cur, 'end') - break if cur == "" - tag.add(cur, "#{cur} + #{len} char") - cur = w.index("#{cur} + #{len} char") - } -end - -# textToggle -- -# This method is invoked repeatedly to invoke two commands at -# periodic intervals. It normally reschedules itself after each -# execution but if an error occurs (e.g. because the window was -# deleted) then it doesn't reschedule itself. -# -# Arguments: -# cmd1 - Command to execute when method is called. -# sleep1 - Ms to sleep after executing cmd1 before executing cmd2. -# cmd2 - Command to execute in the *next* invocation of this method. -# sleep2 - Ms to sleep after executing cmd2 before executing cmd1 again. - -def textToggle(cmd1,sleep1,cmd2,sleep2) - sleep_list = [sleep2, sleep1] - TkAfter.new(proc{sleep = sleep_list.shift; sleep_list.push(sleep); sleep}, - -1, cmd1, cmd2).start(sleep1) -end - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($search_demo) && $search_demo - $search_demo.destroy - $search_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$search_demo = TkToplevel.new {|w| - title("Text Demonstration - Search and Highlight") - iconname("search") - positionWindow(w) -} - -base_frame = TkFrame.new($search_demo).pack(:fill=>:both, :expand=>true) - -# frame ç”Ÿæˆ -$search_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $search_demo - $search_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'search'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$search_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|f| - TkLabel.new(f, 'text'=>'ファイルå:', - 'width'=>13, 'anchor'=>'w').pack('side'=>'left') - $search_fileName = TkVariable.new - TkEntry.new(f, 'width'=>40, - 'textvariable'=>$search_fileName) { - pack('side'=>'left') - bind('Return', proc{textLoadFile($search_text, $search_fileName.value) - $search_string_entry.focus}) - focus - } - TkButton.new(f, 'text'=>'読ã¿è¾¼ã¿', - 'command'=>proc{textLoadFile($search_text, - $search_fileName.value)})\ - .pack('side'=>'left', 'pady'=>5, 'padx'=>10) -}.pack('side'=>'top', 'fill'=>'x') - -TkFrame.new(base_frame) {|f| - TkLabel.new(f, 'text'=>'検索文字列:', - 'width'=>13, 'anchor'=>'w').pack('side'=>'left') - $search_searchString = TkVariable.new - $search_string_entry = TkEntry.new(f, 'width'=>40, - 'textvariable'=>$search_searchString) { - pack('side'=>'left') - bind('Return', proc{textSearch($search_text, $search_searchString.value, - $search_Tag)}) - } - TkButton.new(f, 'text'=>'å転', - 'command'=>proc{textSearch($search_text, - $search_searchString.value, - $search_Tag)}) { - pack('side'=>'left', 'pady'=>5, 'padx'=>10) - } -}.pack('side'=>'top', 'fill'=>'x') - -$search_text = TkText.new(base_frame, 'setgrid'=>true) {|t| - $search_Tag = TkTextTag.new(t) - TkScrollbar.new(base_frame, 'command'=>proc{|*args| t.yview(*args)}) {|sc| - t.yscrollcommand(proc{|first,last| sc.set first,last}) - pack('side'=>'right', 'fill'=>'y') - } - pack('expand'=>'yes', 'fill'=>'both') -} - -# Set up display styles for text highlighting. - -if TkWinfo.depth($search_demo) > 1 - textToggle(proc{ - $search_Tag.configure('background'=>'#ce5555', - 'foreground'=>'white') - }, - 800, - proc{ - $search_Tag.configure('background'=>'', 'foreground'=>'') - }, - 200 ) -else - textToggle(proc{ - $search_Tag.configure('background'=>'black', - 'foreground'=>'white') - }, - 800, - proc{ - $search_Tag.configure('background'=>'', 'foreground'=>'') - }, - 200 ) -end -$search_text.insert('1.0', "\ -ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯æ¤œç´¢æ©Ÿæ§‹ã‚’実ç¾ã™ã‚‹ã®ã«ãƒ†ã‚­ã‚¹ãƒˆ widget ã®ã‚¿ã‚°æ©Ÿèƒ½ãŒã©ã® \ -よã†ã«ä½¿ã‚れるã®ã‹ã‚’デモã™ã‚‹ã‚‚ã®ã§ã™ã€‚ã¾ãšä¸Šã®ã‚¨ãƒ³ãƒˆãƒªã«ãƒ•ã‚¡ã‚¤ãƒ«åã‚’å…¥ \ -ã‚Œã€<リターン> を押ã™ã‹ã€Œãƒ­ãƒ¼ãƒ‰ã€ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ãã ã•ã„。次ã«ãã®ä¸‹ã® \ -エントリã«æ–‡å­—列を入力ã—ã€<リターン> を押ã™ã‹ã€Œå転ã€ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ã \ -ã ã•ã„。ã™ã‚‹ã¨ãƒ•ã‚¡ã‚¤ãƒ«ä¸­ã®ã€æ¤œç´¢æ–‡å­—列ã¨ä¸€è‡´ã™ã‚‹éƒ¨åˆ†ã«å…¨ã¦ \"search_Tag\" \ -ã¨ã„ã†ã‚¿ã‚°ãŒã¤ã‘られã€ã‚¿ã‚°ã®è¡¨ç¤ºå±žæ€§ã¨ã—ã¦ãã®æ–‡å­—列ãŒç‚¹æ»…ã™ã‚‹ã‚ˆã†ã« \ -設定ã•ã‚Œã¾ã™ã€‚\n") -$search_text.insert('end', "\ -ファイル読ã¿è¾¼ã¿ã®ã‚«ãƒ¬ãƒ³ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¯ \"#{Dir.pwd}\" ã§ã™ã€‚\ -") -$search_text.set_insert '0.0' - -$search_fileName.value = '' -$search_searchString.value = '' - -$search_text.width = 60 -$search_text.height = 20 diff --git a/ext/tk/sample/demos-jp/spin.rb b/ext/tk/sample/demos-jp/spin.rb deleted file mode 100644 index 616a14e9d6..0000000000 --- a/ext/tk/sample/demos-jp/spin.rb +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# spin.rb -- -# -# This demonstration script creates several spinbox widgets. -# -# based on Tcl/Tk8.4.4 widget demos - -if defined?($spin_demo) && $spin_demo - $spin_demo.destroy - $spin_demo = nil -end - -$spin_demo = TkToplevel.new {|w| - title("Spinbox Demonstration") - iconname("spin") - positionWindow(w) -} - -base_frame = TkFrame.new($spin_demo).pack(:fill=>:both, :expand=>true) - -TkLabel.new(base_frame, - :font=>$font, :wraplength=>'5i', :justify=>:left, - :text=><:top) -下ã«ã¯ï¼“種類ã®ã‚¹ãƒ”ンボックスãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚ -ãã‚Œãžã‚Œã€ãƒžã‚¦ã‚¹ã§é¸æŠžã—ã¦æ–‡å­—を入力ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -編集æ“作ã¨ã—ã¦ã¯ã€Emacs å½¢å¼ã®å¤šãã«åŠ ãˆã¦ã€ä¸€èˆ¬çš„㪠-Motif å½¢å¼ã®ã‚­ãƒ¼æ“作ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚ãŸã¨ãˆã°ã€ -Backspace 㨠Control-h ã¨ã¯å…¥åŠ›ã‚«ãƒ¼ã‚½ãƒ«ã®å·¦å´ã®æ–‡å­—ã‚’ -削除ã—ã€Delete 㨠Control-d ã¨ã¯å³å´ã®æ–‡å­—を削除ã—ã¾ã™ã€‚ -入力枠ã®é•·ã•ã‚’越ãˆã‚‹ã‚ˆã†ãªé•·ã„文字列を入力ã—ãŸå ´åˆã«ã¯ã€ -マウスã®ãƒœã‚¿ãƒ³ï¼’を押ã—ã¦ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã§ã€å…¥åŠ›æ–‡å­—列 -をスキャンã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ -ãªãŠã€æœ€åˆã®ã‚¹ãƒ”ンボックスã¯ã€æ•´æ•°å€¤ã¨ã¿ãªã•ã‚Œã‚‹ã‚ˆã†ãª -文字列ã—ã‹å…¥åŠ›ãŒè¨±ã•ã‚Œãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã¾ãŸã€ -3番目ã®ã‚¹ãƒ”ンボックスã§é¸æŠžå€™è£œã«ç¾ã‚Œã‚‹ã®ã¯ã‚ªãƒ¼ã‚¹ãƒˆãƒ© -リアã®éƒ½å¸‚åã®ãƒªã‚¹ãƒˆã¨ãªã£ã¦ã„ã¾ã™ã€‚ -ã‚‚ã—ã‚ãªãŸãŒä½¿ã£ã¦ã„ã‚‹ Ruby ã«ãƒªãƒ³ã‚¯ã•ã‚Œã¦ã„ã‚‹ Tk ライ -ブラリ㌠spinbox ウィジェットを実装ã—ã¦ã„ãªã„å ´åˆã€ã“ã® -デモã¯ã†ã¾ãå‹•ã‹ãªã„ã¯ãšã§ã™ã€‚ãã®å ´åˆã«ã¯ spinbox ウィ -ジェットãŒå®Ÿè£…ã•ã‚Œã¦ã„るよã†ãªã‚ˆã‚Šæ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Tk -を組ã¿åˆã‚ã›ã¦è©¦ã™ã‚ˆã†ã«ã—ã¦ãã ã•ã„。 -EOL - -TkFrame.new(base_frame){|f| - pack(:side=>:bottom, :fill=>:x, :pady=>'2m') - - TkButton.new(f, :text=>'é–‰ã˜ã‚‹', :width=>15, :command=>proc{ - $spin_demo.destroy - $spin_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'コードå‚ç…§', :width=>15, :command=>proc{ - showCode 'spin' - }).pack(:side=>:left, :expand=>true) -} - -australianCities = [ - 'Canberra', 'Sydney', 'Melbourne', 'Perth', 'Adelaide', - 'Brisbane', 'Hobart', 'Darwin', 'Alice Springs' -] - -[ - TkSpinbox.new(base_frame, :from=>1, :to=>10, :width=>10, :validate=>:key, - :validatecommand=>[ - proc{|s| s == '' || /^[+-]?\d+$/ =~ s }, '%P' - ]), - TkSpinbox.new(base_frame, :from=>0, :to=>3, :increment=>0.5, - :format=>'%05.2f', :width=>10), - TkSpinbox.new(base_frame, :values=>australianCities, :width=>10) -].each{|sbox| sbox.pack(:side=>:top, :pady=>5, :padx=>10)} diff --git a/ext/tk/sample/demos-jp/square b/ext/tk/sample/demos-jp/square deleted file mode 100644 index bb66282154..0000000000 --- a/ext/tk/sample/demos-jp/square +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env ruby - -# square -- -# This script generates a demo application containing only -# a "square" widget. It's only usable if Tk has been compiled -# with tkSquare.c and with the -DSQUARE_DEMO compiler switch. -# This demo arranges the following bindings for the widget: -# -# Button-1 press/drag: moves square to mouse -# "a": toggle size animation on/off -# - -require 'tk' -require 'tkafter' - -class TkSquare'yes', 'fill'=>'both') - bind('1', proc{|x,y| center(x,y)}, '%s %y') - bind('B1-Motion', proc{|x,y| center(x,y)}, '%s %y') - bind('a', proc{animate}) - focus -} -TkRoot.new.minsize(1,1) - -# The procedure below centers the square on a given position. - -def center(x,y) - a = $s.size - $s.position(x-(a/2), y-(a/2)) -end - -# The procedures below provide a simple form of animation where -# the box changes size in a pulsing pattern: larger, smaller, larger, -# and so on. - -$inc = 0 - -def timer_proc - a = $s.size - return if $inc == 0 - $inc = -3 if a >= 40 - $inc = 3 if a <= 10 - $s.size(a+$inc) -end - -$timer = TkAfter.new(30, -1, proc{timer_proc}) - -def animate - if $inc == 0 - $inc = 3 - $timer.start - else - $inc = 0 - $timer.stop - end -end - -Tk.mainloop diff --git a/ext/tk/sample/demos-jp/states.rb b/ext/tk/sample/demos-jp/states.rb deleted file mode 100644 index 9f8fb0ef03..0000000000 --- a/ext/tk/sample/demos-jp/states.rb +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# listbox widget demo 'states' (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($states_demo) && $states_demo - $states_demo.destroy - $states_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$states_demo = TkToplevel.new {|w| - title("Listbox Demonstration (states)") - iconname("states") - positionWindow(w) -} - -base_frame = TkFrame.new($states_demo).pack(:fill=>:both, :expand=>true) - -# label ç”Ÿæˆ -msg = TkLabel.new(base_frame) { - font $font - wraplength '4i' - justify 'left' - text "下ã«ã‚ã‚‹ã®ã¯éƒ½é“府県åãŒå…¥ã£ãŸã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ãƒãƒ¼ä»˜ã®ãƒªã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã§ã™ã€‚リストをスクロールã•ã›ã‚‹ã®ã¯ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ãƒãƒ¼ã§ã‚‚ã§ãã¾ã™ã—ã€ãƒªã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã®ä¸­ã§ãƒžã‚¦ã‚¹ã®ãƒœã‚¿ãƒ³2(中ボタン)を押ã—ãŸã¾ã¾ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã‚‚ã§ãã¾ã™ã€‚" -} -msg.pack('side'=>'top') - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $states_demo - $states_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'states'} - }.pack('side'=>'left', 'expand'=>'yes') - -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -states_lbox = nil -TkFrame.new(base_frame, 'borderwidth'=>'.5c') {|w| - s = TkScrollbar.new(w) - states_lbox = TkListbox.new(w) { - setgrid 1 - height 12 - yscrollcommand proc{|first,last| s.set first,last} - } - s.command(proc{|*args| states_lbox.yview(*args)}) - s.pack('side'=>'right', 'fill'=>'y') - states_lbox.pack('side'=>'left', 'expand'=>1, 'fill'=>'both') -}.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'y') - -ins_data = [ - '愛知','é’森','秋田','石å·','茨城','岩手','愛媛', - '大分','大阪','岡山','沖縄','香å·','鹿å…島','神奈å·', - 'å²é˜œ','京都','熊本','群馬','高知','埼玉','ä½è³€', - '滋賀','é™å²¡','島根','åƒè‘‰','æ±äº¬','徳島','栃木', - 'é³¥å–','富山','é•·å´Ž','長野','奈良','新潟','兵庫', - '広島','ç¦äº•','ç¦å²¡','ç¦å³¶','北海é“','三é‡','宮城', - '宮崎','山形','å±±å£','山梨','和歌山' -] - -states_lbox.insert(0, *ins_data) - diff --git a/ext/tk/sample/demos-jp/style.rb b/ext/tk/sample/demos-jp/style.rb deleted file mode 100644 index 737c9f8994..0000000000 --- a/ext/tk/sample/demos-jp/style.rb +++ /dev/null @@ -1,271 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# text (display styles) widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($style_demo) && $style_demo - $style_demo.destroy - $style_demo = nil -end - - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$style_demo = TkToplevel.new {|w| - title("Text Demonstration - Display Styles") - iconname("style") - positionWindow(w) -} - -base_frame = TkFrame.new($style_demo).pack(:fill=>:both, :expand=>true) - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $style_demo - $style_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'style'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - - -# text ç”Ÿæˆ -txt = TkText.new(base_frame){|t| - # ç”Ÿæˆ - setgrid 'true' - #width 70 - #height 32 - wrap 'word' - font $font - TkScrollbar.new(base_frame) {|s| - pack('side'=>'right', 'fill'=>'y') - command proc{|*args| t.yview(*args)} - t.yscrollcommand proc{|first,last| s.set first,last} - } - pack('expand'=>'yes', 'fill'=>'both') - - # テキストタグ設定 (フォント関連) - family = 'Courier' - - if $tk_version =~ /^4.*/ - style_tag_bold = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-O-Normal--*-120-*-*-*-*-*-*') - style_tag_big = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=>$msg_kanji_font) - style_tag_verybig = TkTextTag.new(t, 'font'=>'-*-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*') - # style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=>$kanji_font) - style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*') - else - style_tag_bold = TkTextTag.new(t, 'font'=>[family, 12, :bold, :italic]) - style_tag_big = TkTextTag.new(t, 'font'=>[family, 14, :bold]) - style_tag_verybig = TkTextTag.new(t, 'font'=>['Helvetica', 24, :bold]) - style_tag_small = TkTextTag.new(t, 'font'=>'Times 8 bold') - end -### -# case($tk_version) -# when /^4.*/ -# style_tag_big = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=>$msg_kanji_font) -# style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=>$kanji_font) -# when /^8.*/ -# unless $style_demo_do_first -# $style_demo_do_first = true -# Tk.tk_call('font', 'create', '@bigascii', -# '-copy', '-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*') -# Tk.tk_call('font', 'create', '@smallascii', -# '-copy', '-Adobe-Helvetica-Bold-R-Normal-*-100-*') -# Tk.tk_call('font', 'create', '@cBigFont', -# '-compound', '@bigascii @msg_knj') -# Tk.tk_call('font', 'create', '@cSmallFont', -# '-compound', '@smallascii @kanji') -# end -# style_tag_big = TkTextTag.new(t, 'font'=>'@cBigFont') -# style_tag_small = TkTextTag.new(t, 'font'=>'@cSmallFont') -# end - - # テキストタグ設定 (色,レリーフ関連) - if TkWinfo.depth($root).to_i > 1 - style_tag_color1 = TkTextTag.new(t, 'background'=>'#a0b7ce') - style_tag_color2 = TkTextTag.new(t, 'foreground'=>'red') - style_tag_raised = TkTextTag.new(t, 'relief'=>'raised', 'borderwidth'=>1) - style_tag_sunken = TkTextTag.new(t, 'relief'=>'sunken', 'borderwidth'=>1) - else - style_tag_color1 = TkTextTag.new(t, 'background'=>'black', - 'foreground'=>'white') - style_tag_color2 = TkTextTag.new(t, 'background'=>'black', - 'foreground'=>'white') - style_tag_raised = TkTextTag.new(t, 'background'=>'white', - 'relief'=>'raised', 'borderwidth'=>1) - style_tag_sunken = TkTextTag.new(t, 'background'=>'white', - 'relief'=>'sunken', 'borderwidth'=>1) - end - - # テキストタグ設定 (ãã®ä»–) - if $tk_version =~ /^4\.[01]/ - style_tag_bgstipple = TkTextTag.new(t, 'background'=>'black', - 'borderwidth'=>0, - 'bgstipple'=>'gray25') - else - style_tag_bgstipple = TkTextTag.new(t, 'background'=>'black', - 'borderwidth'=>0, - 'bgstipple'=>'gray12') - end - style_tag_fgstipple = TkTextTag.new(t, 'fgstipple'=>'gray50') - style_tag_underline = TkTextTag.new(t, 'underline'=>'on') - style_tag_overstrike = TkTextTag.new(t, 'overstrike'=>'on') - style_tag_right = TkTextTag.new(t, 'justify'=>'right') - style_tag_center = TkTextTag.new(t, 'justify'=>'center') - if $tk_version =~ /^4.*/ - style_tag_super = TkTextTag.new(t, 'offset'=>'4p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*') - style_tag_sub = TkTextTag.new(t, 'offset'=>'-2p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*') - else - style_tag_super = TkTextTag.new(t, 'offset'=>'4p', 'font'=>[family, 10]) - style_tag_sub = TkTextTag.new(t, 'offset'=>'-2p', 'font'=>[family, 10]) - end - style_tag_margins = TkTextTag.new(t, 'lmargin1'=>'12m', 'lmargin2'=>'6m', - 'rmargin'=>'10m') - style_tag_spacing = TkTextTag.new(t, 'spacing1'=>'10p', 'spacing2'=>'2p', - 'lmargin1'=>'12m', 'lmargin2'=>'6m', - 'rmargin'=>'10m') - - # テキスト挿入 - insert('end', 'ã“ã®ã‚ˆã†ã«ãƒ†ã‚­ã‚¹ãƒˆ widget ã¯æƒ…報を様々ãªã‚¹ã‚¿ã‚¤ãƒ«ã§è¡¨ç¤ºã™ã‚‹ã“㨠-ãŒã§ãã¾ã™ã€‚') - insert('end', 'ã‚¿ã‚°', style_tag_big) - insert('end', 'ã¨ã„ã†ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã§ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã•ã‚Œã¾ã™ã€‚ -ã‚¿ã‚°ã¨ã¯ãƒ†ã‚­ã‚¹ãƒˆ widget 内ã®ã‚る文字 (ã®ç¯„囲)ã«å¯¾ã—ã¦é©ç”¨ã§ãã‚‹ -å˜ãªã‚‹åå‰ã®ã“ã¨ã§ã™ã€‚ã‚¿ã‚°ã¯æ§˜ã€…ãªè¡¨ç¤ºã‚¹ã‚¿ã‚¤ãƒ«ã«è¨­å®šã§ãã¾ã™ã€‚ -設定ã™ã‚‹ã¨ã€ãã®ã‚¿ã‚°ã®ã¤ã„ãŸæ–‡å­—ã¯æŒ‡å®šã—ãŸã‚¹ã‚¿ã‚¤ãƒ«ã§è¡¨ç¤ºã•ã‚Œã‚‹ -よã†ã«ãªã‚Šã¾ã™ã€‚使用ã§ãる表示スタイルã¯æ¬¡ã®é€šã‚Šã§ã™ã€‚ -') - insert('end', ' -1. フォント', style_tag_big) - insert('end', ' ã©ã‚“㪠X ã®ãƒ•ã‚©ãƒ³ãƒˆã§ã‚‚使ãˆã¾ã™ã€‚') - insert('end', 'large', style_tag_verybig) - insert('end', ' -ã¨ã‹') -# insert('end', 'å°ã•ã„', style_tag_small) - insert('end', 'small', style_tag_small) - insert('end', 'ã¨ã‹ã€‚ -') - insert('end', ' -2. 色', style_tag_big) - insert('end', ' ') - insert('end', '背景色', style_tag_color1) - insert('end', 'ã‚‚') - insert('end', 'å‰æ™¯è‰²', style_tag_color2) - insert('end', 'ã‚‚') - insert('end', '両方', style_tag_color1, style_tag_color2) - insert('end', 'ã¨ã‚‚変ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -') - insert('end', ' -3. 網ã‹ã‘', style_tag_big) - insert('end', ' ã“ã®ã‚ˆã†ã«æç”»ã®éš›ã«') - insert('end', '背景も', style_tag_bgstipple) - insert('end', '文字も', style_tag_fgstipple) - insert('end', 'å˜ãªã‚‹å¡—ã‚Šã¤ã¶ã— -ã§ãªãã€ç¶²ã‹ã‘を使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ -') - insert('end', ' -4. 下線', style_tag_big) - insert('end', ' ã“ã®ã‚ˆã†ã«') - insert('end', '文字ã«ä¸‹ç·šã‚’引ã', style_tag_underline) - insert('end', 'ã“ã¨ãŒã§ãã¾ã™ã€‚ -') - insert('end', ' -5. 打ã¡æ¶ˆã—ç·š', style_tag_big) - insert('end', ' ã“ã®ã‚ˆã†ã«') - insert('end', '文字ã«é‡ã­ã¦ç·šã‚’引ã', style_tag_overstrike) - insert('end', 'ã“ã¨ãŒã§ãã¾ã™ã€‚ -') - insert('end', ' -6. 3D 効果', style_tag_big) - insert('end', ' 背景ã«æž ã‚’ã¤ã‘ã¦ã€æ–‡å­—ã‚’') - insert('end', '飛ã³å‡ºã™', style_tag_raised) - insert('end', 'よã†ã«ã—ãŸã‚Š') - insert('end', '沈む', style_tag_sunken) - insert('end', ' -よã†ã«ã§ãã¾ã™ã€‚ -') - insert('end', ' -7. è¡Œæƒãˆ', style_tag_big) - insert('end', ' ã“ã®ã‚ˆã†ã«è¡Œã‚’ -') - insert('end', 'å·¦ã«æƒãˆãŸã‚Š -') - insert('end', 'å³ã«æƒãˆãŸã‚Š -', style_tag_right) - insert('end', '真中ã«æƒãˆãŸã‚Šã§ãã¾ã™ã€‚ -', style_tag_center) - insert('end', ' -8. 肩付ã文字ã¨æ·»å­—', style_tag_big) - insert('end', ' 10') - insert('end', 'n', style_tag_super) - insert('end', ' ã®ã‚ˆã†ã«è‚©ä»˜ã文字ã®åŠ¹æžœã‚„ã€') - insert('end', ' -X') - insert('end', 'i', style_tag_sub) - insert('end', 'ã®ã‚ˆã†ã«æ·»å­—ã®åŠ¹æžœã‚’出ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ -') - insert('end', ' -9. マージン', style_tag_big) - insert('end', 'テキストã®å·¦å´ã«ä½™åˆ†ãªç©ºç™½ã‚’ç½®ãã“ã¨ãŒã§ãã¾ã™: -') - insert('end', 'ã“ã®æ®µè½ã¯ãƒžãƒ¼ã‚¸ãƒ³ã®ä½¿ç”¨ä¾‹ã§ã™ã€‚スクリーン', - style_tag_margins) - insert('end', '上ã§æŠ˜ã‚Šè¿”ã•ã‚Œã¦è¡¨ç¤ºã•ã‚Œã¦ã„ã‚‹1è¡Œã®ãƒ†ã‚­ã‚¹ãƒˆã§ã™ã€‚', - style_tag_margins) - insert('end', 'å·¦å´ã«ã¯2種類ã®ãƒžãƒ¼ã‚¸ãƒ³ã‚’æŒã¡ã¾ã™ã€‚', style_tag_margins) - insert('end', '1行目ã«å¯¾ã™ã‚‹ã‚‚ã®ã¨ã€', style_tag_margins) - insert('end', '2行目以é™ã®é€£ç¶šã—ãŸãƒžãƒ¼ã‚¸ãƒ³', style_tag_margins) - insert('end', 'ã§ã™ã€‚ã¾ãŸå³å´ã«ã‚‚マージンãŒã‚ã‚Šã¾ã™ã€‚', style_tag_margins) - insert('end', 'è¡Œã®æŠ˜ã‚Šè¿”ã—ä½ç½®ã‚’決ã‚ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -', style_tag_margins) - insert('end', ' -10. スペーシング', style_tag_big) - insert('end', '3ã¤ã®ãƒ‘ラメータã§è¡Œã®ã‚¹ãƒšãƒ¼ã‚·ãƒ³ã‚°ã‚’') - insert('end', '制御㙠-ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Spacing1ã§ã€è¡Œã®') - insert('end', '上ã«ã©ã®ãらã„ã®ç©ºé–“ã‚’ç½®ãã‹ã€ -spacing3') - insert('end', 'ã§è¡Œã®ä¸‹ã«ã©ã®ãらã„ã®ç©ºé–“ã‚’ç½®ãã‹ã€') - insert('end', 'è¡ŒãŒæŠ˜ã‚Šè¿”ã•ã‚Œã¦ã„ã‚‹ãªã‚‰ -ã°ã€spacing2ã§ã€') - insert('end', 'テキスト行を生æˆã—ã¦ã„ã‚‹è¡Œã®é–“ã«ã©ã®ãらã„') - insert('end', 'ã®ç©ºé–“ã‚’ç½® -ãã‹ã‚’示ã—ã¾ã™ã€‚ -') - insert('end', 'ã“れらã®ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆã•ã‚ŒãŸæ®µè½ã¯ã©ã®ã‚ˆã†ã«', - style_tag_spacing) - insert('end', 'スペーシングãŒãŒè¡Œã‚れるã®ã‹ã‚’示ã—ã¾ã™ã€‚', - style_tag_spacing) - insert('end', 'å„段è½ã¯å®Ÿéš›ã¯ãƒ†ã‚­ã‚¹ãƒˆwidget', style_tag_spacing) - insert('end', 'ã®1è¡Œã§ã€widgetã«ã‚ˆã£ã¦æŠ˜ã‚Šç•³ã¾ã‚Œã¦ã„ã¾ã™ã€‚ -', style_tag_spacing) - insert('end', 'Spacing1ã¯ã“ã®ãƒ†ã‚­ã‚¹ãƒˆã§ã¯10pointã«', style_tag_spacing) - insert('end', '設定ã•ã‚Œã¦ã„ã¾ã™ã€‚', style_tag_spacing) - insert('end', 'ã“ã‚Œã«ã‚ˆã‚Šã€æ®µè½ã®é–“ã«å¤§ããªé–“éš”ãŒ', style_tag_spacing) - insert('end', '存在ã—ã¦ã„ã¾ã™ã€‚', style_tag_spacing) - insert('end', 'Spacing2ã¯2pointã«è¨­å®šã•ã‚Œã¦ã„ã¾ã™ã€‚', style_tag_spacing) - insert('end', 'ã“ã‚Œã§æ®µè½ã®ä¸­ã«ã»ã‚“ã®å°‘ã—é–“éš”ãŒå­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚', - style_tag_spacing) - insert('end', 'Spacing3ã¯ã“ã®ä¾‹ã§ã¯ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã›ã‚“。 -', style_tag_spacing) - insert('end', 'é–“éš”ãŒã©ã“ã«ã‚ã‚‹ã‹ã‚’見ãŸã‘ã‚Œã°ã€ã“れらã®æ®µè½ã®', - style_tag_spacing) - insert('end', 'ãªã‹ã§ãƒ†ã‚­ã‚¹ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。é¸æŠžã®', style_tag_spacing) - insert('end', 'å転ã—ãŸéƒ¨åˆ†ã«ã¯ä½™åˆ†ã«ã¨ã‚‰ã‚ŒãŸé–“éš”ãŒ', style_tag_spacing) - insert('end', 'å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ -', style_tag_spacing) - -} - -txt.width 70 -txt.height 32 diff --git a/ext/tk/sample/demos-jp/tcolor b/ext/tk/sample/demos-jp/tcolor deleted file mode 100644 index f2d5458db4..0000000000 --- a/ext/tk/sample/demos-jp/tcolor +++ /dev/null @@ -1,534 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- -# -# tcolor -- -# ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯RGB,HSB,CYMå½¢å¼ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ -# 簡易カラーエディタã§ã™ã€‚ -# -# Copyright (C) 1998 Takaaki Tateishi(ttate@jaist.ac.jp) -# last update: Thu Jun 18 06:32:35 JST 1998 -# - -# ã¾ãšã¯tk.rbを読ã¿è¾¼ã‚€ã€‚ - -require "tk" - - -# Tkã«ã‚ˆã£ã¦å¤‰æ›´ã•ã‚Œã‚‹å¤‰æ•°ã¯TkVariableã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’使ã†ã€‚ - -$colorSpace = TkVariable.new(:rgb) -$master = nil -$red = 65535 -$green = 0 -$blue = 0 -$color = "#ffff00000000" -$updating = TkVariable.new(0) -$autoUpdate = TkVariable.new(1) -$name = TkVariable.new($color) -$command = TkVariable.new("print(%%,\"\n\")") -# $command = TkVariable.new("") -$label1 = TkVariable.new("label1") -$label2 = TkVariable.new("label2") -$label3 = TkVariable.new("label3") - - -# リソースデータベースã®è¨­å®š -if (TkVarAccess.new('tcl_platform')['platform'] == 'unix') - TkOptionDB.add('*Entry.background', 'white') -end - - -# å„イベント用ã®ãƒ¡ã‚½ãƒƒãƒ‰ - -def rgbToHsv(red,green,blue) - - if ( red > green ) - max = red - min = green - else - max = green - min = red - end - - if ( blue > max ) - max = blue - else - if ( blue < min ) - min = blue - end - end - - range = max - min - - if ( max == 0 ) - sat = 0.0 - else - sat = (max-min)/max - end - - if ( sat == 0 ) - hue = 0.0 - else - rc = (max-red)/range - gc = (max-green)/range - bc = (max-blue)/range - if ( red == max ) - hue = 0.166667 * (bc - gc) - else - if ( green == max ) - hue = 0.166667 * (2.0 + rc - bc) - else - hue = 0.166667 * (4.0 + gc - rc) - end - end - if ( hue < 0.0 ) - hue = hue + 1.0 - end - end - - [hue,sat,max/65535] -end - - -def hsbToRgb(hue,sat,value) - v = 65535.0 * value - if( sat == 0 ) - ans = [v,v,v] - else - hue = hue*6.0 - if ( hue >= 6 ) - hue = 0.0 - end - i = hue.to_i - f = hue - i - p = 65535.0 * value * (1.0 - sat) - q = 65535.0 * value * (1.0 - (sat * f)) - t = 65535.0 * value * (1.0 - (sat * (1.0 - f))) - case i - when 0 - ans = [v,t,p] - when 1 - ans = [q,v,p] - when 2 - ans = [p,v,t] - when 3 - ans = [p,q,v] - when 4 - ans = [t,p,v] - when 5 - ans = [v,p,q] - else - raise(eException,"i value #{i} is out of range") - end - end - return ans -end - - -def _null_binding - Module.new.instance_eval{binding} -end -private :_null_binding - -def doUpdate - newCmd = $command.to_s.gsub("%%","\"#{$color}\"") - eval(newCmd, _null_binding) -end - - -def tc_scaleChanged - if( $updating.to_i == 1 ) - return - end - - $master = :scale if $master == nil - - scale1 = $root.middle.middle.scale1 - scale2 = $root.middle.middle.scale2 - scale3 = $root.middle.middle.scale3 - - case $colorSpace.value.intern - when :rgb - $red = (scale1.get * 65.535).to_i - $green = (scale2.get * 65.535).to_i - $blue = (scale3.get * 65.535).to_i - when :cmy - $red = (65535 - scale1.get * 65.535).to_i - $green = (65535 - scale2.get * 65.535).to_i - $blue = (65535 - scale3.get * 65.535).to_i - when :hsb - list = hsbToRgb(scale1.get / 1000.0, - scale2.get / 1000.0, - scale3.get / 1000.0) - $red = list[0] - $green = list[1] - $blue = list[2] - else - raise(Exception,"unknown colorSpace") - end - $color = format("#%04x%04x%04x",$red.to_i,$green.to_i,$blue.to_i) - $name.value = $color if $master == :scale - $root.middle.right.set_color($color) - if( $autoUpdate.to_i == 1 ) - doUpdate - end - Tk.update(true) - $master = nil if $master == :scale -end - - -def tc_setScales - $updating.value = 1 - - scale1 = $root.middle.middle.scale1 - scale2 = $root.middle.middle.scale2 - scale3 = $root.middle.middle.scale3 - - case $colorSpace.value.intern - when :rgb - scale1.set($red / 65.535) - scale2.set($green / 65.535) - scale3.set($blue / 65.535) - when :cmy - scale1.set((65535 - $red) / 65.535) - scale2.set((65535 - $green) / 65.535) - scale3.set((65535 - $blue) / 65.535) - when :hsb - list = rgbToHsv($red,$green,$blue) - scale1.set( list[0] * 1000.0 ) - scale2.set( list[1] * 1000.0 ) - scale3.set( list[2] * 1000.0 ) - else - raise(Exception,"unknown colorSpace") - end - - $updating.value = 0 -end - - -def tc_loadNamedColor(name) - $name.value = name - $master = :name if $master == nil - if name[0,1] != "#" - list = TkWinfo.rgb($root.middle.right.swatch,name) - $red = list[0] - $green = list[1] - $blue = list[2] - else - case name.length - when 4 - fmt = /#(.{1})(.{1})(.{1})/ - shift = 12 - when 7 - fmt = /#(.{2})(.{2})(.{2})/ - shift = 8 - when 10 - fmt = /#(.{3})(.{3})(.{3})/ - shift = 4 - when 13 - fmt = /#(.{4})(.{4})(.{4})/ - shift = 0 - else - raise(eException,"syntax error in color name \"#{name}\"") - end - name.scan(fmt){|strlist| - if strlist.length != 3 - raise(eException,"syntax error in color name \"#{name}\"") - end - $red = strlist[0].hex - $green = strlist[1].hex - $blue = strlist[2].hex - } - $red = $red << shift - $green = $green << shift - $blue = $blue << shift - end - - tc_setScales - $color = format("#%04x%04x%04x",$red,$green,$blue) - $root.middle.right.set_color($color) - if $autoUpdate.to_i == 1 - doUpdate - end - Tk.update(true) - $master = nil if $master == :name -end - - -def changeColorSpace(space) - case space - when :rgb - $label1.value = "Red" - $label2.value = "Green" - $label3.value = "Blue" - when :cmy - $label1.value = "Cyan" - $label2.value = "Magenta" - $label3.value = "Yellow" - when :hsb - $label1.value = "Hue" - $label2.value = "Saturation" - $label3.value = "Brightness" - end - tc_setScales -end - - - - - -# tcolor用ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ - -class TkColorMenuFrame"raised", - "borderwidth"=>"2") - - # Fileメニューボタンã®ç”Ÿæˆ - @file = TkMenubutton.new(self){|button| - - # Fileメニューã®ä½œæˆ - @file_menu = TkMenu.new(button){ - add "radio", - "label" => "RGB color space", - "variable" => $colorSpace, - "value" => :rgb, - "underline" => "0", - "command" => proc{changeColorSpace(:rgb)} - add "radio", - "label" => "CMY color space", - "variable" => $colorSpace, - "value" => :cmy, - "underline" => "0", - "command" => proc{changeColorSpace(:cmy)} - add "radio", - "label" => "HSB color space", - "variable" => $colorSpace, - "value" => :hsb, - "underline" => "0", - "command" => proc{changeColorSpace(:hsb)} - add "separator" - add "radio", - "label" => "Automatic updates", - "variable" => $autoUpdate, - "value" => "1", - "underline" => "0" - add "radio", - "label" => "Manual updates", - "variable" => $autoUpdate, - "value" => "0", - "underline" => "0" - add "separator" - add "command", - "label" => "Exit program", - "underline" => "0", - "command" => proc{exit} - } - - # Fileメニューã¨Fileボタンを関連付ã‘ã‚‹ - menu @file_menu - - text "File" - underline "0" - }.pack("side"=>"left") - - self - end -end - - -# 下部ã®ãƒ•ãƒ¬ãƒ¼ãƒ ã®ãŸã‚ã®ã‚¯ãƒ©ã‚¹ -class TkColorBotFrame "raised", - "borderwidth"=> 2) - - @commandLabel = TkLabel.new(self, - "text"=> "Command:") - @command = TkEntry.new(self, - "relief"=> "sunken", - "borderwidth"=> "2", - "textvariable"=> $command, - "font"=> "-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*") - @update = TkButton.new(self, - "text"=> "Update", - "command"=> proc{doUpdate}) - @commandLabel.pack("side"=>"left") - @update.pack("side"=>"right","pady"=>".1c","padx"=>".25c") - @command.pack("expand"=>"yes","fill"=>"x","ipadx"=>".25c") - - self - end -end - - -# 中段左ã®ãƒ•ãƒ¬ãƒ¼ãƒ  -class TkColorMiddleLeftFrame"vertical", - "relief"=>"sunken", - "borderwidth"=>"2") - @scroll.pack("side"=>"right","fill"=>"y") - @names = TkListbox.new(self, - "width"=>"20", - "height"=>"12", - "yscrollcommand"=> proc{|first,last| @scroll.set first,last}, - "relief"=>"sunken", - "borderwidth"=>"2", - "exportselection"=>"false") - @scroll.command(proc{|*args| @names.yview(*args)}) - @names.bind("Double-1",proc{ - tc_loadNamedColor(@names.get(@names.curselection))}) - @names.pack("side"=>"left") - while (line = f.gets) - line.chop! - linelist = line.split(/[ \t]+/) - if linelist.length == 4 - @names.insert("end",linelist[3]) - end - end - f.close - break - end - - self - end -end - - -# 中段中央ã®ãƒ•ãƒ¬ãƒ¼ãƒ  -class TkColorMiddleMiddleFrame"top","expand"=>"yes") - end - @f4.pack("side"=>"top","expand"=>"yes","fill"=>"x") - - @label1 = TkLabel.new(self,"textvariable"=>$label1) - @scale1 = TkScale.new(self,"from"=>"0","to"=>"1000","length"=>"6c", - "orient"=>"horizontal", - "command"=>proc{tc_scaleChanged}) - @scale1.pack("side"=>"top","anchor"=>"w") - @label1.pack("side"=>"top","anchor"=>"w") - - @label2 = TkLabel.new(self,"textvariable"=>$label2) - @scale2 = TkScale.new(self,"from"=>"0","to"=>"1000","length"=>"6c", - "orient"=>"horizontal", - "command"=>proc{tc_scaleChanged}) - @scale2.pack("side"=>"top","anchor"=>"w") - @label2.pack("side"=>"top","anchor"=>"w") - - @label3 = TkLabel.new(self,"textvariable"=>$label3) - @scale3 = TkScale.new(self,"from"=>"0","to"=>"1000","length"=>"6c", - "orient"=>"horizontal", - "command"=>proc{tc_scaleChanged}) - @scale3.pack("side"=>"top","anchor"=>"w") - @label3.pack("side"=>"top","anchor"=>"w") - - @nameLabel = TkLabel.new(self,"text"=>"Name:") - @name = TkEntry.new(self,"relief"=>"sunken","borderwidth"=>"2", - "textvariable"=>$name,"width"=>"10", - "font"=>"-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*") - @nameLabel.pack("side"=>"left") - @name.pack("side"=>"right", "expand"=>"1", "fill"=>"x") - @name.bind("Return",proc{tc_loadNamedColor $name.to_s}) - - self - end -end - - -class TkColorMiddleRightFrame"2c", "height"=>"5c", - "background"=>$color) - @value = TkLabel.new(self, - "text"=>$color, - "width"=>"13", - "font"=>"-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*") - @swatch.pack("side"=>"top","expand"=>"yes","fill"=>"both") - @value.pack("side"=>"bottom","pady"=>".25c") - - self - end - - def set_color(color) - @swatch["background"] = color - @value["text"] = color - end -end - - - -# 中段ã®ãƒ•ãƒ¬ãƒ¼ãƒ  -class TkColorMiddleFrame "raised", - "borderwidth"=> "2") - - @left = TkColorMiddleLeftFrame.new(self) - @left.pack("side"=>"left","padx"=>".25c","pady"=>".25c") - - @middle = TkColorMiddleMiddleFrame.new(self) - @middle.pack("side"=>"left","expand"=>"yes","fill"=>"y") - - @right = TkColorMiddleRightFrame.new(self) - @right.pack("side"=>"left","padx"=>".25c","pady"=>".25c","anchor"=>"s") - - self - end -end - - -class TkColor"top", "fill"=>"x") - - @bottom = TkColorBotFrame.new(self) - @bottom.pack("side"=>"bottom","fill"=>"x") - - @middle = TkColorMiddleFrame.new(self) - @middle.pack("side"=>"top","fill"=>"both") - - self - end -end - - -$root = TkColor.new - -# イベントを待ã¤ç‚ºã«ãƒ«ãƒ¼ãƒ—ã«å…¥ã‚‹ã€‚ -changeColorSpace :rgb -Tk.mainloop diff --git a/ext/tk/sample/demos-jp/text.rb b/ext/tk/sample/demos-jp/text.rb deleted file mode 100644 index 117f9f105a..0000000000 --- a/ext/tk/sample/demos-jp/text.rb +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# text (basic facilities) widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($text_demo) && $text_demo - $text_demo.destroy - $text_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$text_demo = TkToplevel.new {|w| - title("Text Demonstration - Basic Facilities") - iconname("text") - positionWindow(w) -} - -base_frame = TkFrame.new($text_demo).pack(:fill=>:both, :expand=>true) - -# version check -if ((Tk::TK_VERSION.split('.').collect{|n| n.to_i} <=> [8,4]) < 0) - undo_support = false -else - undo_support = true -end - -# frame ç”Ÿæˆ -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $text_demo - $text_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'text'} - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# text ç”Ÿæˆ -TkText.new(base_frame){|t| - # ç”Ÿæˆ - relief 'sunken' - bd 2 - setgrid 1 - height 30 - TkScrollbar.new(base_frame) {|s| - pack('side'=>'right', 'fill'=>'y') - command proc{|*args| t.yview(*args)} - t.yscrollcommand proc{|first,last| s.set first,last} - } - pack('expand'=>'yes', 'fill'=>'both') - - # テキスト挿入 - insert('0.0', <:both, :expand=>true) - -count = [0] - -## Define a widget that we peer from; it won't ever actually be shown though -first = TkText.new(base_frame, :widgetname=>"text#{count[0] += 1}") -first.insert :end,"ã“ã®ãƒ‡ãƒ¢ã¯ä¸€ã¤ã®çµ„ã‚’æˆã—ãŸãƒ†ã‚­ã‚¹ãƒˆã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã‚’示ã—ã¾ã™ã€‚" -first.insert :end,"ãれらã®ãƒ†ã‚­ã‚¹ãƒˆã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã¯å¯¾ç­‰(ピア;peer)ã®é–¢ä¿‚ã«" -first.insert :end,"ãªã£ã¦ã„ã¾ã™ã€‚" -first.insert :end,"ãれらã¯ã€åŸºç›¤ã¨ãªã‚‹ãƒ‡ãƒ¼ã‚¿ãƒ¢ãƒ‡ãƒ«ã¯å…±é€šã®ã‚‚ã®ã‚’æŒã¡ã¾ã™ãŒã€" -first.insert :end,"ç”»é¢è¡¨ç¤ºä½ç½®ã€ç·¨é›†ä½ç½®ã€é¸æŠžç¯„囲(selection)ã«ã¤ã„ã¦ã¯" -first.insert :end,"独立ã«æŒã¤ã“ã¨ãŒã§ãã¾ã™ã€‚" -first.insert :end,"å„テキストウィジェットã®è„‡ã«ã‚ã‚‹" -first.insert :end,"「ピア(peer)ã®ä½œæˆã€ãƒœã‚¿ãƒ³ã‚’使ãˆã°ã€" -first.insert :end,"æ–°ãŸãªãƒ”アを追加ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚" -first.insert :end,"ã¾ãŸã€Œãƒ”ã‚¢(peer)ã®æ¶ˆåŽ»ã€ãƒœã‚¿ãƒ³ã‚’使ãˆã°ã€" -first.insert :end,"特定ã®ãƒ”アウィジェットを消去ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" - -Tk.update_idletasks ## for 'first' widget - -## Procedures to make and kill clones; most of this is just so that the demo -## looks nice... -def makeClone(count, win, txt) - cnt = (count[0] += 1) - peer = TkText::Peer.new(txt, win, :widgetname=>"text#{cnt}") - sbar = TkScrollbar.new(win, :widgetname=>"sb#{cnt}") - peer.yscrollbar sbar - b1 = TkButton.new(win, :widgetname=>"clone#{cnt}", - :text=>'ピア(peer)ã®ä½œæˆ', - :command=>proc{makeClone(count, win, peer)}) - b2 = TkButton.new(win, :widgetname=>"kill#{cnt}", - :text=>'ピア(peer)ã®æ¶ˆåŽ»', - :command=>proc{killClone(win, cnt)}) - row = cnt * 2 - TkGrid.configure(peer, sbar, b1, :sticky=>'nsew', :row=>row) - TkGrid.configure('^', '^', b2, :sticky=>'nsew', :row=>(row+=1)) - TkGrid.configure(b1, b2, :sticky=>'new') - TkGrid.rowconfigure(win, b2, :weight=>1) -end - -def killClone(win, cnt) - Tk.destroy("#{win.path}.text#{cnt}", "#{win.path}.sb#{cnt}", - "#{win.path}.clone#{cnt}", "#{win.path}.kill#{cnt}") -end - -## Now set up the GUI -makeClone(count, base_frame, first) -makeClone(count, base_frame, first) -first.destroy - -## See Code / Dismiss buttons -TkFrame.new(base_frame){|f| - TkButton.new(f, :text=>'é–‰ã˜ã‚‹', :width=>15, :command=>proc{ - $textpeer_demo.destroy - $textpeer_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'コードå‚ç…§', :width=>15, :command=>proc{ - showCode 'textpeer' - }).pack(:side=>:left, :expand=>true) - - TkGrid.configure(f, '-', '-', :sticky=>'ew', :row=>5000) -} -TkGrid.columnconfigure(base_frame, 0, :weight=>1) diff --git a/ext/tk/sample/demos-jp/timer b/ext/tk/sample/demos-jp/timer deleted file mode 100644 index 6cb7c87e09..0000000000 --- a/ext/tk/sample/demos-jp/timer +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/env ruby -# -# timer -- -# This script generates a counter with start,stop and reset buttons. -# -# Copyright (C) 1998 Takaaki Tateishi (ttate@jaist.ac.jp) -# last update: Sat Jun 27 12:24:14 JST 1998 -# - -require "tk" -require "thread" -require "tkafter" - -$time = "0.00" -$m = Mutex.new -$loop = false - -def timer_stop - $loop = false - $m.lock -end - -def timer_start - $loop = true - $m.unlock -end - -def timer_reset - $time = "0.00" - $root.countframe.counter['text'] = $time -end - -def timer_loop - if $loop - $time = $time.succ - $root.countframe.counter['text'] = $time - end - Tk.after(10,proc{timer_loop}) -end - - -# -# thread version -# -def timer_loop2 - while true - $m.lock - $time = $time.succ - $root.countframe.counter['text'] = $time - sleep(0.01) - $m.unlock - end -end - -# -# TkAfter -# -def timer_loop3 - if $loop - $time = $time.succ - $root.countframe.counter['text'] = $time - end -end - - -class CountFrame < TkFrame - attr_reader :counter - - def initialize(parent=nil,keys=nil) - super(parent,keys) - @counter = TkLabel.new(self, - 'text'=>$time, - 'relief'=>'raised') - @counter.pack('fill'=>'both') - self - end -end - - -class ButtonFrame < TkFrame - def initialize(parent=nil,keys=nil) - super(parent,keys) -=begin - @stop = TkButton.new(self, - 'text'=>'Stop', - 'command'=>proc{timer_stop}) - @start = TkButton.new(self, - 'text'=>'Start', - 'command'=>proc{timer_start}) -=end - @stop = TkButton.new(self, :text=>'Stop', :state=>:disabled) - @start = TkButton.new(self, :text=>'Start', :state=>:normal) - - @stop.command proc{ - timer_stop - @start.state(:normal) - @stop.state(:disabled) - } - @start.command proc{ - timer_start - @stop.state(:normal) - @start.state(:disabled) - } - - @reset = TkButton.new(self, - 'text'=>'Reset', - 'command'=>proc{timer_reset}) - for b in [@stop,@start,@reset] - b.pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes') - end - end -end - - -class Timer < TkRoot - attr_reader :countframe - - def initialize(*args) - super(*args) - @countframe = CountFrame.new(self) - @buttonframe = ButtonFrame.new(self) - for f in [@buttonframe,@countframe] - f.pack('side'=>'top', 'fill'=>'both') - end - self - end -end - - -$root = Timer.new - -#$thread = Thread.start{timer_loop2} -#timer_loop -TkAfter.new(10,-1,proc{timer_loop3}).start - -Tk.mainloop diff --git a/ext/tk/sample/demos-jp/toolbar.rb b/ext/tk/sample/demos-jp/toolbar.rb deleted file mode 100644 index f355e8fef8..0000000000 --- a/ext/tk/sample/demos-jp/toolbar.rb +++ /dev/null @@ -1,137 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# toolbar.rb -- -# -# This demonstration script creates a toolbar that can be torn off. -# -# based on "Id: toolbar.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp" - -if defined?($toolbar_demo) && $toolbar_demo - $toolbar_demo.destroy - $toolbar_demo = nil -end - -$toolbar_demo = TkToplevel.new {|w| - title("Ttk Menu Buttons") - iconname("toolbar") - positionWindow(w) -} - -base_frame = Ttk::Frame.new($toolbar_demo).pack(:fill=>:both, :expand=>true) - -if Tk.windowingsystem != 'aqua' - msg = Ttk::Label.new(base_frame, :wraplength=>'4i', :text=><'4i', :text=><'toolbar') # ウィンドウタイトル文字列ã¨ã™ã‚‹ãŸã‚ã«ï¼Œã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆåを明示ã—ã¦ã„ã¾ã™ï¼Ž -sep = Ttk::Separator.new(base_frame) -to_base = Ttk::Frame.new(tbar_base, :cursor=>'fleur') -if Tk.windowingsystem != 'aqua' - to = Ttk::Separator.new(to_base, :orient=>:vertical) - to2 = Ttk::Separator.new(to_base, :orient=>:vertical) - to.pack(:fill=>:y, :expand=>true, :padx=>2, :side=>:left) - to2.pack(:fill=>:y, :expand=>true, :side=>:left) -end - -contents = Ttk::Frame.new(tbar_base) -Tk.grid(to_base, contents, :sticky=>'nsew') -tbar_base.grid_columnconfigure(contents, :weight=>1) -contents.grid_columnconfigure(1000, :weight=>1) - -if Tk.windowingsystem != 'aqua' - ## Bindings so that the toolbar can be torn off and reattached - to_base.bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)} - to. bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)} - to2. bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)} - def tbar_base.tearoff(w, x, y) - on_win = TkWinfo.containing(x, y) - return unless (on_win && on_win.path =~ /^#{@path}(\.|$)/) - self.grid_remove - w.grid_remove - self.wm_manage - # self.wm_title('Toolbar') # ã‚‚ã—ウィジェットåをウィンドウタイトルã«ã—ãŸããªã„ãªã‚‰ï¼Œã“ã“ã§è¨­å®šã—ã¦ãã ã•ã„ - self.wm_protocol('WM_DELETE_WINDOW'){ self.untearoff(w) } - end - def tbar_base.untearoff(w) - self.wm_forget - w.grid - self.grid - end -end - -## Some content for the rest of the toplevel -text = TkText.new(base_frame, :width=>40, :height=>10) - -## Toolbar contents -tb_btn = Ttk::Button.new(tbar_base, :text=>'ボタン', :style=>'Toolbutton', - :command=>proc{ - text.insert(:end, "ボタンãŒæŠ¼ã•ã‚Œã¾ã—ãŸï¼Ž\n") - }) -tb_chk = Ttk::Checkbutton.new(tbar_base, :text=>'ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³', - :style=>'Toolbutton', - :variable=>(check = TkVariable.new), - :command=>proc{ - text.insert(:end, "ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³ã®å€¤ã¯#{check.value}ã§ã™ï¼Ž\n") - }) -tb_mbtn = Ttk::Menubutton.new(tbar_base, :text=>'メニュー') -tb_combo = Ttk::Combobox.new(tbar_base, :value=>TkFont.families, - :state=>:readonly) -tb_mbtn.menu(menu = Tk::Menu.new(tb_mbtn)) -menu.add(:command, :label=>'Just', :command=>proc{text.insert(:end, "Just\n")}) -menu.add(:command, :label=>'An', :command=>proc{text.insert(:end, "An\n")}) -menu.add(:command, :label=>'Example', - :command=>proc{text.insert(:end, "Example\n")}) -tb_combo.bind(''){ text.font.family = tb_combo.get } - -## Arrange contents -Tk.grid(tb_btn, tb_chk, tb_mbtn, tb_combo, - :in=>contents, :padx=>2, :sticky=>'ns') -Tk.grid(tbar_base, :sticky=>'ew') -Tk.grid(sep, :sticky=>'ew') -Tk.grid(msg, :sticky=>'ew') -Tk.grid(text, :sticky=>'nsew') -base_frame.grid_rowconfigure(text, :weight=>1) -base_frame.grid_columnconfigure(text, :weight=>1) - -## See Code / Dismiss buttons -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'toolbar'}), - Ttk::Button.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $toolbar_demo.destroy - $toolbar_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - Tk.grid(frame, :sticky=>'ew') -} diff --git a/ext/tk/sample/demos-jp/tree.rb b/ext/tk/sample/demos-jp/tree.rb deleted file mode 100644 index 48d5e5407e..0000000000 --- a/ext/tk/sample/demos-jp/tree.rb +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# tree.rb -- -# -# This demonstration script creates a toplevel window containing a Ttk -# tree widget. -# -# based on "Id: tree.tcl,v 1.4 2007/12/13 15:27:07 dgp Exp" - -if defined?($tree_demo) && $tree_demo - $tree_demo.destroy - $tree_demo = nil -end - -$tree_demo = TkToplevel.new {|w| - title("Directory Browser") - iconname("tree") - positionWindow(w) -} - -base_frame = TkFrame.new($tree_demo).pack(:fill=>:both, :expand=>true) - -## Explanatory text -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', - :justify=>:left, :anchor=>'n', :padding=>[10, 2, 10, 6], - :text=><:x) -Ttkã¨ã¯ï¼Œãƒ†ãƒ¼ãƒžæŒ‡å®šå¯èƒ½ãªæ–°ã—ã„ウィジェット集åˆã§ã™ï¼Ž\ -ã“ã®ã‚µãƒ³ãƒ—ルã¯ï¼Œãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã®ã‚ˆã†ãªéšŽå±¤çš„ãªãƒ‡ãƒ¼ã‚¿é›†åˆã‚’\ -å‚ç…§ã§ãるよã†ã«ã—ãŸTtk::Treeviewウィジェットをå«ã‚“ã§ã„ã¾ã™ï¼Ž\ -Ttk::Treeviewウィジェットã¯ï¼Œæœ¨æ§‹é€ è‡ªä½“ã®è¡¨ç¤ºã‚’å¯èƒ½ã«ã™ã‚‹ã ã‘ã§ãªã,\ -追加情報(ã“ã®ã‚µãƒ³ãƒ—ルã®å ´åˆã¯ãƒ•ã‚¡ã‚¤ãƒ«ã‚µã‚¤ã‚º)を表示ã™ã‚‹ãŸã‚ã«\ -ä»»æ„ã®å€‹æ•°ã®è¿½åŠ ã‚«ãƒ©ãƒ ã‚‚扱ã†ã“ã¨ã‚‚ã§ãã¾ã™ï¼Ž\ -ã¾ãŸï¼Œã‚«ãƒ©ãƒ ã®ã‚¿ã‚¤ãƒˆãƒ«é–“ã®åŒºåˆ‡ã‚Šéƒ¨åˆ†ã‚’ドラッグã™ã‚‹ã“ã¨ã§ï¼Œ\ -カラムã®å¹…を変更ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ï¼Ž -EOL - -## See Code / Dismiss -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'tree'}), - Ttk::Button.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $tree_demo.destroy - $tree_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -## Code to populate the roots of the tree (can be more than one on Windows) -def populate_roots(tree) - TkComm.simplelist(Tk.tk_call('file', 'volumes')).sort.each{|dir| - populate_tree(tree, tree.insert(nil, :end, :text=>dir, - :values=>[dir, 'directory'])) - } -end - -## Code to populate a node of the tree -def populate_tree(tree, node) - return if tree.get(node, :type) != 'directory' - - path = tree.get(node, :fullpath) - tree.delete(tree.children(node)) - Dir.glob("#{path}/*").sort.each{|f| - type = File.ftype(f) rescue nil - id = tree.insert(node, :end, - :text=>File.basename(f), :values=>[f, type]).id - if type == 'directory' - ## Make it so that this node is openable - tree.insert(id, 0, :text=>'dummy') - tree.itemconfigure(id, :text=>File.basename(f)) - elsif type == 'file' - size = File.size(f) - if size >= 1024*1024*1024 - size = '%.1f GB' % (size.to_f/1024/1024/1024) - elsif size >= 1024*1024 - size = '%.1f MB' % (size.to_f/1024/1024) - elsif size >= 1024 - size = '%.1f KB' % (size.to_f/1024) - else - size = '%.1f bytes' % (size.to_f/1024) - end - tree.set(id, :size, size) - end - } - - # Stop this code from rerunning on the current node - tree.set(node, :type, 'processed_directory') -end - -## Create the tree and set it up -tree = Ttk::Treeview.new(base_frame, :columns=>%w(fullpath type size), - :displaycolumns=>['size']) -if Tk.windowingsystem != 'aqua' - vsb = tree.yscrollbar(Ttk::Scrollbar.new(base_frame)) - hsb = tree.xscrollbar(Ttk::Scrollbar.new(base_frame)) -else - vsb = tree.yscrollbar(Tk::Scrollbar.new(base_frame)) - hsb = tree.xscrollbar(Tk::Scrollbar.new(base_frame)) -end - -tree.heading_configure('#0', :text=>'Directory Structure') -tree.heading_configure('size', :text=>'File Size') -tree.column_configure('size', :stretch=>0, :width=>70) -populate_roots(tree) -tree.bind('', '%W'){|w| populate_tree(w, w.focus_item)} - -## Arrange the tree and its scrollbars in the toplevel -container = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true) -container.lower -Tk.grid(tree, vsb, :in=>container, :sticky=>'nsew') -Tk.grid(hsb, :in=>container, :sticky=>'nsew') -container.grid_columnconfigure(0, :weight=>1) -container.grid_rowconfigure(0, :weight=>1) diff --git a/ext/tk/sample/demos-jp/ttkbut.rb b/ext/tk/sample/demos-jp/ttkbut.rb deleted file mode 100644 index 3a72eac377..0000000000 --- a/ext/tk/sample/demos-jp/ttkbut.rb +++ /dev/null @@ -1,146 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# ttkbut.rb -# -# This demonstration script creates a toplevel window containing several -# simple Ttk widgets, such as labels, labelframes, buttons, checkbuttons and -# radiobuttons. -# -# based on "Id: ttkbut.tcl,v 1.4 2007/12/13 15:27:07 dgp Exp" - -if defined?($ttkbut_demo) && $ttkbut_demo - $ttkbut_demo.destroy - $ttkbut_demo = nil -end - -$ttkbut_demo = TkToplevel.new {|w| - title("Simple Ttk Widgets") - iconname("ttkbut") - positionWindow(w) -} - -base_frame = TkFrame.new($ttkbut_demo).pack(:fill=>:both, :expand=>true) - -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top, :fill=>:x) -Ttkã¨ã¯ï¼Œãƒ†ãƒ¼ãƒžæŒ‡å®šå¯èƒ½ãªæ–°ã—ã„ウィジェット集åˆã§ã™ï¼Ž\ -今,ã‚ãªãŸãŒç›®ã«ã—ã¦ã„ã‚‹ã®ã¯Ttkã®ãƒ†ãƒ¼ãƒžåŒ–ラベルã§ï¼Œ\ -下ã«ã¯Ttkã®ãƒ©ãƒ™ãƒ«ãƒ•ãƒ¬ãƒ¼ãƒ ã®ä¸­ã«ä¸‰ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®TtkウィジェットãŒ\ -表示ã•ã‚Œã¦ã„ã¾ã™ï¼Ž -最åˆã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯å…¨ã¦ãƒœã‚¿ãƒ³ã§ã‚り,\ -ãã‚Œãžã‚Œã‚¯ãƒªãƒƒã‚¯ã™ã‚Œã°ç¾åœ¨ã®ã‚¢ãƒ—リケーションã®ãƒ†ãƒ¼ãƒžãŒè¨­å®šã•ã‚Œã¾ã™ï¼Ž -2番目ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ä¸‰ã¤ã®ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³é›†åˆã§ã™ï¼Ž\ -å„集åˆã®é–“ã«ã¯ï¼Œã‚»ãƒ‘レータウィジェットãŒç½®ã‹ã‚Œã¦ã„ã¾ã™ï¼Ž\ -ãªãŠã€Œæœ‰åŠ¹åŒ–ã€ãƒœã‚¿ãƒ³ã¯ï¼Œã“ã®ãƒˆãƒƒãƒ—レベルウィジェット内ã®\ -ä»–ã®ã™ã¹ã¦ã®ãƒ†ãƒ¼ãƒžåŒ–ウィジェットã®çŠ¶æ…‹(state)ãŒ"disabled"ã‹ã©ã†ã‹ã‚’\ -コントロールã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„. -3番目ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯é–¢é€£ä»˜ã‘られãŸãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³é›†åˆã¨ãªã£ã¦ã„ã¾ã™ï¼Ž -EOL - -## Add buttons for setting the theme -buttons = Ttk::Labelframe.new(base_frame, :text=>'ボタン') -# Ttk::Style.theme_names.each{|theme| -# Ttk::Button.new(buttons, :text=>theme, -# :command=>proc{Ttk::Style.theme_use theme}).pack(:pady=>2) -# } -Ttk.themes.each{|theme| - Ttk::Button.new(buttons, :text=>theme, - :command=>proc{Ttk.set_theme theme}).pack(:pady=>2) -} - -## Helper procedure for the top checkbutton -def setState(root, value, *excepts) - return if excepts.member?(root) - - ## Non-Ttk widgets (e.g. the toplevel) will fail, so make it silent - begin - root.state = value - rescue - end - - ## Recursively invoke on all children of this root that are in the same - ## toplevel widget - root.winfo_children.each{|w| - setState(w, value, *excepts) if w.winfo_toplevel == root.winfo_toplevel - } -end - -## Set up the checkbutton group -checks = Ttk::Labelframe.new(base_frame, :text=>'ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³') -enabled = TkVariable.new(true) -e = Ttk::Checkbutton.new(checks, :text=>'有効化', :variable=>enabled, - :command=>proc{ - setState($ttkbut_demo, - ((enabled.bool)? "!disabled" : "disabled"), - e) - }) - -## See ttk_widget(n) for other possible state flags -sep1 = Ttk::Separator.new(checks) -sep2 = Ttk::Separator.new(checks) - -cheese = TkVariable.new -tomato = TkVariable.new -basil = TkVariable.new -oregano = TkVariable.new - -c1 = Ttk::Checkbutton.new(checks, :text=>'ãƒãƒ¼ã‚º', :variable=>cheese) -c2 = Ttk::Checkbutton.new(checks, :text=>'トマト', :variable=>tomato) -c3 = Ttk::Checkbutton.new(checks, :text=>'ãƒã‚¸ãƒ«', :variable=>basil) -c4 = Ttk::Checkbutton.new(checks, :text=>'オレガノ', :variable=>oregano) - -Tk.pack(e, sep1, c1, c2, sep2, c3, c4, :fill=>:x, :pady=>2) - -## Set up the radiobutton group -radios = Ttk::Labelframe.new(base_frame, :text=>'ラジオボタン') - -happiness = TkVariable.new - -r1 = Ttk::Radiobutton.new(radios, :variable=>happiness, - :text=>'Great', :value=>'great') -r2 = Ttk::Radiobutton.new(radios, :variable=>happiness, - :text=>'Good', :value=>'good') -r3 = Ttk::Radiobutton.new(radios, :variable=>happiness, - :text=>'Ok', :value=>'ok') -r4 = Ttk::Radiobutton.new(radios, :variable=>happiness, - :text=>'Poor', :value=>'poor') -r5 = Ttk::Radiobutton.new(radios, :variable=>happiness, - :text=>'Awful', :value=>'awful') - -Tk.pack(r1, r2, r3, r4, r5, :fill=>:x, :padx=>3, :pady=>2) - -## See Code / Dismiss -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'変数å‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{ - showVars(base_frame, ['有効化', enabled], - ['ãƒãƒ¼ã‚º', cheese], ['トマト', tomato], - ['ãƒã‚¸ãƒ«', basil], ['オレガノ', oregano], - ['幸ç¦åº¦', happiness]) - }), - Ttk::Button.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'ttkbut'}), - Ttk::Button.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - tmppath = $ttkbut_demo - $ttkbut_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x, :expand=>true) -} - -## Arrange things neatly -f = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true) -f.lower -Tk.grid(buttons, checks, radios, :in=>f, :sticky=>'nwe', :pady=>2, :padx=>3) -f.grid_columnconfigure([0, 1, 2], :weight=>1, :uniform=>:yes) diff --git a/ext/tk/sample/demos-jp/ttkmenu.rb b/ext/tk/sample/demos-jp/ttkmenu.rb deleted file mode 100644 index b521a3f101..0000000000 --- a/ext/tk/sample/demos-jp/ttkmenu.rb +++ /dev/null @@ -1,92 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# ttkmenu.rb -- -# -# This demonstration script creates a toplevel window containing several Ttk -# menubutton widgets. -# -# based on "Id: ttkmenu.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp" - -if defined?($ttkmenu_demo) && $ttkmenu_demo - $ttkmenu_demo.destroy - $ttkmenu_demo = nil -end - -$ttkmenu_demo = TkToplevel.new {|w| - title("Ttk Menu Buttons") - iconname("ttkmenu") - positionWindow(w) -} - -base_frame = Ttk::Frame.new($ttkmenu_demo).pack(:fill=>:both, :expand=>true) - -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top, :fill=>:x) -Ttkã¨ã¯ï¼Œãƒ†ãƒ¼ãƒžæŒ‡å®šå¯èƒ½ãªæ–°ã—ã„ウィジェット集åˆã§ã™ï¼Ž\ -ã“ã‚Œã«ã‚ˆã‚Šãƒ†ãƒ¼ãƒžã«å¯¾å¿œã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã£ãŸã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®ã²ã¨ã¤ã«\ -メニューボタンãŒã‚ã‚Šã¾ã™ï¼Ž\ -以下ã§ã¯ï¼Œãƒ†ãƒ¼ãƒžã«å¯¾å¿œã—ãŸãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒœã‚¿ãƒ³ãŒã„ãã¤ã‹è¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ï¼Ž\ -ãれらを使ã£ã¦ï¼Œç¾åœ¨ä½¿ç”¨ä¸­ã®ãƒ†ãƒ¼ãƒžã‚’変更ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ï¼Ž\ -テーマã®é¸æŠžãŒãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒœã‚¿ãƒ³è‡ªèº«ã®è¦‹æŽ›ã‘を変化ã•ã›ã‚‹æ§˜å­ã‚„,\ -中央ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒœã‚¿ãƒ³ã ã‘ãŒç•°ãªã‚‹ã‚¹ã‚¿ã‚¤ãƒ«\ -(ツールãƒãƒ¼ã§ã®ä¸€èˆ¬çš„ãªè¡¨ç¤ºã«é©ã—ãŸã‚‚ã®)ã§è¡¨ç¤ºã•ã‚Œã¦ã„る様å­ã«\ -注目ã—ã¦ãã ã•ã„.\ -ãªãŠï¼Œãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒœã‚¿ãƒ³ã«ã¤ã„ã¦ã¯ãƒ†ãƒ¼ãƒžã«å¯¾å¿œã—ãŸã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆãŒã‚ã‚Šã¾ã™ãŒï¼Œ\ -メニューã«ã¤ã„ã¦ã¯ãƒ†ãƒ¼ãƒžã«å¯¾å¿œã—ãŸã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã¯å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“.\ -ãã®ç†ç”±ã¯ï¼Œæ¨™æº–ã®Tkã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆãŒ\ -ã™ã¹ã¦ã®ãƒ—ラットホームã§å分ã«è‰¯å¥½ãªè¦‹æŽ›ã‘ã¨æ“作性をæŒã£ã¦ã„る,\ -特ã«ï¼Œå¤šãã®ç’°å¢ƒã§ãã®ç’°å¢ƒæœ¬æ¥ã®æ“作体系ã¨ãªã‚‹ã‚ˆã†ã«å®Ÿè£…ã•ã‚Œã¦ã„ã‚‹ã¨\ -判断ã•ã‚ŒãŸã“ã¨ã«ã‚ˆã‚Šã¾ã™ï¼Ž -EOL - -Ttk::Separator.new(base_frame).pack(:side=>:top, :fill=>:x) - -## See Code / Dismiss -Ttk::Frame.new($ttkmenu_demo) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'ttkmenu'}), - Ttk::Button.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $ttkmenu_demo.destroy - $ttkmenu_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -b1 = Ttk::Menubutton.new(base_frame,:text=>'テーマをé¸æŠž',:direction=>:above) -b2 = Ttk::Menubutton.new(base_frame,:text=>'テーマをé¸æŠž',:direction=>:left) -b3 = Ttk::Menubutton.new(base_frame,:text=>'テーマをé¸æŠž',:direction=>:right) -b4 = Ttk::Menubutton.new(base_frame,:text=>'テーマをé¸æŠž',:direction=>:flush, - :style=>Ttk::Menubutton.style('Toolbutton')) -b5 = Ttk::Menubutton.new(base_frame,:text=>'テーマをé¸æŠž',:direction=>:below) - -b1.menu(m1 = Tk::Menu.new(b1, :tearoff=>false)) -b2.menu(m2 = Tk::Menu.new(b2, :tearoff=>false)) -b3.menu(m3 = Tk::Menu.new(b3, :tearoff=>false)) -b4.menu(m4 = Tk::Menu.new(b4, :tearoff=>false)) -b5.menu(m5 = Tk::Menu.new(b5, :tearoff=>false)) - -Ttk.themes.each{|theme| - m1.add(:command, :label=>theme, :command=>proc{Ttk.set_theme theme}) - m2.add(:command, :label=>theme, :command=>proc{Ttk.set_theme theme}) - m3.add(:command, :label=>theme, :command=>proc{Ttk.set_theme theme}) - m4.add(:command, :label=>theme, :command=>proc{Ttk.set_theme theme}) - m5.add(:command, :label=>theme, :command=>proc{Ttk.set_theme theme}) -} - -f = Ttk::Frame.new(base_frame).pack(:fill=>:x) -f1 = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true) -f.lower - -f.grid_anchor(:center) -TkGrid('x', b1, 'x', :in=>f, :padx=>3, :pady=>2) -TkGrid(b2, b4, b3, :in=>f, :padx=>3, :pady=>2) -TkGrid('x', b5, 'x', :in=>f, :padx=>3, :pady=>2) diff --git a/ext/tk/sample/demos-jp/ttknote.rb b/ext/tk/sample/demos-jp/ttknote.rb deleted file mode 100644 index 332b1017ab..0000000000 --- a/ext/tk/sample/demos-jp/ttknote.rb +++ /dev/null @@ -1,98 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# ttknote.rb -- -# -# This demonstration script creates a toplevel window containing a Ttk -# notebook widget. -# -# based on "Id: ttknote.tcl,v 1.5 2007/12/13 15:27:07 dgp Exp" - -if defined?($ttknote_demo) && $ttknote_demo - $ttknote_demo.destroy - $ttknote_demo = nil -end - -$ttknote_demo = TkToplevel.new {|w| - title("Ttk Notebook Widget") - iconname("ttknote") - positionWindow(w) -} - -## See Code / Dismiss -Ttk::Frame.new($ttknote_demo) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'ttknote'}), - Ttk::Button.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $ttknote_demo.destroy - $ttknote_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -base_frame = Ttk::Frame.new($ttknote_demo).pack(:fill=>:both, :expand=>true) - -## Make the notebook and set up Ctrl+Tab traversal -notebook = Ttk::Notebook.new(base_frame).pack(:fill=>:both, :expand=>true, - :padx=>2, :pady=>3) -notebook.enable_traversal - -## Populate the first pane -f_msg = Ttk::Frame.new(notebook) -msg_m = Ttk::Label.new(f_msg, :font=>$font, :wraplength=>'5i', - :justify=>:left, :anchor=>'n', :text=><'ã™ã¦ãã ï¼(Neat!)', :underline=>6, - :command=>proc{ - neat.value = 'ã‚ã,ãã®ã¨ãŠã‚Šã•ï¼Žï¼Žï¼Ž' - Tk.after_cancel(after_id) if after_id - after_id = Tk.after(500){neat.value = ''} - }) -msg_b.winfo_toplevel.bind('Alt-n'){ msg_b.focus; msg_b.invoke } -msg_l = Ttk::Label.new(f_msg, :textvariable=>neat) -notebook.add(f_msg, :text=>'説明(Description)', :underline=>3, :padding=>2) -Tk.grid(msg_m, '-', :sticky=>'new', :pady=>2) -Tk.grid(msg_b, msg_l, :pady=>[2, 4], :padx=>20) -msg_b.grid_configure(:sticky=>'e') -msg_l.grid_configure(:sticky=>'w') -f_msg.grid_rowconfigure(1, :weight=>1) -f_msg.grid_columnconfigure([0, 1], :weight=>1, :uniform=>1) - -## Populate the second pane. Note that the content doesn't really matter -f_disabled = Ttk::Frame.new(notebook) -notebook.add(f_disabled, :text=>'無効化ã•ã‚ŒãŸã‚¿ãƒ–', :state=>:disabled) - -## Populate the third pane -f_editor = Ttk::Frame.new(notebook) -notebook.add(f_editor, :text=>'テキストエディタ(Text Editor)', :underline=>9) -editor_t = Tk::Text.new(f_editor, :width=>40, :height=>10, :wrap=>:char) -if Tk.windowingsystem != 'aqua' - editor_s = editor_t.yscrollbar(Ttk::Scrollbar.new(f_editor)) -else - editor_s = editor_t.yscrollbar(Tk::Scrollbar.new(f_editor)) -end -editor_s.pack(:side=>:right, :fill=>:y, :padx=>[0,2], :pady=>2) -editor_t.pack(:fill=>:both, :expand=>true, :padx=>[2,0], :pady=>2) diff --git a/ext/tk/sample/demos-jp/ttkpane.rb b/ext/tk/sample/demos-jp/ttkpane.rb deleted file mode 100644 index af7622272c..0000000000 --- a/ext/tk/sample/demos-jp/ttkpane.rb +++ /dev/null @@ -1,217 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# ttkpane.rb -- -# -# This demonstration script creates a Ttk pane with some content. -# -# based on "Id: ttkpane.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp" - -if defined?($ttkpane_demo) && $ttkpane_demo - $ttkpane_demo.destroy - $ttkpane_demo = nil -end - -$ttkpane_demo = TkToplevel.new {|w| - title("Themed Nested Panes") - iconname("ttkpane") - positionWindow(w) -} - -base_frame = TkFrame.new($ttkpane_demo).pack(:fill=>:both, :expand=>true) - -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top, :fill=>:x) -ã“ã®ãƒ‡ãƒ¢ã¯ï¼ŒåŸ‹ã‚è¾¼ã¿é–¢ä¿‚ã«ã‚るテーマ付ãペインドウィンドウを示ã—ã¦ã„ã¾ã™ï¼Ž\ -ãã‚Œãžã‚Œã®å¤§ãã•ã¯ï¼Œå«ã¾ã‚Œã¦ã„るペインã®é–“ã«ã‚るエリアをã¤ã‹ã‚“ã§\ -境界をドラッグã™ã‚‹ã“ã¨ã§å¤‰æ›´ã§ãã¾ã™ï¼Ž -EOL - -Ttk::Separator.new(base_frame).pack(:side=>:top, :fill=>:x) - -## See Code / Dismiss -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'ttkpane'}), - Ttk::Button.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $ttkpane_demo.destroy - $ttkpane_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -frame = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true) - -outer = Ttk::Panedwindow.new(frame, :orient=>:horizontal) -outer.add(in_left = Ttk::Panedwindow.new(outer, :orient=>:vertical)) -outer.add(in_right = Ttk::Panedwindow.new(outer, :orient=>:vertical)) -in_left.add(left_top = Ttk::Labelframe.new(in_left, :text=>'ボタン')) -in_left.add(left_bot = Ttk::Labelframe.new(in_left, :text=>'時計')) -in_right.add(right_top = Ttk::Labelframe.new(in_right, :text=>'プログレス')) -in_right.add(right_bot = Ttk::Labelframe.new(in_right, :text=>'テキスト')) -if Tk.windowingsystem == 'aqua' - [left_top, left_bot, right_top, right_bot].each{|w| w.padding(3) } -end - -# Fill the button pane -Ttk::Button.new(left_top, :text=>'押ã—ã¦ã­', - :command=>proc{ - Tk.messageBox(:type=>'ok', :icon=>'info', - :message=>'ã„ã¦ã¦ï¼', - :detail=>'That hurt...', :parent=>base_frame, - :title=>'Button Pressed') - }).pack(:padx=>2, :pady=>5) - - -zones_list = [ - [':Europe/Berlin'], - [':America/Argentina/Buenos_Aires', ':America/Buenos_Aires'], - [':Africa/Johannesburg'], - [':Europe/London'], - [':America/Los_Angeles'], - [':Europe/Moscow'], - [':America/New_York'], - [':Asia/Singapore'], - [':Australia/Sydney'], - [':Asia/Tokyo'], -] - -zones = [] - -# Check tzinfo support -if $tk_major_ver > 8 || ($tk_major_ver == 8 && $tk_minor_ver >= 5) - tzinfo = :tcl - - zones_list.each{|list| - list.each{|zone| - begin - # Force a pre-load of all the timezones needed; otherwise can end up - # poor-looking synch problems! - Tk.tk_call('clock', 'format', '0', '-timezone', zone) - rescue RuntimeError - # ignore - else - zones << [zone, zone[%r<[^/:]+$>].tr('_', ' ')] - break - end - } - } - -else - begin - require 'tzinfo' - tzinfo = :tzinfo - rescue Exception - begin - require 'tzfile' - tzinfo = :tzfile - rescue Exception - tzinfo = nil - end - end - - case tzinfo - when :tzinfo - zones_list.each{|list| - list.each{|zone| - begin - tz = TZInfo::Timezone.get(zone[%r<[^:]+$>]) - rescue Exception - # ignore - else - zones << [tz, zone[%r<[^/:]+$>].tr('_', ' ')] - break - end - } - } - - when :tzfile - zones_list.each{|list| - list.each{|zone| - begin - tz = TZFile.create(zone[%r<[^:]+$>]) - rescue Exception - # ignore - else - zones << [tz, zone[%r<[^/:]+$>].tr('_', ' ')] - break - end - } - } - - else - [ -7, -4, -2, -1, 0, +1, +3, +8, +9, +10 ].each{|zone| - zones << [zone, 'UTC%+03d00' % zone] - } - end -end - -time = TkVariable.new_hash - -case tzinfo -when :tcl - update_proc = proc{|now, tz, label| - time[label] = Tk.tk_call('clock', 'format', now.tv_sec, - '-timezone', tz, '-format', '%T') - } -when :tzinfo - update_proc = proc{|now, tz, label| - time[label] = tz.utc_to_local(now).strftime('%H:%M:%S') - } -when :tzfile - update_proc = proc{|now, tz, label| - time[label] = tz.at(now.tv_sec).strftime('%H:%M:%S') - } -else - update_proc = proc{|now, tz, label| - time[label] = (now + (tz * 3600)).strftime('%H:%M:%S') - } -end - -# Fill the clocks pane -zones.each_with_index{|(zone, label), idx| - Ttk::Separator.new(left_bot).pack(:fill=>:x) if idx > 0 - Ttk::Label.new(left_bot, :text=>label, :anchor=>'w').pack(:fill=>:x) - Ttk::Label.new(left_bot, :textvariable=>time.ref(label), - :anchor=>'w').pack(:fill=>:x) -} - -# Timer start -every = proc{ - now = Time.now.utc - zones.each{|zone, label| update_proc.call(now, zone, label) } -} -TkRTTimer.new(1000, -1, every).start(0, every) - -# Fill the progress pane -Ttk::Progressbar.new(right_top, :mode=>:indeterminate).pack(:fill=>:both, :expand=>true).start - -# Fill the text pane -if Tk.windowingsystem != 'aqua' - # The trick with the ttk::frame makes the text widget look like it fits with - # the current Ttk theme despite not being a themed widget itself. It is done - # by styling the frame like an entry, turning off the border in the text - # widget, and putting the text widget in the frame with enough space to allow - # the surrounding border to show through (2 pixels seems to be enough). - f = Ttk::Frame.new(right_bot, :style=>Ttk::Entry) - txt = TkText.new(frame, :wrap=>:word, :width=>30, :borderwidth=>0) - txt.pack(:fill=>:both, :expand=>true, :in=>f, :pady=>2, :padx=>2) - scr = txt.yscrollbar(Ttk::Scrollbar.new(frame)) - scr.pack(:side=>:right, :fill=>:y, :in=>right_bot) - f.pack(:fill=>:both, :expand=>true) - outer.pack(:fill=>:both, :expand=>true) -else - txt = TkText.new(frame, :wrap=>:word, :width=>30, :borderwidth=>0) - scr = txt.yscrollbar(TkScrollbar.new(frame)) - scr.pack(:side=>:right, :fill=>:y, :in=>right_bot) - txt.pack(:fill=>:both, :expand=>true, :in=>right_bot) - outer.pack(:fill=>:both, :expand=>true, :padx=>10, :pady=>[6, 10]) -end diff --git a/ext/tk/sample/demos-jp/ttkprogress.rb b/ext/tk/sample/demos-jp/ttkprogress.rb deleted file mode 100644 index 6f0ea4c2df..0000000000 --- a/ext/tk/sample/demos-jp/ttkprogress.rb +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# ttkprogress.rb -- -# -# This demonstration script creates several progress bar widgets. -# -# based on "Id: ttkprogress.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp" - -if defined?($ttkprogress_demo) && $ttkprogress_demo - $ttkprogress_demo.destroy - $ttkprogress_demo = nil -end - -$ttkprogress_demo = TkToplevel.new {|w| - title("Progress Bar Demonstration") - iconname("ttkprogress") - positionWindow(w) -} - -base_frame = TkFrame.new($ttkprogress_demo).pack(:fill=>:both, :expand=>true) - -Ttk::Label.new(base_frame, :font=>$font, :wraplength=>'4i', :justify=>:left, - :text=><:top, :fill=>:x) -下ã«ã‚ã‚‹ã®ã¯äºŒã¤ã®ãƒ—ログレスãƒãƒ¼ã§ã™ï¼Ž\ -上ã®ã‚‚ã®ã¯"determinate"タイプã®ãƒ—ログレスãƒãƒ¼ã§ï¼Œ\ -例ãˆã°ãƒ—ログラムãŒä¸Žãˆã‚‰ã‚ŒãŸã‚¿ã‚¹ã‚¯ã‚’終了ã™ã‚‹ã¾ã§ã«ã©ã®ãらã„ã‹ã‹ã‚‹ã‹ã‚’\ -示ã™ã¨ããªã©ã«ç”¨ã„られã¾ã™ï¼Ž\ -下ã®ã‚‚ã®ã¯"indeterminate"タイプã®ãƒ—ログレスãƒãƒ¼ã§ï¼Œ\ -例ãˆã°ãƒ—ログラムãŒå®Ÿè¡Œä¸­(busy)ã§ã‚ã‚‹ã‚‚ã®ã®\ -終了ã¾ã§ã«ã©ã‚Œãらã„ã‹ã‹ã‚‹ã‹ã¯åˆ†ã‹ã‚‰ãªã„ã¨ã„ã†çŠ¶æ…‹ã‚’\ -示ã™ã¨ããªã©ã«ç”¨ã„られã¾ã™ï¼Ž\ -ã„ãšã‚Œã®ãƒ—ログレスãƒãƒ¼ã‚‚,ã™ã下ã«ã‚るボタンを使ã†ã“ã¨ã§\ -自動アニメーションモードã®ON/OFFを切替ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼Ž -EOL - -## See Code / Dismiss buttons -Ttk::Frame.new(base_frame) {|frame| - sep = Ttk::Separator.new(frame) - Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - Ttk::Button.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'ttkprogress'}), - Ttk::Button.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - $ttkprogress_demo.destroy - $ttkprogress_demo = nil - }), - :padx=>4, :pady=>4) - grid_columnconfigure(0, :weight=>1) - pack(:side=>:bottom, :fill=>:x) -} - -frame = Ttk::Frame.new(base_frame).pack(:fill=>:both, :expand=>true) - -p1 = Ttk::Progressbar.new(frame, :mode=>:determinate) -p2 = Ttk::Progressbar.new(frame, :mode=>:indeterminate) - -start = Ttk::Button.new(frame, :text=>'Start Progress', - :command=>proc{ p1.start; p2.start }) -stop = Ttk::Button.new(frame, :text=>'Stop Progress', - :command=>proc{ p1.stop; p2.stop }) - -Tk.grid(p1, '-', :pady=>5, :padx=>10) -Tk.grid(p2, '-', :pady=>5, :padx=>10) -Tk.grid(start, stop, :padx=>10, :pady=>5) -start.grid_configure(:sticky=>'e') -stop.grid_configure(:sticky=>'w') -frame.grid_columnconfigure(:all, :weight=>1) - diff --git a/ext/tk/sample/demos-jp/twind.rb b/ext/tk/sample/demos-jp/twind.rb deleted file mode 100644 index 7db7576c6e..0000000000 --- a/ext/tk/sample/demos-jp/twind.rb +++ /dev/null @@ -1,293 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# text (embedded windows) widget demo (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($twind_demo) && $twind_demo - $twind_demo.destroy - $twind_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$twind_demo = TkToplevel.new {|w| - title("Text Demonstration - Embedded Windows") - iconname("Embedded Windows") - positionWindow(w) -} - -base_frame = TkFrame.new($twind_demo).pack(:fill=>:both, :expand=>true) - -# frame ç”Ÿæˆ -$twind_buttons = TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc{ - tmppath = $twind_demo - $twind_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc{showCode 'twind'} - }.pack('side'=>'left', 'expand'=>'yes') -} -$twind_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -$twind_text = nil -TkFrame.new(base_frame, 'highlightthickness'=>2, 'borderwidth'=>2, - 'relief'=>'sunken') {|f| - $twind_text = TkText.new(f, 'setgrid'=>'true', 'font'=>$font, - 'width'=>'70', 'height'=>35, 'wrap'=>'word', - 'highlightthickness'=>0, 'borderwidth'=>0 ){|t| - TkScrollbar.new(f) {|s| - command proc{|*args| t.yview(*args)} - t.yscrollcommand proc{|first,last| s.set first,last} - }.pack('side'=>'right', 'fill'=>'y') - }.pack('expand'=>'yes', 'fill'=>'both') -}.pack('expand'=>'yes', 'fill'=>'both') - -# ã‚¿ã‚°ç”Ÿæˆ -$tag_center = TkTextTag.new($twind_text, - 'justify' =>'center', - 'spacing1'=>'5m', - 'spacing3'=>'5m' ) -$tag_buttons = TkTextTag.new($twind_text, - 'lmargin1'=>'1c', - 'lmargin2'=>'1c', - 'rmargin' =>'1c', - 'spacing1'=>'3m', - 'spacing2'=>0, - 'spacing3'=>0 ) - -# テキストã®ç”Ÿæˆ -$twind_text.insert('end', - 'テキストwidget上ã«ä»–ã®widgetを組ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚') -$twind_text.insert('end', - '組ã¿è¾¼ã¿ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¨å‘¼ã°ã‚Œã€ä»»æ„ã®widgetãŒå¯èƒ½ã§ã™ã€‚') -$twind_text.insert('end', - '例ãˆã°ã€ã“ã“ã«2ã¤ã®ãƒœã‚¿ãƒ³widgetãŒçµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã™ã€‚') -$twind_text.insert('end', '最åˆã®ãƒœã‚¿ãƒ³ã‚’クリックã™ã¨æ°´å¹³æ–¹å‘ã®ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã‚’') -TkTextWindow.new($twind_text, 'end', - 'window'=>TkButton.new($twind_text) { - #text 'ON' - text 'オン' - command proc{textWindOn $twind_text,$twind_buttons} - cursor 'top_left_arrow' - }) -$twind_text.insert('end', "ã«ã—ã¾ã™ã€‚ã¾ãŸ2ã¤ã‚ã®ãƒœã‚¿ãƒ³ã‚’クリックã™ã‚‹ã¨\n") -$twind_text.insert('end', '水平方å‘ã®ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã‚’') -TkTextWindow.new($twind_text, 'end', - 'window'=>TkButton.new($twind_text) { - #text 'OFF' - text 'オフ' - command proc{textWindOff $twind_text} - cursor 'top_left_arrow' - }) -$twind_text.insert('end', 'ã«ã—ã¾ã™ã€‚') - -$twind_text.insert('end', 'ã‚‚ã†ã²ã¨ã¤ã®ä¾‹ã§ã™ã€‚') -TkTextWindow.new($twind_text, 'end', - 'window'=>TkButton.new($twind_text) { - text 'ã“ã“をクリック' - command proc{textWindPlot $twind_text} - cursor 'top_left_arrow' - }) -$twind_text.insert('end', 'ã™ã‚‹ã¨ã€x-yプロットãŒã“ã“ã«ç¾ã‚Œã¾ã™ã€‚') -$mark_plot = TkTextMark.new($twind_text, 'insert') -$mark_plot.gravity='left' -$twind_text.insert('end', 'マウスã§ãƒ‡ãƒ¼ã‚¿ã‚’æç”»ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚') -TkTextWindow.new($twind_text, 'end', - 'window'=>TkButton.new($twind_text) { - text '消去' - command proc{textWindDel $twind_text} - cursor 'top_left_arrow' - }) -$twind_text.insert('end', 'をクリックã™ã‚‹ã¨å…ƒã«æˆ»ã‚Šã¾ã™ã€‚ - -') - -$twind_text.insert('end', '組ã¿è¾¼ã¿ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã ã‘をテキストwidget上ã«ã€å®Ÿéš›ã®') -$twind_text.insert('end', 'テキストã¯ãªã—ã§çµ„ã¿è¾¼ã‚€ã“ã¨ã¯ä¾¿åˆ©ã§ã™ã€‚') -$twind_text.insert('end', 'ã“ã®å ´åˆã¯ã€ãƒ†ã‚­ã‚¹ãƒˆwidgetã¯ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãƒžãƒãƒ¼ã‚¸ãƒ£ã®') -$twind_text.insert('end', 'よã†ã«å‹•ä½œã—ã¾ã™ã€‚例ãˆã°ã€ã“ã“ã«ã¯ãƒ†ã‚­ã‚¹ãƒˆwidgetã«') -$twind_text.insert('end', 'よã£ã¦ãƒœã‚¿ãƒ³ãŒãã‚Œã„ã«ä¸¦ã¹ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚') -$twind_text.insert('end', 'ã“れらã®ãƒœã‚¿ãƒ³ã§èƒŒæ™¯è‰²ã‚’変ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™') -$twind_text.insert('end', '("Default"ã§å…ƒã®è‰²ã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã™)。') -$twind_text.insert('end', '"Short"ã¨ã„ã†ãƒœã‚¿ãƒ³ã‚’クリックã™ã‚‹ã¨æ–‡å­—列ã®é•·ã•ãŒ') -$twind_text.insert('end', '変ã‚ã‚Šã¾ã™ã€‚ã™ã‚‹ã¨è‡ªå‹•çš„ã«ãƒ†ã‚­ã‚¹ãƒˆwidgetãŒ') -$twind_text.insert('end', 'レイアウトを整ãˆã¦ãã‚Œã¾ã™ã€‚') -$twind_text.insert('end', 'ã‚‚ã†ä¸€åº¦åŒã˜ãƒœã‚¿ãƒ³ã‚’押ã™ã¨å…ƒã«æˆ»ã‚Šã¾ã™ã€‚ - -') - -TkTextWindow.new($twind_text, 'end', - 'window'=>TkButton.new($twind_text) {|b| - text 'デフォルト' - command proc{embDefBg $twind_text} - cursor 'top_left_arrow' - $tag_buttons.add('end') - }, - 'padx'=>3 ) -embToggle = TkVariable.new('Short') -TkTextWindow.new($twind_text, 'end', - 'window'=>TkCheckButton.new($twind_text) { - textvariable embToggle - indicatoron 0 - variable embToggle - onvalue 'A much longer string' - offvalue 'Short' - cursor 'top_left_arrow' - pady 5 - padx 2 - }, - 'padx'=>3, - 'pady'=>2 ) - -[ 'AntiqueWhite3', 'Bisque1', 'Bisque2', 'Bisque3', 'Bisque4', - 'SlateBlue3', 'RoyalBlue1', 'SteelBlue2', 'DeepSkyBlue3', 'LightBlue1', - 'DarkSlateGray1', 'Aquamarine2', 'DarkSeaGreen2', 'SeaGreen1', - 'Yellow1', 'IndianRed1', 'IndianRed2', 'Tan1', 'Tan4' -].each{|twind_color| - TkTextWindow.new($twind_text, 'end', - 'window'=>TkButton.new($twind_text) { - text twind_color - cursor 'top_left_arrow' - command proc{$twind_text.bg twind_color} - }, - 'padx'=>3, - 'pady'=>2 ) -} - -# メソッド定義 -def textWindOn (w,f) - if defined? $twind_scroll - begin - $twind_scroll.destroy - rescue - end - $twind_scroll = nil - end - - base = TkWinfo.parent( TkWinfo.parent(w) ) - $twind_scroll = TkScrollbar.new(base) {|s| - orient 'horizontal' - command proc{|*args| w.xview(*args)} - w.xscrollcommand proc{|first,last| s.set first,last} - w.wrap 'none' - pack('after'=>f, 'side'=>'bottom', 'fill'=>'x') - } - - return nil -end - -def textWindOff (w) - if defined? $twind_scroll - begin - $twind_scroll.destroy - rescue - end - $twind_scroll = nil - end - w.xscrollcommand '' - w.wrap 'word' -end - -def textWindPlot (t) - if (defined? $twind_plot) && (TkWinfo.exist?($twind_plot)) - return - end - - $twind_plot = TkCanvas.new(t) { - relief 'sunken' - width 450 - height 300 - cursor 'top_left_arrow' - } - - if $tk_version =~ /^4.*/ - font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' - else - font = 'Helvetica 18' - end - - TkcLine.new($twind_plot, 100, 250, 400, 250, 'width'=>2) - TkcLine.new($twind_plot, 100, 250, 100, 50, 'width'=>2) - TkcText.new($twind_plot, 225, 20, - 'text'=>"A Simple Plot", 'font'=>font, 'fill'=>'brown') - - (0..10).each {|i| - x = 100 + (i * 30) - TkcLine.new($twind_plot, x, 250, x, 245, 'width'=>2) - TkcText.new($twind_plot, x, 254, - 'text'=>10*i, 'font'=>font, 'anchor'=>'n') - } - (0..5).each {|i| - y = 250 - (i * 40) - TkcLine.new($twind_plot, 100, y, 105, y, 'width'=>2) - TkcText.new($twind_plot, 96, y, - 'text'=>"#{i*50}.0", 'font'=>font, 'anchor'=>'e') - } - - for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]] - x = 100 + (3*xx) - y = 250 - (4*yy)/5 - item = TkcOval.new($twind_plot, x-6, y-6, x+6, y+6, - 'width'=>1, 'outline'=>'black', 'fill'=>'SkyBlue2') - item.addtag 'point' - end - - $twind_plot.itembind('point', 'Any-Enter', - proc{$twind_plot.itemconfigure 'current', 'fill', 'red'}) - $twind_plot.itembind('point', 'Any-Leave', - proc{$twind_plot.itemconfigure 'current', 'fill', 'SkyBlue2'}) - $twind_plot.itembind('point', '1', - proc{|x,y| embPlotDown $twind_plot,x,y}, "%x %y") - $twind_plot.itembind('point', 'ButtonRelease-1', - proc{$twind_plot.dtag 'selected'}) - $twind_plot.bind('B1-Motion', - proc{|x,y| embPlotMove $twind_plot,x,y}, "%x %y") - while ($twind_text.get($mark_plot) =~ /[ \t\n]/) - $twind_text.delete $mark_plot - end - $twind_text.insert $mark_plot,"\n" - TkTextWindow.new($twind_text, $mark_plot, 'window'=>$twind_plot) - $tag_center.add $mark_plot - $twind_text.insert $mark_plot,"\n" -end - -$embPlot = {'lastX'=>0, 'lastY'=>0} - -def embPlotDown (w, x, y) - w.dtag 'selected' - w.addtag_withtag 'selected', 'current' - w.raise 'current' - $embPlot['lastX'] = x - $embPlot['lastY'] = y -end - -def embPlotMove (w, x, y) - w.move 'selected', x - $embPlot['lastX'], y - $embPlot['lastY'] - $embPlot['lastX'] = x - $embPlot['lastY'] = y -end - -def textWindDel (w) - if (defined? $twind_text) && TkWinfo.exist?($twind_plot) - $twind_text.delete $twind_plot - $twind_plot = nil - while ($twind_text.get($mark_plot) =~ /[ \t\n]/) - $twind_text.delete $mark_plot - end - $twind_text.insert $mark_plot," " - end -end - -def embDefBg (w) - w['background'] = w.configinfo('background')[3] -end diff --git a/ext/tk/sample/demos-jp/twind2.rb b/ext/tk/sample/demos-jp/twind2.rb deleted file mode 100644 index c5bef5bce0..0000000000 --- a/ext/tk/sample/demos-jp/twind2.rb +++ /dev/null @@ -1,385 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# text (embedded windows) widget demo 2 (called by 'widget') -# - -# toplevel widget ãŒå­˜åœ¨ã™ã‚Œã°å‰Šé™¤ã™ã‚‹ -if defined?($twind2_demo) && $twind2_demo - $twind2_demo.destroy - $twind2_demo = nil -end - -# demo 用㮠toplevel widget ã‚’ç”Ÿæˆ -$twind2_demo = TkToplevel.new {|w| - title("Text Demonstration - Embedded Windows 2") - iconname("Embedded Windows") - positionWindow(w) -} - -base_frame = TkFrame.new($twind2_demo).pack(:fill=>:both, :expand=>true) - -# frame ç”Ÿæˆ -$twind2_buttons = TkFrame.new(base_frame) {|frame| - TkGrid(TkFrame.new(frame, :height=>2, :relief=>:sunken, :bd=>2), - :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2) - TkGrid('x', - TkButton.new(frame, :text=>'コードå‚ç…§', - :image=>$image['view'], :compound=>:left, - :command=>proc{showCode 'twind2'}), - TkButton.new(frame, :text=>'é–‰ã˜ã‚‹', - :image=>$image['delete'], :compound=>:left, - :command=>proc{ - tmppath = $twind2_demo - $twind2_demo = nil - $showVarsWin[tmppath.path] = nil - tmppath.destroy - }), - :padx=>4, :pady=>4) - frame.grid_columnconfigure(0, :weight=>1) -} -$twind2_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -# frame ç”Ÿæˆ -$twind2_text = nil -TkFrame.new(base_frame, 'highlightthickness'=>2, 'borderwidth'=>2, - 'relief'=>'sunken') {|f| - $twind2_text = TkText.new(f, 'setgrid'=>true, 'font'=>$font, - # 'width'=>'70', 'height'=>35, 'wrap'=>'word', - 'width'=>'70', 'height'=>35, 'wrap'=>'char', - 'highlightthickness'=>0, 'borderwidth'=>0 ){|t| - TkScrollbar.new(f) {|s| - command proc{|*args| t.yview(*args)} - t.yscrollcommand proc{|first,last| s.set first,last} - }.pack('side'=>'right', 'fill'=>'y') - }.pack('expand'=>'yes', 'fill'=>'both') -}.pack('expand'=>'yes', 'fill'=>'both') - -# ã‚¿ã‚°ç”Ÿæˆ -$tag2_center = TkTextTag.new($twind2_text, - 'justify' =>'center', - 'spacing1'=>'5m', - 'spacing3'=>'5m' ) -$tag2_buttons = TkTextTag.new($twind2_text, - 'lmargin1'=>'1c', - 'lmargin2'=>'1c', - 'rmargin' =>'1c', - 'spacing1'=>'3m', - 'spacing2'=>0, - 'spacing3'=>0 ) - -# テキストã®ç”Ÿæˆ -$twind2_text.insert('end', 'テキストウィジェットã«ã¯è‰²ã€…ãªç¨®é¡žã®ã‚¢ã‚¤ãƒ†ãƒ ') -$twind2_text.insert('end', '(動的ãªã‚‚ã®ã‚„é™çš„ãªã‚‚ã®ã®ä¸¡æ–¹ãŒã‚ã‚Šã¾ã™ï¼‰ã‚’') -$twind2_text.insert('end', '数多ãå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã†ã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã¯') -$twind2_text.insert('end', '行替ãˆã€ã‚¿ãƒ–ã€ä¸­å¤®æƒãˆãªã©ã®æ§˜ã€…ãªæ–¹æ³•ã§') -$twind2_text.insert('end', 'é…ç½®ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚') -$twind2_text.insert('end', '加ãˆã¦ã€ãƒ†ã‚­ã‚¹ãƒˆã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®å†…容物ãŒ') -$twind2_text.insert('end', 'ウィンドウサイズã«æ¯”ã¹ã¦å¤§ãã™ãŽã‚‹å ´åˆã§ã‚‚') -$twind2_text.insert('end', 'ã™ã¹ã¦ã®æ–¹å‘ã«ã‚¹ãƒ ãƒ¼ã‚ºã«ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã•ã›ã¦') -$twind2_text.insert('end', '確èªã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚') -$twind2_text.insert('end', "\n\n") -$twind2_text.insert('end', 'テキストウィジェット上ã«ã¯ä»–ã®ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã‚’') -$twind2_text.insert('end', 'å«ã‚ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã†ã—ãŸã‚‚ã®ã¯') -$twind2_text.insert('end', '「埋ã‚è¾¼ã¿ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã€ã¨å‘¼ã°ã‚Œã€ãã®ä¸­ã«') -$twind2_text.insert('end', 'ã„ã‹ãªã‚‹ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã§ã‚‚è©°ã‚込むã“ã¨ãŒã§ãã¾ã™ã€‚') -$twind2_text.insert('end', '例ãˆã°ï¼Œã“ã“ã«ã¯ï¼’ã¤ã®') -$twind2_text.insert('end', 'ボタンウィジェットãŒåŸ‹ã‚è¾¼ã¾ã‚Œã¦ã„ã¾ã™ã€‚') -$twind2_text.insert('end', '最åˆã®ãƒœã‚¿ãƒ³ã‚’クリックã™ã‚‹ã¨ã€') -$twind2_text.insert('end', '水平方å‘ã®ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã‚’ ') -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text) { - #text 'ON' - text 'オン' - command proc{textWindOn2 $twind2_text,$twind2_buttons} - cursor 'top_left_arrow' - }) -$twind2_text.insert('end', "ã«ã—ã¾ã™ã€‚ã¾ãŸã€ï¼’ã¤ã‚ã®ãƒœã‚¿ãƒ³ã‚’クリックã™ã‚‹ã¨\n") -$twind2_text.insert('end', '水平方å‘ã®ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã‚’') -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text) { - #text 'OFF' - text 'オフ' - command proc{textWindOff2 $twind2_text} - cursor 'top_left_arrow' - }) -$twind2_text.insert('end', "ã«ã—ã¾ã™ã€‚\n\n") - -$twind2_text.insert('end', '次ã¯ã‚‚ã†ã²ã¨ã¤ã®ä¾‹ã§ã™ã€‚') -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text) { - text 'ã“ã“をクリック' - command proc{textWindPlot2 $twind2_text} - cursor 'top_left_arrow' - }) -$twind2_text.insert('end', 'ã™ã‚‹ã¨ã€x-yプロットãŒã“ã“ã«ç¾ã‚Œã¾ã™ã€‚') -$mark2_plot = TkTextMark.new($twind2_text, 'insert') -$mark2_plot.gravity='left' -$twind2_text.insert('end', 'マウスã§ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã§ã€') -$twind2_text.insert('end', 'プロット上ã®ãƒ‡ãƒ¼ã‚¿ç‚¹ã‚’移動ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚') -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text) { - text '消去' - command proc{textWindDel2 $twind2_text} - cursor 'top_left_arrow' - }) -$twind2_text.insert('end', 'をクリックã™ã‚‹ã¨å…ƒã«æˆ»ã‚Šã¾ã™ã€‚') -$twind2_text.insert('end', "\n\n") - -$twind2_text.insert('end', '表示ã™ã‚‹ãƒ†ã‚­ã‚¹ãƒˆãªã—ã«åŸ‹ã‚è¾¼ã¿ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã ã‘ã‚’') -$twind2_text.insert('end', 'テキストウィジェットã«å«ã‚ã‚‹ã“ã¨ã‚‚有用ã§ã—ょã†ã€‚') -$twind2_text.insert('end', 'ã“ã®å ´åˆã€ãƒ†ã‚­ã‚¹ãƒˆã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã¯') -$twind2_text.insert('end', 'ジオメトリマãƒãƒ¼ã‚¸ãƒ£ã®ã‚ˆã†ã«åƒãã¾ã™ã€‚') -$twind2_text.insert('end', '例ãˆã°ã€ã“ã“ã«ã¯ãƒ†ã‚­ã‚¹ãƒˆã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã«') -$twind2_text.insert('end', 'よã£ã¦ãƒœã‚¿ãƒ³ãŒãã‚Œã„ã«æ•´åˆ—ã—ã¦é…ç½®ã•ã‚Œã¦ã„ã¾ã™ã€‚') -$twind2_text.insert('end', 'ã“れらã®ãƒœã‚¿ãƒ³ã‚’クリックã™ã‚‹ã“ã¨ã§ã€') -$twind2_text.insert('end', 'ã“ã®ãƒ†ã‚­ã‚¹ãƒˆã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®èƒŒæ™¯è‰²ã‚’') -$twind2_text.insert('end', '変ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™("デフォルト"ボタンã§') -$twind2_text.insert('end', 'å…ƒã®è‰²ã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã™)。') -$twind2_text.insert('end', '"Short"ã¨ã„ã†ãƒœã‚¿ãƒ³ã‚’クリックã™ã‚‹ã¨æ–‡å­—列ã®é•·ã•ãŒ') -$twind2_text.insert('end', '変ã‚ã‚Šã€ãƒ†ã‚­ã‚¹ãƒˆã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆãŒè‡ªå‹•çš„ã«') -$twind2_text.insert('end', 'レイアウトを整ãˆã‚‹æ§˜å­ã‚’見るã“ã¨ãŒã§ãã¾ã™ã€‚') -$twind2_text.insert('end', 'ã‚‚ã†ä¸€åº¦åŒã˜ãƒœã‚¿ãƒ³ã‚’押ã™ã¨å…ƒã«æˆ»ã‚Šã¾ã™ã€‚') -$twind2_text.insert('end', "\n") - -btn_default = TkButton.new($twind2_text) {|b| - text 'デフォルト' - command proc{embDefBg2 $twind2_text} - cursor 'top_left_arrow' -} -TkTextWindow.new($twind2_text, 'end', 'window'=>btn_default, 'padx'=>3) -embToggle = TkVariable.new('Short') -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkCheckButton.new($twind2_text) { - textvariable embToggle - indicatoron 0 - variable embToggle - onvalue 'A much longer string' - offvalue 'Short' - cursor 'top_left_arrow' - pady 5 - padx 2 - }, - 'padx'=>3, - 'pady'=>2 ) - -[ 'AntiqueWhite3', 'Bisque1', 'Bisque2', 'Bisque3', 'Bisque4', - 'SlateBlue3', 'RoyalBlue1', 'SteelBlue2', 'DeepSkyBlue3', 'LightBlue1', - 'DarkSlateGray1', 'Aquamarine2', 'DarkSeaGreen2', 'SeaGreen1', - 'Yellow1', 'IndianRed1', 'IndianRed2', 'Tan1', 'Tan4' -].each{|twind_color| - TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text) { - text twind_color - cursor 'top_left_arrow' - command proc{$twind2_text.bg twind_color} - }, - 'padx'=>3, - 'pady'=>2 ) -} - -$tag2_buttons.add(btn_default, 'end') - -$text_normal2 = {} -$text_normal2['border'] = $twind2_text.cget('borderwidth') -$text_normal2['highlight'] = $twind2_text.cget('highlightthickness') -$text_normal2['pad'] = $twind2_text.cget('padx') - -$twind2_text.insert('end', "\nborder width ã‚„ highlightthickness, ") -$twind2_text.insert('end', "padding を通常ã®å€¤ã‹ã‚‰å¤‰æ›´ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚\n") - -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text, :text=>"Big borders", - :cursor=>'top_left_arrow', - 'command'=>proc{ - textWinBigB2 $twind2_text - })) - -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text, :text=>"Small borders", - :cursor=>'top_left_arrow', - 'command'=>proc{ - textWinSmallB2 $twind2_text - })) - -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text, :text=>"Big highlight", - :cursor=>'top_left_arrow', - 'command'=>proc{ - textWinBigH2 $twind2_text - })) - -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text, :text=>"Small highlight", - :cursor=>'top_left_arrow', - 'command'=>proc{ - textWinSmallH2 $twind2_text - })) - -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text, :text=>"Big pad", - :cursor=>'top_left_arrow', - 'command'=>proc{ - textWinBigP2 $twind2_text - })) - -TkTextWindow.new($twind2_text, 'end', - 'window'=>TkButton.new($twind2_text, :text=>"Small pad", - :cursor=>'top_left_arrow', - 'command'=>proc{ - textWinSmallP2 $twind2_text - })) - -$twind2_text.insert('end', "\n\næ›´ã«ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚‚テキストウィジェットã«") -$twind2_text.insert('end', "ã†ã¾ãé…ç½®ã§ãã¾ã™ï¼š") - -TkTextImage.new($twind2_text, 'end', - 'image'=>TkBitmapImage.new(:file=>[ - $demo_dir, '..', - 'images', 'face.xbm' - ].join(File::Separator))) - -# メソッド定義 -def textWinBigB2(w) - w.borderwidth 15 -end -def textWinSmallB2(w) - w.borderwidth $text_normal2['border'] -end -def textWinBigH2(w) - w.highlightthickness 15 -end -def textWinSmallH2(w) - w.highlightthickness $text_normal2['highlight'] -end -def textWinBigP2(w) - w.configure(:padx=>15, :pady=>15) -end -def textWinSmallP2(w) - w.configure(:padx=>$text_normal2['pad'], :pady=>$text_normal2['pad']) -end - -def textWindOn2 (w,f) - if defined? $twind2_scroll - begin - $twind2_scroll.destroy - rescue - end - $twind2_scroll = nil - end - - base = TkWinfo.parent( TkWinfo.parent(w) ) - $twind2_scroll = TkScrollbar.new(base) {|s| - orient 'horizontal' - command proc{|*args| w.xview(*args)} - w.xscrollcommand proc{|first,last| s.set first,last} - w.wrap 'none' - pack('after'=>f, 'side'=>'bottom', 'fill'=>'x') - } - - return nil -end - -def textWindOff2 (w) - if defined? $twind2_scroll - begin - $twind2_scroll.destroy - rescue - end - $twind2_scroll = nil - end - w.xscrollcommand '' - #w.wrap 'word' - w.wrap 'char' -end - -def textWindPlot2 (t) - if (defined? $twind2_plot) && (TkWinfo.exist?($twind2_plot)) - return - end - - $twind2_plot = TkCanvas.new(t) { - relief 'sunken' - width 450 - height 300 - cursor 'top_left_arrow' - } - - #font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' - font = 'Helvetica 18' - - TkcLine.new($twind2_plot, 100, 250, 400, 250, 'width'=>2) - TkcLine.new($twind2_plot, 100, 250, 100, 50, 'width'=>2) - TkcText.new($twind2_plot, 225, 20, - 'text'=>"A Simple Plot", 'font'=>font, 'fill'=>'brown') - - (0..10).each {|i| - x = 100 + (i * 30) - TkcLine.new($twind2_plot, x, 250, x, 245, 'width'=>2) - TkcText.new($twind2_plot, x, 254, - 'text'=>10*i, 'font'=>font, 'anchor'=>'n') - } - (0..5).each {|i| - y = 250 - (i * 40) - TkcLine.new($twind2_plot, 100, y, 105, y, 'width'=>2) - TkcText.new($twind2_plot, 96, y, - 'text'=>"#{i*50}.0", 'font'=>font, 'anchor'=>'e') - } - - for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]] - x = 100 + (3*xx) - y = 250 - (4*yy)/5 - item = TkcOval.new($twind2_plot, x-6, y-6, x+6, y+6, - 'width'=>1, 'outline'=>'black', 'fill'=>'SkyBlue2') - item.addtag 'point' - end - - $twind2_plot.itembind('point', 'Any-Enter', - proc{$twind2_plot.itemconfigure 'current', 'fill', 'red'}) - $twind2_plot.itembind('point', 'Any-Leave', - proc{$twind2_plot.itemconfigure 'current', 'fill', 'SkyBlue2'}) - $twind2_plot.itembind('point', '1', - proc{|x,y| embPlotDown2 $twind2_plot,x,y}, "%x %y") - $twind2_plot.itembind('point', 'ButtonRelease-1', - proc{$twind2_plot.dtag 'selected'}) - $twind2_plot.bind('B1-Motion', - proc{|x,y| embPlotMove2 $twind2_plot,x,y}, "%x %y") - while ($twind2_text.get($mark2_plot) =~ /[ \t\n]/) - $twind2_text.delete $mark2_plot - end - $twind2_text.insert $mark2_plot,"\n" - TkTextWindow.new($twind2_text, $mark2_plot, 'window'=>$twind2_plot) - $tag2_center.add $mark2_plot - $twind2_text.insert $mark2_plot,"\n" -end - -$embPlot2 = {'lastX'=>0, 'lastY'=>0} - -def embPlotDown2 (w, x, y) - w.dtag 'selected' - w.addtag_withtag 'selected', 'current' - w.raise 'current' - $embPlot2['lastX'] = x - $embPlot2['lastY'] = y -end - -def embPlotMove2 (w, x, y) - w.move 'selected', x - $embPlot2['lastX'], y - $embPlot2['lastY'] - $embPlot2['lastX'] = x - $embPlot2['lastY'] = y -end - -def textWindDel2 (w) - if (defined? $twind2_text) && TkWinfo.exist?($twind2_plot) - $twind2_text.delete $twind2_plot - $twind2_plot = nil - while ($twind2_text.get($mark2_plot) =~ /[ \t\n]/) - $twind2_text.delete $mark2_plot - end - $twind2_text.insert $mark2_plot," " - end -end - -def embDefBg2 (w) - w['background'] = w.configinfo('background')[3] -end diff --git a/ext/tk/sample/demos-jp/unicodeout.rb b/ext/tk/sample/demos-jp/unicodeout.rb deleted file mode 100644 index 966f85f331..0000000000 --- a/ext/tk/sample/demos-jp/unicodeout.rb +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# unicodeout.rb -- -# -# This demonstration script shows how you can produce output (in label -# widgets) using many different alphabets. -# -# based on Tcl/Tk8.4.4 widget demos - -if defined?($unicodeout_demo) && $unicodeout_demo - $unicodeout_demo.destroy - $unicodeout_demo = nil -end - -$unicodeout_demo = TkToplevel.new {|w| - title("Unicode Label Demonstration") - iconname("unicodeout") - positionWindow(w) -} - -base_frame = TkFrame.new($unicodeout_demo).pack(:fill=>:both, :expand=>true) - -TkLabel.new(base_frame, - :font=>$font, :wraplength=>'5.4i', :justify=>:left, - :text=><:top) -ã“ã‚Œã¯ï¼ŒTkã«ãŠã‘ã‚‹éžæ¬§ç±³æ–‡å­—集åˆã‚’用ã„る言語ã«å¯¾ã™ã‚‹ã‚µãƒãƒ¼ãƒˆã«ã¤ã„ã¦ã®\ -サンプルã§ã™ï¼ŽãŸã ã—,下ã®è¡¨ç¤ºã«ãŠã„ã¦ã‚ãªãŸãŒå®Ÿéš›ã«ã©ã®ã‚ˆã†ãªè¡¨ç¤ºã‚’\ -ç›®ã«ã™ã‚‹ã‹ã¯ï¼Œã‚ãªãŸã®ç’°å¢ƒã«ã©ã®ã‚ˆã†ãªæ–‡å­—集åˆãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã‚‹ã‹ã«\ -大ããä¾å­˜ã—ã¾ã™ï¼Žã¾ãŸï¼Œå¯¾è±¡ã¨ãªã‚‹æ–‡å­—集åˆãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ãªã„å ´åˆã«\ -ã©ã®ã‚ˆã†ãªè¡¨ç¤ºãŒãªã•ã‚Œã‚‹ã‹ã‚‚ã‚ãªãŸã®ç’°å¢ƒæ¬¡ç¬¬ã§ã™ï¼Ž\ -「コードå‚ç…§ã€ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ã‚½ãƒ¼ã‚¹ã‚’表示ã—,\ -Unicodeout_SampleFrameクラスã®@@fontã®å®šç¾©ã‚’書ãæ›ãˆã¦\ -(ファイルã®å†…容ã¯å¤‰æ›´ã•ã‚Œã¾ã›ã‚“)\ -「å†å®Ÿè¡Œã€ãƒœã‚¿ãƒ³ã®ã‚¯ãƒªãƒƒã‚¯ã‚’試ã—ã¦ã¿ã¦ãã ã•ã„. -スクリプトãŒå¯æ¬æ€§ã‚’æŒã¤ã‚ˆã†ã«ï¼Œæ–‡å­—列ã¯\\uXXXXã¨ã„ã†\ -Tclã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—表ç¾ã‚’用ã„ãŸUNICODE文字列ã§æ›¸ã‹ã‚Œã¦ã„ã¾ã™ï¼Ž\ -文字列ã¯ï¼ŒTk::UTF8_Stringメソッドã«ã‚ˆã£ã¦ï¼Œ\ -「UTF8å½¢å¼ã®æ–‡å­—列ã§ã‚ã‚‹ã€ã¨ã„ã†\ -エンコード情報付ãã®æ–‡å­—列オブジェクト\ -(Tclã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—表ç¾ã®å¤‰æ›æ¸ˆã¿)ã«å¤‰æ›ã—ã¦\ -ラベルウィジェットã«æ¸¡ã—ã¦ã„る点ã«æ³¨æ„ã—ã¦ãã ã•ã„. -EOL -#' - -TkFrame.new(base_frame){|f| - pack(:side=>:bottom, :fill=>:x, :pady=>'2m') - - TkButton.new(f, :text=>'é–‰ã˜ã‚‹', :width=>15, :command=>proc{ - $unicodeout_demo.destroy - $unicodeout_demo = nil - }).pack(:side=>:left, :expand=>true) - - TkButton.new(f, :text=>'コードå‚ç…§', :width=>15, :command=>proc{ - showCode 'unicodeout' - }).pack(:side=>:left, :expand=>true) -} - -wait_msg = TkLabel.new(base_frame, - :text=>"フォント読ã¿è¾¼ã¿ã®å®Œäº†ã¾ã§" + - "ã—ã°ã‚‰ããŠå¾…ã¡ä¸‹ã•ã„...", - :font=>"Helvetica 12 italic").pack - -class Unicodeout_SampleFrame < TkFrame - @@font = $font - # @@font = 'Helvetica 14' - # @@font = 'Courier 12' - # @@font = 'clearlyu 16' - # @@font = 'fixed 12' - # @@font = 'Times 12' - # @@font = 'Newspaper 12' - # @@font = '{New century schoolbook} 12' - - def initialize(base) - super(base) - grid_columnconfig(1, :weight=>1) - end - - def add_sample(lang, *args) - sample_txt = Tk::UTF8_String(args.join('')) - l = TkLabel.new(self, :font=>@@font, :text=>lang+':', - :anchor=>:nw, :pady=>0) - #s = TkLabel.new(self, :font=>@@font, :text=>sample_txt, - s = TkLabel.new(self, :font=>TkFont.new(@@font), :text=>sample_txt, - :anchor=>:nw, :width=>30, :pady=>0) - Tk.grid(l, s, :sticky=>:ew, :pady=>0) - l.grid_config(:padx, '1m') - end -end -f = Unicodeout_SampleFrame.new(base_frame) -f.pack(:expand=>true, :fill=>:both, :padx=>'2m', :pady=>'1m') - -# Processing when some characters are missing might take a while, so make -# sure we're displaying something in the meantime... - -oldCursor = $unicodeout_demo.cursor -$unicodeout_demo.cursor('watch') -Tk.update - -f.add_sample('Arabic', - '\uFE94\uFEF4\uFE91\uFEAE\uFECC\uFEDF\uFE8D\uFE94', - '\uFEE4\uFEE0\uFEDC\uFEDF\uFE8D') -f.add_sample('Trad. Chinese', '\u4E2D\u570B\u7684\u6F22\u5B57') -f.add_sample('Simpl. Chinese', '\u6C49\u8BED') -f.add_sample('Greek', - '\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AE ', - '\u03B3\u03BB\u03CE\u03C3\u03C3\u03B1') -f.add_sample('Hebrew', - '\u05DD\u05D9\u05DC\u05E9\u05D5\u05E8\u05D9 ', - '\u05DC\u05D9\u05D0\u05E8\u05E9\u05D9') -f.add_sample('Japanese', - '\u65E5\u672C\u8A9E\u306E\u3072\u3089\u304C\u306A, ', - '\u6F22\u5B57\u3068\u30AB\u30BF\u30AB\u30CA') -f.add_sample('Korean', '\uB300\uD55C\uBBFC\uAD6D\uC758 \uD55C\uAE00') -f.add_sample('Russian', - '\u0420\u0443\u0441\u0441\u043A\u0438\u0439 ', - '\u044F\u0437\u044B\u043A') - -wait_msg.destroy -$unicodeout_demo.cursor(oldCursor) diff --git a/ext/tk/sample/demos-jp/vscale.rb b/ext/tk/sample/demos-jp/vscale.rb deleted file mode 100644 index a502634138..0000000000 --- a/ext/tk/sample/demos-jp/vscale.rb +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -require "tkcanvas" - -if defined?($vscale_demo) && $vscale_demo - $vscale_demo.destroy - $vscale_demo = nil -end - -$vscale_demo = TkToplevel.new {|w| - title("Vertical Scale Demonstration") - iconname("vscale") -} -positionWindow($vscale_demo) - -base_frame = TkFrame.new($vscale_demo).pack(:fill=>:both, :expand=>true) - -msg = TkLabel.new(base_frame) { - font $font - wraplength '3.5i' - justify 'left' -# text "下ã«ã¯çŸ¢å°ãŒ1ã¤ã¨ä¹—ç›´ãªã‚¹ã‚±ãƒ¼ãƒ«ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚\ -#スケール上ã§ãƒžã‚¦ã‚¹ãƒœã‚¿ãƒ³1をクリックã€ã¾ãŸã¯ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã¨\ -#矢å°ã®é•·ã•ã‚’変ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - text "ã«ã¯ãƒãƒ¼ã¨ç¸¦åž‹ã®ã‚¹ã‚±ãƒ¼ãƒ«ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚スケールã§ãƒžã‚¦ã‚¹ã®ãƒœã‚¿ãƒ³1 をクリックã™ã‚‹ã‹ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ãƒãƒ¼ã®é«˜ã•ã‚’変ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚終ã£ãŸã‚‰ã€Œäº†è§£ã€ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ãã ã•ã„。" -} -msg.pack('side'=>'top', 'padx'=>'.5c') - -TkFrame.new(base_frame) {|frame| - TkButton.new(frame) { - #text '了解' - text 'é–‰ã˜ã‚‹' - command proc { - tmppath = $vscale_demo - $vscale_demo = nil - tmppath.destroy - } - }.pack('side'=>'left', 'expand'=>'yes') - - TkButton.new(frame) { - text 'コードå‚ç…§' - command proc { showCode 'vscale' } - }.pack('side'=>'left', 'expand'=>'yes') -}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') - -def setHeight(w, height) - height = height + 21 - y2 = height - 30 - if y2 < 21 - y2 = 21 - end - w.coords 'poly',15,20,35,20,35,y2,45,y2,25,height,5,y2,15,y2,15,20 - w.coords 'line',15,20,35,20,35,y2,45,y2,25,height,5,y2,15,y2,15,20 -end - -TkFrame.new(base_frame) {|frame| - borderwidth 10 - canvas = TkCanvas.new(frame) {|c| - width 50 - height 50 - bd 0 - highlightthickness 0 - TkcPolygon.new(c, 0, 0, 1, 1, 2, 2) { - fill 'SeaGreen3' - tags 'poly' - } - TkcLine.new(c, 0, 0, 1, 1, 2, 2, 0, 0) { - fill 'black' - tags 'line' - } - }.pack('side'=>'left', 'anchor'=>'nw', 'fill'=>'y') - scale = TkScale.new(frame) { - orient 'vertical' - length 284 - from 0 - to 250 - command proc{|value| setHeight(canvas, value)} - tickinterval 50 - }.pack('side'=>'left', 'anchor'=>'ne') - scale.set 75 -}.pack diff --git a/ext/tk/sample/demos-jp/widget b/ext/tk/sample/demos-jp/widget deleted file mode 100644 index 5f5dfb9d70..0000000000 --- a/ext/tk/sample/demos-jp/widget +++ /dev/null @@ -1,1122 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -# 漢字コード設定 ( tk.rb ã®ãƒ­ãƒ¼ãƒ‰æ™‚ã® encoding 推定/設定ã«ä½¿ã‚れる ) -#if RUBY_VERSION < '1.9.0' ### !!!!!!!!!!!!!! -unless defined?(::Encoding.default_external) - $KCODE = 'euc' -else - DEFAULT_TK_ENCODING = 'EUC-JP' -end - -# tk 関係ライブラリã®èª­ã¿è¾¼ã¿ -require 'tk' -# require 'tkafter' - -$RubyTk_WidgetDemo = true - -# widget demo directory ä½ç½®ã®ç²å¾— -# $demo_dir = File.dirname($0) -$demo_dir = File.dirname(__FILE__) - -# root ã®ç”Ÿæˆ -$root = TkRoot.new{title "Ruby/Tk Widget Demonstration"} - -# tk ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å–å¾— -$tk_version = Tk::TK_VERSION -$tk_major_ver, $tk_minor_ver = $tk_version.split('.').map{|n| n.to_i} -$tk_patchlevel = Tk::TK_PATCHLEVEL - -# tcl_platform 情報ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚ªãƒ–ジェクト -$tk_platform = TkVarAccess.new('tcl_platform') - -# フォント設定 -####### -case($tk_version) -when /^4.*/ - $font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', nil) - knjfont = '-*--16-*-jisx0208.1983-0' - $kanji_font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', - knjfont) - TkOption.add('*kanjiFont', knjfont, 'startupFile') - $msg_kanji_font=TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', - '-*--24-*-jisx0208.1983-0') - -#when '8.0' -# $font = TkFont.new('Helvetica -12') -# $kanji_font = TkFont.new('Helvetica -12', 'Mincho -12') -# TkOption.add('*kanjiFont', knjfont, 'startupFile') -# $msg_kanji_font=TkFont.new('Helvetica 16', 'Gothic 16 bold') - -when /^8.*/ - $font = TkFont.new('Helvetica -12') - $kanji_font = TkFont.new('Helvetica -12', 'Mincho -12') - TkOption.add('*kanjiFont', knjfont, 'startupFile') - $msg_kanji_font=TkFont.new('Helvetica 14 bold', 'Gothic 14 bold') - -else - $font = TkFont.new('Helvetica 14', nil) - knjfont = '-*--16-*-jisx0208.1983-0' - $kanji_font = TkFont.new('Helvetic 14', knjfont) - TkOption.add('*kanjiFont', knjfont, 'startupFile') - $msg_kanji_font=TkFont.new('Helvetica 14', - '-*--24-*-jisx0208.1983-0') -end -####### - -# イメージ設定 -$image = {} - -if $tk_major_ver >= 8 -$image['refresh'] = TkPhotoImage.new(:height=>16, :format=>'GIF', :data=><= 8 -$image['view'] = TkPhotoImage.new(:height=>16, :format=>'GIF', :data=><= 8 -$image['delete'] = TkPhotoImage.new(:height=>16, :format=>'GIF', :data=><= 8 -$image['print'] = TkPhotoImage.new(:height=>19, :format=>'GIF', :data=><= 8 - $root.add_menubar([[['File', 0], - ['About ... ', proc{aboutBox}, 0, ''], - '---', - ['Quit', proc{exit}, 0, 'Ctrl-Q'] - ]]) -else - TkMenubar.new($root, - [[['File', 0], - ['About ... ', proc{aboutBox}, 0, ''], - '---', - ['Quit', proc{exit}, 0, 'Ctrl-Q'] - ]]).pack('side'=>'top', 'fill'=>'x') -end -$root.bind('F1', proc{aboutBox}) -$root.bind('Control-q', proc{exit}) - -=begin -TkFrame.new($root){|frame| - TkMenubutton.new(frame){|button| - m = TkMenu.new(button) { - add 'command', 'label'=>'Quit', 'command'=>proc{exit}, 'underline'=>0 - } - menu m - text 'File' - underline 0 - }.pack('side'=>'left') -}.pack('side'=>'top', 'fill'=>'x') -=end - -# テキストボックスã®ç”Ÿæˆ -if $tk_version =~ /^4\.[01]/ - scr = TkScrollbar.new($root, 'orient'=>'vertical') - txt = TkText.new($root) { - #wrap 'word' - wrap 'char' - width 70 - height 30 - font $font - setgrid 'yes' - yscrollcommand proc{|first,last| scr.set first,last} - } - scr.command(proc{|*args| txt.yview(*args)}) - scr.pack('side'=>'right', 'fill'=>'y') - txt.pack('expand'=>'yes', 'fill'=>'both') -else - textFrame = TkFrame.new($root) - scr = TkScrollbar.new($root, 'orient'=>'vertical', - 'highlightthickness'=>0, 'takefocus'=>1) { - pack('in'=>textFrame, 'side'=>'right', 'fill'=>'y', 'padx'=>1) - } - txt = TkText.new($root) { - #wrap 'word' - wrap 'char' - width 70 - height 30 - font $font - setgrid 'yes' - highlightthickness 0 - padx 4 - pady 2 - takefocus 0 - bd 1 - yscrollcommand proc{|first,last| scr.set first,last} - } - scr.command(proc{|*args| txt.yview(*args)}) - -# txt.pack('in'=>textFrame, 'expand'=>'yes', 'fill'=>'both', 'padx'=>1) -# txt.pack('in'=>textFrame, 'expand'=>'yes', 'fill'=>'both') -# textFrame.pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>2) - textFrame.pack('expand'=>'yes', 'fill'=>'both') - # $root.withdraw.deiconify - Tk.update_idletasks - txt.pack('in'=>textFrame, 'expand'=>'yes', 'fill'=>'both') - - statusBar = TkFrame.new($root) {|f| - if $tk_version =~ /^4.*/ - statusfont = '-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*' - else - statusfont = 'Helvetica 10' - end - $statusBarLabel = \ - TkLabel.new(f, 'text'=>" ", 'relief'=>'sunken', 'bd'=>1, 'anchor'=>'w', - 'font'=>statusfont) \ - .pack('side'=>'left', 'padx'=>2, 'expand'=>'yes', 'fill'=>'both') - TkLabel.new(f, 'width'=>8, 'relief'=>'sunken', 'bd'=>1, 'anchor'=>'w', - 'font'=>statusfont) \ - .pack('side'=>'left', 'padx'=>2) - }.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>2) -end - -# テキストタグ設定 -if $tk_version =~ /^4.*/ - tag_title = TkTextTag.new(txt, 'font'=>'-*-Helvetica-Bold-R-Normal--*-180-*-*-*-*-*-*') -else - tag_title = TkTextTag.new(txt, 'font'=>'Helvetica 18 bold') -end -#tag_kanji_title = TkTextTag.new(txt, 'kanjifont'=>$msg_kanji_font) -#tag_middle = TkTextTag.new(txt, 'kanjifont'=>$kanji_font) -tag_kanji_title = TkTextTag.new(txt, 'font'=>$msg_kanji_font) -tag_middle = TkTextTag.new(txt, 'font'=>$kanji_font) -tag_demospace = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c') - -if TkWinfo.depth($root) == 1 - tag_demo = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c', - 'underline'=>1) - $tag_visited = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c', - 'underline'=>1) - tag_hot = TkTextTag.new(txt, 'background'=>'black', 'foreground'=>'white') -else - tag_demo = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c', - 'foreground'=>'blue', 'underline'=>1) - $tag_visited = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c', - 'foreground'=>'#303080', 'underline'=>1) -# tag_hot = TkTextTag.new(txt, 'relief'=>'raised', 'borderwidth'=>1, -# 'background'=>'SeaGreen3') - tag_hot = TkTextTag.new(txt, 'borderwidth'=>1, 'foreground'=>'red') -end - -#tag_demo.bind('Button-1', proc{invoke txt, txt.index('current')}) -tag_demo.bind('ButtonRelease-1', - proc{|x,y|invoke txt, txt.index("@#{x},#{y}")}, '%x %y') - -lastLine = TkVariable.new("") -newLine = TkVariable.new("") -tag_demo.bind('Enter', proc{|x,y| - lastLine.value = txt.index("@#{x},#{y} linestart") - tag_hot.add(lastLine.value, "#{lastLine.value} lineend") - showStatus txt, txt.index("@#{x},#{y}") - }, - '%x %y') -tag_demo.bind('Leave', - proc{ - tag_hot.remove('1.0','end') - txt.configure('cursor','xterm') - $statusBarLabel.configure('text'=>"") - }) -tag_demo.bind('Motion', proc{|x, y| - newLine.value = txt.index("@#{x},#{y} linestart") - if newLine.value != lastLine.value - tag_hot.remove('1.0','end') - lastLine.value = newLine.value - if ( txt.tag_names("@#{x},#{y}").find{|t| - t.kind_of?(String) && t =~ /^demo-/ - } ) - tag_hot.add(lastLine.value, - "#{lastLine.value} lineend -1 chars") - end - end - showStatus txt, txt.index("@#{x},#{y}") - }, - '%x %y') - -# ãƒ†ã‚­ã‚¹ãƒˆç”Ÿæˆ -txt.insert('end', 'Ruby/Tk : Widget', tag_title) -#txt.insert('end', " デモンストレーション\n", tag_middle) -txt.insert('end', " デモンストレーション\n", tag_kanji_title) -txt.insert('end', <<"EOT") - -ã“ã®ã‚¢ãƒ—リケーションã¯ã€Tk Widget を用ã„ã¦ã©ã®ã‚ˆã†ãªã“ã¨ãŒã§ãã‚‹ã‹\ -を示ã™ãŸã‚ã®ã€ã„ãã¤ã‹ã®å°ã•ãªã‚¹ã‚¯ãƒªãƒ—トã«å¯¾ã™ã‚‹ãƒ•ãƒ­ãƒ³ãƒˆã‚¨ãƒ³ãƒ‰ã‚’æ\ -ä¾›ã—ã¦ã„ã¾ã™ã€‚以下ã«é †ç•ªã«æŒ™ã’られã¦ã„るデモンストレーションを実行\ -ã™ã‚‹ã«ã¯ãƒžã‚¦ã‚¹ã§ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã ã•ã„。デモンストレーションã®ã‚¦ã‚£ãƒ³\ -ドウãŒç¾ã‚Œã‚‹ã¨ã€ãƒ‡ãƒ¢ãƒ³ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’生æˆã—㟠Ruby/Tk ã®ã‚³ãƒ¼ãƒ‰ã‚’見\ -ã‚‹ãŸã‚ã«ã€"コードå‚ç…§"ボタンをクリックã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã‚ãªãŸãŒ\ -望むãªã‚‰ã€ãã®ã‚³ãƒ¼ãƒ‰ã‚’修正ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚修正ã—ãŸã‚³ãƒ¼ãƒ‰ã§ãƒ‡ãƒ¢\ -ンストレーションをå†å®Ÿè¡Œã™ã‚‹ãŸã‚ã«ã¯ã€ã‚³ãƒ¼ãƒ‰ãŒæ›¸ã‹ã‚ŒãŸã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«\ -ã‚ã‚‹"デモå†å®Ÿè¡Œ" ボタンをクリックã—ã¦ãã ã•ã„。\ -コードを修正ã—ã¦ã‚‚オリジナルã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ›¸ãæ›ãˆã‚‰ã‚Œã‚‹ã“ã¨ã¯\ -ã‚ã‚Šã¾ã›ã‚“ã‹ã‚‰ã€å¿ƒé…ã›ãšã«è‰²ã€…ãªå¤‰æ›´ã‚’試ã—ã¦ã¿ã¦ãã ã•ã„。 - -一部ã®ãƒ‡ãƒ¢ã§ã¯ã€æ¯”較的最近ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Tk ã§ãªã‘ã‚Œã°ã‚µãƒãƒ¼ãƒˆã—ã¦\ -ã„ãªã„機能を使ã£ã¦å®Ÿè£…ã—ã¦ã„ã¾ã™(例ãˆã° Tk8.4 以上ãªã©)。ãã®ãŸã‚ã€\ -ãã†ã—ãŸæ©Ÿèƒ½ã‚’æŒãŸãªã„ Tk ライブラリを使ã£ã¦ã„ã‚‹å ´åˆã«ã¯ã€ãã†ã—ãŸ\ -デモã¯æ­£ã—ãå‹•ãã¾ã›ã‚“。ãã®ã‚ˆã†ãªæ©Ÿèƒ½ãŒå¿…è¦ã§ã‚ã‚Œã°ã€ãれをサãƒãƒ¼ãƒˆ\ -ã—ã¦ã„ã‚‹ Tk ライブラリを使ã†ã‚ˆã†ã« tcltklib をコンパイルã—ãªãŠã—ã¦\ -ãã ã•ã„。 - -ã‚‚ã—ã‚ãªãŸã® Tk ㌠(最åˆã‹ã‚‰å«ã‚€ã‹ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸã‹ã«ã‚ˆã‚Š) \ -Ttk (Tile) 拡張を利用ã§ãる状態ã§ã‚ã‚‹ãªã‚‰ã€\ -Ttk æ‹¡å¼µã®ãƒ‡ãƒ¢ (sample/tkextlib/tile/demo.rb) ã‚‚ãœã²è©¦ã—ã¦ã¿ã¦ãã ã•ã„。 -( 多分,ç¾åœ¨ã®ã‚ãªãŸã®ç’°å¢ƒã«ã¯ Ttk æ‹¡å¼µã¯\ -#{ -begin - require 'tkextlib/tile' - "ã™ã§ã«å°Žå…¥ã•ã‚Œã¦ã„ã¾ã™" -rescue - "ã¾ã ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“" -end -}\ -。) -Ttk æ‹¡å¼µã¯ã€Tk8.5 以上ã§ã¯æ¨™æº–ã®æ©Ÿèƒ½ã¨ã—ã¦çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã™ã€‚ - - -EOT - -#txt.insert('end',"ラベル, ボタン, ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³, ラジオボタン\n",tag_middle) -txt.insert('end', "ラベル, ボタン, ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³, ラジオボタン\n", - tag_kanji_title) -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "1. ラベル (テキスト, ビットマップ)\n", - tag_demo, "demo-label") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "2. ラベルã¨UNICODEテキスト (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", tag_demo, "demo-unicodeout") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "3. ボタン \n", tag_demo, "demo-button") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "4. ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³ (複数をé¸æŠžå¯èƒ½)\n", - tag_demo, "demo-check") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "5. 3状態ãƒã‚§ãƒƒã‚¯ãƒœã‚¿ãƒ³ (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", - tag_demo, "demo-check2") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "6. ラジオボタン (ä»»æ„ã®ä¸€ã¤ã‚’é¸æŠžå¯èƒ½)\n", - tag_demo, "demo-radio") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "7. ラジオボタン (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", - tag_demo, "demo-radio2") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "8. 3状態ラジオボタン (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", - tag_demo, "demo-radio3") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "9. ボタンã§ä½œã‚‰ã‚ŒãŸ15-パズルゲーム\n", - tag_demo, "demo-puzzle") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "10. ビットマップを使用ã—ãŸã‚¢ã‚¤ã‚³ãƒ³ãƒœã‚¿ãƒ³\n", - tag_demo, "demo-icon") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "11. ç”»åƒã‚’表示ã™ã‚‹äºŒã¤ã®ãƒ©ãƒ™ãƒ«\n", - tag_demo, "demo-image1") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "12. ç”»åƒã‚’見るãŸã‚ã®ç°¡å˜ãªãƒ¦ãƒ¼ã‚¶ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹\n", - tag_demo, "demo-image2") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "13. ç”»åƒã‚’見るãŸã‚ã®ç°¡å˜ãªãƒ¦ãƒ¼ã‚¶ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", - tag_demo, "demo-image3") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "14. ラベル付ãフレーム (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", - tag_demo, "demo-labelframe") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "15. テーマã«å¯¾å¿œã—ãŸã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®ç°¡å˜ãªä¾‹ (Tile/Ttkæ‹¡å¼µã¸ã®å¯¾å¿œãŒå¿…è¦)\n", - tag_demo, "demo-ttkbut") -txt.insert('end', " \n ", tag_demospace) - -txt.insert('end', "\n") -#txt.insert('end', "リストボックス\n", tag_middle) -txt.insert('end', "リストボックス\n", tag_kanji_title) -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "1. 都é“府県.\n", tag_demo, "demo-states") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "2. 色: アプリケーションã®ãŸã‚ã®é…色を変ãˆã‚‹\n", - "#{tag_demo.id} demo-colors") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "3. 格言集\n", tag_demo, "demo-sayings") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "4. 国ã«ã¤ã„ã¦ã®ãƒžãƒ«ãƒã‚«ãƒ©ãƒ ãƒªã‚¹ãƒˆ (Tile/Ttkæ‹¡å¼µã¸ã®å¯¾å¿œãŒå¿…è¦)\n", - tag_demo, "demo-mclist") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "5. ディレクトリブラウザ (Tile/Ttkæ‹¡å¼µã¸ã®å¯¾å¿œãŒå¿…è¦)\n", - tag_demo, "demo-tree") -txt.insert('end', " \n ", tag_demospace) - -txt.insert('end', "\n") -#txt.insert('end', "エントリã¨ã‚¹ãƒ”ンボックス\n", tag_middle) -txt.insert('end', "エントリ\n", tag_kanji_title) -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "1. スクロールãƒãƒ¼ãªã—\n", tag_demo, "demo-entry1") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "2. スクロールãƒãƒ¼ã‚ã‚Š\n", tag_demo, "demo-entry2") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "3. èªè¨¼å‡¦ç†ä»˜ãã®ã‚¨ãƒ³ãƒˆãƒªãƒœãƒƒã‚¯ã‚¹ã¨ãƒ‘スワードフィールド (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", - tag_demo, "demo-entry3") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "4. スピンボックス (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", - tag_demo, "demo-spin") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "5. コンボボックス (Tile/Ttkæ‹¡å¼µã¸ã®å¯¾å¿œãŒå¿…è¦)\n", - tag_demo, "demo-combo") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "6. ç°¡å˜ãªãƒ•ã‚©ãƒ¼ãƒ \n", tag_demo, "demo-form") -txt.insert('end', " \n ", tag_demospace) - -txt.insert('end', "\n") -#txt.insert('end', "テキスト\n", tag_middle) -txt.insert('end', "テキスト\n", tag_kanji_title) -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "1. 基本的ãªãƒ†ã‚­ã‚¹ãƒˆ\n", tag_demo, "demo-text") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "2. 表示スタイル.\n", tag_demo, "demo-style") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "3. ãƒã‚¤ãƒ‘ーテキスト(ã‚¿ã‚°ãƒã‚¤ãƒ³ãƒ‰).\n", - tag_demo, "demo-bind") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "4. ウィンドウを埋ã‚込んã ãƒ†ã‚­ã‚¹ãƒˆ\n", - tag_demo, "demo-twind") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "5. ウィンドウを埋ã‚込んã ãƒ†ã‚­ã‚¹ãƒˆ (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", - tag_demo, "demo-twind2") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "6. 検索\n", tag_demo, "demo-search") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "7. テキストウィジェットã®å¯¾ç­‰åŒ–(peering) (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", tag_demo, "demo-textpeer") -txt.insert('end', " \n ", tag_demospace) - -txt.insert('end', "\n") -#txt.insert('end', "キャンãƒã‚¹\n", tag_middle) -txt.insert('end', "キャンãƒã‚¹\n", tag_kanji_title) -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "1. アイテムã®åž‹\n", tag_demo, "demo-items") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "2. 2 次元ã®ãƒ—ロット\n", tag_demo, "demo-plot") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "3. テキスト\n", tag_demo, "demo-ctext") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "4. 矢å°ã®å½¢\n", tag_demo, "demo-arrow") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "5. ルーラー\n", tag_demo, "demo-ruler") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "6. フロアプラン\n", tag_demo, "demo-floor") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "7. フロアプラン (ç•°ãªã‚‹ã‚­ãƒ£ãƒ³ãƒã‚¹ã‚¢ã‚¤ãƒ†ãƒ ä½œæˆæ–¹æ³•ã‚’使用)\n", tag_demo, "demo-floor2") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "8. スクロールå¯èƒ½ãªã‚­ãƒ£ãƒ³ãƒã‚¹\n", - tag_demo, "demo-cscroll") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "9. ãƒã‚§ã‚¹ãƒœãƒ¼ãƒ‰ä¸Šã®é¨Žå£«ã®å·¡å›ž (Tile/Ttkæ‹¡å¼µã¸ã®å¯¾å¿œãŒå¿…è¦)\n", - tag_demo, "demo-knightstour") -txt.insert('end', " \n ", tag_demospace) - -txt.insert('end', "\n") -#txt.insert('end', "スケールã¨ãƒ—ログレスãƒãƒ¼\n", tag_middle) -txt.insert('end', "スケールã¨ãƒ—ログレスãƒãƒ¼\n", tag_kanji_title) -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "1. 垂直スケール\n", tag_demo.id, "demo-vscale") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "2. 水平スケール\n", tag_demo.id, "demo-hscale") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "3. プログレスãƒãƒ¼ (Tile/Ttkæ‹¡å¼µã¸ã®å¯¾å¿œãŒå¿…è¦)\n", tag_demo.id, "demo-ttkprogress") -txt.insert('end', " \n ", tag_demospace) - -txt.insert('end', "\n") -txt.insert('end', "ペインドウィンドウã¨ãƒŽãƒ¼ãƒˆãƒ–ック\n", tag_kanji_title) -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "1. æ°´å¹³æ–¹å‘ (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", - tag_demo.id, "demo-paned1") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "2. åž‚ç›´æ–¹å‘ (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", - tag_demo.id, "demo-paned2") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "3. テーマã«å¯¾å¿œã—ãŸåŸ‹ã‚è¾¼ã¿ãƒšã‚¤ãƒ³ (Tile/Ttkæ‹¡å¼µã¸ã®å¯¾å¿œãŒå¿…è¦)\n", - tag_demo.id, "demo-ttkpane") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "4. ノートブックウィジェット (Tile/Ttkæ‹¡å¼µã¸ã®å¯¾å¿œãŒå¿…è¦)\n", - tag_demo.id, "demo-ttknote") -txt.insert('end', " \n ", tag_demospace) - -txt.insert('end', "\n") -#txt.insert('end', "メニューã¨ãƒ„ールãƒãƒ¼\n", tag_middle) -txt.insert('end', "メニューã¨ãƒ„ールãƒãƒ¼\n", tag_kanji_title) -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "1. メニューã¨ã‚«ã‚¹ã‚±ãƒ¼ãƒ‰ã‚’å«ã‚“ã ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦\n", - tag_demo, "demo-menu") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "2. メニューã¨ã‚«ã‚¹ã‚±ãƒ¼ãƒ‰ã‚’å«ã‚“ã ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ (Tk8.x 専用)\n", - tag_demo, "demo-menu8x") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "3. 〃 (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", - tag_demo, "demo-menu84") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "4. メニューボタン (Tk8.x 専用)\n", - tag_demo, "demo-menubu") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "5. テーマã«å¯¾å¿œã—ãŸãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒœã‚¿ãƒ³ (Tile/Ttkæ‹¡å¼µã¸ã®å¯¾å¿œãŒå¿…è¦)\n", - tag_demo.id, "demo-ttkmenu") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "6. テーマã«å¯¾å¿œã—ãŸãƒ„ールãƒãƒ¼ (Tile/Ttkæ‹¡å¼µã¸ã®å¯¾å¿œãŒå¿…è¦)\n", - tag_demo.id, "demo-toolbar") -txt.insert('end', " \n ", tag_demospace) - -txt.insert('end', "\n") -#txt.insert('end', "ダイアログウィンドウ\n", tag_middle) -txt.insert('end', "ダイアログウィンドウ\n", tag_kanji_title) -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "1. メッセージボックス\n", tag_demo, "demo-msgbox") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "2. 詳細テキスト付ãã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒœãƒƒã‚¯ã‚¹ (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", tag_demo, "demo-msgbox2") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "3. ファイルé¸æŠžãƒ€ã‚¤ã‚¢ãƒ­ã‚°\n", tag_demo, "demo-filebox") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "4. 色é¸æŠžãƒ€ã‚¤ã‚¢ãƒ­ã‚°\n", tag_demo, "demo-clrpick") -txt.insert('end', " \n ", tag_demospace) - -txt.insert('end', "\n") -#txt.insert('end', "アニメーション\n", tag_middle) -txt.insert('end', "アニメーション\n", tag_kanji_title) -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "1. アニメーションラベル (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", tag_demo, "demo-anilabel") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "2. 波形ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", tag_demo, "demo-aniwave") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "3. 振りå­ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", tag_demo, "demo-pendulum") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "4. A celebration of Rube Goldberg (機能ã«å¯¾å¿œã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®TkãŒå¿…è¦)\n", tag_demo, "demo-goldberg") - -txt.insert('end', "\n") -#txt.insert('end', "ãã®ä»–\n", tag_middle) -txt.insert('end', "ãã®ä»–\n", tag_kanji_title) -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "1. 組ã¿è¾¼ã¿ã®ãƒ“ットマップ\n", tag_demo, "demo-bitmap") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "2. モーダルダイアログ(ローカルグラブ)\n", - tag_demo, "demo-dialog1") -txt.insert('end', " \n ", tag_demospace) -txt.insert('end', "3. モーダルダイアログ(グローãƒãƒ«ã‚°ãƒ©ãƒ–)\n", - tag_demo, "demo-dialog2") -txt.insert('end', " \n ", tag_demospace) - -txt.state('disabled') -scr.focus - -################################ -# method 定義 -################################ -def positionWindow(w) - w.geometry('+300+300') -end - -# 親ウィジェットã¨ï¼Œå¤‰æ•°å㨠TkVariable ã¨ã®çµ„(é…列)ã®ä¸¦ã³ã‚’渡㙠-$showVarsWin = {} -def showVars1(parent, *args) - if $showVarsWin[parent.path] - begin - $showVarsWin[parent.path].destroy - rescue - end - end - top = TkToplevel.new(parent) {|w| - title "Variable values" - base = TkFrame.new(w).pack(:fill=>:both, :expand=>true) - TkLabel.new(base) { - text "変数値:" - width 20 - anchor 'center' - if $tk_version =~ /^4.*/ - font '-Adobe-helvetica-medium-r-normal--*-180-*-*-*-*-*-*' - else - font 'Helvetica 14' - end - }.pack('side'=>'top', 'fill'=>'x') - len = 1 - args.each{|vnam,vbody| - len = vnam.to_s.length if vnam.to_s.length > len - } - args.each{|vnam,vbody| - TkFrame.new(base){|f| - #TkLabel.new(f, 'text'=>"#{vnam}: ").pack('side'=>'left') - TkLabel.new(f, 'text'=>"#{vnam}: ",'width'=>len+2).pack('side'=>'left') - TkLabel.new(f, 'textvariable'=>vbody, 'anchor'=>'w')\ - .pack('side'=>'left', 'expand'=>'yes', 'fill'=>'x') - }.pack('side'=>'top', 'anchor'=>'w', 'fill'=>'x') - } - TkButton.new(base) { - text "了解" - command proc{w.destroy} - }.pack('side'=>'bottom', 'pady'=>2) - } - $showVarsWin[parent.path] = top -end - -def showVars2(parent, *args) - if $showVarsWin[parent.path] - begin - $showVarsWin[parent.path].destroy - rescue - end - end - $showVarsWin[parent.path] = TkToplevel.new(parent) {|top| - title "Variable values" - - base = TkFrame.new(top).pack(:fill=>:both, :expand=>true) - - TkLabelFrame.new(base, :text=>"変数値:", - :font=>{:family=>'Helvetica', :size=>14}){|f| - args.each{|vnam,vbody| - TkGrid(TkLabel.new(f, :text=>"#{vnam}: ", :anchor=>'w'), - TkLabel.new(f, :textvariable=>vbody, :anchor=>'w'), - :padx=>2, :pady=>2, :sticky=>'w') - } - - f.grid(:sticky=>'news', :padx=>4) - f.grid_columnconfig(1, :weight=>1) - f.grid_rowconfig(100, :weight=>1) - } - TkButton.new(base, :text=>"了解", :width=>8, :default=>:active, - :command=>proc{top.destroy}){|b| - top.bind('Return', proc{b.invoke}) - top.bind('Escape', proc{b.invoke}) - - b.grid(:sticky=>'e', :padx=>4, :pady=>[6, 4]) - } - base.grid_columnconfig(0, :weight=>1) - base.grid_rowconfig(0, :weight=>1) - } -end - -if $tk_major_ver < 8 - alias showVars showVars1 -elsif $tk_major_ver == 8 && $tk_minor_ver < 4 - alias showVars showVars1 -else # ver >= 8.4 - alias showVars showVars2 -end - -# 疑似トップレベルサãƒãƒ¼ãƒˆ -module PseudoToplevel_Evaluable - def pseudo_toplevel_eval(body = Proc.new) - Thread.current[:TOPLEVEL] = self - begin - body.call - ensure - Thread.current[:TOPLEVEL] = nil - end - end - - def pseudo_toplevel_evaluable? - @pseudo_toplevel_evaluable - end - def pseudo_toplevel_evaluable=(mode) - @pseudo_toplevel_evaluable = (mode)? true: false - end - - def self.extended(mod) - mod.__send__(:extend_object, mod) - mod.instance_variable_set('@pseudo_toplevel_evaluable', true) - end -end - -class Object - alias __method_missing__ method_missing - private :__method_missing__ - - def method_missing(id, *args) - begin - has_top = (top = Thread.current[:TOPLEVEL]) && - top.respond_to?(:pseudo_toplevel_evaluable?) && - top.pseudo_toplevel_evaluable? && - top.respond_to?(id) - rescue Exception => e - has_top = false - end - - if has_top - top.__send__(id, *args) - else - __method_missing__(id, *args) - end - end -end - -class Proc - def initialize(*args, &b) - super - @__pseudo_toplevel__ = Thread.current[:TOPLEVEL] - end - - alias __call__ call - def call(*args, &b) - if top = @__pseudo_toplevel__ - orig_top = Thread.current[:TOPLEVEL] - Thread.current[:TOPLEVEL] = top - begin - __call__(*args, &b) - ensure - Thread.current[:TOPLEVEL] = orig_top - end - else - __call__(*args, &b) - end - end -end - -def proc(&b) - Proc.new(&b) -end -def lambda(&b) - Proc.new(&b) -end - -def _null_binding - Module.new.instance_eval{extend PseudoToplevel_Evaluable} - # binding - # Module.new.instance_eval{binding} -end -private :_null_binding - -def eval_samplecode(code, file=nil) - #eval(code) - #_null_binding.pseudo_toplevel_eval{ eval(code) } - #Thread.new{ _null_binding.pseudo_toplevel_eval{ eval(code) } } - Thread.new{ - _null_binding.pseudo_toplevel_eval{ - begin - if file - eval(code, binding, "(eval:#{file})") - else - eval(code) - end - rescue Exception=>e - #p e - TkBgError.show(e.message + "\n" + - "\n---< backtrace of Ruby side >-----\n" + - e.backtrace.join("\n") + - "\n---< backtrace of Tk side >-------") - end - } - } - Tk.update rescue nil -end - -# テキスト上ã§ã® click ã«å¯¾ã™ã‚‹å‹•ä½œ -def invoke(txt, idx) - tag = txt.tag_names(idx).find{|t| t.kind_of?(String) && t =~ /^demo-/} - return unless tag - - cursor = txt.cget('cursor') - txt.cursor('watch') - Tk.update rescue nil - # eval(IO.readlines("#{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb").join, _null_binding) - # Tk.update - eval_samplecode(IO.readlines("#{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb").join, tag[5..-1] + '.rb') - txt.cursor(cursor) - - $tag_visited.add("#{idx} linestart +1 chars", "#{idx} lineend +1 chars") -end -=begin -def invoke (txt, idx) - tag = txt.tag_names(idx).find{|t| t.kind_of?(String) && t =~ /^demo-/} - return unless tag - current_cursor = txt.cget('cursor') - txt.cursor('watch') - Tk.update -# eval `cat #{tag[5..-1]}.rb` -# eval `cat #{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb` - eval IO.readlines("#{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb").join - Tk.update -# txt.cursor('xterm') - txt.cursor(current_cursor) - - $tag_visited.add("#{idx} linestart +1 chars", "#{idx} lineend +1 chars") -end -=end - -# 状態表示 -def showStatus (txt, index) - tag = txt.tag_names(index).find{|t| t.kind_of?(String) && t =~ /^demo-/} - cursor = txt.cget('cursor') - unless tag - $statusBarLabel.configure('text', " ") - newcursor = 'xterm' - else - demoname = tag[5..-1] - $statusBarLabel.configure('text', - "サンプルプログラム \"#{demoname}\" ã®å®Ÿè¡Œ ") - newcursor = 'hand2' - end - txt.configure('cursor'=>newcursor) if cursor != newcursor -end - -# ソースコードã®è¡¨ç¤º -def showCode1(demo) - file = "#{demo}.rb" - $code_window = nil unless defined? $code_window - if $code_window == nil || TkWinfo.exist?($code_window) == false - $code_window = TkToplevel.new(nil) - f = TkFrame.new($code_window) - - TkButton.new(f) { - #text "了解" - text "é–‰ã˜ã‚‹" - command proc{ - $code_window.destroy - $code_window = nil - } - }.pack('side'=>'right', 'expand'=>'false', 'pady'=>2) - TkButton.new(f) { - text "å†å®Ÿè¡Œ" - # command proc{eval($code_text.get('1.0','end'), _null_binding)} - command proc{eval_samplecode($code_text.get('1.0','end'), '')} - }.pack('side'=>'right', 'expand'=>'false', 'pady'=>2) - - TkLabel.new(f,'text'=>'line:').pack('side'=>'left') - linenum =TkLabel.new(f,'text'=>'').pack('side'=>'left') - TkLabel.new(f,'text'=>' pos:').pack('side'=>'left') - posnum =TkLabel.new(f,'text'=>'').pack('side'=>'left') - - $set_linenum = proc{|w| - line, pos = w.index('insert').split('.') - linenum.text = line - posnum.text = pos - } - - f.pack('side'=>'bottom', 'expand'=>'true', 'fill'=>'x') - - if $tk_version =~ /^4\.[01]/ - s = TkScrollbar.new($code_window, 'orient'=>'vertical') - $code_text = TkText.new($code_window) { - height 40 - setgrid 'yes' - yscrollcommand proc{|first,last| s.set first,last} - } - s.command(proc{|*args| $code_text.yview(*args)}) - s.pack('side'=>'right', 'fill'=>'y') - $code_text.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'both') - else - TkFrame.new($code_window) {|f| - pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>1) - - hs = TkScrollbar.new($code_window, 'highlightthickness'=>0, - 'orient'=>'horizontal') - vs = TkScrollbar.new($code_window, 'highlightthickness'=>0, - 'orient'=>'vertical') - $code_text = TkText.new($code_window) {|t| - height 40 - #wrap 'word' - wrap 'char' - xscrollcommand proc{|first,last| hs.set first,last} - yscrollcommand proc{|first,last| vs.set first,last} - setgrid 'yes' - highlightthickness 0 - pady 2 - padx 3 - hs.command(proc{|*args| $code_text.xview(*args)}) - vs.command(proc{|*args| $code_text.yview(*args)}) - } - - $code_text.grid('in'=>f, 'padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>0, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - vs.grid('in'=>f, 'padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>1, - 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') -# xs.grid('in'=>f, 'padx'=>1, 'pady'=>1, 'row'=>1, 'column'=>0, -# 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') - TkGrid.rowconfigure(f, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure(f, 0, 'weight'=>1, 'minsize'=>0) - } - end - - btag = TkBindTag.new - - btag.bind('Key', $set_linenum, '%W') - btag.bind('Button', $set_linenum, '%W') - - btags = $code_text.bindtags - btags.insert(btags.index($code_text.class) + 1, btag) - $code_text.bindtags = btags - - else - $code_window.deiconify - $code_window.raise - end - - $code_window.title("Demo code: #{file}") - $code_window.iconname(file) - code = open([$demo_dir, file].join(File::Separator), 'r'){|fid| fid.read } - $code_text.delete('1.0', 'end') - code.force_encoding('EUC-JP') if defined?(::Encoding.default_external) - $code_text.insert('1.0', code) - TkTextMarkInsert.new($code_text,'1.0') - $set_linenum.call($code_text) -end - -def showCode2(demo) - file = "#{demo}.rb" - $code_window = nil unless defined? $code_window - if $code_window == nil || TkWinfo.exist?($code_window) == false - $code_window = TkToplevel.new(nil) - tf = TkFrame.new($code_window) - $code_text = TkText.new(tf, :font=>'Courier 10', :height=>30, - :wrap=>'word', :bd=>1, :setgrid=>true, - :highlightthickness=>0, :pady=>2, :padx=>3) - xscr = TkScrollbar.new(tf, :bd=>1){assign($code_text)} - yscr = TkScrollbar.new(tf, :bd=>1){assign($code_text)} - TkGrid($code_text, yscr, :sticky=>'news') - #TkGrid(xscr) - tf.grid_rowconfigure(0, :weight=>1) - tf.grid_columnconfigure(0, :weight=>1) - - bf = TkFrame.new($code_window) - - lf = TkFrame.new(bf) - TkLabel.new(lf, :text=>'line:').pack(:side=>:left) - linenum =TkLabel.new(lf, :text=>'').pack(:side=>:left) - TkLabel.new(lf, :text=>' pos:').pack(:side=>:left) - posnum =TkLabel.new(lf, :text=>'').pack(:side=>:left) - - $set_linenum = proc{|w| - line, pos = w.index('insert').split('.') - linenum.text = line - posnum.text = pos - } - - #b_dis = TkButton.new(bf, :text=>'了解', :default=>:active, - b_dis = TkButton.new(bf, :text=>'é–‰ã˜ã‚‹', :default=>:active, - :command=>proc{ - $code_window.destroy - $code_window = nil - }, - :image=>$image['delete'], :compound=>:left) - b_prn = TkButton.new(bf, :text=>'å°åˆ·', - :command=>proc{printCode($code_text, file)}, - :image=>$image['print'], :compound=>:left) - b_run = TkButton.new(bf, :text=>'å†å®Ÿè¡Œ', - :command=>proc{ - # eval($code_text.get('1.0','end'), _null_binding) - eval_samplecode($code_text.get('1.0','end'), '') - }, - :image=>$image['refresh'], :compound=>:left) - - TkGrid(lf, 'x', b_run, b_prn, b_dis, :padx=>4, :pady=>[6,4]) - bf.grid_columnconfigure(1, :weight=>1) - - TkGrid(tf, :sticky=>'news') - TkGrid(bf, :sticky=>'ew') - $code_window.grid_columnconfigure(0, :weight=>1) - $code_window.grid_rowconfigure(0, :weight=>1) - - $code_window.bind('Return', proc{|win| - b_dis.invoke unless win.kind_of?(TkText) - }, '%W') - $code_window.bindinfo('Return').each{|cmd, arg| - $code_window.bind_append('Escape', cmd, arg) - } - - btag = TkBindTag.new - - btag.bind('Key', $set_linenum, '%W') - btag.bind('Button', $set_linenum, '%W') - - btags = $code_text.bindtags - btags.insert(btags.index($code_text.class) + 1, btag) - $code_text.bindtags = btags - - else - $code_window.deiconify - $code_window.raise - end - - $code_window.title("Demo code: #{file}") - $code_window.iconname(file) - code = open([$demo_dir, file].join(File::Separator), 'r'){|fid| fid.read } - $code_text.delete('1.0', 'end') - code.force_encoding('EUC-JP') if defined?(::Encoding.default_external) - $code_text.insert('1.0', code) - TkTextMarkInsert.new($code_text,'1.0') - $set_linenum.call($code_text) -end - -if $tk_major_ver < 8 - alias showCode showCode1 -elsif $tk_major_ver == 8 && $tk_minor_ver < 4 - alias showCode showCode1 -else # ver >= 8.4 - alias showCode showCode2 -end - - -# printCode -- -# Prints the source code currently displayed in the See Code dialog. -# Much thanks to Arjen Markus for this. -# -# Arguments: -# txt - Name of text widget containing code to print -# file - Name of the original file (implicitly for title) - -def printCode(txt, file) - code = txt.get('1.0', 'end - 1c') - dir = '.' - dir = ENV['HOME'] if ENV['HOME'] - dir = ENV['TMP'] if ENV['TMP'] - dir = ENV['TEMP'] if ENV['TEMP'] - - fname = [dir, 'tkdemo-' + file].join(File::Separator) - open(fname, 'w'){|fid| fid.print(code)} - begin - case Tk::TCL_PLATFORM('platform') - when 'unix' - msg = `lp -c #{fname}` - unless $?.exitstatus == 0 - Tk.messageBox(:title=>'Print spooling failure', - :message=>'エラーãŒç™ºç”Ÿã—ã¾ã—ãŸï¼Ž' + - 'å°åˆ·ã«å¤±æ•—ã—ãŸã‚‚ã®ã¨æ€ã‚ã‚Œã¾ã™ : ' + msg) - end - when 'windows' - begin - printTextWin32(fname) - rescue => e - Tk.messageBox(:title=>'Print spooling failure', - :message=>'エラーãŒç™ºç”Ÿã—ã¾ã—ãŸï¼Ž' + - 'å°åˆ·ã«å¤±æ•—ã—ãŸã‚‚ã®ã¨æ€ã‚ã‚Œã¾ã™ : ' + - e.message) - end - when 'macintosh' - Tk.messageBox(:title=>'Operation not Implemented', - :message=>'å°åˆ·æ©Ÿèƒ½ã¯ã¾ã å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“') - else - Tk.messageBox(:title=>'Operation not Implemented', - :message=>'検出ã•ã‚ŒãŸç’°å¢ƒ ' + - Tk::TCL_PLATFORM('platform') + - ' ã¯æœªçŸ¥ã®ç’°å¢ƒã§ã‚ã‚‹ãŸã‚,' + - 'å°åˆ·æ©Ÿèƒ½ã¯å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“: ') - end - ensure - File.delete(fname) - end -end - -# printTextWin32 -- -# Print a file under Windows -# -# Arguments: -# filename - Name of the file -# -def printTextWin32(fname) - require 'win32/registry' - begin - app = Win32::Registry::HKEY_CLASSES_ROOT['.txt'] - pcmd = nil - Win32::Registry::HKEY_CLASSES_ROOT.open("#{app}\\shell\\print"){|reg| - pcmd = reg['command'] - } - rescue - app = Tk.tk_call('auto_execok', 'notepad.exe') - pcmd = "#{app} /p %1" - end - - pcmd.gsub!('%1', fname) - puts pcmd - cmd = Tk.tk_call('auto_execok', 'start') + ' /min ' + pcmd - - msg = `#{cmd}` - unless $?.exitstatus == 0 - fail RuntimeError, msg - end -end - -# aboutBox -# -# Pops up a message box with an "about" message -# -def aboutBox - Tk.messageBox('icon'=>'info', 'type'=>'ok', 'title'=>'About Widget Demo', - 'message'=>"Ruby/Tk ウィジェットデモ Ver.1.7.1-jp\n\n" + - "based on demos of Tk8.1 -- 8.5 " + - "( Copyright of Tcl/Tk demos:: " + - "(c) 1996-1997 Sun Microsystems, Inc. / " + - "(c) 1997-2000 Ajuba Solutions, Inc. / " + - "(c) 2001-2007 Donal K. Fellows / " + - "(c) 2002-2007 Daniel A. Steffen )\n\n" + - "Your Ruby & Tk Version ::\n" + - "Ruby#{RUBY_VERSION}(#{RUBY_RELEASE_DATE})[#{RUBY_PLATFORM}] / Tk#{$tk_patchlevel}#{(Tk::JAPANIZED_TK)? '-jp': ''}\n\n" + - "Ruby/Tk release date :: tcltklib #{TclTkLib::RELEASE_DATE}; tk #{Tk::RELEASE_DATE}") -end - -#################################### -# 引数ã§æŒ‡å®šã•ã‚ŒãŸãƒ‡ãƒ¢ã‚’èµ·å‹•ã™ã‚‹ -no_launcher = false -if ARGV[0] == '-n' - ARGV.shift - no_launcher = true if ARGV.size > 0 -else - # show the root widget to make it lower then demo windows - Tk.update rescue nil -end -ARGV.each{|cmd| - if cmd =~ /(.*).rb/ - cmd = $1 - end - #eval(IO.readlines("#{[$demo_dir, cmd].join(File::Separator)}.rb").join, - # _null_binding) - eval_samplecode(IO.readlines("#{[$demo_dir, cmd].join(File::Separator)}.rb").join, cmd + '.rb') -} -if no_launcher - $root.withdraw # hide root window - Thread.start{ - loop do - count = 0 - $root.winfo_children.each{|w| - count += 1 if w.kind_of?(TkToplevel) - } - $root.destroy if count == 0 - end - } -end - -################################ -# イベント待ã¡ã«å…¥ã‚‹ -Tk.mainloop diff --git a/ext/tk/sample/editable_listbox.rb b/ext/tk/sample/editable_listbox.rb deleted file mode 100644 index 5cbd20e0a5..0000000000 --- a/ext/tk/sample/editable_listbox.rb +++ /dev/null @@ -1,149 +0,0 @@ -# frozen_string_literal: false -# -# Tk::RbWidget::Editable_Listbox class -# -# When "DoubleClick-1" on a listbox item, the entry box is opened on the -# item. And when hit "Return" key on the entry box after modifying the -# text, the entry box is closed and the item is changed. Or when hit -# "Escape" key, the entry box is closed without modification. -# -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -module Tk - module RbWidget - class Editable_Listbox < TkListbox - end - end -end - - -class Tk::RbWidget::Editable_Listbox < TkListbox - #------------------------------------ - BindTag = TkBindTag.new_by_name(self.to_s.gsub(/::/, '#')) - - BindTag.bind('FocusIn', :widget){|w| - w.instance_eval{ - if idx = @ebox.pos - see(idx) if bbox(idx).empty? - @ebox.focus(true) - end - } - } - - BindTag.bind('Double-1', :widget, :y){|w, y| - w.instance_eval{ _ebox_placer(nearest(y)) } - } - - BindTag.bind('Return', :widget){|w| - w.instance_eval{ - if idx = index(:active) - _ebox_placer(idx) - end - } - } - #------------------------------------ - - def configure(*args) - ret = super - - case cget(:state) - when 'normal' - # do nothing - when 'disabled' - _ebox_erase - else # unknown - # do nothing - - end - - ret - end - - def _ebox_move(idx) - return nil if cget(:state) == 'disabled' - x, y, w, h = bbox(idx) - return nil unless y && h - @ebox.place(:x => 0, :relwidth => 1.0, - :y => y - selectborderwidth, - :height => h + 2 * selectborderwidth) - @ebox.pos = idx - @ebox.focus - end - - def _ebox_placer(idx) - return nil unless _ebox_move(idx) - @ebox.value = listvariable.list[idx] - @ebox.xview_moveto(self.xview[0]) - end - - def _ebox_erase - @ebox.place_forget - @ebox.pos = nil - end - private :_ebox_move, :_ebox_placer, :_ebox_erase - - def _setup_ebox_bindings - # bindings for entry - @ebox.bind('Return'){ - list = listvariable.list - list[@ebox.pos] = @ebox.value if @ebox.pos - listvariable.value = list - _ebox_erase - focus - } - - @ebox.bind('Escape'){ _ebox_erase } - end - def _setup_listbox_bindings - # bindings for listbox - tags = bindtags - bindtags(tags.insert(tags.index(self) + 1, self.class::BindTag)) - end - private :_setup_ebox_bindings, :_setup_listbox_bindings - - def yview(*args) - if !@ebox.pos || bbox(@ebox.pos).empty? - @ebox.place_forget - else - _ebox_move(@ebox.pos) - end - super - end - - def create_self(keys) - super(keys) - - unless self.listvariable - self.listvariable = TkVariable.new(self.get(0, :end)) - end - - @ebox = TkEntry.new(self){ - @pos = nil - def self.pos; @pos; end - def self.pos=(idx); @pos = idx; end - } - - _setup_ebox_bindings - _setup_listbox_bindings - end -end - -if $0 == __FILE__ - #lbox0 = TkListbox.new.pack(:side=>:left) - #lbox0.insert(:end, 0,1,2,3,4,5,6,7,8,9,0,1,2,3) - - scr = TkScrollbar.new.pack(:side=>:right, :fill=>:y) - - lbox1 = Tk::RbWidget::Editable_Listbox.new.pack(:side=>:left) - lbox2 = Tk::RbWidget::Editable_Listbox.new.pack(:side=>:left) - - scr.assign(lbox1, lbox2) - - lbox1.insert(:end, *%w(a b c d e f g h i j k l m n)) - lbox2.insert(:end, 0,1,2,3,4,5,6,7,8,9,0,1,2,3) - - - Tk.mainloop -end diff --git a/ext/tk/sample/encstr_usage.rb b/ext/tk/sample/encstr_usage.rb deleted file mode 100644 index 49a29ec19a..0000000000 --- a/ext/tk/sample/encstr_usage.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: false -require 'tk' - -TkMessage.new(:width=>400, :text=><5).pack -t2 = TkText.new(:height=>5).pack -t3 = TkText.new(:height=>5).pack - -src_str = IO.readlines(File.join(File.dirname(__FILE__),'iso2022-kr.txt')).join - -t1.insert('end', - "use neither Tk::EncodedString class nor Tk.encoding= method\n\n") -t1.insert('end', src_str) - -enc_str = Tk::EncodedString(src_str, 'iso2022-kr') -t2.insert('end', - "use Tk::EncodedString class (Tk.encoding => '#{Tk.encoding}')\n\n") -t2.insert('end', enc_str) - -Tk.encoding = 'iso2022-kr' -t3.insert('end', "use Tk.encoding = 'iso2022-kr' (Tk.force_default_encoding? == #{Tk.force_default_encoding?})\n\n") - -t3.insert('end', src_str) - -Tk.mainloop diff --git a/ext/tk/sample/figmemo_sample.rb b/ext/tk/sample/figmemo_sample.rb deleted file mode 100644 index d947030606..0000000000 --- a/ext/tk/sample/figmemo_sample.rb +++ /dev/null @@ -1,457 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' - -begin - # try to use Img extension - require 'tkextlib/tkimg' -rescue Exception - # cannot use Img extension --> ignore -end - - -############################ -# scrolled_canvas -class TkScrolledCanvas < TkCanvas - include TkComposite - - def initialize_composite(keys={}) - @h_scr = TkScrollbar.new(@frame) - @v_scr = TkScrollbar.new(@frame) - - @canvas = TkCanvas.new(@frame) - @path = @canvas.path - - @canvas.xscrollbar(@h_scr) - @canvas.yscrollbar(@v_scr) - - TkGrid.rowconfigure(@frame, 0, :weight=>1, :minsize=>0) - TkGrid.columnconfigure(@frame, 0, :weight=>1, :minsize=>0) - - @canvas.grid(:row=>0, :column=>0, :sticky=>'news') - @h_scr.grid(:row=>1, :column=>0, :sticky=>'ew') - @v_scr.grid(:row=>0, :column=>1, :sticky=>'ns') - - delegate('DEFAULT', @canvas) - delegate('background', @canvas, @h_scr, @v_scr) - delegate('activebackground', @h_scr, @v_scr) - delegate('troughcolor', @h_scr, @v_scr) - delegate('repeatdelay', @h_scr, @v_scr) - delegate('repeatinterval', @h_scr, @v_scr) - delegate('borderwidth', @frame) - delegate('relief', @frame) - - delegate_alias('canvasborderwidth', 'borderwidth', @canvas) - delegate_alias('canvasrelief', 'relief', @canvas) - - delegate_alias('scrollbarborderwidth', 'borderwidth', @h_scr, @v_scr) - delegate_alias('scrollbarrelief', 'relief', @h_scr, @v_scr) - - configure(keys) unless keys.empty? - end -end - -############################ -class PhotoCanvas < TkScrolledCanvas - -USAGE = <@photo) - - width = self.width - height = self.height - @scr_region = [-width, -height, width, height] - self.scrollregion(@scr_region) - self.xview_moveto(0.25) - self.yview_moveto(0.25) - - @col = 'red' - @font = 'Helvetica -12' - - @memo_id_num = -1 - @memo_id_head = 'memo_' - @memo_id_tag = nil - @overlap_d = 2 - - @state = TkVariable.new - @border = 2 - @selectborder = 1 - @delta = @border + @selectborder - @entry = TkEntry.new(self, :relief=>:ridge, :borderwidth=>@border, - :selectborderwidth=>@selectborder, - :highlightthickness=>0) - @entry.bind('Return'){@state.value = 0} - - @mode = old_mode = 0 - - _state0() - - bind('2', :x, :y){|x,y| scan_mark(x,y)} - bind('B2-Motion', :x, :y){|x,y| scan_dragto(x,y)} - - bind('3'){ - next if (old_mode = @mode) == 0 - @items.each{|item| item.delete } - _state0() - } - - bind('Double-3', :widget, :x, :y){|w, x, y| - next if old_mode != 0 - x = w.canvasx(x) - y = w.canvasy(y) - tag = nil - w.find_overlapping(x - @overlap_d, y - @overlap_d, - x + @overlap_d, y + @overlap_d).find{|item| - ! (item.tags.find{|name| - if name =~ /^(#{@memo_id_head}\d+)$/ - tag = $1 - end - }.empty?) - } - w.delete(tag) if tag - } - end - - #----------------------------------- - private - def _state0() # init - @mode = 0 - - @memo_id_num += 1 - @memo_id_tag = @memo_id_head + @memo_id_num.to_s - - @target = nil - @items = [] - @mark = [0, 0] - bind_remove('Motion') - bind('ButtonRelease-1', proc{|x,y| _state1(x,y)}, '%x', '%y') - end - - def _state1(x,y) # set center - @mode = 1 - - @target = TkcOval.new(self, - [canvasx(x), canvasy(y)], [canvasx(x), canvasy(y)], - :outline=>@col, :width=>3, :tags=>[@memo_id_tag]) - @items << @target - @mark = [x,y] - - bind('Motion', proc{|x,y| _state2(x,y)}, '%x', '%y') - bind('ButtonRelease-1', proc{|x,y| _state3(x,y)}, '%x', '%y') - end - - def _state2(x,y) # create circle - @mode = 2 - - r = Integer(Math.sqrt((x-@mark[0])**2 + (y-@mark[1])**2)) - @target.coords([canvasx(@mark[0] - r), canvasy(@mark[1] - r)], - [canvasx(@mark[0] + r), canvasy(@mark[1] + r)]) - end - - def _state3(x,y) # set line start - @mode = 3 - - @target = TkcLine.new(self, - [canvasx(x), canvasy(y)], [canvasx(x), canvasy(y)], - :arrow=>:first, :arrowshape=>[10, 14, 5], - :fill=>@col, :tags=>[@memo_id_tag]) - @items << @target - @mark = [x, y] - - bind('Motion', proc{|x,y| _state4(x,y)}, '%x', '%y') - bind('ButtonRelease-1', proc{|x,y| _state5(x,y)}, '%x', '%y') - end - - def _state4(x,y) # create line - @mode = 4 - - @target.coords([canvasx(@mark[0]), canvasy(@mark[1])], - [canvasx(x), canvasy(y)]) - end - - def _state5(x,y) # set text - @mode = 5 - - if x - @mark[0] >= 0 - justify = 'left' - dx = - @delta - - if y - @mark[1] >= 0 - anchor = 'nw' - dy = - @delta - else - anchor = 'sw' - dy = @delta - end - else - justify = 'right' - dx = @delta - - if y - @mark[1] >= 0 - anchor = 'ne' - dy = - @delta - else - anchor = 'se' - dy = @delta - end - end - - bind_remove('Motion') - - @entry.value = '' - @entry.configure(:justify=>justify, :font=>@font, :foreground=>@col) - - ewin = TkcWindow.new(self, [canvasx(x)+dx, canvasy(y)+dy], - :window=>@entry, :state=>:normal, :anchor=>anchor, - :tags=>[@memo_id_tag]) - - @entry.focus - @entry.grab - @state.wait - @entry.grab_release - - ewin.delete - - @target = TkcText.new(self, [canvasx(x), canvasy(y)], - :anchor=>anchor, :justify=>justify, - :fill=>@col, :font=>@font, :text=>@entry.value, - :tags=>[@memo_id_tag]) - - _state0() - end - - #----------------------------------- - public - def load_photo(filename) - @photo.configure(:file=>filename) - end - - def modified? - ! ((find_withtag('all') - [@img]).empty?) - end - - def fig_erase - (find_withtag('all') - [@img]).each{|item| item.delete} - end - - def reset_region - width = @photo.width - height = @photo.height - - if width > @scr_region[2] - @scr_region[0] = -width - @scr_region[2] = width - end - - if height > @scr_region[3] - @scr_region[1] = -height - @scr_region[3] = height - end - - self.scrollregion(@scr_region) - self.xview_moveto(0.25) - self.yview_moveto(0.25) - end - - def get_texts - ret = [] - find_withtag('all').each{|item| - if item.kind_of?(TkcText) - ret << item[:text] - end - } - ret - end -end -############################ - -# define methods for menu -def open_file(canvas, fname) - if canvas.modified? - ret = Tk.messageBox(:icon=>'warning',:type=>'okcancel',:default=>'cancel', - :message=>'Canvas may be modified. Really erase? ') - return if ret == 'cancel' - end - - filetypes = [ - ['GIF Files', '.gif'], - ['GIF Files', [], 'GIFF'], - ['PPM Files', '.ppm'], - ['PGM Files', '.pgm'] - ] - - begin - if Tk::Img::package_version != '' - filetypes << ['JPEG Files', ['.jpg', '.jpeg']] - filetypes << ['PNG Files', '.png'] - filetypes << ['PostScript Files', '.ps'] - filetypes << ['PDF Files', '.pdf'] - filetypes << ['Windows Bitmap Files', '.bmp'] - filetypes << ['Windows Icon Files', '.ico'] - filetypes << ['PCX Files', '.pcx'] - filetypes << ['Pixmap Files', '.pixmap'] - filetypes << ['SGI Files', '.sgi'] - filetypes << ['Sun Raster Files', '.sun'] - filetypes << ['TGA Files', '.tga'] - filetypes << ['TIFF Files', '.tiff'] - filetypes << ['XBM Files', '.xbm'] - filetypes << ['XPM Files', '.xpm'] - end - rescue - end - - filetypes << ['ALL Files', '*'] - - fpath = Tk.getOpenFile(:filetypes=>filetypes) - return if fpath.empty? - - begin - canvas.load_photo(fpath) - rescue => e - Tk.messageBox(:icon=>'error', :type=>'ok', - :message=>"Fail to read '#{fpath}'.\n#{e.message}") - end - - canvas.fig_erase - canvas.reset_region - - fname.value = fpath -end - -# -------------------------------- -def save_memo(canvas, fname) - initname = fname.value - if initname != '-' - initname = File.basename(initname, File.extname(initname)) - fpath = Tk.getSaveFile(:filetypes=>[ ['Text Files', '.txt'], - ['ALL Files', '*'] ], - :initialfile=>initname) - else - fpath = Tk.getSaveFile(:filetypes=>[ ['Text Files', '.txt'], - ['ALL Files', '*'] ]) - end - return if fpath.empty? - - begin - fid = open(fpath, 'w') - rescue => e - Tk.messageBox(:icon=>'error', :type=>'ok', - :message=>"Fail to open '#{fname.value}'.\n#{e.message}") - end - - begin - canvas.get_texts.each{|txt| - fid.print(txt, "\n") - } - ensure - fid.close - end -end - -# -------------------------------- -def ps_print(canvas, fname) - initname = fname.value - if initname != '-' - initname = File.basename(initname, File.extname(initname)) - fpath = Tk.getSaveFile(:filetypes=>[ ['Postscript Files', '.ps'], - ['ALL Files', '*'] ], - :initialfile=>initname) - else - fpath = Tk.getSaveFile(:filetypes=>[ ['Postscript Files', '.ps'], - ['ALL Files', '*'] ]) - end - return if fpath.empty? - - bbox = canvas.bbox('all') - canvas.postscript(:file=>fpath, :x=>bbox[0], :y=>bbox[1], - :width=>bbox[2] - bbox[0], :height=>bbox[3] - bbox[1]) -end - -# -------------------------------- -def quit(canvas) - ret = Tk.messageBox(:icon=>'warning', :type=>'okcancel', - :default=>'cancel', - :message=>'Really quit? ') - exit if ret == 'ok' -end - -# -------------------------------- -# setup root -root = TkRoot.new(:title=>'Fig Memo') - -# create canvas frame -canvas = PhotoCanvas.new(root).pack(:fill=>:both, :expand=>true) -usage_frame = TkFrame.new(root, :relief=>:ridge, :borderwidth=>2) -hide_btn = TkButton.new(usage_frame, :text=>'hide usage', - :font=>{:size=>8}, :pady=>1, - :command=>proc{usage_frame.unpack}) -hide_btn.pack(:anchor=>'e', :padx=>5) -usage = TkLabel.new(usage_frame, :text=>PhotoCanvas::USAGE, - :font=>'Helvetica 8', :justify=>:left).pack - -show_usage = proc{ - usage_frame.pack(:before=>canvas, :fill=>:x, :expand=>true) -} - -fname = TkVariable.new('-') -f = TkFrame.new(root, :relief=>:sunken, :borderwidth=>1).pack(:fill=>:x) -label = TkLabel.new(f, :textvariable=>fname, - :font=>{:size=>-12, :weight=>:bold}, - :anchor=>'w').pack(:side=>:left, :fill=>:x, :padx=>10) - -# create menu -mspec = [ - [ ['File', 0], - ['Show Usage', proc{show_usage.call}, 5], - '---', - ['Open Image File', proc{open_file(canvas, fname)}, 0], - ['Save Memo Texts', proc{save_memo(canvas, fname)}, 0], - '---', - ['Save Postscript', proc{ps_print(canvas, fname)}, 5], - '---', - ['Quit', proc{quit(canvas)}, 0] - ] -] -root.add_menubar(mspec) - -# manage wm_protocol -root.protocol(:WM_DELETE_WINDOW){quit(canvas)} - -# show usage -show_usage.call - -# -------------------------------- -# start eventloop -Tk.mainloop diff --git a/ext/tk/sample/images/earth.gif b/ext/tk/sample/images/earth.gif deleted file mode 100644 index 2c229eb110..0000000000 Binary files a/ext/tk/sample/images/earth.gif and /dev/null differ diff --git a/ext/tk/sample/images/earthris.gif b/ext/tk/sample/images/earthris.gif deleted file mode 100644 index c4ee473727..0000000000 Binary files a/ext/tk/sample/images/earthris.gif and /dev/null differ diff --git a/ext/tk/sample/images/face.xbm b/ext/tk/sample/images/face.xbm deleted file mode 100644 index 03d829f4d1..0000000000 --- a/ext/tk/sample/images/face.xbm +++ /dev/null @@ -1,173 +0,0 @@ -#define face_width 108 -#define face_height 144 -#define face_x_hot 48 -#define face_y_hot 80 -static char face_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, - 0x20, 0x80, 0x24, 0x05, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x88, - 0x24, 0x20, 0x80, 0x24, 0x00, 0x00, 0x00, 0x10, 0x80, 0x04, 0x00, 0x01, - 0x00, 0x01, 0x40, 0x0a, 0x09, 0x00, 0x92, 0x04, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x40, 0x12, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x84, - 0x24, 0x40, 0x22, 0xa8, 0x02, 0x14, 0x84, 0x92, 0x40, 0x42, 0x12, 0x04, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x52, 0x11, 0x00, 0x12, 0x00, - 0x40, 0x02, 0x00, 0x20, 0x00, 0x08, 0x00, 0xaa, 0x02, 0x54, 0x85, 0x24, - 0x00, 0x10, 0x12, 0x00, 0x00, 0x81, 0x44, 0x00, 0x90, 0x5a, 0x00, 0xea, - 0x1b, 0x00, 0x80, 0x40, 0x40, 0x02, 0x00, 0x08, 0x00, 0x20, 0xa2, 0x05, - 0x8a, 0xb4, 0x6e, 0x45, 0x12, 0x04, 0x08, 0x00, 0x00, 0x00, 0x10, 0x02, - 0xa8, 0x92, 0x00, 0xda, 0x5f, 0x10, 0x00, 0x10, 0xa1, 0x04, 0x20, 0x41, - 0x02, 0x00, 0x5a, 0x25, 0xa0, 0xff, 0xfb, 0x05, 0x41, 0x02, 0x04, 0x00, - 0x00, 0x08, 0x40, 0x80, 0xec, 0x9b, 0xec, 0xfe, 0x7f, 0x01, 0x04, 0x20, - 0x90, 0x02, 0x04, 0x00, 0x08, 0x20, 0xfb, 0x2e, 0xf5, 0xff, 0xff, 0x57, - 0x00, 0x04, 0x02, 0x00, 0x00, 0x20, 0x01, 0xc1, 0x6e, 0xab, 0xfa, 0xff, - 0xff, 0x05, 0x90, 0x20, 0x48, 0x02, 0x00, 0x04, 0x20, 0xa8, 0xdf, 0xb5, - 0xfe, 0xff, 0xff, 0x0b, 0x01, 0x00, 0x01, 0x00, 0x80, 0x80, 0x04, 0xe0, - 0xbb, 0xef, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x04, 0x48, 0x02, 0x00, 0x20, - 0x80, 0xf4, 0x6f, 0xfb, 0xff, 0xff, 0xff, 0x20, 0x90, 0x40, 0x02, 0x00, - 0x00, 0x04, 0x08, 0xb8, 0xf6, 0xff, 0xff, 0xdf, 0xbe, 0x12, 0x45, 0x10, - 0x90, 0x04, 0x90, 0x00, 0x22, 0xfa, 0xff, 0xff, 0xff, 0xbb, 0xd7, 0xe9, - 0x3a, 0x02, 0x02, 0x00, 0x04, 0x90, 0x80, 0xfe, 0xdf, 0xf6, 0xb7, 0xef, - 0xbe, 0x56, 0x57, 0x40, 0x48, 0x09, 0x00, 0x04, 0x00, 0xfa, 0xf5, 0xdf, - 0xed, 0x5a, 0xd5, 0xea, 0xbd, 0x09, 0x00, 0x00, 0x40, 0x00, 0x92, 0xfe, - 0xbf, 0x7d, 0xb7, 0x6a, 0x55, 0xbf, 0xf7, 0x02, 0x11, 0x01, 0x00, 0x91, - 0x00, 0xff, 0xff, 0xaf, 0x55, 0x55, 0x5b, 0xeb, 0xef, 0x22, 0x04, 0x04, - 0x04, 0x00, 0xa4, 0xff, 0xf7, 0xad, 0xaa, 0xaa, 0xaa, 0xbe, 0xfe, 0x03, - 0x20, 0x00, 0x10, 0x44, 0x80, 0xff, 0x7f, 0x55, 0x12, 0x91, 0x2a, 0xeb, - 0xbf, 0x0b, 0x82, 0x02, 0x00, 0x00, 0xd1, 0x7f, 0xdf, 0xa2, 0xa4, 0x54, - 0x55, 0xfd, 0xfd, 0x47, 0x08, 0x08, 0x00, 0x21, 0xe4, 0xff, 0x37, 0x11, - 0x09, 0xa5, 0xaa, 0xb6, 0xff, 0x0d, 0x80, 0x00, 0x00, 0x04, 0xd0, 0xff, - 0x4f, 0x44, 0x20, 0x48, 0x55, 0xfb, 0xff, 0x27, 0x11, 0x02, 0x40, 0x40, - 0xe2, 0xfb, 0x15, 0x11, 0x4a, 0x55, 0x4a, 0x7d, 0xf7, 0x0f, 0x00, 0x00, - 0x04, 0x08, 0xf8, 0xdf, 0x52, 0x44, 0x01, 0x52, 0xb5, 0xfa, 0xff, 0x0f, - 0x49, 0x02, 0x00, 0x02, 0xe9, 0xf6, 0x0a, 0x11, 0xa4, 0x88, 0x4a, 0x6d, - 0xff, 0x5f, 0x00, 0x00, 0x10, 0x20, 0xf0, 0x2f, 0x21, 0x44, 0x10, 0x52, - 0xb5, 0xfa, 0xff, 0x0f, 0x44, 0x04, 0x80, 0x08, 0xf8, 0xab, 0x8a, 0x00, - 0x81, 0xa4, 0xd4, 0xd6, 0xfe, 0x2f, 0x00, 0x00, 0x04, 0x40, 0xb5, 0x2d, - 0x21, 0x08, 0x04, 0x90, 0xaa, 0xfa, 0xff, 0x1f, 0x11, 0x01, 0x00, 0x04, - 0xf0, 0x57, 0x0a, 0x22, 0x40, 0x4a, 0xda, 0x5e, 0xfb, 0x1f, 0x40, 0x00, - 0x40, 0x20, 0xba, 0x95, 0x90, 0x00, 0x01, 0xa0, 0xaa, 0xea, 0xff, 0x5f, - 0x02, 0x02, 0x00, 0x01, 0xe8, 0x57, 0x05, 0x00, 0x00, 0x12, 0xd5, 0xfe, - 0xfd, 0x1f, 0x48, 0x00, 0x04, 0x48, 0x7a, 0x95, 0x08, 0x02, 0x10, 0x40, - 0xaa, 0x55, 0xf7, 0x1f, 0x00, 0x09, 0x20, 0x00, 0xf8, 0x57, 0x22, 0x10, - 0x00, 0x28, 0xa9, 0xfa, 0xff, 0x5f, 0x02, 0x00, 0x00, 0x49, 0xdd, 0x29, - 0x01, 0x00, 0x80, 0x80, 0xaa, 0xd7, 0xff, 0x0f, 0x10, 0x00, 0x08, 0x00, - 0xf8, 0x96, 0x08, 0x00, 0x00, 0x20, 0x54, 0xfa, 0xee, 0x3f, 0x81, 0x04, - 0x40, 0x24, 0xfe, 0x55, 0x82, 0x00, 0x00, 0x82, 0xd2, 0xad, 0xff, 0x0f, - 0x08, 0x00, 0x04, 0x80, 0x6c, 0x97, 0x00, 0x00, 0x02, 0x20, 0xa9, 0xf6, - 0xdf, 0x5f, 0x00, 0x02, 0x20, 0x09, 0xfa, 0x49, 0x12, 0x00, 0x20, 0x84, - 0x54, 0xdb, 0xfe, 0x1f, 0x91, 0x00, 0x00, 0x00, 0xf8, 0x2b, 0x00, 0x20, - 0x00, 0x40, 0xa4, 0xf6, 0xbb, 0x1f, 0x04, 0x00, 0x44, 0x92, 0x7e, 0x95, - 0x02, 0x00, 0x00, 0x89, 0xaa, 0xdd, 0xff, 0x1f, 0x20, 0x09, 0x10, 0x00, - 0xf4, 0x57, 0x20, 0x01, 0x08, 0x20, 0xa9, 0x76, 0xff, 0x5f, 0x02, 0x00, - 0x00, 0x21, 0xfc, 0x4a, 0x05, 0x00, 0x01, 0x80, 0x54, 0xdb, 0xff, 0x1e, - 0x08, 0x02, 0x04, 0x08, 0xf9, 0x2b, 0x00, 0x00, 0x40, 0x28, 0xd2, 0xf6, - 0xff, 0xbf, 0x80, 0x00, 0x90, 0x00, 0xbc, 0x92, 0x08, 0x10, 0x00, 0x82, - 0x54, 0xdb, 0xff, 0x1f, 0x20, 0x00, 0x00, 0x44, 0xf9, 0x55, 0x02, 0x01, - 0x00, 0x20, 0xaa, 0xbd, 0xfd, 0x3f, 0x08, 0x04, 0x04, 0x10, 0xf4, 0x2a, - 0x01, 0x00, 0x22, 0x80, 0xd4, 0xf6, 0xff, 0x5f, 0x82, 0x00, 0x40, 0x02, - 0xf8, 0x55, 0x20, 0x00, 0x00, 0x50, 0x6a, 0xdf, 0xfe, 0x3f, 0x00, 0x00, - 0x00, 0x48, 0xe9, 0x4a, 0x05, 0x08, 0x00, 0xa5, 0xd5, 0xf5, 0xff, 0x3f, - 0x10, 0x01, 0x10, 0x01, 0xb0, 0xab, 0x92, 0x02, 0x40, 0xf8, 0xbf, 0xde, - 0xfe, 0x5f, 0x02, 0x04, 0x04, 0x48, 0xfa, 0xd4, 0x6f, 0x20, 0x84, 0xef, - 0xff, 0xfb, 0xff, 0x1f, 0x20, 0x00, 0x00, 0x00, 0xe0, 0xed, 0xbf, 0x0b, - 0xa1, 0x7e, 0xff, 0xbf, 0xfd, 0x5f, 0x04, 0x01, 0x20, 0x49, 0xd2, 0xfb, - 0xfe, 0x55, 0xd4, 0xff, 0xff, 0xf6, 0xff, 0x07, 0x00, 0x04, 0x00, 0x00, - 0xc0, 0xaa, 0xfb, 0x2b, 0xa2, 0xfe, 0xff, 0xdf, 0xee, 0x1f, 0x91, 0x00, - 0x82, 0xa4, 0xa4, 0xf5, 0xff, 0x57, 0xd5, 0xff, 0xbf, 0xfd, 0xff, 0x4d, - 0x00, 0x00, 0x20, 0x00, 0x88, 0x5b, 0xff, 0x2f, 0x69, 0xff, 0xff, 0xdb, - 0xfe, 0x1f, 0x24, 0x02, 0x00, 0x49, 0xa2, 0xd6, 0xff, 0x5f, 0xea, 0xff, - 0x7f, 0x7f, 0x7f, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x40, 0xab, 0xf7, 0xbb, - 0xf0, 0xdf, 0xff, 0xd5, 0xff, 0xbf, 0x82, 0x04, 0x42, 0x24, 0x91, 0xd5, - 0xaa, 0xae, 0xd4, 0xaa, 0x52, 0x7b, 0xff, 0x15, 0x08, 0x00, 0x00, 0x01, - 0x04, 0x55, 0xd5, 0x55, 0x70, 0x5b, 0x75, 0xdd, 0xdf, 0x1f, 0x40, 0x00, - 0x08, 0x48, 0xa0, 0x4a, 0xa9, 0x56, 0xea, 0x56, 0xad, 0x6a, 0x7d, 0x9b, - 0x04, 0x01, 0x00, 0x02, 0x42, 0x2a, 0xd5, 0xaa, 0xa8, 0xaa, 0xaa, 0xfa, - 0xdf, 0x2f, 0x10, 0x04, 0x22, 0x48, 0x08, 0x45, 0x2a, 0x15, 0x68, 0x55, - 0x55, 0xd7, 0x76, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x40, 0x2a, 0x80, 0xa0, - 0xb2, 0x09, 0x48, 0xb9, 0xdf, 0x17, 0x22, 0x01, 0x00, 0x24, 0x45, 0x8a, - 0x24, 0x4a, 0x54, 0x51, 0x91, 0xf6, 0x6e, 0x4b, 0x00, 0x04, 0x90, 0x00, - 0x80, 0x52, 0x00, 0x20, 0x69, 0x05, 0xa4, 0xaa, 0xff, 0x1e, 0x48, 0x00, - 0x02, 0x92, 0x08, 0x05, 0x81, 0x94, 0xd4, 0x92, 0x40, 0xfd, 0xb6, 0x8b, - 0x00, 0x01, 0x40, 0x00, 0x82, 0x54, 0x00, 0x48, 0x68, 0x05, 0x90, 0xa4, - 0xef, 0x06, 0x24, 0x00, 0x08, 0x12, 0x10, 0x05, 0x00, 0x10, 0xb5, 0x01, - 0x42, 0xfb, 0xbf, 0x43, 0x00, 0x09, 0x00, 0x40, 0x81, 0xa8, 0x08, 0x4a, - 0xaa, 0x96, 0x90, 0xac, 0x6d, 0x15, 0x22, 0x00, 0x20, 0x09, 0x04, 0x15, - 0x80, 0x28, 0xdc, 0x01, 0x24, 0xfb, 0xbf, 0x01, 0x80, 0x04, 0x09, 0x00, - 0x40, 0x48, 0x02, 0x45, 0xb2, 0x2e, 0x41, 0x6d, 0xef, 0x05, 0x11, 0x00, - 0x40, 0x52, 0x02, 0x15, 0x29, 0x2a, 0xac, 0x42, 0x54, 0xfb, 0x3b, 0x51, - 0x84, 0x00, 0x08, 0x00, 0x20, 0x54, 0x80, 0x05, 0xb5, 0x3d, 0xa2, 0xb6, - 0xdf, 0x00, 0x20, 0x04, 0x20, 0x49, 0x89, 0xa8, 0x6a, 0x29, 0xac, 0xd6, - 0x54, 0xff, 0x3f, 0x84, 0x00, 0x01, 0x04, 0x10, 0x00, 0x94, 0xa8, 0x56, - 0xda, 0x5f, 0xab, 0xd5, 0x1e, 0x10, 0x48, 0x00, 0x90, 0x82, 0x48, 0xa8, - 0xb2, 0xac, 0xfd, 0x55, 0xd5, 0xfe, 0x9f, 0x80, 0x00, 0x0a, 0x02, 0x08, - 0x02, 0x55, 0x5a, 0x75, 0xff, 0xaf, 0xb6, 0xf7, 0x2d, 0x12, 0x92, 0x00, - 0x10, 0x20, 0x10, 0xa8, 0x54, 0xd5, 0xbf, 0x5d, 0xad, 0xdd, 0x0f, 0x00, - 0x00, 0x04, 0x40, 0x09, 0x84, 0xa8, 0xaa, 0x5a, 0xed, 0xeb, 0x6a, 0xff, - 0x9f, 0xa4, 0x24, 0x01, 0x02, 0xa0, 0x20, 0x50, 0x55, 0xd5, 0xbe, 0xae, - 0xad, 0xfd, 0x16, 0x00, 0x10, 0x04, 0x20, 0x0a, 0x08, 0xb4, 0xaa, 0x95, - 0xaa, 0x7b, 0xb7, 0xdb, 0x5f, 0x92, 0x04, 0x01, 0x84, 0x20, 0x21, 0x51, - 0xd5, 0x2a, 0xa9, 0xee, 0xd5, 0xfe, 0x0d, 0x00, 0x20, 0x04, 0x10, 0x00, - 0x08, 0x50, 0xe9, 0xd7, 0xd4, 0xfb, 0xb5, 0xff, 0x9f, 0x24, 0x09, 0x01, - 0x42, 0x4a, 0xa2, 0x64, 0xd5, 0x55, 0x7b, 0x7f, 0xda, 0x7d, 0x4f, 0x00, - 0x20, 0x04, 0x00, 0x80, 0x00, 0xa0, 0x2a, 0x13, 0x84, 0x6a, 0x55, 0xff, - 0x1d, 0x48, 0x8a, 0x00, 0x94, 0x24, 0x8a, 0xc8, 0xaa, 0x42, 0x20, 0x5d, - 0xf5, 0xff, 0x5f, 0x01, 0x00, 0x02, 0x01, 0x00, 0x20, 0xa2, 0x4a, 0x1a, - 0x82, 0x56, 0xda, 0xbd, 0x3f, 0x92, 0x92, 0x00, 0x90, 0x92, 0x00, 0x40, - 0x95, 0x6a, 0xf4, 0x55, 0x6d, 0xff, 0xd6, 0x00, 0x00, 0x0a, 0x04, 0x20, - 0x14, 0x49, 0x4b, 0xaa, 0xaa, 0x56, 0xf5, 0xff, 0xbf, 0xab, 0xa4, 0x00, - 0x20, 0x89, 0x40, 0x80, 0xaa, 0xaa, 0xaa, 0xaa, 0xde, 0xbf, 0xeb, 0x03, - 0x00, 0x02, 0x04, 0x02, 0x0a, 0x10, 0x2b, 0x2a, 0x55, 0x5b, 0xf5, 0xff, - 0xd7, 0x2f, 0x92, 0x00, 0x10, 0x28, 0x21, 0x01, 0x56, 0x95, 0xa0, 0x56, - 0xdf, 0xef, 0xea, 0x87, 0x40, 0x0a, 0x42, 0x41, 0x00, 0x90, 0xaa, 0x52, - 0xb6, 0xad, 0xfa, 0xff, 0xd5, 0x2f, 0x14, 0x00, 0x00, 0x04, 0x95, 0x04, - 0xaa, 0xac, 0x55, 0x6b, 0xff, 0xb7, 0xea, 0x9f, 0x40, 0x02, 0x28, 0x51, - 0x00, 0x40, 0x58, 0xd5, 0xda, 0xd6, 0x6e, 0x7f, 0xf9, 0x3f, 0x12, 0x04, - 0x02, 0x04, 0x49, 0x25, 0x55, 0xaa, 0x77, 0xab, 0xff, 0x2b, 0xfd, 0x3f, - 0x48, 0x01, 0x20, 0x41, 0x00, 0x00, 0x58, 0xa9, 0xda, 0xea, 0xfd, 0xaf, - 0xfa, 0xff, 0x02, 0x04, 0x08, 0x14, 0x29, 0x49, 0x52, 0x55, 0x55, 0x55, - 0xff, 0x8d, 0xfe, 0x3f, 0xa8, 0x00, 0x02, 0x41, 0x00, 0x02, 0xa0, 0xa2, - 0xaa, 0xea, 0xff, 0x53, 0xfd, 0xff, 0x02, 0x04, 0x50, 0x04, 0x25, 0xa8, - 0x54, 0x49, 0x52, 0xb5, 0xbf, 0x8a, 0xfe, 0xff, 0xa9, 0x08, 0x04, 0x50, - 0x80, 0x02, 0xa1, 0x2a, 0x95, 0xea, 0xff, 0xa1, 0xff, 0xff, 0x03, 0x02, - 0x90, 0x02, 0x09, 0x08, 0x44, 0x49, 0x52, 0xbd, 0x7f, 0xca, 0xff, 0xff, - 0x2b, 0x09, 0x04, 0x48, 0x40, 0x82, 0x90, 0x56, 0xa9, 0xf6, 0xbf, 0xd0, - 0xff, 0xff, 0x47, 0x00, 0x50, 0x02, 0x15, 0x11, 0x40, 0x95, 0xaa, 0xfd, - 0x2f, 0xe9, 0xff, 0xff, 0x8f, 0x0a, 0x84, 0x50, 0x40, 0x84, 0x14, 0xaa, - 0x6a, 0xff, 0x5f, 0xf2, 0xff, 0xff, 0x7f, 0x00, 0x10, 0x02, 0x09, 0x10, - 0x40, 0x7d, 0xf7, 0xff, 0x0b, 0xfc, 0xff, 0xff, 0xaf, 0x02, 0x84, 0x50, - 0x42, 0x85, 0x12, 0xd0, 0xdd, 0xff, 0xa7, 0xf2, 0xff, 0xff, 0xff, 0x04, - 0x00, 0x0a, 0x08, 0x10, 0x48, 0xf8, 0xff, 0xff, 0x0a, 0xfe, 0xff, 0xff, - 0x7f, 0x03, 0xa4, 0x80, 0xa2, 0x8a, 0x02, 0x68, 0xff, 0xff, 0x52, 0xfd, - 0xff, 0xff, 0xff, 0x07, 0x00, 0x2a, 0x08, 0x20, 0x28, 0xdc, 0xff, 0x5f, - 0x05, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x92, 0x40, 0x22, 0x09, 0x02, 0xea, - 0xfb, 0xaf, 0x48, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x12, 0x81, 0xa0, - 0x48, 0x9c, 0x6e, 0x93, 0xa2, 0xff, 0xff, 0xff, 0xff, 0x07, 0xa8, 0x40, - 0x28, 0x0a, 0x02, 0x74, 0xb5, 0x45, 0x81, 0xff, 0xff, 0xff, 0xff, 0x0f, - 0x02, 0x0a, 0x81, 0x20, 0x08, 0xae, 0xaa, 0x90, 0xe8, 0xff, 0xff, 0xff, - 0xff, 0x0f, 0x90, 0x40, 0x28, 0x88, 0x12, 0x58, 0x15, 0x50, 0xd0, 0xff, - 0xff, 0xff, 0xff, 0x0f, 0x44, 0x0a, 0x41, 0x21, 0x08, 0xae, 0x04, 0x14, - 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x10, 0x40, 0x14, 0x88, 0x04, 0xba, - 0x02, 0x28, 0xe8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x42, 0x15, 0x41, 0x21, - 0x05, 0xad, 0x00, 0x05, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x10, 0x40, - 0x24, 0x8a, 0x0e, 0x36, 0x00, 0x0a, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x0f, - 0x42, 0x25, 0x90, 0xd0, 0x8b, 0xc2, 0x41, 0x05, 0xfc, 0xff, 0xff, 0xff, - 0xff, 0x0f, 0x10, 0x08, 0x05, 0xe8, 0x8e, 0x58, 0x80, 0x02, 0xfa, 0xff, - 0xff, 0xff, 0xff, 0x0f, 0x4a, 0x20, 0xa8, 0xba, 0x0b, 0x2b, 0x51, 0x01, - 0xfe, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x8a, 0x02, 0xe8, 0xaf, 0x84, - 0x90, 0x04, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x52, 0x21, 0x54, 0xbf, - 0x1f, 0x15, 0xa5, 0x02, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x08, - 0x01, 0xfa, 0xb6, 0xa4, 0x52, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, - 0x4a, 0xa2, 0x54, 0xef, 0x5f, 0x4b, 0xa4, 0x80, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x0f, 0x80, 0x10, 0x82, 0xfe, 0xbf, 0x92, 0x52, 0x42, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x0f, 0x12, 0x42, 0xa8, 0xbf, 0x1f, 0x24, 0x80, 0xa0, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x84, 0x28, 0x8a, 0xf7, 0x37, 0x80, - 0x52, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x10, 0x82, 0xe0, 0xff, - 0x1f, 0x00, 0x20, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x84, 0x28, - 0xca, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, - 0x10, 0x42, 0xf0, 0xfd, 0x1b, 0x00, 0x50, 0xf0, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x0f, 0xa4, 0x10, 0xc5, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x0f, 0x00, 0x22, 0xf8, 0xff, 0x0e, 0x00, 0x00, 0xf0, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xaa, 0x88, 0xe2, 0xff, 0x0f, 0x10, - 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x25, 0xfa, 0xff, - 0x0f, 0x01, 0x11, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xfb, - 0xfb, 0xff, 0x7f, 0x5d, 0xd5, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f}; diff --git a/ext/tk/sample/images/flagdown.xbm b/ext/tk/sample/images/flagdown.xbm deleted file mode 100644 index 55abc51825..0000000000 --- a/ext/tk/sample/images/flagdown.xbm +++ /dev/null @@ -1,27 +0,0 @@ -#define flagdown_width 48 -#define flagdown_height 48 -static char flagdown_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe1, 0x00, 0x00, - 0x00, 0x00, 0x70, 0x80, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x04, - 0x00, 0x00, 0x03, 0x00, 0x06, 0x06, 0x00, 0x80, 0x01, 0x00, 0x06, 0x07, - 0x00, 0xc0, 0x1f, 0x00, 0x87, 0x07, 0x00, 0xe0, 0x7f, 0x80, 0xc7, 0x07, - 0x00, 0x70, 0xe0, 0xc0, 0xe5, 0x07, 0x00, 0x38, 0x80, 0xe1, 0x74, 0x07, - 0x00, 0x18, 0x80, 0x71, 0x3c, 0x07, 0x00, 0x0c, 0x00, 0x3b, 0x1e, 0x03, - 0x00, 0x0c, 0x00, 0x1f, 0x0f, 0x00, 0x00, 0x86, 0x1f, 0x8e, 0x07, 0x00, - 0x00, 0x06, 0x06, 0xc6, 0x05, 0x00, 0x00, 0x06, 0x00, 0xc6, 0x05, 0x00, - 0x00, 0x06, 0x00, 0xc6, 0x04, 0x00, 0x00, 0x06, 0x00, 0x06, 0x04, 0x00, - 0x7f, 0x06, 0x00, 0x06, 0xe4, 0xff, 0x00, 0x06, 0x00, 0x06, 0x04, 0x00, - 0x00, 0x06, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x00, 0x06, 0x06, 0x00, - 0x00, 0x06, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x00, 0x86, 0x01, 0x00, - 0x00, 0x06, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x06, 0x00, 0x66, 0x00, 0x00, - 0x00, 0x06, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x3e, 0x00, 0x00, - 0x00, 0xfe, 0xff, 0x2f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x27, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, - 0xf7, 0xbf, 0x8e, 0xfc, 0xdf, 0xf8, 0x9d, 0xeb, 0x9b, 0x76, 0xd2, 0x7a, - 0x46, 0x30, 0xe2, 0x0f, 0xe1, 0x47, 0x55, 0x84, 0x48, 0x11, 0x84, 0x19}; diff --git a/ext/tk/sample/images/flagup.xbm b/ext/tk/sample/images/flagup.xbm deleted file mode 100644 index 6eb0d846a3..0000000000 --- a/ext/tk/sample/images/flagup.xbm +++ /dev/null @@ -1,27 +0,0 @@ -#define flagup_width 48 -#define flagup_height 48 -static char flagup_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, - 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xef, 0x6a, 0x00, - 0x00, 0x00, 0xc0, 0x7b, 0x75, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0x6a, 0x00, - 0x00, 0x00, 0x30, 0x60, 0x75, 0x00, 0x00, 0x00, 0x18, 0xe0, 0x7f, 0x00, - 0x00, 0x00, 0x0c, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x06, 0xe0, 0x04, 0x00, - 0x00, 0x00, 0x03, 0xe0, 0x04, 0x00, 0x00, 0x80, 0x01, 0xe0, 0x06, 0x00, - 0x00, 0xc0, 0x1f, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x7f, 0xe0, 0x07, 0x00, - 0x00, 0x70, 0xe0, 0xe0, 0x05, 0x00, 0x00, 0x38, 0x80, 0xe1, 0x04, 0x00, - 0x00, 0x18, 0x80, 0xf1, 0x04, 0x00, 0x00, 0x0c, 0x00, 0xfb, 0x04, 0x00, - 0x00, 0x0c, 0x00, 0xff, 0x04, 0x00, 0x00, 0x86, 0x1f, 0xee, 0x04, 0x00, - 0x00, 0x06, 0x06, 0xe6, 0x04, 0x00, 0x00, 0x06, 0x00, 0xe6, 0x04, 0x00, - 0x00, 0x06, 0x00, 0xe6, 0x04, 0x00, 0x00, 0x06, 0x00, 0x66, 0x04, 0x00, - 0x7f, 0x56, 0x52, 0x06, 0xe4, 0xff, 0x00, 0x76, 0x55, 0x06, 0x04, 0x00, - 0x00, 0x56, 0x57, 0x06, 0x04, 0x00, 0x00, 0x56, 0x55, 0x06, 0x06, 0x00, - 0x00, 0x56, 0xd5, 0x06, 0x03, 0x00, 0x00, 0x06, 0x00, 0x86, 0x01, 0x00, - 0x54, 0x06, 0x00, 0xc6, 0x54, 0x55, 0xaa, 0x06, 0x00, 0x66, 0xaa, 0x2a, - 0x54, 0x06, 0x00, 0x36, 0x55, 0x55, 0xaa, 0x06, 0x00, 0xbe, 0xaa, 0x2a, - 0x54, 0xfe, 0xff, 0x6f, 0x55, 0x55, 0xaa, 0xfc, 0xff, 0xa7, 0xaa, 0x2a, - 0x54, 0x01, 0x88, 0x60, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa0, 0xaa, 0x2a, - 0x54, 0x55, 0x8d, 0x60, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa0, 0xaa, 0x2a, - 0x54, 0x55, 0x8d, 0x60, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa0, 0xaa, 0x2a, - 0x54, 0x55, 0x8d, 0x50, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa8, 0xaa, 0x2a, - 0x54, 0x55, 0x95, 0x54, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x2a, - 0x54, 0x55, 0x55, 0x55, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/ext/tk/sample/images/gray25.xbm b/ext/tk/sample/images/gray25.xbm deleted file mode 100644 index b234b3cb0b..0000000000 --- a/ext/tk/sample/images/gray25.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define grey_width 16 -#define grey_height 16 -static char grey_bits[] = { - 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, - 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, - 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44}; diff --git a/ext/tk/sample/images/grey.25 b/ext/tk/sample/images/grey.25 deleted file mode 100644 index b234b3cb0b..0000000000 --- a/ext/tk/sample/images/grey.25 +++ /dev/null @@ -1,6 +0,0 @@ -#define grey_width 16 -#define grey_height 16 -static char grey_bits[] = { - 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, - 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, - 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44}; diff --git a/ext/tk/sample/images/grey.5 b/ext/tk/sample/images/grey.5 deleted file mode 100644 index 37688893f0..0000000000 --- a/ext/tk/sample/images/grey.5 +++ /dev/null @@ -1,6 +0,0 @@ -#define grey_width 16 -#define grey_height 16 -static char grey_bits[] = { - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa}; diff --git a/ext/tk/sample/images/letters.xbm b/ext/tk/sample/images/letters.xbm deleted file mode 100644 index 0f12568d1a..0000000000 --- a/ext/tk/sample/images/letters.xbm +++ /dev/null @@ -1,27 +0,0 @@ -#define letters_width 48 -#define letters_height 48 -static char letters_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, - 0x00, 0xfa, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2a, - 0x00, 0x3a, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2e, - 0xe0, 0xff, 0xff, 0xff, 0xff, 0x21, 0x20, 0x00, 0x00, 0x00, 0x00, 0x21, - 0xa0, 0x03, 0x00, 0x00, 0x70, 0x21, 0x20, 0x00, 0x00, 0x00, 0x50, 0x21, - 0xa0, 0x1f, 0x00, 0x00, 0x50, 0x21, 0x20, 0x00, 0x00, 0x00, 0x70, 0x21, - 0xfe, 0xff, 0xff, 0xff, 0x0f, 0x21, 0x02, 0x00, 0x00, 0x00, 0x08, 0x21, - 0xfa, 0x01, 0x00, 0x80, 0x0b, 0x21, 0x02, 0x00, 0x00, 0x80, 0x0a, 0x21, - 0xba, 0x01, 0x00, 0x80, 0x0a, 0x21, 0x02, 0x00, 0x00, 0x80, 0x0b, 0x21, - 0x3a, 0x00, 0x00, 0x00, 0x08, 0x21, 0x02, 0x00, 0x00, 0x00, 0x08, 0x21, - 0x02, 0xc0, 0xfb, 0x03, 0x08, 0x21, 0x02, 0x00, 0x00, 0x00, 0x08, 0x3f, - 0x02, 0xc0, 0xbd, 0x0f, 0x08, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, - 0x02, 0xc0, 0x7f, 0x7b, 0x08, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, - 0x02, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, - 0xfe, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/ext/tk/sample/images/noletter.xbm b/ext/tk/sample/images/noletter.xbm deleted file mode 100644 index 5774124efe..0000000000 --- a/ext/tk/sample/images/noletter.xbm +++ /dev/null @@ -1,27 +0,0 @@ -#define noletters_width 48 -#define noletters_height 48 -static char noletters_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, - 0x00, 0xf0, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x7f, 0x00, - 0x00, 0x3e, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x1f, 0x00, 0x00, 0xf0, 0x01, - 0x80, 0x07, 0x00, 0x00, 0xc0, 0x03, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x07, - 0xe0, 0x01, 0x00, 0x00, 0xf0, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x78, 0x0e, - 0xf0, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0x70, 0x00, 0x00, 0x00, 0x1e, 0x1c, - 0x38, 0x00, 0x00, 0x00, 0x0f, 0x38, 0x38, 0x00, 0x00, 0x80, 0x07, 0x38, - 0x3c, 0xfc, 0xff, 0xff, 0x7f, 0x78, 0x1c, 0x04, 0x00, 0xe0, 0x41, 0x70, - 0x1c, 0x04, 0x00, 0xf0, 0x40, 0x70, 0x1c, 0x74, 0x00, 0x78, 0x4e, 0x70, - 0x0e, 0x04, 0x00, 0x3c, 0x4a, 0xe0, 0x0e, 0x74, 0x03, 0x1e, 0x4a, 0xe0, - 0x0e, 0x04, 0x00, 0x0f, 0x4e, 0xe0, 0x0e, 0x04, 0x80, 0x07, 0x40, 0xe0, - 0x0e, 0x04, 0xf8, 0x0f, 0x40, 0xe0, 0x0e, 0x04, 0xe0, 0x01, 0x40, 0xe0, - 0x0e, 0x04, 0xf8, 0x00, 0x40, 0xe0, 0x0e, 0x04, 0x78, 0x00, 0x40, 0xe0, - 0x0e, 0x04, 0xfc, 0xf3, 0x40, 0xe0, 0x1c, 0x04, 0x1e, 0x00, 0x40, 0x70, - 0x1c, 0x04, 0x0f, 0x00, 0x40, 0x70, 0x1c, 0x84, 0x07, 0x00, 0x40, 0x70, - 0x3c, 0xfc, 0xff, 0xff, 0x7f, 0x78, 0x38, 0xe0, 0x01, 0x00, 0x00, 0x38, - 0x38, 0xf0, 0x00, 0x00, 0x00, 0x38, 0x70, 0x78, 0x00, 0x00, 0x00, 0x1c, - 0xf0, 0x3c, 0x00, 0x00, 0x00, 0x1e, 0xe0, 0x1e, 0x00, 0x00, 0x00, 0x0e, - 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x07, 0x00, 0x00, 0x80, 0x07, - 0x80, 0x07, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x1f, 0x00, 0x00, 0xf0, 0x01, - 0x00, 0x3e, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x7f, 0x00, - 0x00, 0xf0, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00}; diff --git a/ext/tk/sample/images/pattern.xbm b/ext/tk/sample/images/pattern.xbm deleted file mode 100644 index df31baf789..0000000000 --- a/ext/tk/sample/images/pattern.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define foo_width 16 -#define foo_height 16 -static char foo_bits[] = { - 0x60, 0x06, 0x90, 0x09, 0x90, 0x09, 0xb0, 0x0d, 0x4e, 0x72, 0x49, 0x92, - 0x71, 0x8e, 0x8e, 0x71, 0x8e, 0x71, 0x71, 0x8e, 0x49, 0x92, 0x4e, 0x72, - 0xb0, 0x0d, 0x90, 0x09, 0x90, 0x09, 0x60, 0x06}; diff --git a/ext/tk/sample/images/tcllogo.gif b/ext/tk/sample/images/tcllogo.gif deleted file mode 100644 index 4603d4ff41..0000000000 Binary files a/ext/tk/sample/images/tcllogo.gif and /dev/null differ diff --git a/ext/tk/sample/images/teapot.ppm b/ext/tk/sample/images/teapot.ppm deleted file mode 100644 index b8ab85f3a5..0000000000 --- a/ext/tk/sample/images/teapot.ppm +++ /dev/null @@ -1,31 +0,0 @@ -P6 -256 256 -255 -\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À[7 eOLjQLmSMoTMnSMlRMhPL_9 \À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀnSMtVMzYN~[N~[N\N\O€\O€]O€]O€]O€]O€\O€\O}[NyYNtVM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀG-wXN}[N€]O„^O†_O†`O‡`Oˆ`Oˆ`OˆaO‰aO‰aO‰aO‰aO‰aO‰aOˆaOˆ`O†_Oƒ^O\N \À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀaMLyYN…_O‰aP‹bPcPŽcPŽdPŽdPdPdPdPdPdPdPdPeP‘eP’eP’eP‘ePdPcP…_OpUM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀwXN…_OdP“fP•gQ–hQ˜hQ˜iQ™iQ™iQšiQšiQšjQ›jQ›jQœjQœjQœjQœjQœjQ›jQœjQ™iQ“fP‡`O\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJiQL‹bP—hQkQ¡mR¤nR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¦pR¨pS©qSªqS«rS¬rS«rS©qS¤oRœjQ€]O\KK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀfOLrUMcPŸlR©qS¯tS²uTµwT·xT¸xT¹yTºyT»zT»zU¼zU¼zU¼zU»zUºyT¸xT¶wT¯tS¡mR‰aOhPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\Àa0 cNLqUM€\O”fQ¦pS²wVºzV¿|VÂ}VÄVÆVÇ€VÉ‚WÌ…[Õeæ w÷³‹êª…Ĉg§qT“fQ{ZNYIK9\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀO1{G#‘JkRMqUMtVN–iS¨v\·€d¹bµzZ±vU°uT®sSªqS¤nRœjQ’eP„^OrUMHh>!T4\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀG-V5wE"~I#†M%U+¥e7²l:°g2®b*­a(­`(©^(¥])¡^-›]1ŠS,qC$`9 R3G-\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À@)J/i>!pA"tD"wF$yH&xH&tE$wE#yG%}M+ƒT4S5mE*Z7!K/B*;'\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À‰aO¦oR½{UÇ€VÏ…X<(F-a: e!j@#k@$h>"dµf-¨^(¡Z'šW&–T&œN>)F-J/b; g>#nD(jB&c y< u: r9 o7 l6 -j5 -h4 -g3 -5$D,K/b; h>"wM1tK.e="a<#cA,U8&E-<(9&.!a0 b1 c1     - -+3#@)46G<:HMCIXHK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀU*´vT¿~X¸{YÃk+›W&‰N$|> u: p8 k5 -f3 -a0 _/ ]. [- I¡\*ª_(‘LkRMmSMmSMnSMnSMD,R3W5mA"|O0|P1j?"c!a: X/K%&4$+2F=;HPEJL&\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀŸlR¶xT­sTµd)ŠO$w; m6 -g3 -a0 Z- \/ T*Q(ŠHµm8kRMmSMnTMoTMpTMpUM15G15G05G04G04GpUMpTM5^9 d!Y0W+]. s=‡M$dPŸlR\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀoTM¥oRdPvE"V+K%A 99†F¤['qUMtVM99H:9H:9H:9H:9H:9H:9H:9H:9H:9H99H99H99H99H99H99H:9H;:H>;HB=HPDJ\JKmSMwXN|ZN°y[ᦆ֘uº{W¹yU¿€]Á„b­tU£nR—hQˆaO{ZNvWNtVMvXNwXNyYNzYN{ZN|ZN}[N}[N~[N~[N~[N~[N~[N~[N~[N}[N}[N{ZNzYNxXN…L$f3 -I$L&P(U*\. €J#\O›jQ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀžkR‰aOo9 L&C!:4f3 -X&pUMuWMwXNxXN<:H<:H<:H<:H<;H<;H<;H<;H=;H=;H=;H=;H>;H>;H?HG@ILBIREJ[JKcNLjQL§pR±uTºzUÃ~VÈWË‚XÖŽcäsÒŽe¼{V²vT¨pSžkR•gQŒbP†_O‚^O]O€\O€\O€\O€\O€]O]O]O]O]O]O]O]O]O]O]O€\O€\O~\N}[N|ZNxXN•T%H$G#K%Q(W+zG#nTM˜iQ\À\À\À\À\À\À\À\À\À\À\À\ÀdOLrUMuWNwXNyYN{ZN}[N{ZNwXNsVM \À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\Àˆ`OcPnA"M&@ 8F#m6 -›W&rVMvWNyYNzYN|ZN}[N}[N>HE?IG@IIAIKBIODJSFJWHK—hQŸlR§pR°b(¾i*Én+Ù|7Û|6Ïr,Íq+Êp-Ãl+»g)±b(®sS§pS lRšiQ•gQePcPŠaPˆaO‡`O‡`O†_O†_O…_O…_O…_O…_O…_O…_O…_O„_O„^O„^Oƒ^Oƒ^O‚]O]O€\O~[N{ZN•T%F#B!Y,L&U*~I#„^O†`O\À\À\À\ÀcNLrUMzYN\O„^Oˆ`OŠbPŒcPdPeP’fP“fP“fQ“fQ”fQ‘ePcP‰aP~[N\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À’fPsVM^/ C!7 ŽQ%tVMwXNzYN|ZN}[N\N\O€\O]O]O‚]O‚]OA=HB=HB=HB>HC>HC>ID?IE?IF@IG@IIAIKBIŒcPdP’eP–gQšiQŸlR£nR¤\'´d)¿i*Æm+Îs/Ïs/Êo+Én+Ål*¾i*ºg)³c(ª_(ªqS¦oR¡mRkQ™iQ•gQ“fP‘ePŽdPcPŒbP‹bPŠbPŠaP‰aP‰aO‰aOˆaOˆ`Oˆ`O‡`O‡`O‡`O†`O†_O…_O„^Oƒ^O‚]O\O}[N›QD"?D"K%_/ kRL’fPODJSFJ†_OŠbPŽcP‘eP“fQ–gQ™iQœjQžkR lR¡mR£nR¤nR¥oR¥oR¥oR¤nR¢mRŸlRšiQ‘eP…_O\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀB+‘ePI#L&90y< šPxXN{ZN}[N\N€\O]O‚]Oƒ^Oƒ^O„^O„_O…_O…_O†_O†`O‡`O‡`Oˆ`O‰aOŠaP‹bPŒbPcPŽdP‘eP“fP•gQ˜hQšiQžkR¢mR¡Z'«_(¶e)½h)Âk*Çn,Çn,Æm*Æl*Áj*ºf)¶e)²c(«_(¦]'§pR¤nR¡mRžkR›jQ™iQ–gQ”gQ“fP‘ePdPdPŽdPŽcPcPŒcPŒbP‹bP‹bP‹bPŠbPŠaP‰aP‰aO‰aOˆ`O‡`O†_O…_Oƒ^O]Oª_(@ B!I$B!N'w=‘eP`LKbNLeOLkR mR£nR¥oR§pSªqS¬rS®sS¯tS°tS°tS±uS±uS°tS¯tS­sSªrS§pS¢mRšjQŒbPjQL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À‹bPpTME"5‡M$tVM{ZN}[N\O]O‚^Oƒ^O„_O…_O†_O†`O‡`Oˆ`Oˆ`O‰aO‰aPŠaPŠbP‹bPŒbPcPŽcPdPdP’eP“fP•gQ—hQ™iQ›jQkR lR¢mR¡Z'¬`(µd)ºg)ÇgÀj*Àj*¾i*¿i*»g)µd)²c(¯a(ª_(¤\'§pR¥oR¢nR mRžkRœjQšiQ˜iQ—hQ•gQ”gQ“fP’eP‘eP‘ePdPdPdPŽcPŽcPcPcPŒcPŒbP‹bP‹bPŠbPŠaP‰aOˆ`O†_O„^O\NœQ@ <G#_LKŽcPlSMnTMpUMsVM°tS²uT³vTµwT¶wT¶xT¶xT¶wTµwT´vT²uT¯tS¬sSªqS§pS¤oR¢nRžkR˜hQ‹bPeOL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀwXN\NJ%01ŽJvWN}[N\O]Oƒ^O…_O†_O†`O‡`Oˆ`O‰aO‰aPŠaPŠbP‹bPŒbPŒbPcPŽcPŽdPdPdP‘eP’eP”fQ•gQ–gQ˜hQ™iQ›jQkQŸlR¡mRžY&¦]'­`(³c(·e)Àc¸\¸\¹\º]»]¶^®a(¬`(©^'£['¢['¥oR£nR¡mR lRžkRœkQ›jQšiQ˜iQ—hQ–gQ•gQ”gQ”fQ“fP’eP’eP‘eP‘ePdPdPdPdPŽdPŽcPcPcPŒbP‹bPŠaPˆaO†`O]O˜OG#7F#uWMƒ^OwXNxXNzYN{ZN|ZN¹yT¸yT·xT´wT±uT­sS¨pS¡mRœjQ•gQdPŒbP‰aP‰aPŒbPŽcP‘ePcP|ZN\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À[JKŠbP^/ 1 01|> wXN}[N]Oƒ^O…_O‡`O‡`OˆaO‰aPŠaP‹bP‹bPŒbPŒcPcPŽcPŽcPdPdPdP‘eP’eP“fP”fQ•gQ–gQ—hQ˜hQ™iQ›jQœkQžkRŸlR mRžY&¦]'­`(±b(·[ÇgÉiÉhÅfÂdÃe¿c«Uª_(§]'£[' Z'¤nR£nR¡mR mRŸlRžkRkQœjQšjQšiQ™iQ˜hQ—hQ–gQ•gQ•gQ”fQ”fQ“fP“fP’eP’eP‘eP‘ePePdPdPdPŽcPcPŒbPŠbPˆ`Oƒ^O‰D 4M&dPnSM|[N|[O|[OzZOxXNªrS¢nR˜hQŽcPƒ^OvXNiQL^KKRFJMCJJAIKBISFJ\JKnSMxYN†_O€\OaMK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀB!qUMŠaPC!/00a0 uWN}[N‚]O…_O†`Oˆ`O‰aPŠaP‹bPŒbPŒcPcPŽcPŽcPdPdPdP‘eP‘eP’eP“fP“fQ”fQ•gQ–gQ—hQ˜hQ™iQ™iQ›jQœjQkRžlRŸlRœX&¢['¨^'¬`(´ZÂdÄfÈiÆgÂd¿c¿c¼a¸_©T¥\'£[' Z'ŸY&£nR¢mR¡mR lRŸlRžkRkQœjQ›jQšjQšiQ™iQ˜hQ—hQ—hQ–hQ–gQ•gQ•gQ”gQ”fQ”fQ“fQ“fP’fP’eP‘eP‘ePdPdPŽcPŒbP‰aOƒ^Ox< :ŠaP]Oj8sVMmSMfOL^KKUGJIAIQEJ?IeZY638*  B\À\À\À\À\À,  4 .G1!\TU¡ƒrsVM{ZN`MK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À[JKyYNŒbP/0ˆN$]O…_Oˆ`O‹bPŒbPcPŽcPdPdPdP‘eP‘eP’eP’fP“fP“fQ”fQ”gQ•gQ–gQ–gQ—hQ—hQ˜hQ™iQ™iQšiQ›jQœjQœkQkRžkRŸlRœO¡Z'¥\'©^'­V¼a¾bÁeÆi!Ãf¾b»a¹`·_³]²\µZ¢[' Z'ŸY&œQ¡mR¡mR mR lRŸlRŸlRžkRkRkQœkQœjQ›jQ›jQšjQšiQšiQ™iQ™iQ˜iQ˜hQ˜hQ—hQ—hQ—hQ–hQ–gQ–gQ•gQ•gQ”fQ’fPdPcPšW&dPŠaPrUM - B\À\À\À\À\À\À\À\À\À\À%7!!C*F#P) {dYœze»p€\OgPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ`LKvWNŠaPm6 - X,uWM‚]O‡`OŠbPcPŽdPdPdP‘eP’eP’fP“fP“fQ”fQ”gQ•gQ•gQ–gQ–gQ—hQ—hQ˜hQ˜iQ™iQ™iQšiQ›jQ›jQœjQœkQkQžkRžlRŸlR¢Z'¤\'§]'·_¹`¼a½bÁeÅi"Áe¼aº`·_¶_²]²\±\«Y¡Z' Z'¡Z'¡mR¡mR mR lR lRŸlRŸlRžlRžkRžkRkRkQœkQœjQœjQ›jQ›jQ›jQšjQšiQšiQšiQ™iQ™iQ™iQ˜iQ˜hQ˜hQ—hQ–gQ•gQ“fQdP†_Oq8 –gQˆ`OuWM”T%\À\À\À\À\À\À\À\À\À\À B B!!T,c5ƒF‚T3È›~Æ“qƒ^OfOL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀXHK_LKsVM‡`OcP ’S%]OŠbPcPdP‘eP’eP“fP“fQ”fQ”gQ•gQ•gQ–gQ–gQ—hQ—hQ—hQ˜hQ˜iQ™iQ™iQšiQšiQ›jQ›jQœjQœjQkQkRžkRžlRŸlRŸlR¥\'¦]'¨^'­Vº`»a½bÁfÄi"Àe»a¹`·_¶_³]±\±\¤R¢Z'¢Z'£['¡mR¡mR¡mR¡mR mR lR lRŸlRŸlRŸlRžlRžkRžkRkRkRkQkQœjQœjQœjQœjQœjQ›jQ›jQ›jQ›jQšjQšiQ™iQ™iQ˜hQ–gQ‘eP§Sq8 ‰aO•gQ‡`OtVMœX&\À\À\À\À\À\À\À\À\À\À B B B l@!{A…L$›Y'½†a“fPˆaO]KK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀODJ[JKaMKqUM\OcPƒ^OvE"‚]OŠaPdP‘eP“fP”fQ•gQ•gQ–gQ–hQ—hQ—hQ˜hQ˜hQ˜iQ™iQ™iQ™iQšiQšjQ›jQ›jQœjQœjQœkQkQkRžkRžkRŸlRŸlRŸlR lR©^'©^'ª_(®W»a¼a¾cÂg Äi"¿e»a¹`·_¶_³^±\±\¤R£['£['§]'¢mR¢mR¡mR¡mR¡mR¡mR mR lR lR lR lRŸlRŸlRŸlRŸlRžlRžlRžkRžkRžkRžkRkRkRkRkRkQkQkQœjQœjQšiQ˜hQ’ePšW&M&oTMšiQ‘eP…_OtVMmSMdOL\À\À\À\À\À\À\À\À\À B B B ‘J Z'ª_(œkQ™iQ‡`OSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀTFJ\JKcNLlRMzYN‡`O’ePzZN \Nˆ`OdP“fQ•gQ–gQ—hQ˜hQ˜hQ™iQ™iQ™iQšiQšiQšiQ›jQ›jQ›jQœjQœjQœjQœkQkQkRžkRžkRžlRŸlRŸlRŸlR lR lR mR®a(­`(¬`(¶[½a½b¿dÃh!Äi"¿d»a¹`¸_¶_µ^²]³]¦S¤\'§]'«_(¢nR¢mR¢mR¢mR¢mR¢mR¢mR¡mR¡mR¡mR¡mR¡mR mR mR mR mR lR lR lR lR lR lR lR lR lRŸlRŸlR lRŸlRžkRœkQ™iQePt: kQ˜hQcP€]OtVMlSMa2 \À\À\À\À\À\À\À\À\À B B -$5 ¬`(¶e)£nRœjQƒ^OJAI\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀXIK^KKdNLhPLuWM‚]OŒbP”fQeP m6 -†`OŽcP“fQ—hQ˜hQ™iQšiQšjQ›jQ›jQ›jQœjQœjQœjQœkQkQkQkRžkRžkRžkRžlRŸlRŸlRŸlR lR lR lR¡mR¡mR¡mR¡mRºg)³c(²c(±b(­V¿cÂeÅi!Åi!Àd¼bº`¹`·_·_¶^¢Q§]'ª_(­`(¹f)£nR£nR£nR£nR£nR£nR£nR¢nR¢nR¢nR¢nR¢nR¢nR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢nR¢mR¢mR£nR¢mR¢mR¡mR mRkR—hQˆGa0 ŠbP mRœjQ“fQ‰aP}[NrUMmSM…L$\À\À\À\À\À\À\À\À B B #C, 8&H.Z7 §pR›jQ{ZN\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀQEJ[JK`LKdNLhQLqUM{ZN…_OŽcP–gQ—hQ -‹bP‘eP–hQšiQ›jQœjQkQkQkRžkRžkRžlRžlRŸlRŸlRŸlRŸlRŸlR lR lR lR mR¡mR¡mR¡mR¡mR¡mR¢mR¢mR¢mR¢nR£nRÀj*ºg)·e)¶d)Âd°XÅgÅhÂe¿c½b½b¾bªU­`(®a(¯a(³c(¾i*¤oR¤oR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤oR¤oR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¥oR¥oR¤nR¡mR›jQŽQ%Z- œjQ£nRŸlR—hQŽdP…_OuWMpTMnSMkRLa: \À\À\À\À\À\À\À B B&D2 @*S6#G@IPDJ˜hQmSM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ]KKbMLeOLiQLlRMvWN\OˆaO‘eP—hQœjQ•gQoTM•gQ™iQkQŸlRŸlR lR mR¡mR¡mR¡mR¡mR¡mR¡mR¡mR¢mR¢mR¢mR¢mR¢mR¢mR¢nR£nR£nR£nR£nR£nR¤nR¤nR¤nR¤nR¤nR¤nRÆl*Ãl+¾j+¹g)¸f)¶e)µd)¶e)¶e)·e)·e)¸f)¾i*Ìs0Ðs.¦oR¦oR¦oR¦oR¦oR¦oR¦oR¦oR¦oR¦oR¦oR¦oR¦oR¦oR¦oR¦oR¦pR§pR§pR§pR§pR§pS§pS¨pS¨qS©qS©qS©qS¨pS©qS§pS¤nRŸlR‘I˜hQ§pR¥oR¡mRšiQ’ePŠaP€\OsVMpTMnTMlRM–X)\À\À\À\À\À\À\À B%C)D$;J/[8"LBITGJYIKWHK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK_LKcNLgPLjQLlRMpUMzYNƒ^O‹bP‘eP˜hQkQŸlR”fQ- —hQ›jQŸlR¢mR£nR£nR£nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤oR¤oR¥oR¥oR¥oR¥oR¥oR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¦oR¦oR¦oR¦pR¦pR§pRàpßy-Ûw-Ûw-Þy.â{-ãu§pS§pS§pS§pS§pS¨pS¨pS¨pS¨pS¨pS¨pS¨pS¨pS¨pS¨pS¨qS©qS©qS©qS©qS©qS©qS©qSªqSªrS«rS«rS¬rS¬rS¬rS¬rS¬sS«rSªqS¦oRšiQ™iQ©qSªqS§pR¡mRœjQ•gQcP„_O{ZNtVMpUMoTMmSMjQL_9 \À\À\À\À\À B "C(D#*A$[<)dI\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JKaMKeOLhPLkRLmSMoTMuWM}[N…_O‹bP’eP˜hQžkR¢mR£nRžkR!-EkR¡mR¤nR¥oR¦pR§pR§pS§pS§pS§pS§pS§pS§pS§pR§pS§pS§pS§pS¨pS¨pS¨pS¨pS¨pS¨pS¨pS¨pS¨pS¨pS¨pS¨pS¨pS¨pS¨qS¨qS¨qS©qS©qS©qS©qS©qS©qS©qS©qS©qS©qS©qSªqSªqSªqSªqSªrS«rS«rS«rS«rS«rS«rS¬rS¬rS¬rS¬sS­sS®sS®sS¯tS¯tS¯tS¯tS°tS°uS°tS®sS«rS£nR¦oR®sS­sS«rS§pR¢mRœjQ–gQdPˆaO\OyYNuWMqUMoTMnSMkRLo8 \À\À\À\À\À B'D+E$(1 J/jH1NCJUGJYIKUGJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀXHK]KKbNLfOLiQLkRMmSMoTMqUMxXN\N†_OŒbP’fP˜hQkQ¡mR¥oR§pS¦pR˜hQ¢mR¥oR¨pSªqS«rS«rS«rS«rS«rS«rS«rS«rS«rS«rS«rSªrSªrSªrS«rS«rS«rS«rS«rS«rS«rS«rS«rS«rS«rS«rS«rS«rS«rS«rS¬rS¬rS¬rS¬rS¬rS¬rS¬rS¬sS¬sS­sS­sS­sS­sS­sS­sS®sS®sS®sS®sS®tS¯tS°tS°uS±uS±uT±uT²uT²uT²uT´vTµwT´vT³vT²uT¯tS¢mR¯tS±uT±uS®tS«rS§pR¢mRkQ—hQ‘ePŠaPƒ^O\N{ZNvXNqUMpTMnSMlRMP%\À\À\À\À B#C*E$.E- .!G$Y:%d<"SFJYIKZIKNCJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀPDJZIK_LKdNLgPLjQLlRMnSMpTMqUMuWMyYN€\O†`OcP’fP—hQœjQ¡mR¥oR¨qS«rS«rSªrS mR«rS­sS¯tS°tS°tS°tS¯tS¯tS¯tS¯tS¯tS¯tS¯tS¯tS¯tS¯tS®tS®sS®sS®sS®sS®sS®sS®sS®sS®sS®tS®tS®tS¯tS¯tS¯tS¯tS¯tS¯tS¯tS¯tS¯tS¯tS°tS°tS°tS±uS±uS±uT²uT²vT³vT³vT´vT´vT´wTµwTµwTµwT·xT·xT¸xT¸yT¸yU·xU¥\'©qS³vTµwTµwT´vT±uT®tTªrS¦oR¡mRkQ˜hQ’eP‹bP‡`Oƒ^O€\O|ZNxXNtVMpTMoTMmSMjQLh7\À\À\À B(D"-E*1F, 4#K)pL5PEJWHK[JKXHK:9H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀUGJ\JKaMLeOLhPLkRLmSMoTMpUMrVMvWNyYN|ZN]O‡`OŒcP‘eP—hQ›jQ lR¤nR§pSªqS­sS¯tS°uS¯tS­sS mR^/ ²vT³vT´vT´wTµwT´wT´vT³vT´vT´vT´vT³vT³vT³vT³vT³vT³vT³vT³vT³vT³vT³vT³vT³vT³vT³vT³vT³vT´vT´vT´vT´vT´wTµwTµwTµwTµwT¶wT¶wT¶xT·xT·xT·xT¸xT¸xT¸xT¹yTºyT»zU¼zU½{U½{V½|V•gQ¬rSµwT¸xT¹yU¹yU¹zV·yVµxV±vU­tT©qS¥oS mRœjQ—hQ’ePcPŠbP‡`O„_O]O}[NyYNuWMpUMoTMmSMkRL}H#\À\À &D -E(1F/!2#8 W7"iA&UGJ[JK\JKREJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀMCIXIK^KKcNLfOLiQLkRMmSMoTMqUMsVMwXNzYN}[N€\Oƒ^O‡`OŒbP‘eP–gQšjQžkR¢mR¥oR©qS¬rS¯tS±uS³vT´vTµwT´wT²uT­sS lR«_(¹yT¹yTºyTºyTºyTºyTºyT¹yT¹yT¸yT¸xT¸xT¸xT¸xT¸xT¸xT¸yT¸yT¸yT¸yT¹yT¹yT¹yT¹yT¹yT¹yT¹yTºyTºyTºyTºyTºzT»zT¼zU¼{U½{U¾{U¾|U¿|UÀ}VÁ~VÂWÀY™iQ«rSµwT¹yT¼zU½|V¿}XÁ€ZÂ]Á]¾€]»~[¶zY±wW¬tU¨qS¤nSŸlR›jQ–gQ“fPePŽcP‹bPˆ`O…_O‚]O~\NzZNvXNqUMoTMnSMlRMiQLg=!\À -!C+E'0F.4F7%8%U/lG.SFJZIK]KKZIKB=H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀREJZJK`LKdNLgPLjQLlRMnSMpTMqUMtWMxXN{ZN~[N]O„^O†`O‰aO‹bPdP•gQ™iQœkQ lR¤nR§pSªrS­sS¯tT²uT´vT¶wT·xT¹yT¹yTºyTºyT¹yT¶xT´vT¬rS¢nR—hQ¿|U¿|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ}UÀ}UÁ}UÁ}UÁ}UÁ}UÂ}UÂ~UÃ~UÃ~VÃ~VÄVÅ€WÆX®a(ŸlRªrS´vT¸yT¼zU¾|UÁ~VÃXÆ‚[Ɇ_΋dÓ‘jÔ“mÔ“nБlÊŒhĆd½_¶{[°vWªsU¦pS¢nRžkRšiQ˜hQ•gQ“fQ‘ePdPŒbP‰aO†_Oƒ^O€\O|ZNxXNsVMpTMnTMmSMjQL€C B)D&/F-3F47G6%>" Y7 kA$YIK]KK^KKSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ\KKbMLeOLhPLkRLmSMnTMpTMrUMuWNyYN|ZN\N‚]O„_O‡`OŠaPŒbPŽcPeP“fP—hQ›jQžlR¢nR¥oS©qT¬sT¯uU²vU´wV¶xV¸yV¹yUºzU»zU¼{U½{U¾{U¾|U¿|U¿|U¿|U¿|U¾{U½{U¼{U¼zU»zTºyT¹yT¸xTµwT³vT´vT´vT´vT´wT´wTµwT·xT¹yTºzT¼zU½{U¾{U¿|UÀ|UÂ}UÄVÅ€WÇ‚YÉ„\͈_ÑŒdÙ”láuç£|쩂ſt명æ¦ÞŸ{Õ—sËŽl†d¹^³yZ­uW¨qU¤oSŸlRžkRœjQšiQ˜hQ–gQ”fQ‘ePdPcPŠaP‡`O„^O]O}[NyYNuWMpTMoTMmSMkRLgPL&D#.E,3F46G;'<(D"iB(VGJ]KK`LK[JKB>H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK^LKcNLfOLiQLkRMmSMoTMqUMsVMvXNzYN}[N€\O‚^O…_Oˆ`OŠaPŒcPdP‘eP“fQ•gQ—hQ™iQkR mS¤oT¨rU¬tW°wY´zZ¸}\»]¾€^À^Á‚^‚^Â\Á€ZÁYÁXÁ~WÁ~WÂ~VÂ~VÂ~VÃ~VÃ~UÃ~UÄ~UÄ~UÄUÄUÅVÅVÅVÅVÆVÆ€VÆ€VÇ€WÇWÈ‚XɃZË…[͇^ЊaÓdØ’iÜ—nâtè£zî©ó¯‡ø´û¸‘üº“û¹“÷¶ñ±Œé©…à¡~Ö˜vËmÇf»€`´z[®vX©rU¥pT£oS¢nS lRžkRœkRšjQ˜iQ–hQ”fQ’ePdPcP‹bPˆ`O…_O‚]O~[NzYNvWNpTMoTMnSMkRMhQLo7 ,2F36G99HC+@ ]8 nA"\JK`ML_LKSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JK`LKdNLgPLjQLlRMnSMpTMqUMtVMwXNzZN}[N€]Oƒ^O†_OˆaO‹bPcPdP‘eP“fQ•gQ—hQ™iQ›jRžlR mS£oU§rW¬vZ²{]¹€a¿…fÅŠjËnГqÓ•sÕ–sÕ–rÕ–qÕ”oÓ’mÑjÏgÍŠcˈaɆ^È„\Ç‚[ÆYÅ€XÅ€WÅWÅWÅVÅVÅWÅ€WÆ€WÇXÈ‚YɃ[Ê…\͇_ÏŠaÒeÕ‘hÙ•mÝ™qávä¡zç¤}꧀멃몄騃奀ߠ|Ù›wÓ•rÌmƉh¿„c¸~^²yZ®vX¬tWªsV¨qU¦pT¤oS¢nS mRžlRœkR›jQ™iQ—hQ•gQ“fPePŽcP‹bPˆaO…_O‚^O\N{ZNwXNsVMoTMnSMlRMiQL~I#26G99G?IQ2P+XHK_LLfQOcNLXIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À©qSºyTÃ~VΈ`遲ޜv¾€]ªqS–LŽG|> g3 -S)?*%.—hQ—hQ‘eP‡`OuWM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JK`LKdNLgPLjQLlRMnSMoTMqUMsVMwXNzYN}[N€\O‚^O…_O‡`OŠaPŒbPŽdP‘eP“fP•gQ—hQ˜iQšjRœkRŸlS¡nT¤pV§sX«vZ°z^¶b¼…gËmÊ’sјzØŸ€Þ¤…ã©Šè­ê¯ë°ê¯Žè¬‹å¨‡à¤‚Ûž|Ö™wÑ“qÌŽlljgÃ…bÀ‚_½\»}Zº{X¹zW¸yV·yU·xU·xU·xT·xT·xU·xU·xU·yV·yV·yW¸zW¸{X¹{Y¹|Zº}[º}[º}\º~\¹~]¹~]¸}]·|\µ{\´z[²yZ°wY®vX¬tWªsV¨rU¦pT¤oS¢nS¡mRŸlRkRœjQšiQ˜hQ–gQ”fQ’ePdPcPŠbP‡`O…_O‚]O~[NzZNvWNrUMoTMmSMlRMiQLeOLJAIJ(h>!]KKfQOgQN_LKD>I\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À™iQ°tS¸yT¼{UÂYÎŒeï­ˆô´Õ—u¶|\ Z'™LˆD |> ’eP¦oR¨qS¦oR¡mRšjQ‘eP„^OhPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀWHJ\KKaMLeOLhPLjQLlRMnSMpTMqUMtVMwXNzZN}[N€]Oƒ^O†_Oˆ`OŠbPcPdP‘eP“fQ•gQ—hQ™iQ›jRkRŸmS¢nT¤qV¨sX¬w[±{_¶€c½†hÄŒnË’tÒ™zØŸ€Þ¥…㩉ç­ê¯Žê¯Žê®ç«Šä§†ß£Ûž|Õ˜vГpËŽkljfÃ…bÀ‚_½\»}Yº{X¸zW¸yV·xU·xU·xT¶xT¶xT¶xU¶xU·xU·xU·yV·yV·zW¸zX¸{Y¹|Y¹|Z¹}[¹}[¹}\¹}\¸}\·}\¶|\µ{[³zZ²yZ°wY®vX¬tWªsV¨rU¦pT¤oS£nS¡mRŸlRžkRœjQšiQ˜hQ–gQ”fQ’ePdPŽcP‹bPˆ`O…_O‚^O\N{ZNwXNsVMoTMnSMlRMiQLfOLJ(V.]KKePNkUQcNLQEJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À‚]O¡mR©qS¬rS°tS³vTµwT·xUº{WĆbÒ“qךxÊo -K«rS´vT¶wT´vT²uT®sSªqS¤nRkQ•gQˆ`OuWNY,\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK^KKbNLfOLhQLkRLmSMoTMpUMrUMuWMxXN{ZN~[N]O„^O†_O‰aO‹bPcPdP‘eP“fQ•gQ—hQ™iQ›jRkRŸmS¢oT¥qV¨tX­w[±|_·d½†iÄŒnË“tÒ™zØŸ€Þ¥…㩉笌鮎ꮎ魌檉㧅ߢ€Ú{Õ—uÏ’pËjƈfÂ…b¿^½\»|Y¹{X¸zV·yV·xU·xU¶xT¶xT¶xT¶xU¶xU¶xU¶xU·yV·yV·yW¸zW¸{X¸{Y¸|Z¹|Z¹|[¹}[¸}\¸}\·|\¶|[µ{[³zZ±xY°wX®vX¬tWªsV¨rU¦pT¥oS£nS¡mRŸlRžkRœjQšjQ˜iQ—hQ”gQ’fPdPŽcP‹bP‰aO†_Oƒ^O€\O|ZNxXNtVMoTMnSMlRMjQLgPLzG#\JKcOMoXUgPMZIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À’fP”gQ•gQ—hQ™iQkQ lR¤nR§pRªqS¬sS¯tS:"r<zYN­sS¹yT¾|UÁ~WÆ„^ËŠeË‹gƈe¾‚aµz[­tV¦pS¢mRkQ–gQŠbPzYNkRL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀRFJZJK`LKcNLfPLiQLkRMmSMoTMqUMrVMvWNyYN|ZN\N]O„^O‡`O‰aO‹bPcPdP’eP”fQ–gQ—hQ™iQ›jRlR mS¢oU¥qV©tY­x\²|`¸d¾‡iÅoË“uÒ™{ÙŸ€Þ¥…㩉笌é®é®è¬‹å©ˆâ¦„Þ¡ÙœzÔ—tÏ‘oÊŒjƈe„a¿^½~[»|Y¹{X¸zV·yV·xU¶xU¶xT¶xT¶xT¶xT¶xU¶xU¶xU¶xV·yV·yW·zW·zX¸{Y¸{Y¸|Z¸|Z¸|[¸|[·|[·|[¶{[´z[³yZ±xY°wX®vW¬tWªsV¨rU¦pT¥oS£nS¡mRŸlRžkRœkRšjQ™iQ—hQ•gQ“fP‘ePŽdPŒbP‰aP†`Oƒ^O€]O}[NyYNuWNqUMnSMlSMkRLhPLcNLbNLpYVlUP`LK>;H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À›jQ‡`O{ZN©^'¨^'­`(·e)½h)Ãk*Êo+±b(£nRºyTÃ~UÇXÒdãŸwò°‰ñ°‹è©…ÝŸ}Ô˜vÈm¾„eµ}_®x[°y\®x[«tW§qT¡mRœjQ–gQ‹bP}[NlRM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ\JKaMKdNLgPLjQLlRMnSMpTMqUMsVMvXNzYN|[N\O‚]O…_O‡`O‰aPŒbPŽcPdP’eP”fQ–gQ˜hQšiQœjRžlS mS£oU¦rW©uY®x\³|`¸d¾‡jÅoÌ“uÒš{Ù €Þ¥…㩉欋è­è­Œç«Šå©‡á¥ƒÝ ~Ø›yÓ–tΑoÊŒjňe„a¿^¼~[º|Y¹{W¸zV·yV·xU¶xU¶xT¶xT¶xT¶xT¶xU¶xU¶xU¶xU¶xV·yV·yW·zX·zX¸{Y¸{Z¸{Z·|Z·|[·|[¶{[µ{[´zZ³yZ±xY¯wX®uW¬tVªsV¨rU¦pT¥oS£nS¡mR lRžkRœkR›jQ™iQ—hQ•gQ“fQ‘ePdPŒcPŠaP‡`O„^O]O~[NzYNvWNrUMnSMmSMkRLiQLeOLoXUu]XdOLKBI\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À:9H\N–hQ¸}\¯uU­sT¯tT¯tS¨qS¤nR£nR¢nRŸlR›jQšiQ˜hQ—hQ–gQ”fQ’eP‘eP—hQœkR mS¥pUªtX«uY¨sW¦qU mS›jQ•gQƒB’S%jQL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀLBIXHK^KKbMLeOLhPLjRLlSMnSMpTMqUMtVMwXNzYN}[N€\O‚^O…_O‡`OŠaPŒbPŽcPeP’fP”fQ–gQ˜hQšiRœkRžlS nT£pU¦rWªuY®y]³}`¹‚e¿ˆjÅŽpÌ”vÓš{Ù Þ¤…⨉櫋笌笋櫊䨆ंܟ~ךxÒ•sÎnÉŒiŇeÁ„a¾€^¼~[º|Y¹{W¸yV·yV·xU¶xU¶xT¶wT¶wT¶wT¶xT¶xU¶xU¶xU¶xV¶yV¶yW·zW·zX·zY·{Y·{Z·{Z·{Z¶{Z¶{ZµzZ³yZ²yY±xY¯vX­uW¬tVªsU¨rU¦pT¥oS£nS¡mR lRžlRkR›jQ™iQ—hQ•gQ“fQ‘ePdPcPŠaP‡`O…_O‚]O\N{ZNwXNsVMnSMmSMkRMiQLfOL_LKhQMUGJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À (6BFP>=DKHMqjk€trwf`~kc„ndŠqesete¯Ž{w`¡v[\N†_OcP“fP˜iQœjRŸlS£oT¦qV¥qV£oTžlR™iQº^‡`OQ%hPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀQEJZIK_LKcNLfOLiQLkRLmSMoTMpUMrUMuWMxXN{ZN~[N€]Oƒ^O…_Oˆ`OŠaPŒcPŽdP‘eP“fP”gQ–hQ˜iQšjRœkRžlS¡nT£pU¦rWªuZ®y]³}a¹‚e¿ˆkÆŽpÌ”vÓš{ÙŸ€Þ¤…⨈媊櫋櫊婈⦅ߣ۞}ÖšxÑ•rÍmÈ‹ićdÁƒa¾€]¼~[º|Y¹zW¸yV·yU¶xU¶xU¶wT¶wT¶wT¶wT¶wT¶xU¶xU¶xU¶xU¶xV¶yV¶yW¶zX·zX·zY¶zY¶{Y¶{Z¶{ZµzZ´zZ³yY²xY°wX¯vX­uW«tVªsU¨rU¦pT¥oS£nS¡mS mRžlRkR›jQ™iQ˜hQ–gQ”fQ‘ePdPcP‹bPˆ`O…_O‚]O\O|ZNxXNtVMoTMmSMlRMjQLgPLbML[JK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À%5 (6$/79CEEKjgkrc_›…{‘uf±{Ÿw_ºq]Oˆ`OŽcP”fQ˜hQ›jRžlR¡nT¢oT¡nTkR˜hQŽdP¦]'ŽQ%\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀUGJ[JK`MKdNLgPLiQLkRMmSMoTMqUMrUMuWNxXN{ZN~[N]Oƒ^O†_Oˆ`OŠbPcPdP£['µd)•gQ—hQ˜iQšjRœkRžlS¡nT£pU§rWªvZ¯y]´~aºƒfÀˆkÆŽpÌ”vÓš{ØŸ€Ý¤„ᧇ䩉媊媉䨇᥄ޡ€Ú|Õ˜wДrÌmÈŠhĆdÀƒ`¾€]»}[º|Y¸zW·yV·xU¶xU¶xU¶wTµwTµwTµwTµwTµwUµwUµxUµxUµxV¶xV¶yW¶yW¶yX¶zX¶zY¶zYµzYµzY´zY´yY²yY±xY°wX®vW­uW«tVªsU¨qU¦pT¥oS£nS¢mS mRžlRkR›jQ™iQ˜hQ–gQ”fQ’ePdPcP‹bPˆaO†_Oƒ^O€\O|[NxYNtWMpUMmSMlRMjQLgPLcNLA;=\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À#*6+.8;:AHEJmgjd\]‡pe«}œxc w^»pƒ^OŠaP‘eP–gQšiQžlR mS¢nT mS›jR•gQ»h*œX&ˆM$\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀC+WHJ]KKaMLdOLgPLjQLlRMnSMoTMqUMrVMvWNyYN|ZN\N]O„^O†_OˆaO‹bPcPžY&«_(³c(•gQ—hQ™iQšjRœkRŸlS¡nT¤pV§sX«vZ¯z^´~bºƒfÀ‰kÆŽpÌ”vÒš{ØŸ€Ý£„ই㩉䩉䩈⧆ःܠØœ{Ô—vÏ“qËŽlljgÆcÀ‚`½]»}Z¹{Y¸zW·yV¶xU¶xU¶wUµwTµwTµwTµwTµwTµwTµwUµwUµxUµxVµxVµxVµyWµyWµyXµyXµyYµzY´yY´yY³yY²xY±wX°wX®vW­uV«tVªrU¨qU¦pT¥oS£nS¢mS mRžlRkR›jQ™iQ˜hQ–gQ”fQ’ePdPŽcP‹bP‰aO†_Oƒ^O€\O}[NyYNuWNqUMmSMlRMjQLhPLdNL\1\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À+.775;ICFphhŠztŠre¯}Ÿya¢vZ]OŠaP‘eP–gQšiQkRŸlS¡nTžlS™iQÌq.¯b*“S%zG#\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀMCJXHK^KKbMLeOLhPLjRLlSMnSMpTMqUMsVMvWNyYN|ZN\N‚]O„^O†`O‰aO‹bP—U&¥\'¯a(»g)Ìr/—hQ™iQ›jRkRŸmS¡nT¤pV§sX«v[¯z^´~bºƒfÀ‰kÆŽpÌ”vÒ™{מÜ£ƒà¦†â¨ˆã¨ˆã¨‡á¦…Þ£‚ÛŸ~×›yÓ–uÎ’pÊkƉgÂ…c¿‚_½]»}Z¹{X¸zW·yV¶xU¶xUµwTµwTµwTµwTµwTµwTµwTµwUµwUµwUµxUµxVµxVµxWµyWµyWµyXµyX´yX´yY³yY³xX²xX°wX¯vW®uW¬tV«sV©rU¨qT¦pT¥oS£nS¡mR mRžlRkR›jQšiQ˜hQ–gQ”fQ’ePdPŽcPŒbP‰aO†`Oƒ^O€]O}[NzYNvWNrUMmSMlRMjQLhQLeOL_LK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À,)/ZTVXON„uq‡od®}Ÿyb»s]OŠaPeP•gQšiQkRžlRŸlSœkR–hQ»g*¤\(ŽQ%`LK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À B B_LKcNLfOLiQLkRLmSMoTMpTMrUMtVMwXNzYN}[N\O‚]O„_O‡`O‰aOQ%ŸY&©^'±b(¾i*Õ{8—hQ™iQ›jRkRŸmS¡nT¤qV§sX«v[°z^µ~bºƒfÀ‰kÆŽpÌ”vÒ™{מÛ¢ƒß¥…ᧇ⧇ᦆऄݢڞ}ÖšxÒ•tÍ‘oÉŒjňfÂ…b¿_¼\º}Z¹{X·zW·yV¶xU¶xUµwTµwTµwTµwTµwTµwTµwTµwT´wU´wU´wU´xVµxVµxVµxW´xW´yW´yX´yX³xX³xX²xX±wX°wW¯vW­uW¬tV«sU©rU§qT¦pT¤oS£nS¡mR mRžlRkR›jQšiQ˜hQ–gQ”gQ’fPdPŽcPŒbP‰aP‡`O„^O]O~[N{ZNvXNrVMnSMlRMjRLhQLeOLaML+O+O\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀHFLXQRTJH~pm‚la¬Ž}Ÿzc»t¤tT‰aPdP•gQšiQœjRžlRžlS›jRÖ|:´e*˜V&ˆN$\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À B B`LKdNLgPLiQLkRMmSMoTMpUMrUMtVMwXNzYN}[N€\O‚]O…_O‡`O‰aPšW&£['«_(´d)Âl,݃@Òt.™iQ›jRkRŸmS¡oU¤qV¨sX«w[°z^µbºƒgÀ‰kÆŽpÌ”uÑ™zÖ~Ú¡‚Þ¤„ॆআॅޣ‚Ü Ø{Õ™wÑ”sÌnÈŒjňfÁ„b¾_¼~\º|Z¸{X·yW¶yV¶xUµwUµwTµwTµwTµwT´wT´wT´wT´wT´wU´wU´wU´wU´wV´xV´xV´xW´xW³xW³xW³xX²xX±wX°wW¯vW®uW­uV¬tVªsU©rU§qT¦pT¤oS£nS¡mR lRžlRkR›jQšiQ˜hQ–hQ”gQ’fPdPŽcPŒbPŠaP‡`O„^O]O~[N{ZNwXNsVMoTMlRMjRLiQLfOLbML+O+O‚+O‚+O‚\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À6./fZXeVRHAIZIKiQLuWM¤tU‰aOdP–gQšjQkRžlRkR˜iQÄn/¬b,‘R%rC"\À\À\À\À\À\À\À\À\À\À\À\À"Fx"Fx!Fx!Fx B B BdNLgPLjQLlRMmSMoTMqUMrUMtWMwXNzZN}[N€\O‚^O…_O‡`O“S%X&¥\'®a(·g+Ês2Ó{9Àj*™iQ›jRkSŸmS¢oU¤qV¨sX«w[°z^µbº„gÀ‰kÆŽpË“uИyÕœ}٠ܢƒÞ¤„ߤ„Þ£ƒÝ¡ÚŸ~×›zÓ—vÏ“rËmÇ‹ićeÀƒa¾€^»~\¹|Z¸zX·yW¶xVµxUµwUµwTµwT´wT´wT´wT´wT´wT´wT´wT´wU´wU´wU´wU´wV³wV³xV³xW³xW²wW²wW±wW±wW°vW¯vW®uV¬tV«sUªsU¨rT§qT¦pT¤oS£nS¡mR lRžlRkR›jQšiQ˜hQ–gQ”gQ’fPePŽcPŒbPŠaP‡`O„_O]O~\N{ZNxXNsVMoTMlRMjRLiQLfPLbNL +O‚+O‚+P‚+P‚+P‚\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À@89dWT@IIAI\JKlRMyYN„^OcP”gQ™iQkRžlRžkR™iRÍt3±d-’S%I#\À\À\À:^‘:^‘:^‘:^‘:^:^:^:^:^"Fx"Fx B B B BeOLhPLjRLlSMnSMpTMqUMrVMuWMxXN{ZN~[N€]Oƒ^O…_O“S%›W&¢['©^(¹k2½i+Ó{:•gQ—hQ™iQ›jRkSŸmT¢oU¤qV¨tY¬w[°{_µbºƒf¿ˆkÄoÊ’tÏ–xÓš|×~Ù €Û¡Û¡Û €Ùž~×›{Ô˜wДsÌoÉŒkʼngÂ…c¿‚`¼]º}[¸{Y·zX¶yVµxVµwU´wU´wT´wT´vT´vT´vT´vT³vT³vT³vT³vT³vU³vU³vU³wU²wU²wV²wV²wV±wV±vV°vV°vV¯uV®uV­tV¬tUªsU©rU¨qT§pT¥pS¤oS¢nS¡mR lRžlRkR›jQ™iQ˜hQ–gQ”gQ’fPePŽdPŒbPŠaPˆ`O…_O‚]O\N|ZNxYNtWMpTMlRMjRLiQLgPLcNL_LK+P‚+P‚+P‚,P‚,P‚,P‚,P‚,P‚Nr¤\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À]QNl\VG@IMCI_LKoTM|ZN†`OdP–gQšjQkRžlRœkR—hQºh*¤^,ŒP%X3:_‘:_‘:_‘:_‘:_‘:_‘:_‘:_‘:^‘:^‘:^‘:^‘"Fx B B B BfOLiQLkRLmSMnTMpTMqUMrVMuWNxYN{ZN~[N€]Oƒ^OŽP%—U&X&£['¬`)½n4Ãn/Àj*•gQ—hQ™iQ›jRkSŸmT¢oU¤qW¨tY«w[°z^´~b¹ƒf¿ˆjÄŒoÉ‘sΕwÒ™{Õœ}ØžÙŸ€ÚŸ€Ùž~ל|ÕšyÒ—vÏ“rËnÇ‹jĈfÁ„c¾`¼]¹}[¸{Y·zW¶xVµxU´wU´wT´wT´vT´vT³vT³vT³vT³vT³vT³vT³vT³vT²vU²vU²vU²vU²vU±vV±vV±vV°vV°vV¯uV®uV­uV¬tU«sUªrU©rT¨qT¦pT¥oS£oS¢nS¡mRŸlRžkRœkR›jQ™iQ˜hQ–gQ”gQ“fPePŽdPŒbPŠaPˆ`O…_O‚]O\N|ZNyYNuWMpUMlRMjQLiQLgPLdNL_LK,P‚,P‚,P‚,P‚,P‚Nr¤Nr¤Nr¤Nr¤Nr¥Nr¥\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀaSOD>IJAIQEJbNLrUM~[NˆaO‘eP—hQœjQžkRŸlR›jRÌs0²e,“T&ƒK$;_‘;_‘;_‘;_‘;_‘;_‘;_‘:_‘:_‘:_‘:_‘:_‘:_‘ B B B BgPLiQLkRLmSMoTMpTMqUMsVMuWNxYN{ZN~[N]O‡M$“S%™V&ŸY&¥\'±e-¹j/Ñz:”fQ•gQ—hQ™iR›jRkSŸmT¢oU¤qW¨tY«w[¯z^´~b¹ƒf¾‡jÃŒnÈrÍ”vјyÔ›|Ö~מ~Øž~×}Õ›{Ó˜xЕtÍ’qÊŽmÆŠiÇeÀ„b½_»~\¹|Z·{Y¶yWµxVµxU´wU´wT´vT³vT³vT³vT³vT³vT³vT³vT³vT²vT²vT²vT²vU²vU²vU±vU±vU±vU°vV°vV¯uV®uV®uV­tU¬sU«sUªrU¨qT§qT¦pS¥oS£nS¢nR¡mRŸlRžkRœkR›jQ™iQ˜hQ–gQ”gQ’fPePŽdPŒbPŠaPˆ`O…_O‚]O\O|ZNyYNuWMqUMlSMjQLhQLfPLdNL_LK,P‚,P‚Nr¤Nr¤Nr¤Nr¤Nr¥Nr¥Nr¥Ns¥Ns¥Ns¥Ns¥\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀdUOG@IMCITFJeOLtWM€]O‹bP“fP™iQkRŸlRkR™iQ¾j,©c/P%[JK;_‘;_‘;_‘;_‘;_‘;_‘;_‘;_‘;_‘;_‘;_‘;_‘ B B B BgPLiQLkRMmSMoTMpTMqUMsVMvWNyYN{ZN~[N|H#ŽQ%•T%›W& Z'¦]'ºm5¸f*Ív5”fQ•gQ—hQ™iR›jRkSŸmT¡oU¤qW§sY«v[¯z^³~b¸‚e½‡i‹nÇqË“uÏ–xÒ™zÔ›|Öœ}Öœ|Õ›{Ô™yÑ–vÏ“sÌoÈlʼnh†e¿ƒa¼€_º~\¸|Z·zX¶yWµxV´wU´wU³vT³vT³vT³vT³vT³vT³vT²vT²vT²vT²vT²vT²vT±vT±vU±vU±vU°uU°uU°uU¯uU®uU®tU­tU¬tU«sUªrU©rT¨qT§pT¥pS¤oS£nS¢mR mRŸlRžkRœjR›jQ™iQ—hQ–gQ”fQ’fPePŽcPŒbPŠaPˆ`O…_O‚^O\O|ZNyYNuWNqUMmSMjQLhQLfPLdNL`LKNr¤Nr¤Nr¥Nr¥Nr¥Ns¥Ns¥Ns¥Ns¥Os¥Os¥Os¥Os¥Os¥Os¥\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À2#TB3REJVGJ`LKpTM}[N‰aO’ePšiQžkR lRžlR˜hQ·e)¢^.P%^8 #Gy#Gy#Gy#Gy#Gy#Gy#Gy#Gy * B B B B BjQLlRMnSMoTMpUMrUMsVMxF#‡M$ŽQ%’S%–U&šW&žY&¢['ªa+¿s;¹g+dP‘eP“fQ”gQ–hQ˜iQšjRœkSžlS nU£pV¦rX©uZ¬x]°{_´~b¸‚e¼…iÀ‰kÃŒnÆŽpÈrÊ‘sË’sË‘rÊqÉoÇmÅ‹kÈhÀ…e¾ƒb¼€`º~^¸|[¶{ZµyX´xW³wV²vU²vU²vT±uT±uT±uT±uT±uT±uT±uT±uT°uT°uT°tT°tT¯tT¯tT¯tT¯tT®tT®tT­sT­sT¬sT¬sT«rTªrT©rT©qT¨qS§pS¦pS¥oS£nS¢nR¡mR lRŸlRkRœjQ›jQ™iQ˜hQ–gQ•gQ“fP‘ePdPcP‹bP‰aO‡`O„^O‚]O\N|ZNxXNuWMqUMmSMhPLgPLeOLcNL`LKZIK,Pƒ,Pƒ,QƒOs¦Os¦Ot¦Ot¦Ot¦Ot¦Pt¦Pt¦Pt¦Pt¦Pt¦-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀvšÍvšÍv›Ív›Ív›Ív›Ív›Íw›Íw›Í=a“=a“=a“#Gy#Gy#Gy#Gy#Gy#Gy#Gy#GymYPODJUGJXIKeOLtWM‚]OcP•gQœjQ lR mRkRÈp.´g0”T&ˆN$]8 #Gy#Gy#Gy#Gy#Gy#Gy#Gy * B B B B BjQLlRMnSMoTMpUMrUMv>„L$ŒP%‘R%•T%˜V&œX& Z'¤\'°f0¹m5Äq3dP‘eP“fQ”gQ–gQ˜hQ™jR›kSlS nT¢pV¥rX¨tZ«w\¯z_³}a·dº„g¾‡jÁŠlÄŒnÆŽpÇqÈqÈpÇŽoÆmÅ‹kÉiÁ‡g¿„d½‚aº_¸}]·|[µzY´yX³xW³wV²vU²vU±uT±uT±uT±uT±uT±uT°uS°uS°tS°tS°tS¯tS¯tT¯tT¯tT®tT®tT®sT­sT­sT¬sT¬sT«rTªrTªrT©qT¨qS§pS¦pS¥oS¤oS£nS¢mR¡mRŸlRžlRkRœjQšjQ™iQ—hQ–gQ”fQ’fP‘ePdPcP‹bP‰aO†`O„^O]O~\N{ZNxXNuWMqUMiQLgPLfOLeOLbNL_LKZIK,Qƒ,Qƒ,Qƒ,Qƒ,QƒOt¦Pt¦Pt¦Pt¦Pt¦Pt¦-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\Àv›Ív›Ív›Ív›Íw›Íw›Íw›Íw›Íw›Íw›Íw›Íw›Í=a“=a“=a“=a“=a“#Gz#Gz#Gz#Gz#Gz#Gz#GzgUOS=2RFJWHJ[JKlRMzYN†`OeP˜iQžkR mRŸlR™iQ¼h*°h4‘R%ˆN$^9 [JK#Gy#Gy#Gy#Gy#Gy * B B B B BjQLlRMnSMoTMpUMI#†L$‹O$Q%“S%—U&šW&X&¡Z'¦](·l5´f,Èt5dPeP’fP”fQ–gQ—hQ™iR›kRlSŸmT¢oV¤qW§tY«v[®y^±|aµc¸‚f¼…h¿ˆkÁŠlÃŒnÅnÅoÅnÅŒmÄ‹k‰iÁ‡g¿…e½ƒc»€`¹~^·|\¶{Z´yY³xW²wV²vU±vU±uT±uT±uT°uT°uT°tS°tS°tS°tS°tS¯tS¯tS¯tS¯tS®tS®tS®sS­sT­sT­sT¬sT¬rT«rTªrTªrS©qS¨qS§pS¦pS¦oS¥oS¤nS¢nR¡mR mRŸlRžkRkR›jQšiQ˜iQ—hQ•gQ”fQ’ePePdPcPŠbPˆ`O†_Oƒ^O]O~[N{ZNxXNtVMqUMhPLgPLfOLdNLbML_LKbE6,Qƒ,Qƒ,Qƒ,Qƒ-Qƒ-Qƒ-QƒPt¦-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Qƒ-Q„-Q„-Q„\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À@d–w›Íw›Íw›Íw›Íw›Íw›Íw›Íw›Íw›Íw›Íw›Íw›Îw›Îw›Î=a”=a”=a”=a”=a”=a”=a“#Hz#Gz#Gz#Gz#Gz#Gz#GzmYPPDJUGJYIKbMLqUM\NŠbP”fQ›jQŸlR¡mRžlRËp,µe+ \+R%ˆN$b; ]8 [7 XHKO+N1L/L/L/K/K/ eb”>b”>b”>b”>b”>b”>b”>b”=b”=b”=b”=b”=b”=b”=b”=b”YEUGJYIK_LKnSM|ZNˆ`O’ePšiQŸlR¡mR mR™iQºg*´j4šW'‘R%ŽQ%h>!g=!f=!db”>b”>b”>b”>b”>b”>b”$Hz$Hz$Hz$Hz$Hz>b”>b”>b”>b”>b”gVOS=2RFJWHK[JKeOLsVM€]OŒbP•gQœjQ lR¡mRžlRÌr/¹g*²h2–U&“S%‘R%Q%ŽQ%ŒP%£['¨]'¬`(°b(´d)¸f)»g)¾i*Áj*I#¡Z'¡Z' Z' Z'¡Z'£['¤['¥\'¦]'ª_)±d,³d)Äq3‹bPcPdP‘eP’fQ”fQ–gQ—hQ™iR›kSlSŸmU¡oV¤qW¦sY©u[¬x]¯z^±|`´~b¶€d¸‚eºƒf»„f»„f¼„f»ƒe»‚dºb¹€a·~_¶}^µ{\´zZ³yY²wX±wW°vV°uU¯uU¯tT¯tT¯tT®tS®tS®tS®sS®sS®sS®sS®sS­sS­sS­sS­sS¬sS¬rS¬rS«rS«rSªrSªqS©qS©qS¨pS§pS¦pS¦oS¥oS¤oR£nR¢nR¡mR mRŸlRžkRkRœjQšjQ™iQ˜hQ–hQ•gQ“fQ’ePdPŽcPŒcPŠbPˆ`O†_O„^O]O\N|ZNyYNuWNrUMnSMjQLdNLcNLaMK_LK[JK`D6Pt¦Pt¦Pt§Pt§Pt§Pu§Pu§Pu§Pu§Qu§Qu§Qu§Qu§Qu§Qu§-Q„-Q„-Q„-R„-R„-R„-R„-R„-R„-R„-R„-R„.R„.R„Rv¨Rv¨Rv¨~¢Ô~¢Ô~¢Ô~¢Ô\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À@e—@e—@e—@e—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—xœÏxœÏxœÏxÏxÏxÏxÏyÏyÏ>b•>b”>b”$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz>b”>b”>b”>b”>b”YDb”>b”>b”>b”Q@:R<2fL@WHJZJKaMKoTM|ZNˆ`O‘eP™iQŸlR¡mR¡mRœjRÇo-»i-´h0«`)§]'¨]'¬`(°b(´d)¸f)¼h)Àj*Ãk*Æm*Én+Ìp+Ïq+Òr,§]'§]'§]'¨^'ª_(«_(¬`(­`(¯b)²c)ºi.ˆ`OŠaPŒbPŽcPdP‘eP“fQ”gQ–hQ˜iRšjR›kSlTŸnU¢oV¤qW¦sY©uZ«w\­y]°{_²|`³}aµ~b¶b¶b¶b¶a¶~`µ}_µ|^´{]³z[²yZ±xY°wX¯vW¯uV®uU®tU®tT­tT­sT­sS­sS­sS­sS­sS­sS­sS­sS¬sS¬rS¬rS¬rS«rS«rS«rSªrSªqS©qS©qS¨qS¨pS§pS¦pS¦oS¥oR¤oR¤nR£nR¢mR¡mR lRŸlRžkRkRœjQšjQ™iQ˜hQ–hQ•gQ“fQ’ePdPdPcP‹bP‰aO‡`O…_O‚]O\O}[NzYNwXNtVMpTMlRMhPLcNLaMK_LK]KKbR]C5Pu§Pu§Pu§Qu§Qu§Qu§Qu§Qu§Qu§Qu§Qu§Qu§Qu§Qu¨Qu¨Qu¨Qv¨Qv¨Qv¨-R„-R„.R„.R„.R„Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨£Õ£Õ£Õ£Õ£Õ£Õ£Õ£Õ£Õ£Õ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀAe—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae˜Ae˜Ae˜Ae˜yÏyÏyÏAf˜Af˜Af˜$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz>b•>b•>b”>b”WD3TFJXHK[JKfOLsVM€]O‹bP”gQœjQ lR¡mR mRœkRÅm,½i,ºj/²d+±c)²c(¶e)ºf)¾h*Áj*Ål*Én+Ëo+Îq+Ñr+Ós,Õt,ƒK$ª^(ª_(«_(¬`(®a(¯a)°b)³d*¶f+¾m1‡`O‰aP‹bPcPdPeP’fQ”fQ•gQ—hR™iR›kSlTŸmT¡oV£pW¥rX§tY©v[¬w\®y]¯z^±{_²|`³}`´}`´}`´}_´|^³{^³{\²z[±yZ°xY°wX¯vW®uV®tU­tU­tT­sT­sT­sS­sS¬sS¬sS¬sS¬rS¬rS¬rS¬rS¬rS«rS«rS«rS«rSªrSªqSªqS©qS©qS¨qS¨pS§pS¦pS¦oS¥oR¤oR¤nR£nR¢mR¡mR mRŸlRžlRkRœjQ›jQšiQ˜iQ—hQ–gQ”fQ“fP‘ePdPŽcPŒbPŠaPˆ`O†_O„^O]O\N|ZNyYNvWNsVMoTMkRLgPLbML`LK^KK\JK~aR[B5Pu§Qu§Qu§Qu§Qu§Qu§Qu§Qu§Qu§Qu§Qu§Qu¨Qu¨Qu¨Qv¨Qv¨Qv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv©Rv©£Õ£Õ£Õ£Õ£Õ£Õ£Õ£Õ£Õ£Õ£Õ£Õ£Õ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀAe—Ae—Ae—Ae—Ae—Ae—Ae˜Ae˜Ae˜Ae˜Ae˜Ae˜Ae˜Af˜Af˜Af˜yÐAf˜Af˜Af˜Af˜Af˜Bf˜$H{$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz>c•>c•>b•>b•O?:[E|aRZA5-QƒQu§Qu§Qu§Qu§Qu§Qu§Qu§Qu¨Qu¨Qu¨Qv¨Qv¨Qv¨Qv¨Rv¨Rv¨Rv¨Rv¨.R„.R„.R„.R„Rv¨Rv¨Rv©Rv©Rv©Rw©£Ö£Ö£Ö£Ö£Ö£Ö£Ö£Ö£Ö£Ö£Ö£Ö£Ö£Ö£Ö£Ö\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀAe˜Ae˜Ae˜Ae˜Ae˜Ae˜Ae˜Af˜Af˜Af˜Af˜Af˜yžÐyžÐyžÐzžÐzžÐzžÐBf˜Bf˜Bf˜Bf˜Bf˜$H{$H{$H{$H{$H{$H{$H{$H{$H{$Hz$Hz$Hz$Hz$Hz$Hz$Hz$Hz>c•>c•>c•>c•VC^C6W@5-Q„-Q„Qu§Qu§Qu§Qu§Qu¨Qu¨Qv¨Qv¨Qv¨Qv¨Rv¨Rv¨Rv¨Rv¨.R„.R„.R„.R„.R„.R„.R„.R„.R„Rv©Rw©Rw©Rw©¤Ö¤Ö¤Ö¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö¤Ö¤Ö¤Ö\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀAf˜Af˜Af˜Af˜Af˜Af˜Af˜Af˜zžÐzžÐzžÐzžÐzžÐzžÐzžÐzžÐzžÐzžÐzžÐBf˜Bf˜Bf˜Bf˜$I{$I{$I{$H{$H{$H{$H{$H{$H{$H{$H{$H{$H{$H{$H{$H{$Hz$Hz$Hz$Hz$Hz YE\C6T>4-Q„-Q„-Q„-R„Qu¨Qu¨Qv¨Qv¨Qv¨Qv¨Rv¨Rv¨Rv¨.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„Rw©Sw©€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤ÖEi›Ei›Ei›\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀAf˜Af˜Bf˜Bf˜Bf˜zžÐzžÐzžÐzžÐzžÐzžÐzžÐzžÐzžÑzžÑzžÑzŸÑzŸÑzŸÑzŸÑBf˜Bf˜Bf˜$I{$I{$I{$I{$I{$I{$I{$I{$I{$I{$I{$H{$H{$H{$H{?c•?c•?c•?c•$H{$H{$H{SB;R<2zbVUGJXIK[JK[JKuWN€\OŠaP’fP™iQŸlR¡mR£nS£nS¥pTà€9Þ9Õw2Öw0Öv/Öv.Ùx/Üz0Þz0á|1ã~2æ€3è5éƒ6ë…8ë…8ºm4¼o7¾q8Äu;Ãs9Ãs8ºj0‚]O„^O†_Oˆ`OŠaPŒbPcPdP‘eP’fQ”fQ•gQ—hR™iRšjSœkSlTŸnU¡oV¢pV¤qW¦rX§sY¨tY©uYªuZ«uZ«vZ«vY«uY«uX«uX«tW«tV«sVªsUªsUªrTªrTªrTªrSªqSªqSªqSªqSªqS©qS©qS©qS©qS©qS©qS©qS©qS¨qS¨pS¨pS§pS§pR§pR¦oR¦oR¥oR¥oR¤nR£nR£nR¢mR¡mR mR lRŸlRžkRkRœjQ›jQšiQ™iQ—hQ–gQ•gQ”fQ’eP‘ePdPcPŒbPŠaPˆ`O†_O„^O‚]O\O}[NzYNwXNtVMqUMnSMiQLeOL`LK]KKmP?kN?|aSZA5P<4-R„-R„-R„-R„-R„-R„Qv¨Rv¨Rv¨Rv¨Rv¨.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„€¤×€¤×€¤×€¤×€¤×€¤×€¤×€¤×€¤×€¤×€¤×€¤×€¤×€¤×€¤×€¤×Ei›Ei›Ei›Ei›Ei›Ei›Ei›\À\À\À\À\À\À\À\À\À\À\À\ÀBf˜zžÐzžÐzžÐzžÐzžÐzžÐzžÑzžÑzžÑzŸÑzŸÑzŸÑzŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑBf™Bf™Bf™%I{$I{$I{$I{$I{$I{$I{$I{$I{$I{$I{?c–?c–?c–?c–?c–?c•?c•?c•?c•$H{$H{$H{jXP^H=}dXUGJXHKZIKkRLwXN‚]O‹bP”fQšiQžkR mR£nS¥pT¨qU¨rUç…;ç†>ì‰?è†<å‚9ê†;î‰=ðŠ=ðŠ>ôŽAø‘Dü•Hÿ˜Kù’E¿r:Àt;Àt;Át<Ãt:½n4´f,]Oƒ^O…_O‡`O‰aO‹bPŒcPŽcPdP‘eP“fQ”gQ–hQ˜iR™jR›kSœlSžmTŸnU¡oV¢pV¤qW¥rW¦rX§sX¨tX©tX©tX©tX©tXªtWªsW©sV©sV©rU©rU©rT©qT©qT©qS©qS©qS©qS©qS©qS©qS©qS©qS¨qS¨qS¨pS¨pS¨pS¨pS§pS§pS§pR¦pR¦oR¦oR¥oR¥oR¤nR¤nR£nR¢nR¢mR¡mR mR lRŸlRžkRkRœjQ›jQšiQ™iQ˜hQ–hQ•gQ”fQ’fP‘ePdPŽcPŒcP‹bP‰aO‡`O…_Oƒ^O]O~[N{ZNyYNvWNsVMpTMlRMgPLcNL†gUƒeUlO?~bT{`SW@5-R„-R„-R„-R„-R„-R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R….R…Ei›Ei›Ei›€¥×€¥×€¥×€¥×€¥×€¥×€¥×€¥×€¥×€¥×€¥×€¥×Ei›Ei›Ei›Ei›Ei›Ei›Ei›Ei›Ei›Ei›Ei›\À\À\À\À\À\À\À\À\À\ÀzžÑzžÑzžÑzžÑzŸÑzŸÑzŸÑzŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÒBg™Bg™Bg™%I{%I{%I{%I{%I{%I{%I{@d–?d–?d–?d–?d–?d–?d–?d–?d–?c–?c–?c–?c–$I{$I{L=:WD`KA-R„-R„-R„.R„.R„.R„.R„Rv¨Rv¨Rv¨Rv¨.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R„.R….R….R….R…EiœEiœEiœEiœEiœEiœ¥×¥×¥×¥×¥×¥×¥×EiœEiœEiœEiœEiœEiœEiœEiœEiœEiœEiœEiœEiœEiœEiœEiœ\À\À\À\À\À\À\À\ÀzŸÑzŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÒ{ŸÒ{ŸÒ{ŸÒ{ Ò{ Ò{ Ò{ Ò| ÒCg™Cg™%I{%I{%I{@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–?d–?d–?d–?d–?d–?d–$I{$I{dUPYEXG@-R„.R„.R„.R„Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv©.R„.R„.R„.R„.R„.R„.R„.R„.R….R….R….R….R….R….S…EiœEiœEiœEjœEjœEjœEjœEjœ¥×¥×¥×EjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEiœEiœEiœ\À\À\À\À\À\À{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÑ{ŸÒ{ŸÒ{ŸÒ{ Ò{ Ò{ Ò{ Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| ÒCg™@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–?d–$I{$I{RA;P<3zcXnVIuh™~pdNLpUMÁ”w¬zZ«vS‘eP–gQœjQžlR¡mR¤oS§pT­uV¯vW±xY¶|\¼€_ÆdƉgÈŠhÊŒiÌŽkÎlÿRñF¶k4²g1¯d-­b+ª_(¢Z'}[N€\O‚]O„^O†_Oˆ`O‰aP‹bPcPŽcPdP‘eQ’fQ”gQ•gQ—hR˜iR™jR›kSœkSlTžmT nT¡nU¡oU¢oU£pU¤pU¤pU¤pU¥pU¥pT¥pT¥pT¥pT¥pS¥pS¥oS¦oS¦oS¦oS¦oS¦oS¦oR¦oR¦oR¦oR¦oR¦oR¦oR¦oR¥oR¥oR¥oR¥oR¤oR¤nR¤nR£nR£nR¢nR¢mR¡mR¡mR lRŸlRŸlRžkRkRœkQœjQ›jQšiQ™iQ˜hQ—hQ•gQ”gQ“fP’ePePdPcPŒbPŠbP‰aO‡`O…_Oƒ^O]O~\N|[NzYNwXNtVMpUM—pY”oXzWBuUB…gVlP@jO@|bUx`TcMB3!.R„Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv©Rv©Rv©Rw©Rw©Rw©.R„.R„.R„.R„.R….R….R….R….R….S….S….S…EjœEjœEjœEjœEjœEjœEjœEjœEjœ¦Ø¦ØEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœEjœ\À\À\À\ÀBg™{ŸÒ{ŸÒ{ŸÒ{ Ò{ Ò{ Ò{ Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| ÒCg™Cg™Cg™Cg™|¡Ó@d—@d—@d—@d—@d—@d—@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–%I{;0/SB;R=4fODpXL‘xkš€r˜vbº“zÀ”x«{[ÃldP•gQ™iQ›jQŸlR£nR¦pS¨qTªrT¬tU°wWµ{Z¸}\¸|\¸}\¹~]»]å}+Ý~6­d.ªa+¨_)§^(¤\'zYN|ZN~\N€]Oƒ^O„_O†_Oˆ`OŠaP‹bPcPŽdPdP‘eQ“fQ”gQ•gQ—hR˜iR™jRšjSœkSlSžlTŸmT mT nT¡nT¢nT¢oT£oT£oT£oT£oT¤oS¤oS¤oS¤oS¤oS¤oS¤oS¥oR¥oR¥oR¥oR¥oR¥oR¥oR¥oR¥oR¥oR¤oR¤oR¤nR¤nR¤nR£nR£nR£nR¢mR¢mR¡mR¡mR lR lRŸlRžlRžkRkQœjQ›jQšjQ™iQ™iQ˜hQ—hQ•gQ”gQ“fQ’ePePdPŽcPŒbPŠbP‰aO‡`O…_Oƒ^O]O\N}[NzZNxXNuWMrUM™rZ–pY|XCxVCsTBmQAkOA~cVzaU`I>\IARv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv¨Rv©Rv©Rv©Rw©Rw©Rw©Sw©Sw©Sw©Sw©.R….R….R….R….R….S….S….S….S…FjœFjœFjœFjœFjœFjœFjœFjœ‚¦Ø‚¦Ø‚¦Ø‚¦Ø‚¦Ø‚¦ØFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœ\À\ÀBg™{ Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ò| Ó| ÓCg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™}¡Ó@e—@e—@e—@e—@e—@e—@d—@d—@d—@d—@d—@d—@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–@d–%I{<1/J82^I@gQFqYN‘xl™€s—vc¢{d¿”yª{\«wUÄi‘eP•gQ˜hQkQ mR¢mR¤nR¥oS§pSªrT¬tU¬tU¬tU¬tU­tU®tUÒt.ƒL&¤](¢['¡Z'žY&xYN{ZN}[N\N]Oƒ^O…_O‡`OˆaOŠaPŒbPcPdPeP‘eQ“fQ”gQ•gQ—hR˜iR™iRšjR›kSœkSlSžlSŸmSŸmS mS nS¡nS¡nS¢nS¢nS¢nS¢nS£nS£nS£nR£nR£nR£nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR£nR£nR£nR£nR£nR¢nR¢mR¢mR¡mR¡mR¡mR lR lRŸlRžlRžkRkRœkQœjQ›jQšiQ™iQ˜iQ—hQ–hQ•gQ”fQ“fP’ePePdPŽcPŒbP‹bP‰aO‡`O†_O„^O‚]O\O}[N{ZNxYNvWNsVM›s[˜rZ~ZDnYŒkYqSBkPAiOA|cVbK?\G>NB?Rv¨Rv¨Rv¨Rv¨Rv¨Rv©Rv©Rv©Rw©Rw©Rw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©.S….S….S….S….S….S…FjœFjœFjœFjœFjœFjœ‚¦Ø‚¦Ø‚¦Ø‚¦Ø‚¦Ø‚¦Ø‚¦Ø‚¦Ø‚¦Ø‚¦Ø‚¦ØFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœCg™Cg™| Ò| Ò| Ò| Ò| Ò| Ó| Ó| Ó| Ó|¡Ó|¡ÓCg™Cg™Cg™Cg™Cg™Cg™Cg™CgšCgšCgšCgšCgš}¡ÓAe—Ae—Ae—@e—@e—@e—@e—@e—@e—@e—@e—@d—@d—@d—@d—@d—@d—@d–@d–@d–@d–%I{@d–@d–<1/H72\I@ePGpYNxm˜€t–vc¡{e¾”zÁ“u‘p«wU¬uQ‘eP•gQ™iQšjQœjQžlR¡mR£nR¤nR¤oR¤oR¤oR¤oR¤oRÇgb;  Z'žY&›W&“S%vXNyYN{ZN~[N€\O‚]Oƒ^O…_O‡`O‰aOŠaPŒbPcPdPdP‘eQ“fQ”gQ•gQ–hQ˜iR™iRšjR›jR›kSœkSlSžlSžlSŸlSŸmS mS mS¡mS¡mS¡mR¡mR¢mR¢mR¢mR¢mR¢nR¢nR¢nR£nR£nR£nR£nR£nR¢nR¢nR¢mR¢mR¢mR¢mR¡mR¡mR¡mR mR lRŸlRŸlRžlRžkRkRkQœjQ›jQ›jQšiQ™iQ˜hQ—hQ–gQ•gQ”fQ“fP‘ePdPdPcPŒbP‹bP‰aO‡`O†_O„^O‚]O€\O}[N{ZNyYNvXNtVMu\„]E€[E’oZŽmZŠkYnRBjOB}cVdL@`I?XGARv¨Rv¨Rv¨Rv¨Rv©Rv©Rw©Rw©Rw©Rw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©SwªSwª.S….S….S….S…/S…FjœFjœFjœFjœ‚¦Ù‚¦Ù‚¦Ù‚¦Ù‚¦Ù‚¦Ù‚¦Ù‚¦Ù‚¦Ù‚¦Ù‚¦Ù‚¦Ù‚¦Ù‚¦Ù‚¦ÙFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœ‚¦Ù‚¦ÙCg™Cg™| Ó| Ó|¡Ó|¡Ó|¡Ó|¡Ó|¡ÓCg™Cg™Cg™Cg™CgšCgšCgšCgšCgšCgšCgšCgšChšChšChšChšChš}¢ÔAe—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—@e—@e—@e—@e—@e—@e—@e—@d—%I{%I{%I{%I{%I{@d–@d–<10F61o]Vye]„oeŽxmœ‚u”udŸ{e¥}d¨|aÀ’tÁpÃl¬uQdP’eP”fQ–gQ˜iQ›jQœjQœjQœjQœjQœkQœkQkQ_9 œX&™V&•T%rUMuWMwXNzYN|ZN~[N€\O‚]O„^O…_O‡`O‰aOŠbPŒbPcPŽdPdP‘eQ’fQ”fQ•gQ–hQ—hR˜iR™iRšjR›jRœkRœkRkRlRžlRžlRŸlRŸlRŸlR lR mR mR mR¡mR¡mR¡mR¡mR¡mR¡mR¡mR¡mR¡mR¡mR¡mR¡mR¡mR¡mR¡mR mR lR lRŸlRŸlRŸlRžkRžkRkRkQœjQ›jQ›jQšiQ™iQ˜iQ—hQ–hQ•gQ”gQ“fQ’fP‘ePdPdPcPŒbPŠbP‰aO‡`O†_O„^O‚]O€\O~[N{ZNyYNwXNtVMrUM†^F‚]F”q\o[ŒlZqTD€fX}dWeMAbK@O=6NB@Rv¨Rv©Rv©Rv©Rw©Rw©Rw©Rw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©SwªSwªSwªSxªSxªSxª/S…/S…FjœFjœFjœƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§ÙFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœFjœƒ§Ùƒ§Ùƒ§Ùƒ§ÙCg™Cg™Cg™}¡Ó}¡Ó}¡ÓCg™CgšCgšCgšCgšCgšCgšCgšChšChšChšChšChšChšChšChšChšChšDhšDhšDhš~¢ÔAe—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—%I{%I{%I{%I{%I{%I{%I{%I{%I{@d—@d—E:9D61m\Vwe]lXOuaX„k_¨‹z±|¡|e¥|c§|`©z]ªyXÂnÃlÄŽkÄŽidP’eP“fP“fP“fP’fP“fP“fP“fP[7 —U&”T%P%pTMsVMuWMxXNzYN|ZN~[N€\O‚]O„^O†_O‡`O‰aOŠbPŒbPcPŽdPdP‘eP’eQ“fQ”gQ•gQ–hQ—hQ˜iR™iRšjR›jR›jRœkRœkRkRkRžkRžlRžlRŸlRŸlRŸlRŸlR lR lR lR lR lR lR lR lR lR lR lR lR lRŸlRŸlRŸlRŸlRžkRžkRkRkQœkQœjQ›jQ›jQšiQ™iQ˜iQ˜hQ—hQ–gQ•gQ”fQ“fP’eP‘ePdPŽdPcPŒbPŠbP‰aO‡`O…_O„^O‚]O€\O~[N|ZNyYNwXNuWMrUM‡`G„^G–r]|ZFxXFtVEgY~eY{cXbLA[H?REA.R„.R„Rv©Rw©Rw©Rw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©SwªSwªSxªSxªSxªSxªTxªTxªTxªƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§ÙFjFjFjFjFjFjFjFjFjFjFjƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§Ùƒ§ÙCg™Cgš}¡Ó}¡ÓCgšCgšCgšCgšChšChšChšChšChšChšChšChšChšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhš~¢ÔAe—Ae—Ae—Ae—Ae—Ae—Ae—Ae—Ae—%I|%I|%I|%I{%I{%I{%I{%I{%I{%I{%I{%I{%I{%I{@e—@e—B99B51k[Vud]iWPr_Wye] †yªŒ|²}¡|e¤|c¾’w¨{^¨z\©yZÁp«xW«wU«wU«wU«wUÃŽlÃŽlÂŽlÂŽlkD(’S%ŒP%nSMoTMqUMsVMvWNxXNzYN|ZN~[N€\O‚]O„^O†_O‡`O‰aOŠaP‹bPcPŽcPdPeP’eQ“fQ”fQ•gQ–gQ–hQ—hQ˜iQ™iR™iRšjR›jR›jRœjRœkRœkRkRkRkRžkRžkRžlRžlRŸlRŸlRŸlRŸlRŸlRŸlRŸlRŸlRŸlRžlRžkRžkRžkRkRkQkQœkQœjQ›jQ›jQšjQšiQ™iQ˜iQ˜hQ—hQ–gQ•gQ”gQ“fQ’fP‘ePePdPŽcPcP‹bPŠaPˆaO‡`O…_Oƒ^O‚]O€\O~[N|ZNyYNwXNuWMrUMŸw_œv_˜t^~\GzYGvWF†j[fZ|dYybX\I@VGB5/2.R„.R„.R„.R„Sw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©Sw©SwªSwªSwªSxªSxªSxªSxªTxªTxªTxªTxªFkFkFkFkƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§ÚFkFkFkFkFkFkFkFkƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Úƒ§Ú}¡Ó}¡Ó}¡Ô}¡ÔChšChšChšChšChšChšChšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhš~£ÕAe˜Ae˜Ae˜Ae˜Ae˜%J|%I|%I|%I|%I|%I|%I|%I|%I|%I|%I|%I|%I{%I{%I{%I{%I{%I{@e—@e—<68?31gYVpa\bRMjYTq`Z€j`¡‡z«}²‘}¶’|¸’{º’z»’x¼’w§z^¿‘t¿‘s¿‘s¿s¿r¿r¾r¾r°h2‹O$„L$mSMnSMnTMoTMtVMvWNxXNzYN|ZN~[N€\O‚]O„^O…_O‡`OˆaOŠaP‹bPŒcPŽcPdPdP‘eP’eQ“fQ”fQ•gQ–gQ–hQ—hQ˜hQ˜iQ™iQšiQšiQšjQ›jQ›jQœjQœjQœkQœkQkQkRkRkRkRkRkRkRkRkRkQkQkQœkQœjQœjQœjQ›jQ›jQšjQšiQ™iQ™iQ˜hQ—hQ—hQ–gQ•gQ•gQ”fQ“fP’eP‘ePdPdPcPŒbP‹bP‰aPˆ`O†`O…_Oƒ^O]O€\O~[N|ZNyYNwXNtWM£z` y`w`šu_€]I|[HwXGˆl\ƒi[}eZycYr_WjZU;23.R„.R„.R„.R„.R….R….R…Sw©Sw©Sw©Sw©Sw©SwªSwªSwªSxªSxªSxªTxªTxªTxªTxª/S…/S…GkGkGkGkGkGkGkƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨ÚGkGkGkƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Ú}¢Ô}¢Ô}¢Ô}¢Ô~¢ÔDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhš£ÕAf˜%J|%J|%J|%J|%J|%J|%J|%J|%J|%I|%I|%I|%I|%I|%I|%I|%I|%I|%I|%I|%I{%I{Ae—Ae—Ae—?89H=:?YUY`QGfVLudXjeitlm{po|qp}rp~rpsqsq€tqŒr_=1+xJ)’o[~[F€\G‚^H„_I…`IkRLlRMnSMpTMrVMuWMwXNyYN{ZN}[N~\N€\O‚]Oƒ^O„_O†_O‡`Oˆ`O‰aPŠbP‹bPŒcPcPŽcPdPdPeP‘eP’eP’fP“fQ“fQ”fQ”gQ•gQ•gQ•gQ–gQ–gQ–gQ–hQ–hQ—hQ—hQ—hQ—hQ—hQ–hQ–hQ–gQ–gQ–gQ•gQ•gQ•gQ”fQ”fQ“fQ“fP’eP‘eP‘ePdPdPŽdPŽcPcPŒbP‹bPŠaP‰aO‡`O†_O…_Oƒ^O‚]O€\O~\N}[N{ZNyYNwXNuWM“iOhOŽgO‹eOžze›yd—wd”tcrbtYKjTIaOG[KFj]Y^UU?;@.R….R….S….S….S….S….S….S…/S…/S…/S…/S…/S…/S…/S…/S…/S…/S…/S…/S…/S…/S…/S…GkžGkžGkžGkžGkžGkžGkžGkžGkžGkžGkžGkžGkžGkžGkžGkžGkžGkž…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©ÛGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlž…©Û…©Û…©Û…©Û…©Û…©Û£Õ£Õ£Õ£Õ£Õ£Õ£Õ£ÕDh›Dh›Dh›Dh›Di›Di›Di›Di›Di›¤Ö¤Ö¤Ö¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤ÖEi›Ei›&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|%J|%J|%J|%J|%J|%J|Af˜Ae˜Ae˜%J|%J|%J|%I|%I|%I|%I|#-#%.()1MEAQIEUMI]SL]TM=4.1+(=.#6,&5( 1%"ŒlYn[“p\•r]]Hƒ_I…`JœwažybkRLmSMpTMrUMtVMvWNxXNzYN|ZN}[N\N€]O‚]Oƒ^O…_O†_O‡`OˆaO‰aPŠaP‹bPŒbPcPŽcPŽdPdPdPeP‘eP‘eP’eP’fP“fP“fQ“fQ”fQ”fQ”fQ”gQ”gQ•gQ•gQ•gQ•gQ•gQ”gQ”fQ”fQ”fQ”fQ“fQ“fP“fP’eP’eP‘eP‘ePdPdPdPŽcPcPŒcPŒbP‹bPŠaP‰aO‡`O†_O…_Oƒ^O‚]O]O\O}[N|ZNzYNxXNvWN¬‚gªg¨€ghPŒfPŸ|fœzf˜xe”vdscsYLiTK_NHYKFh\Z]UV=;@.R….S….S….S….S….S….S…/S…/S…/S…/S…/S…/S…/S…TxªTxªTxªTxªTxª/S…/S…/S…/S…GlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlž…©Û…©Û…©Û…©Û…©Û…©Û…©ÛGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlžGlž…©Û…©Û…©Û…©Û£Õ£Õ£Õ£Õ£Õ£Õ£Ö£ÖDi›Di›Di›Di›Di›Di›¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤×€¤×€¤×€¤×Ei›&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|Bf˜Bf˜Af˜Af˜Af˜Af˜Af˜%J|%J|%J|%J|%J|%J|%I|%I|%I|, +,!.! "`E6†iYŒlZo\“q]•s^^J™va›wbycŸzd {e¤}foTMqUMsVMuWNwXNyYN{ZN|ZN~[N\O]O‚]Oƒ^O…_O†_O‡`Oˆ`O‰aOŠaP‹bPŒbPŒcPcPŽcPŽdPdPdPdPeP‘eP‘eP‘eP’eP’eP’eP’eP’fP’fP’fP“fP’fP’fP’fP’eP’eP’eP‘eP‘eP‘ePePdPdPdPŽdPŽcPcPŒcPŒbP‹bPŠaP‰aOˆ`O‡`O†_O…_Oƒ^O‚]O]O\O~[N|[N{ZNyYNwXN®ƒi¬ƒiª‚i¨i¦€hŒhR‰fQ†dQ‚bP•wfx]Oˆpdkbtd_m`]OEDG?A;:@.S….S….S….S….S…/S…/S…/S…/S…/S…/S…/S…/S…TxªTxªTxªTxªTxªTx«Tx«Tx«Ty«/S†GlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlž…ªÜ…ªÜ…ªÜHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlž…ªÜ…ªÜ£Ö£Ö£Ö£Ö¤Ö¤Ö¤Ö¤Ö¤ÖEi›€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤×€¤×€¤×€¤×€¥×€¥×€¥×Bg™Bg™Bg™Bg™Bg™&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Af˜Af˜%J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%I|%I|%I|%I|%I|%I| +,YA5jPBpSD‹l[o]’q^–t`‚_Kšwbœycžze {f¡}g¤h¨i”lSrVMtWMvWNxXNyYN{ZN|[N~[N\O]O‚]Oƒ^O„_O…_O†`O‡`Oˆ`O‰aPŠaP‹bP‹bPŒbPcPcPŽcPŽcPdPdPdPdPdPdPdPdPePePePePePdPdPdPdPdPdPdPŽcPŽcPcPcPŒbP‹bP‹bPŠaP‰aOˆ`O‡`O†`O…_O„^Oƒ^O‚]O€]O\O~[N|[N{ZNyYNxXN°…j®„j¬„jªƒj¨‚j¦€jŒhSŠgS†eRƒcR|`QŒsf…oe}jcrd`k_]LCDC=@,,3(4F(4F.S….S…/S…/S…/S…/S…/S…/S…/S…TxªTxªTxªTxªTxªTxªTx«Tx«Tx«Ty«Ty«Ty«…ªÜHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlž†ªÜHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžChšChš¤Ö€¤Ö€¤Ö€¤Ö€¤ÖEi›Ei›Ei›€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤Ö€¤×€¤×€¤×€¤×Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Bg™Bg™&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜&J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%I|%I|%I|%I|%I|#5H71O;3V?4iOBoSDsVFo]{[I^Kƒ`L…bN‡dOŸ{f }g¢~h¥€j’kT•mU˜oVšqWrWwXNxXNzYN{ZN}[N~[N\O€]O‚]Oƒ^O„^O…_O…_O†`O‡`Oˆ`O‰aO‰aPŠaP‹bP‹bPŒbPŒbPŒcPcPcPcPŽcPŽcPŽcPŽcPŽcPŽcPŽcPŽcPŽcPŽcPcPcPcPŒcPŒbP‹bP‹bP‹bPŠaP‰aP‰aOˆ`O‡`O†_O…_O„_O„^Oƒ^O]O€\O\N~[N|ZN{ZNyYN›oTšoT™oT—nT¬„lªƒl¨‚ljUŒiTŠhT†fT€cSvi‰rgnfyidqdah^^HBD?<@)+3OZkMYk(5F(5F(5F/S…/S…/S…/S…/S…TxªTxªTxªTxªTxªTxªTx«Tx«Ty«Ty«Ty«Ty«Uy«†ªÜ†ªÜ†ªÜ†ªÜHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlž†ªÜ†ªÜ†ªÜ†ªÜ†ªÜHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžDhšDhšDhšChš&K}&K}&K}&K}&K}&K}ChšChšCgšCgšCgšCgšCgšCgšCg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™&J|&J|&J|&J|&J|&J|Bg™Bg™Bg™Bf™Bf™Bf™Bf™Bf™Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜&J|&J|&J|&J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%I|%I|A99N?;L:2T>4gNBlRD‡k\‹n^z[J~^LaN…cO‡dP‰fQŠgRŒhTjU’lV•nW˜pXšrXsY¶‹q¸qºŽr¼r½r¿s©z[©z[ªz[«{[¬{[¬{ZÅ“rÅ’qÅ’qÅ’pÅ’pÅ‘o­yV­xV¬xU¬wT¬wTŠaPŠbP‹bP‹bP‹bP‹bP‹bP‹bP‹bP‹bP‹bP‹bP‹bP‹bPŠaPŠaPŠaP‰aP‰aOˆaOˆ`O‡`O‡`O†_O…_O„^Oƒ^O‚^O‚]O]O€\O~\N}[N|ZNzYNpTœpU›pUšpU˜oV—oV•nV“mV‘lVkVŒjVˆhVƒfU~cUuj†qh~mfugdkaad\^E@D98?$(2minffm^blV^lMYk(5F(5F/S…TxªTxªTxªTxªTxªTxªTxªTx«Tx«Ty«Ty«Ty«Uy«Uy«†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜHlžHlžHlžHlžHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸ†ªÝ†ªÝ†ªÝ†ªÝ†ªÝ†ªÝ†ªÝ†ªÝ†ªÝ†ªÝHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸHlŸ'K}'K}'K}'K}'K}'K}'K}'K}'K}&K}&K}ChšChšChšChšChšChšChšCgšCgšCgšCgšCgšCgšCg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™&J|Cg™Cg™Cg™Cg™Cg™Bg™Bg™Bg™Bg™Bg™Bg™Bf™Bf™Bf™Bf™Bf™Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜&J|&J|&J|&J|&J|&J|&J|%J|%J|%J|%J|%J|%J|%J|Ae˜Ae˜;GY<68I=:I82Q=4XA6~fZ„j\‰m^p`|]L€`NƒcP†eQˆgS¡j£€l¦‚m©„n•oX˜qYšrZt[¶Œr¸sºs¼t½t¾‘t¨z]©{]ª{]«{\«{\¬{\¬{[Ä“sÄ“rÄ’rÄ’qÄ’pÄ‘p¬yWÄoÃnÃmÃlÂŽlÂŽkÁkˆaOˆaOˆaOˆaOˆaOˆaOˆaOˆ`Oˆ`O‡`O‡`O‡`O†`O†_O…_O…_O„_O„^Oƒ^O‚]O]O€]O\O~\N}[N|ZN¶‰l¶‰lµˆmœqV›qVšqV™pW˜pW–oW¬…nª…n§„n¤‚nŸ€n›~n€eW‘xlŠtk‚piykfodcf_`JDG@>C*,5$1MYktr~tstmolinadmX_lNZkMZkTxªTxªTxªTxªTx«Tx«Tx«Ty«Ty«Ty«Uy«Uy«Uy«†ªÝ†ªÝ†ªÝ†ªÝ†ªÝ†ªÝ†«Ý†«Ý†«Ý†«ÝHlŸHlŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸ†«Ý†«Ý†«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«ÝHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸHmŸ'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}DhšDhšDhšDhšChšChšChšChšChšChšChšCgšCgšCgšCgšCgšCgšCg™Cg™Cg™Cg™Cg™&J}&J}&J}Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Bg™Bg™Bg™Bg™Bg™Bg™Bf™Bf™Bf™Bf™Bf˜Bf˜Bf˜Bf˜Bf˜&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|Af˜Af˜Af˜Af˜;GY;GY;GY1'!D:9N?;N;3]I?zdY€h[†l^‹oasc“ue€bQ„dR‡fT l¢m¦ƒn©…o«‡p®ˆq±Šr³‹sžv] w]¹u»u¼‘u¾‘u¿’v¨{^©{^ª|^«|]«|]«{\¬{\¬{[¬{[¬zZ«zZ«yY«yX«xXÂoÂnÂnÁŽmÁŽm¨uT¨uS§tS§tS§tR¦sR¦sQ…_O…_O…_O„^O„^Oƒ^Oƒ^O‚^O‚]O]O€]O¢rS¡rS¡rS¸‰k·‰l·‰l¶‰m¶‰mµ‰m´‰n³‰n›qWšqX™qX®‡o­‡o«†p¨…p¤ƒp pœp—}o{cXv`Vp]U}nishfhaba\_DAF::B$)4MYkMYkMYkŒtctq\QPPIKFDI;>H/8GMZkTxªTx«Tx«Tx«Ty«Ty«Ty«Uy«Uy«Uy«†«Ý†«Ý†«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«ÝHmŸHmŸHmŸImŸImŸImŸImŸImŸ‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«ÝImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸ'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}DhšDhšDhšDhšDhšDhšDhšDhšDhšChšChšChšChšChšChšChšChšCgšCgš&K}&K}&K}&K}&J}&J}Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Bg™Bg™Bg™Bg™Bg™Bg™Bf™Bf™Bf™Bf™Bf˜Bf˜&J|&J|&J|&J|&J|&J|Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜;HY;HY;GY;GY;GY;GY;,#I=:H82YF?^JA|e[‚j]ˆn`Œqcte”wg—yiš|k~l €n£‚o¤ƒp¦…q­‰s°Šs›u]žv^Ÿw^¡x_£y_¤z_¥z_¦{_¿“w¿“wÀ“vÁ“vÁ“v“u“u“tª{\ª{\ªz[ªzZªyZªyY©xXÁpÀo¨wW¨vV§vV§uU¦uU¦uT¥tT½Œl¼‹k¼‹k¼‹k»‹k»‹kºŠk¢sT¢rT¢rT¡rT¡rT¡rU rU rV·Šn¶ŠnµŠnµŠo´Šo³‰o²‰p±‰p™qY®ˆq¬‡qª†r§…r¤„r ‚rœ€q€gZ{dYvaXp^WiYU`TRVNOb]aEBH<+[NL^SQWNNKFJ?AI2:HTx«Ty«Ty«Ty«Uy«Uy«Uy«Uy«Uy«‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«ÝImŸImŸImŸImŸ‡«Ý‡«Ý‡«Ý‡«Ý‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«ÞImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸ'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}DhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšChš&K}&K}&K}&K}&K}&K}&K}&K}&K}&K}CgšCg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Bg™Bg™Bg™Bg™Bg™Bg™Bf™Bf™Bf™&J|&J|Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜Bf˜;HY;HY;HY;HY;HY;HY;GY3("D::B41RB=YG@wcZ}g\ƒk_‡nbŒrdug}aRdT„gV‡iX‰kY¢ƒq¤„r¥…s§†t‘p^’q^Ÿw` x`¢y`£z`¤za¥{a½“x¾“x¿“w¿“wÀ“wÀ“vÀ“vÀ“vÀ“uÀ’uÀ’tÀ‘sÀ‘sÀ‘r¿r¿q¿q¾p¾Žp¾Žo½Žo¥vW¼n¼Œn»Œn»Œn»ŒnºŒnº‹m¢tV¡sV¡sV¡sV sV sWŸsWŸsXžsXµŠpµŠp´ŠpœsY›sYšrZ˜r[–r\”q\‘p]¦†t£„tŸƒsœs€h\{e[vbYo^XhZV`USXPQNJMECJRS[47A+((MYkMYkMYkMZk(5F(5F(5FOHJT=+YML_SRZQQMGJABI2:H/T†Uy«Uy«Uy«Uy«Uy«Uy«‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬ÞImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸˆ¬Þˆ¬Þ'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}DhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhšDhš'K}'K}'K}'K}'K}'K}&K}&K}&K}&K}&K}&K}&K}&K}CgšCgšCgšCgšCg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Bg™Bg™Bg™Bg™&J|&J|Bf™Bf™Bf™Bf™Bf˜Bf˜Bf˜Bf˜Bf˜;HY;HY;HY;HY;HY;HY>DM>DM;HY89<:+#9&B52I94ZHAxd[}g^k`†nc‹rey_R}bTeVƒgX…iYˆk[Šl\Œn]o^¥‡v§ˆvšvaœwažxa yb¢zb¤{b¤{a¼“x½“x¦|a§|a§|`§{`§{_§{_§{^§z^¾‘u¾‘t¾‘t¾s½s½r½r¥wZ¤wZ¤vY¤vY£vY£uX¢uX¢uX¢uX¹Œp¸Œp¸Œp·Œp·‹p¶‹p¶‹pµ‹qµ‹qtZ›t[šs\™s\˜s]–r]”r^’q^p^o^Šn^‡l^ƒj^h]{f\ub[n^YgZW_UTWPQOKOEEKST]JNY>=?JJIMYkMYk(5F(5F(5F(5F(5F)5G)5GK=4S<*XMLbWVYPPLGJ@AI/T†/T†Uy«Uy«Uy«‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬ÞImŸImŸImŸIm ˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬ÞIm Im Im Im Im Im Im Im ˆ¬Þˆ¬Þˆ¬Þˆ¬Þ'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}Dh›Dh›Dh›Dh›DhšDhšDhšDhš'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}&K}&K}&K}&K}ChšChšCgšCgšCgšCgšCgšCg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™Cg™&J|&J|&J|&J|&J|Bg™Bg™Bg™Bf™Bf™Bf™Bf™Bf˜Bf˜;HY;HY;HY;HY;HY;HYCIR>DMCIR;HYCIR.$0"8&?*G/V=+w[F{g^€kanXMs\Px_S{bU~dWfYƒhZ†j\ˆl]Šm^¢…v§ˆwªŠx­Œy¯y±Žz´zµz·‘z¹’z£{b£{b¤{b¥{b¥{a¥{a¥{`¥{`¥z_¥z_¥z^¼‘u¥y]¤y]¤x]¤x\£w\£w[¢w[¢v[¢v[¡v[¡v[¸r·r¶r¶ŒsµŒs´Œs´Œs²Œt±‹u°‹u˜t^–s_•s_“r_’r`q`p`¡…wž„v›‚v—€u“~twd]sb[l^ZeYW]TUUORLJOYYaRU^JOZ>>@!$)RXaMYk39B-3<-3<(5F)5G)5G)5G)5G)5GFDJK9*^K=YONg\\TLMIFJ:>I0T†0T†ImŸˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬ÞIm Im In In In In In In ˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßIn In In In In ˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ß'K~'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}Di›Di›Dh›'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}&K}ChšChšChšChšChšCgšCgšCgšCgšCgšCg™Cg™Cg™Cg™Cg™Cg™&J}&J}&J}&J}&J|&J|&J|&J|&J|Bg™Bg™Bg™Bg™Bg™Bf™Bf™EM>EMCIR;HY;HYCIRCIR)6&8&@*H0I1!\B0}_JhTKjM8q[Pt]Sw`U{cW~eYg[ƒi\…k^‡m_Ÿ…v¢†w¥ˆx¨Šyª‹z­z¯Ž{±{²{³{´{žzdŸzd zc zc¡zc¸‘y¸‘y¸‘y¸‘x¸x¸x·w·w·w·wŸw_Ÿw_žw_µŽv´Žv³v²v²w±w°Œw¯Œw®Œw­‹w«‹xªŠx¨‰x¦‰x¥ˆx£‡x¡†xž…x›ƒw—v’~vŽ|t‰ys„vrh\YcXX[TUSNRIHOUXaNS^JFE>>A')+"%(4:C(5F(5F3:B3:B-3<-3<)5G)5G)5G)5G)5G)5GE:4O:*TKLbXWcZZPIKDCJIm Im Im Im ˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬ßˆ¬ßˆ¬ßˆ¬ßIn In In In In In Jn Jn Jn Jn Jn ˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ß‰­ß‰­ß‰­ß‰­ß‰­ßJn ‰­ß‰­ß‰­ß‰­ßˆ­ßˆ­ßˆ­ßˆ­ß'K~'K~'K~'K~'K~'K~'K~'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}DhšDhšDhšChšChšChšChšChšChšCgšCgšCgšCgš&K}&K}&J}&J}&J}&J}&J}&J}&J}&J}&J|&J|&J|Cg™Cg™Cg™Bg™Bg™Bg™EMCIRCIRCIR888DGNCJRCIRBBB(0 8&<)G0M5"X@0z^K†bFŠkUlXPp[Rs^TvaVzcX}fZg\i]™u›‚v„wŸ†x¢‡y¥‰z§Šz©‹{ªŒ{•ve–ve—we˜we°|°|±{²{²{²{²{²{±z±z±Žz±Žz±Žz°Žy™vb˜vb—vb–ub•ub•uc”tc“tc’sbscrcqc¢‡y †y…y›„x˜‚x•w’w|uˆytƒvs~sqyooslmVQTOLR[\dQU`KHHAAD:<@68; &Z`i-4<%');AJ4:C4:C4:C-4<)5G)5G)5G)5G)6G)6G@84H8-N?5YPQmccoghd`dIn In In In In In ˆ¬ßˆ¬ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßˆ­ßJn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn ‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ßJn Jn Jn ‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß'K~'K~'K~'K~'K~'K~'K~'K~'K~'K~'K~'K~Ei›Ei›Ei›Ei›'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}DhšDhšDhšDhšDhšDhšChšChšChš&K}&K}&K}&K}&K}&K}&K}&K}&J}&J}&J}&J}&J}&J}&J}&J}&J}Cg™Cg™Cg™Cg™B9;>68;Z`iZ`iMZk)5G4:C-4<4:C4:C-4<;BJ)5G)6G)6G)6G)6G)6GC6-L;.leg„{{ypqhbeVYcJn Jn Jn Jn Jn Jn Jn ‰­ß‰­ß‰­ß‰­ß‰­ß‰­ßJn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn Jn ‰­ß‰­ß‰­ß‰­ß‰­ß‰­ß‰­à‰­à‰­à‰­à‰­à‰­à‰­à‰­à‰­à‰­à‰­à‰­à‰­àJn¡Jn¡Jn¡Jn¡Jn¡Jn¡Jn¡‰­à‰­à‰­à‰­à‰­à'L~'L~'L~'L~'L~'L~'K~'K~'K~Ei›Ei›Ei›Ei›Ei›Ei›Ei›Ei›'K~'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}DhšDhšDhšDhšDhš'K}'K}'K}'K}&K}&K}&K}&K}&K}&K}&K}&K}&K}&K}&K}&J}&J}&J}&J}&J}&J}Cg™Cg™Cg™<535=AG=?D?AD==1(B3)B2&F4'E4)gTGlXJs^OzcTzaPqfethgvjhbVTcWUdXVeYWfZXg[Yh\Zi]Zi][j^\€us€ususts~tt~tt}tt|st{stut~tt|sszrsyqrwpquoqsmpqloXTXTQWPOULLSSJEA<:=99757335./2113)+.'),)+.8:="(3@QJMPV\eT[cNZlNZlZ`iZ`iZ`iZ`iSYbY`h4;C.4=)6GCPaCPaCPaCPaCPaEQbZOGa_emhkŠƒ„nfgeaeJn¡Jn¡Jn¡Jn¡Jn¡Jn¡Š®àŠ®àŠ®àŠ®àŠ®àJo¡Jo¡Jo¡Jo¡Jo¡Jo¡Jo¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Š®àŠ®áŠ®áŠ®áŠ®áŠ®áŠ®áŠ®áKo¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡ƒ§Úƒ§Úƒ§Úƒ¨Úƒ¨Úƒ¨Úƒ¨Úƒ¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨ÚEjœEiœEiœEiœEiœ'L~'L~'K~'K~'K~'K~'K~'K~'K~'K~'K~'K~'K~'K}'K}'K}'K}'K}'K}'K}Di›Di›Di›Di›Dh›Dh›'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}&K}&K}&K}&K}&K}&K}&K}&K}&K}$.>=I[=I[2)>0&A2'C3(I8-^OFbRHfUJjXMq^RwcVzfYfRDfQCdN@zdTqijrjksklrklrklrklqjmpjmpjmojmojmnimmimkhliflscYm`Xg\VbYT^VRE>;A<:>98:77645:873220/0,-/)+.*,/#%( &15;5BSKKKJMP]dlU[dNZlNZlZ`iTZcZaiZaiZ`iZ`iSZbŽ”LS[V]eDPbDPbDPbDPbDPbDPbWMF^^diei®”†…rkeaeJo¡Jo¡Jo¡Jo¡Š®àŠ®àŠ®àŠ®àŠ®àŠ®àŠ®àŠ®àŠ®àKo¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Š¯áŠ¯áŠ¯áŠ¯áKo¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡ƒ¨Úƒ¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Û„¨ÛGk'L~'L~'L~'L~'L~'L~'K~'K~'K~'K~'K~'K~'K~'K~'K~'K~Ei›Ei›Ei›Ei›Ei›Di›Di›Di›Di›Di›'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}&K}&K}&K}&K}&K}%/> ,>=I[=I[ ,> ,>#)2(.7#)2(.7#)2#)2#)2#)2(.7(.7(.767@D>A214$+3#%("$'###""""""&&&888888cB*}\I@!%+%!5*$:/(;0)<1*>3+@4+>1(bUKN@6OA6L=3QB8M?4_RKaTLbUMcVNcVNcVObVOaVOaUO`UO_UO^UO^TO\SOYRNWPNUOMWPKYSOWRN;63953:76755333,/2'),%(+"%(!' "&,KXi04:JMP]_b^emU[dNZlNZlT[cU[dU[dU[d[aj•ž•ž•žˆŽ—–¥W]fDPbDPbDPbDPbDPbDPb‘nSž…w—|m¨‚ƒqjKo¡Ko¡Ko¡Š®àŠ®àŠ®àŠ®áŠ®áŠ®áŠ®áŠ®áŠ®áŠ¯áŠ¯áŠ¯áKo¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¡Ko¢Ko¢Ko¢Ko¢Ko¢Ko¢Ko¢Ko¢Ko¢Ko¢Ko¢Ko¢Ko¢Ko¢Ko¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Û„¨Û„¨Û„¨Û„¨Û„©Û„©Û„©Û„©ÛGkGkGkGkGkGk'L~'L~'L~'L~'K~'K~'K~Ei›Ei›Ei›Ei›Ei›Ei›Ei›Ei›Ei›Ei›Ei›Ei›Di›Di›'K}'K}'K}'K}HlžHlžHlžHlžHlžHlžHlžHlž'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}&K}*2? ->=I[=I[ ,> ,> ,>#)2#)2#)2(.7(.7#)2#)2(.7(.7(.7(.7/28:79G@A<89',4#%(#%(######""""""8888888887'vS:‹jW;) - &3#.$-% .% .& /&!,#,#@70A71XNHXNHWNHWNHZRLYQLYQLXQLWQLWPLUOLSNLQMKOLJMJJ0//.-.,,-&(+"(!' 15;6CT37=MMMKMP^ad_enY`hNZlNZlU\dV\eŠ‘™Š™Š™–Ÿ–Ÿ–ž•ž“œ—¦Œ’›ƒ¡DQbDQbDQbDQbDQbMUc¤ƒ‘ylŸ‡|€oiKo¡Š¯áŠ¯áŠ¯áŠ¯áŠ¯áŠ¯áŠ¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯áKo¢Ko¢Ko¢Ko¢Ko¢Ko¢Ko¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢Kp¢‹¯â‹¯â‹¯â‹¯âLp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢„¨Ú„¨Ú„¨Ú„¨Ú„¨Ú„¨Û„¨Û„¨Û„¨Û„©Û„©Û„©Û„©Û„©Û„©Û…©Û…©Û…©Û…©Û…©Û…©ÛGkžGkžGkžGkžGkžGkžGkžGkžGkž…©Û…©Ü…©Ü…©Ü…©Ü…©Ü…©Ü…ªÜ…ªÜ…ªÜ…ªÜ…ªÜ…ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlž'K}'K}'K}'K}'K}'K}'K}'K}'K}HO\=J[=J[=J[ -> ,> ,>(.7#)2#)2(.7(.7(.7#)2(.7(.7(/7(/7)/8/28114H7,99@.05&,5$&)$$$######"""(((8888888888888884"nO9„gXˆjZE/ (-" - %' %$#" ! !$ 48>7CU:GX JJJLLLKMPagp_enNZlLPV˜Ÿ§Œ’›Œ’›Œ’›‹’š‹‘šŠ‘™‘— –Ÿ–Ÿ–Ÿ“œ“œ—¦„¢„¢DQbDQbDQbDQbNVc…uo‡rjѼ³º«§‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯áKp¢Kp¢Kp¢Kp¢Kp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢‹°â‹°â‹°â‹°âŒ°âŒ°âŒ°âLp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢„¨Û„¨Û„¨Û„©Û„©Û„©Û„©Û„©Û„©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©ÛGkžGkžGkžGlžGlžGlž…©Ü…©Ü…©Ü…ªÜ…ªÜ…ªÜ…ªÜ…ªÜ…ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlž'K}'K}'K}'K}DhšDhšDhšIP\=J[=J[=J[=J[ -> ->(.7#)2#)2(.7(.7(.7#)2(.7(/7(/7)/8)/8)/803966:E?AC>A856,07%'*%')$$$######(((DDDBBB8888888880 cF1w]OcS{`QS;+57'   *      ;?E7CU;HY=I[ JJJMMMKMPacfbhq‘— ƒ¡ƒ¡‘— “œ“œ“œŒ“›Œ’›Œ’›‹‘š‘— ‘— —Ÿ™Ÿ¨”œ“œ“œ„‘¢„‘¢„‘¢„‘¢EQcHScNVd´¨§¿®¨Èµ®¯‘‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯á‹¯â‹¯â‹¯â‹¯â‹¯â‹¯â‹°â‹°â‹°â‹°â‹°â‹°â‹°âLp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Œ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âLp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp¢Lp£Lp£Lp£Lp£Lp£Lp£Lp£Lp£Lp£Lp£Lp£„©Û„©Û„©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Û…©Ü…©Ü…©ÜGlžGlž…ªÜ…ªÜ…ªÜ…ªÜ…ªÜ…ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÝHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlž‡«Ý‡«ÝDhšDhšDhšDhš=J[=J[=J[=J[=J[=J[ ->(/7#)2#)2(.7(.7(.7#*2(/7)/8)/8)/8)/8)08*0903:56:88@KBB=;@348*08&(+'(*%%%$$$(((EEE(((&&&">-"bF3oXMs[Ow]Py^PqbpXMdH5R<,Q;, &%%#'-"'-&3DS_qP\nR_p>J\?K]AG@B::@66:-29'),)'%BBBFFFEEE)))))))))&&& @@@FFFACFZ\_[ajagp„¢„¢„¢ž¥­Ÿ¦®—¦–¥–ž•žŽ•Ž””œ“œ‘— —Ÿ›¡ªš ©™ ¨Ž•Ž”Ž”…‘£…‘£…‘£EQcGRcKTdPWd­¥§¿¯ª‹°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°ãŒ°ãŒ°ãŒ°ãŒ°ãLp£Lp£Lq£Lq£Lq£Lq£Lq£Lq£Lq£Œ±ãŒ±ãŒ±ãŒ±ãŒ±ãŒ±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ãMq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£…©Û…©Û…©Û…©Û…©Û…©Û…©Ü…©Ü…©Ü…©Ü…©Ü…ªÜ…ªÜ…ªÜ…ªÜ…ªÜ…ªÜ†ªÜHlžHlžHlžHlžHlž†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÝ†ªÝ†ªÝ†ªÝ†ªÝ†«Ý†«Ý†«Ý†«Ý†«Ý†«Ý†«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«ÝHlžHlžHlŸHlŸHlŸHlŸHlŸ‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Þ‡«Þ‡«Þ‡«ÞŸ>J\>J\=J[=J[=J[=J[FLU39B#*2(/7)/7)/8$*3$*3$*3)/8)08*09*09*19',5(-5*.6.17338@<=G@BH@BXW]UUXLPWFHKDFHKKKHHH+++%%%%%%$$$###!!!!!!777777777777777777777AAAFFFACFACF\^aeltbhqDQbDQbDQbŸ¥®¡§°¡§°¡§°¡§°—¦–Ÿ”š£”š£“™¢’™¡’˜¡‘˜ ‘— ›¡ª›¡ªš ©•ž™Ÿ¨Ž”ERcERcERcERcHScLUdRXd|njŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°âŒ°ãŒ°ãŒ°ãŒ°ãŒ°ãŒ±ãŒ±ãŒ±ãŒ±ãŒ±ãŒ±ãŒ±ãŒ±ã±ã±ã±ã±ãMq£Mq£Mq£Mq£Mq£Mq£±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ãMq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£Mq£…©Ü…©Ü…©Ü…©Ü…©Ü…ªÜ…ªÜ…ªÜ…ªÜ…ªÜ…ªÜ†ªÜ†ªÜ†ªÜ†ªÜHlžHlžHlžHlžHlžHlžHlžHlžHlž†ªÜ†ªÜ†ªÜ†ªÝ†ªÝ†ªÝ†ªÝ†ªÝ†ªÝ†«Ý†«Ý†«Ý†«Ý†«Ý†«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«ÝHlŸHlŸHlŸHlŸHlŸ‡«Ý‡«Ý‡«Ý‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬ÞŽŸŽŸŽŸŽŸ>J\=J[=J[FLUFLU(/7(/7*08*08%+3$*3$+3$+3*09*09*19&,5&,5'-6).6*/7-18NPURRVXUVc]^f^_[X]\XYTUZLQYKMPFHJ)))(((&&&%%%%%%$$$$$$###!!!!!!!!!777777777BBBEEEACGADGFIL\ckZ`iTZcDQbDQbDQbagpbiqcircir¢©±¢¨±¡¨°¡§°•œ¤•›¤”›£”š£“™¢’™¡’˜¡œ¢«œ¢«›¡ªš¡©•žY`hY_hERcERcERcGSdJTdNVdTYeLp¢Lp¢Œ°ãŒ°ãŒ°ãŒ°ãŒ±ãŒ±ãŒ±ãŒ±ãŒ±ãŒ±ãŒ±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ãMq£Mq£±ã±ã±ã±ä±ä±ä±ä±ä±ä±ä±ä±ä±ä²ä²ä²ä²ä²ä²ä²ä²ä²ä²ä²ä²ä²äMq¤Mq¤Mq¤Mq¤Mq¤Mq¤Mq¤Mq¤Mq¤Mq¤Mq¤…ªÜ…ªÜ…ªÜ…ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlž†ªÝ†ªÝ†«Ý†«Ý†«Ý†«Ý†«Ý†«Ý†«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«ÝHmŸ‡«Þ‡«Þ‡«Þ‡«Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬ÞŽŸŽŸŽŸŽŸŽŸŽŸŽŸFLUFLUFLU)/8+08+08&+3&+3%+4%+4%+4*19+1:&,5'-5'-6(.6FLTHMTINUKOVOQWSTXYWX`[^lbac]_f_\a_aY\aRX_,.1*,.*+-***((('''&&&%%%%%%$$$$$$$$$###!!!!!!!!!!!!!!!%%%%%%%%%%%%"""""""""KKKJJJFFFGIL]_b^dm\bkV]eDQbEQcEQcEQccirdjsdksektdjsdjscir£©²¢¨±¢¨±–œ¥•œ¤•›¤”›£”š£“™¢’™¡£¬œ¢«›¢ª[ajZ`iOU^ERcERcFRdFRdITdLUdPWeVZeLp£Lq£Lq£Lq£±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ã±ä±ä±ä±ä±ä±ä²ä²ä²äMq£²ä²ä²ä²ä²ä²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äMr¤Mr¤Mr¤Mr¤Mr¤Mr¤Mr¤Mr¤Mr¤Mr¤†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlž†«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Þ‡«Þ‡«Þ‡«Þ‡«ÞHmŸHmŸHmŸ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬ÞŽŸŽŸŽŸŽŸ‚Ž ‚Ž ‚Ž ‚Ž ”›£Š™ŠŽ•-18,18',3',4',4&,4%,4+1:,2:'-5DJSEKSEKTFLTFLUHMUINVKOWLPWQSYTUZWWZpjje^`offb\_h`]eaaCCG8;A27?-/2+-/.+)******)))((('''&&&&&&%%%%%%$$$$$$$$$$$$$$$$$$######???EEEEEEEEE((((((###&&&%%%HJMHJMHJMHJM_en]dlZ`i_enEQcEQcEQcEQcbhqektflufluflufluektektdksdjscjr£©²¢©±¢¨±–œ¥•œ¤•›¤”›£”š£“™¢£¬\ckQW`[ajZaiOU^FRdFRdFRdHSdKUdNVeRXeX\fLq£Mq£Mq£Mq£Mq£±ã±ã±ã±ã±ã±ä±ä±ä±ä±ä²ä²ä²ä²ä²ä²ä²ä²äŽ²äŽ²äŽ²äŽ²äŽ²äMr¤Mr¤Mr¤Mr¤Mr¤Ž²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²åŽ²åŽ²åŽ²åŽ²åŽ²åŽ²åŽ²åŽ²åNr¤Nr¤Nr¤Nr¤Nr¤Nr¤Nr¤Nr¤†ªÜ†ªÜ†ªÜ†ªÜ†ªÜ†ªÜHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlž‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡¬Þ‡¬Þ‡¬ÞHmŸHmŸHmŸHmŸImŸImŸImŸˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þ‚Ž ‚Ž ‚Ž ‚Ž ‚Ž ‚Ž ‚Ž ‚Ž ”›£Š‘™‹•‹•PT[KOVJOV(-4(-4'-5'-5JOXEKSEKSEKTFLTFLTGMUGMUHNVIOWKPWLQXMRYPTZTV[\]a_^asljd^azporjkE@CLEBIEFEDG29A28A17@135,.1+-0+,/./1..0'),)))++++++++++++***FFFFFFACFACFEEEACFACFŠŒJLOJLOKQZ_en]clY_hU[dEQcEQcEQcEQcEQcagp[aj\bk\bkgnvgnvgmvgmvfluflueltektdksdjscjrcir¢©±—¦–œ¥•œ¤•›¤TZcSYbRYaRXaQW`[bj[ajZ`iFSdFSdGSdJTdLVePXeTZfZ]fMq£Mq£Mq£Mq£Mq£Mq£Mq£²ä²ä²ä²ä²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äŽ²äNr¤Nr¤Nr¤Nr¤Nr¤Nr¤Nr¤Nr¤Nr¤Ž²åŽ²åŽ²åŽ²åŽ³åŽ³åŽ³åŽ³åŽ³åŽ³åŽ³åŽ³åŽ³åŽ³åŽ³åŽ³åŽ³åŽ³åŽ³åŽ³å³å³å³å³å³å³å³åNr¤Nr¤Nr¤Nr¤Nr¤³å³å†ªÜ†ªÜ†ªÝHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlžHlŸHlŸHlŸHlŸHlŸHlŸ‡«Ý‡«Ý‡«Ý‡«Ý‡«Ý‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡«Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬Þ‡¬ÞImŸImŸImŸImŸImŸImŸImŸImŸImŸImŸˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬Þˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ¬ßˆ­ß‚Ž ‚Ž ‚Ž ‚Ž ‚ ‚ ‚ ‚ ‚ …Œ”’•šŒ•‘”›LPVLPWKPW‹—‹—‹˜•‹‘™FLTFLTFLUGMUGMUHMVHNVINWIOWKPXLQYMRYNSZTX`X[a[]b]^c__ccacib`JDGi__aYYPJLD@C=;AKEDTQR@?A>>A;/5>.4=-4'IRB console') -top.protocol(:WM_DELETE_WINDOW){ Tk.exit } - -case (Tk.windowingsystem) -when 'win32' - fnt = ['MS Gothic', '-12'] -else - fnt = ['courier', '-12'] -end - -console = TkTextIO.new(top, :mode=>:console, - :width=>80).pack(:side=>:left, - :expand=>true, :fill=>:both) -console.yscrollbar(TkScrollbar.new(top, :width=>10).pack(:before=>console, - :side=>:right, - :expand=>false, - :fill=>:y)) - -# save original I/O -out = $stdout -err = $stderr - -irb_thread = nil -ev_loop = Thread.new{ - begin - Tk.mainloop - ensure - $stdout = out - $stderr = err - irb_thread.kill if irb_thread - end -} - -# window position control -root = Tk.root - -r_x = root.winfo_rootx -r_y = root.winfo_rooty -r_w = root.winfo_width - -t_x = top.winfo_rootx -t_y = top.winfo_rooty -t_w = top.winfo_width - -delta = 10 - -ratio = 0.8 -s_w = (ratio * root.winfo_screenwidth).to_i - -if r_x < t_x - r_x, t_x = t_x, r_x -end -if t_x + t_w + r_w + delta < s_w - r_x = t_x + t_w + delta -elsif t_w + r_w + delta < s_w - r_x = s_w - r_w - t_x = r_x - t_w -else - r_x = s_w - r_w - t_x = 0 -end - -root.geometry("+#{r_x}+#{r_y}") -top.geometry("+#{t_x}+#{t_y}") - -root.raise -console.focus - -# I/O setup -$stdin = console -$stdout = console -$stderr = console - -# dummy for rubyw.exe on Windows -def STDIN.tty? - true -end - -# IRB setup -IRB.init_config(nil) -IRB.conf[:USE_READLINE] = false -IRB.init_error -irb = IRB::Irb.new -IRB.conf[:MAIN_CONTEXT] = irb.context - -class IRB::StdioInputMethod - def gets - prompt = "\n" << @prompt - $stdin.instance_eval{ - flush - @prompt = prompt - _set_console_line - @prompt = nil - _see_pos - } - - @line[@line_no += 1] = $stdin.gets - end -end - -# IRB start -$stdout.print("*** IRB console on Ruby/Tk (#{release}) ") -irb_thread = Thread.new{ - catch(:IRB_EXIT){ - loop { - begin - irb.eval_input - rescue Exception - end - } - } -} - -console.bind('Control-c'){ - console.insert('end', "^C\n") - irb_thread.raise RubyLex::TerminateLineInput -} - -irb_thread.join - -# exit -ev_loop.kill -Tk.exit diff --git a/ext/tk/sample/iso2022-kr.txt b/ext/tk/sample/iso2022-kr.txt deleted file mode 100644 index 2e3fe6ea2a..0000000000 --- a/ext/tk/sample/iso2022-kr.txt +++ /dev/null @@ -1,2 +0,0 @@ -Sample text: -$)C Hangul (GQ1[) >H3gGO<H3gGO=J4O1n diff --git a/ext/tk/sample/menubar1.rb b/ext/tk/sample/menubar1.rb deleted file mode 100644 index a468fb6ea4..0000000000 --- a/ext/tk/sample/menubar1.rb +++ /dev/null @@ -1,52 +0,0 @@ -# frozen_string_literal: false -# -# menubar sample 1 : use frame and menubuttons -# - -require 'tk' - -radio_var = TkVariable.new('y') - -menu_spec = [ - [['File', 0], - {:label=>'Open', :command=>proc{puts('Open clicked')}, :underline=>0}, - '---', - ['Check_A', TkVariable.new(true), 6], - {:type=>'checkbutton', :label=>'Check_B', - :variable=>TkVariable.new, :underline=>6}, - '---', - ['Radio_X', [radio_var, 'x'], 6, '', {:foreground=>'black'}], - ['Radio_Y', [radio_var, 'y'], 6], - ['Radio_Z', [radio_var, 'z'], 6], - '---', - ['cascade', [ - ['sss', proc{p 'sss'}, 0], - ['ttt', proc{p 'ttt'}, 0], - ['uuu', proc{p 'uuu'}, 0], - ['vvv', proc{p 'vvv'}, 0], - ], - 0, '', - {:font=>'Courier 16 italic', - :menu_config=>{:font=>'Times -18 bold', :foreground=>'black'}}], - '---', - ['Quit', proc{exit}, 0]], - - [['Edit', 0], - ['Cut', proc{puts('Cut clicked')}, 2], - ['Copy', proc{puts('Copy clicked')}, 0], - ['Paste', proc{puts('Paste clicked')}, 0]], - - [['Help', 0, {:menu_name=>'help'}], - ['About This', proc{puts('Ruby/Tk menubar sample 1')}, 6]] -] - -menubar = TkMenubar.new(nil, menu_spec, - 'tearoff'=>false, - 'foreground'=>'grey40', - 'activeforeground'=>'red', - 'font'=>'Helvetica 12 bold') -menubar.pack('side'=>'top', 'fill'=>'x') - -TkText.new(:wrap=>'word').pack.insert('1.0', 'Please read the sample source, and check how to override default configure options of menu entries on a menu_spec. Maybe, on windows, this menubar does not work properly about keyboard shortcuts. Then, please use "menu" option of root/toplevel widget (see sample/menubar2.rb).') - -Tk.mainloop diff --git a/ext/tk/sample/menubar2.rb b/ext/tk/sample/menubar2.rb deleted file mode 100644 index e10a282f93..0000000000 --- a/ext/tk/sample/menubar2.rb +++ /dev/null @@ -1,57 +0,0 @@ -# frozen_string_literal: false -# -# menubar sample 2 : use 'menu' option of root/toplevel widget -# - -require 'tk' - -radio_var = TkVariable.new('y') - -menu_spec = [ - [['File', 0], - {:label=>'Open', :command=>proc{puts('Open clicked')}, :underline=>0}, - '---', - ['Check_A', TkVariable.new(true), 6], - {:type=>'checkbutton', :label=>'Check_B', - :variable=>TkVariable.new, :underline=>6}, - '---', - ['Radio_X', [radio_var, 'x'], 6, '', {:foreground=>'black'}], - ['Radio_Y', [radio_var, 'y'], 6], - ['Radio_Z', [radio_var, 'z'], 6], - '---', - ['cascade', [ - ['sss', proc{p 'sss'}, 0], - ['ttt', proc{p 'ttt'}, 0], - ['uuu', proc{p 'uuu'}, 0], - ['vvv', proc{p 'vvv'}, 0], - ], - 0, '', - {:font=>'Courier 16 italic', - :menu_config=>{:font=>'Times -18 bold', :foreground=>'black'}}], - '---', - ['Quit', proc{exit}, 0]], - - [['Edit', 0], - ['Cut', proc{puts('Cut clicked')}, 2], - ['Copy', proc{puts('Copy clicked')}, 0], - ['Paste', proc{puts('Paste clicked')}, 0]], - - [['Help', 0, {:menu_name=>'help'}], - ['About This', proc{puts('Ruby/Tk menubar sample 2')}, 6]] -] - -mbar = Tk.root.add_menubar(menu_spec, - # followings are default configure options - 'tearoff'=>'false', - 'foreground'=>'grey40', - 'activeforeground'=>'red', - 'font'=>'Helvetica 12 bold') -# This (default configure options) is NOT same the following. -# -# mbar = Tk.root.add_menubar(menu_spec) -# mbar.configure('foreground'=>'grey40', 'activeforeground'=>'red', -# 'font'=>'Helvetica 12 bold') - -TkText.new(:wrap=>'word').pack.insert('1.0', 'Please read the sample source, and check how to override default configure options of menu entries on a menu_spec.') - -Tk.mainloop diff --git a/ext/tk/sample/menubar3.rb b/ext/tk/sample/menubar3.rb deleted file mode 100644 index 740f9d3b5e..0000000000 --- a/ext/tk/sample/menubar3.rb +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: false -# -# menubar sample 3 : vertical layout menubar; use frame and menubuttons -# - -require 'tk' - -radio_var = TkVariable.new('y') - -menu_spec = [ - [['&File', true], # when underline option is true, '&' index is the position - {:label=>'Open', :command=>proc{puts('Open clicked')}, :underline=>0}, - '---', - ['Check_A', TkVariable.new(true), 6], - {:type=>'checkbutton', :label=>'Check_B', - :variable=>TkVariable.new, :underline=>6}, - '---', - ['Radio_X', [radio_var, 'x'], /[XYZ]/, '', {:foreground=>'black'}], - ['Radio_Y', [radio_var, 'y'], /[XYZ]/], - ['Radio_Z', [radio_var, 'z'], /[XYZ]/], # use Regexp for underline position - '---', - ['cascade', [ - ['sss', proc{p 'sss'}, 0], - ['ttt', proc{p 'ttt'}, 0], - ['uuu', proc{p 'uuu'}, 0], - ['vvv', proc{p 'vvv'}, 0], - ], - 0, '', - {:font=>'Courier 16 italic', - :menu_config=>{:font=>'Times -18 bold', :foreground=>'black'}}], - '---', - ['Quit', proc{exit}, 0]], - - [['Edit', 0], - ['Cut', proc{puts('Cut clicked')}, 2], - ['Copy', proc{puts('Copy clicked')}, 0], - ['Paste', proc{puts('Paste clicked')}, 0]], - - [['Help', 0, {:menu_name=>'help'}], - ['About This', proc{puts('Ruby/Tk menubar sample 3')}, "This"]] - # use string index for underline position -] - -layout_proc = 'vertical' -# The following procedure is same to 'layout_proc'=>'vertical' -=begin -layout_proc = proc{|parent, mbtn| - mbtn.direction :right - mbtn.pack(:side=>:top, :fill=>:x) - - menu = mbtn.menu - cmd = proc{|m, dir| - Tk::Menu::TkInternalFunction.next_menu(m, dir) rescue nil - # ignore error when the internal function doesn't exist - } - menu.bind('Tab', cmd, :widget, 'forward') - menu.bind('Alt-Tab', cmd, :widget, 'backward') -} -=end - -menubar = TkMenubar.new(nil, menu_spec, - 'layout_proc'=>layout_proc, - 'tearoff'=>false, - 'foreground'=>'grey40', - 'activeforeground'=>'red', - 'font'=>'Helvetica 12 bold') -menubar.pack('side'=>'left', 'fill'=>'y') - -TkText.new(:wrap=>'word').pack.insert('1.0', 'This sample script generates "Menu Sidebar". -If "::tk::MenuNextMenuon" function is available your Tcl/Tk library, you will be able to move to the next menu by Tab key on the posted menu, or the previous menu by Alt + Tab key. -Please read the sample source, and check how to override default configure options of menu entries on a menu_spec. Maybe, on windows, this menubar does not work properly about keyboard shortcuts. Then, please use "menu" option of root/toplevel widget (see sample/menubar3.rb).') - -Tk.mainloop diff --git a/ext/tk/sample/msgs_rb/README b/ext/tk/sample/msgs_rb/README deleted file mode 100644 index 781dda93ef..0000000000 --- a/ext/tk/sample/msgs_rb/README +++ /dev/null @@ -1,3 +0,0 @@ -Message catalogs in this directory depend on Tcl/Tk's message catalogs. -Texts of each locale are copied from Tcl/Tk8.5a1 widget demos. -Please refer to '../msgs_tk/README'. diff --git a/ext/tk/sample/msgs_rb/cs.msg b/ext/tk/sample/msgs_rb/cs.msg deleted file mode 100644 index 199f2a73bd..0000000000 --- a/ext/tk/sample/msgs_rb/cs.msg +++ /dev/null @@ -1,84 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - cs "Application Error", "Chyba programu" - cs "Blue", "Modr\341" - cs "Color", "Barva" - cs "Delete", "Smazat" - cs "Error", "Chyba" - cs "Exit", "Konec" - cs "Green", "Zelen\341" - cs "Red", "\\u010cerven\341" - cs "blue", "modr\341" - cs "green", "zelen\341" - cs "red", "\\u010derven\341" -} - -TkMsgCatalog.new('::tk') { - cs "&Abort", "&P\\u0159eru\\u0161it" - cs "About...", "O programu..." - cs "All Files", "V\\u0161echny soubory" - cs "Application Error", "Chyba programu" - cs "&Blue", "&Modr\341" - cs "&Cancel", "&Zru\\u0161it" - cs "Cannot change to the directory \"%1\$s\".\nPermission denied.", "Nemohu zm\\u011bnit atku\341ln\355 adres\341\\u0159 na \"%1\$s\".\nP\\u0159\355stup odm\355tnut." - cs "Choose Directory", "V\375b\\u011br adres\341\\u0159e" - cs "Clear", "Smazat" - cs "Color", "Barva" - cs "Console", "Konzole" - cs "Copy", "Kop\355rovat" - cs "Cut", "Vy\\u0159\355znout" - cs "Delete", "Smazat" - cs "Details >>", "Detaily >>" - cs "Directory \"%1\$s\" does not exist.", "Adres\341\\u0159 \"%1\$s\" neexistuje." - cs "&Directory:", "&Adres\341\\u0159:" - cs "Error: %1\$s", "Chyba: %1\$s" - cs "Exit", "Konec" - cs "File \"%1\$s\" already exists.\n\n", "Soubor \"%1\$s\" ji\\u017e existuje.\n\n" - cs "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "Soubor \"%1\$s\" ji\\u017e existuje.\nChcete jej p\\u0159epsat?" - cs "File \"%1\$s\" does not exist.", "Soubor \"%1\$s\" neexistuje." - cs "File &name:", "&Jm\351no souboru:" - cs "File &names:", "&Jm\351na soubor\\u016f:" - cs "Files of &type:", "&Typy soubor\\u016f:" - cs "Fi&les:", "Sou&bory:" - cs "&Filter", "&Filtr" - cs "Fil&ter:", "Fil&tr:" - cs "&Green", "Ze&len\341" - cs "Hi" - cs "Hide Console", "Skr\375t konsolu" - cs "&Ignore", "&Ignorovat" - cs "Invalid file name \"%1\$s\".", "\\u0160patn\351 jm\351no souboru \"%1\$s\"." - cs "Log Files", "Log soubory" - cs "&No", "&Ne" - cs "&OK" - cs "Ok" - cs "Open", "Otev\\u0159\355t" - cs "&Open", "&Otev\\u0159\355t" - cs "Open Multiple Files", "Otev\\u0159\355t v\355ce soubor\\u016f" - cs "Paste", "Vlo\\u017eit" - cs "Quit", "Skon\\u010dit" - cs "&Red", " \\u010ce&rven\341" - cs "Replace existing file?", "Nahradit st\341vaj\355c\355 soubor?" - cs "&Retry", "Z&novu" - cs "&Save", "&Ulo\\u017eit" - cs "Save As", "Ulo\\u017eit jako" - cs "Save To Log", "Ulo\\u017eit do logu" - cs "Select Log File", "Vybrat log soubor" - cs "Select a file to source", "Vybrat soubor k nahr\341n\355" - cs "&Selection:", "&V\375b\\u011br:" - cs "Skip Messages", "P\\u0159esko\\u010dit zpr\341vy" - cs "Source...", "Nahr\341t..." - cs "Tcl Scripts", "Tcl skripty" - cs "Tcl for Windows", "Tcl pro Windows" - cs "Text Files", "Textov\351 soubory" - cs "&Yes", "&Ano" - cs "abort", "p\\u0159eru\\u0161it" - cs "blue", "modr\341" - cs "cancel", "zru\\u0161it" - cs "extension", "p\\u0159\355pona" - cs "extensions", "p\\u0159\355pony" - cs "green", "zelen\341" - cs "ignore", "ignorovat" - cs "ok" - cs "red", "\\u010derven\341" - cs "retry", "znovu" - cs "yes", "ano" -} diff --git a/ext/tk/sample/msgs_rb/de.msg b/ext/tk/sample/msgs_rb/de.msg deleted file mode 100644 index 283874df42..0000000000 --- a/ext/tk/sample/msgs_rb/de.msg +++ /dev/null @@ -1,88 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - de "Application Error", "Applikationsfehler" - de "Blue", "Blau" - de "Color", "Farbe" - de "Delete", "L\\u00f6schen" - de "Error", "Fehler" - de "Exit", "Ende" - de "Green", "Gr\\u00fcn" - de "Red", "Rot" - de "blue", "blau" - de "green", "gr\\u00fcn" - de "red", "rot" -} - -TkMsgCatalog.new('::tk') { - de "&Abort", "&Abbruch" - de "&About...", "&\\u00dcber..." - de "All Files", "Alle Dateien" - de "Application Error", "Applikationsfehler" - de "&Blue", "&Blau" - de "&Cancel", "&Abbruch" - de "Cannot change to the directory \"%1\$s\".\nPermission denied.", "Kann nicht in das Verzeichnis \"%1\$s\" wechseln.\nKeine Rechte vorhanden." - de "Choose Directory", "W\\u00e4hle Verzeichnis" - de "&Clear", "&R\\u00fccksetzen" - de "&Clear Console", "&Konsole l\\u00f6schen" - de "Color", "Farbe" - de "Console", "Konsole" - de "&Copy", "&Kopieren" - de "Cu&t", "Aus&schneiden" - de "&Delete", "&L\\u00f6schen" - de "Details >>" - de "Directory \"%1\$s\" does not exist.", "Das Verzeichnis \"%1\$s\" existiert nicht." - de "&Directory:", "&Verzeichnis:" - de "&Edit", "&Bearbieten" - de "Error: %1\$s", "Fehler: %1\$s" - de "E&xit", "&Ende" - de "&File", "&Datei" - de "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "Die Datei \"%1\$s\" ist bereits vorhanden.\nWollen sie diese Datei \\u00fcberschreiben ?" - de "File \"%1\$s\" already exists.\n\n", "Die Datei \"%1\$s\" ist bereits vorhanden.\n\n" - de "File \"%1\$s\" does not exist.", "Die Datei \"%1\$s\" existiert nicht." - de "File &name:", "Datei&name:" - de "File &names:", "Datei&namen:" - de "Files of &type:", "Dateien des &Typs:" - de "Fi&les:", "Dat&eien:" - de "&Filter" - de "Fil&ter:" - de "&Green", "&Gr\\u00fcn" - de "&Help", "&Hilfe" - de "Hi", "Hallo" - de "&Hide Console", "&Konsole unsichtbar machen" - de "&Ignore", "&Ignorieren" - de "Invalid file name \"%1\$s\".", "Ung\\u00fcltiger Dateiname \"%1\$s\"." - de "Log Files", "Protokolldatei" - de "&No", "&Nein" - de "OK" - de "Ok" - de "Open", "\\u00d6ffnen" - de "&Open", "\\u00d6&ffnen" - de "Open Multiple Files" - de "P&aste", "E&inf\\u00fcgen" - de "&Quit", "&Beenden" - de "&Red", "&Rot" - de "Replace existing file?", "Existierende Datei ersetzen?" - de "&Retry", "&Wiederholen" - de "&Save", "&Speichern" - de "Save As", "Speichern unter" - de "Save To Log", "In Protokoll speichern" - de "Select Log File", "Protokolldatei ausw\\u00e4hlen" - de "Select a file to source", "Auszuf\\u00fchrende Datei ausw\\u00e4hlen" - de "&Selection:", "Auswah&l:" - de "Skip Messages", "Weitere Nachrichten \\u00fcberspringen" - de "&Source...", "&Ausf\\u00fchren..." - de "Tcl Scripts", "Tcl-Skripte" - de "Tcl for Windows", "Tcl f\\u00fcr Windows" - de "Text Files", "Textdateien" - de "&Yes", "&Ja" - de "abort", "abbrechen" - de "blue", "blau" - de "cancel", "abbrechen" - de "extension", "Erweiterung" - de "extensions", "Erweiterungen" - de "green", "gr\\u00fcn" - de "ignore", "ignorieren" - de "ok" - de "red", "rot" - de "retry", "wiederholen" - de "yes", "ja" -} diff --git a/ext/tk/sample/msgs_rb/el.msg b/ext/tk/sample/msgs_rb/el.msg deleted file mode 100644 index f314ae03eb..0000000000 --- a/ext/tk/sample/msgs_rb/el.msg +++ /dev/null @@ -1,98 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - el 'Application Error', '\u039b\u03ac\u03b8\u03bf\u03c2 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2' - el 'Blue', '\u039c\u03c0\u03bb\u03b5' - el 'Color', '\u03a7\u03c1\u03ce\u03bc\u03b1' - el 'Delete', '\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae' - el 'Error', '\u039b\u03ac\u03b8\u03bf\u03c2' - el 'Exit', '\u0388\u03be\u03bf\u03b4\u03bf\u03c2' - el 'Green', '\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf' - el 'Red', '\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf' - el 'blue', '\u03bc\u03c0\u03bb\u03b5' - el 'green', '\u03c0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf' - el 'red', '\u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf' -} - -TkMsgCatalog.new('::tk') { - el '&Abort', '\u03a4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2' - el 'About...', '\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac...' - el 'All Files', '\u038c\u03bb\u03b1 \u03c4\u03b1 \u0391\u03c1\u03c7\u03b5\u03af\u03b1' - el 'Application Error', '\u039b\u03ac\u03b8\u03bf\u03c2 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2' - el '&Blue', '\u039c\u03c0\u03bb\u03b5' - el '&Cancel', '\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7' - el 'Cannot change to the directory "%1\$s".' "\n" 'Permission denied.', \ - '\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03ba\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5 \u03c3\u03b5 "%1\$s".' \ - "\n" \ - '\u0397 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03b4\u03b5\u03bd \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9.' - el 'Choose Directory', '\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u039a\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5' - el 'Clear', '\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2' - el 'Color', '\u03a7\u03c1\u03ce\u03bc\u03b1' - el 'Console', '\u039a\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1' - el 'Copy', '\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae' - el 'Cut', '\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae' - el 'Delete', '\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae' - el 'Details >>', '\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2 >>' - el 'Directory "%1\$s", does not exist.', \ - '\u039f \u03ba\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2 \'%1\$s\' \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.' - el '&Directory:', '&\u039a\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2:' - el 'Error: %1\$s', '\u039b\u03ac\u03b8\u03bf\u03c2: %1\$s' - el 'Exit', '\u0388\u03be\u03bf\u03b4\u03bf\u03c2' - el 'File "%1\$s" already exists.' "\n" 'Do you want to overwrite it?', \ - '\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf "%1\$s" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.' \ - "\n" \ - '\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03ba\u03b1\u03bb\u03c5\u03c6\u03b8\u03b5\u03af;' - el 'File "%1\$s" already exists.' "\n\n", \ - '\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf "%1\$s" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.' "\n\n" - el 'File "%1\$s" does not exist.', \ - '\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf "%1\$s" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.' - el 'File &name:', '\u038c&\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5:' - el 'File &names:', '\u038c&\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd:' - el 'Files of &type:', '\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5 &\u03c4\u03cd\u03c0\u03bf\u03c5:' - el 'Fi&les:', '\u0391\u03c1\u03c7\u03b5\u03af\u03b1:' - el '&Filter', '\u03a6\u03af\u03bb\u03c4\u03c1\u03bf' - el 'Fil&ter:', '\u03a6\u03af\u03bb\u03c4\u03c1\u03bf:' - el '&Green', '\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf' - el 'Hi', '\u0393\u03b5\u03b9\u03b1' - el 'Hide Console', '\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03ba\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1\u03c2' - el '&Ignore', '\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7' - el 'Invalid file name "%1\$s".', \ - '\u0386\u03ba\u03c5\u03c1\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 "%1\$s".' - el 'Log Files', '\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2' - el '&No', '\u038c\u03c7\u03b9' - el '&OK', '\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9' - el '&Ok', '\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9' - el 'Open', '\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1' - el '&Open', '\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1' - el 'Open Multiple Files', \ - '\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c0\u03bf\u03bb\u03bb\u03b1\u03c0\u03bb\u03ce\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd' - el 'Paste', '\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7' - el 'Quit', '\u0388\u03be\u03bf\u03b4\u03bf\u03c2' - el '&Red', '\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf' - el 'Replace existing file?', \ - '\u0395\u03c0\u03b9\u03ba\u03ac\u03bb\u03c5\u03c8\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03bd\u03c4\u03bf\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5;' - el '&Retry', '\u03a0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac' - el '&Save', '\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7' - el 'Save As', '\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03b1\u03bd' - el 'Save To Log', '\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2' - el 'Select Log File', '\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2' - el 'Select a file to source', \ - '\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b3\u03b9\u03b1 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7' - el '&Selection:', '\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae:' - el 'Skip Messages', '\u0391\u03c0\u03bf\u03c6\u03c5\u03b3\u03ae \u03bc\u03c5\u03bd\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd' - el 'Source...', '\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7...' - el 'Tcl Scripts', 'Tcl Scripts' - el 'Tcl for Windows', 'Tcl \u03b3\u03b9\u03b1 Windows' - el 'Text Files', '\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5' - el '&Yes', '\u039d\u03b1\u03b9' - el 'abort', '\u03c4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2' - el 'blue', '\u03bc\u03c0\u03bb\u03b5' - el 'cancel', '\u03b1\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7' - el 'extension', '\u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7' - el 'extensions', '\u03b5\u03c0\u03b5\u03ba\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2' - el 'green', '\u03c0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf' - el 'ignore', '\u03b1\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7' - el 'ok', '\u03b5\u03bd\u03c4\u03ac\u03be\u03b5\u03b9' - el 'red', '\u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf' - el 'retry', '\u03c0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac' - el 'yes', '\u03bd\u03b1\u03b9' -} - diff --git a/ext/tk/sample/msgs_rb/en.msg b/ext/tk/sample/msgs_rb/en.msg deleted file mode 100644 index 9b70239511..0000000000 --- a/ext/tk/sample/msgs_rb/en.msg +++ /dev/null @@ -1,83 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - en "Application Error" - en "Blue" - en "Color" - en "Delete" - en "Error" - en "Green" - en "Red" - en "blue" - en "green" - en "red" -} - -TkMsgCatalog.new('::tk') { - en "&Abort" - en "About..." - en "All Files" - en "Application Error" - en "&Blue" - en "&Cancel" - en "Cannot change to the directory \"%1\$s\".\nPermission denied." - en "Choose Directory" - en "Clear" - en "Color" - en "Console" - en "Copy" - en "Cut" - en "Delete" - en "Details >>" - en "Directory \"%1\$s\" does not exist." - en "&Directory:" - en "Error: %1\$s" - en "Exit" - en "File \"%1\$s\" already exists.\nDo you want to overwrite it?" - en "File \"%1\$s\" already exists.\n\n" - en "File \"%1\$s\" does not exist." - en "File &name:" - en "File &names:" - en "Files of &type:" - en "Fi&les:" - en "&Filter" - en "Fil&ter:" - en "&Green" - en "Hi" - en "Hide Console" - en "&Ignore" - en "Invalid file name \"%1\$s\"." - en "Log Files" - en "&No" - en "&OK" - en "Ok" - en "Open" - en "&Open" - en "Open Multiple Files" - en "Paste" - en "Quit" - en "&Red" - en "Replace existing file?" - en "&Retry" - en "&Save" - en "Save As" - en "Save To Log" - en "Select Log File" - en "Select a file to source" - en "&Selection:" - en "Skip Messages" - en "Source..." - en "Tcl Scripts" - en "Tcl for Windows" - en "Text Files" - en "&Yes" - en "abort" - en "blue" - en "cancel" - en "extension" - en "extensions" - en "green" - en "ignore" - en "ok" - en "red" - en "retry" - en "yes" -} diff --git a/ext/tk/sample/msgs_rb/en_gb.msg b/ext/tk/sample/msgs_rb/en_gb.msg deleted file mode 100644 index 97c58959b1..0000000000 --- a/ext/tk/sample/msgs_rb/en_gb.msg +++ /dev/null @@ -1,7 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - en_gb 'Color', 'Colour' -} - -TkMsgCatalog.new('::tk') { - en_gb 'Color', 'Colour' -} diff --git a/ext/tk/sample/msgs_rb/eo.msg b/ext/tk/sample/msgs_rb/eo.msg deleted file mode 100644 index 1630df5e83..0000000000 --- a/ext/tk/sample/msgs_rb/eo.msg +++ /dev/null @@ -1,87 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - eo 'Application Error', 'Aplikoerraro' - eo 'Blue', 'Blua' - eo 'Color', 'Farbo' - eo 'Delete', 'Forprenu' - eo 'Error', 'Eraro' - eo 'Exit', 'Eliru' - eo 'Green', 'Verda' - eo 'Red', 'Rosa' - eo 'blue', 'blua' - eo 'green', 'verda' - eo 'red', 'ru\u011da' -} - -TkMsgCatalog.new('::tk') { - eo '&Abort', '&\u0108esigo' - eo '&About...', 'Pri...' - eo 'All Files', '\u0108ioj dosieroj' - eo 'Application Error', 'Aplikoerraro' - eo '&Blue', '&Blua' - eo '&Cancel', '&Rezignu' - eo 'Cannot change to the directory "%1\$s".' "\n" 'Permission denied.', 'Neeble \u0109angi al dosierulon "%1\$s".' "\n" 'Vi ne rajtas tion.' - eo 'Choose Directory', 'Elektu Dosierujo' - eo '&Clear', '&Klaru' - eo '&Clear Console', '&Klaru konzolon' - eo 'Color', 'Farbo' - eo 'Console', 'Konzolo' - eo '&Copy', '&Kopiu' - eo 'Cu&t', '&Enpo\u015digu' - eo '&Delete', '&Forprenu' - eo 'Details >>', 'Detaloj >>' - eo 'Directory "%1\$s" does not exist.', 'La dosierujo "%1\$s" ne ekzistas.' - eo '&Directory:', '&Dosierujo:' - eo '&Edit', '&Redaktu' - eo 'Error: %1\$s', 'Eraro: %1\$s' - eo 'E&xit', '&Eliru' - eo '&File', '&Dosiero' - eo 'File "%1\$s" already exists.' "\n" 'Do you want to overwrite it?', 'La dosiero "%1\$s" jam ekzistas.' "\n" '\u0108u vi volas anstata\u00fbigi la dosieron?' - eo 'File "%1\$s" already exists.' "\n\n", 'La dosiero "%1\$s" jam egzistas.' "\n\n" - eo 'File "%1\$s" does not exist.', 'La dosierp "%1\$s" ne estas.' - eo 'File &name:', 'Dosiero&nomo:' - eo 'File &names:', 'Dosiero&nomoj:' - eo 'Files of &type:', 'Dosieroj de &Typo:' - eo 'Fi&les:', 'Do&sieroj:' - eo '&Filter', '&Filtrilo' - eo 'Fil&ter:', '&Filtrilo:' - eo '&Green', '&Verda' - eo '&Help', '&Helpu' - eo 'Hi', 'Saluton' - eo '&Hide Console', '&Ka\u015du konzolon' - eo '&Ignore', '&Ignoru' - eo 'Invalid file name "%1\$s".', 'Malvalida dosieronomo "%1\$s".' - eo 'Log Files', 'Protokolo' - eo '&No', '&Ne' - eo 'OK' - eo 'Ok' - eo 'Open', 'Malfermu' - eo '&Open', '&Malfermu' - eo 'Open Multiple Files', 'Melfermu multan dosierojn' - eo 'P&aste', '&Elpo\u015digi' - eo '&Quit', '&Finigu' - eo '&Red', '&Rosa' - eo 'Replace existing file?', '\u0108u anstata\u00fbu ekzistantan dosieron?' - eo '&Retry', '&Ripetu' - eo '&Save', '&Savu' - eo 'Save As', 'Savu kiel' - eo 'Save To Log', 'Savu en protokolon' - eo 'Select Log File', 'Elektu prokolodosieron' - eo 'Select a file to source', 'Elektu dosieron por interpreti' - eo '&Selection:', '&Elekto:' - eo 'Skip Messages', 'transsaltu pluajn mesa\u011dojn' - eo '&Source...', '&Fontoprogramo...' - eo 'Tcl Scripts', 'Tcl-skriptoj' - eo 'Tcl for Windows', 'Tcl por vindoso' - eo 'Text Files', 'Tekstodosierojn' - eo '&Yes', '&Jes' - eo 'abort', '\u0109esigo' - eo 'blue', 'blua' - eo 'cancel', 'rezignu' - eo 'extension', 'ekspansio' - eo 'extensions', 'ekspansioj' - eo 'green', 'verda' - eo 'ignore', 'ignorieren' - eo 'red', 'ru\u011da' - eo 'retry', 'ripetu' - eo 'yes', 'jes' -} diff --git a/ext/tk/sample/msgs_rb/es.msg b/ext/tk/sample/msgs_rb/es.msg deleted file mode 100644 index 38ca28fb8f..0000000000 --- a/ext/tk/sample/msgs_rb/es.msg +++ /dev/null @@ -1,84 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - es "Application Error", "Error de la aplicaci\\u00f3n" - es "Blue", "Azul" - es "Color", "Color" - es "Delete", "Borrar" - es "Error", "Error" - es "Exit", "Salir" - es "Green", "Verde" - es "Red", "Rojo" - es "blue", "azul" - es "green", "verde" - es "red", "rojo" -} - -TkMsgCatalog.new('::tk') { - es "&Abort", "&Abortar" - es "About...", "Acerca de ..." - es "All Files", "Todos los archivos" - es "Application Error", "Error de la aplicaci\\u00f3n" - es "&Blue", "&Azul" - es "&Cancel", "&Cancelar" - es "Cannot change to the directory \"%1\$s\".\nPermission denied.", "No es posible acceder al directorio \"%1\$s\".\nPermiso denegado." - es "Choose Directory", "Elegir directorio" - es "Clear", "Borrar" - es "Color", "Color" - es "Console", "Consola" - es "Copy", "Copiar" - es "Cut", "Cortar" - es "Delete", "Borrar" - es "Details >>", "Detalles >>" - es "Directory \"%1\$s\" does not exist.", "El directorio \"%1\$s\" no existe." - es "&Directory:", "&Directorio:" - es "Error: %1\$s", "Error: %1\$s" - es "Exit", "Salir" - es "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "El archivo \"%1\$s\" ya existe.\nDesea sobreescribirlo?" - es "File \"%1\$s\" already exists.\n\n", "El archivo \"%1\$s\" ya existe.\n\n" - es "File \"%1\$s\" does not exist.", "El archivo \"%1\$s\" no existe." - es "File &name:", "&Nombre de archivo:" - es "File &names:", "&Nombres de archivo:" - es "Files of &type:", "Archivos de &tipo:" - es "Fi&les:", "&Archivos:" - es "&Filter", "&Filtro" - es "Fil&ter:", "Fil&tro:" - es "&Green", "&Verde" - es "Hi", "Hola" - es "Hide Console", "Esconder la consola" - es "&Ignore", "&Ignorar" - es "Invalid file name \"%1\$s\".", "Nombre de archivo inv\\u00e1lido \"%1\$s\"." - es "Log Files", "Ficheros de traza" - es "&No", "&No" - es "&OK", "&OK" - es "Ok", "Ok" - es "Open", "Abrir" - es "&Open", "&Abrir" - es "Open Multiple Files", "Abrir m\\u00faltiples archivos" - es "Paste", "Pegar" - es "Quit", "Abandonar" - es "&Red", "&Rojo" - es "Replace existing file?", "Reemplazar el archivo existente?" - es "&Retry", "&Reintentar" - es "&Save", "&Salvar" - es "Save As", "Salvar como" - es "Save To Log", "Salvar al archivo de traza" - es "Select Log File", "Elegir un archivo de traza" - es "Select a file to source", "Seleccionar un archivo a evaluar" - es "&Selection:", "&Selecci\\u00f3n:" - es "Skip Messages", "Omitir los mensajes" - es "Source...", "Evaluar..." - es "Tcl Scripts", "Scripts Tcl" - es "Tcl for Windows", "Tcl para Windows" - es "Text Files", "Archivos de texto" - es "&Yes", "&S\\u00ed" - es "abort", "abortar" - es "blue", "azul" - es "cancel", "cancelar" - es "extension", "extensi\\u00f3n" - es "extensions", "extensiones" - es "green", "verde" - es "ignore", "ignorar" - es "ok", "ok" - es "red", "rojo" - es "retry", "reintentar" - es "yes", "s\\u00ed" -} diff --git a/ext/tk/sample/msgs_rb/fr.msg b/ext/tk/sample/msgs_rb/fr.msg deleted file mode 100644 index ea85cf1a39..0000000000 --- a/ext/tk/sample/msgs_rb/fr.msg +++ /dev/null @@ -1,84 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - fr 'Application Error', "Erreur d'application" - fr 'Blue', 'Bleu' - fr 'Color', 'Couleur' - fr 'Delete', 'Effacer' - fr 'Error', 'Erreur' - fr 'Exit', 'Quitter' - fr 'Green', 'Vert' - fr 'Red', 'Rouge' - fr 'blue', 'bleu' - fr 'green', 'vert' - fr 'red', 'rouge' -} - -TkMsgCatalog.new('::tk') { - fr '&Abort', '&Annuler' - fr 'About...', '\u00c0 propos...' - fr 'All Files', 'Tous les fichiers' - fr 'Application Error', "Erreur d'application" - fr '&Blue', '&Bleu' - fr '&Cancel', '&Annuler' - fr 'Cannot change to the directory "%1\$s".' "\n" 'Permission denied.', 'Impossible d\'acc\u00e9der au r\u00e9pertoire "%1\$s".' "\n" 'Permission refus\u00e9e.' - fr 'Choose Directory', 'Choisir r\u00e9pertoire' - fr 'Clear', 'Effacer' - fr 'Color', 'Couleur' - fr 'Console' - fr 'Copy', 'Copier' - fr 'Cut', 'Couper' - fr 'Delete', 'Effacer' - fr 'Details >>', 'D\u00e9tails >>' - fr 'Directory "%1\$s" does not exist.', 'Le r\u00e9pertoire "%1\$s" n\'existe pas.' - fr '&Directory:', '&R\u00e9pertoire:' - fr 'Error: %1\$s', 'Erreur: %1\$s' - fr 'Exit', 'Quitter' - fr 'File "%1\$s" already exists.' "\n" 'Do you want to overwrite it?', 'Le fichier "%1\$s" existe d\u00e9j\u00e0.' "\n" 'Voulez-vous l\'\u00e9craser?' - fr 'File "%1\$s" already exists.' "\n\n", 'Le fichier "%1\$s" existe d\u00e9j\u00e0.' "\n\n" - fr 'File "%1\$s" does not exist.', 'Le fichier "%1\$s" n\'existe pas.' - fr 'File &name:', '&Nom de fichier:' - fr 'File &names:', '&Noms de fichiers:' - fr 'Files of &type:', '&Type de fichiers:' - fr 'Fi&les:', 'Fich&iers:' - fr '&Filter', '&Filtre' - fr 'Fil&ter:', 'Fil&tre:' - fr '&Green', '&Vert' - fr 'Hi', 'Salut' - fr 'Hide Console', 'Cacher la Console' - fr '&Ignore', '&Ignorer' - fr 'Invalid file name "%1\$s".', 'Nom de fichier invalide "%1\$s".' - fr 'Log Files', 'Fichiers de trace' - fr '&No', '&Non' - fr '&OK' - fr 'Ok' - fr 'Open', 'Ouvrir' - fr '&Open', '&Ouvrir' - fr 'Open Multiple Files', 'Ouvrir plusieurs fichiers' - fr 'Paste', 'Coller' - fr 'Quit', 'Quitter' - fr '&Red', '&Rouge' - fr 'Replace existing file?', 'Remplacer le fichier existant?' - fr '&Retry', '&R\u00e9-essayer' - fr '&Save', '&Sauvegarder' - fr 'Save As', 'Sauvegarder sous' - fr 'Save To Log', 'Sauvegarde au fichier de trace' - fr 'Select Log File', 'Choisir un fichier de trace' - fr 'Select a file to source', 'Choisir un fichier \u00e0 \u00e9valuer' - fr '&Selection:', '&S\u00e9lection:' - fr 'Skip Messages', 'Omettre les messages' - fr 'Source...', '\u00c9valuer...' - fr 'Tcl Scripts', 'Scripts Tcl' - fr 'Tcl for Windows', 'Tcl pour Windows' - fr 'Text Files', 'Fichiers texte' - fr '&Yes', '&Oui' - fr 'abort', 'abandonner' - fr 'blue', 'bleu' - fr 'cancel', 'annuler' - fr 'extension' - fr 'extensions' - fr 'green', 'vert' - fr 'ignore', 'ignorer' - fr 'ok' - fr 'red', 'rouge' - fr 'retry', 'r\u00e9essayer' - fr 'yes', 'oui' -} diff --git a/ext/tk/sample/msgs_rb/it.msg b/ext/tk/sample/msgs_rb/it.msg deleted file mode 100644 index a180bdbd99..0000000000 --- a/ext/tk/sample/msgs_rb/it.msg +++ /dev/null @@ -1,84 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - it "Application Error", "Errore dell' applicazione" - it "Blue", "Blu" - it "Color", "Colore" - it "Delete", "Incolla" - it "Error", "Errore" - it "Exit", "Esci" - it "Green", "Verde" - it "Red", "Rosso" - it "blue", "blu" - it "green", "verde" - it "red", "rosso" -} - -TkMsgCatalog.new('::tk') { - it "&Abort", "&Interrompi" - it "About...", "Informazioni ..." - it "All Files", "Tutti i file" - it "Application Error", "Errore dell' applicazione" - it "&Blue", "&Blu" - it "&Cancel", "&Annulla" - it "Cannot change to the directory \"%1\$s\".\nPermission denied.", "Impossibile accedere alla directory \"%1\$s\".\nPermesso negato." - it "Choose Directory", "Scegli directory" - it "Clear", "Azzera" - it "Color", "Colore" - it "Console" - it "Copy", "Copia" - it "Cut", "Taglia" - it "Delete", "Incolla" - it "Details >>", "Dettagli >>" - it "Directory \"%1\$s\" does not exist.", "La directory \"%1\$s\" non esiste." - it "&Directory:" - it "Error: %1\$s", "Errore: %1\$s" - it "Exit", "Esci" - it "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "Il file \"%1\$s\" esiste gi\\u00e0.\nVuoi sovrascriverlo?" - it "File \"%1\$s\" already exists.\n\n", "Il file \"%1\$s\" esiste gi\\u00e0.\n\n" - it "File \"%1\$s\" does not exist.", "Il file \"%1\$s\" non esiste." - it "File &name:", "&Nome del file:" - it "File &names:", "&Nomi dei file:" - it "Files of &type:", "File di &tipo:" - it "Fi&les:", "Fi&le:" - it "&Filter", "&Filtro" - it "Fil&ter:", "Fil&tro:" - it "&Green", "&Verde" - it "Hi", "Salve" - it "Hide Console", "Nascondi la console" - it "&Ignore", "&Ignora" - it "Invalid file name \"%1\$s\".", "Nome di file non valido \"%1\$s\"." - it "Log Files", "File di log" - it "&No" - it "&OK" - it "Ok" - it "&Open", "A&pri" - it "Open", "Apri" - it "Open Multiple Files", "Apri file multipli" - it "Paste", "Incolla" - it "Quit", "Esci" - it "&Red", "&Rosso" - it "Replace existing file?", "Sostituisci il file esistente?" - it "&Retry", "&Riprova" - it "&Save", "&Salva" - it "Save As", "Salva come" - it "Save To Log", "Salva il log" - it "Select Log File", "Scegli un file di log" - it "Select a file to source", "Scegli un file da eseguire" - it "&Selection:", "&Selezione:" - it "Skip Messages", "Salta i messaggi" - it "Source...", "Esegui..." - it "Tcl Scripts", "Scripts Tcl" - it "Tcl for Windows", "Tcl per Windows" - it "Text Files", "File di testo" - it "&Yes", "&Si" - it "abort", "interrompi" - it "blue", "blu" - it "cancel", "annulla" - it "extension", "estensione" - it "extensions", "estensioni" - it "green", "verde" - it "ignore", "ignora" - it "ok" - it "red", "rosso" - it "retry", "riprova" - it "yes", "si" -} diff --git a/ext/tk/sample/msgs_rb/ja.msg b/ext/tk/sample/msgs_rb/ja.msg deleted file mode 100644 index 40587c1f1d..0000000000 --- a/ext/tk/sample/msgs_rb/ja.msg +++ /dev/null @@ -1,13 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - ja 'Application Error', '\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30A8\u30E9\u30FC' - ja 'Blue', '\u9752' - ja 'Color', '\u80CC\u666F\u8272' - ja 'Delete', '\u6D88\u53BB' - ja 'Error', '\u30A8\u30E9\u30FC' - ja 'Exit', '\u7D42\u4E86' - ja 'Green', '\u7DD1' - ja 'Red', '\u8D64' - ja 'blue', '\u9752' - ja 'green', '\u7DD1' - ja 'red', '\u8D64' -} diff --git a/ext/tk/sample/msgs_rb/nl.msg b/ext/tk/sample/msgs_rb/nl.msg deleted file mode 100644 index 24e41dae86..0000000000 --- a/ext/tk/sample/msgs_rb/nl.msg +++ /dev/null @@ -1,123 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - nl "Application Error", "Toepassingsfout" - nl "Blue", "Blauw" - nl "Color", "Kleur" - nl "Delete", "Wissen" - nl "Error", "Fout" - nl "Exit", "Be\\u00ebindigen" - nl "Green", "Groen" - nl "Red", "Rood" - nl "blue", "blauw" - nl "green", "groen" - nl "red", "rood" -} - -TkMsgCatalog.new('::tk') { - nl "\"%1\$s\" must be an absolute pathname", "\"%1\$s\" moet een absolute pad-naam zijn" - nl "%1\$s is not a toplevel window", "%1\$s is geen toplevel window" - nl ", or", ", of" - nl "-default, -icon, -message, -parent, -title, or -type", "-default, -icon, -message, -parent, -title, of -type" - nl "-initialdir, -mustexist, -parent, or -title", "-initialdir, -mustexist, -parent, of -title" - nl "&Abort", "&Afbreken" - nl "About...", "Over..." - nl "All Files", "Alle Bestanden" - nl "Application Error", "Toepassingsfout" - nl "&Blue", "&Blauw" - nl "&Cancel", "&Annuleren" - nl "Cannot change to the directory \"%1\$s\".\nPermission denied.", "Kan niet naar map \"%1\$s\" gaan.\nU heeft hiervoor geen toestemming." - nl "Choose Directory", "Kies map" - nl "Clear", "Wissen" - nl "Clear entry, Press OK; Enter %1\$s, press OK", "Wis veld, Druk op OK; typ %1\$s in, druk op OK" - nl "&Clear Console", "&Wis Console" - nl "Color", "Kleur" - nl "Console" - nl "Copy", "Kopi\\u00ebren" - nl "Cut", "Knippen" - nl "Delete", "Wissen" - nl "Details" - nl "Details >>" - nl "Directory \"%1\$s\" does not exist.", "Map \"%1\$s\" bestaat niet." - nl "&Directory:", "&Map:" - nl "Edit", "Bewerken" - nl "Enter \"%1\$s\", press OK", "Typ \"%1\$s\", druk op OK" - nl "Enter \"%1\$s\", press OK, enter \"%2\$s\", press OK", "Typ \"%1\$s\", druk op OK, typ \"%2\$s\", druk op OK" - nl "Error: %1\$s", "Fout: %1\$s" - nl "Exit", "Be\\u00ebindigen" - nl "File", "Bestand" - nl "File \"%1\$s\" already exists.\n\n", "Bestand \"%1\$s\" bestaat al.\n\n" - nl "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "Bestand \"%1\$s\" bestaat al.\nWilt u het overschrijven?" - nl "File \"%1\$s\" does not exist.", "Bestand \"%1\$s\" bestaat niet." - nl "File &name:", "Bestands&naam:" - nl "File &names:", "Bestands&namen:" - nl "Files of &type:", "Bestanden van het &type:" - nl "Fi&les:", "&Bestanden:" - nl "&Filter" - nl "Fil&ter:" - nl "&Green", "&Groen" - nl "Hi", "H\\u00e9" - nl "Hide Console", "Verberg Console" - nl "&Ignore", "&Negeren" - nl "Invalid file name \"%1\$s\".", "Ongeldige bestandsnaam \"%1\$s\"." - nl "Log Files", "Log Bestanden" - nl "&No", "&Nee" - nl "&OK" - nl "Ok" - nl "&Open", "&Openen" - nl "Open", "Openen" - nl "Open Multiple Files", "Open meerdere bestanden" - nl "Paste", "Plakken" - nl "Please press %1\$s", "Druk op %1\$s, A.U.B." - nl "Please press ok", "Druk op ok, A.U.B." - nl "Press Cancel", "Druk op Annuleren" - nl "Press Ok", "Druk op Ok" - nl "Quit", "Stoppen" - nl "&Red", "&Rood" - nl "Replace existing file?", "Vervang bestaand bestand?" - nl "&Retry", "&Herhalen" - nl "&Save", "Op&slaan" - nl "Save As", "Opslaan als" - nl "Save To Log", "Opslaan naar Log" - nl "Select Log File", "Selecteer Log bestand" - nl "Select a file to source", "Selecteer bronbestand" - nl "&Selection:", "&Selectie:" - nl "Skip Messages", "Berichten overslaan" - nl "Source...", "Bron..." - nl "Tcl Scripts" - nl "Tcl for Windows", "Tcl voor Windows" - nl "Text Files", "Tekstbestanden" - nl "&Yes", "&Ja" - nl "abort", "afbreken" - nl "abort, retry, ignore, ok, cancel, no, or yes", "afbreken, opnieuw, negeren, ok, annuleren, nee, of ja" - nl "abortretryignore, ok, okcancel, retrycancel, yesno, or yesnocancel", "abortretryignore, ok, okcancel, retrycancel, yesno, of yesnocancel" - nl "bad %1\$s value \"%2\$s\": must be %3\$s", "verkeerde %1\$s waarde \"%2\$s\": moet zijn %3\$s" - nl "bad file type \"%1\$s\", should be", "verkeerd bestandstype \"%1\$s\", moet zijn" - nl "bad option \"%1\$s\": should be %2\$s", "verkeerde optie \"%1\$s\": moet zijn %2\$s" - nl "bad window path name \"%1\$s\"", "verkeerde window-padnaam \"%1\$s\"" - nl "blue", "blauw" - nl "can't post %1\$s: it isn't a descendant of %2\$s (this is a new requirement in Tk versions 3.0 and later)", "kan %1\$s niet verzenden: het is geen afstammeling van %2\$s (dit is een nieuwe eis in Tk versies 3.0 en later)" - nl "cancel", "annuleren" - nl "default button index greater than number of buttons specified for tk_dialog", "default knop index is groter dan het aantal knoppen beschikbaar voor tk_dialog" - nl "display name to use (current one otherwise)", "te gebruiken schermnaam (anders huidige scherm)" - nl "error, info, question, or warning", "error, info, question, of warning" - nl "extension" - nl "extensions" - nl "focus group \"%1\$s\" doesn't exist", "focusgroep \"%1\$s\" bestaat niet" - nl "green", "groen" - nl "history event %1\$s" - nl "ignore", "negeren" - nl "invalid default button \"%1\$s\"", "ongeldige default knop \"%1\$s\"" - nl "macType" - nl "macTypes" - nl "must specify a background color", "een achtergrondkleur is verplicht" - nl "name of the slave interpreter", "naam van de slaaf-interpreter" - nl "no winfo screen . nor env(DISPLAY)", "geen winfo scherm . noch env(DISPLAY)" - nl "ok" - nl "red", "rood" - nl "retry", "opnieuw" - nl "should contain 5 or 4 elements", "moet 4 of 5 elementen bevatten" - nl "spec" - nl "tk_chooseDirectory command", "tk_chooseDirectory opdracht" - nl "tk_chooseDirectory command, cancel gives null", "tk_chooseDirectory opdracht, annuleren geeft lege waarde" - nl "tk_chooseDirectory command, initialdir", "tk_chooseDirectory opdracht, initi\\u00eble map" - nl "yes", "ja" -} diff --git a/ext/tk/sample/msgs_rb/pl.msg b/ext/tk/sample/msgs_rb/pl.msg deleted file mode 100644 index 0b3b4445c2..0000000000 --- a/ext/tk/sample/msgs_rb/pl.msg +++ /dev/null @@ -1,87 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - pl 'Application Error', 'Bl\u0105d w Programie' - pl 'Blue', 'Niebieski' - pl 'Color', 'Kolor' - pl 'Delete', 'Usu\u0144' - pl 'Error', 'B\u0142\u0105d' - pl 'Exit', 'Zako\u0144cz' - pl 'Green', 'Zielony' - pl 'Red', 'Czerwonz' - pl 'blue', 'niebieski' - pl 'green', 'zielony' - pl 'red', 'czerwony' -} - -TkMsgCatalog.new('::tk') { - pl '&Abort', '&Anuluj' - pl '&About...', 'O Programie...' - pl 'All Files', 'Wszystkie pliki' - pl 'Application Error', 'Bl\u0105d w Programie' - pl '&Blue', '&Niebieski' - pl '&Cancel', '&Anuluj' - pl 'Cannot change to the directory "%1\$s".' "\n" 'Permission denied.', 'Katalog "%1\$s" nie mo\u017ce zosta\u0107 odczytany lub nie istnieje.' - pl 'Choose Directory', 'Wybierz katalog' - pl '&Clear', '&Wyczy\u015b\u0107' - pl '&Clear Console', '&Wyczy\u015b\u0107 konsol\u0119' - pl 'Color', 'Kolor' - pl 'Console', 'Konsola' - pl '&Copy', '&Kopiuj' - pl 'Cu&t', '&Wytnij' - pl '&Delete', '&Usu\u0144' - pl 'Details >>', 'Detale >>' - pl 'Directory "%1\$s" does not exist.', 'Katalog "%1\$s" nie istniej.' - pl '&Directory:', '&Katalog:' - pl '&Edit', '&Edytuj' - pl 'Error: %1\$s', 'B\u0142\u0105d: %1\$s' - pl 'E&xit', '&Zako\u0144cz' - pl '&File', '&Plik' - pl 'File "%1\$s" already exists.' "\n" 'Do you want to overwrite it?', 'Plik "%1\$s" ju\u017c istnieje.' "\n" 'Czy chcesz go zast\u0105pi\u0107?' - pl 'File "%1\$s" already exists.' "\n\n", 'Plik "%1\$s" ju\u017c istnieje. ' "\n\n" - pl 'File "%1\$s" does not exist.', 'Plik "%1\$s" nie istnieje.' - pl 'File &name:', 'Nazwa &pliku:' - pl 'File &names:', 'Nazwy &plik\u00f3w:' - pl 'Files of &type:', 'Pliki &typu:' - pl 'Fi&les:', 'Pli&ki:' - pl '&Filter', '&Filter' - pl 'Fil&ter:', '&Filter:' - pl '&Green', '&Zielony' - pl '&Help', '&Pomoc' - pl 'Hi', 'Witaj' - pl '&Hide Console', '&Schowaj konsol\u0119' - pl '&Ignore', '&Ignoruj' - pl 'Invalid file name "%1\$s".', 'Niew\u0142a\u015bciwa nazwa pliku "%1\$s".' - pl 'Log Files', 'Protoko\u0142uj' - pl '&No', '&Nie' - pl 'OK' - pl 'Ok' - pl 'Open', 'Wczytaj' - pl '&Open', '&Wczytaj' - pl 'Open Multiple Files', 'Wczytuj wiele plik\u00f3w' - pl 'P&aste', '&Wklej' - pl '&Quit', '&Zako\u0144cz' - pl '&Red', '&Czerwonz' - pl 'Replace existing file?', 'Czy zost\u0105pi\u0107 instniej\u0105cy plik?' - pl '&Retry', '&Powt\u00f3rz' - pl '&Save', '&Zapisz' - pl 'Save As', 'Zapisz jako' - pl 'Save To Log', 'Wpisz do protoko\u0142u' - pl 'Select Log File', 'Wybierz plik proko\u0142u' - pl 'Select a file to source', 'Wybierz plik do wykonania' - pl '&Selection:', '&Wyb\u00f3r:' - pl 'Skip Messages', 'Omi\u0144 pozosta\u0142e komunikaty' - pl '&Source...', '&Kod \u017ar\u00f3d\u0142owy...' - pl 'Tcl Scripts', 'Tcl-skrypty' - pl 'Tcl for Windows', 'Tcl dla Okienek (Windows)' - pl 'Text Files', 'Pliki Tekstowe' - pl '&Yes', '&Tak' - pl 'abort', 'zako\u0144cz' - pl 'blue', 'niebieski' - pl 'cancel', 'anuluj' - pl 'extension', 'rozszerzenie' - pl 'extensions', 'rozszerzenia' - pl 'green', 'zielony' - pl 'ignore', 'ignoruj' - pl 'red', 'czerwony' - pl 'retry', 'potw\u00f3rz' - pl 'yes', 'tak' -} diff --git a/ext/tk/sample/msgs_rb/ru.msg b/ext/tk/sample/msgs_rb/ru.msg deleted file mode 100644 index 752cd42619..0000000000 --- a/ext/tk/sample/msgs_rb/ru.msg +++ /dev/null @@ -1,87 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - ru 'Application Error', '\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435' - ru 'Blue', ' \u0413\u043e\u043b\u0443\u0431\u043e\u0439' - ru 'Color', '\u0426\u0432\u0435\u0442' - ru 'Delete', '\u0423\u0434\u0430\u043b\u0438\u0442\u044c' - ru 'Error', '\u041e\u0448\u0438\u0431\u043a\u0430' - ru 'Exit', '\u0412\u044b\u0445\u043e\u0434' - ru 'Green', '\u0417\u0435\u043b\u0435\u043d\u044b\u0439' - ru 'Red', '\u041a\u0440\u0430\u0441\u043d\u044b\u0439' - ru 'blue', ' \u0433\u043e\u043b\u0443\u0431\u043e\u0439' - ru 'green', ' \u0437\u0435\u043b\u0435\u043d\u044b\u0439' - ru 'red', ' \u043a\u0440\u0430\u0441\u043d\u044b\u0439' -} - -TkMsgCatalog.new('::tk') { - ru '&Abort', '&\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c' - ru 'About...', '\u041f\u0440\u043e...' - ru 'All Files', '\u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b' - ru 'Application Error', '\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435' - ru '&Blue', ' &\u0413\u043e\u043b\u0443\u0431\u043e\u0439' - ru '&Cancel', '\u041e\u0442&\u043c\u0435\u043d\u0430' - ru 'Cannot change to the directory "%1\$s".' "\n" 'Permission denied.' \ - '\u041d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 "%1\$s".' "\n" '\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430' - ru 'Choose Directory', '\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433' - ru 'Clear', '\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c' - ru 'Color', '\u0426\u0432\u0435\u0442' - ru 'Console', '\u041a\u043e\u043d\u0441\u043e\u043b\u044c' - ru 'Copy', '\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c' - ru 'Cut', '\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c' - ru 'Delete', '\u0423\u0434\u0430\u043b\u0438\u0442\u044c' - ru 'Details >>', '\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 >>' - ru 'Directory "%1\$s" does not exist.', '\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 "%1\$s" \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.' - ru '&Directory:', '&\u041a\u0430\u0442\u0430\u043b\u043e\u0433:' - ru 'Error: %1\$s', '\u041e\u0448\u0438\u0431\u043a\u0430: %1\$s' - ru 'Exit', '\u0412\u044b\u0445\u043e\u0434' - ru 'File "%1\$s" already exists.' "\n" 'Do you want to overwrite it?' \ - '\u0424\u0430\u0439\u043b "%1\$s" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.' "\n" '\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e?' - ru 'File "%1\$s" already exists.' "\n\n", '\u0424\u0430\u0439\u043b "%1\$s" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.' "\n\n" - ru 'File "%1\$s" does not exist.', '\u0424\u0430\u0439\u043b "%1\$s" \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d.' - ru 'File &name:', '&\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430:' - ru 'File &names:', '&\u0418\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432:' - ru 'Files of &type:', '&\u0422\u0438\u043f \u0444\u0430\u0439\u043b\u043e\u0432:' - ru 'Fi&les:', '\u0424\u0430\u0439&\u043b\u044b:' - ru '&Filter', '&\u0424\u0438\u043b\u044c\u0442\u0440' - ru 'Fil&ter:', '\u0424\u0438\u043b\u044c&\u0442\u0440:' - ru '&Green', ' &\u0417\u0435\u043b\u0435\u043d\u044b\u0439' - ru 'Hi', '\u041f\u0440\u0438\u0432\u0435\u0442' - ru 'Hide Console', '\u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c' - ru '&Ignore', '&\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c' - ru 'Invalid file name "%1\$s".', '\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 "%1\$s".' - ru 'Log Files', '\u0424\u0430\u0439\u043b\u044b \u0436\u0443\u0440\u043d\u0430\u043b\u0430' - ru '&No', '&\u041d\u0435\u0442' - ru '&OK', '&\u041e\u041a' - ru 'Ok', '\u0414\u0430' - ru 'Open', '\u041e\u0442\u043a\u0440\u044b\u0442\u044c' - ru '&Open', '&\u041e\u0442\u043a\u0440\u044b\u0442\u044c' - ru 'Open Multiple Files', '\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432' - ru 'Paste', '\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c' - ru 'Quit', '\u0412\u044b\u0445\u043e\u0434' - ru '&Red', ' &\u041a\u0440\u0430\u0441\u043d\u044b\u0439' - ru 'Replace existing file?', '\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b?' - ru '&Retry', '&\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c' - ru '&Save', '&\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c' - ru 'Save As', '\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a' - ru 'Save To Log', '\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b' - ru 'Select Log File', '\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0436\u0443\u0440\u043d\u0430\u043b' - ru 'Select a file to source', '\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438' - ru '&Selection:', '&Selection:' - ru 'Skip Messages', '\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f' - ru 'Source...', '\u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b...' - ru 'Tcl Scripts', '\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 TCL' - ru 'Tcl for Windows', 'TCL \u0434\u043b\u044f Windows' - ru 'Text Files', '\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b' - ru '&Yes', '&\u0414\u0430' - ru 'abort', '\u043e\u0442\u043c\u0435\u043d\u0430' - ru 'blue', ' \u0433\u043e\u043b\u0443\u0431\u043e\u0439' - ru 'cancel', '\u043e\u0442\u043c\u0435\u043d\u0430' - ru 'extension', '\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435' - ru 'extensions', '\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f' - ru 'green', ' \u0437\u0435\u043b\u0435\u043d\u044b\u0439' - ru 'ignore', '\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c' - ru 'ok', '\u043e\u043a' - ru 'red', ' \u043a\u0440\u0430\u0441\u043d\u044b\u0439' - ru 'retry', '\u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c' - ru 'yes', '\u0434\u0430' -} - diff --git a/ext/tk/sample/msgs_rb2/README b/ext/tk/sample/msgs_rb2/README deleted file mode 100644 index f6a904b3b6..0000000000 --- a/ext/tk/sample/msgs_rb2/README +++ /dev/null @@ -1,5 +0,0 @@ -Message catalogs in this directory are written in encodings except -UTF-8. As if you have a trouble to edit UTF-8 text, you can write -message catalogs in your familier encoding. - -Please see '../msgs_rb/README' too. diff --git a/ext/tk/sample/msgs_rb2/de.msg b/ext/tk/sample/msgs_rb2/de.msg deleted file mode 100644 index 0d6c82d9e5..0000000000 --- a/ext/tk/sample/msgs_rb2/de.msg +++ /dev/null @@ -1,88 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - de 'Application Error', 'Applikationsfehler' - de 'Blue', 'Blau' - de 'Color', 'Farbe' - de 'Delete', 'Löschen', 'iso8859-1' - de 'Error', 'Fehler' - de 'Exit', 'Ende' - de 'Green', 'Grün', 'iso8859-1' - de 'Red', 'Rot' - de 'blue', 'blau' - de 'green', 'grün', 'iso8859-1' - de 'red', 'rot' -} - -TkMsgCatalog.new('::tk') { - de "&Abort", "&Abbruch" - de "&About...", "&Über...", 'iso8859-1' - de "All Files", "Alle Dateien" - de "Application Error", "Applikationsfehler" - de "&Blue", "&Blau" - de "&Cancel", "&Abbruch" - de "Cannot change to the directory \"%1\$s\".\nPermission denied.", "Kann nicht in das Verzeichnis \"%1\$s\" wechseln.\nKeine Rechte vorhanden." - de "Choose Directory", "Wähle Verzeichnis", 'iso8859-1' - de "&Clear", "&Rücksetzen", 'iso8859-1' - de "&Clear Console", "&Konsole löschen", 'iso8859-1' - de "Color", "Farbe" - de "Console", "Konsole" - de "&Copy", "&Kopieren" - de "Cu&t", "Aus&schneiden" - de '&Delete', '&Löschen', 'iso8859-1' - de "Details >>" - de "Directory \"%1\$s\" does not exist.", "Das Verzeichnis \"%1\$s\" existiert nicht." - de "&Directory:", "&Verzeichnis:" - de "&Edit", "&Bearbieten" - de "Error: %1\$s", "Fehler: %1\$s" - de "E&xit", "&Ende" - de "&File", "&Datei" - de "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "Die Datei \"%1\$s\" ist bereits vorhanden.\nWollen sie diese Datei überschreiben ?", 'iso8859-1' - de "File \"%1\$s\" already exists.\n\n", "Die Datei \"%1\$s\" ist bereits vorhanden.\n\n" - de "File \"%1\$s\" does not exist.", "Die Datei \"%1\$s\" existiert nicht." - de "File &name:", "Datei&name:" - de "File &names:", "Datei&namen:" - de "Files of &type:", "Dateien des &Typs:" - de "Fi&les:", "Dat&eien:" - de "&Filter" - de "Fil&ter:" - de '&Green', '&Grün', 'iso8859-1' - de "&Help", "&Hilfe" - de "Hi", "Hallo" - de "&Hide Console", "&Konsole unsichtbar machen" - de "&Ignore", "&Ignorieren" - de "Invalid file name \"%1\$s\".", "Ungültiger Dateiname \"%1\$s\".", 'iso8859-1' - de "Log Files", "Protokolldatei" - de "&No", "&Nein" - de "OK" - de "Ok" - de "Open", "Öffnen", 'iso8859-1' - de "&Open", "Ö&ffnen", 'iso8859-1' - de "Open Multiple Files" - de "P&aste", "E&infügen", 'iso8859-1' - de "&Quit", "&Beenden" - de "&Red", "&Rot" - de "Replace existing file?", "Existierende Datei ersetzen?" - de "&Retry", "&Wiederholen" - de "&Save", "&Speichern" - de "Save As", "Speichern unter" - de "Save To Log", "In Protokoll speichern" - de "Select Log File", "Protokolldatei auswählen", 'iso8859-1' - de "Select a file to source", "Auszuführende Datei auswählen", 'iso8859-1' - de "&Selection:", "Auswah&l:" - de "Skip Messages", "Weitere Nachrichten überspringen", 'iso8859-1' - de "&Source...", "&Ausführen...", 'iso8859-1' - de "Tcl Scripts", "Tcl-Skripte" - de "Tcl for Windows", "Tcl für Windows", 'iso8859-1' - de "Text Files", "Textdateien" - de "&Yes", "&Ja" - de "abort", "abbrechen" - de "blue", "blau" - de "cancel", "abbrechen" - de "extension", "Erweiterung" - de "extensions", "Erweiterungen" - de 'green', 'grün', 'iso8859-1' - de "ignore", "ignorieren" - de "ok" - de "red", "rot" - de "retry", "wiederholen" - de "yes", "ja" -} diff --git a/ext/tk/sample/msgs_rb2/ja.msg b/ext/tk/sample/msgs_rb2/ja.msg deleted file mode 100644 index 54a105b61f..0000000000 --- a/ext/tk/sample/msgs_rb2/ja.msg +++ /dev/null @@ -1,85 +0,0 @@ -TkMsgCatalog.new('::tkmsgcat_demo') { - ja 'Application Error', 'アプリケーションエラー', 'utf-8' - ja 'Blue', 'é’', 'utf-8' - ja 'Color', '色é¸æŠž', 'utf-8' - ja 'Delete', '消去', 'utf-8' - ja 'Error', 'エラー', 'utf-8' - ja 'Exit', '終了', 'utf-8' - ja 'Green', 'ç·‘', 'utf-8' - ja 'Red', '赤', 'utf-8' - ja 'blue', 'é’', 'utf-8' - ja 'green', 'ç·‘', 'utf-8' - ja 'red', '赤', 'utf-8' -} - -TkMsgCatalog.new('::tk') { - ja "&Abort", '中止', 'utf-8' - ja "About..." - ja "All Files", 'ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«', 'utf-8' - ja "Application Error", 'アプリケーションエラー', 'utf-8' - ja "&Blue", 'é’', 'utf-8' - ja "&Cancel", 'å–り消ã—', 'utf-8' - ja "Cannot change to the directory \"%1\$s\".\nPermission denied.", "ディレクトリ \"%1\$s\" ã«å¤‰æ›´ã§ãã¾ã›ã‚“.\n許å¯ãŒã‚ã‚Šã¾ã›ã‚“.", 'utf-8' - ja "Choose Directory", 'ディレクトリをé¸æŠž', 'utf-8' - ja "Clear", '消去', 'utf-8' - ja "Color", '色', 'utf-8' - ja "Console", 'コンソール', 'utf-8' - ja "Copy", 'コピー', 'utf-8' - ja "Cut", '切りå–ã‚Š', 'utf-8' - ja "Delete", '消去', 'utf-8' - ja "Details >>", '詳細 >>', 'utf-8' - ja "Directory \"%1\$s\" does not exist.", '"%1$s" ã¨ã„ã†ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¯å­˜åœ¨ã—ã¾ã›ã‚“.', 'utf-8' - ja "&Directory:", 'ディレクトリ', 'utf-8' - ja "Error: %1\$s" - ja "Exit", '終了', 'utf-8' - ja "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "\"%1\$s\" ã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ—¢ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ï¼Ž\n書ãæ›ãˆã¾ã™ã‹ï¼Ÿ", 'utf-8' - ja "File \"%1\$s\" already exists.\n\n", "\"%1\$s\" ã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ—¢ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ï¼Ž\n\n", 'utf-8' - ja "File \"%1\$s\" does not exist.", '"%1$s" ã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ã¯å­˜åœ¨ã—ã¾ã›ã‚“.', 'utf-8' - ja "File &name:", 'ファイルå', 'utf-8' - ja "File &names:", 'ファイルå', 'utf-8' - ja "Files of &type:", 'ファイル形å¼', 'utf-8' - ja "Fi&les:", 'ファイル', 'utf-8' - ja "&Filter", 'フィルター', 'utf-8' - ja "Fil&ter:", 'フィルター', 'utf-8' - ja "&Green", 'ç·‘', 'utf-8' - ja "Hi", 'ã“ã‚“ã«ã¡ã¯', 'utf-8' - ja "Hide Console", 'コンソールを隠ã™', 'utf-8' - ja "&Ignore", '無視', 'utf-8' - ja "Invalid file name \"%1\$s\".", '"%1$s" ã¯ä¸æ­£ãªãƒ•ã‚¡ã‚¤ãƒ«åã§ã™ï¼Ž', 'utf-8' - ja "Log Files", 'ログファイル', 'utf-8' - ja "&No", 'ã„ã„ãˆ', 'utf-8' - ja "&OK", '了解', 'utf-8' - ja "OK", '了解', 'utf-8' - ja "Ok", '了解', 'utf-8' - ja "Open", 'é–‹ã', 'utf-8' - ja "&Open", 'é–‹ã', 'utf-8' - ja "Open Multiple Files", '複数ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ã', 'utf-8' - ja "Paste", '貼り付ã‘', 'utf-8' - ja "Quit", '終了', 'utf-8' - ja "&Red", '赤', 'utf-8' - ja "Replace existing file?", '既存ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ç½®ãæ›ãˆã¾ã™ã‹ï¼Ÿ', 'utf-8' - ja "&Retry", 'å†å®Ÿè¡Œ', 'utf-8' - ja "&Save", 'ä¿å­˜', 'utf-8' - ja "Save As", 'åå‰ã‚’付ã‘ã¦ä¿å­˜', 'utf-8' - ja "Save To Log", 'ログをä¿å­˜', 'utf-8' - ja "Select Log File", 'ログファイルをé¸æŠž', 'utf-8' - ja "Select a file to source", 'ソースファイルをé¸æŠž', 'utf-8' - ja "&Selection:", 'é¸æŠž', 'utf-8' - ja "Skip Messages", 'メッセージをã¨ã°ã™', 'utf-8' - ja "Source...", 'ソース...', 'utf-8' - ja "Tcl Scripts", 'Tcl スクリプト', 'utf-8' - ja "Tcl for Windows" - ja "Text Files", 'テキストファイル', 'utf-8' - ja "&Yes", 'ã¯ã„', 'utf-8' - ja "abort", '中止', 'utf-8' - ja "blue", 'é’', 'utf-8' - ja "cancel", 'å–り消ã—', 'utf-8' - ja "extension", 'æ‹¡å¼µå­', 'utf-8' - ja "extensions", 'æ‹¡å¼µå­', 'utf-8' - ja "green", 'ç·‘', 'utf-8' - ja "ignore", '無視', 'utf-8' - ja "ok", '了解', 'utf-8' - ja "red", '赤', 'utf-8' - ja "retry", 'å†å®Ÿè¡Œ', 'utf-8' - ja "yes", 'ã¯ã„', 'utf-8' -} diff --git a/ext/tk/sample/msgs_tk/README b/ext/tk/sample/msgs_tk/README deleted file mode 100644 index 949ee7a896..0000000000 --- a/ext/tk/sample/msgs_tk/README +++ /dev/null @@ -1,4 +0,0 @@ -Almost all of Message-Catalog files in this directory are quoted -from Tcl/Tk8.5a1 source archive (only a little are modified for -'tkmsgcat-load_tk.rb'). Please read the file 'license.terms' in -this directory (That was included in demo directory of Tcl/Tk8.5a1). diff --git a/ext/tk/sample/msgs_tk/cs.msg b/ext/tk/sample/msgs_tk/cs.msg deleted file mode 100644 index 697070985e..0000000000 --- a/ext/tk/sample/msgs_tk/cs.msg +++ /dev/null @@ -1,84 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset cs "Application Error" "Chyba programu" - ::msgcat::mcset cs "Blue" "Modr\341" - ::msgcat::mcset cs "Color" "Barva" - ::msgcat::mcset cs "Delete" "Smazat" - ::msgcat::mcset cs "Error" "Chyba" - ::msgcat::mcset cs "Exit" "Konec" - ::msgcat::mcset cs "Green" "Zelen\341" - ::msgcat::mcset cs "Red" "\u010cerven\341" - ::msgcat::mcset cs "blue" "modr\341" - ::msgcat::mcset cs "green" "zelen\341" - ::msgcat::mcset cs "red" "\u010derven\341" -} - -namespace eval ::tk { - ::msgcat::mcset cs "&Abort" "&P\u0159eru\u0161it" - ::msgcat::mcset cs "About..." "O programu..." - ::msgcat::mcset cs "All Files" "V\u0161echny soubory" - ::msgcat::mcset cs "Application Error" "Chyba programu" - ::msgcat::mcset cs "&Blue" "&Modr\341" - ::msgcat::mcset cs "&Cancel" "&Zru\u0161it" - ::msgcat::mcset cs "Cannot change to the directory \"%1\$s\".\nPermission denied." "Nemohu zm\u011bnit atku\341ln\355 adres\341\u0159 na \"%1\$s\".\nP\u0159\355stup odm\355tnut." - ::msgcat::mcset cs "Choose Directory" "V\375b\u011br adres\341\u0159e" - ::msgcat::mcset cs "Clear" "Smazat" - ::msgcat::mcset cs "Color" "Barva" - ::msgcat::mcset cs "Console" "Konzole" - ::msgcat::mcset cs "Copy" "Kop\355rovat" - ::msgcat::mcset cs "Cut" "Vy\u0159\355znout" - ::msgcat::mcset cs "Delete" "Smazat" - ::msgcat::mcset cs "Details >>" "Detaily >>" - ::msgcat::mcset cs "Directory \"%1\$s\" does not exist." "Adres\341\u0159 \"%1\$s\" neexistuje." - ::msgcat::mcset cs "&Directory:" "&Adres\341\u0159:" - ::msgcat::mcset cs "Error: %1\$s" "Chyba: %1\$s" - ::msgcat::mcset cs "Exit" "Konec" - ::msgcat::mcset cs "File \"%1\$s\" already exists.\n\n" "Soubor \"%1\$s\" ji\u017e existuje.\n\n" - ::msgcat::mcset cs "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Soubor \"%1\$s\" ji\u017e existuje.\nChcete jej p\u0159epsat?" - ::msgcat::mcset cs "File \"%1\$s\" does not exist." "Soubor \"%1\$s\" neexistuje." - ::msgcat::mcset cs "File &name:" "&Jm\351no souboru:" - ::msgcat::mcset cs "File &names:" "&Jm\351na soubor\u016f:" - ::msgcat::mcset cs "Files of &type:" "&Typy soubor\u016f:" - ::msgcat::mcset cs "Fi&les:" "Sou&bory:" - ::msgcat::mcset cs "&Filter" "&Filtr" - ::msgcat::mcset cs "Fil&ter:" "Fil&tr:" - ::msgcat::mcset cs "&Green" "Ze&len\341" - ::msgcat::mcset cs "Hi" - ::msgcat::mcset cs "Hide Console" "Skr\375t konsolu" - ::msgcat::mcset cs "&Ignore" "&Ignorovat" - ::msgcat::mcset cs "Invalid file name \"%1\$s\"." "\u0160patn\351 jm\351no souboru \"%1\$s\"." - ::msgcat::mcset cs "Log Files" "Log soubory" - ::msgcat::mcset cs "&No" "&Ne" - ::msgcat::mcset cs "&OK" - ::msgcat::mcset cs "Ok" - ::msgcat::mcset cs "Open" "Otev\u0159\355t" - ::msgcat::mcset cs "&Open" "&Otev\u0159\355t" - ::msgcat::mcset cs "Open Multiple Files" "Otev\u0159\355t v\355ce soubor\u016f" - ::msgcat::mcset cs "Paste" "Vlo\u017eit" - ::msgcat::mcset cs "Quit" "Skon\u010dit" - ::msgcat::mcset cs "&Red" " \u010ce&rven\341" - ::msgcat::mcset cs "Replace existing file?" "Nahradit st\341vaj\355c\355 soubor?" - ::msgcat::mcset cs "&Retry" "Z&novu" - ::msgcat::mcset cs "&Save" "&Ulo\u017eit" - ::msgcat::mcset cs "Save As" "Ulo\u017eit jako" - ::msgcat::mcset cs "Save To Log" "Ulo\u017eit do logu" - ::msgcat::mcset cs "Select Log File" "Vybrat log soubor" - ::msgcat::mcset cs "Select a file to source" "Vybrat soubor k nahr\341n\355" - ::msgcat::mcset cs "&Selection:" "&V\375b\u011br:" - ::msgcat::mcset cs "Skip Messages" "P\u0159esko\u010dit zpr\341vy" - ::msgcat::mcset cs "Source..." "Nahr\341t..." - ::msgcat::mcset cs "Tcl Scripts" "Tcl skripty" - ::msgcat::mcset cs "Tcl for Windows" "Tcl pro Windows" - ::msgcat::mcset cs "Text Files" "Textov\351 soubory" - ::msgcat::mcset cs "&Yes" "&Ano" - ::msgcat::mcset cs "abort" "p\u0159eru\u0161it" - ::msgcat::mcset cs "blue" "modr\341" - ::msgcat::mcset cs "cancel" "zru\u0161it" - ::msgcat::mcset cs "extension" "p\u0159\355pona" - ::msgcat::mcset cs "extensions" "p\u0159\355pony" - ::msgcat::mcset cs "green" "zelen\341" - ::msgcat::mcset cs "ignore" "ignorovat" - ::msgcat::mcset cs "ok" - ::msgcat::mcset cs "red" "\u010derven\341" - ::msgcat::mcset cs "retry" "znovu" - ::msgcat::mcset cs "yes" "ano" -} diff --git a/ext/tk/sample/msgs_tk/de.msg b/ext/tk/sample/msgs_tk/de.msg deleted file mode 100644 index 437f2ed9e7..0000000000 --- a/ext/tk/sample/msgs_tk/de.msg +++ /dev/null @@ -1,88 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset de "Application Error" "Applikationsfehler" - ::msgcat::mcset de "Blue" "Blau" - ::msgcat::mcset de "Color" "Farbe" - ::msgcat::mcset de "Delete" "L\u00f6schen" - ::msgcat::mcset de "Error" "Fehler" - ::msgcat::mcset de "Exit" "Ende" - ::msgcat::mcset de "Green" "Gr\u00fcn" - ::msgcat::mcset de "Red" "Rot" - ::msgcat::mcset de "blue" "blau" - ::msgcat::mcset de "green" "gr\u00fcn" - ::msgcat::mcset de "red" "rot" -} - -namespace eval ::tk { - ::msgcat::mcset de "&Abort" "&Abbruch" - ::msgcat::mcset de "&About..." "&\u00dcber..." - ::msgcat::mcset de "All Files" "Alle Dateien" - ::msgcat::mcset de "Application Error" "Applikationsfehler" - ::msgcat::mcset de "&Blue" "&Blau" - ::msgcat::mcset de "&Cancel" "&Abbruch" - ::msgcat::mcset de "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kann nicht in das Verzeichnis \"%1\$s\" wechseln.\nKeine Rechte vorhanden." - ::msgcat::mcset de "Choose Directory" "W\u00e4hle Verzeichnis" - ::msgcat::mcset de "&Clear" "&R\u00fccksetzen" - ::msgcat::mcset de "&Clear Console" "&Konsole l\u00f6schen" - ::msgcat::mcset de "Color" "Farbe" - ::msgcat::mcset de "Console" "Konsole" - ::msgcat::mcset de "&Copy" "&Kopieren" - ::msgcat::mcset de "Cu&t" "Aus&schneiden" - ::msgcat::mcset de "&Delete" "&L\u00f6schen" - ::msgcat::mcset de "Details >>" - ::msgcat::mcset de "Directory \"%1\$s\" does not exist." "Das Verzeichnis \"%1\$s\" existiert nicht." - ::msgcat::mcset de "&Directory:" "&Verzeichnis:" - ::msgcat::mcset de "&Edit" "&Bearbieten" - ::msgcat::mcset de "Error: %1\$s" "Fehler: %1\$s" - ::msgcat::mcset de "E&xit" "&Ende" - ::msgcat::mcset de "&File" "&Datei" - ::msgcat::mcset de "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Die Datei \"%1\$s\" ist bereits vorhanden.\nWollen sie diese Datei \u00fcberschreiben ?" - ::msgcat::mcset de "File \"%1\$s\" already exists.\n\n" "Die Datei \"%1\$s\" ist bereits vorhanden.\n\n" - ::msgcat::mcset de "File \"%1\$s\" does not exist." "Die Datei \"%1\$s\" existiert nicht." - ::msgcat::mcset de "File &name:" "Datei&name:" - ::msgcat::mcset de "File &names:" "Datei&namen:" - ::msgcat::mcset de "Files of &type:" "Dateien des &Typs:" - ::msgcat::mcset de "Fi&les:" "Dat&eien:" - ::msgcat::mcset de "&Filter" - ::msgcat::mcset de "Fil&ter:" - ::msgcat::mcset de "&Green" "&Gr\u00fcn" - ::msgcat::mcset de "&Help" "&Hilfe" - ::msgcat::mcset de "Hi" "Hallo" - ::msgcat::mcset de "&Hide Console" "&Konsole unsichtbar machen" - ::msgcat::mcset de "&Ignore" "&Ignorieren" - ::msgcat::mcset de "Invalid file name \"%1\$s\"." "Ung\u00fcltiger Dateiname \"%1\$s\"." - ::msgcat::mcset de "Log Files" "Protokolldatei" - ::msgcat::mcset de "&No" "&Nein" - ::msgcat::mcset de "OK" - ::msgcat::mcset de "Ok" - ::msgcat::mcset de "Open" "\u00d6ffnen" - ::msgcat::mcset de "&Open" "\u00d6&ffnen" - ::msgcat::mcset de "Open Multiple Files" - ::msgcat::mcset de "P&aste" "E&inf\u00fcgen" - ::msgcat::mcset de "&Quit" "&Beenden" - ::msgcat::mcset de "&Red" "&Rot" - ::msgcat::mcset de "Replace existing file?" "Existierende Datei ersetzen?" - ::msgcat::mcset de "&Retry" "&Wiederholen" - ::msgcat::mcset de "&Save" "&Speichern" - ::msgcat::mcset de "Save As" "Speichern unter" - ::msgcat::mcset de "Save To Log" "In Protokoll speichern" - ::msgcat::mcset de "Select Log File" "Protokolldatei ausw\u00e4hlen" - ::msgcat::mcset de "Select a file to source" "Auszuf\u00fchrende Datei ausw\u00e4hlen" - ::msgcat::mcset de "&Selection:" "Auswah&l:" - ::msgcat::mcset de "Skip Messages" "Weitere Nachrichten \u00fcberspringen" - ::msgcat::mcset de "&Source..." "&Ausf\u00fchren..." - ::msgcat::mcset de "Tcl Scripts" "Tcl-Skripte" - ::msgcat::mcset de "Tcl for Windows" "Tcl f\u00fcr Windows" - ::msgcat::mcset de "Text Files" "Textdateien" - ::msgcat::mcset de "&Yes" "&Ja" - ::msgcat::mcset de "abort" "abbrechen" - ::msgcat::mcset de "blue" "blau" - ::msgcat::mcset de "cancel" "abbrechen" - ::msgcat::mcset de "extension" "Erweiterung" - ::msgcat::mcset de "extensions" "Erweiterungen" - ::msgcat::mcset de "green" "gr\u00fcn" - ::msgcat::mcset de "ignore" "ignorieren" - ::msgcat::mcset de "ok" - ::msgcat::mcset de "red" "rot" - ::msgcat::mcset de "retry" "wiederholen" - ::msgcat::mcset de "yes" "ja" -} diff --git a/ext/tk/sample/msgs_tk/el.msg b/ext/tk/sample/msgs_tk/el.msg deleted file mode 100644 index ee75af3ced..0000000000 --- a/ext/tk/sample/msgs_tk/el.msg +++ /dev/null @@ -1,103 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset el "Application Error" "\u039b\u03ac\u03b8\u03bf\u03c2 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2" - ::msgcat::mcset el "Blue" "\u039c\u03c0\u03bb\u03b5" - ::msgcat::mcset el "Color" "\u03a7\u03c1\u03ce\u03bc\u03b1" - ::msgcat::mcset el "Delete" "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae" - ::msgcat::mcset el "Error" "\u039b\u03ac\u03b8\u03bf\u03c2" - ::msgcat::mcset el "Exit" "\u0388\u03be\u03bf\u03b4\u03bf\u03c2" - ::msgcat::mcset el "Green" "\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf" - ::msgcat::mcset el "Red" "\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf" - ::msgcat::mcset el "blue" "\u03bc\u03c0\u03bb\u03b5" - ::msgcat::mcset el "green" "\u03c0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf" - ::msgcat::mcset el "red" "\u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf" -} - - -# followings are same to original file included into Tk8.5a1's widget demos. - -## Messages for the Greek (Hellenic - "el") language. -## Please report any changes/suggestions to: -## petasis@iit.demokritos.gr - -namespace eval ::tk { - ::msgcat::mcset el "&Abort" "\u03a4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2" - ::msgcat::mcset el "About..." "\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac..." - ::msgcat::mcset el "All Files" "\u038c\u03bb\u03b1 \u03c4\u03b1 \u0391\u03c1\u03c7\u03b5\u03af\u03b1" - ::msgcat::mcset el "Application Error" "\u039b\u03ac\u03b8\u03bf\u03c2 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2" - ::msgcat::mcset el "&Blue" "\u039c\u03c0\u03bb\u03b5" - ::msgcat::mcset el "&Cancel" "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7" - ::msgcat::mcset el \ -"Cannot change to the directory \"%1\$s\".\nPermission denied." \ -"\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03ba\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5 \u03c3\u03b5 \"%1\$s\".\n\u0397 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03b4\u03b5\u03bd \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9." - ::msgcat::mcset el "Choose Directory" "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u039a\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5" - ::msgcat::mcset el "Clear" "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2" - ::msgcat::mcset el "Color" "\u03a7\u03c1\u03ce\u03bc\u03b1" - ::msgcat::mcset el "Console" "\u039a\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1" - ::msgcat::mcset el "Copy" "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae" - ::msgcat::mcset el "Cut" "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae" - ::msgcat::mcset el "Delete" "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae" - ::msgcat::mcset el "Details >>" "\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2 >>" - ::msgcat::mcset el "Directory \"%1\$s\" does not exist." \ - "\u039f \u03ba\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2 \"%1\$s\" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9." - ::msgcat::mcset el "&Directory:" "&\u039a\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2:" - ::msgcat::mcset el "Error: %1\$s" "\u039b\u03ac\u03b8\u03bf\u03c2: %1\$s" - ::msgcat::mcset el "Exit" "\u0388\u03be\u03bf\u03b4\u03bf\u03c2" - ::msgcat::mcset el \ - "File \"%1\$s\" already exists.\nDo you want to overwrite it?" \ - "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.\n\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03ba\u03b1\u03bb\u03c5\u03c6\u03b8\u03b5\u03af;" - ::msgcat::mcset el "File \"%1\$s\" already exists.\n\n" \ - "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.\n\n" - ::msgcat::mcset el "File \"%1\$s\" does not exist." \ - "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9." - ::msgcat::mcset el "File &name:" "\u038c&\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5:" - ::msgcat::mcset el "File &names:" "\u038c&\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd:" - ::msgcat::mcset el "Files of &type:" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5 &\u03c4\u03cd\u03c0\u03bf\u03c5:" - ::msgcat::mcset el "Fi&les:" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1:" - ::msgcat::mcset el "&Filter" "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf" - ::msgcat::mcset el "Fil&ter:" "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf:" - ::msgcat::mcset el "&Green" "\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf" - ::msgcat::mcset el "Hi" "\u0393\u03b5\u03b9\u03b1" - ::msgcat::mcset el "Hide Console" "\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03ba\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1\u03c2" - ::msgcat::mcset el "&Ignore" "\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7" - ::msgcat::mcset el "Invalid file name \"%1\$s\"." \ - "\u0386\u03ba\u03c5\u03c1\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \"%1\$s\"." - ::msgcat::mcset el "Log Files" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2" - ::msgcat::mcset el "&No" "\u038c\u03c7\u03b9" - ::msgcat::mcset el "&OK" "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9" - ::msgcat::mcset el "&Ok" "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9" - ::msgcat::mcset el "Open" "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1" - ::msgcat::mcset el "&Open" "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1" - ::msgcat::mcset el "Open Multiple Files" \ - "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c0\u03bf\u03bb\u03bb\u03b1\u03c0\u03bb\u03ce\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd" - ::msgcat::mcset el "Paste" "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7" - ::msgcat::mcset el "Quit" "\u0388\u03be\u03bf\u03b4\u03bf\u03c2" - ::msgcat::mcset el "&Red" "\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf" - ::msgcat::mcset el "Replace existing file?" \ - "\u0395\u03c0\u03b9\u03ba\u03ac\u03bb\u03c5\u03c8\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03bd\u03c4\u03bf\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5;" - ::msgcat::mcset el "&Retry" "\u03a0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac" - ::msgcat::mcset el "&Save" "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7" - ::msgcat::mcset el "Save As" "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03b1\u03bd" - ::msgcat::mcset el "Save To Log" "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2" - ::msgcat::mcset el "Select Log File" "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2" - ::msgcat::mcset el "Select a file to source" \ - "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b3\u03b9\u03b1 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7" - ::msgcat::mcset el "&Selection:" "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae:" - ::msgcat::mcset el "Skip Messages" "\u0391\u03c0\u03bf\u03c6\u03c5\u03b3\u03ae \u03bc\u03c5\u03bd\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd" - ::msgcat::mcset el "Source..." "\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7..." - ::msgcat::mcset el "Tcl Scripts" "Tcl Scripts" - ::msgcat::mcset el "Tcl for Windows" "Tcl \u03b3\u03b9\u03b1 Windows" - ::msgcat::mcset el "Text Files" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5" - ::msgcat::mcset el "&Yes" "\u039d\u03b1\u03b9" - ::msgcat::mcset el "abort" "\u03c4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2" - ::msgcat::mcset el "blue" "\u03bc\u03c0\u03bb\u03b5" - ::msgcat::mcset el "cancel" "\u03b1\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7" - ::msgcat::mcset el "extension" "\u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7" - ::msgcat::mcset el "extensions" "\u03b5\u03c0\u03b5\u03ba\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2" - ::msgcat::mcset el "green" "\u03c0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf" - ::msgcat::mcset el "ignore" "\u03b1\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7" - ::msgcat::mcset el "ok" "\u03b5\u03bd\u03c4\u03ac\u03be\u03b5\u03b9" - ::msgcat::mcset el "red" "\u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf" - ::msgcat::mcset el "retry" "\u03c0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac" - ::msgcat::mcset el "yes" "\u03bd\u03b1\u03b9" -} - diff --git a/ext/tk/sample/msgs_tk/en.msg b/ext/tk/sample/msgs_tk/en.msg deleted file mode 100644 index de586d195e..0000000000 --- a/ext/tk/sample/msgs_tk/en.msg +++ /dev/null @@ -1,83 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset en "Application Error" - ::msgcat::mcset en "Blue" - ::msgcat::mcset en "Color" - ::msgcat::mcset en "Delete" - ::msgcat::mcset en "Error" - ::msgcat::mcset en "Green" - ::msgcat::mcset en "Red" - ::msgcat::mcset en "blue" - ::msgcat::mcset en "green" - ::msgcat::mcset en "red" -} - -namespace eval ::tk { - ::msgcat::mcset en "&Abort" - ::msgcat::mcset en "About..." - ::msgcat::mcset en "All Files" - ::msgcat::mcset en "Application Error" - ::msgcat::mcset en "&Blue" - ::msgcat::mcset en "&Cancel" - ::msgcat::mcset en "Cannot change to the directory \"%1\$s\".\nPermission denied." - ::msgcat::mcset en "Choose Directory" - ::msgcat::mcset en "Clear" - ::msgcat::mcset en "Color" - ::msgcat::mcset en "Console" - ::msgcat::mcset en "Copy" - ::msgcat::mcset en "Cut" - ::msgcat::mcset en "Delete" - ::msgcat::mcset en "Details >>" - ::msgcat::mcset en "Directory \"%1\$s\" does not exist." - ::msgcat::mcset en "&Directory:" - ::msgcat::mcset en "Error: %1\$s" - ::msgcat::mcset en "Exit" - ::msgcat::mcset en "File \"%1\$s\" already exists.\nDo you want to overwrite it?" - ::msgcat::mcset en "File \"%1\$s\" already exists.\n\n" - ::msgcat::mcset en "File \"%1\$s\" does not exist." - ::msgcat::mcset en "File &name:" - ::msgcat::mcset en "File &names:" - ::msgcat::mcset en "Files of &type:" - ::msgcat::mcset en "Fi&les:" - ::msgcat::mcset en "&Filter" - ::msgcat::mcset en "Fil&ter:" - ::msgcat::mcset en "&Green" - ::msgcat::mcset en "Hi" - ::msgcat::mcset en "Hide Console" - ::msgcat::mcset en "&Ignore" - ::msgcat::mcset en "Invalid file name \"%1\$s\"." - ::msgcat::mcset en "Log Files" - ::msgcat::mcset en "&No" - ::msgcat::mcset en "&OK" - ::msgcat::mcset en "Ok" - ::msgcat::mcset en "Open" - ::msgcat::mcset en "&Open" - ::msgcat::mcset en "Open Multiple Files" - ::msgcat::mcset en "Paste" - ::msgcat::mcset en "Quit" - ::msgcat::mcset en "&Red" - ::msgcat::mcset en "Replace existing file?" - ::msgcat::mcset en "&Retry" - ::msgcat::mcset en "&Save" - ::msgcat::mcset en "Save As" - ::msgcat::mcset en "Save To Log" - ::msgcat::mcset en "Select Log File" - ::msgcat::mcset en "Select a file to source" - ::msgcat::mcset en "&Selection:" - ::msgcat::mcset en "Skip Messages" - ::msgcat::mcset en "Source..." - ::msgcat::mcset en "Tcl Scripts" - ::msgcat::mcset en "Tcl for Windows" - ::msgcat::mcset en "Text Files" - ::msgcat::mcset en "&Yes" - ::msgcat::mcset en "abort" - ::msgcat::mcset en "blue" - ::msgcat::mcset en "cancel" - ::msgcat::mcset en "extension" - ::msgcat::mcset en "extensions" - ::msgcat::mcset en "green" - ::msgcat::mcset en "ignore" - ::msgcat::mcset en "ok" - ::msgcat::mcset en "red" - ::msgcat::mcset en "retry" - ::msgcat::mcset en "yes" -} diff --git a/ext/tk/sample/msgs_tk/en_gb.msg b/ext/tk/sample/msgs_tk/en_gb.msg deleted file mode 100644 index 1aa5b49380..0000000000 --- a/ext/tk/sample/msgs_tk/en_gb.msg +++ /dev/null @@ -1,7 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset en_gb Color Colour -} - -namespace eval ::tk { - ::msgcat::mcset en_gb Color Colour -} diff --git a/ext/tk/sample/msgs_tk/eo.msg b/ext/tk/sample/msgs_tk/eo.msg deleted file mode 100644 index e683cef297..0000000000 --- a/ext/tk/sample/msgs_tk/eo.msg +++ /dev/null @@ -1,87 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset eo "Application Error" "Aplikoerraro" - ::msgcat::mcset eo "Blue" "Blua" - ::msgcat::mcset eo "Color" "Farbo" - ::msgcat::mcset eo "Delete" "Forprenu" - ::msgcat::mcset eo "Error" "Eraro" - ::msgcat::mcset eo "Exit" "Eliru" - ::msgcat::mcset eo "Green" "Verda" - ::msgcat::mcset eo "Red" "Rosa" - ::msgcat::mcset eo "blue" "blua" - ::msgcat::mcset eo "green" "verda" - ::msgcat::mcset eo "red" "ru\u011da" -} - -namespace eval ::tk { - ::msgcat::mcset eo "&Abort" "&\u0108esigo" - ::msgcat::mcset eo "&About..." "Pri..." - ::msgcat::mcset eo "All Files" "\u0108ioj dosieroj" - ::msgcat::mcset eo "Application Error" "Aplikoerraro" - ::msgcat::mcset eo "&Blue" "&Blua" - ::msgcat::mcset eo "&Cancel" "&Rezignu" - ::msgcat::mcset eo "Cannot change to the directory \"%1\$s\".\nPermission denied." "Neeble \u0109angi al dosierulon \"%1\$s\".\nVi ne rajtas tion." - ::msgcat::mcset eo "Choose Directory" "Elektu Dosierujo" - ::msgcat::mcset eo "&Clear" "&Klaru" - ::msgcat::mcset eo "&Clear Console" "&Klaru konzolon" - ::msgcat::mcset eo "Color" "Farbo" - ::msgcat::mcset eo "Console" "Konzolo" - ::msgcat::mcset eo "&Copy" "&Kopiu" - ::msgcat::mcset eo "Cu&t" "&Enpo\u015digu" - ::msgcat::mcset eo "&Delete" "&Forprenu" - ::msgcat::mcset eo "Details >>" "Detaloj >>" - ::msgcat::mcset eo "Directory \"%1\$s\" does not exist." "La dosierujo \"%1\$s\" ne ekzistas." - ::msgcat::mcset eo "&Directory:" "&Dosierujo:" - ::msgcat::mcset eo "&Edit" "&Redaktu" - ::msgcat::mcset eo "Error: %1\$s" "Eraro: %1\$s" - ::msgcat::mcset eo "E&xit" "&Eliru" - ::msgcat::mcset eo "&File" "&Dosiero" - ::msgcat::mcset eo "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "La dosiero \"%1\$s\" jam ekzistas.\n\u0108u vi volas anstata\u00fbigi la dosieron?" - ::msgcat::mcset eo "File \"%1\$s\" already exists.\n\n" "La dosiero \"%1\$s\" jam egzistas. \n\n" - ::msgcat::mcset eo "File \"%1\$s\" does not exist." "La dosierp \"%1\$s\" ne estas." - ::msgcat::mcset eo "File &name:" "Dosiero&nomo:" - ::msgcat::mcset eo "File &names:" "Dosiero&nomoj:" - ::msgcat::mcset eo "Files of &type:" "Dosieroj de &Typo:" - ::msgcat::mcset eo "Fi&les:" "Do&sieroj:" - ::msgcat::mcset eo "&Filter" "&Filtrilo" - ::msgcat::mcset eo "Fil&ter:" "&Filtrilo:" - ::msgcat::mcset eo "&Green" "&Verda" - ::msgcat::mcset eo "&Help" "&Helpu" - ::msgcat::mcset eo "Hi" "Saluton" - ::msgcat::mcset eo "&Hide Console" "&Ka\u015du konzolon" - ::msgcat::mcset eo "&Ignore" "&Ignoru" - ::msgcat::mcset eo "Invalid file name \"%1\$s\"." "Malvalida dosieronomo \"%1\$s\"." - ::msgcat::mcset eo "Log Files" "Protokolo" - ::msgcat::mcset eo "&No" "&Ne" - ::msgcat::mcset eo "OK" - ::msgcat::mcset eo "Ok" - ::msgcat::mcset eo "Open" "Malfermu" - ::msgcat::mcset eo "&Open" "&Malfermu" - ::msgcat::mcset eo "Open Multiple Files" "Melfermu multan dosierojn" - ::msgcat::mcset eo "P&aste" "&Elpo\u015digi" - ::msgcat::mcset eo "&Quit" "&Finigu" - ::msgcat::mcset eo "&Red" "&Rosa" - ::msgcat::mcset eo "Replace existing file?" "\u0108u anstata\u00fbu ekzistantan dosieron?" - ::msgcat::mcset eo "&Retry" "&Ripetu" - ::msgcat::mcset eo "&Save" "&Savu" - ::msgcat::mcset eo "Save As" "Savu kiel" - ::msgcat::mcset eo "Save To Log" "Savu en protokolon" - ::msgcat::mcset eo "Select Log File" "Elektu prokolodosieron" - ::msgcat::mcset eo "Select a file to source" "Elektu dosieron por interpreti" - ::msgcat::mcset eo "&Selection:" "&Elekto:" - ::msgcat::mcset eo "Skip Messages" "transsaltu pluajn mesa\u011dojn" - ::msgcat::mcset eo "&Source..." "&Fontoprogramo..." - ::msgcat::mcset eo "Tcl Scripts" "Tcl-skriptoj" - ::msgcat::mcset eo "Tcl for Windows" "Tcl por vindoso" - ::msgcat::mcset eo "Text Files" "Tekstodosierojn" - ::msgcat::mcset eo "&Yes" "&Jes" - ::msgcat::mcset eo "abort" "\u0109esigo" - ::msgcat::mcset eo "blue" "blua" - ::msgcat::mcset eo "cancel" "rezignu" - ::msgcat::mcset eo "extension" "ekspansio" - ::msgcat::mcset eo "extensions" "ekspansioj" - ::msgcat::mcset eo "green" "verda" - ::msgcat::mcset eo "ignore" "ignorieren" - ::msgcat::mcset eo "red" "ru\u011da" - ::msgcat::mcset eo "retry" "ripetu" - ::msgcat::mcset eo "yes" "jes" -} diff --git a/ext/tk/sample/msgs_tk/es.msg b/ext/tk/sample/msgs_tk/es.msg deleted file mode 100644 index 62ce33d5cc..0000000000 --- a/ext/tk/sample/msgs_tk/es.msg +++ /dev/null @@ -1,84 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset es "Application Error" "Error de la aplicaci\u00f3n" - ::msgcat::mcset es "Blue" "Azul" - ::msgcat::mcset es "Color" "Color" - ::msgcat::mcset es "Delete" "Borrar" - ::msgcat::mcset es "Error" "Error" - ::msgcat::mcset es "Exit" "Salir" - ::msgcat::mcset es "Green" "Verde" - ::msgcat::mcset es "Red" "Rojo" - ::msgcat::mcset es "blue" "azul" - ::msgcat::mcset es "green" "verde" - ::msgcat::mcset es "red" "rojo" -} - -namespace eval ::tk { - ::msgcat::mcset es "&Abort" "&Abortar" - ::msgcat::mcset es "About..." "Acerca de ..." - ::msgcat::mcset es "All Files" "Todos los archivos" - ::msgcat::mcset es "Application Error" "Error de la aplicaci\u00f3n" - ::msgcat::mcset es "&Blue" "&Azul" - ::msgcat::mcset es "&Cancel" "&Cancelar" - ::msgcat::mcset es "Cannot change to the directory \"%1\$s\".\nPermission denied." "No es posible acceder al directorio \"%1\$s\".\nPermiso denegado." - ::msgcat::mcset es "Choose Directory" "Elegir directorio" - ::msgcat::mcset es "Clear" "Borrar" - ::msgcat::mcset es "Color" "Color" - ::msgcat::mcset es "Console" "Consola" - ::msgcat::mcset es "Copy" "Copiar" - ::msgcat::mcset es "Cut" "Cortar" - ::msgcat::mcset es "Delete" "Borrar" - ::msgcat::mcset es "Details >>" "Detalles >>" - ::msgcat::mcset es "Directory \"%1\$s\" does not exist." "El directorio \"%1\$s\" no existe." - ::msgcat::mcset es "&Directory:" "&Directorio:" - ::msgcat::mcset es "Error: %1\$s" "Error: %1\$s" - ::msgcat::mcset es "Exit" "Salir" - ::msgcat::mcset es "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "El archivo \"%1\$s\" ya existe.\nDesea sobreescribirlo?" - ::msgcat::mcset es "File \"%1\$s\" already exists.\n\n" "El archivo \"%1\$s\" ya existe.\n\n" - ::msgcat::mcset es "File \"%1\$s\" does not exist." "El archivo \"%1\$s\" no existe." - ::msgcat::mcset es "File &name:" "&Nombre de archivo:" - ::msgcat::mcset es "File &names:" "&Nombres de archivo:" - ::msgcat::mcset es "Files of &type:" "Archivos de &tipo:" - ::msgcat::mcset es "Fi&les:" "&Archivos:" - ::msgcat::mcset es "&Filter" "&Filtro" - ::msgcat::mcset es "Fil&ter:" "Fil&tro:" - ::msgcat::mcset es "&Green" "&Verde" - ::msgcat::mcset es "Hi" "Hola" - ::msgcat::mcset es "Hide Console" "Esconder la consola" - ::msgcat::mcset es "&Ignore" "&Ignorar" - ::msgcat::mcset es "Invalid file name \"%1\$s\"." "Nombre de archivo inv\u00e1lido \"%1\$s\"." - ::msgcat::mcset es "Log Files" "Ficheros de traza" - ::msgcat::mcset es "&No" "&No" - ::msgcat::mcset es "&OK" "&OK" - ::msgcat::mcset es "Ok" "Ok" - ::msgcat::mcset es "Open" "Abrir" - ::msgcat::mcset es "&Open" "&Abrir" - ::msgcat::mcset es "Open Multiple Files" "Abrir m\u00faltiples archivos" - ::msgcat::mcset es "Paste" "Pegar" - ::msgcat::mcset es "Quit" "Abandonar" - ::msgcat::mcset es "&Red" "&Rojo" - ::msgcat::mcset es "Replace existing file?" "Reemplazar el archivo existente?" - ::msgcat::mcset es "&Retry" "&Reintentar" - ::msgcat::mcset es "&Save" "&Salvar" - ::msgcat::mcset es "Save As" "Salvar como" - ::msgcat::mcset es "Save To Log" "Salvar al archivo de traza" - ::msgcat::mcset es "Select Log File" "Elegir un archivo de traza" - ::msgcat::mcset es "Select a file to source" "Seleccionar un archivo a evaluar" - ::msgcat::mcset es "&Selection:" "&Selecci\u00f3n:" - ::msgcat::mcset es "Skip Messages" "Omitir los mensajes" - ::msgcat::mcset es "Source..." "Evaluar..." - ::msgcat::mcset es "Tcl Scripts" "Scripts Tcl" - ::msgcat::mcset es "Tcl for Windows" "Tcl para Windows" - ::msgcat::mcset es "Text Files" "Archivos de texto" - ::msgcat::mcset es "&Yes" "&S\u00ed" - ::msgcat::mcset es "abort" "abortar" - ::msgcat::mcset es "blue" "azul" - ::msgcat::mcset es "cancel" "cancelar" - ::msgcat::mcset es "extension" "extensi\u00f3n" - ::msgcat::mcset es "extensions" "extensiones" - ::msgcat::mcset es "green" "verde" - ::msgcat::mcset es "ignore" "ignorar" - ::msgcat::mcset es "ok" "ok" - ::msgcat::mcset es "red" "rojo" - ::msgcat::mcset es "retry" "reintentar" - ::msgcat::mcset es "yes" "s\u00ed" -} diff --git a/ext/tk/sample/msgs_tk/fr.msg b/ext/tk/sample/msgs_tk/fr.msg deleted file mode 100644 index ebbba48ca1..0000000000 --- a/ext/tk/sample/msgs_tk/fr.msg +++ /dev/null @@ -1,84 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset fr "Application Error" "Erreur d'application" - ::msgcat::mcset fr "Blue" "Bleu" - ::msgcat::mcset fr "Color" "Couleur" - ::msgcat::mcset fr "Delete" "Effacer" - ::msgcat::mcset fr "Error" "Erreur" - ::msgcat::mcset fr "Exit" "Quitter" - ::msgcat::mcset fr "Green" "Vert" - ::msgcat::mcset fr "Red" "Rouge" - ::msgcat::mcset fr "blue" "bleu" - ::msgcat::mcset fr "green" "vert" - ::msgcat::mcset fr "red" "rouge" -} - -namespace eval ::tk { - ::msgcat::mcset fr "&Abort" "&Annuler" - ::msgcat::mcset fr "About..." "\u00c0 propos..." - ::msgcat::mcset fr "All Files" "Tous les fichiers" - ::msgcat::mcset fr "Application Error" "Erreur d'application" - ::msgcat::mcset fr "&Blue" "&Bleu" - ::msgcat::mcset fr "&Cancel" "&Annuler" - ::msgcat::mcset fr "Cannot change to the directory \"%1\$s\".\nPermission denied." "Impossible d'acc\u00e9der au r\u00e9pertoire \"%1\$s\".\nPermission refus\u00e9e." - ::msgcat::mcset fr "Choose Directory" "Choisir r\u00e9pertoire" - ::msgcat::mcset fr "Clear" "Effacer" - ::msgcat::mcset fr "Color" "Couleur" - ::msgcat::mcset fr "Console" - ::msgcat::mcset fr "Copy" "Copier" - ::msgcat::mcset fr "Cut" "Couper" - ::msgcat::mcset fr "Delete" "Effacer" - ::msgcat::mcset fr "Details >>" "D\u00e9tails >>" - ::msgcat::mcset fr "Directory \"%1\$s\" does not exist." "Le r\u00e9pertoire \"%1\$s\" n'existe pas." - ::msgcat::mcset fr "&Directory:" "&R\u00e9pertoire:" - ::msgcat::mcset fr "Error: %1\$s" "Erreur: %1\$s" - ::msgcat::mcset fr "Exit" "Quitter" - ::msgcat::mcset fr "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Le fichier \"%1\$s\" existe d\u00e9j\u00e0.\nVoulez-vous l'\u00e9craser?" - ::msgcat::mcset fr "File \"%1\$s\" already exists.\n\n" "Le fichier \"%1\$s\" existe d\u00e9j\u00e0.\n\n" - ::msgcat::mcset fr "File \"%1\$s\" does not exist." "Le fichier \"%1\$s\" n'existe pas." - ::msgcat::mcset fr "File &name:" "&Nom de fichier:" - ::msgcat::mcset fr "File &names:" "&Noms de fichiers:" - ::msgcat::mcset fr "Files of &type:" "&Type de fichiers:" - ::msgcat::mcset fr "Fi&les:" "Fich&iers:" - ::msgcat::mcset fr "&Filter" "&Filtre" - ::msgcat::mcset fr "Fil&ter:" "Fil&tre:" - ::msgcat::mcset fr "&Green" "&Vert" - ::msgcat::mcset fr "Hi" "Salut" - ::msgcat::mcset fr "Hide Console" "Cacher la Console" - ::msgcat::mcset fr "&Ignore" "&Ignorer" - ::msgcat::mcset fr "Invalid file name \"%1\$s\"." "Nom de fichier invalide \"%1\$s\"." - ::msgcat::mcset fr "Log Files" "Fichiers de trace" - ::msgcat::mcset fr "&No" "&Non" - ::msgcat::mcset fr "&OK" - ::msgcat::mcset fr "Ok" - ::msgcat::mcset fr "Open" "Ouvrir" - ::msgcat::mcset fr "&Open" "&Ouvrir" - ::msgcat::mcset fr "Open Multiple Files" "Ouvrir plusieurs fichiers" - ::msgcat::mcset fr "Paste" "Coller" - ::msgcat::mcset fr "Quit" "Quitter" - ::msgcat::mcset fr "&Red" "&Rouge" - ::msgcat::mcset fr "Replace existing file?" "Remplacer le fichier existant?" - ::msgcat::mcset fr "&Retry" "&R\u00e9-essayer" - ::msgcat::mcset fr "&Save" "&Sauvegarder" - ::msgcat::mcset fr "Save As" "Sauvegarder sous" - ::msgcat::mcset fr "Save To Log" "Sauvegarde au fichier de trace" - ::msgcat::mcset fr "Select Log File" "Choisir un fichier de trace" - ::msgcat::mcset fr "Select a file to source" "Choisir un fichier \u00e0 \u00e9valuer" - ::msgcat::mcset fr "&Selection:" "&S\u00e9lection:" - ::msgcat::mcset fr "Skip Messages" "Omettre les messages" - ::msgcat::mcset fr "Source..." "\u00c9valuer..." - ::msgcat::mcset fr "Tcl Scripts" "Scripts Tcl" - ::msgcat::mcset fr "Tcl for Windows" "Tcl pour Windows" - ::msgcat::mcset fr "Text Files" "Fichiers texte" - ::msgcat::mcset fr "&Yes" "&Oui" - ::msgcat::mcset fr "abort" "abandonner" - ::msgcat::mcset fr "blue" "bleu" - ::msgcat::mcset fr "cancel" "annuler" - ::msgcat::mcset fr "extension" - ::msgcat::mcset fr "extensions" - ::msgcat::mcset fr "green" "vert" - ::msgcat::mcset fr "ignore" "ignorer" - ::msgcat::mcset fr "ok" - ::msgcat::mcset fr "red" "rouge" - ::msgcat::mcset fr "retry" "r\u00e9essayer" - ::msgcat::mcset fr "yes" "oui" -} diff --git a/ext/tk/sample/msgs_tk/it.msg b/ext/tk/sample/msgs_tk/it.msg deleted file mode 100644 index b144fcc073..0000000000 --- a/ext/tk/sample/msgs_tk/it.msg +++ /dev/null @@ -1,84 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset it "Application Error" "Errore dell' applicazione" - ::msgcat::mcset it "Blue" "Blu" - ::msgcat::mcset it "Color" "Colore" - ::msgcat::mcset it "Delete" "Incolla" - ::msgcat::mcset it "Error" "Errore" - ::msgcat::mcset it "Exit" "Esci" - ::msgcat::mcset it "Green" "Verde" - ::msgcat::mcset it "Red" "Rosso" - ::msgcat::mcset it "blue" "blu" - ::msgcat::mcset it "green" "verde" - ::msgcat::mcset it "red" "rosso" -} - -namespace eval ::tk { - ::msgcat::mcset it "&Abort" "&Interrompi" - ::msgcat::mcset it "About..." "Informazioni ..." - ::msgcat::mcset it "All Files" "Tutti i file" - ::msgcat::mcset it "Application Error" "Errore dell' applicazione" - ::msgcat::mcset it "&Blue" "&Blu" - ::msgcat::mcset it "&Cancel" "&Annulla" - ::msgcat::mcset it "Cannot change to the directory \"%1\$s\".\nPermission denied." "Impossibile accedere alla directory \"%1\$s\".\nPermesso negato." - ::msgcat::mcset it "Choose Directory" "Scegli directory" - ::msgcat::mcset it "Clear" "Azzera" - ::msgcat::mcset it "Color" "Colore" - ::msgcat::mcset it "Console" - ::msgcat::mcset it "Copy" "Copia" - ::msgcat::mcset it "Cut" "Taglia" - ::msgcat::mcset it "Delete" "Incolla" - ::msgcat::mcset it "Details >>" "Dettagli >>" - ::msgcat::mcset it "Directory \"%1\$s\" does not exist." "La directory \"%1\$s\" non esiste." - ::msgcat::mcset it "&Directory:" - ::msgcat::mcset it "Error: %1\$s" "Errore: %1\$s" - ::msgcat::mcset it "Exit" "Esci" - ::msgcat::mcset it "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Il file \"%1\$s\" esiste gi\u00e0.\nVuoi sovrascriverlo?" - ::msgcat::mcset it "File \"%1\$s\" already exists.\n\n" "Il file \"%1\$s\" esiste gi\u00e0.\n\n" - ::msgcat::mcset it "File \"%1\$s\" does not exist." "Il file \"%1\$s\" non esiste." - ::msgcat::mcset it "File &name:" "&Nome del file:" - ::msgcat::mcset it "File &names:" "&Nomi dei file:" - ::msgcat::mcset it "Files of &type:" "File di &tipo:" - ::msgcat::mcset it "Fi&les:" "Fi&le:" - ::msgcat::mcset it "&Filter" "&Filtro" - ::msgcat::mcset it "Fil&ter:" "Fil&tro:" - ::msgcat::mcset it "&Green" "&Verde" - ::msgcat::mcset it "Hi" "Salve" - ::msgcat::mcset it "Hide Console" "Nascondi la console" - ::msgcat::mcset it "&Ignore" "&Ignora" - ::msgcat::mcset it "Invalid file name \"%1\$s\"." "Nome di file non valido \"%1\$s\"." - ::msgcat::mcset it "Log Files" "File di log" - ::msgcat::mcset it "&No" - ::msgcat::mcset it "&OK" - ::msgcat::mcset it "Ok" - ::msgcat::mcset it "&Open" "A&pri" - ::msgcat::mcset it "Open" "Apri" - ::msgcat::mcset it "Open Multiple Files" "Apri file multipli" - ::msgcat::mcset it "Paste" "Incolla" - ::msgcat::mcset it "Quit" "Esci" - ::msgcat::mcset it "&Red" "&Rosso" - ::msgcat::mcset it "Replace existing file?" "Sostituisci il file esistente?" - ::msgcat::mcset it "&Retry" "&Riprova" - ::msgcat::mcset it "&Save" "&Salva" - ::msgcat::mcset it "Save As" "Salva come" - ::msgcat::mcset it "Save To Log" "Salva il log" - ::msgcat::mcset it "Select Log File" "Scegli un file di log" - ::msgcat::mcset it "Select a file to source" "Scegli un file da eseguire" - ::msgcat::mcset it "&Selection:" "&Selezione:" - ::msgcat::mcset it "Skip Messages" "Salta i messaggi" - ::msgcat::mcset it "Source..." "Esegui..." - ::msgcat::mcset it "Tcl Scripts" "Scripts Tcl" - ::msgcat::mcset it "Tcl for Windows" "Tcl per Windows" - ::msgcat::mcset it "Text Files" "File di testo" - ::msgcat::mcset it "&Yes" "&Si" - ::msgcat::mcset it "abort" "interrompi" - ::msgcat::mcset it "blue" "blu" - ::msgcat::mcset it "cancel" "annulla" - ::msgcat::mcset it "extension" "estensione" - ::msgcat::mcset it "extensions" "estensioni" - ::msgcat::mcset it "green" "verde" - ::msgcat::mcset it "ignore" "ignora" - ::msgcat::mcset it "ok" - ::msgcat::mcset it "red" "rosso" - ::msgcat::mcset it "retry" "riprova" - ::msgcat::mcset it "yes" "si" -} diff --git a/ext/tk/sample/msgs_tk/ja.msg b/ext/tk/sample/msgs_tk/ja.msg deleted file mode 100644 index 44a25839db..0000000000 --- a/ext/tk/sample/msgs_tk/ja.msg +++ /dev/null @@ -1,13 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset ja "Application Error" "\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30A8\u30E9\u30FC" - ::msgcat::mcset ja "Blue" "\u9752" - ::msgcat::mcset ja "Color" "\u80CC\u666F\u8272" - ::msgcat::mcset ja "Delete" "\u6D88\u53BB" - ::msgcat::mcset ja "Error" "\u30A8\u30E9\u30FC" - ::msgcat::mcset ja "Exit" "\u7D42\u4E86" - ::msgcat::mcset ja "Green" "\u7DD1" - ::msgcat::mcset ja "Red" "\u8D64" - ::msgcat::mcset ja "blue" "\u9752" - ::msgcat::mcset ja "green" "\u7DD1" - ::msgcat::mcset ja "red" "\u8D64" -} diff --git a/ext/tk/sample/msgs_tk/license.terms b/ext/tk/sample/msgs_tk/license.terms deleted file mode 100644 index c0a44d3fc2..0000000000 --- a/ext/tk/sample/msgs_tk/license.terms +++ /dev/null @@ -1,39 +0,0 @@ -This software is copyrighted by the Regents of the University of -California, Sun Microsystems, Inc., and other parties. The following -terms apply to all files associated with the software unless explicitly -disclaimed in individual files. - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - -GOVERNMENT USE: If you are acquiring this software on behalf of the -U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal -Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you -are acquiring the software on behalf of the Department of Defense, the -software shall be classified as "Commercial Computer Software" and the -Government shall have only "Restricted Rights" as defined in Clause -252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the -authors grant the U.S. Government and others acting in its behalf -permission to use and distribute the software in accordance with the -terms specified in this license. diff --git a/ext/tk/sample/msgs_tk/nl.msg b/ext/tk/sample/msgs_tk/nl.msg deleted file mode 100644 index d9642e808c..0000000000 --- a/ext/tk/sample/msgs_tk/nl.msg +++ /dev/null @@ -1,123 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset nl "Application Error" "Toepassingsfout" - ::msgcat::mcset nl "Blue" "Blauw" - ::msgcat::mcset nl "Color" "Kleur" - ::msgcat::mcset nl "Delete" "Wissen" - ::msgcat::mcset nl "Error" "Fout" - ::msgcat::mcset nl "Exit" "Be\u00ebindigen" - ::msgcat::mcset nl "Green" "Groen" - ::msgcat::mcset nl "Red" "Rood" - ::msgcat::mcset nl "blue" "blauw" - ::msgcat::mcset nl "green" "groen" - ::msgcat::mcset nl "red" "rood" -} - -namespace eval ::tk { - ::msgcat::mcset nl "\"%1\$s\" must be an absolute pathname" "\"%1\$s\" moet een absolute pad-naam zijn" - ::msgcat::mcset nl "%1\$s is not a toplevel window" "%1\$s is geen toplevel window" - ::msgcat::mcset nl ", or" ", of" - ::msgcat::mcset nl "-default, -icon, -message, -parent, -title, or -type" "-default, -icon, -message, -parent, -title, of -type" - ::msgcat::mcset nl "-initialdir, -mustexist, -parent, or -title" "-initialdir, -mustexist, -parent, of -title" - ::msgcat::mcset nl "&Abort" "&Afbreken" - ::msgcat::mcset nl "About..." "Over..." - ::msgcat::mcset nl "All Files" "Alle Bestanden" - ::msgcat::mcset nl "Application Error" "Toepassingsfout" - ::msgcat::mcset nl "&Blue" "&Blauw" - ::msgcat::mcset nl "&Cancel" "&Annuleren" - ::msgcat::mcset nl "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kan niet naar map \"%1\$s\" gaan.\nU heeft hiervoor geen toestemming." - ::msgcat::mcset nl "Choose Directory" "Kies map" - ::msgcat::mcset nl "Clear" "Wissen" - ::msgcat::mcset nl "Clear entry, Press OK; Enter %1\$s, press OK" "Wis veld, Druk op OK; typ %1\$s in, druk op OK" - ::msgcat::mcset nl "&Clear Console" "&Wis Console" - ::msgcat::mcset nl "Color" "Kleur" - ::msgcat::mcset nl "Console" - ::msgcat::mcset nl "Copy" "Kopi\u00ebren" - ::msgcat::mcset nl "Cut" "Knippen" - ::msgcat::mcset nl "Delete" "Wissen" - ::msgcat::mcset nl "Details" - ::msgcat::mcset nl "Details >>" - ::msgcat::mcset nl "Directory \"%1\$s\" does not exist." "Map \"%1\$s\" bestaat niet." - ::msgcat::mcset nl "&Directory:" "&Map:" - ::msgcat::mcset nl "Edit" "Bewerken" - ::msgcat::mcset nl "Enter \"%1\$s\", press OK" "Typ \"%1\$s\", druk op OK" - ::msgcat::mcset nl "Enter \"%1\$s\", press OK, enter \"%2\$s\", press OK" "Typ \"%1\$s\", druk op OK, typ \"%2\$s\", druk op OK" - ::msgcat::mcset nl "Error: %1\$s" "Fout: %1\$s" - ::msgcat::mcset nl "Exit" "Be\u00ebindigen" - ::msgcat::mcset nl "File" "Bestand" - ::msgcat::mcset nl "File \"%1\$s\" already exists.\n\n" "Bestand \"%1\$s\" bestaat al.\n\n" - ::msgcat::mcset nl "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Bestand \"%1\$s\" bestaat al.\nWilt u het overschrijven?" - ::msgcat::mcset nl "File \"%1\$s\" does not exist." "Bestand \"%1\$s\" bestaat niet." - ::msgcat::mcset nl "File &name:" "Bestands&naam:" - ::msgcat::mcset nl "File &names:" "Bestands&namen:" - ::msgcat::mcset nl "Files of &type:" "Bestanden van het &type:" - ::msgcat::mcset nl "Fi&les:" "&Bestanden:" - ::msgcat::mcset nl "&Filter" - ::msgcat::mcset nl "Fil&ter:" - ::msgcat::mcset nl "&Green" "&Groen" - ::msgcat::mcset nl "Hi" "H\u00e9" - ::msgcat::mcset nl "Hide Console" "Verberg Console" - ::msgcat::mcset nl "&Ignore" "&Negeren" - ::msgcat::mcset nl "Invalid file name \"%1\$s\"." "Ongeldige bestandsnaam \"%1\$s\"." - ::msgcat::mcset nl "Log Files" "Log Bestanden" - ::msgcat::mcset nl "&No" "&Nee" - ::msgcat::mcset nl "&OK" - ::msgcat::mcset nl "Ok" - ::msgcat::mcset nl "&Open" "&Openen" - ::msgcat::mcset nl "Open" "Openen" - ::msgcat::mcset nl "Open Multiple Files" "Open meerdere bestanden" - ::msgcat::mcset nl "Paste" "Plakken" - ::msgcat::mcset nl "Please press %1\$s" "Druk op %1\$s, A.U.B." - ::msgcat::mcset nl "Please press ok" "Druk op ok, A.U.B." - ::msgcat::mcset nl "Press Cancel" "Druk op Annuleren" - ::msgcat::mcset nl "Press Ok" "Druk op Ok" - ::msgcat::mcset nl "Quit" "Stoppen" - ::msgcat::mcset nl "&Red" "&Rood" - ::msgcat::mcset nl "Replace existing file?" "Vervang bestaand bestand?" - ::msgcat::mcset nl "&Retry" "&Herhalen" - ::msgcat::mcset nl "&Save" "Op&slaan" - ::msgcat::mcset nl "Save As" "Opslaan als" - ::msgcat::mcset nl "Save To Log" "Opslaan naar Log" - ::msgcat::mcset nl "Select Log File" "Selecteer Log bestand" - ::msgcat::mcset nl "Select a file to source" "Selecteer bronbestand" - ::msgcat::mcset nl "&Selection:" "&Selectie:" - ::msgcat::mcset nl "Skip Messages" "Berichten overslaan" - ::msgcat::mcset nl "Source..." "Bron..." - ::msgcat::mcset nl "Tcl Scripts" - ::msgcat::mcset nl "Tcl for Windows" "Tcl voor Windows" - ::msgcat::mcset nl "Text Files" "Tekstbestanden" - ::msgcat::mcset nl "&Yes" "&Ja" - ::msgcat::mcset nl "abort" "afbreken" - ::msgcat::mcset nl "abort, retry, ignore, ok, cancel, no, or yes" "afbreken, opnieuw, negeren, ok, annuleren, nee, of ja" - ::msgcat::mcset nl "abortretryignore, ok, okcancel, retrycancel, yesno, or yesnocancel" "abortretryignore, ok, okcancel, retrycancel, yesno, of yesnocancel" - ::msgcat::mcset nl "bad %1\$s value \"%2\$s\": must be %3\$s" "verkeerde %1\$s waarde \"%2\$s\": moet zijn %3\$s" - ::msgcat::mcset nl "bad file type \"%1\$s\", should be" "verkeerd bestandstype \"%1\$s\", moet zijn" - ::msgcat::mcset nl "bad option \"%1\$s\": should be %2\$s" "verkeerde optie \"%1\$s\": moet zijn %2\$s" - ::msgcat::mcset nl "bad window path name \"%1\$s\"" "verkeerde window-padnaam \"%1\$s\"" - ::msgcat::mcset nl "blue" "blauw" - ::msgcat::mcset nl "can't post %1\$s: it isn't a descendant of %2\$s (this is a new requirement in Tk versions 3.0 and later)" "kan %1\$s niet verzenden: het is geen afstammeling van %2\$s (dit is een nieuwe eis in Tk versies 3.0 en later)" - ::msgcat::mcset nl "cancel" "annuleren" - ::msgcat::mcset nl "default button index greater than number of buttons specified for tk_dialog" "default knop index is groter dan het aantal knoppen beschikbaar voor tk_dialog" - ::msgcat::mcset nl "display name to use (current one otherwise)" "te gebruiken schermnaam (anders huidige scherm)" - ::msgcat::mcset nl "error, info, question, or warning" "error, info, question, of warning" - ::msgcat::mcset nl "extension" - ::msgcat::mcset nl "extensions" - ::msgcat::mcset nl "focus group \"%1\$s\" doesn't exist" "focusgroep \"%1\$s\" bestaat niet" - ::msgcat::mcset nl "green" "groen" - ::msgcat::mcset nl "history event %1\$s" - ::msgcat::mcset nl "ignore" "negeren" - ::msgcat::mcset nl "invalid default button \"%1\$s\"" "ongeldige default knop \"%1\$s\"" - ::msgcat::mcset nl "macType" - ::msgcat::mcset nl "macTypes" - ::msgcat::mcset nl "must specify a background color" "een achtergrondkleur is verplicht" - ::msgcat::mcset nl "name of the slave interpreter" "naam van de slaaf-interpreter" - ::msgcat::mcset nl "no winfo screen . nor env(DISPLAY)" "geen winfo scherm . noch env(DISPLAY)" - ::msgcat::mcset nl "ok" - ::msgcat::mcset nl "red" "rood" - ::msgcat::mcset nl "retry" "opnieuw" - ::msgcat::mcset nl "should contain 5 or 4 elements" "moet 4 of 5 elementen bevatten" - ::msgcat::mcset nl "spec" - ::msgcat::mcset nl "tk_chooseDirectory command" "tk_chooseDirectory opdracht" - ::msgcat::mcset nl "tk_chooseDirectory command, cancel gives null" "tk_chooseDirectory opdracht, annuleren geeft lege waarde" - ::msgcat::mcset nl "tk_chooseDirectory command, initialdir" "tk_chooseDirectory opdracht, initi\u00eble map" - ::msgcat::mcset nl "yes" "ja" -} diff --git a/ext/tk/sample/msgs_tk/pl.msg b/ext/tk/sample/msgs_tk/pl.msg deleted file mode 100644 index 2699e42bdf..0000000000 --- a/ext/tk/sample/msgs_tk/pl.msg +++ /dev/null @@ -1,87 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset pl "Application Error" "Bl\u0105d w Programie" - ::msgcat::mcset pl "Blue" "Niebieski" - ::msgcat::mcset pl "Color" "Kolor" - ::msgcat::mcset pl "Delete" "Usu\u0144" - ::msgcat::mcset pl "Error" "B\u0142\u0105d" - ::msgcat::mcset pl "Exit" "Zako\u0144cz" - ::msgcat::mcset pl "Green" "Zielony" - ::msgcat::mcset pl "Red" "Czerwonz" - ::msgcat::mcset pl "blue" "niebieski" - ::msgcat::mcset pl "green" "zielony" - ::msgcat::mcset pl "red" "czerwony" -} - -namespace eval ::tk { - ::msgcat::mcset pl "&Abort" "&Anuluj" - ::msgcat::mcset pl "&About..." "O Programie..." - ::msgcat::mcset pl "All Files" "Wszystkie pliki" - ::msgcat::mcset pl "Application Error" "Bl\u0105d w Programie" - ::msgcat::mcset pl "&Blue" "&Niebieski" - ::msgcat::mcset pl "&Cancel" "&Anuluj" - ::msgcat::mcset pl "Cannot change to the directory \"%1\$s\".\nPermission denied." "Katalog \"%1\$s\" nie mo\u017ce zosta\u0107 odczytany lub nie istnieje." - ::msgcat::mcset pl "Choose Directory" "Wybierz katalog" - ::msgcat::mcset pl "&Clear" "&Wyczy\u015b\u0107" - ::msgcat::mcset pl "&Clear Console" "&Wyczy\u015b\u0107 konsol\u0119" - ::msgcat::mcset pl "Color" "Kolor" - ::msgcat::mcset pl "Console" "Konsola" - ::msgcat::mcset pl "&Copy" "&Kopiuj" - ::msgcat::mcset pl "Cu&t" "&Wytnij" - ::msgcat::mcset pl "&Delete" "&Usu\u0144" - ::msgcat::mcset pl "Details >>" "Detale >>" - ::msgcat::mcset pl "Directory \"%1\$s\" does not exist." "Katalog \"%1\$s\" nie istniej." - ::msgcat::mcset pl "&Directory:" "&Katalog:" - ::msgcat::mcset pl "&Edit" "&Edytuj" - ::msgcat::mcset pl "Error: %1\$s" "B\u0142\u0105d: %1\$s" - ::msgcat::mcset pl "E&xit" "&Zako\u0144cz" - ::msgcat::mcset pl "&File" "&Plik" - ::msgcat::mcset pl "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Plik \"%1\$s\" ju\u017c istnieje.\nCzy chcesz go zast\u0105pi\u0107?" - ::msgcat::mcset pl "File \"%1\$s\" already exists.\n\n" "Plik \"%1\$s\" ju\u017c istnieje. \n\n" - ::msgcat::mcset pl "File \"%1\$s\" does not exist." "Plik \"%1\$s\" nie istnieje." - ::msgcat::mcset pl "File &name:" "Nazwa &pliku:" - ::msgcat::mcset pl "File &names:" "Nazwy &plik\u00f3w:" - ::msgcat::mcset pl "Files of &type:" "Pliki &typu:" - ::msgcat::mcset pl "Fi&les:" "Pli&ki:" - ::msgcat::mcset pl "&Filter" "&Filter" - ::msgcat::mcset pl "Fil&ter:" "&Filter:" - ::msgcat::mcset pl "&Green" "&Zielony" - ::msgcat::mcset pl "&Help" "&Pomoc" - ::msgcat::mcset pl "Hi" "Witaj" - ::msgcat::mcset pl "&Hide Console" "&Schowaj konsol\u0119" - ::msgcat::mcset pl "&Ignore" "&Ignoruj" - ::msgcat::mcset pl "Invalid file name \"%1\$s\"." "Niew\u0142a\u015bciwa nazwa pliku \"%1\$s\"." - ::msgcat::mcset pl "Log Files" "Protoko\u0142uj" - ::msgcat::mcset pl "&No" "&Nie" - ::msgcat::mcset pl "OK" - ::msgcat::mcset pl "Ok" - ::msgcat::mcset pl "Open" "Wczytaj" - ::msgcat::mcset pl "&Open" "&Wczytaj" - ::msgcat::mcset pl "Open Multiple Files" "Wczytuj wiele plik\u00f3w" - ::msgcat::mcset pl "P&aste" "&Wklej" - ::msgcat::mcset pl "&Quit" "&Zako\u0144cz" - ::msgcat::mcset pl "&Red" "&Czerwonz" - ::msgcat::mcset pl "Replace existing file?" "Czy zost\u0105pi\u0107 instniej\u0105cy plik?" - ::msgcat::mcset pl "&Retry" "&Powt\u00f3rz" - ::msgcat::mcset pl "&Save" "&Zapisz" - ::msgcat::mcset pl "Save As" "Zapisz jako" - ::msgcat::mcset pl "Save To Log" "Wpisz do protoko\u0142u" - ::msgcat::mcset pl "Select Log File" "Wybierz plik proko\u0142u" - ::msgcat::mcset pl "Select a file to source" "Wybierz plik do wykonania" - ::msgcat::mcset pl "&Selection:" "&Wyb\u00f3r:" - ::msgcat::mcset pl "Skip Messages" "Omi\u0144 pozosta\u0142e komunikaty" - ::msgcat::mcset pl "&Source..." "&Kod \u017ar\u00f3d\u0142owy..." - ::msgcat::mcset pl "Tcl Scripts" "Tcl-skrypty" - ::msgcat::mcset pl "Tcl for Windows" "Tcl dla Okienek (Windows)" - ::msgcat::mcset pl "Text Files" "Pliki Tekstowe" - ::msgcat::mcset pl "&Yes" "&Tak" - ::msgcat::mcset pl "abort" "zako\u0144cz" - ::msgcat::mcset pl "blue" "niebieski" - ::msgcat::mcset pl "cancel" "anuluj" - ::msgcat::mcset pl "extension" "rozszerzenie" - ::msgcat::mcset pl "extensions" "rozszerzenia" - ::msgcat::mcset pl "green" "zielony" - ::msgcat::mcset pl "ignore" "ignoruj" - ::msgcat::mcset pl "red" "czerwony" - ::msgcat::mcset pl "retry" "potw\u00f3rz" - ::msgcat::mcset pl "yes" "tak" -} diff --git a/ext/tk/sample/msgs_tk/ru.msg b/ext/tk/sample/msgs_tk/ru.msg deleted file mode 100644 index db009a4a52..0000000000 --- a/ext/tk/sample/msgs_tk/ru.msg +++ /dev/null @@ -1,87 +0,0 @@ -namespace eval ::tkmsgcat_demo { - ::msgcat::mcset ru "Application Error" "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435" - ::msgcat::mcset ru "Blue" " \u0413\u043e\u043b\u0443\u0431\u043e\u0439" - ::msgcat::mcset ru "Color" "\u0426\u0432\u0435\u0442" - ::msgcat::mcset ru "Delete" "\u0423\u0434\u0430\u043b\u0438\u0442\u044c" - ::msgcat::mcset ru "Error" "\u041e\u0448\u0438\u0431\u043a\u0430" - ::msgcat::mcset ru "Exit" "\u0412\u044b\u0445\u043e\u0434" - ::msgcat::mcset ru "Green" "\u0417\u0435\u043b\u0435\u043d\u044b\u0439" - ::msgcat::mcset ru "Red" "\u041a\u0440\u0430\u0441\u043d\u044b\u0439" - ::msgcat::mcset ru "blue" " \u0433\u043e\u043b\u0443\u0431\u043e\u0439" - ::msgcat::mcset ru "green" " \u0437\u0435\u043b\u0435\u043d\u044b\u0439" - ::msgcat::mcset ru "red" " \u043a\u0440\u0430\u0441\u043d\u044b\u0439" -} - -namespace eval ::tk { - ::msgcat::mcset ru "&Abort" "&\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c" - ::msgcat::mcset ru "About..." "\u041f\u0440\u043e..." - ::msgcat::mcset ru "All Files" "\u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b" - ::msgcat::mcset ru "Application Error" "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435" - ::msgcat::mcset ru "&Blue" " &\u0413\u043e\u043b\u0443\u0431\u043e\u0439" - ::msgcat::mcset ru "&Cancel" "\u041e\u0442&\u043c\u0435\u043d\u0430" - ::msgcat::mcset ru "Cannot change to the directory \"%1\$s\".\nPermission denied." \ - "\u041d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \"%1\$s\".\n\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430" - ::msgcat::mcset ru "Choose Directory" "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433" - ::msgcat::mcset ru "Clear" "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c" - ::msgcat::mcset ru "Color" "\u0426\u0432\u0435\u0442" - ::msgcat::mcset ru "Console" "\u041a\u043e\u043d\u0441\u043e\u043b\u044c" - ::msgcat::mcset ru "Copy" "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c" - ::msgcat::mcset ru "Cut" "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c" - ::msgcat::mcset ru "Delete" "\u0423\u0434\u0430\u043b\u0438\u0442\u044c" - ::msgcat::mcset ru "Details >>" "\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 >>" - ::msgcat::mcset ru "Directory \"%1\$s\" does not exist." "\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \"%1\$s\" \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442." - ::msgcat::mcset ru "&Directory:" "&\u041a\u0430\u0442\u0430\u043b\u043e\u0433:" - ::msgcat::mcset ru "Error: %1\$s" "\u041e\u0448\u0438\u0431\u043a\u0430: %1\$s" - ::msgcat::mcset ru "Exit" "\u0412\u044b\u0445\u043e\u0434" - ::msgcat::mcset ru "File \"%1\$s\" already exists.\nDo you want to overwrite it?" \ - "\u0424\u0430\u0439\u043b \"%1\$s\" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.\n\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e?" - ::msgcat::mcset ru "File \"%1\$s\" already exists.\n\n" "\u0424\u0430\u0439\u043b \"%1\$s\" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.\n\n" - ::msgcat::mcset ru "File \"%1\$s\" does not exist." "\u0424\u0430\u0439\u043b \"%1\$s\" \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d." - ::msgcat::mcset ru "File &name:" "&\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430:" - ::msgcat::mcset ru "File &names:" "&\u0418\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432:" - ::msgcat::mcset ru "Files of &type:" "&\u0422\u0438\u043f \u0444\u0430\u0439\u043b\u043e\u0432:" - ::msgcat::mcset ru "Fi&les:" "\u0424\u0430\u0439&\u043b\u044b:" - ::msgcat::mcset ru "&Filter" "&\u0424\u0438\u043b\u044c\u0442\u0440" - ::msgcat::mcset ru "Fil&ter:" "\u0424\u0438\u043b\u044c&\u0442\u0440:" - ::msgcat::mcset ru "&Green" " &\u0417\u0435\u043b\u0435\u043d\u044b\u0439" - ::msgcat::mcset ru "Hi" "\u041f\u0440\u0438\u0432\u0435\u0442" - ::msgcat::mcset ru "Hide Console" "\u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c" - ::msgcat::mcset ru "&Ignore" "&\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c" - ::msgcat::mcset ru "Invalid file name \"%1\$s\"." "\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \"%1\$s\"." - ::msgcat::mcset ru "Log Files" "\u0424\u0430\u0439\u043b\u044b \u0436\u0443\u0440\u043d\u0430\u043b\u0430" - ::msgcat::mcset ru "&No" "&\u041d\u0435\u0442" - ::msgcat::mcset ru "&OK" "&\u041e\u041a" - ::msgcat::mcset ru "Ok" "\u0414\u0430" - ::msgcat::mcset ru "Open" "\u041e\u0442\u043a\u0440\u044b\u0442\u044c" - ::msgcat::mcset ru "&Open" "&\u041e\u0442\u043a\u0440\u044b\u0442\u044c" - ::msgcat::mcset ru "Open Multiple Files" "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432" - ::msgcat::mcset ru "Paste" "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c" - ::msgcat::mcset ru "Quit" "\u0412\u044b\u0445\u043e\u0434" - ::msgcat::mcset ru "&Red" " &\u041a\u0440\u0430\u0441\u043d\u044b\u0439" - ::msgcat::mcset ru "Replace existing file?" "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b?" - ::msgcat::mcset ru "&Retry" "&\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c" - ::msgcat::mcset ru "&Save" "&\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c" - ::msgcat::mcset ru "Save As" "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a" - ::msgcat::mcset ru "Save To Log" "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b" - ::msgcat::mcset ru "Select Log File" "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0436\u0443\u0440\u043d\u0430\u043b" - ::msgcat::mcset ru "Select a file to source" "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438" - ::msgcat::mcset ru "&Selection:" "&Selection:" - ::msgcat::mcset ru "Skip Messages" "\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f" - ::msgcat::mcset ru "Source..." "\u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b..." - ::msgcat::mcset ru "Tcl Scripts" "\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 TCL" - ::msgcat::mcset ru "Tcl for Windows" "TCL \u0434\u043b\u044f Windows" - ::msgcat::mcset ru "Text Files" "\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b" - ::msgcat::mcset ru "&Yes" "&\u0414\u0430" - ::msgcat::mcset ru "abort" "\u043e\u0442\u043c\u0435\u043d\u0430" - ::msgcat::mcset ru "blue" " \u0433\u043e\u043b\u0443\u0431\u043e\u0439" - ::msgcat::mcset ru "cancel" "\u043e\u0442\u043c\u0435\u043d\u0430" - ::msgcat::mcset ru "extension" "\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435" - ::msgcat::mcset ru "extensions" "\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f" - ::msgcat::mcset ru "green" " \u0437\u0435\u043b\u0435\u043d\u044b\u0439" - ::msgcat::mcset ru "ignore" "\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c" - ::msgcat::mcset ru "ok" "\u043e\u043a" - ::msgcat::mcset ru "red" " \u043a\u0440\u0430\u0441\u043d\u044b\u0439" - ::msgcat::mcset ru "retry" "\u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c" - ::msgcat::mcset ru "yes" "\u0434\u0430" -} - diff --git a/ext/tk/sample/multi-ip_sample.rb b/ext/tk/sample/multi-ip_sample.rb deleted file mode 100644 index fb7a8afb5b..0000000000 --- a/ext/tk/sample/multi-ip_sample.rb +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -# This script is a sample of MultiTkIp class - -require "multi-tk" - -# create slave interpreters -trusted_slave = MultiTkIp.new_slave -safe_slave1 = MultiTkIp.new_safeTk -safe_slave2 = MultiTkIp.new_safeTk('fill'=>:none, 'expand'=>false) -#safe_slave2 = MultiTkIp.new_safeTk('fill'=>:none) -#safe_slave2 = MultiTkIp.new_safeTk('expand'=>false) - -cmd = Proc.new{|txt| - ##################### - ## from TkTimer2.rb - - if TkCore::INTERP.safe? - # safeTk doesn't have permission to call 'wm' command - else - root = TkRoot.new(:title=>'timer sample') - end - label = TkLabel.new(:parent=>root, :relief=>:raised, :width=>10) \ - .pack(:side=>:bottom, :fill=>:both) - - tick = proc{|aobj| - cnt = aobj.return_value + 5 - label.text format("%d.%02d", *(cnt.divmod(100))) - cnt - } - - timer = TkTimer.new(50, -1, tick).start(0, proc{ label.text('0.00'); 0 }) - -=begin - TkButton.new(:text=>'Start') { - command proc{ timer.continue unless timer.running? } - pack(:side=>:left, :fill=>:both, :expand=>true) - } - TkButton.new(:text=>'Restart') { - command proc{ timer.restart(0, proc{ label.text('0.00'); 0 }) } - pack('side'=>'right','fill'=>'both','expand'=>'yes') - } - TkButton.new(:text=>'Stop') { - command proc{ timer.stop if timer.running? } - pack('side'=>'right','fill'=>'both','expand'=>'yes') - } -=end - b_start = TkButton.new(:text=>'Start', :state=>:disabled) { - pack(:side=>:left, :fill=>:both, :expand=>true) - } - - b_stop = TkButton.new(:text=>'Stop', :state=>:normal) { - pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes') - } - - b_start.command { - timer.continue - b_stop.state(:normal) - b_start.state(:disabled) - } - - b_stop.command { - timer.stop - b_start.state(:normal) - b_stop.state(:disabled) - } - - TkButton.new(:text=>'Reset', :state=>:normal) { - command { timer.reset } - pack('side'=>'right', 'fill'=>'both', 'expand'=>'yes') - } - - ev_quit = TkVirtualEvent.new('Control-c', 'Control-q') - Tk.root.bind(ev_quit, proc{Tk.exit}).focus -} - -# call on the default master interpreter -trusted_slave.eval_proc(cmd, 'trusted') # label -> .w00012 -safe_slave1.eval_proc(cmd, 'safe1') # label -> .w00016 -safe_slave2.eval_proc(cmd, 'safe2') # label -> .w00020 -cmd.call('master') # label -> .w00024 - -#second_master = MultiTkIp.new(&cmd) -#second_master = MultiTkIp.new(:safe=>2){p [:second_master, $SAFE]} - -TkTimer.new(2000, -1, proc{p ['safe1', safe_slave1.deleted?]}).start -TkTimer.new(2000, -1, proc{p ['safe2', safe_slave2.deleted?]}).start -TkTimer.new(2000, -1, proc{p ['trusted', trusted_slave.deleted?]}).start - -TkTimer.new(5000, 1, - proc{ - safe_slave1.eval_proc{Tk.root.destroy} - safe_slave1.delete - print "*** The safe_slave1 is deleted by the timer.\n" - }).start - -TkTimer.new(10000, 1, - proc{ - trusted_slave.eval_proc{Tk.root.destroy} - trusted_slave.delete - print "*** The trusted_slave is deleted by the timer.\n" - }).start - -Tk.mainloop diff --git a/ext/tk/sample/multi-ip_sample2.rb b/ext/tk/sample/multi-ip_sample2.rb deleted file mode 100644 index ae2cb35e96..0000000000 --- a/ext/tk/sample/multi-ip_sample2.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: false -require 'multi-tk.rb' - -th = Thread.new{Tk.mainloop} - -TkLabel.new(:text=>'this is a primary master').pack - -ip1 = MultiTkIp.new_slave(:safe=>1) -ip2 = MultiTkIp.new_slave(:safe=>2) - -cmd = proc{|s| - require 'tk' - - TkButton.new(:text=>'b1: p self', :command=>proc{p self}).pack(:fill=>:x) - sleep s - TkButton.new(:text=>'b2: p $SAFE', :command=>proc{p $SAFE}).pack(:fill=>:x) - sleep s - TkButton.new(:text=>'b3: p MultiTkIp.ip_name', - :command=>proc{p MultiTkIp.ip_name}).pack(:fill=>:x) - sleep s - TkButton.new(:text=>'EXIT', :command=>proc{exit}).pack(:fill=>:x) - - Tk.mainloop -} - -Thread.new{ip1.eval_proc(cmd, 1.1)} -Thread.new{ip2.eval_proc(cmd, 0.3)} -cmd.call(0.7) - -th.join diff --git a/ext/tk/sample/optobj_sample.rb b/ext/tk/sample/optobj_sample.rb deleted file mode 100644 index 5e4806f8fb..0000000000 --- a/ext/tk/sample/optobj_sample.rb +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -# -# sample script of Tk::OptionObj -# -require "tk" - -optobj = Tk::OptionObj.new('foreground'=>'red', 'background'=>'black') - -f = TkFrame.new.pack(:side=>:left, :anchor=>:n, :padx=>5, :pady=>30) - -b1 = TkButton.new(f, :text=>'AAA').pack(:fill=>:x) -b2 = TkButton.new(f, :text=>'BBB').pack(:fill=>:x) -b3 = TkButton.new(f, :text=>'CCC').pack(:fill=>:x) - -optobj.assign( b1, - [ b2, 'configure', - { 'foreground'=>'background', - 'background'=>'foreground' } ], - [ b3, nil, - { 'foreground'=>'background', - 'activeforeground'=>nil, - 'background'=>['foreground', 'activeforeground'] } ] ) - -optobj.update('activeforeground'=>'yellow') - -TkButton.new(f){ - configure( optobj.assign(self) + {:text=>'DDD'} ) - pack(:fill=>:x) -} - -TkButton.new(f){ - configure( optobj.assign([self, nil, - {'foreground'=>'activeforeground', - 'background'=>'foreground', - 'activeforeground'=>'background'}]) \ - + {:text=>'EEE', :relief=>:groove, :borderwidth=>5} ) - pack(:fill=>:x) -} - -optobj.notify # To apply the convert_key ( 3rd element of widget info - # (that is, {'foreground'=>'activeforeground', ,,, } ) - # of the 'EEE' button - -TkButton.new(f, :text=>'toggle', - :command=>proc{ - fg = optobj['foreground'] - bg = optobj['background'] - optobj.configure('foreground'=>bg, 'background'=>fg) - }).pack(:fill=>:x, :pady=>10) - -TkButton.new(f, :text=>'exit', - :command=>proc{exit}).pack(:fill=>:x, :pady=>10) - -TkFrame.new{|f| - pack(:side=>:right, :expand=>true, :fill=>:both) - TkLabel.new(f, :text=>'source::').pack(:anchor=>:w) - TkFrame.new(f){|ff| - TkText.new(ff){ - yscrollbar(TkScrollbar.new(ff){pack(:fill=>:y, :side=>:right)}) - insert('end', File.read(__FILE__)) - pack(:side=>:left, :expand=>true, :fill=>:both) - } - pack(:expand=>true, :fill=>:both) - } -} - -Tk.mainloop diff --git a/ext/tk/sample/propagate.rb b/ext/tk/sample/propagate.rb deleted file mode 100644 index 10e0ed8236..0000000000 --- a/ext/tk/sample/propagate.rb +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' - -TkLabel.new(:text=>"Please click the bottom frame").pack - -f = TkFrame.new(:width=>400, :height=>100, :background=>'yellow', - :relief=>'ridge', :borderwidth=>5).pack - -# TkPack.propagate(f, false) # <== important!! -f.pack_propagate(false) # <== important!! - -list = (1..3).collect{|n| - TkButton.new(f, :text=>"button#{'-X'*n}"){ - command proc{ - puts "button#{'-X'*n}" - self.unpack - } - } -} - -list.unshift(nil) - -f.bind('1', proc{ - w = list.shift - w.unpack if w - list.push(w) - list[0].pack(:expand=>true, :anchor=>:center) if list[0] - }) - -Tk.mainloop diff --git a/ext/tk/sample/remote-ip_sample.rb b/ext/tk/sample/remote-ip_sample.rb deleted file mode 100644 index 13aa3b84f9..0000000000 --- a/ext/tk/sample/remote-ip_sample.rb +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'remote-tk' - -puts <proc{puts 'This procedure is on the controller-ip (Ruby/Tk)'}, :text=>'print on Ruby/Tk (controller-ip)').pack(:fill=>:x)} -ip.eval_proc{TkButton.new(:command=>'puts {This procedure is on the remote-ip (wish)}', :text=>'print on wish (remote-ip)').pack(:fill=>:x)} - -# If your remote-ip is Ruby/Tk, you can control the remote Ruby by -# 'ruby' or 'ruby_eval' or 'ruby_cmd' on the Tk interpreter. -if ip.is_rubytk? - ip.eval_proc{TkButton.new(:command=>'ruby {p 111; p Array.new(3,"ruby")}', :text=>'ruby cmd on the remote-ip').pack(:fill=>:x)} -end - -ip.eval_proc{TkButton.new(:command=>'exit', :text=>'QUIT').pack(:fill=>:x)} - -TkButton.new(:command=>proc{exit}, :text=>'QUIT', - :padx=>10, :pady=>7).pack(:padx=>10, :pady=>7) - -Tk.mainloop diff --git a/ext/tk/sample/remote-ip_sample2.rb b/ext/tk/sample/remote-ip_sample2.rb deleted file mode 100644 index 567e60411e..0000000000 --- a/ext/tk/sample/remote-ip_sample2.rb +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false - -require 'remote-tk' - -# start sub-process -ip_name = 'remote_ip' -ip_list = TkWinfo.interps -fork{ - exec "/usr/bin/env ruby -r tk -e \"Tk.appname('#{ip_name}');Tk.mainloop\"" -} -sleep 1 until (app = (TkWinfo.interps - ip_list)[0]) && app =~ /^#{ip_name}/ -p TkWinfo.interps - -# create RemoteTkIp object -ip = RemoteTkIp.new(app) - -# setup remote-ip window -btns = [] -ip.eval_proc{ - btns << - TkButton.new(:command=>proc{ - puts 'This procedure is on the controller-ip (Ruby-side)' - }, - :text=>'print on controller-ip (Ruby-side)').pack(:fill=>:x) - - btns << - TkButton.new(:command=> - 'puts {This procedure is on the remote-ip (Tk-side)}', - :text=>'print on remote-ip (Tk-side)').pack(:fill=>:x) - - btns << - TkButton.new(:command=> - 'ruby { - puts "This procedure is on the remote-ip (Ruby-side)" - p Array.new(3,"ruby") - }', - :text=>'ruby cmd on the remote-ip').pack(:fill=>:x) - - TkButton.new(:command=>'exit', :text=>'QUIT').pack(:fill=>:x) -} - -# setup controller-ip window -btns.each_with_index{|btn, idx| - # The scope of the eval-block of 'eval_proc' method is different from - # the enternal. If you want to pass local values to the eval-block, - # use arguments of eval_proc method. They are passed to block-arguments. - TkButton.new(:command=>proc{ip.eval_proc(btn){|b| b.flash}}, - :text=>"flash button-#{idx}", - :padx=>10).pack(:padx=>10, :pady=>2) -} - -TkButton.new(:command=>proc{exit}, :text=>'QUIT', - :padx=>10, :pady=>7).pack(:padx=>10, :pady=>7) - -# start eventloop -Tk.mainloop diff --git a/ext/tk/sample/resource.en b/ext/tk/sample/resource.en deleted file mode 100644 index 39b4013971..0000000000 --- a/ext/tk/sample/resource.en +++ /dev/null @@ -1,13 +0,0 @@ -! -! see Tcl/Tk's "options" manual for "Database Name" and "Database Class" -! -*BtnFrame.borderWidth: 5 -*BtnFrame.relief: ridge -*BtnFrame.Button.background: wheat -*BtnFrame.Button.foreground: red -*hello.text: HELLO -*quit.text: QUIT -*BTN_CMD.show_msg: {|arg| print "($SAFE=#{$SAFE}) ";\ - print "Hello!! This is a sample of #{arg}.";\ - print "(<<< $SAFE=#{$SAFE})\n"} -*BTN_CMD.bye_msg: {print "($SAFE=#{$SAFE} >>>) Good-bye¡¥(<<< $SAFE=#{$SAFE})\n"} diff --git a/ext/tk/sample/resource.ja b/ext/tk/sample/resource.ja deleted file mode 100644 index 59d4ffaf40..0000000000 --- a/ext/tk/sample/resource.ja +++ /dev/null @@ -1,13 +0,0 @@ -! -! see Tcl/Tk's "options" manual for "Database Name" and "Database Class" -! -*BtnFrame.borderWidth: 5 -*BtnFrame.relief: ridge -*BtnFrame.Button.background: wheat -*BtnFrame.Button.foreground: red -*hello.text: ã“ã‚“ã«ã¡ã¯ -*quit.text: 終了 -*BTN_CMD.show_msg: {|arg| print "($SAFE=#{$SAFE} >>>) ";\ - print "ã“ã‚“ã«ã¡ã¯ï¼ï¼ #{arg} ã®ã‚µãƒ³ãƒ—ルã§ã™ï¼Ž";\ - print "(<<< $SAFE=#{$SAFE})\n"} -*BTN_CMD.bye_msg: {print "($SAFE=#{$SAFE} >>>) ã•ã‚ˆã†ãªã‚‰ï¼Ž(<<< $SAFE=#{$SAFE})\n"} diff --git a/ext/tk/sample/safe-tk.rb b/ext/tk/sample/safe-tk.rb deleted file mode 100755 index a8a85d3288..0000000000 --- a/ext/tk/sample/safe-tk.rb +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -# This script is a sample of MultiTkIp class - -require "multi-tk" - -############################### - -TkLabel.new(:text=>'This is the Default Master Ipnterpreter').pack(:padx=>5, :pady=>3) -TkButton.new(:text=>'QUIT', :command=>proc{exit}).pack(:pady=>3) -TkFrame.new(:borderwidth=>2, :height=>3, - :relief=>:sunken).pack(:fill=>:x, :expand=>true, - :padx=>10, :pady=>7) - -safe0_p = proc{|*args| p args} - -############################### - -puts "---- create a safe slave IP with Ruby's safe-level == 1 ----------" -ip = MultiTkIp.new_safe_slave(1){|*args| safe0_p["safe_slave safe_level == #{$SAFE}", args]} - -puts "\n---- create procs ----------" -puts 'x = proc{p [\'proc x\', "$SAFE==#{$SAFE}"]; exit}' -#x = proc{p ['proc x', "$SAFE==#{$SAFE}"]; exit} -x = proc{p ['proc x', "$SAFE==#{$SAFE}"]; exit} -TkLabel.new(:text=>'x = proc{p [\'proc x\', "$SAFE==#{$SAFE}"]; exit}', - :anchor=>:w).pack(:fill=>:x) - -puts 'y = proc{|label| p [\'proc y\', "$SAFE==#{$SAFE}", label]; label.text($SAFE)}' -y = proc{|label| p ['proc y', "$SAFE==#{$SAFE}", label]; label.text($SAFE)} -TkLabel.new(:text=>'y = proc{|label| p [\'proc y\', "$SAFE==#{$SAFE}", label]; label.text($SAFE)}', - :anchor=>:w).pack(:fill=>:x) - -puts 'z = proc{p [\'proc z\', "$SAFE==#{$SAFE}"]; exit}' -z = proc{p ['proc z', "$SAFE==#{$SAFE}"]; exit} -TkLabel.new(:text=>'z = proc{p [\'proc z\', "$SAFE==#{$SAFE}"]; exit}', - :anchor=>:w).pack(:fill=>:x) - -puts "\n---- call 1st eval_proc ----------" -print 'lbl = ' -p lbl = ip.eval_proc{ - TkLabel.new(:text=>"1st eval_proc : $SAFE == #{$SAFE}").pack - - f = TkFrame.new.pack - TkLabel.new(f, :text=>"$SAFE == ").pack(:side=>:left) - # TkLabel.new(f, :text=>" (<-- 'lbl' widget is here)").pack(:side=>:right) - l = TkLabel.new(f).pack(:side=>:right) - - TkButton.new(:text=>':command=>proc{l.text($SAFE)}', - :command=>proc{l.text($SAFE)}).pack(:fill=>:x, :padx=>5) - TkButton.new(:text=>':command=>x', :command=>x).pack(:fill=>:x, :padx=>5) - TkButton.new(:text=>':command=>proc{exit}', - :command=>proc{ - safe0_p["'exit' is called at $SAFE=#{$SAFE}"];exit} - ).pack(:fill=>:x, :padx=>5) - TkFrame.new(:borderwidth=>2, :height=>3, - :relief=>:sunken).pack(:fill=>:x, :expand=>true, - :padx=>10, :pady=>7) - l # return the label widget -} - -puts "\n---- change the safe slave IP's safe-level ==> 3 ----------" -ip.safe_level = 3 - -puts "\n---- call 2nd eval_proc ----------" -p ip.eval_proc(proc{ - TkLabel.new(:text=>"2nd eval_proc : $SAFE == #{$SAFE}").pack - f = TkFrame.new.pack - TkLabel.new(f, :text=>"$SAFE == ").pack(:side=>:left) - l = TkLabel.new(f, :text=>$SAFE).pack(:side=>:right) - TkButton.new(:text=>':command=>proc{l.text($SAFE)}', - :command=>proc{l.text($SAFE)}).pack(:fill=>:x, - :padx=>5) - TkButton.new(:text=>':command=>proc{y.call(l)}', - :command=>proc{y.call(l)}).pack(:fill=>:x, - :padx=>5) - TkButton.new(:text=>':command=>proc{Proc.new(&y).call(l)}', - :command=>proc{ - Proc.new(&y).call(l) - }).pack(:fill=>:x, :padx=>5) - TkButton.new(:text=>':command=>proc{MultiTkIp._proc_on_current_safelevel(y).call(l)}', - :command=>proc{ - MultiTkIp._proc_on_current_safelevel(y).call(l) - }).pack(:fill=>:x, :padx=>5) -if false && Object.const_defined?(:RubyVM) && ::RubyVM.class == Class - TkButton.new(:text=>':command=>proc{Thread.new(l, &y).value}', - :command=>proc{ - Thread.new(l, &y).value - }).pack(:fill=>:x, :padx=>5) -else - # KNOWN BUG:: - # Current multi-tk.rb cannot support long term threads on callbacks. - # Such a thread freezes the Ruby/Tk process. -end - TkButton.new(:text=>':command=>proc{z.call}', - :command=>proc{z.call}).pack(:fill=>:x, :padx=>5) - TkFrame.new(:borderwidth=>2, :height=>3, - :relief=>:sunken).pack(:fill=>:x, :expand=>true, - :padx=>10, :pady=>7) - }) - -puts "\n---- call 1st and 2nd eval_str ----------" -p bind = ip.eval_str(' - TkLabel.new(:text=>"1st and 2nd eval_str : $SAFE == #{$SAFE}").pack - f = TkFrame.new.pack - TkLabel.new(f, :text=>"$SAFE == ").pack(:side=>:left) - l = TkLabel.new(f, :text=>$SAFE).pack(:side=>:right) - TkButton.new(:text=>":command=>proc{y.call(l)}", - :command=>proc{y.call(l)}).pack(:fill=>:x, :padx=>5) - binding -', binding) - -p ip.eval_str(" - TkButton.new(:text=>':command=>proc{ l.text = $SAFE }', - :command=>proc{ l.text = $SAFE }).pack(:fill=>:x, :padx=>5) - TkFrame.new(:borderwidth=>2, :height=>3, - :relief=>:sunken).pack(:fill=>:x, :expand=>true, - :padx=>10, :pady=>7) -", bind) - -puts "\n---- call 3rd and 4th eval_proc ----------" -p ip.eval_proc{ - TkLabel.new(:text=>"3rd and 4th eval_proc : $SAFE == #{$SAFE}").pack -} -p ip.eval_proc{ - TkButton.new(:text=>':command=>proc{ lbl.text = $SAFE }', - :command=>proc{ lbl.text = $SAFE }).pack(:fill=>:x, :padx=>5) -} - -puts "\n---- start event-loop ( current $SAFE == #{$SAFE} ) ----------" - -Tk.mainloop diff --git a/ext/tk/sample/scrollframe.rb b/ext/tk/sample/scrollframe.rb deleted file mode 100644 index 346f88aadd..0000000000 --- a/ext/tk/sample/scrollframe.rb +++ /dev/null @@ -1,250 +0,0 @@ -# frozen_string_literal: false -# -# Tk::RbWidget::ScrollFrame class -# -# This widget class is a frame widget with scrollbars. -# The ScrollFrame doesn't propagate the size of embedded widgets. -# When it is configured, scrollregion of the container is changed. -# -# Scrollbars can be toggled by Tk::RbWidget::ScrollFrame#vscroll & hscroll. -# If horizontal or vertical scrollbar is turned off, the horizontal -# or vertical size of embedded widgets is propagated. -# -# Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -module Tk::RbWidget; end - -class Tk::RbWidget::ScrollFrame < TkFrame - include TkComposite - - DEFAULT_WIDTH = 200 - DEFAULT_HEIGHT = 200 - - def initialize_composite(keys={}) - @frame.configure(:width=>DEFAULT_WIDTH, :height=>DEFAULT_HEIGHT) - - # create scrollbars - @h_scroll = TkScrollbar.new(@frame, 'orient'=>'horizontal') - @v_scroll = TkScrollbar.new(@frame, 'orient'=>'vertical') - - # create a canvas widget - @canvas = TkCanvas.new(@frame, - :borderwidth=>0, :selectborderwidth=>0, - :highlightthickness=>0) - - # alignment - TkGrid.rowconfigure(@frame, 0, 'weight'=>1, 'minsize'=>0) - TkGrid.columnconfigure(@frame, 0, 'weight'=>1, 'minsize'=>0) - @canvas.grid('row'=>0, 'column'=>0, 'sticky'=>'news') - @frame.grid_propagate(false) - - # assign scrollbars - @canvas.xscrollbar(@h_scroll) - @canvas.yscrollbar(@v_scroll) - - # convert hash keys - keys = _symbolkey2str(keys) - - # check options for the frame - framekeys = {} - if keys.key?('classname') - keys['class'] = keys.delete('classname') - end - if @classname = keys.delete('class') - framekeys['class'] = @classname - end - if @colormap = keys.delete('colormap') - framekeys['colormap'] = @colormap - end - if @container = keys.delete('container') - framekeys['container'] = @container - end - if @visual = keys.delete('visual') - framekeys['visual'] = @visual - end - if @classname.kind_of? TkBindTag - @db_class = @classname - @classname = @classname.id - elsif @classname - @db_class = TkDatabaseClass.new(@classname) - else - @db_class = self.class - @classname = @db_class::WidgetClassName - end - - # create base frame - @base = TkFrame.new(@canvas, framekeys) - - # embed base frame - @cwin = TkcWindow.new(@canvas, [0, 0], :window=>@base, :anchor=>'nw') - @canvas.scrollregion(@cwin.bbox) - - # binding to reset scrollregion - @base.bind('Configure'){ _reset_scrollregion(nil, nil) } - - # set default receiver of method calls - @path = @base.path - - # scrollbars ON - vscroll(keys.delete('vscroll'){true}) - hscroll(keys.delete('hscroll'){true}) - - # please check the differences of the following definitions - option_methods( - :scrollbarwidth - ) - - # set receiver widgets for configure methods (with alias) - delegate_alias('scrollbarrelief', 'relief', @h_scroll, @v_scroll) - - # set receiver widgets for configure methods - delegate('DEFAULT', @base) - delegate('background', @frame, @base, @canvas, @h_scroll, @v_scroll) - delegate('width', @frame) - delegate('height', @frame) - delegate('activebackground', @h_scroll, @v_scroll) - delegate('troughcolor', @h_scroll, @v_scroll) - delegate('repeatdelay', @h_scroll, @v_scroll) - delegate('repeatinterval', @h_scroll, @v_scroll) - delegate('borderwidth', @frame) - delegate('relief', @frame) - - # do configure - configure keys unless keys.empty? - end - - # callback for Configure event - def _reset_scrollregion(h_mod=nil, v_mod=nil) - cx1, cy1, cx2, cy2 = @canvas.scrollregion - x1, y1, x2, y2 = @cwin.bbox - @canvas.scrollregion([x1, y1, x2, y2]) - - if h_mod.nil? && v_mod.nil? - if x2 != cx2 && TkGrid.info(@h_scroll).size == 0 - @frame.grid_propagate(true) - @canvas.width = x2 - Tk.update_idletasks - @frame.grid_propagate(false) - end - if y2 != cy2 && TkGrid.info(@v_scroll).size == 0 - @frame.grid_propagate(true) - @canvas.height = y2 - Tk.update_idletasks - @frame.grid_propagate(false) - end - else - @h_scroll.ungrid if h_mod == false - @v_scroll.ungrid if v_mod == false - - h_flag = (TkGrid.info(@h_scroll).size == 0) - v_flag = (TkGrid.info(@v_scroll).size == 0) - - @frame.grid_propagate(true) - - @canvas.width = (h_flag)? x2: @canvas.winfo_width - @canvas.height = (v_flag)? y2: @canvas.winfo_height - - @h_scroll.grid('row'=>1, 'column'=>0, 'sticky'=>'ew') if h_mod - @v_scroll.grid('row'=>0, 'column'=>1, 'sticky'=>'ns') if v_mod - - Tk.update_idletasks - - @frame.grid_propagate(false) - end - end - private :_reset_scrollregion - - # forbid to change binding of @base frame - def bind(*args) - @frame.bind(*args) - end - def bind_append(*args) - @frame.bind_append(*args) - end - def bind_remove(*args) - @frame.bind_remove(*args) - end - def bindinfo(*args) - @frame.bindinfo(*args) - end - - # set width of scrollbar - def scrollbarwidth(width = nil) - if width - @h_scroll.width(width) - @v_scroll.width(width) - else - @h_scroll.width - end - end - - # vertical scrollbar : ON/OFF - def vscroll(mode) - Tk.update_idletasks - st = TkGrid.info(@v_scroll) - if mode && st.size == 0 then - @v_scroll.grid('row'=>0, 'column'=>1, 'sticky'=>'ns') - _reset_scrollregion(nil, true) - elsif !mode && st.size != 0 then - _reset_scrollregion(nil, false) - else - _reset_scrollregion(nil, nil) - end - self - end - - # horizontal scrollbar : ON/OFF - def hscroll(mode) - Tk.update_idletasks - st = TkGrid.info(@h_scroll) - if mode && st.size == 0 then - _reset_scrollregion(true, nil) - elsif !mode && st.size != 0 then - _reset_scrollregion(false, nil) - else - _reset_scrollregion(nil, nil) - end - self - end -end - -# test -if __FILE__ == $0 - f = Tk::RbWidget::ScrollFrame.new(:scrollbarwidth=>10, - :width=>300, :height=>200) - f.pack(:expand=>true, :fill=>:both) - - TkButton.new(f, :text=>'foo button', :command=>proc{puts 'foo'}).pack - TkButton.new(f, :text=>'baaar button', :command=>proc{puts 'baaar'}).pack - TkButton.new(f, :text=>'baz button', :command=>proc{puts 'baz'}).pack - TkButton.new(f, :text=>'hoge hoge button', - :command=>proc{puts 'hoge hoge'}).pack(:side=>:bottom) - - # f.hscroll(false) - - # add a text widget - Tk.after(3000){ - t = TkText.new(f).pack(:expand=>true, :fill=>:both) - t.insert(:end, "An example of Tk::RbWidget::ScrollFrame widget.\n\n") - t.insert(:end, "Here is a text widget.\n") - t.insert(:end, "Please resize the application window, ") - t.insert(:end, "and try the scrollbars ") - t.insert(:end, "to move the view of packed widgets.\n") - } - - # remove a vertical scrollbar, and then the scrollframe is not scrollable. - Tk.after(6000){ f.vscroll(false) } - - # add a vertical scrollbar, and make the scrollframe scrollable. - Tk.after(9000){ f.vscroll(true) } - - # remove a horizontal scrollbar, and then the scrollframe is not scrollable. - Tk.after(12000){ f.hscroll(false) } - - # add a horizontal scrollbar, and make the scrollframe scrollable. - Tk.after(15000){ f.hscroll(true) } - - Tk.mainloop -end diff --git a/ext/tk/sample/tcltklib/batsu.gif b/ext/tk/sample/tcltklib/batsu.gif deleted file mode 100644 index 880cc73e09..0000000000 Binary files a/ext/tk/sample/tcltklib/batsu.gif and /dev/null differ diff --git a/ext/tk/sample/tcltklib/lines0.tcl b/ext/tk/sample/tcltklib/lines0.tcl deleted file mode 100644 index 8ed3c5e1c1..0000000000 --- a/ext/tk/sample/tcltklib/lines0.tcl +++ /dev/null @@ -1,42 +0,0 @@ -#! /usr/local/bin/wish - -proc drawlines {} { - puts [clock format [clock seconds]] - - for {set j 0} {$j < 100} {incr j} { - puts -nonewline "*" - flush stdout - if {$j & 1} { - set c "blue" - } { - set c "red" - } - for {set i 0} {$i < 100} {incr i} { -# .a create line $i 0 0 [expr 500 - $i] -fill $c - } - } - - puts [clock format [clock seconds]] - - for {set j 0} {$j < 100} {incr j} { - puts -nonewline "*" - flush stdout - if {$j & 1} { - set c "blue" - } { - set c "red" - } - for {set i 0} {$i < 100} {incr i} { - .a create line $i 0 0 [expr 500 - $i] -fill $c - } - } - - puts [clock format [clock seconds]] -# destroy . -} - -canvas .a -height 500 -width 500 -button .b -text draw -command drawlines -pack .a .b -side left - -# eof diff --git a/ext/tk/sample/tcltklib/lines1.rb b/ext/tk/sample/tcltklib/lines1.rb deleted file mode 100644 index 57e3d33f6f..0000000000 --- a/ext/tk/sample/tcltklib/lines1.rb +++ /dev/null @@ -1,51 +0,0 @@ -#! /usr/local/bin/ruby -# frozen_string_literal: false - -require "tcltk" - -def drawlines() - print Time.now, "\n" - - for j in 0 .. 99 - print "*" - $stdout.flush - if (j & 1) != 0 - col = "blue" - else - col = "red" - end - for i in 0 .. 99 -# $a.e("create line", i, 0, 0, 500 - i, "-fill", col) - end - end - - print Time.now, "\n" - - for j in 0 .. 99 - print "*" - $stdout.flush - if (j & 1) != 0 - col = "blue" - else - col = "red" - end - for i in 0 .. 99 - $a.e("create line", i, 0, 0, 500 - i, "-fill", col) - end - end - - print Time.now, "\n" -# $ip.commands()["destroy"].e($root) -end - -$ip = TclTkInterpreter.new() -$root = $ip.rootwidget() -$a = TclTkWidget.new($ip, $root, "canvas", "-height 500 -width 500") -$c = TclTkCallback.new($ip, proc{drawlines()}) -$b = TclTkWidget.new($ip, $root, "button", "-text draw -command", $c) - -$ip.commands()["pack"].e($a, $b, "-side left") - -TclTk.mainloop - -# eof diff --git a/ext/tk/sample/tcltklib/lines2.rb b/ext/tk/sample/tcltklib/lines2.rb deleted file mode 100644 index 7ae54d9ea9..0000000000 --- a/ext/tk/sample/tcltklib/lines2.rb +++ /dev/null @@ -1,55 +0,0 @@ -#! /usr/local/bin/ruby -# frozen_string_literal: false - -require "tk" - -def drawlines() - print Time.now, "\n" - - for j in 0 .. 99 - print "*" - $stdout.flush - if (j & 1) != 0 - col = "blue" - else - col = "red" - end - for i in 0 .. 99 -# TkcLine.new($a, i, 0, 0, 500 - i, "-fill", col) - end - end - - print Time.now, "\n" - - for j in 0 .. 99 - print "*" - $stdout.flush - if (j & 1) != 0 - col = "blue" - else - col = "red" - end - for i in 0 .. 99 - TkcLine.new($a, i, 0, 0, 500 - i, "-fill", col) - end - end - - print Time.now, "\n" -# Tk.root.destroy -end - -$a = TkCanvas.new{ - height(500) - width(500) -} - -$b = TkButton.new{ - text("draw") - command(proc{drawlines()}) -} - -TkPack.configure($a, $b, {"side"=>"left"}) - -Tk.mainloop - -# eof diff --git a/ext/tk/sample/tcltklib/lines3.rb b/ext/tk/sample/tcltklib/lines3.rb deleted file mode 100644 index d79bb12ef3..0000000000 --- a/ext/tk/sample/tcltklib/lines3.rb +++ /dev/null @@ -1,55 +0,0 @@ -#! /usr/local/bin/ruby -# frozen_string_literal: false - -require "tk" - -def drawlines() - print Time.now, "\n" - - for j in 0 .. 99 - print "*" - $stdout.flush - if (j & 1) != 0 - col = "blue" - else - col = "red" - end - for i in 0 .. 99 -# $a.create(TkcLine, i, 0, 0, 500 - i, "fill"=>col) - end - end - - print Time.now, "\n" - - for j in 0 .. 99 - print "*" - $stdout.flush - if (j & 1) != 0 - col = "blue" - else - col = "red" - end - for i in 0 .. 99 - $a.create(TkcLine, i, 0, 0, 500 - i, "fill"=>col) - end - end - - print Time.now, "\n" -# Tk.root.destroy -end - -$a = TkCanvas.new{ - height(500) - width(500) -} - -$b = TkButton.new{ - text("draw") - command(proc{drawlines()}) -} - -TkPack.configure($a, $b, {"side"=>"left"}) - -Tk.mainloop - -# eof diff --git a/ext/tk/sample/tcltklib/lines4.rb b/ext/tk/sample/tcltklib/lines4.rb deleted file mode 100644 index 37ffc0ee74..0000000000 --- a/ext/tk/sample/tcltklib/lines4.rb +++ /dev/null @@ -1,55 +0,0 @@ -#! /usr/local/bin/ruby -# frozen_string_literal: false - -require "tk" - -def drawlines() - print Time.now, "\n" - - for j in 0 .. 99 - print "*" - $stdout.flush - if (j & 1) != 0 - col = "blue" - else - col = "red" - end - for i in 0 .. 99 -# TkCore::INTERP.__invoke($a.path, "create", "line", i.to_s, '0', '0', (500 - i).to_s, "-fill", col) - end - end - - print Time.now, "\n" - - for j in 0 .. 99 - print "*" - $stdout.flush - if (j & 1) != 0 - col = "blue" - else - col = "red" - end - for i in 0 .. 99 - TkCore::INTERP.__invoke($a.path, "create", "line", i.to_s, '0', '0', (500 - i).to_s, "-fill", col) - end - end - - print Time.now, "\n" -# Tk.root.destroy -end - -$a = TkCanvas.new{ - height(500) - width(500) -} - -$b = TkButton.new{ - text("draw") - command(proc{drawlines()}) -} - -TkPack.configure($a, $b, {"side"=>"left"}) - -Tk.mainloop - -# eof diff --git a/ext/tk/sample/tcltklib/maru.gif b/ext/tk/sample/tcltklib/maru.gif deleted file mode 100644 index 2c0202892e..0000000000 Binary files a/ext/tk/sample/tcltklib/maru.gif and /dev/null differ diff --git a/ext/tk/sample/tcltklib/safeTk.rb b/ext/tk/sample/tcltklib/safeTk.rb deleted file mode 100644 index 5fac9e2e23..0000000000 --- a/ext/tk/sample/tcltklib/safeTk.rb +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tcltklib' - -master = TclTkIp.new -slave_name = 'slave0' -slave = master.create_slave(slave_name, true) -master._eval("::safe::interpInit #{slave_name}") -master._eval("::safe::loadTk #{slave_name}") - -master._invoke('label', '.l1', '-text', 'master') -master._invoke('pack', '.l1', '-padx', '30', '-pady', '50') -master._eval('label .l2 -text {root widget of master-ip}') -master._eval('pack .l2 -padx 30 -pady 50') - -slave._invoke('label', '.l1', '-text', 'slave') -slave._invoke('pack', '.l1', '-padx', '30', '-pady', '50') -slave._eval('label .l2 -text {root widget of slave-ip}') -slave._eval('pack .l2 -padx 30 -pady 20') -slave._eval('label .l3 -text {( container frame widget of master-ip )}') -slave._eval('pack .l3 -padx 30 -pady 20') - -TclTkLib.mainloop diff --git a/ext/tk/sample/tcltklib/sample0.rb b/ext/tk/sample/tcltklib/sample0.rb deleted file mode 100644 index 0cc2de4878..0000000000 --- a/ext/tk/sample/tcltklib/sample0.rb +++ /dev/null @@ -1,40 +0,0 @@ -#! /usr/local/bin/ruby -vd -# frozen_string_literal: false - -# tcltklib ライブラリã®ãƒ†ã‚¹ãƒˆ - -require "tcltklib" - -def test - # インタプリタを生æˆã™ã‚‹ - ip1 = TclTkIp.new() - - # 評価ã—ã¦ã¿ã‚‹ - print ip1._return_value().inspect, "\n" - print ip1._eval("puts {abc}").inspect, "\n" - - # ボタンを作ã£ã¦ã¿ã‚‹ - print ip1._return_value().inspect, "\n" - print ip1._eval("button .lab -text exit -command \"destroy .\"").inspect, - "\n" - print ip1._return_value().inspect, "\n" - print ip1._eval("pack .lab").inspect, "\n" - print ip1._return_value().inspect, "\n" - - # インタプリタã‹ã‚‰ ruby コマンドを評価ã—ã¦ã¿ã‚‹ -# print ip1._eval(%q/ruby {print "print by ruby\n"}/).inspect, "\n" - print ip1._eval(%q+puts [ruby {print "print by ruby\n"; "puts by tcl/tk"}]+).inspect, "\n" - print ip1._return_value().inspect, "\n" - - # ã‚‚ã†ä¸€ã¤ã‚¤ãƒ³ã‚¿ãƒ—リタを生æˆã—ã¦ã¿ã‚‹ - ip2 = TclTkIp.new() - ip2._eval("button .lab -text test -command \"puts test ; destroy .\"") - ip2._eval("pack .lab") - - TclTkLib.mainloop -end - -test -GC.start - -print "exit\n" diff --git a/ext/tk/sample/tcltklib/sample1.rb b/ext/tk/sample/tcltklib/sample1.rb deleted file mode 100644 index b4ad6436bd..0000000000 --- a/ext/tk/sample/tcltklib/sample1.rb +++ /dev/null @@ -1,635 +0,0 @@ -#! /usr/local/bin/ruby -d -# -*- encoding: utf-8 -*- -# frozen_string_literal: false -# -d オプションを付ã‘ã‚‹ã¨, デãƒãƒƒã‚°æƒ…報を表示ã™ã‚‹. - -# tcltk ライブラリã®ã‚µãƒ³ãƒ—ル - -# ã¾ãš, ライブラリを require ã™ã‚‹. -require "tcltk" - -# 以下ã¯, Test1 ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã® initialize() ã§, -# tcl/tk ã«é–¢ã™ã‚‹å‡¦ç†ã‚’è¡Œã†ä¾‹ã§ã‚ã‚‹. -# å¿…ãšã—ã‚‚ãã®ã‚ˆã†ã«ã™ã‚‹å¿…è¦ã¯ç„¡ã, -# (ã‚‚ã—, ãã†ã—ãŸã‘ã‚Œã°) class ã®å¤–㧠tcl/tk ã«é–¢ã™ã‚‹å‡¦ç†ã‚’è¡Œã£ã¦ã‚‚良ã„. - -class Test1 - # åˆæœŸåŒ–(インタプリタを生æˆã—ã¦ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã‚’生æˆã™ã‚‹). - def initialize() - - #### 使ã†å‰ã®ãŠã¾ã˜ãªã„ - - # インタプリタã®ç”Ÿæˆ. - ip = TclTkInterpreter.new() - # コマンドã«å¯¾å¿œã™ã‚‹ã‚ªãƒ–ジェクトを c ã«è¨­å®šã—ã¦ãŠã. - c = ip.commands() - # 使用ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã«å¯¾å¿œã™ã‚‹ã‚ªãƒ–ジェクトã¯å¤‰æ•°ã«å…¥ã‚Œã¦ãŠã. - append, bind, button, destroy, incr, info, label, place, set, wm = - c.values_at( - "append", "bind", "button", "destroy", "incr", "info", "label", "place", - "set", "wm") - - #### tcl/tk ã®ã‚³ãƒžãƒ³ãƒ‰ã«å¯¾å¿œã™ã‚‹ã‚ªãƒ–ジェクト(TclTkCommand)ã®æ“作 - - # 実行ã™ã‚‹æ™‚ã¯, e() メソッドを使ã†. - # (以下ã¯, tcl/tk ã«ãŠã‘ã‚‹ info command r* を実行.) - print info.e("command", "r*"), "\n" - # 引数ã¯, ã¾ã¨ã‚ãŸæ–‡å­—列ã«ã—ã¦ã‚‚åŒã˜. - print info.e("command r*"), "\n" - # 変数を用ã„ãªãã¨ã‚‚実行ã§ãã‚‹ãŒ, 見ãŸã‚ãŒæ‚ªã„. - print c["info"].e("command", "r*"), "\n" - # インタプリタã®ãƒ¡ã‚½ãƒƒãƒ‰ã¨ã—ã¦ã‚‚実行ã§ãã‚‹ãŒ, 効率ãŒæ‚ªã„. - print ip.info("command", "r*"), "\n" - - #### - - # 以下, 生æˆã—ãŸã‚ªãƒ–ジェクトã¯å¤‰æ•°ã«ä»£å…¥ã—ã¦ãŠã‹ãªã„㨠- # GC ã®å¯¾è±¡ã«ãªã£ã¦ã—ã¾ã†. - - #### tcl/tk ã®å¤‰æ•°ã«å¯¾å¿œã™ã‚‹ã‚ªãƒ–ジェクト(TclTkVariable)ã®æ“作 - - # 生æˆã¨åŒæ™‚ã«å€¤ã‚’設定ã™ã‚‹. - v1 = TclTkVariable.new(ip, "20") - # 読ã¿å‡ºã—㯠get メソッドを使ã†. - print v1.get(), "\n" - # 設定㯠set メソッドを使ã†. - v1.set(40) - print v1.get(), "\n" - # set コマンドを使ã£ã¦èª­ã¿å‡ºã—, 設定ã¯å¯èƒ½ã ãŒè¦‹ãŸã‚ãŒæ‚ªã„. - # e() メソッド等ã®å¼•æ•°ã«ç›´æŽ¥ TclTkObject や数値を書ã„ã¦ã‚‚良ã„. - set.e(v1, 30) - print set.e(v1), "\n" - # tcl/tk ã®ã‚³ãƒžãƒ³ãƒ‰ã§å¤‰æ•°ã‚’æ“作ã§ãã‚‹. - incr.e(v1) - print v1.get(), "\n" - append.e(v1, 10) - print v1.get(), "\n" - - #### tcl/tk ã®ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã«å¯¾å¿œã™ã‚‹ã‚ªãƒ–ジェクト(TclTkWidget)ã®æ“作 - - # ルートウィジェットをå–り出ã™. - root = ip.rootwidget() - # ウィジェットã®æ“作. - root.e("configure -height 300 -width 300") - # タイトルを付ã‘ã‚‹ã¨ã㯠wm を使ã†. - wm.e("title", root, $0) - # 親ウィジェットã¨ã‚³ãƒžãƒ³ãƒ‰ã‚’指定ã—ã¦, ウィジェットを作る. - l1 = TclTkWidget.new(ip, root, label, "-text {type `x' to print}") - # place ã™ã‚‹ã¨è¡¨ç¤ºã•ã‚Œã‚‹. - place.e(l1, "-x 0 -rely 0.0 -relwidth 1 -relheight 0.1") - # コマンドåã¯æ–‡å­—列ã§æŒ‡å®šã—ã¦ã‚‚良ã„ãŒ, 見ãŸã‚ãŒæ‚ªã„. - # (コマンドåã¯ç‹¬ç«‹ã—ãŸå¼•æ•°ã§ãªã‘ã‚Œã°ãªã‚‰ãªã„.) - l2 = TclTkWidget.new(ip, root, "label") - # ウィジェットã®æ“作. - l2.e("configure -text {type `q' to exit}") - place.e(l2, "-x 0 -rely 0.1 -relwidth 1 -relheight 0.1") - - #### tcl/tk ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã«å¯¾å¿œã™ã‚‹ã‚ªãƒ–ジェクト(TclTkCallback)ã®æ“作 - - # コールãƒãƒƒã‚¯ã‚’生æˆã™ã‚‹. - c1 = TclTkCallback.new(ip, proc{sample(ip, root)}) - # コールãƒãƒƒã‚¯ã‚’æŒã¤ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã‚’生æˆã™ã‚‹. - b1 = TclTkWidget.new(ip, root, button, "-text sample -command", c1) - place.e(b1, "-x 0 -rely 0.2 -relwidth 1 -relheight 0.1") - # イベントループを抜ã‘ã‚‹ã«ã¯ destroy.e(root) ã™ã‚‹. - c2 = TclTkCallback.new(ip, proc{destroy.e(root)}) - b2 = TclTkWidget.new(ip, root, button, "-text exit -command", c2) - place.e(b2, "-x 0 -rely 0.3 -relwidth 1 -relheight 0.1") - - #### イベントã®ãƒã‚¤ãƒ³ãƒ‰ - # script ã®è¿½åŠ  (bind tag sequence +script) ã¯ä»Šã®ã¨ã“ã‚ã§ããªã„. - # (イテレータ変数ã®è¨­å®šãŒã†ã¾ãã„ã‹ãªã„.) - - # 基本的ã«ã¯ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã«å¯¾ã™ã‚‹ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã¨åŒã˜. - c3 = TclTkCallback.new(ip, proc{print("q pressed\n"); destroy.e(root)}) - bind.e(root, "q", c3) - # bind コマンド㧠% ç½®æ›ã«ã‚ˆã‚Šãƒ‘ラメータをå—ã‘å–ã‚ŠãŸã„ã¨ãã¯, - # proc{} ã®å¾Œã‚ã«æ–‡å­—列ã§æŒ‡å®šã™ã‚‹ã¨, - # ç½®æ›çµæžœã‚’イテレータ変数を通ã—ã¦å—ã‘å–ã‚‹ã“ã¨ãŒã§ãã‚‹. - # ãŸã ã— proc{} ã®å¾Œã‚ã®æ–‡å­—列ã¯, - # bind コマンドã«ä¸Žãˆã‚‹ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ä»¥å¤–ã§æŒ‡å®šã—ã¦ã¯ã„ã‘ãªã„. - c4 = TclTkCallback.new(ip, proc{|i| print("#{i} pressed\n")}, "%A") - bind.e(root, "x", c4) - # TclTkCallback ã‚’ GC ã®å¯¾è±¡ã«ã—ãŸã‘ã‚Œã°, - # dcb() (ã¾ãŸã¯ deletecallbackkeys()) ã™ã‚‹å¿…è¦ãŒã‚ã‚‹. - cb = [c1, c2, c3, c4] - c5 = TclTkCallback.new(ip, proc{|w| TclTk.dcb(cb, root, w)}, "%W") - bind.e(root, "", c5) - cb.push(c5) - - #### tcl/tk ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã«å¯¾å¿œã™ã‚‹ã‚ªãƒ–ジェクト(TclTkImage)ã®æ“作 - - # データを指定ã—ã¦ç”Ÿæˆã™ã‚‹. - i1 = TclTkImage.new(ip, "photo", "-file maru.gif") - # ラベルã«å¼µã‚Šä»˜ã‘ã¦ã¿ã‚‹. - l3 = TclTkWidget.new(ip, root, label, "-relief raised -image", i1) - place.e(l3, "-x 0 -rely 0.4 -relwidth 0.2 -relheight 0.2") - # 空ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’生æˆã—ã¦å¾Œã§æ“作ã™ã‚‹. - i2 = TclTkImage.new(ip, "photo") - # イメージをæ“作ã™ã‚‹. - i2.e("copy", i1) - i2.e("configure -gamma 0.5") - l4 = TclTkWidget.new(ip, root, label, "-relief raised -image", i2) - place.e(l4, "-relx 0.2 -rely 0.4 -relwidth 0.2 -relheight 0.2") - - #### - end - - # サンプルã®ãŸã‚ã®ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã‚’生æˆã™ã‚‹. - def sample(ip, parent) - bind, button, destroy, grid, toplevel, wm = ip.commands().values_at( - "bind", "button", "destroy", "grid", "toplevel", "wm") - - ## toplevel - - # æ–°ã—ã„ウインドウを開ãã«ã¯, toplevel を使ã†. - t1 = TclTkWidget.new(ip, parent, toplevel) - # タイトルを付ã‘ã¦ãŠã - wm.e("title", t1, "sample") - - # ウィジェットãŒç ´å£Šã•ã‚ŒãŸã¨ã, コールãƒãƒƒã‚¯ãŒ GC ã®å¯¾è±¡ã«ãªã‚‹ã‚ˆã†ã«ã™ã‚‹. - cb = [] - cb.push(c = TclTkCallback.new(ip, proc{|w| TclTk.dcb(cb, t1, w)}, "%W")) - bind.e(t1, "", c) - - # ボタンã®ç”Ÿæˆ. - wid = [] - # toplevel ウィジェットを破壊ã™ã‚‹ã«ã¯ destroy ã™ã‚‹. - cb.push(c = TclTkCallback.new(ip, proc{destroy.e(t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text close -command", c)) - cb.push(c = TclTkCallback.new(ip, proc{test_label(ip, t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text label -command", c)) - cb.push(c = TclTkCallback.new(ip, proc{test_button(ip, t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text button -command", c)) - cb.push(c = TclTkCallback.new(ip, proc{test_checkbutton(ip, t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text checkbutton -command", c)) - cb.push(c = TclTkCallback.new(ip, proc{test_radiobutton(ip, t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text radiobutton -command", c)) - cb.push(c = TclTkCallback.new(ip, proc{test_scale(ip, t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text scale -command", c)) - cb.push(c = TclTkCallback.new(ip, proc{test_entry(ip, t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text entry -command", c)) - cb.push(c = TclTkCallback.new(ip, proc{test_text(ip, t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text text -command", c)) - cb.push(c = TclTkCallback.new(ip, proc{test_raise(ip, t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text raise/lower -command", c)) - cb.push(c = TclTkCallback.new(ip, proc{test_modal(ip, t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text message/modal -command", - c)) - cb.push(c = TclTkCallback.new(ip, proc{test_menu(ip, t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text menu -command", c)) - cb.push(c = TclTkCallback.new(ip, proc{test_listbox(ip, t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text listbox/scrollbar", - "-command", c)) - cb.push(c = TclTkCallback.new(ip, proc{test_canvas(ip, t1)})) - wid.push(TclTkWidget.new(ip, t1, button, "-text canvas -command", c)) - - # grid ã§è¡¨ç¤ºã™ã‚‹. - ro = co = 0 - wid.each{|w| - grid.e(w, "-row", ro, "-column", co, "-sticky news") - ro += 1 - if ro == 7 - ro = 0 - co += 1 - end - } - end - - # inittoplevel(ip, parent, title) - # 以下ã®å‡¦ç†ã‚’ã¾ã¨ã‚ã¦è¡Œã†. - # 1. toplevel ウィジェットを作æˆã™ã‚‹. - # 2. コールãƒãƒƒã‚¯ã‚’登録ã™ã‚‹é…列を用æ„ã—, toplevel ウィジェット㮠- # イベントã«ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’削除ã™ã‚‹æ‰‹ç¶šãを登録ã™ã‚‹. - # 3. クローズボタンを作る. - # 作æˆã—㟠toplevel ウィジェット, クローズボタン, コールãƒãƒƒã‚¯ç™»éŒ²ç”¨å¤‰æ•° - # ã‚’è¿”ã™. - # ip: インタプリタ - # parent: 親ウィジェット - # title: toplevel ウィジェットã®ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã®ã‚¿ã‚¤ãƒˆãƒ« - def inittoplevel(ip, parent, title) - bind, button, destroy, toplevel, wm = ip.commands().values_at( - "bind", "button", "destroy", "toplevel", "wm") - - # æ–°ã—ã„ウインドウを開ãã«ã¯, toplevel を使ã†. - t1 = TclTkWidget.new(ip, parent, toplevel) - # タイトルを付ã‘ã¦ãŠã - wm.e("title", t1, title) - - # ウィジェットãŒç ´å£Šã•ã‚ŒãŸã¨ã, コールãƒãƒƒã‚¯ãŒ GC ã®å¯¾è±¡ã«ãªã‚‹ã‚ˆã†ã«ã™ã‚‹. - cb = [] - cb.push(c = TclTkCallback.new(ip, proc{|w| TclTk.dcb(cb, t1, w)}, "%W")) - bind.e(t1, "", c) - # close ボタンを作ã£ã¦ãŠã. - # toplevel ウィジェットを破壊ã™ã‚‹ã«ã¯ destroy ã™ã‚‹. - cb.push(c = TclTkCallback.new(ip, proc{destroy.e(t1)})) - b1 = TclTkWidget.new(ip, t1, button, "-text close -command", c) - - return t1, b1, cb - end - - # label ã®ã‚µãƒ³ãƒ—ル. - def test_label(ip, parent) - button, global, label, pack = ip.commands().values_at( - "button", "global", "label", "pack") - t1, b1, cb = inittoplevel(ip, parent, "label") - - ## label - - # ã„ã‚ã„ã‚ãªå½¢ã®ãƒ©ãƒ™ãƒ«. - l1 = TclTkWidget.new(ip, t1, label, "-text {default(flat)}") - l2 = TclTkWidget.new(ip, t1, label, "-text raised -relief raised") - l3 = TclTkWidget.new(ip, t1, label, "-text sunken -relief sunken") - l4 = TclTkWidget.new(ip, t1, label, "-text groove -relief groove") - l5 = TclTkWidget.new(ip, t1, label, "-text ridge -relief ridge") - l6 = TclTkWidget.new(ip, t1, label, "-bitmap error") - l7 = TclTkWidget.new(ip, t1, label, "-bitmap questhead") - - # pack ã—ã¦ã‚‚表示ã•ã‚Œã‚‹. - pack.e(b1, l1, l2, l3, l4, l5, l6, l7, "-pady 3") - - ## -textvariable - - # tcltk ライブラリã®å®Ÿè£…ã§ã¯, コールãƒãƒƒã‚¯ã¯ tcl/tk ã®``手続ã''を通ã—㦠- # 呼ã°ã‚Œã‚‹. ã—ãŸãŒã£ã¦, コールãƒãƒƒã‚¯ã®ä¸­ã§(大域)変数ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã¨ãã¯, - # global ã™ã‚‹å¿…è¦ãŒã‚ã‚‹. - # global ã™ã‚‹å‰ã«å¤‰æ•°ã«å€¤ã‚’設定ã—ã¦ã—ã¾ã†ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã®ã§, - # tcl/tk ã«ãŠã‘る表ç¾å½¢ã ã‘生æˆã—ã¦, 実際ã«å€¤ã‚’設定ã—ãªã„よã†ã«, - # 2 番目ã®å¼•æ•°ã«ã¯ nil を与ãˆã‚‹. - v1 = TclTkVariable.new(ip, nil) - global.e(v1) - v1.set(100) - # -textvariable ã§å¤‰æ•°ã‚’設定ã™ã‚‹. - l6 = TclTkWidget.new(ip, t1, label, "-textvariable", v1) - # コールãƒãƒƒã‚¯ã®ä¸­ã‹ã‚‰å¤‰æ•°ã‚’æ“作ã™ã‚‹. - cb.push(c = TclTkCallback.new(ip, proc{ - global.e(v1); v1.set(v1.get().to_i + 10)})) - b2 = TclTkWidget.new(ip, t1, button, "-text +10 -command", c) - cb.push(c = TclTkCallback.new(ip, proc{ - global.e(v1); v1.set(v1.get().to_i - 10)})) - b3 = TclTkWidget.new(ip, t1, button, "-text -10 -command", c) - pack.e(l6, b2, b3) - end - - # button ã®ã‚µãƒ³ãƒ—ル. - def test_button(ip, parent) - button, pack = ip.commands().values_at("button", "pack") - t1, b1, cb = inittoplevel(ip, parent, "button") - - ## button - - # コールãƒãƒƒã‚¯å†…ã§å‚ç…§ã™ã‚‹å¤‰æ•°ã¯å…ˆã«å®£è¨€ã—ã¦ãŠã‹ãªã‘ã‚Œã°ãªã‚‰ãªã„. - b3 = b4 = nil - cb.push(c = TclTkCallback.new(ip, proc{b3.e("flash"); b4.e("flash")})) - b2 = TclTkWidget.new(ip, t1, button, "-text flash -command", c) - cb.push(c = TclTkCallback.new(ip, proc{b2.e("configure -state normal")})) - b3 = TclTkWidget.new(ip, t1, button, "-text normal -command", c) - cb.push(c = TclTkCallback.new(ip, proc{b2.e("configure -state disabled")})) - b4 = TclTkWidget.new(ip, t1, button, "-text disable -command", c) - pack.e(b1, b2, b3, b4) - end - - # checkbutton ã®ã‚µãƒ³ãƒ—ル. - def test_checkbutton(ip, parent) - checkbutton, global, pack = ip.commands().values_at( - "checkbutton", "global", "pack") - t1, b1, cb = inittoplevel(ip, parent, "checkbutton") - - ## checkbutton - - v1 = TclTkVariable.new(ip, nil) - global.e(v1) - # -variable ã§å¤‰æ•°ã‚’設定ã™ã‚‹. - ch1 = TclTkWidget.new(ip, t1, checkbutton, "-onvalue on -offvalue off", - "-textvariable", v1, "-variable", v1) - pack.e(b1, ch1) - end - - # radiobutton ã®ã‚µãƒ³ãƒ—ル. - def test_radiobutton(ip, parent) - global, label, pack, radiobutton = ip.commands().values_at( - "global", "label", "pack", "radiobutton") - t1, b1, cb = inittoplevel(ip, parent, "radiobutton") - - ## radiobutton - - v1 = TclTkVariable.new(ip, nil) - global.e(v1) - # ヌルストリング㯠"{}" ã§æŒ‡å®šã™ã‚‹. - v1.set("{}") - l1 = TclTkWidget.new(ip, t1, label, "-textvariable", v1) - # -variable ã§åŒã˜å¤‰æ•°ã‚’指定ã™ã‚‹ã¨åŒã˜ã‚°ãƒ«ãƒ¼ãƒ—ã«ãªã‚‹. - ra1 = TclTkWidget.new(ip, t1, radiobutton, - "-text radio1 -value r1 -variable", v1) - ra2 = TclTkWidget.new(ip, t1, radiobutton, - "-text radio2 -value r2 -variable", v1) - cb.push(c = TclTkCallback.new(ip, proc{global.e(v1); v1.set("{}")})) - ra3 = TclTkWidget.new(ip, t1, radiobutton, - "-text clear -value r3 -variable", v1, "-command", c) - pack.e(b1, l1, ra1, ra2, ra3) - end - - # scale ã®ã‚µãƒ³ãƒ—ル. - def test_scale(ip, parent) - global, pack, scale = ip.commands().values_at( - "global", "pack", "scale") - t1, b1, cb = inittoplevel(ip, parent, "scale") - - ## scale - - v1 = TclTkVariable.new(ip, nil) - global.e(v1) - v1.set(219) - # コールãƒãƒƒã‚¯å†…ã§å‚ç…§ã™ã‚‹å¤‰æ•°ã¯å…ˆã«å®£è¨€ã—ã¦ãŠã‹ãªã‘ã‚Œã°ãªã‚‰ãªã„. - sca1 = nil - cb.push(c = TclTkCallback.new(ip, proc{global.e(v1); v = v1.get(); - sca1.e("configure -background", format("#%02x%02x%02x", v, v, v))})) - sca1 = TclTkWidget.new(ip, t1, scale, - "-label scale -orient h -from 0 -to 255 -variable", v1, "-command", c) - pack.e(b1, sca1) - end - - # entry ã®ã‚µãƒ³ãƒ—ル. - def test_entry(ip, parent) - button, entry, global, pack = ip.commands().values_at( - "button", "entry", "global", "pack") - t1, b1, cb = inittoplevel(ip, parent, "entry") - - ## entry - - v1 = TclTkVariable.new(ip, nil) - global.e(v1) - # ヌルストリング㯠"{}" ã§æŒ‡å®šã™ã‚‹. - v1.set("{}") - en1 = TclTkWidget.new(ip, t1, entry, "-textvariable", v1) - cb.push(c = TclTkCallback.new(ip, proc{ - global.e(v1); print(v1.get(), "\n"); v1.set("{}")})) - b2 = TclTkWidget.new(ip, t1, button, "-text print -command", c) - pack.e(b1, en1, b2) - end - - # text ã®ã‚µãƒ³ãƒ—ル. - def test_text(ip, parent) - button, pack, text = ip.commands().values_at( - "button", "pack", "text") - t1, b1, cb = inittoplevel(ip, parent, "text") - - ## text - - te1 = TclTkWidget.new(ip, t1, text) - cb.push(c = TclTkCallback.new(ip, proc{ - # 1 行目㮠0 文字目ã‹ã‚‰æœ€å¾Œã¾ã§ã‚’表示ã—, 削除ã™ã‚‹. - print(te1.e("get 1.0 end")); te1.e("delete 1.0 end")})) - b2 = TclTkWidget.new(ip, t1, button, "-text print -command", c) - pack.e(b1, te1, b2) - end - - # raise/lower ã®ã‚µãƒ³ãƒ—ル. - def test_raise(ip, parent) - button, frame, lower, pack, raise = ip.commands().values_at( - "button", "frame", "lower", "pack", "raise") - t1, b1, cb = inittoplevel(ip, parent, "raise/lower") - - ## raise/lower - - # button ã‚’éš ã™ãƒ†ã‚¹ãƒˆã®ãŸã‚ã«, frame を使ã†. - f1 = TclTkWidget.new(ip, t1, frame) - # コールãƒãƒƒã‚¯å†…ã§å‚ç…§ã™ã‚‹å¤‰æ•°ã¯å…ˆã«å®£è¨€ã—ã¦ãŠã‹ãªã‘ã‚Œã°ãªã‚‰ãªã„. - b2 = nil - cb.push(c = TclTkCallback.new(ip, proc{raise.e(f1, b2)})) - b2 = TclTkWidget.new(ip, t1, button, "-text raise -command", c) - cb.push(c = TclTkCallback.new(ip, proc{lower.e(f1, b2)})) - b3 = TclTkWidget.new(ip, t1, button, "-text lower -command", c) - lower.e(f1, b3) - - pack.e(b2, b3, "-in", f1) - pack.e(b1, f1) - end - - # modal ãªã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®ã‚µãƒ³ãƒ—ル. - def test_modal(ip, parent) - button, frame, message, pack, tk_chooseColor, tk_getOpenFile, - tk_messageBox = ip.commands().values_at( - "button", "frame", "message", "pack", "tk_chooseColor", - "tk_getOpenFile", "tk_messageBox") - # 最åˆã« load ã•ã‚Œã¦ã„ãªã„ライブラリ㯠ip.commands() ã«å­˜åœ¨ã—ãªã„ã®ã§, - # TclTkLibCommand を生æˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹. - tk_dialog = TclTkLibCommand.new(ip, "tk_dialog") - t1, b1, cb = inittoplevel(ip, parent, "message/modal") - - ## message - - mes = "ã“れ㯠message ウィジェットã®ãƒ†ã‚¹ãƒˆã§ã™." - mes += "以下㯠modal ãªã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®ãƒ†ã‚¹ãƒˆã§ã™." - me1 = TclTkWidget.new(ip, t1, message, "-text {#{mes}}") - - ## modal - - # tk_messageBox - cb.push(c = TclTkCallback.new(ip, proc{ - print tk_messageBox.e("-type yesnocancel -message messageBox", - "-icon error -default cancel -title messageBox"), "\n"})) - b2 = TclTkWidget.new(ip, t1, button, "-text messageBox -command", c) - # tk_dialog - cb.push(c = TclTkCallback.new(ip, proc{ - # ウィジェットåを生æˆã™ã‚‹ãŸã‚ã«ãƒ€ãƒŸãƒ¼ã® frame を生æˆ. - print tk_dialog.e(TclTkWidget.new(ip, t1, frame), - "dialog dialog error 2 yes no cancel"), "\n"})) - b3 = TclTkWidget.new(ip, t1, button, "-text dialog -command", c) - # tk_chooseColor - cb.push(c = TclTkCallback.new(ip, proc{ - print tk_chooseColor.e("-title chooseColor"), "\n"})) - b4 = TclTkWidget.new(ip, t1, button, "-text chooseColor -command", c) - # tk_getOpenFile - cb.push(c = TclTkCallback.new(ip, proc{ - print tk_getOpenFile.e("-defaultextension .rb", - "-filetypes {{{Ruby Script} {.rb}} {{All Files} {*}}}", - "-title getOpenFile"), "\n"})) - b5 = TclTkWidget.new(ip, t1, button, "-text getOpenFile -command", c) - - pack.e(b1, me1, b2, b3, b4, b5) - end - - # menu ã®ã‚µãƒ³ãƒ—ル. - def test_menu(ip, parent) - global, menu, menubutton, pack = ip.commands().values_at( - "global", "menu", "menubutton", "pack") - tk_optionMenu = TclTkLibCommand.new(ip, "tk_optionMenu") - t1, b1, cb = inittoplevel(ip, parent, "menu") - - ## menu - - # menubutton を生æˆã™ã‚‹. - mb1 = TclTkWidget.new(ip, t1, menubutton, "-text menu") - # menu を生æˆã™ã‚‹. - me1 = TclTkWidget.new(ip, mb1, menu) - # mb1 ã‹ã‚‰ me1 ãŒèµ·å‹•ã•ã‚Œã‚‹ã‚ˆã†ã«ã™ã‚‹. - mb1.e("configure -menu", me1) - - # cascade ã§èµ·å‹•ã•ã‚Œã‚‹ menu を生æˆã™ã‚‹. - me11 = TclTkWidget.new(ip, me1, menu) - # radiobutton ã®ã‚µãƒ³ãƒ—ル. - v1 = TclTkVariable.new(ip, nil); global.e(v1); v1.set("r1") - me11.e("add radiobutton -label radio1 -value r1 -variable", v1) - me11.e("add radiobutton -label radio2 -value r2 -variable", v1) - me11.e("add radiobutton -label radio3 -value r3 -variable", v1) - # cascade ã«ã‚ˆã‚Š mb11 ãŒèµ·å‹•ã•ã‚Œã‚‹ã‚ˆã†ã«ã™ã‚‹. - me1.e("add cascade -label cascade -menu", me11) - - # checkbutton ã®ã‚µãƒ³ãƒ—ル. - v2 = TclTkVariable.new(ip, nil); global.e(v2); v2.set("none") - me1.e("add checkbutton -label check -variable", v2) - # separator ã®ã‚µãƒ³ãƒ—ル. - me1.e("add separator") - # command ã®ã‚µãƒ³ãƒ—ル. - v3 = nil - cb.push(c = TclTkCallback.new(ip, proc{ - global.e(v1, v2, v3); print "v1: ", v1.get(), ", v2: ", v2.get(), - ", v3: ", v3.get(), "\n"})) - me1.e("add command -label print -command", c) - - ## tk_optionMenu - - v3 = TclTkVariable.new(ip, nil); global.e(v3); v3.set("opt2") - om1 = TclTkWidget.new(ip, t1, tk_optionMenu, v3, "opt1 opt2 opt3 opt4") - - pack.e(b1, mb1, om1, "-side left") - end - - # listbox ã®ã‚µãƒ³ãƒ—ル. - def test_listbox(ip, parent) - clipboard, frame, grid, listbox, lower, menu, menubutton, pack, scrollbar, - selection = ip.commands().values_at( - "clipboard", "frame", "grid", "listbox", "lower", "menu", "menubutton", - "pack", "scrollbar", "selection") - t1, b1, cb = inittoplevel(ip, parent, "listbox") - - ## listbox/scrollbar - - f1 = TclTkWidget.new(ip, t1, frame) - # コールãƒãƒƒã‚¯å†…ã§å‚ç…§ã™ã‚‹å¤‰æ•°ã¯å…ˆã«å®£è¨€ã—ã¦ãŠã‹ãªã‘ã‚Œã°ãªã‚‰ãªã„. - li1 = sc1 = sc2 = nil - # 実行時ã«, 後ã‚ã«ãƒ‘ラメータãŒã¤ãコールãƒãƒƒã‚¯ã¯, - # イテレータ変数ã§ãã®ãƒ‘ラメータをå—ã‘å–ã‚‹ã“ã¨ãŒã§ãã‚‹. - # (複数ã®ãƒ‘ラメータã¯ã²ã¨ã¤ã®æ–‡å­—列ã«ã¾ã¨ã‚られる.) - cb.push(c1 = TclTkCallback.new(ip, proc{|i| li1.e("xview", i)})) - cb.push(c2 = TclTkCallback.new(ip, proc{|i| li1.e("yview", i)})) - cb.push(c3 = TclTkCallback.new(ip, proc{|i| sc1.e("set", i)})) - cb.push(c4 = TclTkCallback.new(ip, proc{|i| sc2.e("set", i)})) - # listbox - li1 = TclTkWidget.new(ip, f1, listbox, - "-xscrollcommand", c3, "-yscrollcommand", c4, - "-selectmode extended -exportselection true") - for i in 1..20 - li1.e("insert end {line #{i} line #{i} line #{i} line #{i} line #{i}}") - end - # scrollbar - sc1 = TclTkWidget.new(ip, f1, scrollbar, "-orient horizontal -command", c1) - sc2 = TclTkWidget.new(ip, f1, scrollbar, "-orient vertical -command", c2) - - ## selection/clipboard - - mb1 = TclTkWidget.new(ip, t1, menubutton, "-text edit") - me1 = TclTkWidget.new(ip, mb1, menu) - mb1.e("configure -menu", me1) - cb.push(c = TclTkCallback.new(ip, proc{ - # clipboard をクリア. - clipboard.e("clear") - # selection ã‹ã‚‰æ–‡å­—列を読ã¿è¾¼ã¿ clipboard ã«è¿½åŠ ã™ã‚‹. - clipboard.e("append {#{selection.e('get')}}")})) - me1.e("add command -label {selection -> clipboard} -command",c) - cb.push(c = TclTkCallback.new(ip, proc{ - # li1 をクリア. - li1.e("delete 0 end") - # clipboard ã‹ã‚‰æ–‡å­—列をå–り出ã—, 1 è¡Œãšã¤ - selection.e("get -selection CLIPBOARD").split(/\n/).each{|line| - # li1 ã«æŒ¿å…¥ã™ã‚‹. - li1.e("insert end {#{line}}")}})) - me1.e("add command -label {clipboard -> listbox} -command",c) - - grid.e(li1, "-row 0 -column 0 -sticky news") - grid.e(sc1, "-row 1 -column 0 -sticky ew") - grid.e(sc2, "-row 0 -column 1 -sticky ns") - grid.e("rowconfigure", f1, "0 -weight 100") - grid.e("columnconfigure", f1, "0 -weight 100") - f2 = TclTkWidget.new(ip, t1, frame) - lower.e(f2, b1) - pack.e(b1, mb1, "-in", f2, "-side left") - pack.e(f2, f1) - end - - # canvas ã®ã‚µãƒ³ãƒ—ル. - def test_canvas(ip, parent) - canvas, lower, pack = ip.commands().values_at("canvas", "lower", "pack") - t1, b1, cb = inittoplevel(ip, parent, "canvas") - - ## canvas - - ca1 = TclTkWidget.new(ip, t1, canvas, "-width 400 -height 300") - lower.e(ca1, b1) - # rectangle を作る. - idr = ca1.e("create rectangle 10 10 20 20") - # oval を作る. - ca1.e("create oval 60 10 100 50") - # polygon を作る. - ca1.e("create polygon 110 10 110 30 140 10") - # line を作る. - ca1.e("create line 150 10 150 30 190 10") - # arc を作る. - ca1.e("create arc 200 10 250 50 -start 0 -extent 90 -style pieslice") - # i1 ã¯æœ¬å½“ã¯, ã©ã“ã‹ã§ç ´å£Šã—ãªã‘ã‚Œã°ãªã‚‰ãªã„ãŒ, é¢å€’ãªã®ã§æ”¾ã£ã¦ã‚ã‚‹. - i1 = TclTkImage.new(ip, "photo", "-file maru.gif") - # image を作る. - ca1.e("create image 100 100 -image", i1) - # bitmap を作る. - ca1.e("create bitmap 260 50 -bitmap questhead") - # text を作る. - ca1.e("create text 320 50 -text {drag rectangle}") - # window を作る(クローズボタン). - ca1.e("create window 200 200 -window", b1) - - # bind ã«ã‚ˆã‚Š rectangle ã‚’ drag ã§ãるよã†ã«ã™ã‚‹. - cb.push(c = TclTkCallback.new(ip, proc{|i| - # i ã« x 㨠y ã‚’å—ã‘å–ã‚‹ã®ã§, å–り出ã™. - x, y = i.split(/ /); x = x.to_f; y = y.to_f - # 座標を変更ã™ã‚‹. - ca1.e("coords current #{x - 5} #{y - 5} #{x + 5} #{y + 5}")}, - # x, y 座標を空白ã§åŒºåˆ‡ã£ãŸã‚‚ã®ã‚’イテレータ変数ã¸æ¸¡ã™ã‚ˆã†ã«æŒ‡å®š. - "%x %y")) - # rectangle ã« bind ã™ã‚‹. - ca1.e("bind", idr, "", c) - - pack.e(ca1) - end -end - -# test driver - -if ARGV.size == 0 - print "#{$0} n ã§, n 個ã®ã‚¤ãƒ³ã‚¿ãƒ—リタを起動ã—ã¾ã™.\n" - n = 1 -else - n = ARGV[0].to_i -end - -print "start\n" -ip = [] - -# インタプリタ, ウィジェット等ã®ç”Ÿæˆ. -for i in 1 .. n - ip.push(Test1.new()) -end - -# 用æ„ãŒã§ããŸã‚‰ã‚¤ãƒ™ãƒ³ãƒˆãƒ«ãƒ¼ãƒ—ã«å…¥ã‚‹. -TclTk.mainloop() -print "exit from mainloop\n" - -# インタプリタ㌠GC ã•ã‚Œã‚‹ã‹ã®ãƒ†ã‚¹ãƒˆ. -ip = [] -print "GC.start\n" if $DEBUG -GC.start() if $DEBUG -print "end\n" - -exit - -# end diff --git a/ext/tk/sample/tcltklib/sample2.rb b/ext/tk/sample/tcltklib/sample2.rb deleted file mode 100644 index 7b9e4c2cca..0000000000 --- a/ext/tk/sample/tcltklib/sample2.rb +++ /dev/null @@ -1,452 +0,0 @@ -#!/usr/local/bin/ruby -# frozen_string_literal: false -#----------------------> pretty simple othello game <----------------------- -# othello.rb -# -# version 0.3 -# maeda shugo (shuto@po.aianet.ne.jp) -#--------------------------------------------------------------------------- - -# Sep. 17, 1997 modified by Y. Shigehiro for tcltk library -# maeda shugo (shugo@po.aianet.ne.jp) æ°ã«ã‚ˆã‚‹ -# (ruby/tk ã§æ›¸ã‹ã‚Œã¦ã„ãŸ) ruby ã®ã‚µãƒ³ãƒ—ルプログラム -# http://www.aianet.or.jp/~shugo/ruby/othello.rb.gz -# ã‚’ tcltk ライブラリを使ã†ã‚ˆã†ã«, 機械的ã«å¤‰æ›´ã—ã¦ã¿ã¾ã—ãŸ. -# -# ãªã‚‹ã¹ãオリジナルã¨åŒã˜ã«ãªã‚‹ã‚ˆã†ã«ã—ã¦ã‚ã‚Šã¾ã™. - -require "observer" -require "tcltk" -$ip = TclTkInterpreter.new() -$root = $ip.rootwidget() -$button, $canvas, $checkbutton, $frame, $label, $pack, $update, $wm = - $ip.commands().values_at( - "button", "canvas", "checkbutton", "frame", "label", "pack", "update", "wm") - -class Othello - - EMPTY = 0 - BLACK = 1 - WHITE = - BLACK - - attr :in_com_turn - attr :game_over - - class Board - - include Observable - - DIRECTIONS = [ - [-1, -1], [-1, 0], [-1, 1], - [ 0, -1], [ 0, 1], - [ 1, -1], [ 1, 0], [ 1, 1] - ] - - attr_accessor :com_disk - - def initialize(othello) - @othello = othello - reset - end - - def notify_observers(*arg) - if @observer_peers != nil - super(*arg) - end - end - - def reset - @data = [ - [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY], - [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY], - [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY], - [EMPTY, EMPTY, EMPTY, WHITE, BLACK, EMPTY, EMPTY, EMPTY], - [EMPTY, EMPTY, EMPTY, BLACK, WHITE, EMPTY, EMPTY, EMPTY], - [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY], - [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY], - [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY] - ] - changed - notify_observers - end - - def man_disk - return - @com_disk - end - - def other_disk(disk) - return - disk - end - - def get_disk(row, col) - return @data[row][col] - end - - def reverse_to(row, col, my_disk, dir_y, dir_x) - y = row - x = col - begin - y += dir_y - x += dir_x - if y < 0 || x < 0 || y > 7 || x > 7 || - @data[y][x] == EMPTY - return - end - end until @data[y][x] == my_disk - begin - @data[y][x] = my_disk - changed - notify_observers(y, x) - y -= dir_y - x -= dir_x - end until y == row && x == col - end - - def put_disk(row, col, disk) - @data[row][col] = disk - changed - notify_observers(row, col) - DIRECTIONS.each do |dir| - reverse_to(row, col, disk, *dir) - end - end - - def count_disk(disk) - num = 0 - @data.each do |rows| - rows.each do |d| - if d == disk - num += 1 - end - end - end - return num - end - - def count_point_to(row, col, my_disk, dir_y, dir_x) - return 0 if @data[row][col] != EMPTY - count = 0 - loop do - row += dir_y - col += dir_x - break if row < 0 || col < 0 || row > 7 || col > 7 - case @data[row][col] - when my_disk - return count - when other_disk(my_disk) - count += 1 - when EMPTY - break - end - end - return 0 - end - - def count_point(row, col, my_disk) - count = 0 - DIRECTIONS.each do |dir| - count += count_point_to(row, col, my_disk, *dir) - end - return count - end - - def corner?(row, col) - return (row == 0 && col == 0) || - (row == 0 && col == 7) || - (row == 7 && col == 0) || - (row == 7 && col == 7) - end - - def search(my_disk) - max = 0 - max_row = nil - max_col = nil - for row in 0 .. 7 - for col in 0 .. 7 - buf = count_point(row, col, my_disk) - if (corner?(row, col) && buf > 0) || max < buf - max = buf - max_row = row - max_col = col - end - end - end - return max_row, max_col - end - end #--------------------------> class Board ends here - - class BoardView < TclTkWidget - - BACK_GROUND_COLOR = "DarkGreen" - HILIT_BG_COLOR = "green" - BORDER_COLOR = "black" - BLACK_COLOR = "black" - WHITE_COLOR = "white" - STOP_COLOR = "red" - - attr :left - attr :top - attr :right - attr :bottom - - class Square - - attr_accessor :oval - attr :row - attr :col - - def initialize(view, row, col) - @view = view - @id = @view.e("create rectangle", - *(view.tk_rect(view.left + col, - view.top + row, - view.left + col + 1, - view.top + row + 1) \ - << "-fill #{BACK_GROUND_COLOR}") ) - @row = row - @col = col - @view.e("itemconfigure", @id, - "-width 0.5m -outline #{BORDER_COLOR}") - @view.e("bind", @id, "", TclTkCallback.new($ip, proc{ - if @oval == nil - view.e("itemconfigure", @id, "-fill #{HILIT_BG_COLOR}") - end - })) - @view.e("bind", @id, "", TclTkCallback.new($ip, proc{ - view.e("itemconfigure", @id, "-fill #{BACK_GROUND_COLOR}") - })) - @view.e("bind", @id, "", TclTkCallback.new($ip, - proc{ - view.click_square(self) - })) - end - - def blink(color) - @view.e("itemconfigure", @id, "-fill #{color}") - $update.e() - sleep(0.1) - @view.e("itemconfigure", @id, "-fill #{BACK_GROUND_COLOR}") - end - end #-----------------------> class Square ends here - - def initialize(othello, board) - super($ip, $root, $canvas) - @othello = othello - @board = board - @board.add_observer(self) - - @squares = Array.new(8) - for i in 0 .. 7 - @squares[i] = Array.new(8) - end - @left = 1 - @top = 0.5 - @right = @left + 8 - @bottom = @top + 8 - - i = self.e("create rectangle", *tk_rect(@left, @top, @right, @bottom)) - self.e("itemconfigure", i, - "-width 1m -outline #{BORDER_COLOR} -fill #{BACK_GROUND_COLOR}") - - for row in 0 .. 7 - for col in 0 .. 7 - @squares[row][col] = Square.new(self, row, col) - end - end - - update - end - - def tk_rect(left, top, right, bottom) - return left.to_s + "c", top.to_s + "c", - right.to_s + "c", bottom.to_s + "c" - end - - def clear - each_square do |square| - if square.oval != nil - self.e("delete", square.oval) - square.oval = nil - end - end - end - - def draw_disk(row, col, disk) - if disk == EMPTY - if @squares[row][col].oval != nil - self.e("delete", @squares[row][col].oval) - @squares[row][col].oval = nil - end - return - end - - $update.e() - sleep(0.05) - oval = @squares[row][col].oval - if oval == nil - oval = self.e("create oval", *tk_rect(@left + col + 0.2, - @top + row + 0.2, - @left + col + 0.8, - @top + row + 0.8)) - @squares[row][col].oval = oval - end - case disk - when BLACK - color = BLACK_COLOR - when WHITE - color = WHITE_COLOR - else - fail format("Unknown disk type: %d", disk) - end - self.e("itemconfigure", oval, "-outline #{color} -fill #{color}") - end - - def update(row = nil, col = nil) - if row && col - draw_disk(row, col, @board.get_disk(row, col)) - else - each_square do |square| - draw_disk(square.row, square.col, - @board.get_disk(square.row, square.col)) - end - end - @othello.show_point - end - - def each_square - @squares.each do |rows| - rows.each do |square| - yield(square) - end - end - end - - def click_square(square) - if @othello.in_com_turn || @othello.game_over || - @board.count_point(square.row, - square.col, - @board.man_disk) == 0 - square.blink(STOP_COLOR) - return - end - @board.put_disk(square.row, square.col, @board.man_disk) - @othello.com_turn - end - - private :draw_disk - public :update - end #----------------------> class BoardView ends here - - def initialize - @msg_label = TclTkWidget.new($ip, $root, $label) - $pack.e(@msg_label) - - @board = Board.new(self) - @board_view = BoardView.new(self, @board) - #### added by Y. Shigehiro - ## board_view ã®å¤§ãã•ã‚’設定ã™ã‚‹. - x1, y1, x2, y2 = @board_view.e("bbox all").split(/ /).collect{|i| i.to_f} - @board_view.e("configure -width", x2 - x1) - @board_view.e("configure -height", y2 - y1) - ## scrollregion を設定ã™ã‚‹. - @board_view.e("configure -scrollregion {", @board_view.e("bbox all"), - "}") - #### ã“ã“ã¾ã§ - $pack.e(@board_view, "-fill both -expand true") - - panel = TclTkWidget.new($ip, $root, $frame) - - @play_black = TclTkWidget.new($ip, panel, $checkbutton, - "-text {com is black} -command", TclTkCallback.new($ip, proc{ - switch_side - })) - $pack.e(@play_black, "-side left") - - quit = TclTkWidget.new($ip, panel, $button, "-text Quit -command", - TclTkCallback.new($ip, proc{ - exit - })) - $pack.e(quit, "-side right -fill x") - - reset = TclTkWidget.new($ip, panel, $button, "-text Reset -command", - TclTkCallback.new($ip, proc{ - reset_game - })) - $pack.e(reset, "-side right -fill x") - - $pack.e(panel, "-side bottom -fill x") - -# root = Tk.root - $wm.e("title", $root, "Othello") - $wm.e("iconname", $root, "Othello") - - @board.com_disk = WHITE - @game_over = false - - TclTk.mainloop - end - - def switch_side - if @in_com_turn - @play_black.e("toggle") - else - @board.com_disk = @board.man_disk - com_turn unless @game_over - end - end - - def reset_game - if @board.com_disk == BLACK - @board.com_disk = WHITE - @play_black.e("toggle") - end - @board_view.clear - @board.reset - $wm.e("title", $root, "Othello") - @game_over = false - end - - def com_turn - @in_com_turn = true - $update.e() - sleep(0.5) - begin - com_disk = @board.count_disk(@board.com_disk) - man_disk = @board.count_disk(@board.man_disk) - if @board.count_disk(EMPTY) == 0 - if man_disk == com_disk - $wm.e("title", $root, "{Othello - Draw!}") - elsif man_disk > com_disk - $wm.e("title", $root, "{Othello - You Win!}") - else - $wm.e("title", $root, "{Othello - You Loose!}") - end - @game_over = true - break - elsif com_disk == 0 - $wm.e("title", $root, "{Othello - You Win!}") - @game_over = true - break - elsif man_disk == 0 - $wm.e("title", $root, "{Othello - You Loose!}") - @game_over = true - break - end - row, col = @board.search(@board.com_disk) - break if row == nil || col == nil - @board.put_disk(row, col, @board.com_disk) - end while @board.search(@board.man_disk) == [nil, nil] - @in_com_turn = false - end - - def show_point - black = @board.count_disk(BLACK) - white = @board.count_disk(WHITE) - @msg_label.e("configure -text", - %Q/{#{format("BLACK: %.2d WHITE: %.2d", black, white)}}/) - end -end #----------------------> class Othello ends here - -Othello.new - -#----------------------------------------------> othello.rb ends here diff --git a/ext/tk/sample/tkalignbox.rb b/ext/tk/sample/tkalignbox.rb deleted file mode 100644 index 89aae111b7..0000000000 --- a/ext/tk/sample/tkalignbox.rb +++ /dev/null @@ -1,236 +0,0 @@ -# frozen_string_literal: false -# -# tkalignbox.rb : align widgets with same width/height -# -# by Hidetoshi NAGAI -# -# The box size depends on 'reqheight' and 'reqwidth' of contained widgets. -# If you want to give the box size when those requested sizes are 0, -# please set box.propagate = false (See the test routine at the tail of -# this file). - -require 'tk' - -module Tk - module RbWidget - class AlignBox < TkFrame - end - end -end - -class Tk::RbWidget::AlignBox < TkFrame - def initialize(*args) - if self.class == Tk::RbWidget::AlignBox - fail RuntimeError, "Tk::AlignBox is an abstract class" - end - @padx = 0 - @pady = 0 - if args[-1].kind_of? Hash - keys = _symbolkey2str(args.pop) - @padx = keys.delete('padx') || 0 - @pady = keys.delete('pady') || 0 - args.push(keys) - end - super(*args) - @max_width = 0 - @max_height = 0 - @propagate = true - @widgets = [] - end - - def _set_framesize - fail RuntimeError, "Tk::AlignBox is an abstract class" - end - private :_set_framesize - - def _place_config(widget, idx, cnt) - fail RuntimeError, "Tk::AlignBox is an abstract class" - end - private :_place_config - - def align - widgets = [] - @widgets.each{|w| widgets << w if w.winfo_exist?} - @widgets = widgets - cnt = @widgets.size.to_f - @widgets.each_with_index{|w, idx| _place_config(w, idx, cnt)} - @widgets = widgets - _set_framesize if @propagate - self - end - - def add(*widgets) - widgets.each{|w| - unless w.kind_of? TkWindow - fail RuntimeError, "#{w.inspect} is not a widget instance." - end - @widgets.delete(w) - @widgets << w - sz = w.winfo_reqwidth - @max_width = sz if @max_width < sz - sz = w.winfo_reqheight - @max_height = sz if @max_height < sz - } - align - end - - def <<(widget) - add(widget) - end - - def insert(idx, widget) - unless widget.kind_of? TkWindow - fail RuntimeError, "#{widget.inspect} is not a widget instance." - end - @widgets.delete(widget) - @widgets[idx,0] = widget - sz = widget.winfo_reqwidth - @max_width = sz if @max_width < sz - sz = widget.winfo_reqheight - @max_height = sz if @max_height < sz - align - end - - def delete(idx) - ret = @widgets.delete_at(idx) - @req_size = 0 - @widget.each{|w| - sz = w.winfo_reqwidth - @max_width = sz if @max_width < sz - sz = w.winfo_reqheight - @max_height = sz if @max_height < sz - } - align - ret - end - - def padx(size = nil) - if size - @padx = size - align - else - @padx - end - end - - def pady(size = nil) - if size - @pady = size - align - else - @pady - end - end - - attr_accessor :propagate -end - -class Tk::RbWidget::HBox < Tk::RbWidget::AlignBox - def _set_framesize - bd = self.borderwidth - self.width((@max_width + 2*@padx) * @widgets.size + 2*bd) - self.height(@max_height + 2*@pady + 2*bd) - end - private :_set_framesize - - def _place_config(widget, idx, cnt) - widget.place_in(self, - 'relx'=>idx/cnt, 'x'=>@padx, - 'rely'=>0, 'y'=>@pady, - 'relwidth'=>1.0/cnt, 'width'=>-2*@padx, - 'relheight'=>1.0, 'height'=>-2*@pady) - end - private :_place_config -end -Tk::RbWidget::HLBox = Tk::RbWidget::HBox - -class Tk::RbWidget::HRBox < Tk::RbWidget::HBox - def _place_config(widget, idx, cnt) - widget.place_in(self, - 'relx'=>(cnt - idx - 1)/cnt, 'x'=>@padx, - 'rely'=>0, 'y'=>@pady, - 'relwidth'=>1.0/cnt, 'width'=>-2*@padx, - 'relheight'=>1.0, 'height'=>-2*@pady) - end - private :_place_config -end - -class Tk::RbWidget::VBox < Tk::RbWidget::AlignBox - def _set_framesize - bd = self.borderwidth - self.width(@max_width + 2*@padx + 2*bd) - self.height((@max_height + 2*@pady) * @widgets.size + 2*bd) - end - private :_set_framesize - - def _place_config(widget, idx, cnt) - widget.place_in(self, - 'relx'=>0, 'x'=>@padx, - 'rely'=>idx/cnt, 'y'=>@pady, - 'relwidth'=>1.0, 'width'=>-2*@padx, - 'relheight'=>1.0/cnt, 'height'=>-2*@pady) - end - private :_place_config -end -Tk::RbWidget::VTBox = Tk::RbWidget::VBox - -class Tk::RbWidget::VBBox < Tk::RbWidget::VBox - def _place_config(widget, idx, cnt) - widget.place_in(self, - 'relx'=>0, 'x'=>@padx, - 'rely'=>(cnt - idx - 1)/cnt, 'y'=>@pady, - 'relwidth'=>1.0, 'width'=>-2*@padx, - 'relheight'=>1.0/cnt, 'height'=>-2*@pady) - end - private :_place_config -end - -################################################ -# test -################################################ -if __FILE__ == $0 - f = Tk::RbWidget::HBox.new(:borderwidth=>3, :relief=>'ridge').pack - f.add(TkButton.new(f, :text=>'a'), - TkButton.new(f, :text=>'aa', :font=>'Helvetica 16'), - TkButton.new(f, :text=>'aaa'), - TkButton.new(f, :text=>'aaaa')) - - f = Tk::RbWidget::HBox.new(:borderwidth=>3, :relief=>'ridge', - :padx=>7, :pady=>3, :background=>'yellow').pack - f.add(TkButton.new(f, :text=>'a'), - TkButton.new(f, :text=>'aa', :font=>'Helvetica 16'), - TkButton.new(f, :text=>'aaa'), - TkButton.new(f, :text=>'aaaa')) - - f = Tk::RbWidget::VBox.new(:borderwidth=>5, - :relief=>'groove').pack(:fill=>:y, :expand=>true) - f.add(TkButton.new(f, :text=>'a'), - TkButton.new(f, :text=>'aa', :font=>'Helvetica 30'), - TkButton.new(f, :text=>'aaa'), - TkButton.new(f, :text=>'aaaa')) - - f = Tk::RbWidget::HRBox.new(:borderwidth=>3, - :relief=>'raised').pack(:fill=>:x) - f.add(TkButton.new(f, :text=>'a'), - TkButton.new(f, :text=>'aa'), - TkButton.new(f, :text=>'aaa')) - - f = Tk::RbWidget::VBBox.new(:borderwidth=>3, - :relief=>'ridge').pack(:fill=>:x) - f.propagate = false - f.height 100 - f.add(TkFrame.new(f){|ff| - TkButton.new(ff, :text=>'a').pack(:pady=>4, :padx=>6, - :fill=>:both, :expand=>true) - }, - TkFrame.new(f){|ff| - TkButton.new(ff, :text=>'aa').pack(:pady=>4, :padx=>6, - :fill=>:both, :expand=>true) - }, - TkFrame.new(f){|ff| - TkButton.new(ff, :text=>'aaaa').pack(:pady=>4, :padx=>6, - :fill=>:both, :expand=>true) - }) - - Tk.mainloop -end diff --git a/ext/tk/sample/tkballoonhelp.rb b/ext/tk/sample/tkballoonhelp.rb deleted file mode 100644 index f6f2c8ab0c..0000000000 --- a/ext/tk/sample/tkballoonhelp.rb +++ /dev/null @@ -1,221 +0,0 @@ -# frozen_string_literal: false -# -# tkballoonhelp.rb : simple balloon help widget -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -# Add a balloon help to a widget. -# This widget has only poor features. If you need more useful features, -# please try to use the Tix extension of Tcl/Tk under Ruby/Tk. -# -# The interval time to display a balloon help is defined 'interval' option -# (default is 750ms). -# -require 'tk' - -module Tk - module RbWidget - class BalloonHelp'bisque').pack - @label = TkLabel.new(@frame, - 'foreground'=>DEFAULT_FOREGROUND, - 'background'=>DEFAULT_BACKGROUND).pack - @label.configure(_symbolkey2str(keys)) unless keys.empty? - @path = @label - end - - def epath - @epath - end - - def interval(val) - if val - @timer.interval(val) - else - @interval - end - end - - def command(cmd = Proc.new) - @command = cmd - self - end - - def show - x = TkWinfo.pointerx(@parent) - y = TkWinfo.pointery(@parent) - @frame.geometry("+#{x+1}+#{y+1}") - - if @command - case @command.arity - when 0 - @command.call - when 2 - @command.call(x - TkWinfo.rootx(@parent), y - TkWinfo.rooty(@parent)) - when 3 - @command.call(x - TkWinfo.rootx(@parent), y - TkWinfo.rooty(@parent), - self) - else - @command.call(x - TkWinfo.rootx(@parent), y - TkWinfo.rooty(@parent), - self, @parent) - end - end - - @frame.deiconify - @frame.raise - - begin - @org_cursor = @parent.cget('cursor') - rescue - @org_cursor = @parent['cursor'] - end - begin - @parent.configure('cursor', 'crosshair') - rescue - @parent.cursor('crosshair') - end - end - - def erase - begin - @parent.configure('cursor', @org_cursor) - rescue - @parent.cursor(@org_cursor) - end - @frame.withdraw - end - - def destroy - @frame.destroy - end -end - -################################################ -# test -################################################ -if __FILE__ == $0 - TkButton.new('text'=>'This button has a balloon help') {|b| - pack('fill'=>'x') - Tk::RbWidget::BalloonHelp.new(b, 'text'=>' Message ') - } - TkButton.new('text'=>'This button has another balloon help') {|b| - pack('fill'=>'x') - Tk::RbWidget::BalloonHelp.new(b, - 'text'=>"CONFIGURED MESSAGE\nchange colors, and so on", - 'interval'=>200, 'font'=>'courier', - 'background'=>'gray', 'foreground'=>'red') - } - - sb = TkScrollbox.new.pack(:fill=>:x) - sb.insert(:end, *%w(aaa bbb ccc ddd eee fff ggg hhh iii jjj kkk lll mmm)) -=begin - # CASE1 : command takes no argument - bh = Tk::RbWidget::BalloonHelp.new(sb, :interval=>500, - :relief=>:ridge, :background=>'white', - :command=>proc{ - y = TkWinfo.pointery(sb) - TkWinfo.rooty(sb) - bh.text "current index == #{sb.nearest(y)}" - }) -=end -=begin - # CASE2 : command takes 2 arguments - bh = Tk::RbWidget::BalloonHelp.new(sb, :interval=>500, - :relief=>:ridge, :background=>'white', - :command=>proc{|x, y| - bh.text "current index == #{sb.nearest(y)}" - }) -=end -=begin - # CASE3 : command takes 3 arguments - Tk::RbWidget::BalloonHelp.new(sb, :interval=>500, - :relief=>:ridge, :background=>'white', - :command=>proc{|x, y, bhelp| - bhelp.text "current index == #{sb.nearest(y)}" - }) -=end -=begin - # CASE4a : command is a Proc object and takes 4 arguments - cmd = proc{|x, y, bhelp, parent| - bhelp.text "current index == #{parent.nearest(y)}" - } - - Tk::RbWidget::BalloonHelp.new(sb, :interval=>500, - :relief=>:ridge, :background=>'white', - :command=>cmd) - - sb2 = TkScrollbox.new.pack(:fill=>:x) - sb2.insert(:end, *%w(AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK LLL MMM)) - Tk::RbWidget::BalloonHelp.new(sb2, :interval=>500, - :padx=>5, :relief=>:raised, - :background=>'gray25', :foreground=>'white', - :command=>cmd) -=end -#=begin - # CASE4b : command is a Method object and takes 4 arguments - def set_msg(x, y, bhelp, parent) - bhelp.text "current index == #{parent.nearest(y)}" - end - cmd = self.method(:set_msg) - - Tk::RbWidget::BalloonHelp.new(sb, :interval=>500, - :relief=>:ridge, :background=>'white', - :command=>cmd) - - sb2 = TkScrollbox.new.pack(:fill=>:x) - sb2.insert(:end, *%w(AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK LLL MMM)) - Tk::RbWidget::BalloonHelp.new(sb2, :interval=>500, - :padx=>5, :relief=>:raised, - :background=>'gray25', :foreground=>'white', - :command=>cmd) -#=end - - Tk.mainloop -end diff --git a/ext/tk/sample/tkbiff.rb b/ext/tk/sample/tkbiff.rb deleted file mode 100644 index 8dc586a8ff..0000000000 --- a/ext/tk/sample/tkbiff.rb +++ /dev/null @@ -1,156 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false - -if ARGV[0] != '-d' - unless $DEBUG - exit if fork - end -else - ARGV.shift -end - -if ARGV.length == 0 - if ENV['MAIL'] - $spool = ENV['MAIL'] - else - $spool = '/var/spool/mail/' + ENV['USER'] - end -else - $spool = ARGV[0] -end - -require "base64" - -class Mail - def Mail.new(f) - if !f.kind_of?(IO) - f = open(f, "r") - me = super - f.close - else - me = super - end - return me - end - - def initialize(f) - @header = {} - @body = [] - while line = f.gets() - line.chop! - next if /^From / =~ line # skip From-line - break if /^$/ =~ line # end of header - if /^(\S+):\s*(.*)/ =~ line - @header[attr = $1.capitalize] = $2 - elsif attr - sub(/^\s*/, '') - @header[attr] += "\n" + $_ - end - end - - return unless $_ - - while line = f.gets() - break if /^From / =~ line - @body.push($_) - end - end - - def header - return @header - end - - def body - return @body - end - -end - -require "tkscrollbox" - -my_appname = Tk.appname('tkbiff') -$top = TkRoot.new -if ((TkWinfo.interps($top) - [my_appname]).find{|ip| ip =~ /^tkbiff/}) - STDERR.print("Probably other 'tkbiff's are running. Bye.\n") - exit -end - -$top.withdraw -$list = TkScrollbox.new($top) { - relief 'raised' - width 80 - height 8 - setgrid 'yes' - pack -} -TkButton.new($top) { - text 'Dismiss' - command proc {$top.withdraw} - pack('fill'=>'both','expand'=>'yes') -} -$top.bind "Control-c", proc{exit} -$top.bind "Control-q", proc{exit} -$top.bind "space", proc{exit} - -$spool_size = 0 -$check_time = Time.now - -def check - $check_time = Time.now - size = File.size($spool) - if size and size != $spool_size - $spool_size = size - pop_up if size > 0 - end - Tk.after 5000, proc{check} -end - -if defined? Thread - Thread.start do - loop do - sleep 600 - if Time.now - $check_time > 200 - Tk.after 5000, proc{check} - end - end - end -end - -def pop_up - outcount = 0; - $list.delete 0, 'end' - f = open($spool, "r") - while !f.eof? - mail = Mail.new(f) - date, from, subj = mail.header['Date'], mail.header['From'], mail.header['Subject'] - next if !date - y = m = d = 0 - if date - date = Date.parse(date) - y, m, d = date.year, date.month, date.mday - end - from = "sombody@somewhere" if ! from - subj = "(nil)" if ! subj - from = decode_b(from) - subj = decode_b(subj) - $list.insert 'end', format('%-02d/%02d/%02d [%-28.28s] %s',y,m,d,from,subj) - outcount += 1 - end - f.close - if outcount == 0 - $list.insert 'end', "You have no mail." - else - $list.see 'end' - end - $top.deiconify - Tk.after 2000, proc{$top.iconify} -end - -$list.insert 'end', "You have no mail." -check -Tk.after 2000, proc{$top.iconify} -begin - Tk.mainloop -rescue - `echo #$! > /tmp/tkbiff` -end diff --git a/ext/tk/sample/tkbrowse.rb b/ext/tk/sample/tkbrowse.rb deleted file mode 100644 index f083a8ac77..0000000000 --- a/ext/tk/sample/tkbrowse.rb +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -# -# This script generates a directory browser, which lists the working -# directory and allows you to open files or subdirectories by -# double-clicking. - -# Create a scrollbar on the right side of the main window and a listbox -# on the left side. - -require "tkscrollbox" - -# The procedure below is invoked to open a browser on a given file; if the -# file is a directory then another instance of this program is invoked; if -# the file is a regular file then the Mx editor is invoked to display -# the file. - -$dirlist = {} - -def browsedir (dir) - if $dirlist.key? dir - $dirlist[dir] - else - top = if $dirlist.size > 0 then TkToplevel.new else nil end - list = TkScrollbox.new(top) { - relief 'raised' - width 20 - height 20 - setgrid 'yes' - pack - } - list.insert 'end', *`ls #{dir}`.split - - # Set up bindings for the browser. - - list.focus - list.bind "Control-q", proc{exit} - list.bind "Control-c", proc{exit} - list.bind "Control-p", proc{ - print "selection <", TkSelection.get, ">\n" - } - - list.bind "Double-Button-1", proc{ - for i in TkSelection.get.split - print "clicked ", i, "\n" - browse dir, i - end - } - $dirlist[dir] = list - end -end - -def browse (dir, file) - file="#{dir}/#{file}" - if File.directory? file - browsedir(file) - else - if File.file? file - if ENV['EDITOR'] - system format("%s %s&", ENV['EDITOR'], file) - else - system "xedit #{file}&" - end - else - STDERR.print "\"#{file}\" isn't a directory or regular file" - end - end -end - -# Fill the listbox with a list of all the files in the directory (run -# the "ls" command to get that information). - -if ARGV.length>0 - dir = ARGV[0] -else - dir="." -end - -browsedir(dir) -Tk.mainloop diff --git a/ext/tk/sample/tkcombobox.rb b/ext/tk/sample/tkcombobox.rb deleted file mode 100644 index 17adbc9f9e..0000000000 --- a/ext/tk/sample/tkcombobox.rb +++ /dev/null @@ -1,498 +0,0 @@ -# frozen_string_literal: false -# -# tkcombobox.rb : auto scrollbox & combobox -# -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -module Tk - module RbWidget - class AutoScrollListbox < TkListbox - end - class Combobox < TkEntry - end - end -end - -class Tk::RbWidget::AutoScrollListbox - include TkComposite - - @@up_bmp = TkBitmapImage.new(:data=><<0) - @path = @lbox.path - TkPack.propagate(@lbox, false) - - @scr = TkScrollbar.new(@frame, :width=>10) - - @lbox.yscrollcommand(proc{|*args| @scr.set(*args); _config_proc}) - @scr.command(proc{|*args| @lbox.yview(*args); _config_proc}) - - @up_arrow = TkLabel.new(@lbox, :image=>@@up_bmp, - :relief=>:raised, :borderwidth=>1) - @down_arrow = TkLabel.new(@lbox, :image=>@@down_bmp, - :relief=>:raised, :borderwidth=>1) - - _init_binding - - @lbox.pack(:side=>:left, :fill=>:both, :expand=>:true) - - delegate('DEFAULT', @lbox) - delegate('background', @frame, @scr) - delegate('activebackground', @scr) - delegate('troughcolor', @scr) - delegate('repeatdelay', @scr) - delegate('repeatinterval', @scr) - delegate('relief', @frame) - delegate('borderwidth', @frame) - - delegate_alias('arrowrelief', 'relief', @up_arrow, @down_arrow) - delegate_alias('arrowborderwidth', 'borderwidth', @up_arrow, @down_arrow) - - scrollbar(keys.delete('scrollbar')){false} - - configure keys unless keys.empty? - end - - def _show_up_arrow - unless @up_arrow.winfo_mapped? - @up_arrow.pack(:side=>:top, :fill=>:x) - end - end - - def _show_down_arrow - unless @down_arrow.winfo_mapped? - @down_arrow.pack(:side=>:bottom, :fill=>:x) - end - end - - def _set_sel(idx) - @lbox.activate(idx) - @lbox.selection_clear(0, 'end') - @lbox.selection_set(idx) - end - - def _check_sel(cidx, tidx = nil, bidx = nil) - _set_sel(cidx) - unless tidx - tidx = @lbox.nearest(0) - tidx += 1 if tidx > 0 - end - unless bidx - bidx = @lbox.nearest(10000) - bidx -= 1 if bidx < @lbox.index('end') - 1 - end - if cidx > bidx - _set_sel(bidx) - end - if cidx < tidx - _set_sel(tidx) - end - end - - def _up_proc - cidx = @lbox.curselection[0] - idx = @lbox.nearest(0) - if idx >= 0 - @lbox.see(idx - 1) - _set_sel(idx) - @up_arrow.pack_forget if idx == 1 - @up_timer.stop if idx == 0 - _show_down_arrow if @lbox.bbox('end') == [] - end - if cidx && cidx > 0 && (idx == 0 || cidx == @lbox.nearest(10000)) - _set_sel(cidx - 1) - end - end - - def _down_proc - cidx = @lbox.curselection[0] - eidx = @lbox.index('end') - 1 - idx = @lbox.nearest(10000) - if idx <= eidx - @lbox.see(idx + 1) - _set_sel(cidx + 1) if cidx < eidx - @down_arrow.pack_forget if idx + 1 == eidx - @down_timer.stop if idx == eidx - _show_up_arrow if @lbox.bbox(0) == [] - end - if cidx && cidx < eidx && (eidx == idx || cidx == @lbox.nearest(0)) - _set_sel(cidx + 1) - end - end - - def _key_UP_proc - cidx = @lbox.curselection[0] - _set_sel(cidx = @lbox.index('activate')) unless cidx - cidx -= 1 - if cidx == 0 - @up_arrow.pack_forget - elsif cidx == @lbox.nearest(0) - @lbox.see(cidx - 1) - end - end - - def _key_DOWN_proc - cidx = @lbox.curselection[0] - _set_sel(cidx = @lbox.index('activate')) unless cidx - cidx += 1 - if cidx == @lbox.index('end') - 1 - @down_arrow.pack_forget - elsif cidx == @lbox.nearest(10000) - @lbox.see(cidx + 1) - end - end - - def _config_proc - if @lbox.size == 0 - @up_arrow.pack_forget - @down_arrow.pack_forget - return - end - tidx = @lbox.nearest(0) - bidx = @lbox.nearest(10000) - if tidx > 0 - _show_up_arrow - tidx += 1 - else - @up_arrow.pack_forget unless @up_timer.running? - end - if bidx < @lbox.index('end') - 1 - _show_down_arrow - bidx -= 1 - else - @down_arrow.pack_forget unless @down_timer.running? - end - cidx = @lbox.curselection[0] - _check_sel(cidx, tidx, bidx) if cidx - end - - def _init_binding - @up_timer = TkAfter.new(@interval, -1, proc{_up_proc}) - @down_timer = TkAfter.new(@interval, -1, proc{_down_proc}) - - @up_timer.set_start_proc(@initwait, proc{}) - @down_timer.set_start_proc(@initwait, proc{}) - - @up_arrow.bind('Enter', proc{@up_timer.start}) - @up_arrow.bind('Leave', proc{@up_timer.stop if @up_arrow.winfo_mapped?}) - @down_arrow.bind('Enter', proc{@down_timer.start}) - @down_arrow.bind('Leave', proc{@down_timer.stop if @down_arrow.winfo_mapped?}) - - @lbox.bind('Configure', proc{_config_proc}) - @lbox.bind('Enter', proc{|y| _set_sel(@lbox.nearest(y))}, '%y') - @lbox.bind('Motion', proc{|y| - @up_timer.stop if @up_timer.running? - @down_timer.stop if @down_timer.running? - _check_sel(@lbox.nearest(y)) - }, '%y') - - @lbox.bind('Up', proc{_key_UP_proc}) - @lbox.bind('Down', proc{_key_DOWN_proc}) - end - - ############################ - public - ############################ - def scrollbar(mode) - if mode - @scr.pack(:side=>:right, :fill=>:y) - else - @scr.pack_forget - end - end -end - -################################################ - -class Tk::RbWidget::Combobox < TkEntry - include TkComposite - - @@down_btn_bmp = TkBitmapImage.new(:data=><< 0 - @lst.see(0) - @lst.activate(0) - @lst.selection_set(0) - end - @top.grab - - begin - @wait_var.tkwait - if (idx = @wait_var.to_i) >= 0 - # @ent.value = @lst.get(idx) - _set_entry_value(@lst.get(idx)) - end - @top.withdraw - @btn.relief(:raised) - @btn.image(@@down_btn_bmp) - rescue - ensure - begin - @top.grab(:release) - @ent.focus - rescue - end - end - end - private :_button_proc - - def _init_bindings - @btn.bind('1', proc{_button_proc(true)}) - @btn.bind('3', proc{_button_proc(false)}) - - @lst.bind('1', proc{|y| @wait_var.value = @lst.nearest(y)}, '%y') - @lst.bind('Return', proc{@wait_var.value = @lst.curselection[0]}) - - cancel = TkVirtualEvent.new('2', '3', 'Escape') - @lst.bind(cancel, proc{@wait_var.value = -1}) - end - private :_init_bindings - - def _set_entry_value(val) - @ent.textvariable.value = val - end - private :_set_entry_value - - #---------------------------------------------------- - - def _state_control(value = None) - if value == None - # get - @ent.state - else - # set - @ent.state(value.to_s) - case value = @ent.state # regulate 'state' string - when 'normal', 'readonly' - @btn.state 'normal' - when 'disabled' - @btn.state 'disabled' - else - # unknown : do nothing - end - end - end - private :_state_control - - def __methodcall_optkeys # { key=>method, ... } - {'state' => :_state_control} - end - private :__methodcall_optkeys - - #---------------------------------------------------- - - def _textvariable_control(var = None) - if var == None - # get - ((var = @ent.textvariable) === @default_var)? nil: var - else - # set - @var = var - tk_send('configure', '-textvariable', (@var)? var: @default_var) - end - end - private :_textvariable_control - - #---------------------------------------------------- - - def initialize_composite(keys={}) - keys = _symbolkey2str(keys) - - @btn = TkLabel.new(@frame, :relief=>:raised, :borderwidth=>2, - :image=>@@down_btn_bmp).pack(:side=>:right, - :ipadx=>2, :fill=>:y) - @ent = TkEntry.new(@frame).pack(:side=>:left) - @path = @ent.path - - @top = TkToplevel.new(@btn, :borderwidth=>1, :relief=>:raised) { - withdraw - transient - overrideredirect(true) - } - - startwait = keys.delete('startwait'){300} - interval = keys.delete('interval'){150} - @lst = Tk::RbWidget::AutoScrollListbox.new(@top, :scrollbar=>true, - :startwait=>startwait, - :interval=>interval) - @lst.pack(:fill=>:both, :expand=>true) - @ent_list = [] - - @wait_var = TkVariable.new - @var = @default_var = TkVariable.new - - @ent.textvariable @default_var - - _init_bindings - - option_methods('textvariable' => :_textvariable_control) - - delegate('DEFAULT', @ent) - delegate('height', @lst) - delegate('relief', @frame) - delegate('borderwidth', @frame) - - delegate('arrowrelief', @lst) - delegate('arrowborderwidth', @lst) - - delegate('state', false) - - if mode = keys.delete('scrollbar') - scrollbar(mode) - end - - configure keys unless keys.empty? - end - private :initialize_composite - - def scrollbar(mode) - @lst.scrollbar(mode) - end - - def _reset_width - len = @ent.width - @lst.get(0, 'end').each{|l| len = l.length if l.length > len} - @lst.width(len + 1) - end - private :_reset_width - - def add(ent) - ent = ent.to_s - unless @ent_list.index(ent) - @ent_list << ent - @lst.insert('end', ent) - end - _reset_width - self - end - - def remove(ent) - ent = ent.to_s - @ent_list.delete(ent) - if idx = @lst.get(0, 'end').index(ent) - @lst.delete(idx) - end - _reset_width - self - end - - def values(ary = nil) - if ary - @lst.delete(0, 'end') - @ent_list.clear - ary.each{|ent| add(ent)} - _reset_width - self - else - @lst.get(0, 'end') - end - end - - def see(idx) - @lst.see(@lst.index(idx) - 1) - end - - def list_index(idx) - @lst.index(idx) - end -end - - -################################################ -# test -################################################ -if __FILE__ == $0 -# e0 = Tk::RbWidget::Combobox.new.pack -# e0.values(%w(aa bb cc dd ee ff gg hh ii jj kk ll mm nn oo pp qq rr ss tt uu)) - - v = TkVariable.new - e = Tk::RbWidget::Combobox.new(:height=>7, :scrollbar=>true, - :textvariable=>v, - :arrowrelief=>:flat, :arrowborderwidth=>0, - :startwait=>400, :interval=>200).pack - e.values(%w(aa bb cc dd ee ff gg hh ii jj kk ll mm nn oo pp qq rr ss tt uu)) - #e.see(e.list_index('end') - 2) - e.value = 'cc' - TkFrame.new{|f| - fnt = TkFont.new('Helvetica 10') - TkLabel.new(f, :font=>fnt, :text=>'TkCombobox value :').pack(:side=>:left) - TkLabel.new(f, :font=>fnt, :textvariable=>v).pack(:side=>:left) - }.pack - - TkFrame.new(:relief=>:raised, :borderwidth=>2, - :height=>3).pack(:fill=>:x, :expand=>true, :padx=>5, :pady=>3) - - l = Tk::RbWidget::AutoScrollListbox.new(nil, :relief=>:groove, - :borderwidth=>4,:height=>7, - :width=>20).pack(:fill=>:both, - :expand=>true) - (0..20).each{|i| l.insert('end', "line #{i}")} - - TkFrame.new(:relief=>:ridge, :borderwidth=>3){ - TkButton.new(self, :text=>'ON', - :command=>proc{l.scrollbar(true)}).pack(:side=>:left) - TkButton.new(self, :text=>'OFF', - :command=>proc{l.scrollbar(false)}).pack(:side=>:right) - pack(:fill=>:x) - } - Tk.mainloop -end diff --git a/ext/tk/sample/tkdialog.rb b/ext/tk/sample/tkdialog.rb deleted file mode 100644 index f0f7d2ccb5..0000000000 --- a/ext/tk/sample/tkdialog.rb +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require "tk" - -root = TkFrame.new -top = TkFrame.new(root) { - relief 'raised' - border 1 -} -msg = TkMessage.new(top) { - text "File main.c hasn't been saved to disk since \ -it was last modified. What should I do?" - justify 'center' - aspect 200 - font '-Adobe-helvetica-medium-r-normal--*-240*' - pack('padx'=>5, 'pady'=>5, 'expand'=>'yes') -} -top.pack('fill'=>'both') -root.pack - -bot = TkFrame.new(root) { - relief 'raised' - border 1 -} - -TkFrame.new(bot) { |left| - relief 'sunken' - border 1 - pack('side'=>'left', 'expand'=>'yes', 'padx'=>10, 'pady'=> 10) - TkButton.new(left) { - text "Save File" - command "quit 'save'" - pack('expand'=>'yes','padx'=>6,'pady'=> 6) - top.bind "Enter", proc{state 'active'} - msg.bind "Enter", proc{state 'active'} - bot.bind "Enter", proc{state 'active'} - top.bind "Leave", proc{state 'normal'} - msg.bind "Leave", proc{state 'normal'} - bot.bind "Leave", proc{state 'normal'} - Tk.root.bind "ButtonRelease-1", proc{quit 'save'} - Tk.root.bind "Return", proc{quit 'save'} - } -} -TkButton.new(bot) { - text "Quit Anyway" - command "quit 'quit'" - pack('side'=>'left', 'expand'=>'yes', 'padx'=>10) -} -TkButton.new(bot) { - text "Return To Editor" - command "quit 'return'" - pack('side'=>'left', 'expand'=>'yes', 'padx'=>10) -} -bot.pack -root.pack('side'=>'top', 'fill'=>'both', 'expand'=>'yes') - -def quit(button) - print "You pressed the \"#{button}\" button; bye-bye!\n" - exit -end - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt b/ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt deleted file mode 100644 index 71e359559a..0000000000 --- a/ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt +++ /dev/null @@ -1,61 +0,0 @@ - - ######################################################################### - ### The following text is the original file of the Tcl/Tk extension. ### - ### Icon data files ( those are 'tkIcons', 'tkIcons-sample.kde', and ### - ### 'tkIcons.kde' ) are quoted from the source archive of ICONS ### - ### extension. As the following document describes, those icon images ### - ### are not applied the license. ### - ######################################################################### - - -IMPORTANT LICENSE INFORMATION -============================= - -The following terms (based on the standard TCL/TK license) apply to all files -contained in this package, except the icon images. - -The icon images can be freely distributed. If you require clarification of -copyright/license details for the images, please contact the appropriate -creator/maintainer. - -ICONS: LICENSE TERMS -==================== - -This software (ICONS) is Copyright 2002 by Adrian Davis (adrian@satisoft.com). -The following terms apply to all files associated with the software except -where noted above. - -The author hereby grants permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that -this notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file -where they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY -OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, -OR MODIFICATIONS. - -GOVERNMENT USE: If you are acquiring this software on behalf of the -U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal -Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you -are acquiring the software on behalf of the Department of Defense, -the software shall be classified as "Commercial Computer Software" -and the Government shall have only "Restricted Rights" as defined in -Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, -the authors grant the U.S. Government and others acting in its behalf -permission to use and distribute the software in accordance with the -terms specified in this license. diff --git a/ext/tk/sample/tkextlib/ICONS/tkIcons b/ext/tk/sample/tkextlib/ICONS/tkIcons deleted file mode 100644 index 0d5b2c8695..0000000000 --- a/ext/tk/sample/tkextlib/ICONS/tkIcons +++ /dev/null @@ -1,195 +0,0 @@ -actattach16:act act16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBPz+/AQCBAAAACH5BAEAAAAALAAAAAAQABAAAAI2hAOCxg2h0nJHyEshi9HpxU1GOCLdZoKpQ15nibUoprKp9lh2oucUxsBRXsJh4Hjs/QTMpr8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actbookmark16:act act16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy+vERGRFRWVDQ2NKSmpAQCBKyurMTGxISChJyanHR2dIyKjGxubHRydGRmZIyOjFxeXHx6fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVbICACwWieY1CibCCsrBkMb0zchSEcNYskCtqBBzshFkOGQFk0IRqOxqPBODRHCMhCQKteRc9FI/KQWGOIyFYgkDC+gPR4snCcfRGKOIKIgSMQE31+f4OEYCZ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actbookmarknew16:act act16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy6vERGRFRWVDQyNKSipAQCBMTGxKyurISChJSSlJyanHR2dIyKjPz+xISGhPz+BGxubMTCBHx+fPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVfICACwWieY1CibCCsrBkMb0zchTEcNYsIiYHiwIOdEAvigdFQGE0Ix4NBbSAgsWjk+jBIAlcUYrJASChnSXZSoUDelKfoKpFALJA61ueGI2IAZmhogGFmCGGAgXsifiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -actcheck16:act act16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBMT+xATCBASCBARCBAQCBEQCBAAAACH5BAEAAAAALAAAAAAQABAAAAM2CLrc/itAF8RkdVyVye4FpzUgJwijORCGUhDDOZbLG6Nd2xjwibIQ2y80sRGIl4IBuWk6Af4EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actcross16:act act16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/PwCBMQCBEQCBIQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMuCLrc/hCGFyYLQjQsquLDQ2ScEEJjZkYfyQKlJa2j7AQnMM7NfucLze1FLD78CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actexit16:act act16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBDQyNHR2dCH5BAEAAAAALAAAAAAQABAAAAI4hI+pFrHb3nEg1iWiDiINCwYDko0V9XUTda6I1TIsUMpGinyzbB6ZeGuoEr+GUDL4CXqSphPhLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -acthelp16:act act16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQ6XAQCBCyCvARSjAQ+ZGSm1ARCbEyWzESOxIy63ARalAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ/EEgQqhUz00GEJx2WFUY3BZw5HYh4cu6mSkEy06B72LHkiYFST0NRLIaa4I0oQyZhTKInSq2eAlaaMAuYEv0RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actitemadd16:act act16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBARCZPz+/Mzq9BTC3ITC1HSyzGSivAw+XBSStIS6zHy2zAQCDFyatAQOHFSStEyOtAQSJBSq1DR2nCxunCRmlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVbICCOQTmeaCAMRIC+AVu47xkTBl2Ld16XQNYBQTQBVIOkMHFQJBeMI4tAbSSu2IRDSnhAvFfI97sFRM6RwOMacbjLKckVvgvIJ5EdSU7J648VgXQ7Dmd/hyJ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actitemdelete16:act act16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBARCZPz+/Mzq9BTC3AQCDAQOHFSStAQSJAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQwEMhJq704681n+GAISoEwnGg6EAUQrEQsz4ThEkeu77kNIAagMEj0dY7IpHI58UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actlock16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJEQ+FExGHCQiDBwaDGxiLHxyNHRuPIR+TIyGZJSSfFxaRFxWJGRiLJyaXNzWpNTOnMzGnLy2hJSKTGReLKyqjPTu1NzarMS+jLSyfKyibJySXIyGVCQeDLSytPT29Ozu7OTi5NTS1KyurJSSjGxqVFxaXLS2tKSebOzuzLSufJSOXExGLGRiTExONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwGCgGhkhkQDBoEpLKQoBACAyOUID1qTVwoQGvMPxNFgVjAxp6QCQUicSCwVgkG44HJCKRRCYUCAxIFRYXhxgZGhYbHINEHR4fGCAhIiMkFSVKJicoKSoFKwMsLZtDLison6GjLA92qCueoAUvpC2xQhWqrLYDErmEMDEXlDIwMxAHukI0NS01EzY2NAmPAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actredo16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBxOHBxSHBRGHKzCtNzu3MTSzBQ2FLzSxIzCjCSKFCyeHDzCLAxGHAwuFDSCNBxKLES+NHSmfBQ6FBxWJAQaDAQWFAw+HDSyLJzOnISyjMTexAQOBAwmDAw+FMzizAQODDymNKzWrAQKDAwaDEy6TFTGTFSyXDyKTAQCBAwiFBQyHAwSFAwmHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ2QIBwSCwaj0hAICBICgcDQsEgaB4PiIRiW0AEiE3sdsFgcK2CBsCheEAcjgYjoigwJRM2pUK0XDAKGRobDRwKHUcegAsfExUdIEcVCgshImojfEUkCiUmJygHACkqHEQpqKkpogAgK5FOQywtprFDKRwptrZ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actreload16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCRaJBxWJBxOHBRGBCxeLLTatCSKFCymJBQ6BAwmBNzu3AQCBAQOBCRSJKzWrGy+ZDy+NBxSHFSmTBxWHLTWtCyaHCSSFCx6PETKNBQ+FBwaHCRKJMTixLy6vExOTKyqrFxaXDQyNDw+PBQSFHx6fCwuLJyenDQ2NISChLSytJSSlFxeXAwODCQmJBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIBQGBAMBALCcCksGA4IQkJBUDIDC6gVwGhshY5HlMn9DiCRL1MyYE8iiapaSKlALBdMRiPckDkdeXt9HgxkGhWDXB4fH4ZMGnxcICEiI45kQiQkDCUmJZskmUIiJyiPQgyoQwwpH35LqqgMKiEjq5obqh8rLCMtowAkLqovuH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actrun16:act act16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/ISChKSipMTCxLS2tLy+vMzOzMTGxNTS1AAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARlEMgJQqDYyiDGrR8oWJxnCcQXDMU4GEYqFN4UEHB+FEhtv7EBIYEohkjBkwJBqggEMB+ncHhaBsDUZmbAXq67EecQ02x2CMWzkAs504gCO3qcDZjkl11FMJVIN0cqHSpuGYYSfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -actstop16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/Gw6NGQuLHQ6NGQmJFweHFQaFPTm5PTa3PTW1Oy+vOS6tNSinKReVDQWFPz+/Nx6fNyCfNyGhNR+dMxybMRiXLxGRIwWFNx2dNx+fNx2bMxuZLQWFBwWFPTu7Pzy9NRqZNRuZMRSVLwmJGwWFNR2dMQiHPTKxMxmXMQyLMxmZNx6dMxiXMRSRMRaVKxybMxaVEQWFMQuJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaaQIAQEBAMCAWDYcgkHhAJxYLRcDQBggckIplQKpaLdRh4YDIaSWa94Vw6woAHgv6AMKGPaMQhwQMJJRkfhHmEJhdvRCcgGSCEkCgpbnAECiorGYYfLCItlAAFCygQj5AfbYlwBQwVE5AukG6KBi8tMC0fLi0pHxyzcAAxFxwmMny/wEwOxMm/qlcdJCSJ1H5XQh3a28HY3kx+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actundo16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBxSHBxOHMTSzNzu3KzCtBRGHCSKFIzCjLzSxBQ2FAxGHDzCLCyeHBQ+FHSmfAwuFBxKLDSCNMzizISyjJzOnDSyLAw+FAQSDAQeDBxWJAwmDAQOBKzWrDymNAQaDAQODAwaDDyKTFSyXFTGTEy6TAQCBAQKDAwiFBQyHAwSFAwmHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ1QIBwSCwaj0hiQCBICpcDQsFgGAaIguhhi0gohIsrQEDYMhiNrRfgeAQC5fMCAolIDhD2hFI5WC4YRBkaBxsOE2l/RxsHHA4dHmkfRyAbIQ4iIyQlB5NFGCAACiakpSZEJyinTgAcKSesACorgU4mJ6uxR35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actunlock16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJExGHEQ+FCQiDBwaDBweDGxiLHxyNHRuPIR+RIyGZJSSfFxaRGxmLJyaXNzWpNTOnMzGnMS+jJSKTGReLKyqjPTu1NzarLSufKyibJySXIyGVGxiNFxaXLSytPT29Ozu7OTi5NTS1KyurGxqVCQeDJSSjLS2tNTW1KSmpGRiLKSebOzuzJSOXExONExGLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaVQIBwOAwYA8SkMCAYOAnKYiFAIAQGyOgVCggYuEovVxztMpdnwAGRSCgUCwOjIeQ6HpCIZDKRUNYMRBUWF4UYGRoWGxyBRR0eHxgaICEiIyR0QyUmJygpKgUrAxMsLUQlKyieoKIuEAunK52fBS8DLiywQySpnjC1Mbi6QjIzNBeSIBY1EQfDQgosLAEUNjY3Co1DfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -appbook16:app app16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBDyKhDSChGSinFSWlEySjCx+fHSqrGSipESOjCR6dKTGxISytIy6vFSalBxydAQeHHyurAxubARmZCR+fBx2dDyKjPz+/MzKzLTS1IyOjAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVkICCOZGmKQXCWqTCoa0oUxnDAZIrsSaEMCxwgwGggHI3E47eA4AKRogQxcy0mFFhgEW3MCoOKBZsdUrhFxSUMyT7P3bAlhcnk4BoHvb4RBuABGHwpJn+BGX1CLAGJKzmKjpF+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -appbookopen16:app app16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExCNGSenHRmVCwqJPTq1GxeTHRqXPz+/DwyJPTq3Ny+lOzexPzy5HRuVFSWlNzClPTexIR2ZOzevPz29AxqbPz6/IR+ZDyKjPTy5IyCZPz27ESOjJySfDSGhPTm1PTizJSKdDSChNzWxMS2nIR6ZKyijNzOrOzWtIx+bLSifNTGrMy6lIx+ZCRWRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQEAAQCwWBYJiYEAoGAFIw0E5QCScAIVikUgQqNargtFwdB9KSDhxiEjMiUlgHlB3E48IpdKdLCxzEAQJFxUTblwJGH9zGQgVGhUbbhxdG4wBHQQaCwaTb10emB8EBiAhInp8CSKYIw8kDRSfDiUmJ4xCIxMoKSoRJRMrJyy5uhMtLisTLCQkC8bHGBMj1daARgEjLyN03kPZc09FfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -appboxes16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMT+xAT+BASCBATCBMT+/AT+/ASChATCxPz+xPz+BISCBMTCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEEgZwrwYBCFqvhs3DNYXjChRlWBRjIRqGN4UuEUczMZxsDeXykdEsDQVVSLhQxhBCkVlmXA+KVHFYhFYOoHbMGN6pTQaW8YYiQmcG+q16a0+Zipw+4e9B/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -appbox16:app app16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+xISCBMTCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANECKoR6ys2IVqokF08yMTA1gwkYX5WQK5ma4VceTYPxXnBWdtY6+0834/Bowgzm6APWRQcH4TiMhPK2WYRiZWW7XK7/gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -appbrowser16:app app16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxONCROfCRKfKx6LNy+bNTOpGSS1DRupAwyXBRSnPTSjPTqvOzqzMzSvHSSlKy6ZDxutAxCpBQ2XBxepLTKvPzqzPzy5OTShLS2dLSqRFR2jBRerBQ+jOTixOzetNS2XHx6XDR2tCRexBwyTDyKzOTavPzq1OzKdCx23BRKtCQ6VCQmHFSa7IyirOzSnGSGpIR+bFSO1DyK7DR+5CRixBw2VDQuHFye7IS27NzGXISuhEyS5DR25BRWxBQ+lBQyXCQqPCxSfGyu7GyerKy2ZFR+rERqfCRmxBROtBQ+fBwuTBwmNDSW9JyabLyqRIx+TExSXBQ6bAQCBBQ6ZBxapDR+zBxq3LyaLJySRHxqPGxeNBxGbCRmrHRyRERONDRKNDQ2JCQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAeygACCg4SFhgABAQIDh4MBBAUGBwgDCYcKCwwNDg8QERIThRQVFhcNGBkaGxwdoYMDHhcXHxggISIjEiSvJSYXJwsoISkpIyorLIIDLS4WLzAxMjM0NSo2N8o4OS46OzwzPSk+P0BBgkI8Q0NERUZHCEhJSktMgwk4Qy1NTk9QUVJLphCiUsWKlStYsmjZQiJgIS4KuijQ4iXAFxYCDVFJwGUFmDBhMjYSw0KMyEYoBfkJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -appcalc16:app app16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBISChPz+/AQCBCH5BAEAAAAALAAAAAAQABAAAAI4hI9pwe0Ogpi00hHF2LzzzFlTsIHD45SSx6oCeW4wjK2tl83y7t64pIsJaxrfh2bEAJIlhRPhLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -appclock16:app app16 16:photo:16 16:R0lGODlhEAAQAIIAALy+vAQCBPwCBMQCBIQCBISChPz+/MTCxCH5BAAAAAAALAAAAAAQABAAAANbCLHcrSLKOZcYmDSCsR1aUABAsXDDJwJGa5SBFwgaWxbCG3CWaBwG3C8Y67FawpYiNQscg65fsVkYuoAmJs1pBR522lQB6ILJLqHRwQQOZzYdZnw+dzruDIA/AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -appdate16:app app16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBPzerPyqXMRaBIQCBISChPz+/KSipMTCxPz+BMTCBPwCBPz+xPzCxMQCBISCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVxICCOQGCeJjkGwkC8RFEEavkax2G8dB0QuRyhhzoBg8MSYsncJXKJZIDZHCoWP1ogGIwGrtnSgUFmHLyNRHhrdpjRamnO/SYkromHdnxwnwkKVxByZW8DgQsQM2JcfwZXO0MBCZSVBgMuLzJaRZ0pfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -apppencil16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/IQCBMQCBPzCxAQCBPz+/MTCxISChDQyNKSipEQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARDEMhJZRBD1H2z3lMnjKCFjUJQimOgcmcbELCXzjXq0hV785WCQYcDFQjDXeloMByKG6YTAdwIDAlqSZJSVFeKLcUfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -appsheet16:app app16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBAT+/Pz+/KSipPz+BAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANFCBDc7iqIKUW98WkWpx1DAIphR41ouWya+YVpoBAaCKtMoRfsyue8WGC3YxBii5+RtiEWmASFdDVs6GRTKfCa7UK6AH8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -apptool16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBISChGRmZMTCxKSipLS2tHx6fPz+/OTm5FxaXOzu7DQyNMzOzAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMhAq7wYBDECKVSGBcbRfcEYauSZXgFCrEEXgDCSeIEyzKSXZoBYVCoJVIqBGByKu0Cy8QHxmgNngWCkGgqsGWFseu6oMApoXHAWhWnKrv0UqeYDe0YO10/6fhJ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -apptools16:app app16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBExKTERCRAQCBOzu7Nze3MzKzLy+vCxqZBQ2NJyanKyqrGRiZDRydKza3FRWVPT29LSytDw6PMTm5EySjCxaXGRaJFSanCRSVGxqbPTmvMSqVJTW1GSurHS6vOzq7KSipISChFRKHJSGNPz23GxKFBQ6PKyurCwqLMyufJx2RAQGBJSWlEwyDIRiLNy+lLSKVDwmDJRuNOTOrLyabGRCFDx2dKSCVOzWtHzCxOTGnNSyhAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAahQIBwCAgIBAOiUiggFAyHASKxDAwUC8Zg0HAglA9IZPGQABoTSqJCFTIOEIsFgHBcEhhHUpKJFCwaGxYYHB0VEx4IEh8gIQwiIyQbJRMcHokmEicfDygAkCkqJQgIGG0rLElCLS4vMCWqQwMCQg0UMTIzNDVLQjaIGDE3ODQlS785CEkxKjowvEOHybG4O6JDCdNKuDUxRAmxRDHeveUAfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -appuser16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MTCxISChMT+/ATCxASChFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMg5gw00yyDGIAR1YUDggeFWFIZhnSBZrsZxdIOFEGTA2oeBAHeyuGwvzxBlYdUOLROMFzDQntJPrNoqAKUBaqnV+k57ZORruykHDj2LqIzUVKp1u0iuB/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -appusers16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxISChAT+BMRaBPyqXARCBPz+/FxaXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARLEIRJa5Ui673nsGAgeKE1Bl9AUEXbiqTlFlZaGUZoszm4BzhDAVf5BYbAXI+TAR6CS2ZGSZSEiIIqYIsSIEaJ7GRrlY7J1lKA7I8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -appwp16:app app16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBKSinJyOfPz27Pzy7AwKDExOTJyWlERCRKSelPz69LyyrKymnPz+/MS2fDQyJAQCBOTazLSiXOzivMS2jKSSVOzmxPz25NzSpPTu5KyebOzixNTGjOTWpMSydMSybCwqFGReVKyaXNzSnGxeNJSCVMS2nPz23MSuZIR+bJyShLyqnOTOtGxiXIR6XOTSvIx6RMSubIyCdKSalMS6pOTWxMzKvKSabJyKTOzezHxuPGRmZKyurMTCvPTq3AAAACH5BAEAAAAALAAAAAAQABAAAAajQIBwCAgIiEhiYEA4FgwHRDKhIBAWz4OhgGQ0FAPHA7qFEBONb0Qy0ULeQ2+aUrFcMI+3GYBOZzQbHB0eHyAhIQByDREiEwMjFRIkJQImAgJ+jScjHigkKSorLC0AKg2NFSMoki4qCy+IQgITKDAxkjIzNDWkQxQoJaskMgk2Eb1DNzgoOCoHDDY5yEIwJToAOzw9ET7TQiREAhkZ3kmy5QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -cal1day16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANOCLrMEUDIOUS9AFLLhx8LIRZjKYZmMRCkaChFLHty/AIiS3y6q+QtT49wq8VotRtQJGwRf6Zmrlj7DJLQXsupTJmeEIN4TB5nII20wp8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -cal5days16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANMCLrMEUDIOUS9AFLLhx8LIRZjKYbj55GioRRwoQ5x4QIiIdMmcec7jy53q81qP9OO5VMAj8RXTFWzOZW95HDLdEEM4LA4nIE0zgp/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -cal7days16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANPCLrMEUDIOUS9AFLLhx8LIRZjKYbj55GioRRwoQ5x4QIiwcp0fucsj873qvGMv5Jw2FIACUsW4WakGW1O046I05qmGYBhTC6TM5CGWuFPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -calappointment16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/MTCxPz+BISCBISChKSipAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARbEMhJaQhA6D1E/wDGeeRgDhOhFoTBEi+REgdrIHScSEVvAD9Xr7cDqGSGpFEnQSqTv2NxCFQOiU1VEAiTZmstHFg1vQKuw+LxxfYaV/AuOQRI2O/4ewhT6Uv8EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -calbell16:cal cal16 16:photo:16 16:R0lGODlhDwAOAIIAAPwCBISCBPz+BIQCBMTCxISChPz+/AQCBCH5BAEAAAAALAAAAAAPAA4AAAM+CLrR+zCIAWsgLVRGRBhOVQiG94WPVAbHaZHYAWqRYLbge88RsbInGuBCEhRYrZYm4xk4nYdoKzKIbiKHawIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -callist16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/KSipPzerMRaBEQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARDEMhJaQhA6D1E/wDGeeRgDhOhruyatjBRSIRxxOsMEAdC0BUZDcfSEYvDo3Bn++2Cxt7RqFxWhZiCdsvdhjCVsMQfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -calmonth16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANSCLrMEUDIOUS9AFLLhx8LIRZjKYbiRxLFIBpK0Q6z7MkwkJIe8b0KEeuWchFysuStVsjtfMbeMQitWpG25YfmNK1WU53XNIUYzug0OgNpuBX+BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -caltoday16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/MTCxKSipPyCBMRaBPyqXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARTEMhJaQhA6D1E/wDGeeRgDhOhFmurpi5LyIQhFfiBIAfuFzaAioBIJBCummRYPCaDPh3vhwsOZdihNfa8Ub/AJXemFZPPNBvGwG672yFMZS7xRwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -caltodo16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBAT+BAQC/AQCjPz+/MTCxPzCxKSipPwCBMQCBIQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARaEMhJaQhA6D1E/wDGeeRgDhOhFmurpi5LyMYhFXiuFwZiA6qZYbbqJX5BIw2RAPxwAAWCyWMCCsiXFGEEErKz6LQZfOqiTR1YJiGq1rFyyHmo2+/1EKbCl/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -connecting16:connect connect16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBPz+BMTCBISCBAQCBPz+/MTCxMTGxISChFxaXMzGzKSipAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJZbihUiz60FPnfaA0iBpBVGdHEYWxToEoSHBRHHM9AgSEQRcj+AYkYAJxIPKQFUJiOdTJQFIDU6dYzKKFhTCM+E5g4mXaDAyrlogEG+DGTecA7wsP8EcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -connectno16:connect connect16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBPz+BMTCBAQCBERCBPz+/MTCxMTGxISChFxaXMzGzKSipAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARPEMhJq704axBEHoPUEdhQGMNYFuwxkKInDYjBniEnwMCQIIebSzXx/WwsFK+YMABZikWuYlrUCtZpEYv4WRPaHhb064YB41kCfJFSQBh/BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -connectyes16:connect connect16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/KSipDQyNMTCxMTGxISChFxaXMzGzAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJZxCjgsAtDtUlCOA1gJQ4kl/IDatAoF7xxkS6GgEBr6jAobCyBX42SQBxMOx6A8MhiGASR8YDgrYsNEeJ0zaEGZY7uoH2oB6nOUwtbdLaVOeTUwo/8UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -devcdmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tOzOvNTqvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/LzKvMTCxDQyNASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAa0QIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTBqUiuUCVmAeiYzmsKlwOt/AAKFIFAIIFx4WHyAhUwIDIgsZFyMkFxchJSYmiBkSBBoIJJwIGgOhiCYFJSEnFyQjFwNZewABISAfFiYnCAEmCREIrwAIFhwVGwcaBAkPGApsQsAVFA0GBQMRbxBTKM0ODQwTEq192ClDgROkBHvYKuNJUu5CKCorX1RDKCkpUn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -devcdunmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tNzmvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/MTCxLy6vDQyNOTm5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAapQIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTLqUigWsuDwSmMxBQ9lwvoEBQpEoBBAWHRseHyBTAgMhCxgWIiMWFiASJCSHEgQSGQgjmwglGKCHBQUSICYWIyIWAwshIVMBIB8eFSQmCAEFCREIekIIFRsUGgcZEgkPFydrvxUUDg0GBSEREGJfv9AMEySsJxDYQ4DcEhh64UpS6lTs7QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -devdiskmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBDQyNIRuVKyCXMSKROzSrOzKpOTGnLSafLySZKxuLMSOVPTWvPzixLSehNyibOzOrGxaVJx+XOzGnFw2FJRuPKx+TPTSrHRWPKyKZPTOpHxOJKyKXFw+HKSipISChMTCxFxaXIRiPNSWXExOTOS2hLR+PLRyLPTWtMyOTASCBARCBPz+/DTSJIyKjIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwCAgYA8SkMCAYDARI5ZJQMBwQiWgyoFgwrA3HQ7scQAqFAcEQOUi0zAkFUSFYLghMBloUCDQNGxwdHhwHekcfICEhICIfIxkLJBABJUYCICABIhAOBiYnKJaXmH4CGSkYCCqkSAEfTKenrkOwsrQll0IrS7G5uwArLLaxLbXCLsTFLyDBKy4wZEVHvCwsRn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -devdiskunmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBDQyNIRuVKyCXMSKRPTWtOzKpOTGnLSafLySZKxuLMSOVOzOrPzm1LSehNyibGxaVJx+XOzGnFw2FJRuPKx+TPTSrHRWPKyKZPTWvHxOJKyKXFw+HPTOpKSipISChMTCxFxaXIRiPHxaNLRyLNSWXExOTPzixOS2hLR+PMyOTPz+/IyKjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaIQIBwCAgYA8SkMCAYDARI5ZJQMBwQiWgyoFgwGgiD46FdDiCFwoDQAEe0TMkEQSFULIcLBloUCDIaDRscHRsNHhhHHyAhISAiHyMkJSYQASdGAiAgASIQKA0pKguXmJl+AiQGFwgrpUgBH0yoqK9DsbO1J5hbsrq8SrgstlJFHy0gwMVFR1J+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -devfloppymount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBMTCxARmZPz+/FSWlLSytKSipERCRIyOjISChOTm5HRydNza3GRiZFRSVASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVrICCOQBCQKBkIw5mqLFG47zoQ+FwbN57TosDhgPD5dMEEIqE04kwlBWKBUEiNVYFpyqAyGEUCgqEtERiNNMLhQKzLQYJg7n7Y4aMAwbCUPvAQeWNgfzQQETAIhSMQEogwgBITQEGGEREmfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -devfloppyunmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxARmZPz+/FSWlLSytKSipERCRIyOjISChOTm5HRydNza3GRiZFRSVCH5BAEAAAAALAAAAAAQABAAAARcEMgJQqCYBjFu1hxReN82EOhYGieaklJwHIjrqnGCJLqNWhUFYoFQCG1FgWXIIDIYNQKCoawQGI0swuFAbKsxgmDsfZjBkwDBsNM90Jot9A3DbBD0Dwiur9QnfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -devnetwork16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBISChPz+/Nza3ARaZESanCyKlARudARGTLy+vNzq7ARmbMTCxARufAROVMzOzKSipARyfOzq7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVmICAGZFmKQiACweCSBImq41AYB5IodLq2hwWO0ejRWDac48Gb/QKNqNRoqspmrVcAUuIJBANS8sBIFCORUgooPEh4J8B67NgdsVBp9C5XWfl9LRMTCyReX19hARNojWlWLH+AAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -devpc16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBISChHx+fPz+/AQCBAQC/AT+/AQCxAQChAT+BLy+vAR+BAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARYEIAgqK1YzsG754QUDERpmkEpkkXrtoK6EcVgHIibhnNx564Yb0TDvQq7FQ34EiqPOhnREqhWSUPsyZSQAbbg7GcMEgwUiYVivTa1R+y4XEGoWO/4AMAfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -devscanner16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MT+/ASChARCRATCxMTCxFxaXKSipDQyNAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEMgJgqWBVivEldkUdKSXhVjZfenommglDERh3Tc4E4ZRHAGgkEPr9X6H5AHBERSMRyWzkug8jQXFEhWoOo8dRYxqLXSmGjIJnVaz29Q3fAP3RwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -devscreen16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXFRSVPz+/PT29OTm5OTi5DQyNDw+PERGRExKTHx+fISChIyKjHRydFxeXDQ2NCQmJBQSFAQCBERCRMTGxHR2dGRiZExOTDw6PCQiJAwODCwuLFRWVOzu7BweHAwKDCwqLHx6fBQWFGxqbGRmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAanQIBwSCwKAwKkMslEAgSDqDRKqBYKhkNgcDggEorkMrDQchkNhuOhgEQkk0l5S2lUGpYLJqPZTAwMHB0DCmhqAW0Rfh5zAxgOkBcCFAcfIBMECxwBBAEPFw8dChkhcBMDDAcdnQqtFKSWcQMimx4dGRkQBxGxsg6bBQEawx8jl3GnJFoFHRNXVVNRJYIFDAsL1tgiDiQXFx0HABwcXeQH5OjkRutEfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -devspeaker16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXAT+/DQyNATCxMTCxPz+/AQCBKSipASChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEMgJQqCXziDG2JoUEENhZBkmHIWJVptAmqcIW/Js1MiF56TBzkckAAcHoa9nMRKeA4TyJk0knsHhTeK5khBaH2VwLYVh40TJhQ6RzeIQV32Quz8hfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -editcopy16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAFxaXPwCBNze3GxubERCRPz+/Pz29Pzy5OTe3LS2tAQCBPTq3PTizLyulKyqrOzexLymhLy+vPTy9OzWvLyifMTCxHRydOzSrLyihPz6/OTKpLyabOzu7OTm5MS2nMSqjKSipDQyNJyenLSytOTi5NTS1JyanNTW1JSWlLy6vKyurAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAaUQIBwCAgYj0eAYLkcEJBIZWFaGBie0ICUOnBiowKq4YBIKIbJcGG8YDQUDoHTKGU/HhBFpHrVIiQHbQ8TFAoVBRZeSoEIgxcYhhkSAmZKghcXGht6EhwdDmcRHh4NHxgbmwkcCwIgZwqwsbAhCR0CCiIKWQAOCQkjJAolJrpQShK2wicoxVEJKSMqDiAizLuysiF+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editcut16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAQABAAAAIwhI9pwaHrGFRBNDdPlYB3bWHQ1YXPtYln+iCpmqCDp6El7Ylsp6ssR1uYSKuW0V8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -editdelete16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPT29GxubMzOzDQyNIyKjHRydERCROTi3IyKhPz29Ox6bPzCxPzy7PTm3NS6rIQCBMxCNPTq3PTi1PTezMyynPTm1PTaxOzWvMyulOzGrMymhPTq5OzOtNTKxNTOzNTCtNS+rMSehAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaKQAAgQCwahcihYMkcBAiBpLJApRoOBWgyIKhSEQkFgrBAcr1URiPhKAsDD3QB8RhA3FM0IlLHnyUTVBMSFBUWfl0XGBMTGBcZGodmcQWKjpAbHIgIBY2LHRoempOdjooTGx8giIOPFYofISJ+DyMXI6AfFySyfiUmJSUnKBYcICIpfgELzM3OZX5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -edit16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaVMR+RPzKjNze3AQCBMR6RPzGjPyODPz+/MzOzPyKDPyKBPz29OTWzPyGDPyGBOx6BOza1OR2BKROBNSOXKRKBBwOBOzu7PTWxPzizOySZPyCDFxaXOy2lNRyRMxmJCQOBPTm1OzStPTKrMR+XIRWLFxGNCQSBDQyNIRSNDQuJERGRLyqlNzSvIx6ZKRuVEw6LLSyrLymhKSShBwaFFROTJyWjMS+vNzW1OTazNzKrHRqXOzezOTOpPTq3OzWvOTStLyedMS+rLy2pMSynMSulAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAewgAAAAYSFhoQCA4IBBI2OjgUGBwiLBAmXlpcKkgsMlZcJBA0JDpIPEBGVjwkSBgOnExSfmBIVBxAMExYXswkYGRobHLq8gh2PHhoeHyAWIYKzIiMkJSYnKCnQg5YNHtQqKywtK9qMBC4vMDEBMjIz2dCMDTQ1Njc4OToz5PEEOzw3ZPToMcLHO23HfogQ0QMIkCA+hPBbhAPHECJFjMyYIUQIvEUpUqwQOXKkSEF+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -editpaste16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQiFHRqNIx+LFxSBDw6PKSaRPz+/NTOjKyiZDw+POTe3AQCBIR2HPT23Ly2dIR2FMTCxLS2tCQmJKSipExGLHx+fHR2dJyenJyanJSSlERCRGRmZNTW1ERGRNze3GxubBweHMzOzJSWlIyOjHRydPz29MzKzIyKjPTq3Ly2rLy+vISGhPzy5LymhISChPTizOzWvKyurPTexOzSrDQyNHx6fCwuLGxqbOzKpMSabAQGBMS2nLyulMSidAAAACH5BAEAAAAALAAAAAAQABAAAAa7QIBQGBAMCMMkoMAsGA6IBKFZECoWDEbDgXgYIIRIRDJZMigUMKHCrlgul7KCgcloNJu8fsMpFzoZgRoeHx0fHwsgGyEACiIjIxokhAeVByUmG0snkpIbC5YHF4obBREkJCgon5YmKQsqDAUrqiwsrAcmLSkpLrISLC/CrCYOKTAxvgUywhYvGx+6xzM0vjUSNhdvn7zIMdUMNxw4IByKH8fINDk6DABZWTsbYzw9Li4+7UoAHvD+4X6CAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editshred16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbGxubMzOzPz69DQyNIyKjERCRPz29PT29OTi3IyKhPz27PTu5PTy5Pz6/Pzy7PTq3OzexLyqlPTm1PTizOzavLyqjOzWvOzaxLyifOzizOTOpAQCBOzezAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaEQAAgQCwahcihYMkcBAiBpLJApRoOBWgyIKhWEQkFYYHkeqkMxKFBFpq9jgdkEGlPqwrJhCIY2N8FFRYUFxcYGX9dgRKEGhiHiYEOhBcbGBwdiQEOARcBGwEeAZllAgEUnQEfoQEgmp4hrCKtrwEYsrRlTiMBJAG8syN/IyMAxMXHSH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -edittrash16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipFxaXPz+/MTCxISChDQyNCH5BAEAAAAALAAAAAAQABAAAANQCKrRsZA5EYZ7K5BdugkdlQVCsRHdoGLMRwqw8UWvIKvGwTICQdmGgY7W+92GEJKPdNwBlMYgMlNkSp3QgOxKXAKFWE0UHHlObI3yyFH2JwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -fileclose16:file file16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCQiJBwaHAQCBDQyNDw6PFxaXFRSVERGRCwqLAwODGRiZHx6fPz+/GxqbAwKDCQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVaICCOZGmeqBgEwjCkRGEcSKK4JrEcBrMgAdeLVDg0GguGsYEbBQyGYyN6FDoPDIf0+LCKBIgetQERDgGDBGIpNY8GioAU0m6KXFw883w3+/l9f4AkfimGIn4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -filedocument16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJSWjPz+/Ozq7GxqbJyanPT29HRydMzOzDQyNIyKjERCROTi3Pz69PTy7Pzy7PTu5Ozm3LyqlJyWlJSSjJSOhOzi1LyulPz27PTq3PTm1OzezLyqjIyKhJSKfOzaxPz29OzizLyidIyGdIyCdOTOpLymhOzavOTStMTCtMS+rMS6pMSynMSulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaQQIAQECgajcNkQMBkDgKEQFK4LFgLhkMBIVUKroWEYlEgMLxbBKLQUBwc52HgAQ4LBo049atWQyIPA3pEdFcQEhMUFYNVagQWFxgZGoxfYRsTHB0eH5UJCJAYICEinUoPIxIcHCQkIiIllQYEGCEhJicoKYwPmiQeKisrKLFKLCwtLi8wHyUlMYwM0tPUDH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -filefind16:file file16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBCQmJDw+PBQSFAQCBMza3NTm5MTW1HyChOT29Ozq7MTq7Kze5Kzm7Oz6/NTy9Iza5GzGzKzS1Nzy9Nz29Kzq9HTGzHTK1Lza3AwKDLzu9JTi7HTW5GTCzITO1Mzq7Hza5FTK1ESyvHzKzKzW3DQyNDyqtDw6PIzW5HzGzAT+/Dw+RKyurNTOzMTGxMS+tJSGdATCxHRydLSqpLymnLSijBweHERCRNze3Pz69PTy9Oze1OTSxOTGrMSqlLy+vPTu5OzSvMymjNTGvNS+tMy2pMyunMSefAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe4gACCAAECA4OIiAIEBQYHBAKJgwIICQoLDA0IkZIECQ4PCxARCwSSAxITFA8VEBYXGBmJAQYLGhUbHB0eH7KIGRIMEBAgISIjJKaIJQQLFxERIialkieUGigpKRoIBCqJKyyLBwvJAioEyoICLS4v6QQwMQQyLuqLli8zNDU2BCf1lN3AkUPHDh49fAQAAEnGD1MCCALZEaSHkIUMBQS8wWMIkSJGhBzBmFEGgRsBUqpMiSgdAD+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -filenew16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPz6/GxubNTKxDQyNIyKhHRydERCROTi3PT29Pz29Pzy7PTq3My2pPzu5PTi1NS+rPTq5PTezMyynPTm1Pz69OzWvMyqjPTu5PTm3OzOtOzGrMSehNTCtNS+tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ/QAAgQCwWhUhhQMBkDgKEQFIpKFgLhgMiOl1eC4iEYrtIer+MxsFRRgYe3wLkMWC0qXE5/T6sfiMSExR8Z1YRFRMWF4RwYIcYFhkahH6AGBuRk2YCCBwSFZgdHR6UgB8gkR0hpJsSGCAZoiEiI4QKtyQlFBQeHrVmC8HCw21+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -fileopen16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBOSmZPzSnPzChPzGhPyuZEwyHExOTFROTFxaVFRSTMSGTPT29Ozu7Nze3NTS1MzKzMTGxLy6vLS2tLSytDQyNOTm5OTi5Ly+vKyqrKSmpIyOjLR+RNTW1MzOzJyenGxqZBweHKSinJSWlExKTMTCxKyurGxubBQSFAwKDJyanERCRERGRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaRQIBwGCgGhkhkEWA8HpNPojFJFU6ryitTiw0IBgRBkxsYFAiGtDodDZwPCERCEV8sEk0CI9FoOB4BEBESExQVFgEEBw8PFxcYEBIZGhscCEwdCxAPGA8eHxkUGyAhIkwHEREQqxEZExUjJCVWCBAZJhEmGRUnoygpQioZGxsnxsQrHByzQiJxz3EsLSwWpkJ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -fileprint16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFRKNAQCBPz+/MTCxExKLPTq5Pz29Pz6/OzezPT29PTu7PTy7NzClOzm1PTu5LSabJyanPTm3FxaXOzCjOTKrOzi1OzaxOTSvJyenGRmZLyyTKSipDQyNERCROTi5Hx+fMzKzJSSlIyOjISChLS2tAT+BDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaYQIBwKAwIBMTkMDAYEApIpVBgOCAOg4RRGlAoEAuGIdGITgWOq4LxcCQgZkEkIHksHgYJOR6ZQCgVFhYJFxgTBVMZihoCfxUYDWUbUBGKGREcjBoQEB2TAB4CAx+Vl5WMhyACHiEhH6IfIiMktCQgE0cZJQStr6O2t6EARxO6vK6iEx4dZsMCxbsmBB4nzUTEutVSSUdmfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -filesave16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBFRSVMTCxKyurPz+/JSWlFRWVJyenKSipJSSlOzu7ISChISGhIyOjHR2dJyanIyKjHx6fMzOzGRiZAQGBFxeXGRmZHRydGxqbAwODOTm5ExOTERGRExKTHx+fGxubNza3Dw+PDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaAQIAQECgOj0jBgFAoBpBHpaFAbRqRh0F1a30ClAhuNZHwZhViqgFhJizSjIZXQCAoHOKHYw5xRBiAElQTFAoVQgINFBYXGBkZFxYHGRqIDBQbmRwdHgKeH2YgHpmkIR0HAhFeTqSZIhwCFIdIrBsjAgcPXlBERZ4Gu7xCRZVDfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHMzKzOzq7ERCRExGTCwqLARqnAQ+ZHR2dKyqrNTOzHx2fCQiJMTi9NTu9HzC3AxmnAQ+XPTm7Dy67DymzITC3IzG5AxypHRydKymrMzOzOzu7BweHByy9AyGtFyy1IzG3NTu/ARupFRSVByazBR6rAyGvFyuzJTK3MTm9BR+tAxWhHS61MTi7Pz+/IymvCxulBRelAx2rHS63Pz6/PTy9PTu9Nza3ISitBRupFSixNTS1CxqnDQyNMzGzOTi5MTCxMTGxGxubGxqbLy2vLSutGRiZLy6vLSytKyurDQuNFxaXKSipDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQYHCImDBgkKCwwNBQIBBw4Bhw8QERITFJYEFQUFnoIPFhcYoRkaFBscHR4Ggh8gIRciEiMQJBkltCa6JyUoKSkXKhIrLCQYuQAPLS4TEyUhKb0qLzDVAjEFMjMuNBMoNcw21QY3ODkFOjs82RM1PfDzFRU3fOggcM7Fj2pAgggRokOHDx9DhhAZUqQaISBGhjwMEvEIkiIHEgUAkgSJkiNLmFSMJChAEydPGBSBwvJQgAc0/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folderhtml16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBERGRBQWFMzKzOzq7CwqLDw6NARqnAQ+XHR2dKyqrOTm5ExKTERCRHRydMTi7NTu9HS+1KSmpBweHDy67DyixHS61ITG3AxypByu7DxinBw+ZERmdIySjITC3ARypExOTDRurIR2RPTSdJyulEyGvBw+bFSyzJTK3LzKvPzivOTixNTChLSybGyCfCRSnBQqRASGtFyuzDw+PCRShPzy5OzerOTShKyaTEx6pCxerGRufBR+rOTezPTShNy6bER+1BxCfBQuRAxelFSixBw2VISq3GySrPTWlHyanIyitFSO3IymtCRujAxWhCRqlCQ6XGyWvNS2bFyGvDxuvCRSpLy+vMS+vGxqbFyO1GSi3EyO1FRaVCQuPLS2tDxyzKyWNFxaNCQyPGxubCxajERSVExKNJyenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfZgACCAAECg4eIAAMEBQICBomDBwgJCgsEDA0BDg8BhwYQERKUDxOYDAyeghQVFhehGBmVlwwOqxobHB0eH6EfIAkPIYIiIyQlJhsnKBcpvrYiKissLS4vMDEyFjOvNAA1LDY3ODk6Oyc8PTIyFzQ1Jj42P0A6QTtCQ0REIEUORkdIkihZwsSekBhNnDyBciCKiSNSplDRUcWKkRhXCGDJYgiGli1cpuTocsILjytfFmRpACAGRTBhRogZgzHlAjKGWnIoY+bMgRgBDHRBo/LAIZoxuhwKatRPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -folderlocked16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQSFMzKzOTm5CwuLERCRARqnAQ+XHR2dKSmpOzm5GxqbCQiJMTi7NTu9HS+1HRydOTm1Ozq7Dy67DyixHS61ITC3AxypERGRBweHByu7ASGtFyy1DSOtDRmfExOTBSazBR+rCwqLAxWhAxelByGtDSaxAwODHy+1Dw+PPT29IyqvCxujOzu7NTW1Nza3ExGJJyebKyqfMTCpFRSPOTi5DQqHOTezDw2NMTGxKyqhMTGrGxmXDQ2NMTCxMTGpHx6bHx2bBQWFIyOXDQuDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQICBomDBwgJCgsEDAKFDQGHDg8QEZQSlxMUDJ2CDhUWF6AYGZWXFBqCGxwdFh4XGK8fIAohtiIIIx25EZwBDREHgiQjJSYmGScoKSoRKQ8rggIsDC0uJS4oGygoAyjdAAcsLxQUMDEyMzQ1EzapBy8MDDc36tFwgONFjlQ6dgCEEZBHDx8+ctRIRehHAyAwZASZIGRIEBoUBwUwIGMCiwFEaBQJichIjo9FZLBsacRIAB0A/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -foldernew16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBPz+hPz+BOSmZPzSnPzChFxaXMTCBPyuZPz+xPzGhEwyHExOTPz+/MSGTFROTPT29OTm5KyurDQyNNza3Ozq5Nze3LR+RLy+vJyenMzKzNTS1Ly6vJSWlFRSTMzOzMTGxLS2tKSmpGxubBQSFAwKDKSinJyanIyOjCQiJERCRERGRBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaNQIBwSCwaj8ikcokMCIqBaEDoBAQG1meAUDAQpIcBQoy1dg2JdBqhECgQ1IWB0WgcBIOBwIHXBwwPEBEREhIBbG4IExR/DBUVFhIXV2NjDVYYDY8SFU4ZVxpVAQwbGxynGxkdTh6XVh8gGSGzGSITIxokJUImGSMTwLcnKCkprgAqDSt1zCssKxQtQ35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folderopen16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOzi1Ozq7ERCRCwqLPz+/PT29Ozu7OTm5FRSVHRydIR+fISCfMTCvAQ6XARqnJSKfIx6XPz6/MzKxJTa9Mzq9JzO5PTy7OzizJSOhIyCdOTi5Dy65FTC7HS2zMzm7OTSvNTCnIRyVNza3Dw+PASq5BSGrFyqzMyyjMzOzAR+zBRejBxqnBx+rHRmTPTy9IyqvDRylFxaXNze3DRujAQ2VLSyrDQ2NNTW1NTS1AQ6VJyenGxqbMTGxLy6vGRiZKyurKyqrKSmpDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfCgACCAAECg4eIAAMEBQYCB4mHAQgJCgsLDAEGDQGIkw4PBQkJBYwQnRESEREIoRMUE6IVChYGERcYGaoRGhsbHBQdHgu2HyAhGSK6qxsjJCUmJwARKCkpKsjKqislLNIRLS4vLykw2MkRMRAGhDIJMzTiLzDXETUQ0gAGCgU2HjM35N3AkYMdAB0EbCjcwcPCDBguevjIR0jHDwgWLACBECRIBB8GJekQMiRIjhxEIlBMFOBADR9FIhiJ5OnAEQB+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mailforward16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRydHxubHxmZGxiXHRmZFxOTFxGPFxKTPwCBLymlMy+pOze3PTq3PTu5Pzy7LSmnOTaxOzm5LyqlNzOtPz69Pz27MzCtLyqrPT27IRubPzuzNTGvNTCxLSelPz25Bw+ZFxKPPzy1Pz65LyupBxKdCxWfPTm1Pz23LyinBxGbGzO5DRafBxWfBxajCymxHTS5BxSdBxKbFTK3EzG1CSGvCyKvCSSxCSavGTO5GRaVPzqzFzK5EzG3BSCtAwiPGxaVPTivPzy3NzKpBxObCRefBxqlPTmzJR2bKyahAwyRPzmvOTOpKyObNS+nPz21AQOFKyOfPzuxAQCBGRORLSadPzyzLymjMy2lOzetDwuJFRCPEw6NEQ6LEQyLEQ6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAQABAAAAfhgAABAgIDBAQFBgcIBwmOCQIKCwwNDg8OEBESjY8CDBMUFRYVFxgZDJyOGhsPChwVHR4fFSAhjwkaIiMOJBQQDRUVJSa3GicoHw4pEA8SGSorLI8tLtQu19gqLzDECTEyMzQ14zY1Njc3ODkqCTo7MjIxNCs5PD03PjctPwlAQUIihhBpQbCIihtG+CUocASFkAhIkogQ8kFJwkcFlogIkoRJEydPnkBR6GiAxiQLgiiIIkXElFQJqESoMsRKkAhXqkhhApNKFSxZggTJ4nHIEJhaDhzYwoVLFy1avHyB6ScQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mailget16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAxKdBRSfCyGvFSm1BxKfCSWzCyWzBRCXCRKfBwuRAQGDDw6PHy23Cym1CSSxByCxBxunBQSFKyurMTCxExihNza3NTW1JSSlMzKzFxaXLS2tNze3KSipCQmJGxmbNTS1KSepLy2vISGhJSWlHx+fERGRPz6/IyKjDw+POzq7JyenMzOzKSmpCwuLDQyNIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQIBwGBAIAsOkUjAgFJRQQMHgjC4PBIEVgAh4D4aEYrGAMhINxwPyiCgYSsmEUmk82grLRZJkYCgXaAEKFxYZcEISGhsZFxwFeY0WHR5CDB8dGCAXG5shGxQicBIMpSMUGxgTGSQlpQwSJicnEwwdI7gdKAwTsykpKiobr8QMKxeHDBcsGRvOzxsT0i0uL9HSHdkT2ZkoMJXF4a8AfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mail16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBGxaVOTe1Oze3OTWxOTWvNzStNzKpEQ6LOTezPz+/Pzy7Pz69Pz27Pz25Pz21PzuzPzuxEQyLLyinLSmnPz67Pz23LSafKyObDwuJMzCtLSelPzy1My6nLymjNTCxLyqnPzq1LyihKyOfOzavOzetEQ6NPTq3NzOtLymnNTGxJR2bOTOpPTivNTGvLymlKSShKyahEw+NOTe3PTm1Pzu1Pzy3FRCPPz65LSadFxGPOzm3PzqzPTmzPzmvEw6NCH5BAEAAAAALAAAAAAQABAAAAaqQIBwSCwaj8ikMhloOp/QpmAgqAoIhELBUDgcEIGEYrFgNBoLx+IBiRwkgQnFoWAwKhWLhX3BZAILGhsCDXgODhwdGB5vgAofICBlDiEiIx4kJSYBJ2UoEykqHSMrLC0nLWAnFS4UCycvMAcEMR0RLTIBMwaSahw0NTYtFwclNwEdLws4eoc2DxwQOR06ASk7PBAhIRE9Pj0tLSUY1T8I5gjn6Qgy7D8SfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mailreplyall16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTFRCPFxKTFxGPPwCBLymlMy6pOTa1PTq3PTu5Pz27Dw+POzi3PTm1OTWvPz25FRSVERCRLympPzuzPTu7NTGvFxaXKSmpPzu1Pz65Hx6fHxqZPzq1Pz23HR2dBw+ZHx+fISChJSWlDQmJHRydCxWfBxGbJyenExKTHRiXPzqzPzy3CQmJDRafGTO5ExOTERKTGxWVCRSfHTS5CymxBxajBxWfPTmvPzy1CyixCSaxCySxDSaxDSWxDSSvDyaxGS21PTmzPz21AwiPBRejCSavByGtCSezEzG3FzK5FzG3GzO5FTK3CQ2bPTixBxqlCRefBxSdBxSfBx2nCQ+dHxmXPzmvLSafAwmRAwyRPzyzDw6POzavNzKpAQOFPzuxBwWTBw2ZGRORLyWdMy2lOzetPTivAQCBKyObOTOpAweNBwWVEQyLEw2LEQ2LDwuJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAf4gAABAgMEBQUGBwgJCguOCwEMDQ4PEBESDA4TjY8DFAwVERYXGBkRm4+QGhsMHB0eGB8bDpyOARogEBceIRgXv8COIiMkGB4lJSYnIcwoKb/DGyoXKywtKS4pHinMLzAxJDIzNDUtNjcv6B0hLzgfMh85OjstPDw99zwd7T4/LTVAgggZQqSIECNHevSAgSSJkiVMmjh5AiWKlClAiFARUeVHFSVWmLS40gNLlh5agGzh0kWDlwZfrIDREKaCAjEqrFA5MMYLmTAxlJTxYoZMozNozqRRs4ZNmy5s3LwhA0dBnDNn5MxBoAABnTp17IitowDrmQV+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mailreply16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTEw+NFxKTFxGPPwCBLymnMy6pOTa1PTm1Pzy7LymlOzi3HxqZOTWvPz69Pz25My+tLympFRGRHxuZPzu1LymjNTGvNTCxBw+ZPz23PzuzPz65PTu5NzOtCxWfBxKbPzq1DRafGTO5BxGbPzy9HTS5CymxBxajHRiXPzqzCyixCSaxCySxDSaxDSSvGS21GxWVAwmRBRejCSavByGtCSezEzG3FzK5FzG3CQ2bPzuxAwiPBxqlBxKdCRefBxWfBxSdBxSfBx2nCQ+dPzy1CRqlAwyRDQmJPTmvPTixLSafOTOpAQOFPz21BwWTBw2ZPzmvNS6nPTivAQCBAweNBwWVNzKpPzyzLyihGRORLyWdMy2lOzetKyObEQyLEw6NEw2LDwuJEQ2LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAfqgAABAgMEBQUGBwgJCguOCwEMDQ4PEJYRDhKNjxMPDBQVFhAXGBUSGY8LGhsQHB0VHh8gFQ6bjgEhIiMMJCUmFbS2CwMnG6IoKSorI7WpEycWFiUsLSou1yXXji8wFiopMTIzNDUz4zbZNxsbODk6Ozw9Pj8pPzEzQDdB60JDOkRFjBw5giRJDCWdlmxwIIRJExAWKDRyMgTIiydLoESRImQKlSUSF1SxUoXAlSBRsGSJoCVICIlbqlThcoBClC5eYFD4EiVIFwUyqywAE0ZMlqNjpJDpIkUBl0dlFChAYOZMmTJoyqQR5icQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mailsend16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTFRCPFxKTFxGPPwCBHxqZLyqlMy6pOze3PTq3PTu5Pz27Pzy7LyinOTaxOzi3Ozq3LymlOTOtPz69Pzy5My+tLympPzqzNTGvLSelPzy3BxGbBQ6VPzuzPz65LyupNzOtPz+/GzO5BRejPzq1Pz23LymjHTS5CyixCSavBxqlPz25LymnGTO5CymxCSaxByGtHRiXPzy1CySxCSezGxWVPzuxKyOhMy6nDSaxEzG3PTivNzKpKyOfPzu1FzK5PTmzJR2ZLyihLSWfKyObOzmzPzmvDyaxOzavLSafGRORMy2lOzetDwuJEw6NEw2LEQyLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAfUgAABAgMEBQUGBwgJCguOCwwNDg8QERITFBUWjY8DFxgZGhsaHB0aD5yODB4TGB+kICEaIiOPCwEkJRcmJyYPKCIpKrWqKywTmC0SIi4vMDHEDCsyMg8zEyI0NTY3z7U4Hhs5Mx+0IyI6OyPrIzw9Gys+PxIy2EBBxAs8Qjk5Q0RFWFxAZySfgSMsilRAkiRECHQ08hHgJ0TJkCU/mECU2ISEkowUlpAQ4QTfowNPoAzJIeRJCyjm8kVRIkWIzSkXhwxJtYAKgp9VrFi5QoWKFZ5+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nav1downarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIYhI+py+0PUZi0zmTtypflV0VdRJbm6fgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -nav1leftarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAP///wAAACH5BAEAAAAALAAAAAAQABAAAAIdhI+pyxqdwoNGTmgvy9px/IEWBWRkKZ2oWrKu4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nav1rightarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIdhI+pyxCtwoNHTmpvy3rxnnwQh1mUI52o6rCu6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nav1uparrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIYhI+py+0PWwhxzmetzFpxnnxfRJbmufgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -nav2downarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIfhI+pq+EPXYpxUckoO3AjbF3dJwahllXe6AFgC8d+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav2leftarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pyxf5VohmSlsxmpjTzAHeN5ak6UHpqKRi2GpwvH3Q3eT64RcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nav2rightarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pq5HOAjQyVnqfhHue7oAaKH5kiW0AmnLqaHomkj02g+e6XwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nav2uparrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIghI+pyxfR0HsRzNnuXVqn3mVQZWFRyIDjp65Ga5Ly4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -navback16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRSdBRObCQ2TBxObISevAQCBNzu/BRGZPz6/FzC3Pz+/HTS5ByyzJze7Mzq9ITC3AQWLAyWvBSavFyuxAwaLAwSHBRafBSOrDzW5AyixCS61ETW3CzG1AQeLAweLAxefBSStEze7CSWtCyatBSCnBRWfAwmPBRWdByixAQSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZiQIBwSCwah4HjUTBQFgkFg3MoKBykU0QhoUAIAuAksbpgNByPxQMSGVsVDYlkIqdUiJYLJqORbDgcHRseRR8gISIaEyMkGCVYRBEmeyAnlgaQkSgpmU4RAZ1OKqFOpFNGfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -navdown16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObCRKZBxCXAwyTKTK3Ozy/NTm9GSivAQWHNzu/FzC3IzO5CySrAQOHAyuzETS3CSWtAyOtETa5Aw2VLze7ByWtBy61BSavAxWdBRCXAwqPAQCBDR+nKTe7FS+1Eze7ByixBRmjPz+/AyexAyixAQKFBRqjAQGDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZeQIBwSCwaj0hAYCkYEJLKguGASEADigWj4bgaHpBINykwSCYRa5HCFFQsF0xGo9lwhpSOwfORYC4gISJ3RAQdIyQYJSAlImNrh4uNJkl5CoKUUBQnjlB4KJ6hokN+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -navforward16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAwyTBRObAw2VDR+nCRKZOzy/KTe7Pz+/KTK3Nzu/Lze7FS+1AyexAyuzBSavAyOtBSmzOTy/BRqjNTm9IzO5ETS3ETa5By61AyixByixBRmjAQGDBxCXGSivCySrCSWtBTC3AQOHAQWHAxWdEze7AQKFBRCXAwqPAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZjQIBwSCwahYGjUjBQGgWEpHNYMBCaT4G2UDggos+EwmBYMBpf6VBgYDgeEMgjIpmoAQVKxXLBPDIXGhscRB0eHyAgDSGBGyJFASMiIiMkJYImUwAnmJqbjp4AKCmhAKSlTn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -navhome16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBDw6PBQWFCQiJAQCBFxeXMTCxJyanDwyLDQqLFRSVLSytJSSlISChCQmJERGRFRWVGxubKSmpJyenGRmZLy+vOzq7OTi5Ly6vGRiZPTy9Pz6/OTm5ExOTPT29BwaHNza3NS6tJRqRGQqBNy6pIyKjDwGBPTe1JSWlDQyNOTGrNRiBGwmBIRaLNymdLxWBHxGFNySXCwqLKyqrNR6LKxGBNTS1NTW1Jw+BEweDDQ2NAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaoQIBwCAgIiEjAgAAoGA6I5DBBUBgWjIZDqnwYGgVIoTGQQgyRiGRCgZCR1nTFcsFkHm9hBp2paDYbHAsZHW9eERkYGh4eGx4ag3gfSgMTIBshIiMkGyAlCCZTEpciJyQjGxcoKUQBEhcbIiorLB4XEltDrhcaLS4vtbcJra8bMDHAGrcyrTMXHjA0NSypEsO6EzY3IzU4OdoTzK0BCAkDMgkIOjJlAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -navup16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObAwSHBRSdISevBRWfAweLNzu/BSOrAQWLPz6/FzC3DzW5BxObHTS5ByyzAyixEze7BSStBRWdAyWvByixAQSHCQ2TAQCBBRGZJze7CS61BSavAxefMzq9ETW3CSWtAwmPPz+/CzG1ITC3FyuxBSCnAQeLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZfQIBwSCwaj8hhQJAkDggFQxMQIBwQhUSyqlgwsFpjg6BwPCARySSstC4eFAqEURlYhoMLBpPRUDYcHXt7RgUeFB8gIU0BIoiKjAcUIwiLSQUkJRsmGIwJJwmEU6OkfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -playeject16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+py+0R3IFQUtruXVqn3kkWyIARR4rqKvoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -playend16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+py8Eb3ENRggrxjRnrVIWcIoYd91FaenysMU6wTNeLXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -playpause16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIfhI+py+1vgoxzyUCxrZd18ClfmIyVyJ1lqkHuC0N+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -playstart16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+pyxudwlNyguqkqRZh3h0gl43hpoElqlHt9UKw7NG27BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -playstop16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py+1vgpySUWpvXXqrHmSaeJEYhKYq6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textblock16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py40Bo5SOzRvrwlgrfnkJOIkPaaaJXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textbold16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIihI+py70BowPQ1HZpwNv212Vg9IGHmIjoWa4ey5DSRNd+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -textbottom16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIVhI+py+0Po5y0hYtzrkB7zH0fN/kFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -textcenter16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsnRkqtDnhu1zHfFSpjaY4PavgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -textitalic16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py+0BgztwUmmjBXX3jE0auHHhM5Yq4xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textleft16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsgRoqr3Vnt102fFSJjUC6nlPoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -textmiddle16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIXhI+py+0PT5i01pisphjt3UmfFZYm5hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textmove16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsg2kfZvblXbwTg10WlA4rjyvgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -textright16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+pm+EPIZstSrqsDhhv1ylfFE5jiYwX6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textsortdec16:text text16 16:photo:16 16:R0lGODlhEAAQAIIAAAT+BPwCBAQCBAQC/FxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM5CBDM+uKp8KiMsmaAs82dtnGeCHnNp4TjNQ4jq8CbDNOroIe3ROyEx2A4vOgkOBzgFxQ6Xa0owJ8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -textsortinc16:text text16 16:photo:16 16:R0lGODlhEAAQAIIAAAT+BAQC/AQCBPwCBFxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM4CAqxLm61CGBs81FMrQxgpnhKJlaXFJHUGg0w7DrDUmvtPQo8qyuEHoHW6hEVv+DQFvuhWtCFPwEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIlhI8Jwe2/AmpTynqPTXSqrnBM+I0kdmpmGmUp+K4nPMvhYx9+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -texttop16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIWhI9pwe2uYnq0yQtqxbz7D4biSIZ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -textunder16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+pu+FxXoOIKpds1oBH7hlYxYxRCaIZ01lhJbHy9tTv7BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewchoose16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMzCLrcGlAs6UAYgwLdLtEcI4ygQo7VVp2oupGpG4vmaUVTemX523qlFcw0a4RqNlkx5k8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewdetailed16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMmCLrc/i1IAVkYg1Z1iRYUKCqitp1oikqBWV3ZOnhkWNagqu+qnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewicon16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCLrcG1AwGOQbw6qANeCEB3pCSZpO6pgowJZqLKuUGE0dnuEhf8IL1kz1shSHDX8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewmag-16:view view16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ+QIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6eUAFCusJSzr7Kmpl0CtLGLvbW2Zn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewmag16:view view16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ8QIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6eUAFCusJSzr7GLArS5Q7O1tmZ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -viewmag+16:view view16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6cAsLECrqeys7WxpqZdtK9Ct8C0fsHAZn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewmulticolumn16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCLrc/ixI0WSgKoyBl+beQFACpo1AqXbKCr1wLAMWS08hGG3dSZqin4sxnBmPD38CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewtext16:view view16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIchI+py40BTQSwuovp3DXkv1ia1IHmIXLiyWJ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -viewtree16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBDQyNPz+/PzerAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAMuCLHcri4yGISlj4kxcANgNRBQCIbL6U1Su7bB62rXvGydG25kqpwfIGxILBr9CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actattach22:act act22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBMTCxPz+/DQyNKSipAQCBISChFxaXDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARrEMgJgqA4zzus/gLhFd5HCcZAXqsphYPUdhcYFNRcZnvdtpnDqPTbUWgAJKBYwzBlw+bRo3xmkNWoBgm0OrVLn3GC9RgCk8DhUw7c0rHPr4CDu5SYQNyEt7uSY3p/UAKFhYKDSQOLiwgFdhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -actbookmark22:act act22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBCQmJCwqLMTGxAQCBBwaHMTCxLSytERGRFRWVLy+vKyqrKSmpHR2dJSSlJyanISGhGxubIyOjKyurGxqbFxeXGRmZHx+fKSipLy6vGRiZLS2tFRSVHRydJSWlHx6fCH5BAEAAAAALAAAAAAWABYAAAWWICCOZGmewamaQrq+wUC8azHINGocOI38iIRAceDNaISFYklkGHOEhoNBfUAOhuOLEJE8HoPiRKFdESiQBqViuTDIUAsEcyAeGJmyiqC5RCwJGg0YcEh9D0V3Dxt6JwQVDRYVHBUdi40mjw0PTgwQHgeYJQQJfxUXFxAOoTkFpQ0fsRSimQkWEQ0VtI62HLt7vjl7JQYhACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actbookmarknew22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCwqLCQiJCQmJMTGxAQCBLy+vLSytERGRFRWVKyurKyqrLS2tKSmpHR2dJSWlKSipISGhGxubIyOjGxqbIyKjFxaXGRmZHx+fPz+NGRiZPz+ZPz+HMTCBKSiHPz+jFxeXPz+XPz+tPz+zPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAamQIBwSCwaj4Gj0hgQLJ+AAaEAVQoI06pRYDhkoYgwIhEgKBTfZ2FhaBsYDS8VWnA8Go0FJIKeqyUTDw8EDHBpSwUUFQ4UFhcYDQYFfkoFFxEQDG8KEAUZlEeWGBIakw4FG1STiBoYBRwdBR4fHgUdHKBEBSCnIR8iIyIfIblFu6ceIyQjtcXGCbLKzAUKzrq+wMLEVa+xs7W31kOTk6nkWuOf6Ea5QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actexit22:act act22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBHR2dDQyNCH5BAEAAAAALAAAAAAWABYAAAJOhI+py90RnIMyRUOxhDfzJkACdoXBuEDDkQFDi5go0MrKx16kns80b7qdELCgBYaEGWwL5nG1ePFiKp9A6kuYRNuho8vxVrrZivmMRtMLACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -acthelp22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBCQuNBwiJAwiLAwaJAwSHAwSFIy+3ERynCw2PCQuPAwmPCxOZCxWdJzG3FSazBwmNAQKDAQGBDRmhBQyTDxujDR2rIy21AwWJDyGxCxmjAwmNDRihAQOFDxmhCxunBQWFAwaLCRahDR6rESGvDQ2PCRWdDRunDSGvCRSdAwWHCwuLDSOzHSmxDyKxBxCZBwqNHSu1DyOzAQSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAahQIBwCAgIBAPCoGAgOoeBAyKhWCwYDUf0CX1AIhLiJEGpBLiAAaRxdgYsl7Ybk8igBZoN5xmAdDxoanp8HyANISF8EBsiXBMjJBolBEQmGHFoRScbKHIKDykqK5lFAZRCnyknTaROLA8tq61OChgtKqyzQgEYEJi6UC4vI3LAASkbMBPARAEBdszR0sACEaPSMTIQM8W6KzNl3bo0NOJDdEEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -actlock22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBHRudFxaXExGTERCRAwGDGxubPz+/Pz2/Ozm7Nza3NTS1KympFRSVHR2dNTO1JSSlKyqrKSipDQyNMTGxDw+PLSutKymrMTCxAQCBHRqLBQODJyanDQuFFxSJFRSJFRGJERCHExCHISChHxyLEQ6HGRaJExKHLSmbLy2fOzitPz23KSiZHxuNHxyNJSOTNTOnMTCjLSudKSaXJSKRJyOTOTetNzWpHxuPOTi5MzKzLS2tFxWXOzq7Ly6vOTe5Ix+RLSqdNzSpLyydKyqbKyiZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBAgMEBQKEjI0GBwgJCgsMDY2XjwkOAgQBDxCLl4QNCaGCBBGWooINCAqqrBKgqwATFKaDFRYVtBMXsIMNGBm0GRADjQIJxKIaGxwdHh8gISIhGyMZzIwkGholJiYfJiAfJyEZISDbg90oKCkqKwcHKyooLC0f7IIuLzD2YMSQgW8GDRri+AFoUMOGvRsxUhSsQQPHvmQSchyQtEAHhh0WJHDQcJERjwsKDvRI0BGDjwgicXhQyCOjSgUKPO6AObIkIQESfmxk6REDT4s0bfaYpDNkT4VAha5s+TLmzEYtatwIOHAiDZIKNQAJYk9IjCFEisyoocFEB4UACtBpm0t3LiF4gQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -actredo22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCReDJzGjMzivOTu3Pz+/JTWbHy+VHTCTMTivPT69BxGDESuJDyiHESiHEymJIzKZAQCBFS2LFzKNGzWPDRqHCxqDFSqLHy2XESCHAwaBAQOBBQqBDyWJHyqZDyKFGSiVESeJBQ6BAwSBGTGPFyWPFSSLEyOLESGJBQiDAwiBBQmDCRGFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaoQIBwSCwaj8hkMcBkKpcBwYAwEDif0YLhwEUkFItFMkAwMBoOR+PxgHwjRDggamhIJpQ8ZbKGKOQLcgEFdhUWEYgRF3sNfhELBHALAhgZFhobRBwREhQdEAIEHpIKHwsaSJwUDQgQIJINARxKESESDQ0dgCIjSpAkDAwPco+ZSJAlJicnKHIAIrNHidOIQxunT0kpCyrZSCss0d5Fj6jjRonn6uvs2QZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actreload22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBCRSFCRSHBw+DBxCFCQ6FBwyDBQWBBxGFCxyLGTChMzqzLzmvHzKjDyOTER+RERyNDSqXNzy3LzivFS+fCyCPBQmBCQiBBxKFBQqDOTy3LTitES2dDR+PCxuJOT25KTarCx+PESSTCxKHDSeVCyKRNT21ESWVDSGPBQyDAQCBBQSFDRuLDSyZDySTGzChCRiJKSmpExKTDS2ZGzGhLy+vGxqbISChDSKRMzKzGxubDQ2NIyOjCQiJCwqLBQWFCwuLKSipERCRERGRHR2dAwKDDw6PFRWVIyKjCQmJFRSVBwaHKyurAQGBExOTBweHFxeXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf9gACCg4IBAgMEBQYHhI2ECAkKCwwNDg8QBAOOhAQREhMUFQgWBxcHGBmbggkaGxwPB4yDB6SbBJIKHQaqtY0eHyAhsqrDgx4aCiKpqoQHAyMjJBMKJaSxzAAHIRsmJgonKA0LHSmDKiuOBywRLSQuLyEwwyoxMuiN6iUzNBXy5jU2bsgoJugABBz95uXQsUMGD3vpPPgTpKIGwx4+HMr4kW4YkCA2hAzxAQSIECI+imBTwVIFESNHerRUgc0cEiFHkjiiyYzeDiVLdvLcySSkkKGEWiZVweSGkIHMmvQosoQlkaZOjvhosvKJjIAxoOAsgpRZkQNLnvSoqspAIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actrun22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAwKDAwKBCQiHNze3AQCBBwWFDw6NPTy9PTy/Dw2NKyytOTi3LS2tMTKzMzOxLy+tLy+vBQODNze5NTS1JyalIyCbIx6VIRyVISGfJyelOTq7EQ+NMTGxKyurGxeRLyKPOSmROSuVOy2XOSiTLzCzNTOzDw+NCwqLHxuVOy6bPzGfOSuXNTW1LSyrMSWRNymTOSmTKSCTPTGjPzSnPzWnMyaVBQSDMTCxPz+/KyahNSeRHxeLJRyTPzmtPzarOy6fJyajNza1Ly6vLyulFRCJPzirPTOlMS2pNTSzMTCvJyenBQWFNzKtPz6vPzyvPzqtOzGlOTe1AwGBFxWTLy6tPTm1PzSpPzutPz2xPTSnOTSxOy2dPzapPzerOzm5IR+dPzu5Pzu1PzqxPzy5Pz+9GRiXGxuZKympHR2bOTm5Pz6/MzSzBwaFJSSjCQmHPz2/AwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeEAQKIjIIDBAQDjYMFBoMHCAkKgwYFhwULDAUKCg0ODxCkBQgRnoUSExMUDxUWFxgZGpAbFIuGHB0eHyAhIiMkIB8lJieIKCUpJCTGIyorLCktKIUDpC4YLzAxIjIyMzQ1NhgdpJI3ODktJTowOyM8Ejc9Pj9AQUIEclAocCMIBQhDiOwgoaKIoCI+jBxBkkSJkCWemIyq0GSHCBVHihRx8gRKFCmpKhGaQqWKFYZXsGR5kkXLFgRUXBUqkCGCFS5AjnTx0sXKlyA6CRVgAAHMAilhxIwhU6ZFkBY5kgKYUoXBAzMKzixZ4AJNGgVm1KxhM0WpmQpUMtooaOPGxAM3Nw60oYLGjNYCbzYJOgAnRzNBJ95oPYQCgpJtkwzFoULlRuRPiy9fNhAIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actstop22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAASC/CQKDBwKDCwODNyKjPzq7My+vIxiXAQCBOSOjPz6/OSelNySjNyGhMR+fLRaTGQ2LPz+/Nx+dNR2bNRybMxuZMxeXMxiZLQSFJQaHFwqJNyKhOSCfNyCfNR6dMxmXMxWVMRORLQODOR+fOSSjNR2dMQ2LJQWFMRWTLwWDNSCfMxeVLwaFKQODNR+fNx+fMxiXKQSDOSWlMRSTMxaVMQ6NMxORMQyJOTS1MxqXLwWFLRORMxKPMQaHMxKTLQWFCH5BAEAAAAALAAAAAAWABYAAAb2QIBwSCwajwGBcikIHIsDQmFKNRwQT2EgoVgsGOCG4wHBIgmRhWRCqVQsF0xGYyYGNgoGh9PpeCQfICEic3UAAWgLIxwRJBsbHSUREyYYJ3RDAQULexGejhueESgpl3WaCxsqJKKsChEUKywtmFoFDC4vCayikzCyMbWHt38NCTKiHhUfMyzBdQIFKsodob0VNDWzwppuKxMRrx6iNjcitNA4bh+iEzkwojc66JkOOxcf7G35PBE9KS1MEUGgIQOIFfk++KjRw9wJgUUIZvhRoyLDFCliQDQisUWLGCJOeNx4hKCGkyhPGnqCoKVLl1liypyZxUAQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actundo22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCReDJzGjMzivOTu3PT69MTivHy+VJTWbIzKZEymJESmFESiHDyiHESqLAQCBFzKNGzWPFS2LNTmzCxqDDRqHPz+/KTGnBQqBAQOBAwaBESCHHy2XBxGDOzy7HTCTEyyJDSqFHzWTAwSBBQ6BIy+dESKJFySPFSSNAwiBCRGFBQmDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAalQIBwSCwaj8ikMsBkKotMwYAwEDiXgYLhwD0gCFZiQKxNKBYMRqPh+D6G16y5AYnYIxBJAyF4AwITTAUJdBESD4gPFBV6Fn6ABBcJDIYPGEQZGhQbHAIdfx4JHw2VSBodGwWfAR4LDSALfkgYAQurBiAhICKfSSMkvQElGyYnGyi9Rxkdj4nOskUYyU9FpxnURikdGtjRKivdRKfQ2Inh5+jpRwZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actunlock22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBGxqbFxaXExOTEQ+RAQCBPz+/PTy9Ozq7Nza3NTS1KSipFRSVOTi5Hx2fJSSlKyqrJyenJyWnDw6PMzKzKyurDQyNFxWXMTCxJyanHRuLHxuLGReJFxSLFROJFxWJExCHERCHBQODISChHxyLHRqNIRyNHRmLLSqbKyiZLy6fOTarPz67Pzy3OzitKymZFxSJJySTNTSnPTy3NzSpMTChLSydKyqbKSaXJySVIyGRGReLPz23NTOnMzCjHxuPLy2vKSmpOTe5LS2tLSutHxuNHRuPMS+xFxWLIR+RDw2HFRKJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SDAQIDBAUChY2EAQYHCAkKCwyOjZANDgIEAQoPjJiDAg2iggQQp5gMBwmrDBESl6MTFKuoFQSjABYRF40CGAW8BRm7hQwNxBobHB0eHx4gISIjBdiEAhYFJBslHOHSHh4hBSHlxIUmJygpKissBiwtLi8pGjDqhBoxMjMuaNSwcSMFjhw6dnjYRyrGCh4ueviw4Q5HDB0/PjAUJCBCAwMIGiiggAEIBFk/FgYLIgRkggQkhxAJkqGExkYMFnxsIGRkSQgLHhRRWUjAggQgG8AsSWRBBiP6VrYMOfKIyaBDNwLo+HHSUplOSyDRqiEHjRkretRQkcLgxayNF0wksQGQxsSKMTIq0QpgCba/gAE7IhMIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -appbook22:app app22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBDyGhCyCfFSWlESOjDyKjDSGhCx+fGSinGSenFyanEySjHSqpHSqrGympEySlBx2dISytHyyrCR6dKTGxHyurHSurHyytGSipCR6fARmZFSalEyWlBRubAxubBRydDyKhDSChLSytPz+/MzKzIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbFQIBwSCwaj8ikMhBQIpmCQdM5ZBIKhgNiugwkFAsCI7pNMhuOxkNBgBgEiAi3GkBLJpJHYgEpaClyREwVFhcSEhgOGQoMfgMaERtcARQBFRMYExZ6HB0FUYAekkIBHxqWFmlrC1haESAfG6MBGx+VFRgKYH0hInGRklO0ppYXCwwMWQiQHkwjgrWnFRdYZHIBJCTP0LaWGAcDW9jZ2nMAw9IWTOQkJSZMRsOV49nu8E+19PbmR7TY+1TovONH5V7Ag0QMBAEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -appbookopen22:app app22 22:photo:22 22:R0lGODlhFgAWAIYAAAQCBAQ2NPwCBHSurIS2tBx2dBweHPz+/Ozm1GxiTGyqpPz6/Pz69GSqpOzaxPzy5HxuVLSmlOTazPz27PT29NzClPTexHxuXLSmjAxqbFSinPTy9KyehNy+lPTy5Pz29HxyXNzWxKSahOzexPzy7IR2ZOTWtESenPTy7KSWfIyCbKyijAQGBDyalPTu3KSSdDSOjJyOdCSGhPzu3OzizJSGdPTq1PTq3JySdMy6lAyKhOzWtOzi1OTOrJyKbMS2nJySfMS+rAwCBNzOrNTCpNzKpJSGZKyafLSifLyylIx+ZHx6ZDSChAQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAWABYAAAf/gAABAoSFhoeHAAMAiI2IAAQFjI6EAAaJkQeTjwAICYkKBQcLm5WdBwyfhgChB66bp64HCQC1lQ2irqQCAA4PowsLEBESE4wAuLIHFAAVFr+uDBcYxRm1GrmuGxwdFh4Mrh8gGCET1gDYyhsiFSMkDAsMDCUYJhvnJ9kHKCnODwwfPlBQsULCPRYAWogK9sHFiwoOPEyQh0JFPXO1YBSYwBEFghjdHkwQOYGgwQwIZRR44GHGDBogabhAsYEEihrUMAIoUMCEDRs3HODIYQHFA6MPcJA7KICFjgw7eIzo4cOfiwc/gKwIUm2SkKdDdlDt4AABDaU/iIRwwbTSUyJFOow4S3Hkx9oNDDZgXPU0h1wcSIgEGUw4ibVET5WoWMKksePHpdxmyKADAEIWly9HJtQkQJMmlAgZCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -apppencil22:app app22 22:photo:22 22:R0lGODlhFgAWAIMAAASC/IQCBPwCBPyChMQCBPzCxAQCBPz+/MzKzISChKyqrDQyNEQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARYEMhJ6wxiEMtpIAWxddwXiqRlikSQeiAbuC+wirNR322gv7zcLobzDU+9XypoBBKTR1lz+RTWDgip8nUwZK1XLyIx5XoVicX2RUAo1DVKi7GOBxjxfNwQAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -apptool22:app app22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBISChFxaXNze3NTS1Ly6vKSipNTO1Ly2vNza3Pz+/MzOzOTe5DQyNOzu7MTCxGRmZMTGxPTy9Ozm7Hx6fPTu9MzGzGxmbAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAW1ICCOZGmeaEoGbBsI6joMRGEcbQwESDIrtVtAF1gwDLNaAmfKiVgLBJKgwB1KxQZrBHU0FAXmavFoQLYiB6TxFXMj5AZBwnJI2I3wcNWALyYEcgoKXxRhOHs7XxEVCwsWFgoUDRYUFwwQB25ZCxiNjo6GkwUXN2NsCxEYqhUHoQ0MEglYRQQXErcHrI55FycuB2YSmoyOBTEtB2sXuhU6XAENC2a6z9AKCwq+1tAN3E2J3ySkIQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -connecting22:connect connect22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBPz+BMTCBISCBAQCBPz+/MTCxOTi5AQGBNze3Ly6vISChNza3FxaXKSipAAAACH5BAEAAAAALAAAAAAWABYAAAR4EMhJqwzY6omD+MNGdR8YilNZnug0qGzrqrL1lnV1fyJBVB6VQEMoGH4ADGwQkxQPBwMiKGA2J8VEAnq0tgiKg5aL/C7C2gTjKCM0zowDQ8tuNQznNL7cKzjOUQsNfER+gguIg19+Pm6ChBZFDmWNi5M5FIyYFHQRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -connectno22:connect connect22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBPz+BMTCBERCBAQCBPz+/MTCxOTi5Nze3OTm5Ly6vNza3ISChFxaXKSipAAAACH5BAEAAAAALAAAAAAWABYAAARiEMhJq7046827/+AVCKE0Dh9BAGdaGISAToFGFMcBU+11I4hDYseSZQiKwwKoI/QwBIYiuFDCZseGdIlYEjUNg1SpY6w2N4cUIW6cjwW1lsFwo+MqgtZuw0/ydw5vH34lBhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -connectyes22:connect connect22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBKyirPz+/KymrOTi5KSipMzCzNza3OTe5Ozi7MzGzPTq9OTm5ISChMS+xFxaXNze3GReZIyCjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWLICCOZGmeaBkAQpoGg7C6JizTQT7CxPwOwFWgYPChYIXkIHC4uQKGAiKRKCyNpxxUUVViVYNFLkqtLo+DAkMMLXQPXwAy2WCTF4544FGtKuwPDhB6DnxuUmyCcXIQhV1uYoMuEAcOBxEKCHg6TzGFCJUSizuejROKOAM9OY2SnUU7nD89NCcDsLUnIQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -devscreen22:dev dev22 22:photo:22 22:R0lGODlhFgAWAIcAAPwCBAQCBPTy9PTu9Ozq7OTi5Nze3OTe5Nza3NzW3NTS1MzOzMzKzMzGzMTCxMTGxOzm7AwGDBQOFBQSFCQeHCwmLCwuLDQyNDw6PERCRFROVEQ+RDQ2NLy+vKSipISChGxqbExKTOzu7OTm5Pz+/GRiZMS+xLy6vBQWFLy2vCwiHFQ+NMSmfNSyhIxmTDwuLJx+bLS2tCwmHMyyhMyqfPTqpPzyvLSWbLSWfPzitIx+ZDw2PAwKDCQiJGxWRPTmrPTerMyuhPzqtPz63PTWnPz6zNy+nIRiVDQuLKyWbOTanPz21NS2jNS6lDQqJHRaTPzmrPTSnPzyxOTClPz2xNSuhPTqxPzuvOzSpAQGDOTKnMy2jOzSrPTu1NzKnOzOnBwWHJRuXLSWdPTatPzqvNzClCwmJOzSnOTOnPTuxOzKlOzerOzarOzitJR6ZNTO1IxmXPTWrNSyjPzOjPTSpLSehHRqZOzirOTCjPS+fPzGhOy6bOzKhGROPMy2lPz+1PzmtKRyRHRiNNTCdPz+zNzCjEQ2NKySdDQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAj/AAEIHEiwoMGBARIqXMhQIUIBAwYQIFCggIEDCBIoULBgAYMGDgIIDEBAwMSKBRBk3NjxAciQIwdACBBBwgQKFSxcwJBBwwYMHBx0EAmA5EwPH0CEsCChoYgOQ0cSGCHhA4kSS5syJGDiBNEAFVGUKKEBAwWFFM6SNJHi64gDFEKE4FBBggoKK1i0cPECxokYXw0gsECYggQZM2jAqGHjBo4cOtqOxLhDAg8ePXz8ABJEyBAWRIoYOfJipEoMCZEkuaFkSAslS5jUGJKkSRAnRREo0JDwCZQoTKQAmUKlihQrVa5gKZ1lI+oAK7QM2cJlSZMuU4Z4+TJEx0iNOwKAggkjZkyOFmS8kClzpcUQLRRGbjRD4MgZNEzSqKG+ZgobI2248dUbDDDwABzcxSEHEFpgEcUcdMRRhx1fFejAAx0cgcYdSxiBRx566LEHH0d8QFRRNC3Uhx985CHEH0MAEkhCBxWkgiCDFEFIEYUYUmONMhyCRxVH/PgjBYioYJAdAQEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -editcopy22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFPz+/DQyNISChDw6PMzKzMTGxERGRIyKjFxaXMTCvKSmpHR2dPz6/Pz29PTq3MS2rPz69MTCxFxWVHx6dJyWjNzSzPz27Pzy7Pzu5PTm3NTKvIR+fJyGfHxuZHxqXNTCtPTq5PTi1PTezNS+rExOTFRORMyylPTaxOzWxOzSvNze3NTOxMy2nMyulMyqjAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbYQIBwSCwahYGkUnk0BgTQ6IAQaBKfUWhBYKhaAU+CgXAQIAyChLeJzSIQhcH6GFaM0QtGY5kstqEODw8QEQELAhJTc08KBBMEFBUWDRcBE1pca20SGBkaEBscAY5maFRIAgoLHRQRHh8gIQFlZnByqA8ZGSIQIyQjJQEmYgJ5p2ACrK4gJx4gKIZZAgdeAQ4ZI9kjKSor0AwEjeAs1S0cHAslLi4vMDDRWeRIfEsxMeET4ATyVoYLC5fizXEiAR84BeMG+pEm8EsAFhAjSlR4hR6fLxiF0AkCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -editcut22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBAwCBPz+/OTi5JyanOzq7DQyNGxqbAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARbEMhJq704gxBE0Bf3cZo4kRJqBQNRfBucyudgvJS6VaxLzyMa6/bLiWA9HOg4VIIkL5vzuRkcpkvRIIAorphJLzBW84WEuRZWp6uaT7J2Sh1Hit3OY/ZO7WvsEQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editdelete22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIYAAASC/FRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwKDAQCBExOTNze3NTW1MTGxLS2tJyanPz+/Ozu7BQSFCwqLDw+POTi5PTu7MzKxIR+fCQmJPz6/Oze1NTGvPz69Pzy7Pz29LyyrPy+vPyupPTm1BQWFIQCBPwCBMS6rPzSzNTOxPTi1NS+rPTezNzOxPTizOzWxMy2pOzaxMy2nPTaxOzOtMyynOzSvMyqjPx+fOzGpMSihPTq3OzKrOTCpNzKxNTCtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf8gACCAQIDBAUGBwgJCgsLgpCRAAwNlZYODxALEY+SkAMNEqKjEw0UD5yegqCjrRMVEqidkgWhraMWF7GptLa3EgEWFRSOnhW+vxgZEBqzkBvItxwdHryRCNGjHyAhHSLOgtgSI60c2yQjJd+eJqEnKK0hJCgnJSngAO0SF+8qEvL0VrBogW+BLX4oVKgIyMIFQU8KfDV4R+8FDBcxZBREthAFiRIsOsygsVEUh4Un3pGoUcPGjZInK65QicPlxg8oX5RwqNJGjo0hdJwQ6EIkjRM6dvDYCKIHSBc1Ztjw4eOH0oIrsgIJEqSFDBo0cuTgsdSTo7No0xYTZCcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -edit22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBISGhISChHx+fHx6fHR2dGxqbGxubGRmZGRiZFxeXFxaXFRSVIxSLPyuXMzKzMzKxMTCtExOTPzqrPz+/NTS1MS+tOSaVPyWNPz6/IxeNPzavPyKBNTW1PyCBPyGBJxmNPzOpLx6PNRqBMSCRNySTPyCDPSGBMxiBKROBHRydPSylOyydMxmBJxKBAwODPS2lPTq3OyabJxGBPTy5PTGrOyOXPR+DPz69PzmzPzevNxuPORqLMReFPzy7MyCXKxiNIRKHBQWFNTOxPzixJRaPFxONHRqVPz27PTy7PzStCwqJDQyLJSGdIx6ZPz29PTu5HRmTLSKbMSGZHROPFxKPJSKfJyShKyehMyuhDQmHEQuJJyOfLSijMSynMS6pLSefDQyNHx2bKSahLyqhLymhOzi1FRGNIR+bNzKtOTOtOTKrOTKpLyedAQCBFRWVPTq5NzOvLyunLSmlNTCrOTOrNzGrLyidMS+rLyynKyijLymjLyqjAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gAAAAQECAwQFBQYHBggJCgsLDAwADQ6CAQ8QD5ydEJ+gERKWE4ICDxSpqhWqqhYNFxMYphCtqaytGRoXGxgcggSoth25u70eH8APFR0VzMzNziAXIRjIvwAFwq3EqSLUGB/iI4LathS4JCXVJh8nKCmCKrXDFCss1eIfLS4v8ssdmgWsAGNDDBnt3s3wJ+jAtlUhaNSwccNEi4WCBBl4SAHHihw6ZOzg0QNjRgAG6KXK4CNEjBU/gDQI8kLISQAIADobAoMIzCINjLw4YvNkAno4kCRRUuNHESNLmDRxUjSjAlRPfECJImUKlSpMrFzBIqWqoKtJaWSJomULAy5XXrp4+QKGYcYFoCBEWRImi5gmY7CQyVLGriAGD2jEMHMmCxc0Xb6kUbOGTRs3N988gLM4jpw5Y+iwqcOGjZ07mE8yiGABz5c8c/Ts4cOnDJkybS7fdMO7t+/fvDMaCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -editpaste22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQWFDw6FHRuFGRaBFxSBAQCBAQKBCQiBIx6HPz6/NTOfKyiXDQuFOTm5Pz+/Ozu7PTq5Pz63PTyxNTOjKSeRExGLMTGxMzKzNTS1NTW1Dw2NKSmpKyqrKSipJyanNzWlLy6ZLSuVIx6FISChIyKhJSSlCQiJLS2tDw6NDQyNCQiFCQmHBQSDGRiZHRydGxubHx6dGxqbFxeXGRmZFxaXCwuLOzq7KyurHx+fDwmFEQuFCweFCQWDBQODBwaHBweHKSinJSWlOTi5JyepHR2dDw6PBQSFNze3ERGRIyKjIyOjISGhPz29Pzy7MS2rMzOzFRWVHx2dHxybDQiFPz27Pzu5PTq3PTm1NTCtJyGdHxuZHxqXPzq3PTaxNS6pFxWVFRKRNS2nPTi1PTStNSulNzOxNSynMymhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCgwABAgMEBYSLggaOjgcICQoLDA2Pj4MGDg8QEZ4FDxITFBUWFxcYGRobjQ8cHR4fCQ8gCyEiFSMWJCUkJieNEB4dKB4pKissK8wrLS4vMDHBAAYQHx8dFx0fJDIzNDU0M+IyHzaNNyg43Ng5Ojs7Ojw9Pj9AMkCNDiZB/h9CSOx4QLCgihItqBkYgqIDESElitAYWJCgkQcXjjRCgi1Ihw4BB5LAQOLCgyQYHihpUU3DBw5ElpAgAYNixSRJjKjQaECDCRPZPDB5IbIGSQwKLnh4wbInLA4kmJB4oaPiAwVNnER40hRK1BIAaVatUZJEFCkmpmjgCeWDCalFe4q4oFKwSRUrEa5gycLzwq8lUnPQ4PEgSpYcUZ5o2cIlS1O/JHLEDdfjQZMIVrpgweLFy5e+M6WSmBGlxYMYYBRzCaOFi5imHWBIfOEiShLTVjaP6eyFTBmN1TA5OvLDjJksWb58OVMGDRqWjAYdmU79SIvpjqJr104nEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editshred22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBFRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwKDAQCBExOTNze3NTW1MTGxLS2tJyanOze1Pz+/Ozu7BQSFCwqLDw+POTi5MzKxPTu7LyyrIR+fCQmJPz6/Pz69Pzy7Pz29OzaxPTu5PTq3PTm3My6pPzu5PTq5NS+rPTm1PTi1PTezOzWxPz27MyynOzSvMyulOzOtOzKrMymhOzGpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbpQIAwIBgMCAXDAZFQLBbCqJTRqFobjgdkEYFKowPJZEyeUBqVR/crHDTKZYplovZKCW84+YKZZNZSBXl6EwEEBhVPXxZihGMaGRscdkIdg4QeEnVfCH2OHyAhIhuUAAiXZSEhIyQlJqWnjiEnKCWupRWoYyEgJK0SKaUKjam0JCorLMFfC6iqx8giLa/MGAsT1wsuCyULKwssC9RSzdkfCyALKuALLQsvpeXYIQso3gsiCzALMfENC+dGcMNHUAY/f+jq3ctncMYCGggFrsvHcEGNh/EyPFmg8cmrJxAVkVO0EUDJklHoBAEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -edittrash22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBERGRExOTDQyNISChBQSFCQiJCwuLPT29Nze3GxqbDw6PGxubHR2dJyanLSytJSWlJSSlOzq7Pz6/Nza3Ly6vFRWVBQWFIyKjMTCxHx6fIyOjLS2tOTi5PTy9OTm5Hx+fNTW1KyurKSmpJyenExKTMzKzKSipFxeXCwqLMzOzKyqrMTGxLy+vHRydBwaHNTS1DQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb8QIBwSCwaj8KAMoA8LgUDQsFwQByay4RiwWg4GA9IRGk0SCYJSsUCsVwwGQ1EsmESD5xOp+L5gDwhBRIZDhcDdkMGDgEiIxAkJQ8Ok5MmAohDAQ1xJxUlKCUlEg0pKpiZJRoLCxmtCw1eURhOcR4rbQ8cGRwLAwgGtBYTDywtGRKjvQTARgEZLhMcKC0OrQMvAirMRc7CHCTU1g2+20TO0NIn1RwDCya/wdHT1Rnt5LToKOq79trx0tR02YPX7Jm8fRxMOIhSLhOJE/LCJSTlr5kFEBQsWDiR4UGGBgsuHDg1BEYAfTE6oEBR4AIBAiS5yWBAAAGBAyaPGAgCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -fileclose22:file file22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBERGRERCRDw6PCwqLExOTFRWVHRydGxqbGRiZCQiJISChIyKjHx6fDQyNBwaHJSWlKSipBQWFJyanPz+/JSSlCQmJAwKDCwuLBweHBQSFGxubExKTISGhDQ2NFxeXFRSVDw+PAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbZQIBwSCwaj8jkMSAYDAgEJbFgOBwQCUOAoJAaFgvGonHIBhyP5BcSgUAYDWxggD4WFmx3e3HQngkSRgYMEBMUFG4MCId0BGlEAQeEhocVDYcUdBYKF0QCB3gRlJgUAQEYBBkaRAMbDZMMpAYcT46rQwMJrgsdC6QcfwoPnUMOBgkIV6SHHg6bw0QEAQYfBpggBZjPGsRD0gEchxwCIR6HChnQRQ8DIU4DTR4Em+ncRw8O+fmoXPXdRg+gQLFgIYM/KRIkoDP4QMKFf0o0aBAh4qGUixgzCrETBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -filefind22:file file22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQSFJyanLS6vLzCxISChNTe3OTu9Oz6/Nzy9Nzy/NTy/OT2/Nzi5Mzu9Lzq9KTe7LTq9PT+/Pz+/Nz2/Mzu/Kzm9Jza5HzK1LTi9PTu9IzW5ITO3FxaXNT2/KTi7Iza7GzC1LzW3FRSVMzO1MTq7HTS3Fy6zFS2vKzm7Lze5MTGzHzS5FTG1Ey2xEyyvJze7JzW3ITa5FTK3EymrGS+zFxWXKymrMzi7ESirEyqvLSyrKze7MzOzMTCxKSepAz+/NzW3MzKzBwWHLzS3ERCRAzi3KyurNze3MzGzLy2vLSutCQiJAyytHRydOTe5MTGxLy6tLyqpKyelJSCdOze3NS+tLyupLSmnKSOhCwuLPzy9Pzu7Oze1OzazOTOvMyihOTi5PTm3Pzi1PTazPTWxOzOtNSunDQyNPzy7Pzu5OzKrNzSzNzGvNS6rMyynMymjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCgwGFhYOIiYQBAgMEAwKHiokBBQYHCAkKCwwFAZOEBQ0IDAsODxARCZ6gAAEGEhMSFBUWFxgZCJ+TjBoMEpkRERscGBGRih0BBAgeFBQOER8gISEfIruIIwEkCCUVwhcgJicoKSrZg9srCRkRGdMsLS4vMNiK2wIKMRsbMiwzXtCocSydIBs3AuCIwIFDiBMucugAoWvSiB2VNPDg0ELHwA0MkCXr4aNSggg8NoDIQOFHgBtAkgURMiDAEAFEVBCJFKCIkSMGOyDRkETJEkOFmABoUsRJQkQdnkzQACWKlBtTplBR6qopxkFRJ0ytYuWKFCxZtBBq+hRA2AlbRrh08fLlCxi1a51g+dQhDFwuYsaQKWPmDBpKXgNETaNGjJgyhNfcVdTTiWI2XpK0cePmzRk4YA5T5otGixY0qFOXbgXAQCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -filenew22:file file22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBExOTERCRDw6PCwuLBwaHAwODAQCBOze1NTW1OTi5Nze3MTGxLS2tJyanPz+/Ozu7OTi3BQSFCwqLDw+PDQyNFRSVPTu7MzKxLyyrIR+fCQmJPz6/NTOxPz69Pzy7PTu5Pz29Pzu5PTq5PTm1My6pBQWFPTq3PTm3NS+rAwKDPTi1PTezOzWxMy2pPz27PTazOzSvMyynOzaxOzOtPTaxOzKrMyqjOzGpMymhPTizOTCpNzSzNTGvMymjMSihCH5BAEAAAAALAAAAAAWABYAAAboQIBwSCwaiYGAYEAgFAqGg/Q4DCASCsTiymgcHAcqQLB4mM+QiIQBppLPcMjkwQ4bB2X4maKgt4sVCHpnFhQTElNFE3mDDxcYGRp2RBuMgxwIHX9EBZZwHh8gCBmTQ52NISEiIyQlpUImng8hHyInKAgprwAqgnC0IKwrLLpGB4wctLYkwy0uuwd9Z8AnJywsLcVFx2YcL7UnJCwwLTEy0GXJoSgrCCwzNDTnxgjeH9UrKzXwNDY36LRGhEOwLx4NHDmgJbh3QoeOgv127EhojEeHDj16pEhRQoZHHzl+QJNCsqTJSXaCAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -fileopen22:file file22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAQCBCQWDCwaDDwmFPSubPzGhPzCfPy2dOSmZPzKlPzSnPzOlPzKjBQODPzChPzWnPy2bPSmXPyuZOyeXIRSLEQuFEwyHEQqFDQiFCweDKRuPFRSTPT29PTy9Ozq7OTi3Nze3NTW1MzOzMTGxMTCxLy6tLSytKyurDQyNMzKxOTm5OTi5Nza1NTS1MTCvLS2tLSyrKSmpJyenJSWlIyKjHx+fFxeXBwaHKxuPMzKzLy6vIyOjHx6fDw6NPy6dGxubLy+vISChCQmJNza3KyqrBQSFLR2RKSinJyanGxqZAwGBJSSlCwqLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeDAYqKiIeLj4wBjQCMhY+NkoiLk5qbhQIDoJyGBAUGBwgEo4MECQoLDA2pDrS1tKQPEAwHERITE77AvxKqhAQNDA8UFRYXFs8YBAQZGqGPxw0RGxwdHR4eHyAhIiMkJSYnKCgpBAYPEhcqHyssLS4kLzAxMjM0NTY3cBA4UCAHBw8gVnhgEcKFjhc7UPDj0cMHAAI/KFgY4YLFio/jRpTYsW8GDyCSCEQw2DChOHIqgsCQSEPIEEEEJFhAoUNECCJEyOk4d6KIyRtGcB7hIJKjixEjHu4oimSGEIs4d8IIUoKECnNB0ElMwkNJJgBLlJBAcQKGiR07KGAURVGViY0mhIwwSTKjr99+THjUoIg0r48hTRIrRtxkiOMhDgrZCQQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -fileprint22:file file22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBFxaXDQyNFxSTPTizOzi1FxORDw2NExKLPTi1Pzy9Pz6/FRWVPz29Pz2/PTy7PTu9OzezPzu5OzavAQCBPzy7PTm3OzazOzKrPTu5FxSRERCRGReXPTq5Pzu7ExGTMS+xKSmpOTKpPTq3JSCDNzSfHRydLyadOzCjOzOtOzSvLyyTMTCxKSipGRiZFROLPz+/KyurJyenJyWnGxmbLSabOzClOzm7LSutJSWlJSSlJyanGxqbNze3OTm5IyGjNTO1Nza3NzW3OTe5IyKjHx6fMzGzMTGxMzOzNTW1IR+hISGhKymrLy6vLSytERGRGxubKyqrLy2vLS2tDQ2NEQ+RASKBAT+BFxeXHRudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAgOEiYqEAgQFBgcGi5MICQoLmAQDh5OEDA2YCw4ODxARApKUCaGYEAsSCRMUnQysCwoVEhYXGLOLCBCgDqK5GQUXGooCAhscBB0euBUZEAUJvQgIgx8gIR8iCSPiHuIFEREDJCXaANwhJhsnKCnWERcRKiopFCvsBywhQrRwQWGAPAz5EhpQ9wIABRgKYsiYMTEEDQocatiwkUIEP18fbkCAAcMBjhwzdOyQwYNCgBMfKJSgMItBjxs+btwgCSGGjhw/ZoRgQKGZCRMUPgABEgSIkCE3SZok8qNqkR85NtDUEcPIkaVAkCR5SrJBDCVKlmzQ6pCCiRlMTJo4YUH3K5AeMBYYWctW0BOaUH60cBJFypQmII6wyEpFQBVFMSm4UAI3hJUrOGh8oOJrklYKWIromJGDR99Ogz5j4ZGlM+pEnwmBCwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -filesave22:file file22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBGxqbAQCBLy+vERCRExKTHRydIyKjMTCxFxaXGRiZFRSVFRWVPz6/Nze3Nzm5Pz+/JyanDw+PExOTHR2dMTGxBQWFLSytHx+fISChOzy9Ly6vAQGBJSWlMzKzAwODJSSlHx6fIyOjOTi5DQ2NISGhGxubCwuLOzq7ERGRFxeXNTW1CwqLPT29Dw6PGRmZKSmpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb/QIBQGBAMj8ikUDAgFAzKKCBwQCQUCcICKh0SEAhGw5EIZAmBrgCxeDQgcDJWyz0GIggJfL+XGwQJRxNgC3yGDwwUFUZDFhdthnwMGAZNQwEZFwQakXANBBQbHIIdERIBnRAOiR4ERx8gsSEMBBmGCyEGG3YGBwcgIr8UCwQHECOgG4xCtRkEJAvBJRklJgkSFBQeJ68hJiEoESkFKiEZIbkGARsLlwEGExENGhorGSkpFAYm66NDLAECpGiBYsUIFA8wLHBBQMWLVkdUCFCwaYVFBOymkVCgYEMgOykEpICBccMBAhhELFigTEqAAgIIwCiQ4eRKDyS6EAlJIAI0EpaudF4iIKDAAn9CkRT5eMROEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -foldernew22:folder folder22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBNzaTPT2FISCBCQaDPz+BExKBDwmFPSubPzChPzCfPy2dPz6BMzOTAQCBOSmZPzKlPzSnPzOlPzKjBQODPz+rPz+3PzWnPyuZPSmXNyaXPTyhISCLIRSLEQuFEwyHPy2bKRuPFRSTPT29PTy9Ozq7Pz+xJyanDQyNPzGhMzKzOTi3Nza3OTiVBQWFDwqFKxuPOTi5JSSjISChHR2dGRmZFxeXPS2dNTSzNTS1OTm5KSipLS2tLSytKyqpIyKhGRiZNze3NTW1MTGxMTCvLy6tIyKjCQmJMTCxMzOzMzKxJyenHx6fLR2RLy6vJSSlHx+fDw6NLy+vIyOjAwGBGxqZKyurCwuLBQSFJSWlCwqLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeIiYqLjI2MAY6HAgOHBJYEhJCDBQaDmgcICQoLB4MGDA0OAQUBDg2cAAcPEBESE6QUuQasFRYVq5SxCRcSCggYGRjIGgYbFs8bHIMHExIJGR0eHx7cB83PFhsDDuTUEyAhIiMjJCQluwEmvsAnKAcp1x4qKyUrLLupWrByxcnFiwQIYIggEaNEiRgBZMyYQaNADRs2REA6cCODBxw5+OnQgWMHjx4+BND4MQOIg1gI0gUREkTHiplDhhApEoCGkRlHBL3I8MEHEhz+WAhJogTJySVMfthwIehAExE5jubAkYQpESc8fOx4AiXKNA8+ekhBgqSpzh5hPHcsmVLjpSAqVZBY6VGkiJMiPQKLnTvjCiEsWU4o3nGC8YksMmT8YCmC6iAXKLRc2cz5yGYtR0JjKWQgEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -mailforward22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBJR2dLyijPTixPz69Pzq3Pzy3Pzu5PTu7Ozi1LyelOzavPz+/DwqLLyafPTmvPz67Pz29Pzy7LSWlPzmzPz6/LyajPTitOTSzMyurPz25PTatPTi3KyOjPzuxAwqVDQiJHxiZPTetKySlPzqvPz27BQ6bAwmTPTexLyinNzGxDRunPzy5KySjCQ+ZNzq9KTO7JzC3Nzq/Ozu/LzW7FSm1BR6vGSWvFyq1AyGxAxytAx6vBSKxAxSjMyujLSunES+5BSi1ByGvAQCBNzCrOTaxNTOvMS6rKyelCx6rBx6tBQKDOTWvPzu1PTq1OzezAQOHAxGdBROhAQGFPzy1NzOvIRqXLyynOzarPz21Jx2XPTWrLSShAw2XKSCbPzuzAwePAQCDPzyzPzqzPTmxOzWtAwGBKyObOTSrNzGrKyGbOzatEQyNKyCZOzWrOTGpNS2lCweHCQaHCQWFBwSFBQODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBhBwgQKFSpY0HgBQwYNGzh0mDhRAAUPHziACEGBpYgRJDiUGEkSwoCQJk6opNASRQoOFETQJDkggwoOJlYApcCihQuVL2DUhBDjhIqjJmRwwDCDhswaNm5MjYHjKggOOU7o0CGTA9gdYknG2KCCBw8VJVL0uBgihAUfP+CSNGCjsI/DiBPbAMJBsEQbQYQM+UG5smUiRYw0jlvYxhEkSYyIHm1EyRLTTH40EZvAyZPOR4pAmU07ipIkUKQ0mQIhAZUqVq5gKXzkSBYtyLVEyd1ki8QFXLp4+WJFQowbYLJnD5NbzJiJCjaQnhnvpYwZM0/OPFlvQ/f3iQvQpBlvQc0aCWy4VKnCpY0Y5yQxgEYXZFjghgwZUOHGCW90YQEccUwloBwGyjAHHXUoSAMZb0xhx1QOoMHDHSfIwSEOdTjhAQ1d4MFbTQ6Q4MYacrzxhhx04JCHHhvQsMeLJPHRBxpr+LHCGnusgccfgKixQR1ATtTBlDDAEIggggxCCCGFbLGFHVFKZEdAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mailget22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQ6bCQ+ZAwePKTC5Ozu/NTi9GSWvAwSJGSu3JS+5CR+rAQOHPTy/AyKzES23AwOHCw+bOTq/BR6xES+5AwmTBw6ZMTW9Ax6tByi1BRGdAw2XAQCBDQuNDRupKzS9FSm1BR2vBym3EzC7CSGxBROhNTW1Pz+/OTm5NTO1AQGFNzW3Ozq7Ozm7IyKjJyWnMzOzNzq9Nze3OTa5Ly6vCQiJGReZISChKyqrAwqVBRWlOTi5MS6xJSWlNza3OTe5Ly2vGxmbKymrIyGjMzGzISGhKSepCQmJDw6PHR2dJSOlPTy9MTGxLy+vLS2tMzKzLSutMTCxLSytKSipJyenKyurJyanCwqLCwmLCwuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBhgIBA4SLjAABBAUGBwiNlY4FCQoLDJaNAQ0ODwsQnYwREhMUE5ylFYYRFhcYGRgaGxsDHJUdFR4SHyAhEyIjJCUcuo0cJr0nExihxgwoyYscKSnMHicOIw4lKissLdWDHC4vMCu9McYqMjMyNOUANTY3OPEoOTolDCszdrSgwaMcBxs9TMxYOCMHBx8zfPj48QNINQ5BbMBIIUShDIUoTAhR94PHPEEHbQwZckOGjBQviMxYUWQIDCMmdXE4gqRnkiFETAxR8iKFjJU2evZEdmLJkgJIbqS4wXJIUapImj5FtuSEVyRVV1IVi4RIChhEkLVAgcJHEqVwVJUmYdKkiRNkALMRecKECRG/ff8CEQJFCA5kMKJEoUHDCQ/HkB9LmWKECpUeyKoIMSLEyosen0OD7iH2xg1dV7BkqXGlBpbWNTq4Zn2khu0aAAwEAgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -mail22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBDQyNCwqLCQiJBwaHBQSFAwKDAQCBDw6PPz+/Pz69Pz27PTy7PTy5PTu5PTu3PTu1PTq1PTqzOzmzPzuvOzitPTmvOzivAQGBDw+POzevPz67Pz25Pz23Pzy1PzyzPzqvOTavERCRKSilPz21OTevIR+ZExKTOTi3JyanLS2tPz6/Pz65KyihJSKbMS6lExOTNTW1JSWlJSKZMSylNTOrNTKpFRSVPz29MTCxPTmzKymjIyCdOTWxOzexOTWrBQWFFRWVOzu7MzKxJyalOzatLSulMzKtOzmxOTarFxaXKyqnPTmtIyGdIR+bOzetOzixBweHGRiZOzm3NzWzNzSrOTetGRmZOzizOTexOzm1JSKdGxqbHRydJySdHR2dOzapHx6fKyijOTixCwuLHx+fFxeXERGRDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeIiYqLAQECjwORAwSUBZYFBpkHmwgJCgsMDA0OD6UQERITFBMVFhcVGBkangq1ChsLGxwcHQ0dHR4fICEGIiMSCbS3uLq8wCQUJSYGJygpKhQJKyvLLM4Nwi0uLwUwDQsxMtmeuQveHR8UMzQ1NgU3Dgo41jk6ns0cKOzgYaOHjx9AgjTAUUvIECLZNmxoUISHkSM9KiBJQkCJA4kKEoBQoWJJAiYtmjh5AmVCsCJRpHzckKCCySlUUvBYUqUHDysSPnxIEuXKA5pPRiRwxwFLFhRaIEDYUoEChCcDuECoOWKFuwW7nHkg4WELkw8/BHRRwESpt10dU8SSHevlRxIBX6C0WBE27q8GZMkKbTADjIAwYlb4GLMYShYoPTRo6FGiSJEKPyzMIFMmzJcvXbhwkSLFjJkbQW6cOHNGhAgEAdAsmk27tm0ABgIBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mailreplyall22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBLyejPTixPz29PTu3Pzu5Pzy7Ozi1LyelPTavPz+/DwqLPz67PTetPz69ERCRLSWlPTmzPz6/OzexLyajPzqvDw+PDQ2NMyurDQiJPz23PTatJyenAQCBPTevPz25LSajOzq7HxiZPTexPz65JyanBQ6bKSmpBwuTOTi5OzaxBRCdHySvGRiZHx6fBQSFERGRNzq9IyOjHx+fGxqbPzu3BwaHFSq3Aw6XAxKfPzy3Gy63ByWzJzO7Mzi9OzavBRytAx6vCSazGRKTPzy1AQKHBRGdBRyrDy63ES+3Cym1CR6rBwWVAQSLAx+xCyCtBRmnPzuzAQWLAwePPzyzKSCbAQOJByGvOTWvPTmxBQODFQ6PPTWrPzqzOzatAwGBKyObLSWfPTivKyCZEQyNKyGZOzWrOzWtOTSrOTGpNS2lJx2XDQmJCweHCQaHCQWFBwSFBQKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpkzGjhAoYMGjZMpMghQgcNFjh4mODhA4gQGkSIHAmBwAgNJEpo8KDSxAkUGjhMSEGz5gUVIiKs2PmBRQudHiwQpUnAxYsXImB0aBqjBcuoU0fKmPGChgUNH2qIqGHjg9u3bicWIFs2rYgbNnDkyGFhb8cccQ3ouJqWQo0dPFr0WMy4h48LFj4gsKriB5AeNngEaSGks+chPnwQOXFAh4oXRYxk9nAEyY7XO2wksWHDx5ATCDIoUXEBsYclTJo4cWJhuIjhSXacSPBEiZLMQY4wgRKluvXqUpyIsDElAxUqVaxcwcGCPQuWLOixaNHCZAsXBU+oqKDSxQqULF6ifNmyn/8VMOtxwcAK36kQRhdJQIFFEmKM4eCDYGyhhYAEkqFEGSuYYcUZLaDxXRpqSNRCEu6twYaFZXTQhgRd2NCCG9918AYELTjoXgNuKAFHB2RQEUYHVbQQRwlUpPHGGFwkyQUEDsgxx4lh9BhCBy2U8UQJcrSg5JIQ0FEHG3bc0QGYK+CRhx57PEGlkhM9sAEffKTQhx9+/AEIIIGoEUgLLRRFR0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mailreply22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBMSihPTixPz69PTq5Pzy1Pzu5PTq1Pzy7Pzu7Ozi1LyelPTavPz+/DwqLLSajPTetPz27LSWlPzmzPz6/PTexPz67Pz29OTSzMyurPz25LyajBRCdPzuvDQmJOzexPTevOzq5BQ6bBwuTDQiJHxiZPz23Pz65LyinPzmvBxCbHySvAQCBOTi3OTq9CweHOzaxFSq3Aw6XGy63ByWzJzO7Mzi9OzavNzq9BRytAx6vBR6tPzy3AwOHDy63Ax+xCSazCym1CR6rBwWVOzizAQSLES+3CyCtBRyrBRmnGRKTPzu1MzGtAxKfAQWLAwePPTizMy6nByGvNzWxOzWrNzOtBQKDJR2ZNS2lPTmvBQODPTatKSCbOTaxLyqlAQKHFQ6PPzyzPzqzPTu1PTivOzWtKyObPzuzOTOtLSWfPzqvAwGBKyCZPTWrPTmxNzKrEQyNOzatOTGpJx2XCQaHCQWFBwSFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpYuIDBQgYNGzh08DCR4oQPIDqEmDBhJQYRIzqQIFkSAoESJCKkDGFiwgkUKTpMwECz5IASKjqsSMlSA4sWQjG4qGnzhYoQSmF0iCFjBgmWGWhQrVHCxg2sOHLo2MGjB0sLYmsWQHq1p4wdPtqemGDhB1UDQFSouKHi7oQgQmSwUMyYxcQDZQWz2EFiCJEiRoyQyLzZyGIIB47YKLwDSRAiSZSoXq1kCRHNLBK8YGKjCYskTp4ogeKkt+8oUaBImZKAAxMmVKrctqL7ihTnz7FkAT5FC4cKFbZwadIFdxcvX8KLss8iJcoUBUcq2KgAJoxyMTy4jCFTxoxEHl2GLyCDncmWM2hUIQMPY2CXhhoTfTEcA2tgVwEba7Thxhs88FdBD/ZB8MUUHMJBRhw2sAGCHBKU4UaFc1RAhxnhcdhhHUzYAUIcFdxRAh4R5KGHinu4OIVEDqTBRx81xhGHHzD8wQYQetDRI4cTAcIHGWT0EQgZa1ApCBqDcBAID1Q94IEHLtBAAyGEFGKIIWqYYQYPYNZkQEAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mailsend22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAIR6fIRydHxubHRqbHRmZGxeXGxaXGRWVFxSVFxOTFRGRExCREw+PEQ6PDw2NDwuLPwCBLSijOzixPz69PTq3PTu5PTu3PTu7OTi1KyelOzavPz+/DQqLPz67LSafOzetPz27Pz29KyajPTmzPz6/NzSzLyurCwiJPz25Ozi3JyOjPzuxBRGbAwSHOzexPz23KSSlPzqvBROdISavBxSdAwaLHRiZLSinNTGxMy+vBxGZNzu9BSGrAwWJMSyrKSSjFy61ETO3BRWfPz65PTqzHTK3ByqzBSWxEzW5AQWJOTWxBRCXOTu9BSOvDzO3ByavBRKbOzaxOzizKSWlCQ2TAQCBJza7BRWdNzSxJSCbMzq9BSOtCSKrAwiPOTavPzy3LymlCySrAwmPFRKTPzy1NTGrPzu1JR+bOzatPzyzCy61ByGpOzWtJyCbPTmvPzuzIS+3FymxCSuzBR6nJyCZOTWvKSObMSujOzivAwKDOTSrNzKrJyGbDwyNOzWrMy2lIx2XBwWFBQSFBQODAwGBAQGBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpYqMDxAoYMGjZwmEixg4cPGzqA6BBiAggRIzaQGEkSwgAMJCKgnNBhQogSJlKGOFHTpgYUG0TsnJBCxQoSE1i0KErAxYsOJJRuuAAjhkwZM2jUqGnDBQoUHTbciIEjx4YNOmbs4CGjB8kCZlGAALHBx4+YcTcACcJDyFSJBo6iGNIhhQkiG8BOKGLkCBK6SSQisHoWhZIbG5bMYALECI8mTZw8gTL1QJQXZ6VMiUylSpUlVpoYaXLFtm0EGmCjwJLlA2O9MrRsccKlC8kEXr7AdgEmwtkhX2SQ2BIkjBiSYzSQr/nyhUKZLIrJJOcexvlEBV7IvCBjRkmAMzHOaufhxDvJBWiQISAFxUUQQRovJNeEGmu4JxEDbKQhXxsfuFDGGW68IQMcccgxRxUkNRDhC3R8QMQIdZwXQ11JJGFbiB+QYccHaaTxhgt13OFBDGTgkUdRDrhAhx5k2JjGCB/swYcXMXwAYk190OGHHx/4wUaVepTxByAaoPEkSQ5wwMEJZAZipiCDDJIHIYV8OZEdAQEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nav1downarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBBQSFAQGBDQyNExKTHx6fGxqbFxeXGRiZFRWVDw+PAwKDJSWlOzu7LSytJyenJSSlISGhISChIyOjFxaXDw6PPz+/MTCxLS2tIyKjKSmpKSipJyanAwODDQ2NHRydERCRFRSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZzQIBwSCwaj8ikcslsOp/OgHRKlQoCgymRUDAcEIkwYgxWFBYERpHQcDwgEclEQmk8DhWL2kiIXDBwExMNGRoJaUkEEH8bEQ0cGgcWAksEHX8QHBKSHk1sfxMHH5ROBBsOICGkT2wiq1CIULKztLW2t0h2QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav1leftarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExKTJSSlHx6fAQGBOzu7GxqbJyenPz+/LSytFxaXMTCxGRiZKSmpISGhFxeXISChAwKDFRWVHRydJSWlBQSFERCRIyKjDQ2NIyOjLS2tDw6PBwaHFRSVDw+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZ5QIBwSCwaj8ikchgQLJGBgfNZDBAKBirRekBMtYGEYsHIgsWNhOO7tCrShDU18Hg/CJAIG0o4wCUQcksTFBUSCRYSEnpUFxgIGQkJGYyNGggbHBaVjR2QCxEeWkITHQ4IH3tPFwEMA2ajAKUgqlQTTbFEE7W5vUgGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav1rightarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNGReZAQCBMTCxGRiZMzGzOTm5LSytPTy9Pz+/CwqLOTi5Ly6vCwmLMzKzJyanJSSlBQWFKymrIyGjCQeJJyWnISChISGhHx2fKyurDw6PAwODHx6fHRydDw2PERCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZ2QIBwSCwaj8hkMRBQKgOCgRMZIBSk06XhEM0SA4iE4uoVLhCMhqLrdSAekMgYO5VM4BQ521mxIC4UFxBWdEkSERYYFxETGQGFSBKCGBEaGRuQSBwdeZaPXpsQCB6YZQMdEI6ZSgMepKusHh+wrCC0rLdlursGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav1uparrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBFxeXDw+PMTGxHRudPz+/JSSlLSytIyKjHR2dISChIyGjIyOjLSutLy6vKSepJyanISGhJSOlOzm7Ozu7MzGzKyurJyenDQyNGReZKSmpIR+hCwuLCQiJBwaHBQSFAwKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZtQIBwSCwaj8ikcslsOp9QYyAQFQYEAyr0Sihkn1fDAeHVLsOJNELxVaITC0bDUU6GH5AIQ8KYrNtFVxQVFBYWFxgRCREYdUQZGhYEDwgIGxAHCQocCgWOQhmhGR0epR8gqCFTq1Wtrq+wsUt0QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav2downarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAQGBBwaHDQyNExKTHx6fGxqbFxeXGRiZFRSVDw+PAwKDJSWlOzu7LSytJyenJSSlISGhISChIyOjFRWVDw6PPz+/MTCxLS2tGRmZDQ2NAwODJyanKSmpKSipIyKjHRydBQSFERCRExOTFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAasQIBwSCwah4FkQKBsDpoBIqFgOCASCYRWm1AUFgRGkdBwPCARiWRCaTwOFYvYSIhcMOiJpJGZaDYcR0IEHXceEQ0fICEWIoJDhHcQHxIHgI9SEHeVG46YUh8OISOen1INCqWmUnOYTUxQAU9NUlRWWFtbCiRgrYNlZ2lriG8lYUd1khETE24gCZeCkRgeFBAQIAeNn9OTlXKrBJoYnKrcoaPmpmSpq3S+7u50QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav2leftarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExKTJSSlHx6fAQGBOzu7GxqbJyenPz+/LSytFxaXMTCxGRiZKSmpISGhFxeXISChAwKDFRWVHRydJSWlBQSFERCRIyKjDQ2NIyOjLS2tDw6PBwaHFRSVDw+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAavQIBwSCwaj8gkMiBYNpeDZzEQXRIKBmPgmtUSDgipcAsWjxOKBaN7Tq+n6EbCIQ3E5+KtQk6gjwl7CX11D3sPBBARTQGFDYeJT2R8EhB0koKUfgATFBUSCRYSEoqcnqCiikMXGAgZCQkZqautr7FiFxoIGxwWqQC4ury+qh2tCxEexMbIRhMdDggfYs7Q0kcXAQwDbELY2txEziBmmx3jSRNMR+nk4e2b70ry80QGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav2rightarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNFxeXAQCBMTGxOzm7CwqLLy2vPTy9Pz+/Ly6vCQiJLSytLS2tLSutOTi5MzGzKSepIyKjJSOlKSmpMzKzJyanIyOjBwaHIyGjISGhJSSlISChBQSFJyenIR+hGxubDw+PHRydHR2dEQ+RHx6fERCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa6QIBwSCwaj8hkIIBcJgEBweAYnTYJUmMAa9USClniFtwlGg6IRFhoUKTXwwWj0FB3F46Hwl6UQyISfAB+EROCQgsUFRYSF3yJEIyBaxgWDBkaGRtclQwSHBIbEGEdGx4fGhcOICEDGBsWHBmqIq1CHRIWGRMMIyRTHRy6Er22tyONq8YdJRe0xkIDwr2/QwMfliMmZQADIxasZd4e4UYDIr7c59rc0eVFA+/m0EQD9PDt0flP/P3+BkEAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -nav2uparrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBGReZDQyNMTCxHx6fPz+/JyWnKyurHx2fDw6PJSSlISGhIyKjIyGjISChLy6vJyanOTm5PTy9OTi5MzKzLSytKSepMTGxMzGzLS2tLSutKymrHRydCQiJCwmLBwWHAwODLy2vHx+fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAajQIBwSCwaj8RAAMkUBgSDZdP4JBSi06TAcEAkFNLp07BgLLzY5njRcDzO3zB1C4lEGI83Wj58SiYUFRUWdg0XEXFFAwIYGRoWGxwRZQUFHZdgRAObmx4fHiChISFKpVlKWUdPaalOAlasp1sHG4myZGZ7Yltsbgu1mUhjdRF5egmxfQJ/gYOFdrZDi40iFgiSCw8jBQmYcpydn6Ego6WorUwGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -navback22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRGZAxCZGyavExmjHyatOTy9CxihISevPz+/KzO3BRylAw+XAQCBDRWbPz6/FzC3CSuzDyexJzO5Mzq9CxSdAQOFISmxNzu9HTS5BSmxAyexDSuzJTa7Mzu9Kzi7GS21CRmjAQOHHSWtLze7AyWvHzG3BRihAQKFCTO3BS+1AyixBSWvBSOtBSStAQWJBSixDzW5BTC3BSqzBS21CTC1ETW3AQSHEze7BRqlBRmjAQCDBR+pBRefBRSdCH5BAEAAAAALAAAAAAWABYAAAalQIBwSCwaj8ikMqBcMpvHgGAANQYIhWdVGDAcENQtIJBQLBgNx0MQaDuQXcghIplQDhBIxXKJYiAZGhscHR4VHyAhIiNWJBklGhIbJoQnFCcTKIxFKSgbKissJi0mJi4vLiYoMEcXKDEyMzQ1Nje2NisoOEg4KDU5K6g6OwwoKAN9SCOeMmgwz884PEq9PT4NYkPLP9jZQikN3d4AKVrjKePp3gZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -navdown22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRKZDRSbBxCXJTC1Mzi7Nzq9NTm9Bx2nAQCBNzu9JzG3Hy+1HzG3IzO5BRmjPz6/LTe7Dy61AyStCTC1FzC1AyGrETS3ETC1ETa5BRulAyuzBRylAw+XMTe7Gy+3CSqzAyexBTC3DR+nIS21KTW5Nzu/KzO3FzC3Pz+/ByixEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaRQIBwSCwaj8ikcnkMBAQDgjPAFAYKhsMBkVBUAYEFo+F4QLzVQEQyoVTOX/XBcsHA0+vMRbNBMwkRDhxuHX5GTlIeHh8gISIjFAEeiVRECiQlDAUmgxQjIhwiJHdFlycoKSIUFCEjGiGkRpcqCxYijxorsUezcxYsuoZJsxLAu0qXB7DCTJfHVQrMX9PU1Uh0QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -navforward22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBBxCXDR+nIS21Aw+XJTC1Nzu/KzO3Pz+/Nzq9Pz6/MTe7KTW5FzC1Nzu9CRKZMzi7IzK3Lzi7LTe7HzG3Gy+3AyuzAyexFzC3DRSbHy+1Dy61CSqzAySvAyStLze7IzO5AyGrETa5ByixBRmjCTC1ETS3BTC3Bx2nAyWvEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaYQIBwSCwaj8hkMqBsBgTN5IAAjRoDBaq1aDggtMuAWDzoJhTgY+CwYLgZDccDwkgXI5IJZVGxXDAZGnR2QxsLHB0PHRgeHyAZDyFfVUQDCyIgIyCPIB+QJCUmlEMBEiInKCQnKSkeKSQeomoqJrUmKiArKSwZsmoCwMEBGCyxo1EGHr3HUQEEvltCBtDRAAbMW0zV29xDBkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -navhome22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAQCBCQiJNze3ERCROTi5MzGzLy6vDw6PKyqrKyurBQSFGRiZGxqbGRmZISChEQ+RExKTExOTHRydDQyNOTe5FROVLSurCwqLMTCxPT29Pz6/LSutFxeXLyytLSytPz+/JSWlKympPTq7KSipNzW3BwaHHx6fKx2VJRWNHQmBFweDOzq7Ly+vNTW1JxWNLSajPTe1Ny6pKxWJNTS1IyOjJRmbPTi3OzKrNSSXMSGVHQiBHx+fJSSlPzy9IxOVOzWxOSyjNSCPLxeDJyWnIRGTOTGtMxmDLRWBHwqBIxGTLRSDDQuNNSunKxKBGwyNMSafMxqHMReDKRGDPTu9LxuPLxaDJQ+DIR+hGQqNIQyBGQiBNTO1EQKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAYSIiYQCAwQCiokEhwACBQYHBAiQhAiHlQYJCgkEC5uCkp8MDQ4NDwylmwgQlgQRERIEBBOkmxQVBgQWFwUFFxEEDLyJGAUZtQoFGhsFHLYdyoOVHsEf0SAbIAUex8mwlAUhtSIFG+3uIyTWvAIGJMEkJe76GyXbEeWUBJg4USKaBhQpVKzYoIFFiwYUBBJa8MAFCw0vYMSQMWOhBhoTKCQSUKMEiw02buDIoWOHBg0GeIhEFKAHDR8afgAJImSIioYliMws1MPkhiJGchxBkmTDCBo1hg4KQMTiBiUyhBxZ8pNFiR5MEtU0WqSJVidJNDyNKraHC5xPNKBEkTLlJ5WvUgWNvfikyhArV34+7ZEXQAAsB2iUyHLlihYtW0pwOYAFgyJDmDNr7jIIWiAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -navup22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBHSWtBRmjAQOHISmxNzu9BSmxBRihHyatPz6/Lze7CTO3BSixHTS5BTC3DzW5ByyzPz+/OTy9AyexEze7ByixGyavKzO3FzC3AyWvBS+1BR+pAQKFCRGZExmjCxihBRylCSuzBSWvBS21BSOtBRSdAw+XAxCZDyexDSyzCTC1JzO5JTa7DSuzETW3BRqlAQWJDRWbOT2/Mzq9HzG3JzS5Kzi7BSStGS21CxSdCRmjAQOFAQSHAAAACH5BAEAAAAALAAAAAAWABYAAAaeQIBwSCwaj8ikcqkMCJjHwIBQgBIDhgMiUbUGFAtGw0GFfheHByQi4S6/E8pDUoFYLm5kAEPJaBAVGxIcER0JHlEfICEiIxUkGyUmIgknKIhXASkonCorgSwmKQGcKE9IAi0uLxUwMTJWMzQ1NiYwBLBQHws1N7avXgs4NjkcCblMATU6KhvGyG87PAnUKV1MAj0+2zIFp1bg4eJJdkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -playeject22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAwKDJSWlFRSVBQSFKymrOzq7HRydERCRPz+/MzGzISGhJyenKSmpGxqbJyWnJSOlKSepLy2vIyOjGRiZPTu9IyGjLSutFxaXExOTHx2fGReZAQCBAQGBBwaHCQiJLSytKyurJSSlFxeXNze3LS2tIyKjFxWXHRudAwGDBQOFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa1QIBwSCwaj8ikcqkMCJjHwIBQgBIDhgMiUbVKFQsGItBdBhpgh4PxIJvRC8cA4oiMy8bvQhJhMAYTFBVOURAWEw0QFxcMERAYCBluVxobDxkVHJocmBwEGgmEQx0dHh0CpKmkH6odVlanBR8FtAIFtiCkSB0LISEiGCIGIxAPDySuRwIOBwrOzwoHJRHJRh0jJgMj2gMnERQUCNVFHQQoCBvo6CkICATjRB0qp7b1K6qv+foyQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -playend22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNFxeXAQCBMTCxGReZBQSFOzm7AwKDKymrJSSlFRSVCwqLLy6vPTy9OTe5Ozq7CQiJLSytOTi5BwaHPz+/HRydMzKzKSepJSOlKSipJyanIyGjIyKjKyurISGhMzGzJyWnHR2dISChIyOjLSutDw+PERCRHx6fJSWlIR+hJyenGRmZHx2fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa6QIBwSCwaj8ikMBBQKgOCgRMZIBSkxYHWoDVWD9EigpBQLLBERsPxCA8NDUhjgTBGJJNGG02RVBQWdUV3FxgZe0IGfoAGdhoXGxwdiAYef4FGFBoeHB8dGSBRihUhIo1FBhkbIyMkJRYmAwYal4JEBh2RChIWJ1IIGxUZFqdECCgkHR6wWAYpFR2YWSobvL5vFgfDaEMDIivMRBEsD9HcQgMWvecDLB0tZ0btsfJa9vLXU/X6/P3+b0EAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -playpause22:play play22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBAwODMTCxKSmpJSWlFRSVAQGBBwaHLSutOzq7Ly6vCQeJPz+/Hx2fBQWFGxubLSytJSOlBQOFAwKDJSSlJyWnIyOjHRydNze3GRiZAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWBICCOZGmeaKqubOumQSDEgRjPMSoMRGEcol3vh0IkFAtDDWBEKlGMRKPgEIii0yrqIS1ArADu9KuLNCSOSdCMVp8ohEZFC4DL6SaBpXGh6/l4JX8XZACDhXkYCn1LAoqMUBAZEhBLDJKUSyYBGmhPAJyemiU0NDaloy+qq6ytI8whACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -playstart22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExOTAwKDAQGBJSSlHx+fBQSFMTCxKymrFRSVOzu7GxqbLSytLy6vJyanPz+/GReZBwaHHRydKSepKSipGRiZJyWnAwODLSutKSmpISChPTu9ISGhFxaXJSWlIyGjJSOlERCRIyKjDw2PIyOjLy2vOzm7Dw6PLS2tCQmJOTe5GxmbDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa7QIBwSCwaj8ik0hgQLJGBgbMoqBIKU2LAcMgOEQmFYeEFbBmNMgDhYDwWBC0k4pCoJ46IgRIXBioRCRYXamwRGBQIfgaBFhiERhkaenxmCoEbBhyQRYaIGVsdghgem4UWegcEBB8UHhsgIaZGBBgRIpUIIxQhChginEQIIBEklWslFyYnBsFfFCi4WQgpFBwqFxNGKxcsxl4IAS0NZEYCF3vlwgEfUuZV8JEuI2pPAARN9kcE9fr+SwaCAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -playstop22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAwKDBQSFBwaHCQmJJSSlISChJSOlJSWlGxqbGRiZNTS1PTy9Pz+/Ozm7OTi5FRSVIyKjOTe5MTCxIR+hExOTHR2dLy6vLSytLy2vHRydFxWXIyGjIyOjPz2/FRWVHx6fExKTMzOzJyanKSmpKyqrKSipAQGBLSutHx2fDw6PAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa1QIBwSCwaj8ikcslsAgKCAWEQjQ4KgSwyYDAcugZEQqFYYJECA6PhaLcfEEUkgJZAGJB8fkKpWOhHAxcOGBQZGBoaGQgbHIBGAhUOGR0SBxISBh4Xf0iCHxQSlRIIXhsgj0UCIaCXmJgHGyKpRJ+hmB5dHQqOaCENIx0epBIkBhdzngoPGCQlJifQJBvJRygRKRcKGxcXGypys1srEREc5SLnICLiR1koLFVUWfRO9vf4+UwyQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -textblock22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUWzvNzo33GfFl5jVlonlTrr1DbvFi9vjeeNUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textbold22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIxhI+py+0Powm0VnknjVkH2AEhE45LZ55Wqn6e65TsMc5eYosbksswubJIhsSiccgvAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -textcenter22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUbz3Sh7yIWfFHKjVl4nmFrr1Lpr7LwkjeeIUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textitalic22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py+0P4wqUSlQvttrkDnyaOHIdeaGRupplAIauVM3xjeeOUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textleft22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+pyw0Bo5zB2UXz3Sp7yG2fFJajVjonmIor2TJvfL0wjecIXQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textright22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUfz3SZ7yIXdF4kWqZkbCqoMO7kXLC+wVOe6YRQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text22:text text22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBBwaHAwKDBQSFLy+vLS2tJSWlBQWFKyqrFRSVCwqLDQyNNTS1GxqbFxaXJyanIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAVcICCOZGmKQSoMaZsShBsQBdAapHvgaIDUqUPJlRjSbAoT0fRDKgODRbF0PLUYjZO2F2Bst9evNix+dsvDlGKK5jraudQb7qbX6a2HEJ+ycyF+LRE8ZTI+fX5oGCEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textunder22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIvhI+py+0PowmUnhpeVVnb1DkbCI1I2JhX+Z0sOr2cTHpwK7a4rUr+hAnufsTirwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewchoose22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBFRSVExKTDQyNPz69PTq5Pz+/OzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq70466Cl+AMxBVwnFIVRAmQHCIeBrC1L3tQgJ/SaEbeeC1PLBHE2ybFI9A1HzstHEIK6YCmhDTmBybQaHYJn7QC5zKeytIQe1+pKNE6P2yMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewdetailed22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz+/Pz69PTq5AQCBOzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAQ+EMhJq7046817+MLQUQFRGMc4lQaSAkcMx3QltMmrDrSu/sCgEPgJhIiFk89DaL1qPRnlhsgBebWhdstVESIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewicon22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz69PTq5AQCBPz+/OzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARWEMhJq7046z2DF0PlBeAVEERhiKhqHgWyUgEsX0KczFOO7JeBYciTCImc5ITIXDKHyqhU9AnRqq9UEVDTvmLbGhin2/qAliOUot5OLc81IO5+2+8WewQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewmag-22:view view22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAbKQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/47vrq9P3s/avno2BBf/MCClSob4iBIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -viewmag22:view view22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbIQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/47vrq9P3s/cunr9S8gAIRFhTCLAgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewmag+22:view view22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAbQQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/4zT766vRI+fvHD4CPgwcJ9qg0UB85JA0dDjEQBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -viewmulticolumn22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz+/Pz69PTq5AQCBOzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq7046813+MJQfUF4BURhHGO6noSBsEcNoDJtS4KcsJQe4ncZ1HYT47HDbDqfUAnJRJmKLIGCCjjJbmE5wBI3EyOFxKCPS1EiJW52dE6vZyIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewtext22:view view22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIkhI+py+0Po2ShBlOxzbP7n2yaJoLm+ZTcxqHuC6hXzML2HVEFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewtree22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBFRSVExKTDQyNPz+/Pz69Pzu5PTq5OzaxBQOFOzKpFRWVFxWXOzexPTexCH5BAEAAAAALAAAAAAWABYAAARPEMhJq704g6A779kHCORAgNskFMYhakE8FkjyBcoWv+JwJItXaELYCTFHlCSpZKKcoB5jYHpOGgUadLKbIRw3jhEzQDyCSuI4zW673yhDBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 diff --git a/ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde b/ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde deleted file mode 100644 index 51f76a0488..0000000000 --- a/ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde +++ /dev/null @@ -1,658 +0,0 @@ -1downarrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIYhI+py+0PUZi0zmTtypflV0VdRJbm6fgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -1leftarrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAP///wAAACH5BAEAAAAALAAAAAAQABAAAAIdhI+pyxqdwoNGTmgvy9px/IEWBWRkKZ2oWrKu4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -1rightarrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIdhI+pyxCtwoNHTmpvy3rxnnwQh1mUI52o6rCu6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -1uparrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIYhI+py+0PWwhxzmetzFpxnnxfRJbmufgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -2downarrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIfhI+pq+EPXYpxUckoO3AjbF3dJwahllXe6AFgC8d+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -2leftarrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pyxf5VohmSlsxmpjTzAHeN5ak6UHpqKRi2GpwvH3Q3eT64RcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -2rightarrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pq5HOAjQyVnqfhHue7oAaKH5kiW0AmnLqaHomkj02g+e6XwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -2uparrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIghI+pyxfR0HsRzNnuXVqn3mVQZWFRyIDjp65Ga5Ly4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -abs-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAQABAAAAIwhI95ocn2GlySTiME1iC+DIKdNWxANl4HaqWr055cy6Bs6dahmJsyXVFFJJ7gyF8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -airbrush-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBPzCxMQCBIQCBPz+/MTCxKSipFxaXDQyNISChAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARUEMhJZxCjanBH3hY2EFJgVt0YcEW7liLxBoVxzPHL2msqUzSeT2c5HBC5jQmROKgAhCgKEVBQo6YAqVQIHBQ93ZbmBWt+nDJRgiYMvmuoThWXT/wRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -attach-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBPz+/AQCBAAAACH5BAEAAAAALAAAAAAQABAAAAI2hAOCxg2h0nJHyEshi9HpxU1GOCLdZoKpQ15nibUoprKp9lh2oucUxsBRXsJh4Hjs/QTMpr8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -back-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRSdBRObCQ2TBxObISevAQCBNzu/BRGZPz6/FzC3Pz+/HTS5ByyzJze7Mzq9ITC3AQWLAyWvBSavFyuxAwaLAwSHBRafBSOrDzW5AyixCS61ETW3CzG1AQeLAweLAxefBSStEze7CSWtCyatBSCnBRWfAwmPBRWdByixAQSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZiQIBwSCwah4HjUTBQFgkFg3MoKBykU0QhoUAIAuAksbpgNByPxQMSGVsVDYlkIqdUiJYLJqORbDgcHRseRR8gISIaEyMkGCVYRBEmeyAnlgaQkSgpmU4RAZ1OKqFOpFNGfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -blend-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBARCRAQCBASChATCxATCBASCBAAAACH5BAEAAAAALAAAAAAQABAAAANHCLrc/izISauYI5NduvlXMIjEQBSnUYCYxnmsSJrouhqh6J4wLo0mWuqWy5heN58seBrGdEdeMgQsNW0ggXbL7Qog4HDDnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -bookmark_add-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy6vERGRFRWVDQyNKSipAQCBMTGxKyurISChJSSlJyanHR2dIyKjPz+xISGhPz+BGxubMTCBHx+fPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVfICACwWieY1CibCCsrBkMb0zchTEcNYsIiYHiwIOdEAvigdFQGE0Ix4NBbSAgsWjk+jBIAlcUYrJASChnSXZSoUDelKfoKpFALJA61ueGI2IAZmhogGFmCGGAgXsifiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -bookmark_folder-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExKTBQWFOTi5OTm5CwqLPz+/PTy9Ozu7FRSVNza3PT29KSmpAQ6XARqnNTS1JyenGRiZJTa9Mzq9JzO5MTGxIyOjKSipFxeXMzOzDw+PDy65FTC7HS2zMzm7MzKzKSenASq5Bx+rBSGrFyqzLSytDw6NAR+zBRejBxqnLSyrERCRIyqvDRujKyurMTCvOzq7AQ2VDQ2NNze3KyqrGxqbLS2tLy6vCwuLDw6PAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAawQIAQEBAMh4GjcEAoCAQGYSCpDBwQiQJBEVhQj1YGo1DoNqZTx8PhODAWZUik0ZAkHRNKZe0IWC4RGBkBGhsOHB0eFR97bBdcICEbAA4iIyQlioxrGhEmJ5QoKSoqJCOZiw4rGixEYi0uo6WYDi8wkwAsCTFksLIuMi+tADMLNAsLEBAgLSMpMjW4RCc2MCAgFjA3MA4R0kgzGS84Ny8vDqBKSDkKETUOOurqAQagfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -bookmark-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy+vERGRFRWVDQ2NKSmpAQCBKyurMTGxISChJyanHR2dIyKjGxubHRydGRmZIyOjFxeXHx6fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVbICACwWieY1CibCCsrBkMb0zchSEcNYskCtqBBzshFkOGQFk0IRqOxqPBODRHCMhCQKteRc9FI/KQWGOIyFYgkDC+gPR4snCcfRGKOIKIgSMQE31+f4OEYCZ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -bookmark_toolbar-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy6vERGRFRWVDQ2NKSipAQCBKyqrMTCxKyurISGhJSSlJyanHR2dIyKjGxubIyOjISChHx+fPz+/MTGxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVpICACwWieY1CibCCsrBkMb0zchTEcNYskCsXiwIOdEAzioeFIGE2IB6RBbT5HiAhEIpk6Y9kJBMJoHK6iLIU8kZxFlXhlIp/XJ4BKUIGoWIJ9f3x5e32FeoB5goGAfokTCJEIFJKTlX4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -bottom-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObCRKZBxCXAwyTKTK3Ozy/NTm9GSivAQWHNzu/FzC3IzO5CySrAQOHAyuzETS3CSWtAyOtETa5Aw2VLze7ByWtBy61BSavAxWdBRCXAwqPAQCBDR+nKTe7FS+1Eze7ByixBRmjPz+/AyexAyixAQKFBRqjAQGDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZhQIBwSCwaj0hAYCkYEJLKguGASEADigWj4bgaHpBINykwSCYRa5HCFFQsF0xGo9lwhpSOwfORYC4gISJ3RAQdIyQYJSAlImNrh4uNJkl5CoKUUBQnjlB4KFAcoqOknkh+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -brace-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAQABAAAAI2hI9pEXq8mnsNzggsEMJwbHGimFXS4HUfpKUIq3QJ036vuakyWvbjCJLYbL2WgyW5WIw3g78AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -brackets-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAQABAAAAIzhI8JwXocllMxTlSREGY/2W2iJ1nAEAJklpCfeXAJG8sY6JGowY7jW0sBL0NiqTGBAPwFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -charset-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAInhI+pqxH8kFsvsgtm1vvEaoBZSH6j5FSaRY4me4pyq1ochuf6fvgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -colorize-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAPz+BAQCBPz+/MTCxISC/AQChMTC/ERCBPyqXMRaBATCxASChPzerKSipMT+/MQCBATCBASCBARCRISChMT+xDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVnICAGgWieZyCQKGuqZPkGgwyv60gONRDvNlqt9Pv5BgRCYVj8IQ3L4qE4KFiZzRiP90MgEj+FYtGLIRiJQaMxUDjIxFoi8YBAIo3FQjIJ7iAUERNqDTI6PBGJfT0oFVpsMSgzkSh+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -colorpicker-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBARCBDQyNMT+xATCBASCBPz+/FxaXISChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ/EMhJZRCjahBIMdlmeV8gBl3xCabWGarBihwBz+eB2O0WHIFEp1f5BU1EilFI4wCZtGWy+JwWj00OynrNTvwRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -completion-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/Ly+vHx+fAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM/CLrcGjBKCYK4+NoMs+jWIBIdZ50QuWGgMASD+oGnO5beR+x7UE3AyGKV0wxnpeSxyDoGN74Hszl8QhxYhj8BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -configure-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBISChGRmZMTCxKSipLS2tHx6fPz+/OTm5FxaXOzu7DQyNMzOzAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMhAq7wYBDECKVSGBcbRfcEYauSZXgFCrEEXgDCSeIEyzKSXZoBYVCoJVIqBGByKu0Cy8QHxmgNngWCkGgqsGWFseu6oMApoXHAWhWnKrv0UqeYDe0YO10/6fhJ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -connect_creating-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBPz+BMTCBISCBAQCBPz+/MTCxMTGxISChFxaXMzGzKSipAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJZbihUiz60FPnfaA0iBpBVGdHEYWxToEoSHBRHHM9AgSEQRcj+AYkYAJxIPKQFUJiOdTJQFIDU6dYzKKFhTCM+E5g4mXaDAyrlogEG+DGTecA7wsP8EcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -connect_established-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/KSipDQyNMTCxMTGxISChFxaXMzGzAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJZxCjgsAtDtUlCOA1gJQ4kl/IDatAoF7xxkS6GgEBr6jAobCyBX42SQBxMOx6A8MhiGASR8YDgrYsNEeJ0zaEGZY7uoH2oB6nOUwtbdLaVOeTUwo/8UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -connect_no-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBPz+BMTCBAQCBERCBPz+/MTCxMTGxISChFxaXMzGzKSipAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARPEMhJq704axBEHoPUEdhQGMNYFuwxkKInDYjBniEnwMCQIIebSzXx/WwsFK+YMABZikWuYlrUCtZpEYv4WRPaHhb064YB41kCfJFSQBh/BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -contents2-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBDyKhDSChGSinFSWlEySjCx+fHSqrGSipESOjCR6dKTGxISytIy6vFSalBxydAQeHHyurAxubARmZCR+fBx2dDyKjPz+/MzKzLTS1IyOjAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVkICCOZGmKQXCWqTCoa0oUxnDAZIrsSaEMCxwgwGggHI3E47eA4AKRogQxcy0mFFhgEW3MCoOKBZsdUrhFxSUMyT7P3bAlhcnk4BoHvb4RBuABGHwpJn+BGX1CLAGJKzmKjpF+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -contents-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExCNGSenHRmVCwqJPTq1GxeTHRqXPz+/DwyJPTq3Ny+lOzexPzy5HRuVFSWlNzClPTexIR2ZOzevPz29AxqbPz6/IR+ZDyKjPTy5IyCZPz27ESOjJySfDSGhPTm1PTizJSKdDSChNzWxMS2nIR6ZKyijNzOrOzWtIx+bLSifNTGrMy6lIx+ZCRWRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQEAAQCwWBYJiYEAoGAFIw0E5QCScAIVikUgQqNargtFwdB9KSDhxiEjMiUlgHlB3E48IpdKdLCxzEAQJFxUTblwJGH9zGQgVGhUbbhxdG4wBHQQaCwaTb10emB8EBiAhInp8CSKYIw8kDRSfDiUmJ4xCIxMoKSoRJRMrJyy5uhMtLisTLCQkC8bHGBMj1daARgEjLyN03kPZc09FfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -contexthelp-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQChAQCBAAAACH5BAEAAAAALAAAAAAQABAAAAIzhH+hIeiwVmtOUcjENaxqjVjhByaBSZZVl24Y1V6iEVMzkD4bqD700bshgh1fzwd0IfwFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -crop-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMT+xATCBASCBISChPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAM0CLrc/iG+FsQgYapKbp7c4IFCZ2FQOQQE6oSl9Koxabrz/eVDDXat3atAlEEMSKFmyfAnAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -decrypted-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJExGHEQ+FCQiDBwaDBweDGxiLHxyNHRuPIR+RIyGZJSSfFxaRGxmLJyaXNzWpNTOnMzGnMS+jJSKTGReLKyqjPTu1NzarLSufKyibJySXIyGVGxiNFxaXLSytPT29Ozu7OTi5NTS1KyurGxqVCQeDJSSjLS2tNTW1KSmpGRiLKSebOzuzJSOXExONExGLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaVQIBwOAwYA8SkMCAYOAnKYiFAIAQGyOgVCggYuEovVxztMpdnwAGRSCgUCwOjIeQ6HpCIZDKRUNYMRBUWF4UYGRoWGxyBRR0eHxgaICEiIyR0QyUmJygpKgUrAxMsLUQlKyieoKIuEAunK52fBS8DLiywQySpnjC1Mbi6QjIzNBeSIBY1EQfDQgosLAEUNjY3Co1DfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -down-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObCRKZBxCXAwyTKTK3Ozy/NTm9GSivAQWHNzu/FzC3IzO5CySrAQOHAyuzETS3CSWtAyOtETa5Aw2VLze7ByWtBy61BSavAxWdBRCXAwqPAQCBDR+nKTe7FS+1Eze7ByixBRmjPz+/AyexAyixAQKFBRqjAQGDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZeQIBwSCwaj0hAYCkYEJLKguGASEADigWj4bgaHpBINykwSCYRa5HCFFQsF0xGo9lwhpSOwfORYC4gISJ3RAQdIyQYJSAlImNrh4uNJkl5CoKUUBQnjlB4KJ6hokN+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editclear-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAQABAAAAIuhI+pm+EPnwmi2msDoLgLzQWDV4HlSJof6qki+W0n7LKdCpdyrm/Rr2EIhwp/AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editcopy-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAFxaXPwCBNze3GxubERCRPz+/Pz29Pzy5OTe3LS2tAQCBPTq3PTizLyulKyqrOzexLymhLy+vPTy9OzWvLyifMTCxHRydOzSrLyihPz6/OTKpLyabOzu7OTm5MS2nMSqjKSipDQyNJyenLSytOTi5NTS1JyanNTW1JSWlLy6vKyurAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAaUQIBwCAgYj0eAYLkcEJBIZWFaGBie0ICUOnBiowKq4YBIKIbJcGG8YDQUDoHTKGU/HhBFpHrVIiQHbQ8TFAoVBRZeSoEIgxcYhhkSAmZKghcXGht6EhwdDmcRHh4NHxgbmwkcCwIgZwqwsbAhCR0CCiIKWQAOCQkjJAolJrpQShK2wicoxVEJKSMqDiAizLuysiF+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editcut-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAQABAAAAIwhI9pwaHrGFRBNDdPlYB3bWHQ1YXPtYln+iCpmqCDp6El7Ylsp6ssR1uYSKuW0V8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -editdelete-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPT29GxubMzOzDQyNIyKjHRydERCROTi3IyKhPz29Ox6bPzCxPzy7PTm3NS6rIQCBMxCNPTq3PTi1PTezMyynPTm1PTaxOzWvMyulOzGrMymhPTq5OzOtNTKxNTOzNTCtNS+rMSehAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaKQAAgQCwahcihYMkcBAiBpLJApRoOBWgyIKhSEQkFgrBAcr1URiPhKAsDD3QB8RhA3FM0IlLHnyUTVBMSFBUWfl0XGBMTGBcZGodmcQWKjpAbHIgIBY2LHRoempOdjooTGx8giIOPFYofISJ+DyMXI6AfFySyfiUmJSUnKBYcICIpfgELzM3OZX5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -edit-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaVMR+RPzKjNze3AQCBMR6RPzGjPyODPz+/MzOzPyKDPyKBPz29OTWzPyGDPyGBOx6BOza1OR2BKROBNSOXKRKBBwOBOzu7PTWxPzizOySZPyCDFxaXOy2lNRyRMxmJCQOBPTm1OzStPTKrMR+XIRWLFxGNCQSBDQyNIRSNDQuJERGRLyqlNzSvIx6ZKRuVEw6LLSyrLymhKSShBwaFFROTJyWjMS+vNzW1OTazNzKrHRqXOzezOTOpPTq3OzWvOTStLyedMS+rLy2pMSynMSulAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAewgAAAAYSFhoQCA4IBBI2OjgUGBwiLBAmXlpcKkgsMlZcJBA0JDpIPEBGVjwkSBgOnExSfmBIVBxAMExYXswkYGRobHLq8gh2PHhoeHyAWIYKzIiMkJSYnKCnQg5YNHtQqKywtK9qMBC4vMDEBMjIz2dCMDTQ1Njc4OToz5PEEOzw3ZPToMcLHO23HfogQ0QMIkCA+hPBbhAPHECJFjMyYIUQIvEUpUqwQOXKkSEF+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -editpaste-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQiFHRqNIx+LFxSBDw6PKSaRPz+/NTOjKyiZDw+POTe3AQCBIR2HPT23Ly2dIR2FMTCxLS2tCQmJKSipExGLHx+fHR2dJyenJyanJSSlERCRGRmZNTW1ERGRNze3GxubBweHMzOzJSWlIyOjHRydPz29MzKzIyKjPTq3Ly2rLy+vISGhPzy5LymhISChPTizOzWvKyurPTexOzSrDQyNHx6fCwuLGxqbOzKpMSabAQGBMS2nLyulMSidAAAACH5BAEAAAAALAAAAAAQABAAAAa7QIBQGBAMCMMkoMAsGA6IBKFZECoWDEbDgXgYIIRIRDJZMigUMKHCrlgul7KCgcloNJu8fsMpFzoZgRoeHx0fHwsgGyEACiIjIxokhAeVByUmG0snkpIbC5YHF4obBREkJCgon5YmKQsqDAUrqiwsrAcmLSkpLrISLC/CrCYOKTAxvgUywhYvGx+6xzM0vjUSNhdvn7zIMdUMNxw4IByKH8fINDk6DABZWTsbYzw9Li4+7UoAHvD+4X6CAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editshred-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbGxubMzOzPz69DQyNIyKjERCRPz29PT29OTi3IyKhPz27PTu5PTy5Pz6/Pzy7PTq3OzexLyqlPTm1PTizOzavLyqjOzWvOzaxLyifOzizOTOpAQCBOzezAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaEQAAgQCwahcihYMkcBAiBpLJApRoOBWgyIKhWEQkFYYHkeqkMxKFBFpq9jgdkEGlPqwrJhCIY2N8FFRYUFxcYGX9dgRKEGhiHiYEOhBcbGBwdiQEOARcBGwEeAZllAgEUnQEfoQEgmp4hrCKtrwEYsrRlTiMBJAG8syN/IyMAxMXHSH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -edittrash-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipFxaXPz+/MTCxISChDQyNCH5BAEAAAAALAAAAAAQABAAAANQCKrRsZA5EYZ7K5BdugkdlQVCsRHdoGLMRwqw8UWvIKvGwTICQdmGgY7W+92GEJKPdNwBlMYgMlNkSp3QgOxKXAKFWE0UHHlObI3yyFH2JwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -encrypted-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJEQ+FExGHCQiDBwaDGxiLHxyNHRuPIR+TIyGZJSSfFxaRFxWJGRiLJyaXNzWpNTOnMzGnLy2hJSKTGReLKyqjPTu1NzarMS+jLSyfKyibJySXIyGVCQeDLSytPT29Ozu7OTi5NTS1KyurJSSjGxqVFxaXLS2tKSebOzuzLSufJSOXExGLGRiTExONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwGCgGhkhkQDBoEpLKQoBACAyOUID1qTVwoQGvMPxNFgVjAxp6QCQUicSCwVgkG44HJCKRRCYUCAxIFRYXhxgZGhYbHINEHR4fGCAhIiMkFSVKJicoKSoFKwMsLZtDLison6GjLA92qCueoAUvpC2xQhWqrLYDErmEMDEXlDIwMxAHukI0NS01EzY2NAmPAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -eraser-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAAT+BMTC/AQCBISC/AQChPzCxPz+/MQCBIQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ/EMhJZRA120GwnsEgdh8QiqKXnSi5oqNKsbFWGEYrT8Vx4JydpOf7uSrEIkIISPqWtkIS+pH2qCUptgTYavwRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -exec-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBEQ+PBwaHLy+vMzOzGxqZHx+dKyqnKymnIR+dNTW1MTCxJyOfLySVMSaVMSeVMSebJyWhOSmTOSuVNyubPS+dKSWhHR2dDw+PIyKhNymTNSaTEw+JOy+fPzSnLSyrISChDQyNDw6NMzKzLy2rMyiXGxWLAQCBHRqTPzerNy+lMzGvCwuLAwKDDQyLJyWlNy6jPTGhGxaRGxiRPz2vOTStLy2tFRSTMS+tOzGlPzmtPTixGRiXCwqJLy6tOTWxPTq1MzKxMzOxISCfHRybLS2tHR2bCQmJExORMTCvMTGxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAeogACCg4SFhoIBAYeDAogDA4oAjYQCBAEFBgcICQUBCpODAQsMDQ4PEBGWhgUMDxITFBUUFheDGAYZCA0aGxwcHR4QHwwgISILIyQlGiYnJygpKisEIywALS4vMBoxMjM0KTU2LC2ENzg5wDo6Owo8hT0+Lx8/OztAQR9C1oInQz4FMBAp8sEIhgIEMpwYdASJCwAYkihR5OLGkUUAMmTACK8Hx4+C/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -exit-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBDQyNHR2dCH5BAEAAAAALAAAAAAQABAAAAI4hI+pFrHb3nEg1iWiDiINCwYDko0V9XUTda6I1TIsUMpGinyzbB6ZeGuoEr+GUDL4CXqSphPhLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -fileclose-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCQiJBwaHAQCBDQyNDw6PFxaXFRSVERGRCwqLAwODGRiZHx6fPz+/GxqbAwKDCQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVaICCOZGmeqBgEwjCkRGEcSKK4JrEcBrMgAdeLVDg0GguGsYEbBQyGYyN6FDoPDIf0+LCKBIgetQERDgGDBGIpNY8GioAU0m6KXFw883w3+/l9f4AkfimGIn4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -filefind-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBCQmJDw+PBQSFAQCBMza3NTm5MTW1HyChOT29Ozq7MTq7Kze5Kzm7Oz6/NTy9Iza5GzGzKzS1Nzy9Nz29Kzq9HTGzHTK1Lza3AwKDLzu9JTi7HTW5GTCzITO1Mzq7Hza5FTK1ESyvHzKzKzW3DQyNDyqtDw6PIzW5HzGzAT+/Dw+RKyurNTOzMTGxMS+tJSGdATCxHRydLSqpLymnLSijBweHERCRNze3Pz69PTy9Oze1OTSxOTGrMSqlLy+vPTu5OzSvMymjNTGvNS+tMy2pMyunMSefAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe4gACCAAECA4OIiAIEBQYHBAKJgwIICQoLDA0IkZIECQ4PCxARCwSSAxITFA8VEBYXGBmJAQYLGhUbHB0eH7KIGRIMEBAgISIjJKaIJQQLFxERIialkieUGigpKRoIBCqJKyyLBwvJAioEyoICLS4v6QQwMQQyLuqLli8zNDU2BCf1lN3AkUPHDh49fAQAAEnGD1MCCALZEaSHkIUMBQS8wWMIkSJGhBzBmFEGgRsBUqpMiSgdAD+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -filenew-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPz6/GxubNTKxDQyNIyKhHRydERCROTi3PT29Pz29Pzy7PTq3My2pPzu5PTi1NS+rPTq5PTezMyynPTm1Pz69OzWvMyqjPTu5PTm3OzOtOzGrMSehNTCtNS+tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ/QAAgQCwWhUhhQMBkDgKEQFIpKFgLhgMiOl1eC4iEYrtIer+MxsFRRgYe3wLkMWC0qXE5/T6sfiMSExR8Z1YRFRMWF4RwYIcYFhkahH6AGBuRk2YCCBwSFZgdHR6UgB8gkR0hpJsSGCAZoiEiI4QKtyQlFBQeHrVmC8HCw21+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -fileopen-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBOSmZPzSnPzChPzGhPyuZEwyHExOTFROTFxaVFRSTMSGTPT29Ozu7Nze3NTS1MzKzMTGxLy6vLS2tLSytDQyNOTm5OTi5Ly+vKyqrKSmpIyOjLR+RNTW1MzOzJyenGxqZBweHKSinJSWlExKTMTCxKyurGxubBQSFAwKDJyanERCRERGRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaRQIBwGCgGhkhkEWA8HpNPojFJFU6ryitTiw0IBgRBkxsYFAiGtDodDZwPCERCEV8sEk0CI9FoOB4BEBESExQVFgEEBw8PFxcYEBIZGhscCEwdCxAPGA8eHxkUGyAhIkwHEREQqxEZExUjJCVWCBAZJhEmGRUnoygpQioZGxsnxsQrHByzQiJxz3EsLSwWpkJ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -fileprint-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFRKNAQCBPz+/MTCxExKLPTq5Pz29Pz6/OzezPT29PTu7PTy7NzClOzm1PTu5LSabJyanPTm3FxaXOzCjOTKrOzi1OzaxOTSvJyenGRmZLyyTKSipDQyNERCROTi5Hx+fMzKzJSSlIyOjISChLS2tAT+BDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaYQIBwKAwIBMTkMDAYEApIpVBgOCAOg4RRGlAoEAuGIdGITgWOq4LxcCQgZkEkIHksHgYJOR6ZQCgVFhYJFxgTBVMZihoCfxUYDWUbUBGKGREcjBoQEB2TAB4CAx+Vl5WMhyACHiEhH6IfIiMktCQgE0cZJQStr6O2t6EARxO6vK6iEx4dZsMCxbsmBB4nzUTEutVSSUdmfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -filequickprint-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBPz+/ISChERCBDQyNPz+xPz+BFxaXPwCBMTCxAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEMhAq5UYBME7D9kkBMNGjqHmeWBoDhwsEIS7coVx1NhbCrmdzROk9SyU4GEJ2twECISOUNokEopsVrobKCgCrZa73IHFYy4VyZ5WNIO4vBhvse8gfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -filesave-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBFRSVMTCxKyurPz+/JSWlFRWVJyenKSipJSSlOzu7ISChISGhIyOjHR2dJyanIyKjHx6fMzOzGRiZAQGBFxeXGRmZHRydGxqbAwODOTm5ExOTERGRExKTHx+fGxubNza3Dw+PDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaAQIAQECgOj0jBgFAoBpBHpaFAbRqRh0F1a30ClAhuNZHwZhViqgFhJizSjIZXQCAoHOKHYw5xRBiAElQTFAoVQgINFBYXGBkZFxYHGRqIDBQbmRwdHgKeH2YgHpmkIR0HAhFeTqSZIhwCFIdIrBsjAgcPXlBERZ4Gu7xCRZVDfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -fill-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBMT+xASCBMQCBATCBPwCBIQCBISCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARSEMhJq50hXBvE0JsUEMXwhYFBmOeVDsVqgpS6luRc32RR6hLCTSCQ/VqEwwDhK5Z+Ao3wEPAViL6BR6PSZKyCa6uLAbcAZEznLDHQ1BZDiOKPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -filter-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipMTCxISChMTGxAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM3CLrcDiGGt6IQQ7pI8PjSVHUeqFVBNxRfFjXSZYqwENoUNFx4rve+wI6WEwKLQ5/CSCw2lQ9/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -find-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1ISChOTy9Mzq7Kze5Kzm7HyChOT29Oz6/Nzy9Lzu7JTW3GTCzERCRLza3NTy9Nz29Mzu9Kzq9Ize7HTGzHzK1AwKDMTq7JTi7HTW5HzGzKzS1IzW5Hza5FTK1ESyvLTa3HTK1GzG1DyqtLzu9IzK1AT+/Dw+RAQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaSQIAQEBAMhkjBUEAoGA4EJXKJSCQUC0ZDCmg0hATHAxKRTCIEYYMiMFYsF0xGs+FUOl0BJRAweCIRHyATIRhpRAEAHSILIyQgJSYhJ4dIBBEoISkmKiuVSQgRIyEsEQgELVNCLgQVCiJRLQSfli9pMAQxMrRcQ1G6tAC9AL+7al+qxALACG1Kw8oxBGt7yWBpfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -finish-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAwyTBRObAw2VDR+nAQCBCRKZOzy/KTe7Pz+/KTK3Nzu/Lze7FS+1AyexAyuzBSavAyOtBSmzOTy/BRqjNTm9IzO5ETS3ETa5By61AyixByixBRmjAQGDBxCXGSivCySrCSWtBTC3AQOHAQWHAxWdEze7AQKFBRCXAwqPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZtQIBwSCwahYGjUjBQGgWE5LCgNBwITSFVKOgKDAZEIqodChSLw4HRcIyTW4Dg0HhAIhGIZEIJxA0VFhcYGRAaGBscHXEeHyAhIQ4iiBwjAHEBJCMjJCUmiSdlRyigU0oolURxRSmrTpevsUN+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -flag-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBMTCxPz+/MQCBPzCxPwCBAAAACH5BAEAAAAALAAAAAAQABAAAAM5CLrcruG9QCULokqKR44NJQykQGgXSRaEcYJLsLLu6wSFoRMvCuk1kO9ni8GMt6MForQMl89NxJ8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folder_new-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBPz+hPz+BOSmZPzSnPzChFxaXMTCBPyuZPz+xPzGhEwyHExOTPz+/MSGTFROTPT29OTm5KyurDQyNNza3Ozq5Nze3LR+RLy+vJyenMzKzNTS1Ly6vJSWlFRSTMzOzMTGxLS2tKSmpGxubBQSFAwKDKSinJyanIyOjCQiJERCRERGRBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaNQIBwSCwaj8ikcokMCIqBaEDoBAQG1meAUDAQpIcBQoy1dg2JdBqhECgQ1IWB0WgcBIOBwIHXBwwPEBEREhIBbG4IExR/DBUVFhIXV2NjDVYYDY8SFU4ZVxpVAQwbGxynGxkdTh6XVh8gGSGzGSITIxokJUImGSMTwLcnKCkprgAqDSt1zCssKxQtQ35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -forward-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAwyTBRObAw2VDR+nCRKZOzy/KTe7Pz+/KTK3Nzu/Lze7FS+1AyexAyuzBSavAyOtBSmzOTy/BRqjNTm9IzO5ETS3ETa5By61AyixByixBRmjAQGDBxCXGSivCySrCSWtBTC3AQOHAQWHAxWdEze7AQKFBRCXAwqPAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZjQIBwSCwahYGjUjBQGgWEpHNYMBCaT4G2UDggos+EwmBYMBpf6VBgYDgeEMgjIpmoAQVKxXLBPDIXGhscRB0eHyAgDSGBGyJFASMiIiMkJYImUwAnmJqbjp4AKCmhAKSlTn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -frac-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBAQGBIQChCH5BAEAAAAALAAAAAAQABAAAAInhA9hig0SAmQOxeouPrFTzHzbCAzmiZ4k2S1ryHKsoo3tptXg3fgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -frameprint-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFRKNAQCBPz+/MTCxExKLPTq5Pz29Pz6/OzezPTy7PT29NzClPTu7PTu5PTm3LSabJyanOzi1FxaXOzCjOTKrOTSvJyenGRmZLyyTKSipDQyNERCROTi5MzKzIyOjLS2tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaPQIBwKAwIBMTkMDAYEApIpVBgOCAOg4RRGlAsEAqFIcGITqnWRcPxSEDMgkhAonA4DO3yMD6BUCoSCYIWEwVTF4gYAhAMFRUMZRlQEYgXERqKGBAQG5IAHAIDHYiUEUcDpwIcHh4doR0fH02zqAIXIASsrqi0TQBHE7e5HqG0Zr8CwSC9qFJHxbRSU7W1fkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -gear-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChMTCxDQyNFxaXKSipPz+/CH5BAEAAAAALAAAAAAQABAAAANdCLobwbAFMciLwBFSihBEFHSG8QnmpQQEBX6loI5G5QTlcMgrZSmEmsGxKqRWNV3hMrFlBtDoA1eTEaKHJdMYhR6+gxkF++UMGbiDzvDVioyHAJSHcchuGLQq4k8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -gohome-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBDw6PBQWFCQiJAQCBFxeXMTCxJyanDwyLDQqLFRSVLSytJSSlISChCQmJERGRFRWVGxubKSmpJyenGRmZLy+vOzq7OTi5Ly6vGRiZPTy9Pz6/OTm5ExOTPT29BwaHNza3NS6tJRqRGQqBNy6pIyKjDwGBPTe1JSWlDQyNOTGrNRiBGwmBIRaLNymdLxWBHxGFNySXCwqLKyqrNR6LKxGBNTS1NTW1Jw+BEweDDQ2NAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaoQIBwCAgIiEjAgAAoGA6I5DBBUBgWjIZDqnwYGgVIoTGQQgyRiGRCgZCR1nTFcsFkHm9hBp2paDYbHAsZHW9eERkYGh4eGx4ag3gfSgMTIBshIiMkGyAlCCZTEpciJyQjGxcoKUQBEhcbIiorLB4XEltDrhcaLS4vtbcJra8bMDHAGrcyrTMXHjA0NSypEsO6EzY3IzU4OdoTzK0BCAkDMgkIOjJlAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -goto-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBEQCBAAAACH5BAEAAAAALAAAAAAQABAAAAIohI8RyKciVnMwTlrlDfkm5QFgaHBWMo0lp22dZ57wO8vpGrLk2iJ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -help-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQ6XAQCBCyCvARSjAQ+ZGSm1ARCbEyWzESOxIy63ARalAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ/EEgQqhUz00GEJx2WFUY3BZw5HYh4cu6mSkEy06B72LHkiYFST0NRLIaa4I0oQyZhTKInSq2eAlaaMAuYEv0RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -history-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBEQ2LEw6POTSrOzWtNS2lAQCBOzatPTm3PTq3MyyjEw+NOzm1Pz29Pz+/Pz6/Pz27FRGPFxKRPTu3Pzy7Pz69Pz67KSGbPzy3Pzu3PTizPzu1Pzq1PTmzOzaxPTixPTmxOzWvOTOtKyWdOTGpOTStNS+nIRmVLymhNzCnOzavLyefAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIBwGCgOj0jBgFAwGJDJAyJBUDihwgWj4XhAqhEJNDKhVLwUSUDyPJIrlgYlLSG0hYELhgLJTBJOd1kaGxgYHB0egkQfHBwgHyEigkUBIwMkBwcEJSZ3ARYWJCcnKCYpJJ5HAQUqFhSjJysoKItOCgehJBISI4tCtyERa79HTrx2WEiBUH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -idea-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+BPzerPz+xPyqXPz+/ISChFxaXKSipDQyNAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARMEEgZap14BjG6CJkmEMVQCF+4mQPBpthWtuYJxkJJGK6dbQRCgMBB3XCDzQamMhpDGlvuCFUyoQDLBUsJHBDUKuKQCKsUCIVZtc34IwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -int-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBIQChAQCBAwODAQGBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCKqx/iw0CNukzuJ8d1yCAAziIyliCKjck1ZuaV4igZ1r+raongE4j8YT6QiJC38CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -locationbar_erase-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAIshI+py40Bo1SywgSFiDq+oG3hZHDhVpUmagFrl7pgN3oqPNuqpe+8Awwi/AUAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -lock-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJEQ+FExGHCQiDBwaDGxiLHxyNHRuPIR+TIyGZJSSfFxaRFxWJGRiLJyaXNzWpNTOnMzGnLy2hJSKTGReLKyqjPTu1NzarMS+jLSyfKyibJySXIyGVCQeDLSytPT29Ozu7OTi5NTS1KyurJSSjGxqVFxaXLS2tKSebOzuzLSufJSOXExGLGRiTExONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwGCgGhkhkQDBoEpLKQoBACAyOUID1qTVwoQGvMPxNFgVjAxp6QCQUicSCwVgkG44HJCKRRCYUCAxIFRYXhxgZGhYbHINEHR4fGCAhIiMkFSVKJicoKSoFKwMsLZtDLison6GjLA92qCueoAUvpC2xQhWqrLYDErmEMDEXlDIwMxAHukI0NS01EzY2NAmPAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -lsub-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBIQChAAAACH5BAEAAAAALAAAAAAQABAAAAImhI+pFu2+QpxKVppsxkh3fnhh9DyGcC6IwLbqir4HK58tLcfx6xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -lsup-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBIQChAQCBAAAACH5BAEAAAAALAAAAAAQABAAAAIlhI95YawYonwp0uoukFO7rCXCSJKPcKYKuqqii7BvS892XJZ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -mail_forward-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRydHxubHxmZGxiXHRmZFxOTFxGPFxKTPwCBLymlMy+pOze3PTq3PTu5Pzy7LSmnOTaxOzm5LyqlNzOtPz69Pz27MzCtLyqrPT27IRubPzuzNTGvNTCxLSelPz25Bw+ZFxKPPzy1Pz65LyupBxKdCxWfPTm1Pz23LyinBxGbGzO5DRafBxWfBxajCymxHTS5BxSdBxKbFTK3EzG1CSGvCyKvCSSxCSavGTO5GRaVPzqzFzK5EzG3BSCtAwiPGxaVPTivPzy3NzKpBxObCRefBxqlPTmzJR2bKyahAwyRPzmvOTOpKyObNS+nPz21AQOFKyOfPzuxAQCBGRORLSadPzyzLymjMy2lOzetDwuJFRCPEw6NEQ6LEQyLEQ6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAQABAAAAfhgAABAgIDBAQFBgcIBwmOCQIKCwwNDg8OEBESjY8CDBMUFRYVFxgZDJyOGhsPChwVHR4fFSAhjwkaIiMOJBQQDRUVJSa3GicoHw4pEA8SGSorLI8tLtQu19gqLzDECTEyMzQ14zY1Njc3ODkqCTo7MjIxNCs5PD03PjctPwlAQUIihhBpQbCIihtG+CUocASFkAhIkogQ8kFJwkcFlogIkoRJEydPnkBR6GiAxiQLgiiIIkXElFQJqESoMsRKkAhXqkhhApNKFSxZggTJ4nHIEJhaDhzYwoVLFy1avHyB6ScQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mail_generic-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBGxaVOTe1Oze3OTWxOTWvNzStNzKpEQ6LOTezPz+/Pzy7Pz69Pz27Pz25Pz21PzuzPzuxEQyLLyinLSmnPz67Pz23LSafKyObDwuJMzCtLSelPzy1My6nLymjNTCxLyqnPzq1LyihKyOfOzavOzetEQ6NPTq3NzOtLymnNTGxJR2bOTOpPTivNTGvLymlKSShKyahEw+NOTe3PTm1Pzu1Pzy3FRCPPz65LSadFxGPOzm3PzqzPTmzPzmvEw6NCH5BAEAAAAALAAAAAAQABAAAAaqQIBwSCwaj8ikMhloOp/QpmAgqAoIhELBUDgcEIGEYrFgNBoLx+IBiRwkgQnFoWAwKhWLhX3BZAILGhsCDXgODhwdGB5vgAofICBlDiEiIx4kJSYBJ2UoEykqHSMrLC0nLWAnFS4UCycvMAcEMR0RLTIBMwaSahw0NTYtFwclNwEdLws4eoc2DxwQOR06ASk7PBAhIRE9Pj0tLSUY1T8I5gjn6Qgy7D8SfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mail_get-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAxKdBRSfCyGvFSm1BxKfCSWzCyWzBRCXCRKfBwuRAQGDDw6PHy23Cym1CSSxByCxBxunBQSFKyurMTCxExihNza3NTW1JSSlMzKzFxaXLS2tNze3KSipCQmJGxmbNTS1KSepLy2vISGhJSWlHx+fERGRPz6/IyKjDw+POzq7JyenMzOzKSmpCwuLDQyNIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQIBwGBAIAsOkUjAgFJRQQMHgjC4PBIEVgAh4D4aEYrGAMhINxwPyiCgYSsmEUmk82grLRZJkYCgXaAEKFxYZcEISGhsZFxwFeY0WHR5CDB8dGCAXG5shGxQicBIMpSMUGxgTGSQlpQwSJicnEwwdI7gdKAwTsykpKiobr8QMKxeHDBcsGRvOzxsT0i0uL9HSHdkT2ZkoMJXF4a8AfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mail_replyall-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTFRCPFxKTFxGPPwCBLymlMy6pOTa1PTq3PTu5Pz27Dw+POzi3PTm1OTWvPz25FRSVERCRLympPzuzPTu7NTGvFxaXKSmpPzu1Pz65Hx6fHxqZPzq1Pz23HR2dBw+ZHx+fISChJSWlDQmJHRydCxWfBxGbJyenExKTHRiXPzqzPzy3CQmJDRafGTO5ExOTERKTGxWVCRSfHTS5CymxBxajBxWfPTmvPzy1CyixCSaxCySxDSaxDSWxDSSvDyaxGS21PTmzPz21AwiPBRejCSavByGtCSezEzG3FzK5FzG3GzO5FTK3CQ2bPTixBxqlCRefBxSdBxSfBx2nCQ+dHxmXPzmvLSafAwmRAwyRPzyzDw6POzavNzKpAQOFPzuxBwWTBw2ZGRORLyWdMy2lOzetPTivAQCBKyObOTOpAweNBwWVEQyLEw2LEQ2LDwuJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAf4gAABAgMEBQUGBwgJCguOCwEMDQ4PEBESDA4TjY8DFAwVERYXGBkRm4+QGhsMHB0eGB8bDpyOARogEBceIRgXv8COIiMkGB4lJSYnIcwoKb/DGyoXKywtKS4pHinMLzAxJDIzNDUtNjcv6B0hLzgfMh85OjstPDw99zwd7T4/LTVAgggZQqSIECNHevSAgSSJkiVMmjh5AiWKlClAiFARUeVHFSVWmLS40gNLlh5agGzh0kWDlwZfrIDREKaCAjEqrFA5MMYLmTAxlJTxYoZMozNozqRRs4ZNmy5s3LwhA0dBnDNn5MxBoAABnTp17IitowDrmQV+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mail_reply-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTEw+NFxKTFxGPPwCBLymnMy6pOTa1PTm1Pzy7LymlOzi3HxqZOTWvPz69Pz25My+tLympFRGRHxuZPzu1LymjNTGvNTCxBw+ZPz23PzuzPz65PTu5NzOtCxWfBxKbPzq1DRafGTO5BxGbPzy9HTS5CymxBxajHRiXPzqzCyixCSaxCySxDSaxDSSvGS21GxWVAwmRBRejCSavByGtCSezEzG3FzK5FzG3CQ2bPzuxAwiPBxqlBxKdCRefBxWfBxSdBxSfBx2nCQ+dPzy1CRqlAwyRDQmJPTmvPTixLSafOTOpAQOFPz21BwWTBw2ZPzmvNS6nPTivAQCBAweNBwWVNzKpPzyzLyihGRORLyWdMy2lOzetKyObEQyLEw6NEw2LDwuJEQ2LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAfqgAABAgMEBQUGBwgJCguOCwEMDQ4PEJYRDhKNjxMPDBQVFhAXGBUSGY8LGhsQHB0VHh8gFQ6bjgEhIiMMJCUmFbS2CwMnG6IoKSorI7WpEycWFiUsLSou1yXXji8wFiopMTIzNDUz4zbZNxsbODk6Ozw9Pj8pPzEzQDdB60JDOkRFjBw5giRJDCWdlmxwIIRJExAWKDRyMgTIiydLoESRImQKlSUSF1SxUoXAlSBRsGSJoCVICIlbqlThcoBClC5eYFD4EiVIFwUyqywAE0ZMlqNjpJDpIkUBl0dlFChAYOZMmTJoyqQR5icQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mail_send-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTFRCPFxKTFxGPPwCBHxqZLyqlMy6pOze3PTq3PTu5Pz27Pzy7LyinOTaxOzi3Ozq3LymlOTOtPz69Pzy5My+tLympPzqzNTGvLSelPzy3BxGbBQ6VPzuzPz65LyupNzOtPz+/GzO5BRejPzq1Pz23LymjHTS5CyixCSavBxqlPz25LymnGTO5CymxCSaxByGtHRiXPzy1CySxCSezGxWVPzuxKyOhMy6nDSaxEzG3PTivNzKpKyOfPzu1FzK5PTmzJR2ZLyihLSWfKyObOzmzPzmvDyaxOzavLSafGRORMy2lOzetDwuJEw6NEw2LEQyLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAfUgAABAgMEBQUGBwgJCguOCwwNDg8QERITFBUWjY8DFxgZGhsaHB0aD5yODB4TGB+kICEaIiOPCwEkJRcmJyYPKCIpKrWqKywTmC0SIi4vMDHEDCsyMg8zEyI0NTY3z7U4Hhs5Mx+0IyI6OyPrIzw9Gys+PxIy2EBBxAs8Qjk5Q0RFWFxAZySfgSMsilRAkiRECHQ08hHgJ0TJkCU/mECU2ISEkowUlpAQ4QTfowNPoAzJIeRJCyjm8kVRIkWIzSkXhwxJtYAKgp9VrFi5QoWKFZ5+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -matrix-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBIQChCH5BAEAAAAALAAAAAAQABAAAAIrhI9pwQHt4Jru2Vsjna919lXKeEimh6UZp1lrCEvkfILyirOby3q1OEv4CwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -misc-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChMTCxDQyNFxaXKSipPz+/CH5BAEAAAAALAAAAAAQABAAAANdCLobwbAFMciLwBFSihBEFHSG8QnmpQQEBX6loI5G5QTlcMgrZSmEmsGxKqRWNV3hMrFlBtDoA1eTEaKHJdMYhR6+gxkF++UMGbiDzvDVioyHAJSHcchuGLQq4k8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -move-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhA8RyKja2HtRrmrxNfDszm3JMpXmiULg6Hyto4kYO49Tfdc04xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -news_subscribe-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/ERCBDQyNAQCBPz+/FxaXIQCBMQCBKSipMTCxATCBMT+xISChASCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARsEEgZxLxYDlJsvsJGDN0nFQRhpKR3DSJxrGMphYQgpDI9WLhdTtjjAFApXZI30m2UQwICVigcEzzolKAYIAIFBAKbQjQX3YGGISZvFtzFQr1uDxT4PH0yYE8FCg0/Jn0MAwsNOiY3IQMBEn4RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -news_unsubscribe-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/ERCBDQyNAQCBPz+/FxaXIQCBMQCBMTCxPzCxKSipAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARiEEgZxLxYDlJsvsJGDN0nFQRhpKR3DSJxrGMphYQgpDI9WLhdTtjjAFApXZI30m2UwxjsiOApB4kNLFtQKKopxeCQxR4GAJIXPCInzmhN9zvCljNq8ZvswmzhZHEfOhpofhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -next-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFwyXAQCBOze9BwCHNx21LQCvPSi5NRi7AAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ3EMhJqwUhAMG7DQOxdVwFFuI1nYZIethwIK0aFwjtwrfh15cAYUjcvWyvkm1Z4TGfkyN0avFHAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -ok-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBMT+xATCBASCBARCBAQCBEQCBAAAACH5BAEAAAAALAAAAAAQABAAAAM2CLrc/itAF8RkdVyVye4FpzUgJwijORCGUhDDOZbLG6Nd2xjwibIQ2y80sRGIl4IBuWk6Af4EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -openterm-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXFRSVPz+/PT29OTm5OTi5DQyNDw+PERGRExKTHx+fISChIyKjHRydFxeXDQ2NCQmJBQSFAQCBERCRMTGxHR2dGRiZExOTDw6PCQiJAwODCwuLFRWVOzu7BweHAwKDCwqLHx6fBQWFGxqbGRmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAanQIBwSCwKAwKkMslEAgSDqDRKqBYKhkNgcDggEorkMrDQchkNhuOhgEQkk0l5S2lUGpYLJqPZTAwMHB0DCmhqAW0Rfh5zAxgOkBcCFAcfIBMECxwBBAEPFw8dChkhcBMDDAcdnQqtFKSWcQMimx4dGRkQBxGxsg6bBQEawx8jl3GnJFoFHRNXVVNRJYIFDAsL1tgiDiQXFx0HABwcXeQH5OjkRutEfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -paintbrush-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTC/AQChPz+/MTCxKSipDQyNCH5BAEAAAAALAAAAAAQABAAAAM7CLrMIS2qN2Sj1U4xugaYZxFE1wUaURQnKpFBYQTuFRiyXDsCd8y7RYhmCQ2IkiHywmkFN84ibfrxJwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -paren-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAQABAAAAI3hI+JEQq8mnvyzSOhEWJ3CgLcOILV4IlfUx1cwirfYiEvXL83arANSer5UipM5tIzXjRCh8ZfAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -pencil-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/IQCBMQCBPzCxAQCBPz+/MTCxISChDQyNKSipEQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARDEMhJZRBD1H2z3lMnjKCFjUJQimOgcmcbELCXzjXq0hV785WCQYcDFQjDXeloMByKG6YTAdwIDAlqSZJSVFeKLcUfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -player_eject-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+py+0R3IFQUtruXVqn3kkWyIARR4rqKvoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -player_end-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+py8Eb3ENRggrxjRnrVIWcIoYd91FaenysMU6wTNeLXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -player_pause-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIfhI+py+1vgoxzyUCxrZd18ClfmIyVyJ1lqkHuC0N+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -player_start-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+pyxudwlNyguqkqRZh3h0gl43hpoElqlHt9UKw7NG27BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -player_stop-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py+1vgpySUWpvXXqrHmSaeJEYhKYq6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -previous-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBFwyXOzC7PTq9OTK7IQyhBwCHNRi7LQCzPSi5IQ6jLwKzORy7AAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ8EMhJKwg4W5o1EGAIbt8wEERhHJ0mIEmiLAH5IYxi1JcnvTOeTdDYcVo1gfHY+hxs0IkvSpV2qtgswB8BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -prod-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBIQChCH5BAEAAAAALAAAAAAQABAAAAIihI+py50Bo4SKHlsDwk9fn21gJzIcV37miKpuZ0nOTBt+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -queue-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBMTC/Pz+/CH5BAEAAAAALAAAAAAQABAAAAI5hI+pFrEahGgPtCinS2GMlknU0Xkflm2l6YEiw8aRGssTXLe3lZsznvuRViwholEcLZCfynGT8BcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -redo-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBxOHBxSHBRGHKzCtNzu3MTSzBQ2FLzSxIzCjCSKFCyeHDzCLAxGHAwuFDSCNBxKLES+NHSmfBQ6FBxWJAQaDAQWFAw+HDSyLJzOnISyjMTexAQOBAwmDAw+FMzizAQODDymNKzWrAQKDAwaDEy6TFTGTFSyXDyKTAQCBAwiFBQyHAwSFAwmHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ2QIBwSCwaj0hAICBICgcDQsEgaB4PiIRiW0AEiE3sdsFgcK2CBsCheEAcjgYjoigwJRM2pUK0XDAKGRobDRwKHUcegAsfExUdIEcVCgshImojfEUkCiUmJygHACkqHEQpqKkpogAgK5FOQywtprFDKRwptrZ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -reload-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCRaJBxWJBxOHBRGBCxeLLTatCSKFCymJBQ6BAwmBNzu3AQCBAQOBCRSJKzWrGy+ZDy+NBxSHFSmTBxWHLTWtCyaHCSSFCx6PETKNBQ+FBwaHCRKJMTixLy6vExOTKyqrFxaXDQyNDw+PBQSFHx6fCwuLJyenDQ2NISChLSytJSSlFxeXAwODCQmJBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIBQGBAMBALCcCksGA4IQkJBUDIDC6gVwGhshY5HlMn9DiCRL1MyYE8iiapaSKlALBdMRiPckDkdeXt9HgxkGhWDXB4fH4ZMGnxcICEiI45kQiQkDCUmJZskmUIiJyiPQgyoQwwpH35LqqgMKiEjq5obqh8rLCMtowAkLqovuH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -remove-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/PwCBMQCBEQCBIQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMuCLrc/hCGFyYLQjQsquLDQ2ScEEJjZkYfyQKlJa2j7AQnMM7NfucLze1FLD78CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -revert-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAAQCBPwCBPz+/PTizCQeHDQyNBweHAQGBAwKBDQ2NPzu5PTi3ERGRCQiJHR2dPTi1CwqLPz6/Mya/Mxm/GQCzFRWVGRmZAwODFxeXExOTExKTERCRBQWFMTCxKSipMzKzCH5BAEAAAEALAAAAAAQABAAAAV9ICCOQWkGIiqsQloCKCqy7UC8MC4URSsMhsDBNWOJEK4TYJfoGU8vmmJBGI5SyyYj0XDQjMvVQwBxRCQTilowFGwrjG5kTo+0x4OdpcLvV0YXIhcGGH0ZFRobOSccfB2PHR4FiyYAGQwdAI8eEAdQKBsZmR+RBpSVVyMHfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -rotate_ccw-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBFxaXIQChEQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM0CLrcHjA6JcK4ET68MrNDoIgjOYbdJ4IXagIa3IqVFAMEOqpfn067ErBxG0qGsCJyyQT4EwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -rotate_cw-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBIQChFxaXEQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMzCLrcHjA6FaG4YbS6At5BR31UKI4mADGhd31rpbmCuZ6qQLA8XvqT2+QhHLKKxqSy4U8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -rotate-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBFxaXIQChEQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM0CLrcHjA6JcK4ET68MrNDoIgjOYbdJ4IXagIa3IqVFAMEOqpfn067ErBxG0qGsCJyyQT4EwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -rsub-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBIQChAAAACH5BAEAAAAALAAAAAAQABAAAAInhI8Jwd26YJBUTVvT1Rlt3x2f6DjQeQiGigLCC7crK7+yC9sty/oFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -rsup-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBIQChAQCBAAAACH5BAEAAAAALAAAAAAQABAAAAImhI+pGtZ7gpwQyWofnnQ7I4SiuAjlqZgpmqgti7gxfMh1OY6LXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -run-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/ISChKSipMTCxLS2tLy+vMzOzMTGxNTS1AAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARlEMgJQqDYyiDGrR8oWJxnCcQXDMU4GEYqFN4UEHB+FEhtv7EBIYEohkjBkwJBqggEMB+ncHhaBsDUZmbAXq67EecQ02x2CMWzkAs504gCO3qcDZjkl11FMJVIN0cqHSpuGYYSfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -signature-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAFxaXPwCBAQCBDQyNPz+/KSipERCBAQChISCBMTCBPz+xMTC/AQC/MTCxPzerAAAACH5BAEAAAEALAAAAAAQABAAAARwEMhJZwgCiM17DoMkEGRpAmGhmSxhAOrakim6DgeLJApRhCPCgJRT8AhGEVFIQigAxgSQsBgwms8oIrDKDZNGxJY7GuYQULHhQj4shAmAuNAQsFc9xY4uUNgvMiQOBIMOfncjeUhICocXAx6RfwF+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -spellcheck-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPzCxPwCBMQCBIQCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLrcGuHBNZ+NIOJ9O4MTaH2e1nDoiFYZJjgwIAzwy8yEgy84RhWDQa4HCwAHxJgxSPApC83YyQnwJwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -sqrt-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBIQChAQCBAwODAQGBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMyCLrcDiHK6eIL9WmsmwWCAAyiwkGKGILihzLq8p1s9onE9a48Iy28ko/WgRCLyGTDnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -stamp-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+xMTCBISCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANCCLrR+zAIMQKMguh6GR2g1QEBCBLiGGjo+DSpS3IqXNqxNAnwzisSk3BowRltM8IAZVMqi84lLNoqUVfLrOhoVPgTACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -start-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRSdBRObCQ2TAQCBBxObISevNzu/BRGZPz6/FzC3Pz+/HTS5ByyzJze7Mzq9ITC3AQWLAyWvBSavFyuxAwaLAQSHBRWfBSOrDzW5AyixCS61ETW3CzG1AQeLAweLAxefBSStEze7CSWtCyatBSCnAwmPBRWdByixAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZrQIBwSCwah4HjUTBQEogFw/M4BQgMh2pxijAkFAhBYJwUPq8LRsPxWDwgkSHhelA0JJIJnlKRWy4YGRoSGxwcHRsecgAfICEiGhMjJBglVVMRgBkgJp0El0MRJyhaRFqipUoAFqmqrapHfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -stop-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/Gw6NGQuLHQ6NGQmJFweHFQaFPTm5PTa3PTW1Oy+vOS6tNSinKReVDQWFPz+/Nx6fNyCfNyGhNR+dMxybMRiXLxGRIwWFNx2dNx+fNx2bMxuZLQWFBwWFPTu7Pzy9NRqZNRuZMRSVLwmJGwWFNR2dMQiHPTKxMxmXMQyLMxmZNx6dMxiXMRSRMRaVKxybMxaVEQWFMQuJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaaQIAQEBAMCAWDYcgkHhAJxYLRcDQBggckIplQKpaLdRh4YDIaSWa94Vw6woAHgv6AMKGPaMQhwQMJJRkfhHmEJhdvRCcgGSCEkCgpbnAECiorGYYfLCItlAAFCygQj5AfbYlwBQwVE5AukG6KBi8tMC0fLi0pHxyzcAAxFxwmMny/wEwOxMm/qlcdJCSJ1H5XQh3a28HY3kx+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -sum-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBIQChCH5BAEAAAAALAAAAAAQABAAAAIdhI+py60BowyPJriwQ3qb7oGNyJCZtZHixHpu4xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text_block-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py40Bo5SOzRvrwlgrfnkJOIkPaaaJXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text_bold-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIihI+py70BowPQ1HZpwNv212Vg9IGHmIjoWa4ey5DSRNd+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -text-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIlhI8Jwe2/AmpTynqPTXSqrnBM+I0kdmpmGmUp+K4nPMvhYx9+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -text_italic-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py+0BgztwUmmjBXX3jE0auHHhM5Yq4xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text_under-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+pu+FxXoOIKpds1oBH7hlYxYxRCaIZ01lhJbHy9tTv7BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -toggle_log-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBATCxMTCBPz+xPz+/ERCBASChISCBARCRAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEIQJqpXBBjFI1oGncYU4EUXxSWQZlum6DXDQpeo0tR6KqqgdLXiLBWepHgyYIxF/TKHv9XvtDDfb0So5YHuTgThYCXgH4Q6hqvEGEIm4PLGSyHX4OkZv8UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -top-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBBRObAQSHBRSdISevBRWfAweLNzu/BSOrAQWLPz6/FzC3DzW5BxObHTS5ByyzAyixEze7BSStBRWdAyWvByixCQ2TBRGZJze7CS61BSavAxefMzq9ETW3CSWtAwmPPz+/CzG1ITC3FyuxBSCnAQeLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZjQIBwSCwSA8ik0kgUDJhGQsFwgA4FBUTCoLBiF4zGtmt0FBYPSEQyoZCvWQakUok0LISnkHBBYjIVGhscS0UGHRUeHyBWAAIhiYuNAggVIgmMVgYjJBolAZMKJgpIjaanRH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -transform-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTCBPz+/Pz+xFxaXAQChAAAACH5BAEAAAAALAAAAAAQABAAAANOCLrcEDAGt4K4F46wmcVCQIzE4F1DukksehVkiUlDYcdfCAyEGI+D2aP3G+UmPF/MAJpwnpuNgMmcKHKgabWSvRi+ums3a32wzmWKw58AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -undo-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBxSHBxOHMTSzNzu3KzCtBRGHCSKFIzCjLzSxBQ2FAxGHDzCLCyeHBQ+FHSmfAwuFBxKLDSCNMzizISyjJzOnDSyLAw+FAQSDAQeDBxWJAwmDAQOBKzWrDymNAQaDAQODAwaDDyKTFSyXFTGTEy6TAQCBAQKDAwiFBQyHAwSFAwmHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ1QIBwSCwaj0hiQCBICpcDQsFgGAaIguhhi0gohIsrQEDYMhiNrRfgeAQC5fMCAolIDhD2hFI5WC4YRBkaBxsOE2l/RxsHHA4dHmkfRyAbIQ4iIyQlB5NFGCAACiakpSZEJyinTgAcKSesACorgU4mJ6uxR35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -unlock-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJExGHEQ+FCQiDBwaDBweDGxiLHxyNHRuPIR+RIyGZJSSfFxaRGxmLJyaXNzWpNTOnMzGnMS+jJSKTGReLKyqjPTu1NzarLSufKyibJySXIyGVGxiNFxaXLSytPT29Ozu7OTi5NTS1KyurGxqVCQeDJSSjLS2tNTW1KSmpGRiLKSebOzuzJSOXExONExGLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaVQIBwOAwYA8SkMCAYOAnKYiFAIAQGyOgVCggYuEovVxztMpdnwAGRSCgUCwOjIeQ6HpCIZDKRUNYMRBUWF4UYGRoWGxyBRR0eHxgaICEiIyR0QyUmJygpKgUrAxMsLUQlKyieoKIuEAunK52fBS8DLiywQySpnjC1Mbi6QjIzNBeSIBY1EQfDQgosLAEUNjY3Co1DfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -up-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObAwSHBRSdISevBRWfAweLNzu/BSOrAQWLPz6/FzC3DzW5BxObHTS5ByyzAyixEze7BSStBRWdAyWvByixAQSHCQ2TAQCBBRGZJze7CS61BSavAxefMzq9ETW3CSWtAwmPPz+/CzG1ITC3FyuxBSCnAQeLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZfQIBwSCwaj8hhQJAkDggFQxMQIBwQhUSyqlgwsFpjg6BwPCARySSstC4eFAqEURlYhoMLBpPRUDYcHXt7RgUeFB8gIU0BIoiKjAcUIwiLSQUkJRsmGIwJJwmEU6OkfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -view_choose-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMzCLrcGlAs6UAYgwLdLtEcI4ygQo7VVp2oupGpG4vmaUVTemX523qlFcw0a4RqNlkx5k8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -view_detailed-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMmCLrc/i1IAVkYg1Z1iRYUKCqitp1oikqBWV3ZOnhkWNagqu+qnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -view_icon-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCLrcG1AwGOQbw6qANeCEB3pCSZpO6pgowJZqLKuUGE0dnuEhf8IL1kz1shSHDX8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewmag--16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ+QIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6eUAFCusJSzr7Kmpl0CtLGLvbW2Zn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewmag-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ8QIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6eUAFCusJSzr7GLArS5Q7O1tmZ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -viewmag+-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6cAsLECrqeys7WxpqZdtK9Ct8C0fsHAZn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -view_multicolumn-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCLrc/ixI0WSgKoyBl+beQFACpo1AqXbKCr1wLAMWS08hGG3dSZqin4sxnBmPD38CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -view_text-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIchI+py40BTQSwuovp3DXkv1ia1IHmIXLiyWJ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -view_tree-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBDQyNPz+/PzerAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAMuCLHcri4yGISlj4kxcANgNRBQCIbL6U1Su7bB62rXvGydG25kqpwfIGxILBr9CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -window_fullscreen-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBNTW1MzOzMTGxLy6vKyurJyenHR2dOTm5Pz+/IQCBOTm1Pz+9Pz+7Pz+5OTmzOTmxOTm3Pz+3OTmvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVuICCOZAkEaKquqzAQRWEYR32gSK7vO5oowKAQmPAtjkPFccEwLoaNhuPYDCSeT2B0+lhAfMHF1kF+PL5W7ZhrjqAk4gW53J0s3AG4nP6Y2BcUKAxLZn1+S4EBDAwQEIsUDBQRFJSJLJcoJpojfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -window_new-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAFxaXGRmZFRWVGQmhFwmfFxeXOTm5MTCxLyWzLySzKyCvKSCvJxyrJRmrIxipIxWpNze3AQCBMTGxJRWtJRatIxOrIRCpHw+pHw6nHQ2lGwulOzu7Pz+/Pz+9Ozu5Pz+7NzexPz+5Pz+hPz+3NzevPz+BMTCBNzetMTCDPz+xNze1NzezPwCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACwALAAAAAAQABAAAAaVQEBAMCAUj0aCYFkwHBAJhWLBYDQcD8ghIjhIJhRKxXLBZDQaiYQLABDe8PiSu+HY7/dOh+PhQvB4eh8fIH6Adh2DHyGFAn+BiQAiISMkhnmSIQAlI5KXHIkfAiUmpCUnhoKLISgpIikmAlwqtCArkiUlIhwiuSKyEcHCESausMEsycrJEaaly9ARIizN1NPQ0dfJfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -window_nofullscreen-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBNTW1MzOzMTGxLy6vKyurJyenHR2dIQCBPz+/OTm5Pz+9OTm1Pz+7OTmzPz+5OTmxPz+3OTmvOTm3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVsICCOZAkEaKquqzAQRWEYR32gSK7vO5oowKAQmEAtfr9hgpFoGBWJpDDqcAaOUSHDEU08nkOG2AGBfK/aMYQMiRi7Ywe5674yE3I2JCqZoChLeGwSEgmFfgFNDQ8NjQ0TEROSRSyVKSaYI34hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -wizard-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+xPz+BMTCBPz+/MTCxISChDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAREEMhJg6BYWhAGv5k2EKMXToSgEqc1DEIhvGAWpOvJFSXZyoXOxxY0BDahQDGg4xgOxmbgiWDqpoeqlGrVcZuSbLfpjwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -abbrowser-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBKSipMTCxISChPyqXPzerPz+xPz+/FxaXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARhEMgJQqC4Xms1tkIgDEMYXpMYEEJRCIT6Ea5R2DHFtQZBG6dNoHQrsAyH14DDWiENBsQhBtskEs4Dohe4oiqE5So2zElECEKCrCYgQmcRVnRKnFIdC0L4/az7GXiBg4N+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -access-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBGRufLzi7PT6/NTq9OTy9MTm7LTW5LTS5LTO5KzC1FyGrExSXHzG3Gy+3FSStPz+/ESGpFSmxEySvEyKrER6nERylExqjFSSrKze7EyCrDxulKzG3GSuzGSitEyWvER2nEx6pKzO5DxmhLze7DxqjExihERadLS6xERulEyOrLTC1KzK3ERWbERujFRefGR+nKTO3LS6zLS+zFRmbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAa1QEBgSCwWhYIBocA0CA6IhEKwYAQKDccDAolIJpSK5aKwFhyYDGSQoWgqm4uFYyV0PAeIIPIeayZlVw4OFV19FxoSGoFnH1tcayASIRciVgYfEWoQIxcLk4gHlxQCnJBcJBUSdAEHhQediSV5ExWBBxYQGSZelLkHJyhWsHmSISkHKpsrViwWJ1xPXCAtesIBCiUaGHm6LiYvLybXMAQCMQosBwcoMjIzMTQMAC0M9vf49wB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -acroread-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAASC/PwCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAIlhI+pELshmkOhzmTvyZrFDglRxVEiGUoUualtx7gOC36gDGt+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -agent-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipISChPz+BMTCBISCBERCBCH5BAEAAAAALAAAAAAQABAAAANLCLrcHkFBt4IY8EYKYCAT9xVBYRhbM5KFeaRVy56oSsgQ/TLrB567ym10ChiCnRIRaJx8lDdd86UkEWjHaURZwlKRHpM0xPOYGf4EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -aktion-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAI5hG+hIuigAmMvLTlfnJiePQndt4SMFFioeaagaEbvySlQF6I2BLPRwYntDLlaylH8VXLDpaiJ8BcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -alevt-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/Pz+/AQCBAT+BPwCBAT+/Pz+BMTCxCH5BAEAAAAALAAAAAAQABAAAANFCLrc/i3ISadQYQhSehFecAGiYJ6oiJmaZrymSrKCJhinXLYmHo+l2skn0KGOPwyBUHPhOrqKVIWsmhqHyqhhPUG+Cn8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -applixware-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBKSipAAAACH5BAEAAAAALAAAAAAQABAAAAIyhI+pGbsBHYtHCGARbMhms1HVB0TieJhcl23liXkinAmhy7732UL9GnsZeixczChB+AsAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -ark-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/PwCBAQCBPyCBPzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANCCLoQwTBK6dy8WNQgptAbB33DQGzlx3xE65RpBwgtCw9sR7e1gO8EGYs3DMoUH5rPqFylSrzaygcjHqdQVUYL8ScAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -arts-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPz+/KSipPwCBISChAT+BARCBMTCxDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAMALAAAAAAQABAAAARTEIQ5xbgYAwJksFhhaFTVdeLpURYwAOL7cp6gpmcZHEQPGyIOLRAkiI4GTqmIDG5QwGihuRIBU8boasLzZbEd082QK7VkrvTwo2pvP5m4GxHP+CMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -background-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAAQCBJx6NJR2LIxyNJR6NKSORKyaTJyGRJyORKSWTJyKRKSWRKyOPKSKPHRKLEwiFDwSDEQeDGxGJLSeTKSSRKyaVLyaPLyaTGQqFFwyHGwyFEQWFDQKDDQKFEwmFMSiTMyiVJRuNLx+LOS2VOy2ZNSKTFQeFGRGJLyqXMymVOSiVOy6ZOymZKxyTEQODDQOFLymVKxuNMRyJOSeNMx2FLxiJLRiHFQaDDwOFDQODFw+HLSiVHxSLFQiFIQ+HKxmNJxOLJRSLIxGHDwODGw+HNSSPOSWNNRyFOyyVOSOPARihNSORKRSFLR6TPz+/MTCxKTi9JTW7GSy1Lx2THw+FNSOXJRWNISChASq3ASWxARynEQaFMx+JJRSJFRWVARafARSdHxeLFw6HPz+7Pz+5GxKJDwSFIRSNHxGNPz+3MSCPNSWTMyGNPz+9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAfXgACCg4SFggECAgMEBQYHBwgJCAoLggsMDA0ODxAREg0TCxQVghYWFxgZGhscHR4LE7GCHyAhIiMkJSatJyi+giApGCokKywtLhwvBzAwgiMxGDIzNDU2Nzg5OjsTghc8PT4/QEFC2EMeCZUARKpFRkdISUr09YIYET0qS0wqTUpOnkCJIkWQhxsbpsigUsWKkidXsGTRIkjHgy0YuMjoYkKJFy9KvoARFEZMBAg3UkIA6MTJGDKCBpQ5aebMGTQsx4xJU/FBBIxq1rAB4KTNS56Gkg7yEwgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -bell-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBEwuFLR6PLRqJHQ6DNyuhLx6LKxiHDwiDMSOXLx2NKxaHAQCBHxSLGw+FKRyLFRSHLR6NIRKFExGHNTStOzm1KyqfIRmNHx6PIyGRFxeJNzavOzq1MTGpKymfKyqhKSmdGxqNDw+FPTy7KyuhNzevISGTJSSXLy6jOzq3Ly+lJyabHRyNCQmDKSifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ6QIBwGCgOj8iAYEAIIJ+BguGAeCYTigXDegw0DI4tl/gQj4WB8hkAgUQeEsaEC6FULBdMRjN/QjYcHR4fICEiVn8jFCAkHxiHfiUjHRYfHyZmR4kdICAeJ5lCECgVKSorJysrLC1IEBgVFSgunSAaoWwTIi28DL5HfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -blender-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBDwiDPSyNOyKLDweBFQuDFQyDPSeNEQmDIxSHFQ2DEQqDARWjARGdASO5AR6xAQiPOymNAQ2XARqtAQKHOSmNEQiDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVqICCOQBCQKBkIA5G+63C+RW3UrIsSQt8fA+CMREAQgIkaUEdSsBK6hZBUeJ4YjRLQIKoOBgVAw/GAAAqRk+EJBkgmDQrAUDGxTAMBAgCR89oFOgF5YQAWdy8EeTeILyV5jY5nBAGFkpJ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -clock-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBPzerPyqXMRaBIQCBISChPz+/KSipMTCxPz+BMTCBPwCBPz+xPzCxMQCBISCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVxICCOQGCeJjkGwkC8RFEEavkax2G8dB0QuRyhhzoBg8MSYsncJXKJZIDZHCoWP1ogGIwGrtnSgUFmHLyNRHhrdpjRamnO/SYkromHdnxwnwkKVxByZW8DgQsQM2JcfwZXO0MBCZSVBgMuLzJaRZ0pfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -colors-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBAQC/MQCxATCxATCBPyqXPwCBPzerAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEMgZ6rwYBCFsvtXWeWA1DBU3ggRhomJQBm14dlJYFFXrbjKNwVDZ9Vw4TWWoKyCDgcNhyXQClVLpMmANIRAhLdGa+36j07GrfM4GiKTAGfsOlmYZfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -cookie-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBNzeDJR+BOzmVNSqPOSmBNSCBKRCJFwuBOSOjMRSTLRaXFQODMxiXOS6vIwiJGwKDHx6fKyqrMSOjNRWVLRaVFwCBJyanJSKhHRydPTy9PT29OyytIQSFPz+/JSSlOTGxIQyLMTGxNTW1Nze3Ozq7OTe3FxSTGxqZNza3Ozu7OTm5MzKzLy6vLS2tNTS1FRKPGxWRMSypJyOhKSOfPTu7LyupFQ6HMzOzEw+NJR2XKyOdFxGNHRSNJx6XGRCLHRCDMy+tGxONDwaBHRiVDwyLEQuHJRyVJyCZLSilIxiPIRePHxOJIRWJFwyFEwqDCwWBBQOBDweBKSCbHRKLHRKHIROHGQyBFwyDDQaBIxqTHxOLGQ2DDwiDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe4gACCgwABAoSIiAMEiY0ABQaHjoQHCJOECQoLDJeCDQ4PEJMRERITFBUWFxgZhKQaGhsKHB0WHrcfEQARGxu3HiAKIRgiIyQlJicoGym+KissLRIuIi8jJTAwJjEyGzIYKxszNDU2Nzg5MDY6OyQ8PT4jP0BBQkNERUZHOkhJSktMZDQBcsTJEyhRpOybcuSIEipVrFxBgEVKFigATkiRgkSLki1UgFzh8kRKFEQbN3aR0qULIT+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -date-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBPzerPyqXMRaBIQCBISChPz+/KSipMTCxPz+BMTCBPwCBPz+xPzCxMQCBISCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVxICCOQGCeJjkGwkC8RFEEavkax2G8dB0QuRyhhzoBg8MSYsncJXKJZIDZHCoWP1ogGIwGrtnSgUFmHLyNRHhrdpjRamnO/SYkromHdnxwnwkKVxByZW8DgQsQM2JcfwZXO0MBCZSVBgMuLzJaRZ0pfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -dlgedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTCxFxaXKSipPz+/AQChAAAACH5BAEAAAAALAAAAAAQABAAAANLCLHcrSLKOVccAuvMLf2Rlw0bYRKFGBGZWQioRc4kPKfB+qFFL9ODF+EmKxh6vZOreETCbLiMESkcxnIgATXK2XgFqmxI4SgvAP4EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -emacs-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBDQyNKSipPz+/FxaXISChMTCxCH5BAEAAAAALAAAAAAQABAAAANJCBASoXCFoVi8VdL6HHQeB4YjSAxnYQygSLzoSTjbEs9vMF86cbyH34NX+AELQ4zO+Nopm6cBC1PBEQwG6gd3SGo7Xa1STIb4EwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -email-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBGRWVAQCBOTWvKSShDwyLOTazOTaxPTuzLSilOzi1OzezPzy7Pzu1NTKtKySfPzy5Ozm3Pzy3PTq1NTCrMS2rNzWvNzOvMy+rLSmlPz69LSejIx2bPz29ISChPz6/Oze1HR2dOTi5Pz+/EQyLJyanKSipOTm5MTCxHx+fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaGQIBwSAQEAoJi8RgYEApK49FgOCAS0CFTsVAwEA2CIysMJB6QCEQyoVQsZOMFk3loJoeNAk4MGBQOFAQcDw8IfFoLDB0cEBMICIRxAV6NEB4aHwICk4wLIBYhIiObSxwLBSQkJaOlfQUFpCYnIyMoSVGbtQK3UQCbKCYprkq8m8S+uL4AfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -energy-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBBQSFASiBHS2/JzK/KzW/JzO/ASWBATCBASKBHy+/Hy6/ByuHASCBAR+BATOBARyBIzC/MS+BASeBASOBARaBFym/Pz6BASuBEyW5AR2BJS+7Gyq7PT2BARKBDyC1FSS3IR+BJyaBLy2BPz+BCxuxAQ+BDw+BOzmBARiBCxyxBxetPTyBAQCPAxOpAQ6BAQ6jAQ2fAQ2hLy6BAQubAQydAQmXAQmVAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAahQIBwSCwaj0hAYBkQBJDLAaFgOBCWxcAAkVAsGIyG4/EUBh4ICCIicUAgkwTZjKBULISL3oHJzAMaDhscHYEODhMeExEfSyAhGxsgICIYHiMWJCUYSyYYJw8kIigoKSomKxgmSywYfC0YGCJ8rSwuS7EYJBYYLi+xE5tkARMoMCoYEzEiJDIzMjQiSzExMxGkNTY2NTc4NTNPTOLjWElHfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -enhanced_browsing-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBOTWzIyCrFRSTMy+tCQmVOzi3ExKhAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARFEMhJq6UhyHy3GNmnAeNEFAZwpuRRBiIMkkOBjKuKTsHtgbISybTLYX6hGc+lSxk3tVtMVOkFck9MMNjB7jqkEQdMlvgjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -filetypes-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMT+/ISChKSipPz+/PyqXMTCxFxaXPzerPz+xAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARfEEgZqg0zV8EHF5XWEUMxkBwGBB9REIZLfBgrkEaen+l6F4cYgpA4vEC+ASIYSxQRnlrncEgoFFQP0laCHpSmnk+AEJQ8ZeRkw0mDVJT3JZQZw+trC77Ouu8pfn8AfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -fonts-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPz+/KSipMTCxPwCBFxaXMQCBCH5BAEAAAAALAAAAAAQABAAAANBCLoQ/C+I4GAMY1ZGN80UJ2jA0BFbUxhjF6BWsQroawEyWhN37vKxQo0ChPhOPaGDIhhADr5FinE4TG5PrBbiTwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -gimp-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChPz+/FxaXMTCxAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM6CLrc/izAJVWoD4MgtL2R0F2k6HFiOgjDSRBq0FLUKxYDTmKBnf6gGqz3egWFhEvSQ9kxJ9CotOFPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -go-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBERGRFRSVDw6PDQ2NDw+PPz+/ERCROTi5Pz6/AQCBKyurERGPOzq7ISGhNTS1DQyNLSytExKTLy+vKx+RGRiZPTipEQ6LOzu7PT29JSOjOzWlEw+LIyKjIx+dLy6vOy6ZEwuFHQ+DCwqLGQ6HNSWPMymfIxmPMyqjKSipCwuLMzKzHx+fBweHOTm5GxubJSSlAQGBHR2dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAadQIBwGAgIiMXhgAAoGAwH4QCRKAgVCwSB8AwwCo2n9ZpwMMSFhyEBGQoLEa5BMnkO3G/Kef2sMIdfCxYXT2oGGAIHCk0ZCBobHE8dHk8MFR+LgSAhXSIRdmNCBxScBiObCAYZI25wJE8SJSYECVVDCg8dERchJygPKSqsQgQNKwQFCw8fLC0KLi+LxH9YMDFX0ngAzzLZ2m4K3kN+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -gv-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAIxhI+pwaHZ2jNMWMFmvXk1GznHF4DhWF4cJlKpynpwB73ms3Etiq00EAr+hJGJ0eAvAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -gvim-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBAT+BPz+/ASCBMTCxISChAQChCH5BAEAAAAALAAAAAAQABAAAANUCBDMEqupNWoNJNgBV/mfwYCFqASgmA1h57VaO71lXLtPytZEBggZ0E7Vy2BQJEaRcDghP6iGb/IsNKBWKghZzb5EUau4g1KFz1QId+ydRRZwiD8BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -help_index-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBPwCBAQC/IQCBATCxMT+/Pz+/ISChAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEIRJJZ1ACjF3GGAYaKNFDNfXldLJqmQWcKhcW6tkl1NhFJhdRmIwHIq8m8R3LAIlykCxiZQNl8XsU3eVZg0Y2LD3CyAQlassbEaz1N32Gz5m+SMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -hwinfo-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBBQ+XBRCZAw+XAw6XBRCXCRObCxihCxqjCRijBRSfAwyVCxehDx6nER+pPz+/BxKZAwmPFyWtGyevCRSbBxWfAxGbHSqxGSatCxulBxahBRKbAQiNEyKrBRKdAw6ZAwiNESSLCyCDBxWBDRulBwyRHS6ZDSWHCyKFDQyNCxqlAQmRAwiPMzalPyCBMQCBCx+DAwuRBQqPITCdFxaXCyOFAQeNAwmRAxKdPz6/GyyVMTCxKSirAQCBGzKZAwqTAweNFyuRDyeJFzCTITOdAQiPAQaNHzCbES6NEy6PESyNDyqLDymJPz+xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfBgACCAAECAwSDiYMFBgcICQoLC4qCBQwNDg8PEJERlAYNEhOaFBUWnokBBw4SFxgOGRobCxyJBQkNHZoPpR4fICEiIiMBCSSYmgoKFgslJicoKQQKCSoZmgW+KywtLi8pMDEbFRqaAcwyMyc0NSkiNjc4ObsrKyU6Ozw97j4lNhGSfsgAEkQIDxr7YAwh0qKIDSM2jgRpgbDHPhFIMiZRsoTJkhMgobUDMKKkySYjUKockYJSypcrWypKQbOmTT+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -icons-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBPz+/ISChIQChFxaXKSipPzCxPzC/MQCBISCBPyqXMT+/MTCxPwCBMQCxMT+xPz+xMTCBPzerPz+BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAV+IBCMZBkAqCgMa8uyJxoMRFHUtz3Eqk0MBhxBwJsRaqTcLhUQ3AyHAMI0EtEI0pGrpU38SANFQazYGY+LqUChYDQUxCbB8YjOFJAIpGEePOpZAhITIxJxAg8JDwQPMxISERESfXSVTRIQAZKHLyuOFI8US1RNnTApqCJUAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -iconthemes-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBPz+xISCBPz+/ISChPz+BIQChFxaXMRaBPyqXIQCBPzC/MT+/MTCxMQCxPzCxMT+xMTCBPzerMQCBPwCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAWLIBCMwhgMJqCKRBEIpWAMBRGsQXG8sIAiLpwNZpAFEAcbjlc0OI9BVcAWSDgHT9MtF1AsZrmamNpNBAyjwgCxpo0U5h1jOhg0HAMbPHB4QNIDEQIRDi5xfgFzBBITIxJUBQ8UD305EhIwEi45FQ+dFVMSES+PIy2nLgUSBpcGQVomqKc3K7WwIwB+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -input_devices_settings-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MTCxHx+fISChKSipKSirATCxAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARQEMgQpL03iEEx1gOxdR5YbCJXZUbqjusUhGitZkFri0VFUodXoTfjWCi6oY8Skxl6k4FhxZRRRxMC1TBdWn0CAbcZQFAH4WnGjDPiPICYPwIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kab-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChFxaXKSipDQyNAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANICLocHiyqIMQYUE5Ses8S1V0FGInFIJTalKpsS5FxKDxB/EzV4GUBQsXR87BQnRtNtxphfJ9FAAqbRqUXVfPaMH5MDRx44U8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kappfinder-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBExOTDw+PExKTPz+/ISChAQCBPz6/FRSVIyKjJSSlIyOjGRmZNTS1Ozq7Ozu7AxyzPTy9ERCRBQWFIyqxPT29AQ2vOTi5IzG7DR2zNze3Nza3BQSFISy5CRyvBQenISmvBQitMzOzAQGBAw6rDR61Hx6fMzKzAz+/IzW7ASyvCwuLMTGxMTCxBwWFDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAahQAAgEBAYj0ahckAoEJ5QgkE5fBYO0SeCOigkFE2DeEFgUAUNBwGBeBAcCMHirF4gnhBCBCE5PydqBBQVFhdTSgJPBk8YGRQaG4dCiQQcDh0eHyAhIiN+BHYXJCUNIggmfhUOAQgbJ6YCKGcVKSUaChwGHCYqCyuIDhkhGyIsLcccCL6TFxsNJ8fRLS7KvyNi2GIrAQwK1AsvVOJULi4AfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -karm-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBPz+/ISChMTC/MTCxPzCxMQCBPwCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEIRJa5Ui66H3FETHdcTwdcIofkVbUIJbmAEoZl95aoXxUrNdpnAIDFomgRA3yxxhIdxAlaKhAgUNYshyYVGxnMZInS6VzVSQPG0bkWaJZT4B+CMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kcalc-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBATCxARCRASChAT+BMTCxFxaXEQCBPzCxPwCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARPEIBAq5U4iM17wJMwjORIfJkYFCs7nKA2rJQLp0Su66ikGcAg8OYTGA6BA/KAIIYsFudPGJQal8uAFVqxUg2JxBYbUGh7k5J6BppwKyB/BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kcharselect-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChPz+/MTCxAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANBCLrR+zCIGWCcI1cLpNCa5YHZsCmj2QTlxrZmmRFVSs4E7X13TqMTXsl36gSHuSIQQ+QYP0kncPCTokzWh3LhTwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kchart-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBPz+/ATCBAS6BPyqXPzerPz6/Pz+BPwC/MQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARcEMgJQqB4WiFulhvXfaEwiJ4mEgExFCMVcENgBEXepdVhG7dcABGr/IJCQ8ICAt4IUIuSKAW2XMOD0qC42AIHV4277YIqKHKCy5txbIoyDy2Nr80yjyVwn5OYfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kcmdevices-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPyCBPyqXPzerPz+xPz+/AAAACH5BAEAAAAALAAAAAAQABAAAANMCLrcHjA6BcW4Q8AWLL7EFSwdOIRoOAKBiZ5EPJYvBMeDba5BQfg52ik4KPgKOVYqZiwYjLzb7/c0JCnSo3VFasFEXE5kMymbzwp/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kcmdf-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMT+xAT+BASCBATCBMT+/AT+/ASChATCxPz+xPz+BISCBMTCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEEgZwrwYBCFqvhs3DNYXjChRlWBRjIRqGN4UuEUczMZxsDeXykdEsDQVVSLhQxhBCkVlmXA+KVHFYhFYOoHbMGN6pTQaW8YYiQmcG+q16a0+Zipw+4e9B/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kcmdrkonqi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPzerPz+/PyqXMTCxPz+xAAAACH5BAEAAAAALAAAAAAQABAAAANKCAoRy+6pIESkVuLaKl8b53lOaA3EyIXBUBjpWHKDYNhxNrWv/aaRiWBwKwoIDZCH2EN+TMQjyzR0yhgqiyo4vT4wl48E8g0C/AkAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kcmkicker-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBFxaXPz+/ISChMTCxPzerPyqXDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEEgQqr11AjG6/4FGDEVZBOapWSXbToFhoKkZUjJGEEJvyUDDYQaKATElBOJklB0OgY5SWgnmpFJm4PkMjDxLFYXFGSCyN8mocDaD0xsSO6wUS6K1FBzDD/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kcmkwm-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCRiXCRaVPz+/CRmZFRWVISGhMTCxESSjPT29DR6dDyOhDyCfPTy9CxqZOzu7Ozq7ERubOTm5ARehAxefPz6/ByaxBSOvBSGrAxynAxqlBR6nBRylAxmhARWdFxaXCH5BAEAAAAALAAAAAAQABAAAAWHICCKQTCeqCgMhJCihXEYSPuKRWIoC6PYsEZikHA4FA4CEJdoJh4QgXRwiOAeQudDIpEZIpPwhCImhyGGAmBSOVgumExG055w1ZPZhpPpUDwzExBqAAUDhxUVTQ0QEgWOOIcDiU1QjoSFFYiKDZYFmAWJlE9bkCM5iouWpiIfBa6frrKYAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kcmmemory-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBISChAQCBMTCxCH5BAEAAAAALAAAAAAQABAAAAI6hA+Bu+HCmgiiRuNoHZBRXQlc84TmcHzm2WVryE1YvMaZIdbVd2zw7lj4bDKGbxK8hHgX3K2JUDD8BQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kcmmidi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBFxaXKSipMTCxPz+/AAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLEL/pDJAONs1V2W1ebWJ46kKJxomi5D2QZEwRSyVMNyngf7Eg8FYHAIZMRoyCSNMSA0n85oszTxJwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kcmpartitions-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMT+xAT+BASCBATCBMT+/AT+/ASChATCxPz+xPz+BISCBMTCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEEgZwrwYBCFqvhs3DNYXjChRlWBRjIRqGN4UuEUczMZxsDeXykdEsDQVVSLhQxhBCkVlmXA+KVHFYhFYOoHbMGN6pTQaW8YYiQmcG+q16a0+Zipw+4e9B/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kcmpci-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAADQyNATCBASCBKSipFxaXAQCBMTC/ISChAQC/IQCBPyCBPz+xPwCBMTCxPz+/AAAACH5BAEAAAwALAAAAAAQABAAAARVEMhJqww4a33F+EL4jUI3EEXoEWzaFbAKzyUQeLihDqrpHQhBQkHyqY49iWCxbDKfJQbASYUCpJbslcHter+NQ3gsLo8bBYd6zWYf0u24GjWr22f+CAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kcmprocessor-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipMTCxISChFxaXDQyNAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLrc/jDGQCWgIleH88jCdgXgB4JVQJxsVgQXIQvrWdwwJc/0jcOG0Y7gqwQVQR3R+EgyJcGjZUoF+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kcmscsi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/MTCxKSipISChAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANCCLoQwZAFIV6UYgxi79Qa52WDE3bKV6YOpFpO3L5pJcckLBB8/wQEDezWAQpZqIWxFNAUkqkg6HmJOqGuArUqwfoTACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kcmsound-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQC/AQCxFxaXAQChAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLrcDiE+F4SQU4UBLH6VoHjT1okQR6mnuTYuJMWaGlkXW2u4QOipRYDws82AjJsHKez9MgrigAkF+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kcmsystem-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBGxqFAQCBPz+/PTqtOTOfMSyPNze3Ozi5KyeLMTCxMzGzKSipOTe5MTGxAAAACH5BAEAAAAALAAAAAAQABAAAARfEMhJQah4ihFunsFAEIVXCVJACIJhoBK6CerawsA8HAhbuAnYZrBDKBYMWpCy4S2QSRazyBIwrrjcoNFQzK4KR1bQcHhZjGM2BgWLMYJ2enForHPJtNj+kfHvcB8AfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kcmx-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIAAAASC/PwCBCH5BAEAAAAALAAAAAAQABAAAAIlhI+pm+HB4HkS1flszOCq7C2Qw0wdJ2Lk16BGeK5dSZX2jS9+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kcontrol-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/CRyBBxSBExOTNzipOTijOz67NT21LzutJTmlGzaXPz+/OTi5AQCBLy+JKSiJES2NES2LESyLDQyNLy+vLzWhLzWjLS2tGRiZDymJASChIQCBDyuLLzShDyiJMQ2LATCxMQKDDSaHDSWFCQ6tMT+/PzCxLzuvCyKDDSSFKyqrMTCxGzabDw+PISChASSBAT+BDzOPNTW3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAacQEBgSAwIBsikkFAwHBAJhWBBpTIaAccDAolEJIKJWEzBMiuWCyYjaLjd5exDIsE02A1NY9OIMzkcHRkebW99WFoVahkfbSANIYdCBh52IiOFb2VCByIWIh0kbSUNJpIBJ6CgKJlwDUIJKSooswIUt7crrwEsKC2+rC7CLzAuuzEoycmtbgAAAtDR0DLGztYALbm426/Wht9vzn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kcron-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAADxePARCBAQuBNTS1OTi3LSytAQeBMTC/Pz+/AQCBOTi5MTCtISCZAQiBISCfKSipFRWZGRiZERCRHRyZMTOxDxOPMTCxIyCjCQiJAQOBLS2tAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAWFIBCMpCCQpDgQLFusLVEYAXEgOJIQOXIkNF5v19MFWQrCgsFYxIC1InEYvOWmuF9QKrw2aoSkYtksOBwEaBeXeEAiiIdD8rUNJw8EBUGobIcQFggXLglgCohLGA95CQMOGVFDEQ4YGhERdAEWCZ2dDwsSEHMOEA0ABqmqGRkGDQ2pDRV+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kdevelop-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBGSKXEx6RFR+RFSORISidJzCjJS+hISydHSqZDxuNIyuhKzOpLTSrKTGlHyybGyqVDx2LHyedKzKpLzWtMzexLzavIS2fFyWTDyCLCxiHNTmzPT29PT69NTm1GSWVESKNCRmFOz27Pz69PT27MTKxJymnIS6dESGNDR6HFyCTIy2fNzm1Ozy5JyenISKhISOhMTKvESGLBxaFOzy7JSWlIySjCx2FBxGDIyOjOTu5BQ+DFSGRDR+JCx6FBxODDx2NGyaXCRyFCx2HCRqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAexgACCg4SFhgABAgMEh4MFBQYHCAkCCocLDA0MDgcPEAQRhRITFBUWDAcXEBgZGoQIFBscHRweBgkfICGDAQcUIiMdJCUmJxgoKbsAKissLSQuLzAxFgQyKTOCKgk0NS/fNiQtBBk3OIIEEC0cMDkvJiQ6ICk3O4M8FCQcNjAcJBM9fPwgBCQICxI0XtBgQeCGEHuEFGCYwILFBAJCHh7SEGJIRiI/IDaagSNko5OF/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kdisknav-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBERCBBQWFPz+xPz+BISCBERCRPz+/OTm5HRydAQ+XHR2dKSmpNTS1Hy+1AxypNTu9ITC3ARypExOTFSyzHS61JTK3MTi7CwqLBR+rASGtDyixFyuzDw+PAxWhAxmnBRypISitCRujAxelAxmlFSixMzKzCRqlMzOzMTGxMS+vGxubLy+vLy6vKyurCwuLGRiZLSytFxaXJyenGxqbDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAafQIAQEBAYh0jkQEAoFAxJ5EGAaAoSh8BBEUBSrQtGw5EodwHfgsBgeEAWijGW2XTaDRHJJExBrwl1AhUWFxgRDwdCGWkCGhsbHB0WGB5CjB8fICGOGxaJaWwGIiMfJCUTJh50dk4ODiejHyiff2oGDikqK7osiUIGai0pJyouxi+9v2pEMDEyLTIyDckCy0gBMDM0DTU2flFDARk3AH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kdmconfig-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MTCxISChMT+/ATCxASChFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMg5gw00yyDGIAR1YUDggeFWFIZhnSBZrsZxdIOFEGTA2oeBAHeyuGwvzxBlYdUOLROMFzDQntJPrNoqAKUBaqnV+k57ZORruykHDj2LqIzUVKp1u0iuB/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kdvi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/MTCxCH5BAEAAAAALAAAAAAQABAAAAJCRI4ZwCYPo1gsiIHHxY86KXmWdiGkCA1Wp6Htc07NOsEv2oVyldLHbuBgEhORJhOxGEkkiLJybCZ3iqrD08hmF/4CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -keditbookmarks-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy+vERGRFRWVDQ2NKSmpAQCBKyurMTGxISChJyanHR2dIyKjGxubHRydGRmZIyOjFxeXHx6fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVbICACwWieY1CibCCsrBkMb0zchSEcNYskCtqBBzshFkOGQFk0IRqOxqPBODRHCMhCQKteRc9FI/KQWGOIyFYgkDC+gPR4snCcfRGKOIKIgSMQE31+f4OEYCZ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBASCBPz+xPyqXERCBARCBISChMTCxPz+/FxaXAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARXEMgpQ6B4WnGzDgJHWWMYdkAwEF1QFKe2oqDZztr7GpfKjrvAAeFDpQq8ISIRYBotSoTUkiC2ostqYps49BSKIVfaBbcC4MMWcTAbU+iw21NBk+gjuj8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -key_bindings-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChPz+/MTCxAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANMCAoRy2IEuYIQDsrBld0NN4XaJF5iCppWxBGtCscEAbkDfH2wh+ogiudD5AhvoZWoJEFtckBTE1dzKKfQjMtUjfQUzizjeBN7HgB/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -keyboard-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChPz+/MTCxAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANBCLrR+zCIGWCcI1cLpNCa5YHZsCmj2QTlxrZmmRFVSs4E7X13TqMTXsl36gSHuSIQQ+QYP0kncPCTokzWh3LhTwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -keyboard_layout-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBPwCBMT+/AQC/Pz+/PzCxKSipISChAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARSEEgZqr1hUjFIEQXBZVogDt/XYWxgoEVFzEUt3MGNm7SND4aarPfBFQYCQmtpiTErh+ahMK1SqVHoYcvtUptX67SWDXTPXWltva5q0WfEs+WPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -keystone-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTCxISChPz+/MT+/AAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM/CBDcHkoFQasVUIrBe8fRNDwMAWpjUThmtmxk0IYwOaPx/V6XG3hAjmsRa0Qkg6NSOVo6F0nG88g4TUNDpT8BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kfax-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBPz+/MTCxISChERCBFxaXPwCBAT+BARCRAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARVEMhJQ6C4imEzDkLIXR4ADqFAThYRoFu4ti6YbhfdFm+aEzWgAWhB5QyGAMEwWA4PlpyFCWwOkAhCgla1EqxXKbD7vSJnyuUXyV5JuOxtqZV0z+3+CAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kfind-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBExOTDw+PExKTPz+/ISChAQCBPz6/FRSVIyKjJSSlIyOjGRmZNTS1Ozq7Ozu7AxyzPTy9ERCRBQWFIyqxPT29AQ2vOTi5IzG7DR2zNze3Nza3BQSFISy5CRyvBQenISmvBQitMzOzAQGBAw6rDR61Hx6fMzKzAz+/IzW7ASyvCwuLMTGxMTCxBwWFDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAahQAAgEBAYj0ahckAoEJ5QgkE5fBYO0SeCOigkFE2DeEFgUAUNBwGBeBAcCMHirF4gnhBCBCE5PydqBBQVFhdTSgJPBk8YGRQaG4dCiQQcDh0eHyAhIiN+BHYXJCUNIggmfhUOAQgbJ6YCKGcVKSUaChwGHCYqCyuIDhkhGyIsLcccCL6TFxsNJ8fRLS7KvyNi2GIrAQwK1AsvVOJULi4AfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kfloppy-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBISChKSipFxaXPyCBAQChMQCBPz+/AQC/MTCxATCxAQCxAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEMgZgggz5zAIBp9GFV8oSqRkikFanapBVgccGAiJBDWL74jd4UUxGBI/IcJQMigSimPSsMDcEFCFVkptKhCDgSBB7m4sA2y5eqqMF2YYKMBgys8nfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kfm-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBGRiZERGRPz+/MTCxAQCBMTGxPzerLy+vLy6vPyqXLS2tLSytKyurKyqrKSmpKSipJyenISChJyanJSWlJSSlIyOjIyKjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAV+IBCMZCAIQKoGw0C8MFEUqmgYrTwXL50GhtegcCgedr4AIpEYHhQKopEWSCwYw1fUeBQxGo3hiBCIUR2OxyAwG8OoD0hkICFABMiZKBKZ0GNkPiIUFBUuEoiIMisVFRZ/MWwqAheVfxICdZIpmZZ1kYIAMxcuJWWhKXl5Kn4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kfm_home-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBDw6PBQWFCQiJAQCBFxeXMTCxJyanDwyLDQqLFRSVLSytJSSlISChCQmJERGRFRWVGxubKSmpJyenGRmZLy+vOzq7OTi5Ly6vGRiZPTy9Pz6/OTm5ExOTPT29BwaHNza3NS6tJRqRGQqBNy6pIyKjDwGBPTe1JSWlDQyNOTGrNRiBGwmBIRaLNymdLxWBHxGFNySXCwqLKyqrNR6LKxGBNTS1NTW1Jw+BEweDDQ2NAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaoQIBwCAgIiEjAgAAoGA6I5DBBUBgWjIZDqnwYGgVIoTGQQgyRiGRCgZCR1nTFcsFkHm9hBp2paDYbHAsZHW9eERkYGh4eGx4ag3gfSgMTIBshIiMkGyAlCCZTEpciJyQjGxcoKUQBEhcbIiorLB4XEltDrhcaLS4vtbcJra8bMDHAGrcyrTMXHjA0NSypEsO6EzY3IzU4OdoTzK0BCAkDMgkIOjJlAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kfract-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBAQCxAAAACH5BAEAAAAALAAAAAAQABAAAAInhI+pyxudwoNACiFbuBzHt3XeEYbiBF5mN5HpyayqVrY0hdj4vvgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kghostview-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/MTCxCH5BAEAAAAALAAAAAAQABAAAAJCRI4ZwCYPo1gsiIHHxY86KXmWdiGkCA1Wp6Htc07NOsEv2oVyldLHbuBgEhORJhOxGEkkiLJybCZ3iqrD08hmF/4CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -khelpcenter-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/FRWVExOTKwCBJQCBIwaHFRSVPz6/LxSVOSqrNyanIQKDHwKDHwCBPz+/OTm5Ozu7JwCBMRKTMxubLxCRNTW1IyOjDQyNEwCBGQCBJyanMRaXNyOjKQODIRydKQqLOzCxEQCBNze3Ly6vJQKDDQ2NIQCBCwCBGwCBFwCBDw6PNyipDwCBKSipEQ6PDw+PJR2dMRiZHwSFPz29BQSFIwODJwuLMTGxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAabQIBwSCwaAQHBgFA4Cg2BwwGRUCwYxobD8YBEBpLJoEGMUA4VywWTaUQOmstww+l45MKM5/DAf0AIDSFFBiIHI3IEHCSDRgEOFSUAJhQNJ0coYikAKpB4RQwrJiycWy0uRQ2AKKQAL3wwKEMCMDEdGEMvWxIKDTICIzMQKZdDKQ0dMSAxBzMPGjRGGCkoNTYaNzTRThgnJ9pFfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -khexedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTC/Pz+/MTCxFxaXPz+xPyCBKSipAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARZEEgZ6rw4CB3wrJUggt03nANIoCUQoDDcvqJAaHXqunBxywFDZWArDHy4lOEwTBEKgYJRyeQJEIEnYrQsvU63abBKIYq2m+4s5mTeTLVRSFdmyy6kvGXijwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kicker-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/FxaXMTCxDQyNAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANECLrcEDDKGYQV4+qbie9eGIJEVxTe+QmjUFgnXLLr615oF8x2v0I8DWpF2GV6slkLKSMdYT4nS0WgSkXYAWUbcXgX/gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kiconedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwC/AQCBMRaBPyqXPzerPyCBPzCxPwCBPz+xMTCBPz+BISCBMT+xATCBAT+BASCBMTC/AQCxAQC/AQChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVkICCOpBicZQoEwjAE6hgQQwvH81AU8OnfuR3QYDgcgAKhjGj8+UgzQkHHw+2mQlQpgEAkFInEYnGDhr/h8VPGYDQcjcZj/iiv4u84vQ6FQCISERETgxN2AX6AgoQThlBOkCR+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -killustrator-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBAT+/Pz+/KSipPzerPyqXAAAACH5BAEAAAAALAAAAAAQABAAAANHCLrcGzBK+YK4OAcAx4AXIURj4J2fJYhWh35pOHKoG8+mFxS5HimmXU8HBH4MQyJD+FI+kM3Ug9eENALQk9VhDW4c1y/YnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCxCH5BAEAAAAALAAAAAAQABAAAAIghI+pFrHbXmpRMmoBxXB75IWcKIKk022ZunJtdlSw5BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kjots-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPzerISChPz+/MTCxMTC/AAAACH5BAEAAAAALAAAAAAQABAAAAM8CAHc7kGsR1mc9d1Md/icIgXDB1YXMZQnZBJEIbdKABPGTbSfnuc8mw8W1OlotYER2fgod5iMKRqiNvwJACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -klaptopdaemon-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/KSipAT+BISChFxaXPz+BMRaBPyCBMTCBDQyNAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARtEIBAq5w1TBGEGIM2ESTlVUNhaAFJUAcXgAXCZkFyJEoiIArWYQjj+Xi2yfBA0SU6CuAts4MCk4EdcxbznFhOCsjrWUxRhbRBBk48Z6kCZ2GeuN9xucF8FqcEBnt1OW4saSp7IoRPEjgiGBV+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -klipper-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFQyDEwuFEQuDISGhFRSVEQqFEQuFPz+/PTy7Nze3PT29Ozu7DQyNJx6VIxuRIRiLEwuDIxSFHxSHKSipLSytGRiZGRCHDwmFOzm3HxOHIRWHOTazHRCFHxOFEwyFNTKvHROHFxeXJRqLIxWFFw6DFQ2DNTCrIRaJJxuPMSynHRKHIxqRMSqjGRGHMSifJxeFKyGXHxKFLyaXKyObGxGFEwyDKyOXIxeHKSOdFQ6FIx2THRKFFw+FKx6NKRmFKxuFLyCPLyOTLyabLSefLyijFw6FJRmJIxWHHRGFFQ2FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfFgAAAAQIDBAWIiAMGA4IABwgJCgUICwwKDQ4PEBGCEQsSEwUUFQQWDRepGJ4ZEggIDbENrxobAZ4cHa+7uxAeH4IGICEIIsbGFggjJCWCJicovLwpIcAAGCorCBbc3AoILB2rgy2u0q8OLrcAJS8wr8nJrzEy6yUz79sivDQ1jQA2buB4tU8eghw6xgnYwePcqxcdbAjq4eMHECA+ggiZMYRIESPjShyBgQPJBB48OsiokaTDOoACItgwYULJhw8BbIzzEwgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kljettool-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MTCxKSipISChFxaXATCBDQyNATCxASChAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMg5Q6CYBiFsxhvXXZklimRlDWenBQNRzKJRXCsxHPFcIDGcILYbGHqzAY41NCQSiuNgMLPAmNTElFoFWKecqe8mCRAIq6nt5imb0TC2wZByny3zdslMr3+8fgB+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -klpq-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxFxaXISChPz+/ISCBPz+BKSipAT+BAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJqwUh3xqEz8EWDKT3aVNAFAVBDqYQYitbjARhGDJt34Nc4SBAZAomoDAhKAwyTZZp5XE+O0lp9QVFeLNWUpflJXheTww2ijiLKSBPW/C+xOmzjQRU8UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kmail-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPyqXPz+/PzerMTCxFxaXIQCBPyCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMgJgrWU4iAGIUFWFYMldF+okUPJeeAUDEY7FFzXqnNdkIGDgHAKzWgsDuJAFBhbtd1peTAWDFjpaZg6skonYfOZzC3HlduuMj1UZUDZ6RMblTTDokylQYsyFwB+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kmenuedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxAT+/ATCxASChPyqXPz+xMRaBISChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARLEMhAq5UY2B3yFGDIYcFgnuNErGwQCl1VzHSJBsbBUSxBIbnEC0YrxICHhFKZCiATlldn8gSlNE7YEurRQHdd19Aa3m6nmV0F448AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kmid-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBKSipISChMTCxPz+BAT+BFxaXPwCBATCxARCRAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARUEMgJgqVYWsFv3lwoeFMwEIQYkkFhouoQlIFhHvCgz9oxjoeDblc6+Q4B4ZBXCSBQx+GIZhNAOURaACsYypq0kNeSSLC2uxm5fGZqAgqFO0OjT/wRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kmidi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/Lz+/CH5BAEAAAAALAAAAAAQABAAAAIzhI+By7oBo5RH2GvDRRhre0xiVHXZVpqfEI5iKkQxalzQIIPGhI+pSAN4cjqA68VIHvwFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kmix-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXAT+/DQyNATCxMTCxPz+/AQCBKSipASChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEMgJQqCXziDG2JoUEENhZBkmHIWJVptAmqcIW/Js1MiF56TBzkckAAcHoa9nMRKeA4TyJk0knsHhTeK5khBaH2VwLYVh40TJhQ6RzeIQV32Quz8hfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -knewsticker-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBMTCBPz+xPzCxISCBKSipISChCH5BAEAAAEALAAAAAAQABAAAANTCBCsysEpseQDI08KSPdYNmwUYSraUDRC64iAMbIuLGtOS423BhKFmgj2C+5EhsOoWEsOnB0FsKl0jnLUp3IG0O2sMNpRVHBAJpjyA8KOmNsMfwIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -knode-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAABwaDAQCBPwCBDw6NERCFJSWJAwGBLy+rPz+7IyOJJyeLBQWDIRqZIxydPzCxDQuHPTWzOSypBweDKyqLJyWJKySjPTOxKSCfOyCfOyKhJSSJJSSLFRWTDw+NOSqnOR+dOyWjOzGvNza1ERGFJSWLLy+ZPTGvOTOxOSSjOy6rLSypJSWjKSinAwODHR2HISCJOTWtPTe1Pz+9Ozu5IyKfNzazPy6tExCHMzKfPTy7KyupKSmnEQ2HHx+HKSiLKSiJPz65OzuzOTmrKSmLIyKJLS2TPTyxOzuvNTSlLy6fHx6RLy+RJyaNLS2NNTSnLy6lLy6dMzKpGxqXCQiDKyuNMS+PLy6VMTGPMzKrOzq1CwmDLy+PMzGTNTWxMzOxERCPKSiNCQmJERCRERCHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAQABAAAAffgAABAoQBhoOEAgOGBAUEAocBBoOLBwgBBAkKBAsMAQ0ODwOWEBEBEhMUFAQVFhejCBYYGRCGGhsKFBwdlh4fICEIIoMjBRQkJSYnKCkWCCorLIMtLgUvCjAxMjIzNCw1KoY2NxovFDjbMjk6OjuHNjw9Pj8lMggIQEFCATaDBD4JhhApgsDIESFIkigxJGDEkiJFmDQB4uQJFBxPokgRMIVKkypFrFxBgCVjlnuXtARQUGTLFS4yunipgRLBF0I3moChgsQeAg5hxDBMNCUAlyAcOCBKxJTQmKVNBfgJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -knotes-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBISChMTCxPz+xPwCBPz+/ISCBPz+BMTCBIQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARIEMhJZQg1z6vzxR0VCKE4gCE2lhcRnF1LuAInBjNRfDMn64WCQRCcHS6IRE6nyB0Sx0ACkcwloFiflKp8Pm2bbRblkYJZHX8EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -knotify-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/Pz+BPyqXMRaBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMyCLoQznAFIUKE09krZ+VS9XBaMBBbZKIBUaSYa40kTIPNhyvazje+G2gFI8l8jaLCnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -konqueror-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxONCROfCRKfKx6LNy+bNTOpGSS1DRupAwyXBRSnPTSjPTqvOzqzMzSvHSSlKy6ZDxutAxCpBQ2XBxepLTKvPzqzPzy5OTShLS2dLSqRFR2jBRerBQ+jOTixOzetNS2XHx6XDR2tCRexBwyTDyKzOTavPzq1OzKdCx23BRKtCQ6VCQmHFSa7IyirOzSnGSGpIR+bFSO1DyK7DR+5CRixBw2VDQuHFye7IS27NzGXISuhEyS5DR25BRWxBQ+lBQyXCQqPCxSfGyu7GyerKy2ZFR+rERqfCRmxBROtBQ+fBwuTBwmNDSW9JyabLyqRIx+TExSXBQ6bAQCBBQ6ZBxapDR+zBxq3LyaLJySRHxqPGxeNBxGbCRmrHRyRERONDRKNDQ2JCQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAeygACCg4SFhgABAQIDh4MBBAUGBwgDCYcKCwwNDg8QERIThRQVFhcNGBkaGxwdoYMDHhcXHxggISIjEiSvJSYXJwsoISkpIyorLIIDLS4WLzAxMjM0NSo2N8o4OS46OzwzPSk+P0BBgkI8Q0NERUZHCEhJSktMgwk4Qy1NTk9QUVJLphCiUsWKlStYsmjZQiJgIS4KuijQ4iXAFxYCDVFJwGUFmDBhMjYSw0KMyEYoBfkJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -konsole-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXFRSVPz+/PT29OTm5OTi5DQyNDw+PERGRExKTHx+fISChIyKjHRydFxeXDQ2NCQmJBQSFAQCBERCRMTGxHR2dGRiZExOTDw6PCQiJAwODCwuLFRWVOzu7BweHAwKDCwqLHx6fBQWFGxqbGRmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAanQIBwSCwKAwKkMslEAgSDqDRKqBYKhkNgcDggEorkMrDQchkNhuOhgEQkk0l5S2lUGpYLJqPZTAwMHB0DCmhqAW0Rfh5zAxgOkBcCFAcfIBMECxwBBAEPFw8dChkhcBMDDAcdnQqtFKSWcQMimx4dGRkQBxGxsg6bBQEawx8jl3GnJFoFHRNXVVNRJYIFDAsL1tgiDiQXFx0HABwcXeQH5OjkRutEfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -korganizer-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBASCBISChFxaXPz+/Pz+vKSipLy+/MTCxPz+BPyqXLxaBAQ+BPy+vAAAACH5BAEAAAAALAAAAAAQABAAAARmEIRJqw1ikM37FsFQjMZ4lAVKBESBjCYsFiuBkkk5KG1dJL+CZjBYMES+l2x3RCBqtxHBOFD6DkHmAQj0yXgzmFdIhY2erBJBwTiczDSWq0Eg1gvYrvyHxcMdUEojYWIYHocbDX4RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -korn-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBMTCxPz+/PwCBMQCBFxaXISChKSipAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARSEMgQpL03CEExDkO4dR6ghSFBkJa2CSlRcNX0voNQ5Ebn3pvdAWHo/W6IHUJwGFCAm+SrSTm+ZgcY6XnDhlim3wwxKNYymiX17HmCSxO4/OKPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kpackage-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+xERCBMTCBISCBDQyNAAAACH5BAEAAAAALAAAAAAQABAAAANPCLoR+7AJ0SALYkxd79za12FgOTlAQBDhRxUFqrKEG8PyOqwEfMeKwGDI8zVGul0vFsAFdaxB43ecKZfUKm1lZD6ERZgBZWn0OpYvGeJPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kpager-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBFxaXISChASChATCxKSipMTCxDQyNERCBPz+/MTC/AAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARWEMhJZ7hADFI4+RpwBYBxFJ1HmMiYJUgiJPI8Bwmp7HyvyBOfMCHR+QwzhAAhMvZKSFgRIOwtJczqboFoBasGGVNUKVNGaEyTlEYL1sX2pYXOyO8XfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kpaint-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPz+BAQCBMTCxPz+/PwCBPzCxPz+xPyqXASCBMQCxAQC/AQChPyCBATCBMT+/ATCxASChIQCBKSipISChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAV1ICCOYxCI5kmigTCYBKGW7WAH8QyYrn3LNFesYDgEjCVXIRYzGgWqgA2BICQUx9pMSkUssgsbFOWighW+7c24KDAKDccjCjVCHAEGo/GYl+wPLwwRfF8oT2mDAwuGWVJiARERAxITJkhaJhMSlJY7NDQpAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kpixmap2bitmap-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwC/AQCBMRaBPyqXPzerPyCBPzCxPwCBPz+xMTCBPz+BISCBMT+xATCBAT+BASCBMTC/AQCxAQC/AQChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVkICCOpBicZQoEwjAE6hgQQwvH81AU8OnfuR3QYDgcgAKhjGj8+UgzQkHHw+2mQlQpgEAkFInEYnGDhr/h8VPGYDQcjcZj/iiv4u84vQ6FQCISERETgxN2AX6AgoQThlBOkCR+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kpm-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxKSipPz+/ISChAQChMTCBATCBPyqXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARbEIBAa5BYUsHF+FQ2EUTHfUOoFQVpeuAVGAbrnmg603U7FD8UxXDgGQgoYMyAIBoSyI9Sx2seoj/lRlDFTmUBDs0L0gg2CGwFs93oWJdMOwCPiybhguout2f8EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kppp-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAAT+BGSOhERadDxKbDRKZExWXKzG/KzO9KS+tER+lBQyNERaVOTu5PT6/OTy9Lza5LTatISylHSilCQ6LNzq9MTa/LzevKzKzIS6dBwuZISi9MzizLTW3Iyy1IymjHyGbCwuLDRGXHya3HSe9Jy+/MTe5Pz+nPzmhOTSbGyGXGx+XCwyLHyinISe/NzifFRKTFRqXCQmJExSVFyafFyC9MTCvAQCBMTCxExKTDw+PMTGxLy+vNTS1Ly6vMzOzNza3MzKzHRybERCPDQyNPzCxPQODHR6dAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAengACCggECAwQBg4qDBQIGBwgJCouDCwwNDg8QERITlIUUDhUWFxgBC4mKGRoGFQcbHB0eHyCLISIjJCUmJygpKiuLEywjLRYuLy8pMDGLATIzNMk1Nck2lCDJN9TcLziKOTg63DvcPD0ygjk+P9zcQDVBQekAQkMgPjzcPfLy1wAgiBQBAYIHkH5BbPwTBGKIQBBBjAQBsXCRDYJGZFSkJOhIM45+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kpresenter-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwC/AQCBMQCxPwCBAT+/MTCBASChATCxPz+BPz+/ASCBAT+BKSipAQC/AQChARCBCH5BAEAAAAALAAAAAAQABAAAARhEMhJq70YhM2D5UIYDARHBUWxEcRgHKgncWyLuPEc1MOAJLfBRsNSEBYbH8kw3BEUyABjZHzJdsiGI6AYLBQG5qykDSy+jwdLpimj1aVhe7tIr00a6Q4uP02dfRVygRZ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kruler-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBFRGDPTijPzmnKSGDOzWdPTahOTGXOzOZOTKXNzCTNy6RNS2NMyqHNSuJCH5BAEAAAAALAAAAAAQABAAAARkEMhJKwg4643FEIQHimHRfaiYmoFxvMLhwi5r3IaA37rBIomgABhEDBM/hHLJVCBYCwFjYVxQBdYFi8GQertSLqshaJgFZbK5wXI4BO63W/Bwt+HzON7BKvj/gIAcgxoWhhN+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kscd-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBKSipFxaXARCRPyqXPwCBAT+BMTCxMT+/AT+/PzCxASCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARbEIRJa5Ui672nsNYgegFhFoRhCuJAEgcsE+wYfHIc0y3JbT2QsOJCGG+/zyShMCICregEsUgEnNCe6/rsPkPTY2LxZLEOh4DEqbBmRQyGen0kjgB4ySSPp+D9EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kscreensaver-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXAQCBOzu7Ozq7OTi5Pz+7Pz+xISChHx+fMTCBARWlARepOTm5ISCBNze3ARalARanKSmpARSlHzC9ARGfLy+vKSipARKhAROhARKfJyenNTW1AROjARSjMTCxJyanNTS1JSWlMzOzNza3MzKzJSSlMTGxLy6vLSytKyqrAT+BIyOjPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAalQEBgOBQYj0fhYEAoCAyHqPRgDAyIggPikOAeFFVCYMHImqnfaiPAKH8VcLij+ghAGJFFlnuUCAJ1ExR5AnACFRUWF39/CxETXQoYGRoaFht/HAEdE2AeGRgVFBUfIH8hmx4doBihGokifyMPAiQcISEjJR+7HyZ/JScfFigpKSoSFxsiKywCAEjR0QDU1AIJFi0tFgnP1dYJ4QgJ4+Xe1tLTAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -ksirc-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAAT+BMROTPz+/KQGBFxaXAQCBDQyNGSGzDRivAw6lAQmbCRGlAw2jHSS1BxGpAwiVGyO1CRWvBRKtJSq3AxCrEx2xAxGtAw+pAw6nDRmxAQmZAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVYICCOQBCQKCoMaRsMbCvPNE3cRA0QRWEciIQigQLyfAtGqtFwPI6GFgQReex60WJEYr36UpOtQgQlUQAVieUyLoskY8Bhi3liEZJ6MaOmWCgJGjYGhCl+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -ksnapshot-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBATCBFxaXISChAT+BASCBAT+/PwCBPzCxAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARLEMhJKw3YViw6HkRgBUVnCkG4GUV5otthsO6A3KJEHm6R3AOYTtAy2QqzHCDwMpiSk8DsxIFGpc6T9YJ9GpSb7laDSYI1yzNa448AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kspreadcalc-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBATCxARCRASChAT+BMTCxFxaXEQCBPzCxPwCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARPEIBAq5U4iM17wJMwjORIfJkYFCs7nKA2rJQLp0Su66ikGcAg8OYTGA6BA/KAIIYsFudPGJQal8uAFVqxUg2JxBYbUGh7k5J6BppwKyB/BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kspread-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBAT+/Pz+/KSipPz+BAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANFCBDc7iqIKUW98WkWpx1DAIphR41ouWya+YVpoBAaCKtMoRfsyue8WGC3YxBii5+RtiEWmASFdDVs6GRTKfCa7UK6AH8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -ksysctrl-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBISChHx+fPz+/AQCBAQC/AT+/AQCxAQChAT+BLy+vAR+BAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARYEIAgqK1YzsG754QUDERpmkEpkkXrtoK6EcVgHIibhnNx564Yb0TDvQq7FQ34EiqPOhnREqhWSUPsyZSQAbbg7GcMEgwUiYVivTa1R+y4XEGoWO/4AMAfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -ksysguard-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBExKTERCRERGRAQCBFxeXKSinIyOjJSWlKyurKyqrKSqxPTy9LSmxNzS1Nzm7JyitJyipMzOzLS2tOz6/OzW1Ozy9Oy6vNyCjNRydMR+lNza3LSurFReZMTG3Pz29OSmrMx6hDw6PKS2zMTCvOyytOSWnMzi5MTa3NTS1LzCvNTe5Pzm7PTK1PS6vOSapMyKjNTy9KzCzMzS1GxqbISKxOzq7Ozm5Oza3MyytLzS1Nz29OTy9LTS5GyGtOTe3MzKzOT29OTm5KS2vKSurNzy9LTW5OTi5Mza7NTm5KS61KyytOT2/HyChHSChHx6fNTy/LzKzMTCxLS+vMze5KSmpLzS3Ky61JSSlLTGzLTa5FRSVJyanKSipJSWnJyWlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfagACCggECAQEDBIOLAAEFBgcHCAgJAYqLAQoICwwNDg8QERKXjQYTFBUWFxgZGhsJHJcdHB4fHxUgrCEiIyQCjRwWthUlJiG7IycoKQQBKisfLC0uLzACJzExMjMBNBI1Njc4FTkBOjs8PT4/3UBBQjc8FkNEQTtFRUZHhyQySEkHOAyxgOCcEhkSLC1ZwSRGEx1OnBx4EgNKFCmKAkyh0uNADBpDOpyQ0YNEAEJVIFjBZg/bFRIRSAXAwiFLDyNaesiYEJMRgS1cupDg4OXLFlI+DwkQgBSAn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -ksysv-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/MTCxISChIQCBAT+BAAAACH5BAEAAAAALAAAAAAQABAAAANWCLoQzlA5IVyIK1S9L7PDsFHBIJXDFFaViYYEUQpy6orEqq12Aw+FmkjQQxEKwQCBSCz5BrGYkuc06nKU4s8gW4q0UAN3+q3CZJfJRhJ6fDwZOGbhTwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -ktalkd-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBKSipMTCxARCRFxaXASChDQyNATCxISChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARYEMgZqqXU6gCuDIJQDQTBBQX3hUFpmN2hFaxhIPCJDrRo46dPglf7BTvDXsB2OwaSCd8tZ0kWgZ3Uk+hDvHRV5bfyybACPNmkY2EVZKpM5UBPre8fD94fAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kthememgr-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBASCBATCBAQCBDQyNPz+/MTCBPz+xISCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMhJaw1V6Bs0HgIWYFMnhSERkiU6ekM1FO9IGMcxIFK3jgGDzRADhAypQipI7A0OId1IaGhKntHDjWogTLCB3JbpvULD2ir5i0SPDYjy9ZgWDuQUwqBLLFq+ehZ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -ktimemon-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPz+BHSG5PxSVDRW9PwuLPQKDFze1AQi7CH5BAEAAAAALAAAAAAQABAAAANDCLrc/lCFGeKi1YktAH5c92mcR4HloA4P4RLAyjovLLdvvD5FX+gqgGFoUPh+N2IRcAQcngch0ehzQqVDas/6xBb9CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -ktip-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBGxubFxeXAQCBOzu7OTi5NTS1PT29Pz6/Ozq7Nza3PTy9Pz+/Nze3MzKzMzOzOTm5MTCxLS2tKSipNTW1Ly+vKyqrMTGxJyenISChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVwICCOQRkIY0oORFEYqCoGw4EcSaHEarAgDESu4RioBIMfA1doPIwpZGJBhTQMEWh04GoqDBLtCKkYNL5hGUAwoZQfFYs46lBQLnK1SICJUCR5egMZGBgZcyoDGAwTh3oiAxMMhogpioyOjwADnIh+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -kuser-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxISChAT+BMRaBPyqXARCBPz+/FxaXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARLEIRJa5Ui673nsGAgeKE1Bl9AUEXbiqTlFlZaGUZoszm4BzhDAVf5BYbAXI+TAR6CS2ZGSZSEiIIqYIsSIEaJ7GRrlY7J1lKA7I8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kview-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPz+BAQCBPz+/PzCxFxaXPwCBPyCBPzerPz+xASCBMTC/PyqXATCxMT+/ATCBASChIQCBAQChISChMTCxKSipARCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAV0ICCOYxCQaBkIwpmKJsu6qDkIREDMZFwUAYNwRVuxgLfDAUGEsRIJo2LRapUE0ABDsa1aAcZoo+stsnIMwcDQcDQUV9MjF4Q4GJFiQJJuGSYOFHkwezJ+ExUUEicmYDITARATAoomLiuQJhKTlTRgepYBfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kwin-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBFxaXISChASChATCxKSipMTCxDQyNERCBPz+/MTC/AAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARWEMhJZ7hADFI4+RpwBYBxFJ1HmMiYJUgiJPI8Bwmp7HyvyBOfMCHR+QwzhAAhMvZKSFgRIOwtJczqboFoBasGGVNUKVNGaEyTlEYL1sX2pYXOyO8XfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kword-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBPz+/FxaXISChPwCBEQCBIQCBMQCBMTC/ASChARCRAQC/AQChMTCxAAAACH5BAEAAAAALAAAAAAQABAAAARiEMgpQ6B4WnGzDkLIeVs4DAIBWFcpnKJVzCUcz8ZxVOKN/AWNKRQo5HQYELHwQxQSHR7HqDuwMIRisxBQLBbRFdUaYCwYjUZHywIxGI53K0jolRkJdLkhtKwaeWpJYW0AfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -kwrite-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBKSinJyOfPz27Pzy7AwKDExOTJyWlERCRKSelPz69LyyrKymnPz+/MS2fDQyJAQCBOTazLSiXOzivMS2jKSSVOzmxPz25NzSpPTu5KyebOzixNTGjOTWpMSydMSybCwqFGReVKyaXNzSnGxeNJSCVMS2nPz23MSuZIR+bJyShLyqnOTOtGxiXIR6XOTSvIx6RMSubIyCdKSalMS6pOTWxMzKvKSabJyKTOzezHxuPGRmZKyurMTCvPTq3AAAACH5BAEAAAAALAAAAAAQABAAAAajQIBwCAgIiEhiYEA4FgwHRDKhIBAWz4OhgGQ0FAPHA7qFEBONb0Qy0ULeQ2+aUrFcMI+3GYBOZzQbHB0eHyAhIQByDREiEwMjFRIkJQImAgJ+jScjHigkKSorLC0AKg2NFSMoki4qCy+IQgITKDAxkjIzNDWkQxQoJaskMgk2Eb1DNzgoOCoHDDY5yEIwJToAOzw9ET7TQiREAhkZ3kmy5QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -laptop_battery-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/KSipAT+BISChFxaXPz+BMRaBPyCBMTCBDQyNAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARtEIBAq5w1TBGEGIM2ESTlVUNhaAFJUAcXgAXCZkFyJEoiIArWYQjj+Xi2yfBA0SU6CuAts4MCk4EdcxbznFhOCsjrWUxRhbRBBk48Z6kCZ2GeuN9xucF8FqcEBnt1OW4saSp7IoRPEjgiGBV+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -laptop_pcmcia-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwC/AQCBMRaBMTCxPyqXKSipFxaXASChISChMTCBPz+BPz+/PwCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARfEMhJaw3Y2iDGyJoUEIVRfIHGEcaBHCc4jcWbGG2cAuuhKIZE4mX68EgI3M/wORgQGAHr4HICD4NCKoBIJqsv7w6DKDgNi0VuN+O+GIxFl00hlxjakIhbo4cwfnoWfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -locale-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/AQCBPz+/MTCxISChMxKTKSipFxaXERGRGxqbCQiJDQ2NJQaHMwmJDQyNFRSVOR6fGwSFNxSVKQqLFQODJwaHOyGhOySlNRCRMSuBPz65PzupPyCBJyOLMxyJOTKRLSiNIR6JExCFGxaHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaPQEBgGAAYhcWjUMAUEAMDQtIIZRauBaZhKhwIsFjBgFu9HgKHrHNI9QYQCQQarWB313D5Ik68BxgIDQwOCgcJD2wBWwENEBANEQwMEBITFEIOQhWNkhENFhcYl0l/GRobHB0MGBAeo1QdHxsaICEfpyAiQlQhICMiHyMgs8FKASMjRiK/yLrGStDRXNFGfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -looknfeel-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/ERGRExKTLy+vKSmpAQCBPTy9Pz+/IwKFLQWNPT29GwOFExOTIyKPHx2NPz2pIQSHLwWNMzGXFxaLLSytERCHCQmJNze3GxubLS2tHR2dAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAWNICCKgVCWYwoEwUAMhXEQhhocRuHCMpIgiJVBptC9DojDIrFYwRS4wgGJZAIYuwL00Ej6FjOGEXZwPByQCNjAyrnKj4NkAqYUBIIoXC5pVGYUFgIXU2Z8fgdGFhgZiRqHf1EDFgCJGAcafX9aUSIFlxoFBX8vMYmemKJSY6Ijn6oHF26tKbAEGCaUKX4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -lyx-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBAQChARCRKSipASChFxaXISChPyCBATCxPyqXMT+/Pz+xPzerPz+/AAAACH5BAEAAAAALAAAAAAQABAAAARZEMg5Q6C4BnGzHsRgeVZRGIbYaekxuAFijUGRBOqMKPxlJQsLQxjoVWyWBsMxNEp+iRuj2VvVCklHLCZjiRrawGFmNQUajQ129RwYyCMSau2pcNh1AB7jjwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mathematica-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBISChPwC/FxaXIQCBAQCxAQC/KSipAQChPyqXPyCBEQCBARCBASCBDQyNCH5BAEAAAAALAAAAAAQABAAAARlEMhJ6wxChiFFCBUhENtQGIcBUghWDsHxWck7wMpKfXz/ZYBAYeCpKRQLWwkjMCpQJQ3TE8gdUgxPUMDlflINhzfocJB6BNEDqLnKpgRLTJZjBuIUAf1TExR0EyRASWmAFocAfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mouse-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBDQyNKSipPz+/MTCxISChPzCxATCBISC/MTC/AAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARSEIRJqw0Sg32rAANBFNwlhIQhGkNGAaSaouW0iYUBEIdYgzsUIqHAuWAoQlGEE9gMJKaU8IPupqLWy3qVkioAFqkLc9nCg3G5oxFr2ecavOOPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -mozilla-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/JxqBHRKBGw6BHwuBHQuBKwmBKQmBIRWBGRGBMQeBKwaBHxSBFQ6BDwaBEwqBEQuBGQuBFQOBGwSBGxGBHQ+BOQiBPQmBLQaBKQaBCQGBIwWBLQeBDwKBHQSBGQ+BIRaBHweBIQWBNQiBKQeBJw6BPxGBNQuBLwiBPwmBKweBIQiBJQmBHwyBIxeBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZzQIBwSCwahYHA8SgYLI2EwpMoMBwQU2FCsRAYGQ3HwwGJSCYPCNnRoAgrlgsmo8hkLJpNpEjhbBYdHhYZEh9HICEiGRMjJAxPJSYmJxkoSocjKSorExYNSwMXLAwgDhYVSwUtRAMORwGfRR8uRpdGWEJ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -multimedia-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBIR+hKSipPz+/MTCxMRaBMTGxOTe5MzGzNyytPyqrPyurLz+tKzqrPTy9LSytNTS1Pz6/Nze3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAWAICCKQWmOKFAKQ9uWacAOJcEWQjDKrxHYJZxONRAQaL+c76DjyY4D4A+RC9B8xkPiQKCySsjAQZAojHMva9pk8iGrCsWC0Wg4HCvT4wApyO0FEAcRJhKGhzUEioolDw8TgYQBEYITCIQqE4IRCnQOEXyYJAFxCwt1dzAxbCcjfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAAQChPwCBAQCBPz+/MTCxKSipFxaXAAAACH5BAEAAAEALAAAAAAQABAAAANDCBoK8TAC8Vy8QUyGr9BaFwmDZonZp66sIhBwLBMFlRl4rhv1IxiDoHDYuw1yw2Dxl0wugTqnjdkUPmezJWv7QXX8CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -netscape-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAEyStPwCBNTKrHRqPAxSfLR6VNzWvAQCBEyOrFxGPMSWdKx6XPz69Ozm1PTy7NTOtOTOxKRqRGxCJPz6/MzGnMS6jDwmHEyGpPz+/Hx2bGxiPOTexFxWNLSmhMy6jLyGXNSqjHxSLLyuhMSyhLSqhDQeDJyWdJyOVNTKtPTu5KSONMS+rLyqdMy+lFxSNOTezKySPEw+FEQ6JKSOPDw6LNSylHxSNKyWPLSeXExGLDQuFIRiRCRCVEwyJAwODLyyjIx+TNzaxMy+jBwaHNzGvMS2hMS2jKSWXGw+JFw6LKR2XCQ6TDw2HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAfVgAABg4QCA4SIBAQFiAYHiIQICQoLAQwNDg0PgxARg4oSChMOBg0UAgYVBRaDFxcIGA4ZGhscHB0eHISKoxkfARsHICEiI7oBrg0kGiUfpCEBJiIngygbKQ0bG5kjKisbFSwtAi4HLx0cBwYiMDEyJh4zMjSKKBQuNTY3Mb8vODk6kLky0GEHjxUyeiigMMPHJ0UCKvw4sQFIECEqhgQUSCSChRFFWhg5MkMjkk9JlJRY4uIEixk5fOhAsuOkqyFLXF1oQYOJTiQIAigaqohCD6JD/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -noatun-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBCQ2PARehAwODASCtASi5ASq7JTK5PT29MzS1JyipISGjAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARlEMgJgrg3zDHkCEQoEhrnVYXBDUVRdmagHjT7AnExHPtg3LldzYXr4FA6juHnMXZkqaiGMpEtOdOmETpAIEy473fV9Xphq7P6DEgMFIpFWm1sJ+4JBec8SFAnd3pveH+AeHcSfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -package_applications-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAFxaXGRmZFRWVARehAxehFxeXOTm5MTGxKze7JzO3ITC1HSyzGSmvFSWtESKpCx6nBxulNze3MTCxAQCBByezByWxBSOtBSGrAx2nAxqlARijARafARWdARSdARKbARGZARCXOzu7Pz+/Pz+9Ozu5Nza3Pz+7NzexPz+5NzivGxqbGxubNze1NS+vPTCvMzKzLz6vLzevPwCBNzevAwOBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADIALAAAAAAQABAAAAamQEBAMCAMikfjQMAsGA6IhGLBaDgeEEJEMhFIJBRKxXLBYDKajeTQBQAGG05n7vl8QABBNyTq+/8iIyRdJSJrgCMjJiYnhCIHEn+JiygpXQaGB32JKgErKiuNAoV+iQIGLBItLhOOgYkrmAYvLikwl6+Lo5gTtjFdLMHCKy8vEyITxV2tzBMFMTCWIgYlEzLX2NcwMy4vstngAS4tLyUGNODprdl+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -package_development-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/GxKFAQCBNSyhFQ2FOTGnJRuNOzWtPz23FRWVERGRJSGNMyyZHRydOzu7PTy9Ly6vOzq7Nza3JyanMTCxHQCBLxWVKQaHOTm5NyOjMxqbJQSFHwGBDw+POTi5LQiJJwWFPz+/Pz6/PT29NyWlMReXNyenLQqLIwSFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ9QIBwSCQGBMWkMDAgKIuBgsH5FBIO0+oSka0mFAsGtdpwLMbPxONBgCDJEQkEMnkn1RLKRGF3+CtCDRJ7AoUSEgAWFw+AChB8hYUYGRobHIwAHZGbHh8gayEhIqGiIw9+GBgSJBoliiGUrhcOJq0WJyAbKBUhnrocDr4ofkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -package_editors-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBLS2tHx6fOTm5Ozq7OTi5Hx+fPTy9Ozu7PT29Ly+vMTCxPz6/IRuPHROLPz+/LyOdLSCTNSmnOS6vPzmzISGhExOTJSCZPTSxPTKtPS6jPSujNyKZGxqbDQyNDw+PHRaTKRqVLRqRLxqTMxmPOR6NKyurDQqLExCRFxKLKRSFNza3KyqrKSmpDQ6PGwyBNze3NTS1LSytAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaWQIBwSCwahwFA8kgMOAVLpjMgGBCixamgECAYsELtoUAuXJtPRCCRMBu44ecBoVC0F2aC8qkIKBAICQx5X3INh3UMbQMOD05/AQ0QDQoMERITFBUVThZ1Cg0XFxgZGhobHB1KHp4NCR8gISIjJCQlJmGsCAULAicoKSoqDytIrAkGBCwMLS4vKTBNrAUJCzEBMjMuM35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -package_favourite-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBPz+xISCBMTCBPyCBMQCBIQCBPwCBPzCxAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARYEEgZwrQzVyFq6Bj1gQOxgcBYDSzhnl7Azm7tpWT7VhdHmoFXzweqmYZE4I5C5AQKhkMAYbCMfM9EIWBAIKzNLNRbTRHCBUT6ewn6TOlyJuX2sOftS8YfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -package_games-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBPz+xISCBMTCBPwCBMTCxMQCBPz+/KSipISChAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEEgZwrQzVyFq6Bj1gQMxgsBYDSxhqunKtu5bpSQdFDfFkS9DgHD5cTwBIdFnFLiSw2IzGGX+AocDNHQ6GhCJQCJsGRqThm/CoMBUCNc1W9HWmD2Jdsh+CfkjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -package-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+xISCBMTCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANECKoR6ys2IVqokF08yMTA1gwkYX5WQK5ma4VceTYPxXnBWdtY6+0834/Bowgzm6APWRQcH4TiMhPK2WYRiZWW7XK7/gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -package_graphics-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAASC/MQmJPz+/LwuLLw2NLQiJNTKVNTOZOyydNRaXMxGRJQmJFQuXFRypFySdHS+VLTOfNzWhJQeHFwCBGyGtHyqlIzKdPTapAQCBGRCbKTSjOzqxLzG3MzmxJyanBQSFJSSlBwaHCQmJGxqbFxaXNzmxPzmzOSenExKTLSytAwKDAQGBMTS5LzerOSaTFRWVHR2dJzOhLTKdNyiNDw6PFxeXDw+PLSmvKS2zIyynLzSjNTKXNSGNIx2lIx6tISavNzSbLwmJHRWfNzWfIRurIyexOSmPJweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAejgACCg4SFAYWIgwECAQMEA4mCBYwGBwgICQoFhowLDA0ODxARCAQSkp0TgwwUFRYHFxeLARITGIUZFBobEgUBC7aRHB0eBcC3iRgfGAIgISKRGCMeIhgkJSYniBkoKSgqKywtES6bgy8iMCgYyhwxMjOb7Bg0NTYr7Dc4OTo7PPIrQoRgJ6iHjx8xgMwIEgmAkIMxhsw4lYgBkSI5LEQwcsRPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -package_multimedia-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXHx+fHR2dGxubISChNTS1MzKzLS2tLSmpNSytAQCBOzu7Ozm1Nza3MTGxNS+vOy6vPy2tOTStOzq7Pz6/Nze3MTCxOzOvNTqvLT2tDw+BOTm5MzOzPy+tLz+tLz2tOTi5LSynLz6tPz+/NTW1KSipMy6THx6fMTKxKyOLNTGVPTmbLTOtBQOBBQSBKySLHReFLzKvLzavAQGBCQiDNzKVOTSXLSWLNzGVLyiPNTCTOTaZLymPMSqROzebOzeZMSuPBwaDMyyRFRKHAwKBOzibMSmPMy6RLSaNLyaNDwyFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfKgACCgwECAwQBg4qCBQUGBwgJCgsLiwAFDA0OBg8QERITlYMFFBUMFgYXEBIYGRoboxwMFRQdCAoeGR8glAABBgshFA8BCxsiI5QklY4lJQYbJiQbypQnACgpB5ALy92UKissAAQXDyktlBUuLzALMeG+MjPKNDU2LDc47yqC1Qs5dODYwYJHj3f/Yrxb4QPHiR9Aqr0I4kNFDCExdgxRQaSItyA8jJw4YvFFjBdCGtCotECFjhssVgRR8W8QkgVJlOBb8k3UID+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -package_network-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBPz+/CRKfERCRAQCBFxONKx6LDw+PDR2rAwyXMzOzOzq7AwKDHSSlKy2ZDxutAxCpExOTBRavBQ+fBQ2XOTi5OzWhFRSVBw2VGRmZDw6POzKdCQ6ZBRKrCQmHAwODIyirGSGpIR+bCRixBRKtCQ6VDQ2JBw2XIS27DRKNISuhESK5DR+5BQ+jCQqPCxSfFSa5Gyu7GyerOzetBw+XBwuTBwmNFSa7Eye7DSW9JyabLyqRBQ+dBRerDR+zDx+3Bxq3LyaLJySRHxqPGxeNBRSnCRmrHRyRERONDw+NCQuLCwqHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAeygACCg4SFhoeEAQGJigIChQEDBIIFBgEHBAgCCYMBCgQBCwyhDA0ODxCcAAqRihGXiooSExSCsYoVDBYEFwEEEBiCrBmgGgUbigMcHRgeth8gAR8hIgQECyMkJSaCAicoICkqASssvi0YLoIvMDExMg4zrjQTNTaDCTcxODk6OwQYJmCYNIhHDx8/gAQRMoRIDRcEBwkoYqTIkSMFkNiISCjBCR40UiQxwdGQEg9LSvoJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -package_settings-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBISChGRmZMTCxKSipLS2tHx6fPz+/OTm5FxaXOzu7DQyNMzOzAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMhAq7wYBDECKVSGBcbRfcEYauSZXgFCrEEXgDCSeIEyzKSXZoBYVCoJVIqBGByKu0Cy8QHxmgNngWCkGgqsGWFseu6oMApoXHAWhWnKrv0UqeYDe0YO10/6fhJ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -package_system-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBGxqFAQCBPz+/PTqtOTOfMSyPNze3Ozi5KyeLMTCxMzGzKSipOTe5MTGxAAAACH5BAEAAAAALAAAAAAQABAAAARfEMhJQah4ihFunsFAEIVXCVJACIJhoBK6CerawsA8HAhbuAnYZrBDKBYMWpCy4S2QSRazyBIwrrjcoNFQzK4KR1bQcHhZjGM2BgWLMYJ2enForHPJtNj+kfHvcB8AfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -package_toys-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBJxyLJRqJGxKFIReHKR6NJx2NMSmbEwyFKyGTMSibFw6FMSqdCQWDIxeHNS6hAQCBDQiDNS+jOzexCwiDCQiHLyeXFxGHLSWXJwuJGweFHQiFMx2bLRGNGQeFNTClOzSrLxKPLQ+LLxOPGxOHIxmLEwWDOzatNS+lKyKTIRiJJx2PIRmPJRuNKyGRIReJJxuLKyKRMSqbKSCPEw6HNzKnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAauQIAQEBAMhITCcTg0CA6IhGJwICyYwgWjEQg4HIgHBCuMBCCSM6FBHiIOk4cg0hYiKAFFxUJBtC8YGQgBFhAaBVdMAw8bHB0eHh0cGh9LAAMgAxAhHiKPIxAkH1cXEiVjJiQnKCljECoWCAgEFGUrKBYsYwARKnQIRxG0Ky0QtAAIvwcuAwQpLxDCGDAIMTKyMSczs7sQATQz2mMIMyAXu0IQNDUu6AgQ6EPwu35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -package_utilities-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBExKTERCRAQCBOzu7Nze3MzKzLy+vCxqZBQ2NJyanKyqrGRiZDRydKza3FRWVPT29LSytDw6PMTm5EySjCxaXGRaJFSanCRSVGxqbPTmvMSqVJTW1GSurHS6vOzq7KSipISChFRKHJSGNPz23GxKFBQ6PKyurCwqLMyufJx2RAQGBJSWlEwyDIRiLNy+lLSKVDwmDJRuNOTOrLyabGRCFDx2dKSCVOzWtHzCxOTGnNSyhAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAahQIBwCAgIBAOiUiggFAyHASKxDAwUC8Zg0HAglA9IZPGQABoTSqJCFTIOEIsFgHBcEhhHUpKJFCwaGxYYHB0VEx4IEh8gIQwiIyQbJRMcHokmEicfDygAkCkqJQgIGG0rLElCLS4vMCWqQwMCQg0UMTIzNDVLQjaIGDE3ODQlS785CEkxKjowvEOHybG4O6JDCdNKuDUxRAmxRDHeveUAfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -package_wordprocessing-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBHx6fPT29FxaXPTy9AQCBHRydPT25Pz6/ERGRIR6PJyORHR2LDQyNLy+vNTW1Ozq7Ozu7LSiVKSiTIyKJJyenMTCxMTGxNTGlNTSjLyyRExGTExKTBwaHOzivMy+XBQWFExOTNzOhIyKjFxeXDQuNMSyjNzOnBQSFNTGjDQuLCQiJAwODCwqLGRmZHR2dAwKDCwmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAafQIAwQCwWhcihYMkUDJLIAKG5fEILhoOAgGAmCgXFgsEoNByOxwMCiTTAEsmEAq5ULJbLxQEuYCQZGn0JGwkcCR1gCUIeHyCJfX2JIUIHIiANCQMGIwYkCSUgi0KPHSYdJyAnKCkdHQ1IrhgdGCC1s7UqSCsdKLi0wL2xHY/FxMcssS0JIS4vIy8uIQktHUkgKygsMNwwKCAxUOLjAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -panel-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/FxaXMTCxDQyNAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANECLrcEDDKGYQV4+qbie9eGIJEVxTe+QmjUFgnXLLr615oF8x2v0I8DWpF2GV6slkLKSMdYT4nS0WgSkXYAWUbcXgX/gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -panel_settings-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTCxPz+/PzerISChPyqXAAAACH5BAEAAAAALAAAAAAQABAAAANKCLobwRAG4SJw7w5BswoEkQXbRn0h5ggF14FhbIhb68SiOgnbLRsPEovjwwVLRIdhCfwMiR/VZ1A7WS4tntWyynquq+01+h1//AkAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -password-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/MTCBPz+BISCBPz+xAAAACH5BAEAAAAALAAAAAAQABAAAANECLrcGi6CIAKUKwxSb/ZasXWPMFwBQRQiZwlqAVnEGbRwKz/ndMep3QNUqKV6kpQh6HFoCIaBMDmQTpOsJsaC6XoZ/gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -penguin-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/ISChPz+BMTCBISCBAAAACH5BAEAAAAALAAAAAAQABAAAANHCLrRsTC6F6UId1TYiNtMQRQNqARDOlAgJrzlhr7vqlUufbHMoMO8k+8XY4yGtc9pREIORKRTYVoYDgxUVmBqmGCLJzDYnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -pixie-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXPz+/DQyNAQCBKSipPz+xPzerPyqXPyCBERCBISCBMTCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARdEMg5Q6C4BjEGyZIlCEFHfJQonEERnB8sE6RxIMkAnGtPBzacjqBQLBiMxS+Y2xmRx+WtSTgmkwQLcwhNKqRCz3VRBOeGvh5wqpPMzO3JQFBguWAYxeiNwnRAEn4RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -plan-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxPz+/Pz+xMTCBISChASCBMRaBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEIRJKwU4iD23FwEmDeAwBGYaZiehWutEFK6JqtlM7KZhHhOJbuizIUKBHVGFOOaUPgPlGEsSDNjbKWBgcT0oX5CV2qakIg24OTGA0sxjeSWpUC2ivESf90cAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -proxy-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/KSipFxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANGCAHcziuIuFy44045WxhZpkxCB4GEKA1lpIAiVG7XB1bjPMHxqds3y++S6nGOL1ikpYlkbBSZM/oYfXBVaS8LuXCr2IY/AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -pybliographic-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBMTG5OTi7Nze/NTS5LSuxOTm/MTCxGxaFIRmFJR6JLy+zOzq9IRqJJR2HLSaNKSirNTOxKySLIR6VLS2vOzu/LSqhNzOXHxqNMzK1KSGJHxmFKSabLy2pIx2JJyCJIRyNNS+VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZhQIBwSCwaj8WAEplULpkAZ0AQgEaVA4K0alQWDAdEQrHgNguMRsHxgJiJgcEg0pA4Jk84ZVCoWC4TGG9CAQkZGnUIG3lDAQocCh0eFB+MjRsgIAsLIYNwASKCnk2WVkR+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -realplayer-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAAwWVBwC7BwC9BQC3BQOvBQCtBQCrBQCvBQO1AwKPAwOVBwC/AwGnAwCXAQGNAQCJAQCHAQGLAQGTAwKjBwG7AQCNAQKRAQGDAQCBAQGJAQGPAQGFAQKVAQGBGRiZBweHFxaXDw+PExKRBQSFERGPFxeXCQqJLy+vAwCjJSanFRSVLzCxJSSjIyGhGxubNTW1KyurAQGHAwODKyqrHR2dBwO7AwSZCwqRDQyLCwuLAQKFAwSjAQCLAQCFAQCDAwSbAwGbBQKvBQCzBQC1AQSNBQKtAwOdBQKnBQCxAQabCwOLDQSNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAe/gAABAgGFAwQFBgcIgwEJCguRDA0ODxCXERITFBUWCwMNDxcYpKUYGRobFQEcFx0dGLCxrx6kFQcYHyAhIiIhIyQlJiekESgYHikqKywtLi0vIDCkMQQbLiQyMzQgLDQzJSCkMjU2NzIYOCYyOSYmH+gYOjUBOzw9PT6mGD4P/AORahj4IaECBFI9gAQhJSSSw0g2fGggsEAIw4eRhhBhEGBBgCKkjAgZSRLFESFIRibZx5KlkpYtlbyEuW+Jn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -remote-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBDQyNISChJyGPGReLAQCBMy+hERCHKSipAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARFEEgZqp0Y1KxD9twEapg1kqhwBgKFvqIIjgMRdy4wFIaNbiiCYXDIAUcH328EQsxiIBXAqWn9MtTSTZLNybizEweY8UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -samba-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAAQCBDQyNFRWVASC/Pz+/PTW1OyytNTW9LSy7PTGxOSenNx2dMTG9Jye5OSKjNxiZMw6PIyK5GRi3AwODMwmJLQCBCQmzPS+DPTejPTaJLR+DPT21OzqtNT21MTCxPTyxOTmnNzedMTyxPz6/ISChOTijNzaZMzOPIzijMzKJLS2BPT29Nza3PTmxKSipOzu7LyGJPTKRNSeDFxaXERCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAMALAAAAAAQABAAAAacQIBwCAgIBsjkAEAoGJgHxFC5TCgWAEajyFUCHA8IICJhTggAr4NSGVsAF8wlnSQWBYLMRUNHMjccTB0AGh5dfh8gIQAiAAJCIyRCfiUmJwEokARok0slKSqPApukAZNDRpqbkZMjSROOI5srLAGwS34tGgEuBCMvAjCBA64ALRgxuyzAMnItQmgaMRcypjMByNR9QjQ0adzeaX5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -scsi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/MTCxKSipISChAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANCCLoQwZAFIV6UYgxi79Qa52WDE3bKV6YOpFpO3L5pJcckLBB8/wQEDezWAQpZqIWxFNAUkqkg6HmJOqGuArUqwfoTACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -style-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBOzqBLS2BPz+HPz+rPz+BPz+lPz+zPz+9Pz+1Pz+nPz+hNyuhPz+pIQCBMTCBIQyBPz+/MTCxFwmfCQiJIxOrHw6nJRWtJxmvJxuvJxyvAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVvICACwWieYiCUwVCiKVEEhjHA6YEcxooHBURCsXihaAYGglEzngKBhsMmMDhH0YcBAu16SY2IKiApm81RMXTCblPelDCrXJlI6hSL5SJOSewVdRMUGHtGZICChHsmZHeAgxkaG41/bWxnjV6bUH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -terminal-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTCxISChPz+/MT+/AAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM/CBDcHkoFQasVUIrBe8fRNDwMAWpjUThmtmxk0IYwOaPx/V6XG3hAjmsRa0Qkg6NSOVo6F0nG88g4TUNDpT8BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -wabi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/ISChPz+xAQC/AQCxPz+BFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARUEMhJgw20XsHxvIEwcKQHBESaDkShmqhKsMb7tW1RHPwOH4ZdYcBDGH+8A2JgLH2MzZHAJgmRBAgZAabNqg7cJMGb5BKSZF4Yfb5Uzmp3piqfS/wRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -window_list-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCRiXCRaVPz+/CRmZFRWVISGhMTCxESSjPT29DR6dDyOhDyCfPTy9CxqZOzu7Ozq7ERubOTm5ARehAxefPz6/ByaxBSOvBSGrAxynAxqlBR6nBRylAxmhARWdFxaXCH5BAEAAAAALAAAAAAQABAAAAWHICCKQTCeqCgMhJCihXEYSPuKRWIoC6PYsEZikHA4FA4CEJdoJh4QgXRwiOAeQudDIpEZIpPwhCImhyGGAmBSOVgumExG055w1ZPZhpPpUDwzExBqAAUDhxUVTQ0QEgWOOIcDiU1QjoSFFYiKDZYFmAWJlE9bkCM5iouWpiIfBa6frrKYAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -winprops-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPz+/ASChATCxISChFxaXKSipPz+xMTCxMTCBPwCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAoALAAAAAAQABAAAARXEMhJqwxAjM23wBMhjGQJEFKhriwrGUcsE3JsvPWBFAAiT7BaIYAA/HAxWk9CO9wAwd0SkJA9g8NiomnDoYqnHDAGroqRyVy3F2i7326LnKKo2+94hT8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -wp-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBAQCxAQChKSipPz+xPz+/ARCRFxaXEQCBMTCxPyqXDQyNPzerISChISCBASCBERCBMTC/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAV1ICCOZDkGgSgMg0AUZWAExyHc7YCQclLYtxtieAoUEApFUIBgnRYMhUHRCDYcDoUIRUhOlYLkYwcIDLvSpAsBiYx0CPQUgXNv4V0ZWEByDBgRcTMGDislTX+CMgISJk1+AQ4zWiYiCCiRDmRbmJ2eKZWhAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -xapp-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBISChAQCBAAAACH5BAEAAAAALAAAAAAQABAAAAIyhI9pIa0nYAtPUGlTRszJ10UA8xiNRZZmJKoA25boqW7npeHvlKRHyIn9aKYaz6XwFwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -xcalc-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBISChPz+/AQCBCH5BAEAAAAALAAAAAAQABAAAAI4hI9pwe0Ogpi00hHF2LzzzFlTsIHD45SSx6oCeW4wjK2tl83y7t64pIsJaxrfh2bEAJIlhRPhLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -xclipboard-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/MTCxPz+xPzerMRaBISChCH5BAEAAAAALAAAAAAQABAAAANICLoQwdBJIaRjgYbBR66Lo1nfowTER61aWGRd1y5GyrLm+QrxMJ81FQ4T2MV+jUPwBgpVdrdcQ6AUIj8Ha/N06Hq/UpLY5E8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -xclock-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAALy+vAQCBPwCBMQCBIQCBISChPz+/MTCxCH5BAAAAAAALAAAAAAQABAAAANbCLHcrSLKOZcYmDSCsR1aUABAsXDDJwJGa5SBFwgaWxbCG3CWaBwG3C8Y67FawpYiNQscg65fsVkYuoAmJs1pBR522lQB6ILJLqHRwQQOZzYdZnw+dzruDIA/AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -xconsole-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/ISChMTCxAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLrcGjBKCYK4OGcohv/gxw2aRgyjYJXCmVpr5loke82dfaO03vI5Ha5mwxGOyOSRF2qKKpMoxEFl+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -xedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBMRaBPyCBMQCBMTCxPz+BPz+/KSipFxaXPzerPyqXIQCBARCRDQyNISChCH5BAEAAAAALAAAAAAQABAAAARnEMg5gw00yyDGIJi2FUHhDWEWeEXrgaphHEOBJF8KBLKyLINEIAHbyA6/hbDACDSMBt9PIBA6n4HfIElFXTeKg2LbtTSeu7BiPegIvuA1mwrfOB5r4PusCjimZmgUF4F8IhJnhiJ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -xemacs-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBDQyNKSipPz+/FxaXISChMTCxCH5BAEAAAAALAAAAAAQABAAAANJCBASoXCFoVi8VdL6HHQeB4YjSAxnYQygSLzoSTjbEs9vMF86cbyH34NX+AELQ4zO+Nopm6cBC1PBEQwG6gd3SGo7Xa1STIb4EwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -xeyes-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAQABAAAAI4hI+py50Bw4lyBiEggFjvi2VcqIFhdnaDSabZKrbjS3W1OHz2CkJD/vHlKD/Er2g4Ah3MptPgLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -xfig-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+BMTCBISCBARCBATCBASCBCH5BAEAAAAALAAAAAAQABAAAANQCLocwbAJ8SIMYgwHHO9Opk2V5xGEplZK0alaui0eDLOB8QTykOKGQ6mnKQWFPILDN8sdng7l69c5CjuKAHNnZb2KnUOhcG3MsmMv7aK2+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -xfmail-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPyqXMRaBPz+/AAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANACLHcAVCJSWcYLwaxSPAXBj2bswyiIlUWSr5muGhbdaZjTd1ZzvKMFaOFcbCIpiOnGGs2FM5gLkLrTalQLMCfAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -xload-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+py+3hEoxnUmBpyBjNzWXfJnkGKJ4dBlbjS7Jni9Zsjec66hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -xmag-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipMTCxPz+/IQCBPyCBMRaBCH5BAEAAAAALAAAAAAQABAAAANICKrR+6+JIRxkc4RBww1TQBBNB21io2rRRKpltaDvis4hvJmzBmuslo+zkZ0yu0rBcwJ1AgXD8gJQMaJTaqRwyGqvzO9M4U8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -xosview-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwC/AQCBPz+/MTCxAQChPyCBAT+BPz+BAT+/PwCBAQC/AAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARFEIRJa5Ui663HFEQojqEXCAVhrCxLmGB4kCJM03aIHEdC5rfaJ6UotlavT3AEIxaNLuAyd2wlT0thYMDter0BiWU8AfgjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -xpaint-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBPzerMQCBPz+/AQCxPz+BMTCBASCBPyCBPzC/PyqXMQCxIQChKSipMRaBDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVtICCOYmCaZGoKLBuMbykMA1EURFwCgWAQwKBAxxMQDocgAjEkrYAsoS6QGEYJCgWhWVq4tgJGY+iAVbcBB5jLq/aMbzJsYXK0Arky7JFY+BcJDyckDgEPh4d1aUSFJ2l6ARApDpSUKkQpmSJ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -xv-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPyqXPz+xPyCBPwCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM8CLrc/jC+oIK9Lgg7RuietWhCSWkkVZUbEBBnWxXFSVP1eLt7kPM3X86nEhJrtx/P0tuNilCVZEqtNvwJACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -3floppy_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBMTCxARmZPz+/FSWlLSytKSipERCRIyOjISChOTm5HRydNza3GRiZFRSVASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVrICCOQBCQKBkIw5mqLFG47zoQ+FwbN57TosDhgPD5dMEEIqE04kwlBWKBUEiNVYFpyqAyGEUCgqEtERiNNMLhQKzLQYJg7n7Y4aMAwbCUPvAQeWNgfzQQETAIhSMQEogwgBITQEGGEREmfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -3floppy_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxARmZPz+/FSWlLSytKSipERCRIyOjISChOTm5HRydNza3GRiZFRSVCH5BAEAAAAALAAAAAAQABAAAARcEMgJQqCYBjFu1hxReN82EOhYGieaklJwHIjrqnGCJLqNWhUFYoFQCG1FgWXIIDIYNQKCoawQGI0swuFAbKsxgmDsfZjBkwDBsNM90Jot9A3DbBD0Dwiur9QnfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -5floppy_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBFxaXPz+/DQyNISChASCBARCBMT+xAT+BAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARMEMgJQqCYBiFu1sIwdJ+0hSKZnZw4ehPLoW88c0Q7X7JABLlbp+eT/UyzgpADqwgKxKYpeIMZQNWJ4YBhWRHcrgpgQCSkJu3hYPFHAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -5floppy_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBFxaXPz+/DQyNISChAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM+CLoQwZAFIV6UYox61cwaF32UtlkLSYFnulJEuT6qQATxW9W2enurgo6CaggKvKIn91K6mh0gMepydqwAfwIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -cdaudio_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tOzOvNTqvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/LzKvMTCxDQyNASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAa0QIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTBqUiuUCVmAeiYzmsKlwOt/AAKFIFAIIFx4WHyAhUwIDIgsZFyMkFxchJSYmiBkSBBoIJJwIGgOhiCYFJSEnFyQjFwNZewABISAfFiYnCAEmCREIrwAIFhwVGwcaBAkPGApsQsAVFA0GBQMRbxBTKM0ODQwTEq192ClDgROkBHvYKuNJUu5CKCorX1RDKCkpUn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -cdaudio_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tNzmvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/MTCxLy6vDQyNOTm5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAapQIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTLqUigWsuDwSmMxBQ9lwvoEBQpEoBBAWHRseHyBTAgMhCxgWIiMWFiASJCSHEgQSGQgjmwglGKCHBQUSICYWIyIWAwshIVMBIB8eFSQmCAEFCREIekIIFRsUGgcZEgkPFydrvxUUDg0GBSEREGJfv9AMEySsJxDYQ4DcEhh64UpS6lTs7QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -cdrom_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tOzOvNTqvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/LzKvMTCxDQyNASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAa0QIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTBqUiuUCVmAeiYzmsKlwOt/AAKFIFAIIFx4WHyAhUwIDIgsZFyMkFxchJSYmiBkSBBoIJJwIGgOhiCYFJSEnFyQjFwNZewABISAfFiYnCAEmCREIrwAIFhwVGwcaBAkPGApsQsAVFA0GBQMRbxBTKM0ODQwTEq192ClDgROkBHvYKuNJUu5CKCorX1RDKCkpUn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -cdrom_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tNzmvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/MTCxLy6vDQyNOTm5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAapQIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTLqUigWsuDwSmMxBQ9lwvoEBQpEoBBAWHRseHyBTAgMhCxgWIiMWFiASJCSHEgQSGQgjmwglGKCHBQUSICYWIyIWAwshIVMBIB8eFSQmCAEFCREIekIIFRsUGgcZEgkPFydrvxUUDg0GBSEREGJfv9AMEySsJxDYQ4DcEhh64UpS6lTs7QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -cdwriter_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBFxaXISChERCBMTCxKSipAQCBMTCBPzCxPz+xPzerMT+xDQyNMTC/ASCBPyqXPz+BARCBAT+BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAWIICCKgWAGYyoKA+EWhGGogOAaB6Lr8ygUCYWCkEMoEovBSHZUFI8LGYloODJkhWijMbMdiAwBQEbYxmpExFlkgN3QrliXAcvNAuVt4coYKtQ9BlwLCQQFMAlVSmwEUX8IB1UJiQAObEE6BA9VEDMOEUsDDzoHkZ4LoCkyqyIOCxI9NCOfETJ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -cdwriter_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXISChERCBMTCxKSipAQCBMTCBPzCxPz+xPzerMT+xDQyNMTC/PyqXPz+BCH5BAEAAAAALAAAAAAQABAAAAR3EEgZhA0zSzGIL4RhaIDgGQeiquMkFImiECmiJMswibdS3wsRhWa4MUSFYKMxMh1oDAFARFiGSjTEVWIAnbCeUJMBSo0C1WXhyJgptC0Dc5EgFECJoo5LCL4RB0UJeRkGMSoEDkUPLYUDDioHgY0kIpYkmJkAfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -dvd_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tOzOvNTqvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/LzKvMTCxDQyNASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAa0QIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTBqUiuUCVmAeiYzmsKlwOt/AAKFIFAIIFx4WHyAhUwIDIgsZFyMkFxchJSYmiBkSBBoIJJwIGgOhiCYFJSEnFyQjFwNZewABISAfFiYnCAEmCREIrwAIFhwVGwcaBAkPGApsQsAVFA0GBQMRbxBTKM0ODQwTEq192ClDgROkBHvYKuNJUu5CKCorX1RDKCkpUn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -dvd_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tNzmvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/MTCxLy6vDQyNOTm5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAapQIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTLqUigWsuDwSmMxBQ9lwvoEBQpEoBBAWHRseHyBTAgMhCxgWIiMWFiASJCSHEgQSGQgjmwglGKCHBQUSICYWIyIWAwshIVMBIB8eFSQmCAEFCREIekIIFRsUGgcZEgkPFydrvxUUDg0GBSEREGJfv9AMEySsJxDYQ4DcEhh64UpS6lTs7QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -hdd_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBDQyNIRuVKyCXMSKROzSrOzKpOTGnLSafLySZKxuLMSOVPTWvPzixLSehNyibOzOrGxaVJx+XOzGnFw2FJRuPKx+TPTSrHRWPKyKZPTOpHxOJKyKXFw+HKSipISChMTCxFxaXIRiPNSWXExOTOS2hLR+PLRyLPTWtMyOTASCBARCBPz+/DTSJIyKjIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwCAgYA8SkMCAYDARI5ZJQMBwQiWgyoFgwrA3HQ7scQAqFAcEQOUi0zAkFUSFYLghMBloUCDQNGxwdHhwHekcfICEhICIfIxkLJBABJUYCICABIhAOBiYnKJaXmH4CGSkYCCqkSAEfTKenrkOwsrQll0IrS7G5uwArLLaxLbXCLsTFLyDBKy4wZEVHvCwsRn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -hdd_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBDQyNIRuVKyCXMSKRPTWtOzKpOTGnLSafLySZKxuLMSOVOzOrPzm1LSehNyibGxaVJx+XOzGnFw2FJRuPKx+TPTSrHRWPKyKZPTWvHxOJKyKXFw+HPTOpKSipISChMTCxFxaXIRiPHxaNLRyLNSWXExOTPzixOS2hLR+PMyOTPz+/IyKjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaIQIBwCAgYA8SkMCAYDARI5ZJQMBwQiWgyoFgwGgiD46FdDiCFwoDQAEe0TMkEQSFULIcLBloUCDIaDRscHRsNHhhHHyAhISAiHyMkJSYQASdGAiAgASIQKA0pKguXmJl+AiQGFwgrpUgBH0yoqK9DsbO1J5hbsrq8SrgstlJFHy0gwMVFR1J+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -memory-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBISChAQCBMTCxCH5BAEAAAAALAAAAAAQABAAAAI6hA+Bu+HCmgiiRuNoHZBRXQlc84TmcHzm2WVryE1YvMaZIdbVd2zw7lj4bDKGbxK8hHgX3K2JUDD8BQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -mo_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBKSipDQyNPz+/MTC/PzC/ISChASCBARCBMT+xAT+BAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEMgJQqCYBjFu1hxBeN82iCIJDgWaYhtntC4ZCzItdhWOD7mdwHLrAAczoKViIh6Vto5lcDjglppp9UpCTALULRaASGS5E4TCnB2rFyqJO5Gw+CMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mo_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipDQyNPz+/MTC/PzC/ISChCH5BAEAAAAALAAAAAAQABAAAANHCLoQwZAFMV6UlBB759Aahw0FGEITZZQmlwoqq1UNDA/xLDhvhQ8rnKPh4f2EropjcDjAhpJl8ylaBJhTaCelvRC7XqLXnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nfs_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBExKTGRmZPz+/ExOTMTCxAQCBDw6PCwqLIyCRHxyNCQiJOzmxMSybFxSHHRmLIx+NFROHERCRFxaXASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVWICCOZGmeaEoGKiCwwUAI5zsUBnAUQ0CLNhxLFEDwDAnFzTAsBRYJRsORSwUeDUiEWYtJIhFj7+eKCUdPHmxyNj0nFABXRam0RBSLvZW/VFN1FQYGfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nfs_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBExKTGRmZPz+/ExOTMTCxAQCBDw6PCwqLIyCRHxyNCQiJOzmxMSybFxSHHRmLIx+NFROHERCRFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVLICCOZGmeaEoGKiCwwUAI5zsUBnAUQ0CLNhxLFEDwDAnFzTAsBRYJRsORSwUeDUiEWYtJIhFj7+eKCUdPHmxyNj0nOa6q2qrbW/4QACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -printer1-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBFRWVPz+/Ly+vISChMTCxFxaXPT29DQyNJSSlHR2dERCRFRSVERGRBSmnExOTExKTAT+/NTW1MzOzMzKzMTGxLy6vLS2tGRiZFxeXOTm5IyKjISGhLSytKyqrGRmZNTS1Nze3Nza3Hx6fKSmpKSipAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaUQIBwSCwaA0ikkRgQDJCE5LFgOAicUKUwUCAgBuDE9RkFcL3ggbgQUCwYyIIA8VU32ASDwoEcIAoHCQkHbA8EBBARSX0DXQEPEgQCDYpJExQVAWCHBwcNDUkKChQWBBcYARkanaABExsbHB0FGB4fIKoHAWYhpCIBIyQLJSAJGbtbULUTISa4yEVJJSbO0EtmUkR+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -printer2-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBKSipAQCBPz+xPz+/MTCBISCBISChMTCxFxaXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMggqrwYVDGGzRLXEZ0HhgMpFIXxZZzRBsHxXquAUHqCCBgB6YcoFhNAXMWISCQOv6Dt6DMmQwQntHjwXTVL6mH83Ry31qBO8CSQSmVg2GM74aAVij2UTPojACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -scanner-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MT+/ASChARCRATCxMTCxFxaXKSipDQyNAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEMgJgqWBVivEldkUdKSXhVjZfenommglDERh3Tc4E4ZRHAGgkEPr9X6H5AHBERSMRyWzkug8jQXFEhWoOo8dRYxqLXSmGjIJnVaz29Q3fAP3RwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -tablet-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTC/Pz+/MTCxFxaXKSipAAAACH5BAEAAAAALAAAAAAQABAAAANECLrc/iosCUEQlEYdRp6dZ4lgKBBEp1kmmpLRMBQu6qWLEdYBn+81F0wnC8oCK+LAQDgGDIaG0vOMPnRIaEUBtW6//gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -zip_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBFxaXMTCxPz+/ASChPwCBKSipASCBARCBMT+xAT+BAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEMgJQqCYBiFs1lwwdF8VEsR4YVuXoirYFcWbkmY31wPqma2ZwReqBEODQutwEY04oeWqMniGOEzW4HAVZAEImVSCSLDGYIX5/EMoFtNSOWHxRwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -zip_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIIAAPz+BAQCBFxaXMTCxPz+/ASChPwCBKSipCH5BAEAAAAALAAAAAAQABAAAANICLoQwZAFIVyUNIx6WybE9kBTFYIiVhXFGXJetbYDaHnlathZk2eDQunw0GwomeGoMThmKETS4PAURCMlZccHXXYct60Y4E8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -blockdevice-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMT+xAT+BASCBMT+/ATCBAT+/ARCRPz+xARCBPz+BATCxISCBDQyNMTCBCH5BAEAAAAALAAAAAAQABAAAARhEMgZwrwYBCFsvhs3eF8wDMJAVBVmnupazKRmGDFxzMVBBjcDQXfYHRA/QmKpKBYRSMoysVgwGEeoJ1ClLhpXhlbiqJobjcA1Sn48qug06+JwP+I1UMCNzmcqaR8lghN+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -chardevice-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBMTCxISChPz+/MQCBPwCBAAAACH5BAEAAAAALAAAAAAQABAAAANCCBDcHkoFQasVUIrBe8fRNDwMAWojMTZmtmzByp6v7LQhTOLadbkxj3AUWZAcxcUgyYwQm8wYoOCCLgoGK5Nq9ScAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -desktop-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBExKTDQyNHRydFRWVKyqpGxubExOTERCRLy6vFxaXBweHFRKPFxeXAQCBIyKjCwqLMS+tKyurDw+PNze3ERGPPTu5Pz+/Pz6/Nza3MzOzKSipISChOzq7NTW1Ly+vHx2ZOzm3Ix2XJx2XIyOjKyqrJSSlPTexPTixKR2VKxyPCQiJPTy9JSWlHRmTOzSrMzKzJyCbKR+XCwuLOTi5CQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQIBwKAwIiEjkgJBsAgoGwcE5RCQUgAWj0WwcHA8FRLhAcIcKhyIiMSwcwglc2ABTDA2Eo9KQoy0PFxgYGRobDxwBDHRgF44YHQ4bHgkfHBUMHQ8gFp2dISIjEQwfBwIkJR0mICcoJycpKgweCisAEAcPGSwtLi8vsQkNtkMrBxswCQ8uMTINY0kzBCQwNB/DVAArBC0NNdlDM9BDfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -file_broken-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXDQyNAQCBMTCxPz+/KSipPz+xPzerAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEEgQahVijMmD/oRAbBw1FCgaFFrppeo5didsZTSMDoRBSi/dgfUz6Va7HPIQGB6KnpW0EEB4Oshp5ZlTFRBfFs3ZLDihtTAYwZ14nGbzoS3JfO4ffwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -file_important-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBExGTKQqLPz+/KQqNAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLoQwZAFIV6Es15Jqd2ZtzXUMIhXZqJYaZ5aK7zwp6h0zc05i+c6Eg8oCnWOR0eHQGEKnEWHdDoF+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -file_locked-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXDQyNAQCBMTCxPz+/KSipPz+xISCBERCBAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEEgQahVijMmD/oRAbBw1FCgaFFrppeo5didsZTSMDoRBSi/dgfUz6Sq7XGp1CByKQZUUWjsgrtcENYXNUodWhAahVRa65G9hmGgnnpzMZ/7xRwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder_blue-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHMzKzOzq7ERCRExGTCwqLARqnAQ+ZHR2dKyqrNTOzHx2fCQiJMTi9NTu9HzC3AxmnAQ+XPTm7Dy67DymzITC3IzG5AxypHRydKymrMzOzOzu7BweHByy9AyGtFyy1IzG3NTu/ARupFRSVByazBR6rAyGvFyuzJTK3MTm9BR+tAxWhHS61MTi7Pz+/IymvCxulBRelAx2rHS63Pz6/PTy9PTu9Nza3ISitBRupFSixNTS1CxqnDQyNMzGzOTi5MTCxMTGxGxubGxqbLy2vLSutGRiZLy6vLSytKyurDQuNFxaXKSipDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQYHCImDBgkKCwwNBQIBBw4Bhw8QERITFJYEFQUFnoIPFhcYoRkaFBscHR4Ggh8gIRciEiMQJBkltCa6JyUoKSkXKhIrLCQYuQAPLS4TEyUhKb0qLzDVAjEFMjMuNBMoNcw21QY3ODkFOjs82RM1PfDzFRU3fOggcM7Fj2pAgggRokOHDx9DhhAZUqQaISBGhjwMEvEIkiIHEgUAkgSJkiNLmFSMJChAEydPGBSBwvJQgAc0/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folder_blue_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOzi1Ozq7ERCRCwqLPz+/PT29Ozu7OTm5FRSVHRydIR+fISCfMTCvAQ6XARqnJSKfIx6XPz6/MzKxJTa9Mzq9JzO5PTy7OzizJSOhIyCdOTi5Dy65FTC7HS2zMzm7OTSvNTCnIRyVNza3Dw+PASq5BSGrFyqzMyyjMzOzAR+zBRejBxqnBx+rHRmTPTy9IyqvDRylFxaXNze3DRujAQ2VLSyrDQ2NNTW1NTS1AQ6VJyenGxqbMTGxLy6vGRiZKyurKyqrKSmpDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfCgACCAAECg4eIAAMEBQYCB4mHAQgJCgsLDAEGDQGIkw4PBQkJBYwQnRESEREIoRMUE6IVChYGERcYGaoRGhsbHBQdHgu2HyAhGSK6qxsjJCUmJwARKCkpKsjKqislLNIRLS4vLykw2MkRMRAGhDIJMzTiLzDXETUQ0gAGCgU2HjM35N3AkYMdAB0EbCjcwcPCDBguevjIR0jHDwgWLACBECRIBB8GJekQMiRIjhxEIlBMFOBADR9FIhiJ5OnAEQB+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder_cyan-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHNTKzOzq7ExGTCwqLERCRBSKjBRSVGxubKymrNTS1Hx2fCQiJMzq7NTy7IzKxHR2dFTW1Ey2rITKzNzy9JTSzBySlHRydKSipDTW1ByelGzCvIzOzByOjFRSVCy2rCSalGS+tJzSzBxudCR6hCSCjITGxMTm5Pz+/JSutDyChBxydCyOlITKxPz6/PTy9Nza3ISqrGSyrOzm7MzKzDQyNMzGzNze3OTi5MTCxNTO1Ly6vLSutGRiZKyurHRudDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe2gACCAAECg4eIAAMEBQYGB4mDCAkKCwwNjYUOAYcPEBESlBMMjAUFnIIPFBUWEBcYGQoaG5gGggMcHRUeFh+fGCCVIakiICMduiQWJa4fCKkdJicoCcjJKSrPAAIrBSwtLtMv1jDaCDEyMgUzNC3SKCA12gYFMjY2KzMzN98uLdo4cujYoa9BAx4IeSywJSgAjgU8evTIgdDHj4WJHAL54cPiDyAMIzkMsSGIkCGREAU4gAOAn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder_cyan_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFNze3Ozq7ERCRCwqLPz+/PT29Ozu7OTm5FRSVHRydIR+fIyCdMzGxAxOTBSGhIx6XJSKfMzKzERGRAxOVKTq5Mzy7KTW1Ozi1OzizEzSxGTWzHzCvNTq5OTSvNTCnIRyVNTS1BzKvCSalGy6tAQ6XMyyjMzOzDw+PByqtCR6fCyGjHRmTMS+vJSytDyChCyWlGReVOTi5AxGRKyurDQ2NNza3NTW1AxKTJyenGxqbMTCxMTGxLy6vLS2tLSurKyqrCwuLFxaXKSmpDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfEgACCAAECg4eIAAMEBQYCB4mHAQgJCgsLDAEGDQGIkw4PBQkJBZcQnRESEREIDwoPExSipBUWFxgZGhIXFwkbHBQToQQGFx0eHxoguhEXHCEiIyQGABclJiYnycsSKCkjKisAESwtLi7Y2soXLzDUAaMxMuYuM9kXNDDiAAYFBTU15NGTYeMGNQA4ahAgkEMHiQoxZrTYwWMfIRw9fKio8MMHECAReByUhIPGDSBBhAyJYDFRACJFeBi5cCSSpwM4APgJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -folder-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHMzKzOzq7ERCRExGTCwqLARqnAQ+ZHR2dKyqrNTOzHx2fCQiJMTi9NTu9HzC3AxmnAQ+XPTm7Dy67DymzITC3IzG5AxypHRydKymrMzOzOzu7BweHByy9AyGtFyy1IzG3NTu/ARupFRSVByazBR6rAyGvFyuzJTK3MTm9BR+tAxWhHS61MTi7Pz+/IymvCxulBRelAx2rHS63Pz6/PTy9PTu9Nza3ISitBRupFSixNTS1CxqnDQyNMzGzOTi5MTCxMTGxGxubGxqbLy2vLSutGRiZLy6vLSytKyurDQuNFxaXKSipDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQYHCImDBgkKCwwNBQIBBw4Bhw8QERITFJYEFQUFnoIPFhcYoRkaFBscHR4Ggh8gIRciEiMQJBkltCa6JyUoKSkXKhIrLCQYuQAPLS4TEyUhKb0qLzDVAjEFMjMuNBMoNcw21QY3ODkFOjs82RM1PfDzFRU3fOggcM7Fj2pAgggRokOHDx9DhhAZUqQaISBGhjwMEvEIkiIHEgUAkgSJkiNLmFSMJChAEydPGBSBwvJQgAc0/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folder_green-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHNTK1Ozq7ExGTCwqLERCRByGRBROLGxubKymrNTS1Hx2fCQiJMzm1NTy3ITGnKSipFzShFSydIzKnMzq1Nzy5JzSrByKTBweHDzOdCSaTGy+jJTOrFRSVDSuZCySVMzq3IzKpBxuRCR+TCSCVGy6hPz+/JSunDyCXCSOTCyWVCyeVPz6/PTy9IyqlCSCTGSuhPTu9Ozm7Nza3Dx+VBxyRDQyNMzGzNze3OTi5MTGxMTCxLy6vLSutGRiZLSytDQuNKyqrHRudDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe+gACCAAECg4eIAAMEBQYGB4mDCAkKCwwNjYUOAYcPEBESlA4TjAUFnIIPFBUWFxgZGpWXjYIbHB0VHhKtER+UCyC1ISIdxbkSGSMYJAiCByIlJicaxbgoEhDNAAYpBSorJScnLC0uHRLaCC8wMAUNMeAnMgkz2gY0NDUFKTYNBDE3cKzQlkPHDh42djRo0KNhjwUGBgXIscAHgQY6fPz4AQRioolBhGwUIiRIxEiEhoCYQKSIEZSHAhzIAcBPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -folder_green_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFNze3Ozq7ERCRCwqLPz+/PTy9PT29FRSVHRydIR+fISCfOzu7OTm5OTi5MzGxAxOLByCRJSKfIRyVERGRKTmvNTu3KTWvOzi1OzizIx6XIyCdFTOfGzSjITClAxGJOTSvNTCnNTW1Dw+PAxKJCTCVCyWVGy2jAQ6XMyyjMzKzByuZCR+TCyGVNTm3HRmTLy6vJSypESCXGReVLSurDQ2NNTS1MzOzKSipGRiZMTGxMTCxJyanDQyNLSytKyqrCwuLDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfCgACCAAECg4eIAAMEBQYCB4mHAQgJCowLAQYMAYiTDQ4FCgoPEBESnBMUExMIoBUWFaEKBRIXExgZGqoTChscFR0epQYTHyAhGrkUIhMcIyQWJSYAJygpKSrIyissFi0GABMuLzAv19kaMRMyM+ABojQ15ObYEzYz0wAGBQUbBPHkYNQQcQMcABwEEhLIkUMHjRQvTuzIRwgHjx45evTwMWPGiR8GJQGxcWNGkBtCTlBMFGDIgh9CJhCJ1OkADgB+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder_grey-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExKTBwWHMzKzOzq7ERCRExGTCwqLHx2fKyqrNTS1PTy9CQiJNza3OTi5GxubJSSlISChLSytFxWXDQuNKSipBweHISGhFxaXIR+hLSutFROVHR2dFRSVGReZKymrLy6vFxeXNTW1Pz+/KSepERGRPz6/PTu9Ozm7DQyNMzGzMTCxMTGxGxqbNTO1Ly2vHRydKyurHRudDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAawQIAQEBAMj0jAgFAwHBDJoUGASCgWDEMxETg2HA8FFaJgFgpdYSMiUYAnlErCsmgKL5iMJqJwPzYcCB0eahAZH4gSESAhYAoGQggiBh4eFB8iehEWI5AABiQFFpMeHCIiiCWeJicMDAUOEZMcHBkSngYMKCkpJA4OBCWTk0IqKw8PvwsLLCwtLBCeRCouLC8vK80wGzEHSQEqHxMhMBMyLtLfKh4WCjM0UUgBCCoAfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder_grey_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExOTBQWFNze3Ozq7ERGRCwqLPz+/PTy9Ozu7OTi5HRydIR+fISCfPT29Pz6/PTy7MTCxCwuLJSKfIx6XMzKzDQyNOzizJSOhIyCdOTm5Dw+PJSSlKSipLy+vOzi1OTSvNTCnIRyVNTW1GRiZFxaXAQ6XMyyjNTS1GRmZFxeXHRmTFRWVKSmpKyurMzOzGxqbMTGxLS2tJyenKyqrDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAauQIAQEBAMj0jAgFAwCA7JYwCRUCwWgoCBEUBOG47CAxJhSrqT5wERplQoC8ijYDEcJASJ4HKIYDAZFRoFGxwXHR4eH3lqICEiIyQcAAcMJSaIeHonKCMpkxMqAismKyuIixMsH5MBDw8eJS0mJpcdByYSkwAcEQUEBC4lo7UHL7sXwMAkKTAeogceu0QXMRIwFjISMxITNNNDARcmLx8zNTUH4F64NDUTNlHsk35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folder_home-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBDw6PBQWFCQiJAQCBFxeXMTCxJyanDwyLDQqLFRSVLSytJSSlISChCQmJERGRFRWVGxubKSmpJyenGRmZLy+vOzq7OTi5Ly6vGRiZPTy9Pz6/OTm5ExOTPT29BwaHNza3NS6tKx6XGQqBNy6pIyKjDwGBOzOvJSWlDQyNIRaLNRiBGwmBNyidLxWBHxGFNySXCwqLKyqrNR6LKxGBNTS1NTW1Jw+BEweDDQ2NAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaoQIBwCAgIiEjAgAAoGA6I5DBBUBgWjIZDqnwYGgVIoTGQQgyRiGRCgZCR1nTFcsFkHm9hBp2paDYbHAsZHW9eERkYGh4eGx4ag3gfSgMTIBshIiMkGyAlCCZTEpciJyQjGxcoKUQBEhcbKiQrLB4XEltDrhcaKi0utbcJra8bLzDAGrcxrTIXHi8zNCypEsO6EzU2IzQ3ONoTzK0BCAkDMQkIOTFlAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folder_html-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBERGRBQWFMzKzOzq7CwqLDw6NARqnAQ+XHR2dKyqrOTm5ExKTERCRHRydMTi7NTu9HS+1KSmpBweHDy67DyixHS61ITG3AxypByu7DxinBw+ZERmdIySjITC3ARypExOTDRurIR2RPTSdJyulEyGvBw+bFSyzJTK3LzKvPzivOTixNTChLSybGyCfCRSnBQqRASGtFyuzDw+PCRShPzy5OzerOTShKyaTEx6pCxerGRufBR+rOTezPTShNy6bER+1BxCfBQuRAxelFSixBw2VISq3GySrPTWlHyanIyitFSO3IymtCRujAxWhCRqlCQ6XGyWvNS2bFyGvDxuvCRSpLy+vMS+vGxqbFyO1GSi3EyO1FRaVCQuPLS2tDxyzKyWNFxaNCQyPGxubCxajERSVExKNJyenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfZgACCAAECg4eIAAMEBQICBomDBwgJCgsEDA0BDg8BhwYQERKUDxOYDAyeghQVFhehGBmVlwwOqxobHB0eH6EfIAkPIYIiIyQlJhsnKBcpvrYiKissLS4vMDEyFjOvNAA1LDY3ODk6Oyc8PTIyFzQ1Jj42P0A6QTtCQ0REIEUORkdIkihZwsSekBhNnDyBciCKiSNSplDRUcWKkRhXCGDJYgiGli1cpuTocsILjytfFmRpACAGRTBhRogZgzHlAjKGWnIoY+bMgRgBDHRBo/LAIZoxuhwKatRPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -folder_image-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPz+BAQCBExKTBQWFMzKzOTm5CwuLERCRARqnAQ+XHR2dKSmpHRydCQiJMTi7NTu9HS+1Dy67DyixITC3BR2pBweHByu7ASGtFSyzHS61AxypExOTBSazBRupJQOFBSCtDxKfKTa9AxelNz61MTaxDw+PPzGpLweHJTO3ESu3DRilFymXCxKRBRypBR+rDwCBNxmVORiRKQWFCyKvJTWhDSOPCRONFSixDQaHNROPNQ2JLRubHTC5DR6rHx6fFSqRCRyLGRmXGxqbIymtCRujAxWhMySjMQ2JMyqrKTW5ERijJSenFSGXGRmZLy+vMTGxMTCvERGRMxCNOzq7NTe5LSurISKhHR2fLy6vLS2tKyurGxubCwqLOSKfOzy9Nza3KSmrIyGjGxmZKyqrIRqZIyKjFxaXJyenDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAffgACCAAECg4eIAAMEBQICBomDBwgJCguMAoUMAYcNDg8QlAyXBaWcgg0REhCfExSVpIYAFRYXEhgZE60aCQwbghUcHRQXtri6DxMHgh4fICEiIyTFtxkOJQAeJicoKSojKywtLsUZJS8wMTIpMyA0NTYKIiIaNwc4OTo7PD0+P0BBhAwhUkTFAQNGjiBJomQJExsMmjh5AkVIFANQpEyhsqSKlStXmmDJomVLFC5Gunj5QiALmDAKxGSpMsYiAC5kqjhZUOaKmUdmzoAJgkaQgQYCmogJEmRQAC5pAPgJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -folder_important-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBExGTKQqLPz+/KQqNAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLoQwZAFIV6Es15Jqd2ZtzXUMIhXZqJYaZ5aK7zwp6h0zc05i+c6Eg8oCnWOR0eHQGEKnEWHdDoF+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder_locked-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQSFMzKzOTm5CwuLERCRARqnAQ+XHR2dKSmpOzm5GxqbCQiJMTi7NTu9HS+1HRydOTm1Ozq7Dy67DyixHS61ITC3AxypERGRBweHByu7ASGtFyy1DSOtDRmfExOTBSazBR+rCwqLAxWhAxelByGtDSaxAwODHy+1Dw+PPT29IyqvCxujOzu7NTW1Nza3ExGJJyebKyqfMTCpFRSPOTi5DQqHOTezDw2NMTGxKyqhMTGrGxmXDQ2NMTCxMTGpHx6bHx2bBQWFIyOXDQuDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQICBomDBwgJCgsEDAKFDQGHDg8QEZQSlxMUDJ2CDhUWF6AYGZWXFBqCGxwdFh4XGK8fIAohtiIIIx25EZwBDREHgiQjJSYmGScoKSoRKQ8rggIsDC0uJS4oGygoAyjdAAcsLxQUMDEyMzQ1EzapBy8MDDc36tFwgONFjlQ6dgCEEZBHDx8+ctRIRehHAyAwZASZIGRIEBoUBwUwIGMCiwFEaBQJichIjo9FZLBsacRIAB0A/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folder_man-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFMzKzOzq5ERCRCwqLARqnAQ+XHR2dKSmpHRydCQiJMTi7NTu9HS+1KyqrMzOzOTi5Ozu5Dy67DyixHS61ITC3ARypOzq7ERGRFRWVJyanByu7ASGtFyy1Hy+1FRSVOzu7BSazBR+rFSyzJTK3Dw+PFxaXPTy7LSyrAxWhAxelLy6vMTGxNTS1Ly6tFyuzMS+vPz69NTW1MTCvIyOjPT29OTm5HRybFSixLy+tLS2tISGhGxubIymtCRujCRqlHx6fNza1GRiZMTCxGxqZLy+vFxeXLSytKyurGxqbISChFxeZDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAffgACCAAECg4eIAAMEBQYCB4mDBggJCguMBgEGDAGHDQ4PEJQKERITFBOdgg0VFhegGBmVlxobABwdHh8WIBchsLIKIiIjCyQZJR+7JhcnoBAoKSoqKywtLi8wMbsyrwYpGhowHTMqNCqkyR8XKBwTNTY3KjgFOTopLS0ZO98wPD0+JhR490MAkCAshHyTsCLCEAlEYEgoIsCIjRlHDNzy0UFBDBtIbBzZ4KJHBB0aAQhIoqCHESQ9dAjooWQJE1uCBBRpkoSDExEcUnRYwOTJIQECNmwQwEFQgANQAPgJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -folder_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOzi1Ozq7ERCRCwqLPz+/PT29Ozu7OTm5FRSVHRydIR+fISCfMTCvAQ6XARqnJSKfIx6XPz6/MzKxJTa9Mzq9JzO5PTy7OzizJSOhIyCdOTi5Dy65FTC7HS2zMzm7OTSvNTCnIRyVNza3Dw+PASq5BSGrFyqzMyyjMzOzAR+zBRejBxqnBx+rHRmTPTy9IyqvDRylFxaXNze3DRujAQ2VLSyrDQ2NNTW1NTS1AQ6VJyenGxqbMTGxLy6vGRiZKyurKyqrKSmpDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfCgACCAAECg4eIAAMEBQYCB4mHAQgJCgsLDAEGDQGIkw4PBQkJBYwQnRESEREIoRMUE6IVChYGERcYGaoRGhsbHBQdHgu2HyAhGSK6qxsjJCUmJwARKCkpKsjKqislLNIRLS4vLykw2MkRMRAGhDIJMzTiLzDXETUQ0gAGCgU2HjM35N3AkYMdAB0EbCjcwcPCDBguevjIR0jHDwgWLACBECRIBB8GJekQMiRIjhxEIlBMFOBADR9FIhiJ5OnAEQB+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder_orange-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHNTO1Ozq7ExGTDQuNERCRJxmDFw6DGxubKymrMzOzOzu7Hx2fCwqLOzaxPTm1NSyfKSipBweHOSmRMSKRNy2jJxuFFw+DKyqrOSeJKxqFMyaXNSyhNSufFRSVMSCJKRyHLRuFMSORNy6nPTezHxaFIxmFJxqDJxyHPz+/LyqjJR2NPz6/NTS1KyehIxqNJRmDLyWXPTu9PTy9Ozm7Nza3MzKzMzK1OTi5MTCxMTGxDQ2NMzGzLy+vLy2vKyurGRiZLSytLy6vFxaXHRudDw6PDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe/gACCAAECg4eIAAMEBQYGB4mDCAkKCwwNDgYBBg8BhxAREhOUDxSMBQWeghUWFxOhGBkaCxuMBqscHRceHyCwCbMhqyIZIx0kJR4gJicSIAiCECMoKSorKyS6yhHQAAYsBS0uKSkZHSsdHc+CCC8vqDAxMtQzJDTdBjU2NwUsODg5Wsxz0e2ADhw7/sEgwKOHwwW3BAXwsYAHARg/eAAJIgRiogAHhhApEoSIkCERI4E0QmHDESSREAWAkASAn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder_orange_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOTm5ERCRCwqLPz+/PTy9PTy7OTi5FRSVHRydISCfIR+fPT29Ozu7MTCxFw+BJxqBFQ+BJSOhIRyVMTGxPzSlPzmxOTGnOzizIx6XIyCdOyeLPSuTNSubOTSvNTCnNza3Dw+POSGBLRyDMyeXAQ6XMyyjMzKzMyWBKx6FJx2FHRmTLy+xDw6PLyqjJR2LJRyDFxaXOzq7JRuLEw2BKyurDQyNNze3NTW1NTS1MzOzJyenDQ2NGxqbLy6vJyanGRiZLS2tKyqrCwuLKSmpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfEgACCAAECg4eIAAMEBAUCBomHAQcICQoECwEFDAGIkw0OBA8PEIwRnRITFBIHDRAVFhWipBcFEhgZGhMSEg8bGxUcHQQKth4fIBoburwbISIWIyQAEiUmJicnyrooKRYqBdQrEywt1yfJGxQuLzCEozEyM+XnEjQv4QAFEDUKCjE2JrRoYeMGjmkAchAYoWPEDh49YrBQ5SMfoR9AXvRQcSFCkBcUhFgcFCDHEBxBiOAoQgFhpABGaPg4IiFHJE8GbPoJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -folder_red-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExKTBwWHMzKzOzm7ERCRExGTCwqLIw6FFQiDHx2fKyqrOzu7CQiJOzOxPTe1MySfKymrOzq7Nx2TLxmTNSelJQ+FMzOzNxiNKw+HMR6ZMyWhNSajHRydFRSVLxSLJRKJKRKJKQ+HNSWhNSmnHQ6FIRGHJRCHPz6/LSajIRONPTu9Nza3KyShLR6ZPz+/DQyNOTi5NTS1MTCxGxubGxqbMzGzLy6vLSytGRiZHRudDw6PAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAanQIAQEBAMj0jAgFAwHBDJoSGhWDAIDUHgsAgcHQ9IhLqQMAsTr9BBqUTClktVgmkYhIOMprLhdOBUHh9rICEiIyN8JCVwdwAOIiYnJyiHiRtvjgYpBSorJgknIpYRmikpLAUtLp+hIy+aLKkFMC0tGJ4mK44xBDKqLTMEBDTFNY5EMTY0MzM3NDg4OR7IQwExOjnROTk6B1FC1x8SEjs84EcBCDEAfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder_red_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOTi5OTm5CwqLPz+/PTy9Ozu7Nze3Ozq7HRydISCfPT29PTy7MTGxFQiDIw6FJSKfIx6XPz6/MzKzERGRNyypPTWzOzi1OzizIyCdDw+PNRuTNyCZMSSfOzW1OTSvNTCnIRyVNTS1ERCRMxGFJxGJIRKJLyCbAQ6XMyyjLRWFHRmTLy+xLSelIxWPEQeBGReVIxOJIRSPKyurDQyNNTW1JxOLEwiDKSipGRiZMTCxLy6vJyenLS2tCwuLFxaXKSmpDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe+gACCAAECg4eIAAMEBQICBomHAQcICQoLAoUMAYiTDQ0LDg4PCgQQnBESEREHoBMUEwUVDgsWFxEYGRiqEQ8aG68cBQQdER4fIBghu6saIiMkJSYAEScoKSrJyxIrLNEd1C0p1ygo2coRLi/gAaIwMSnx5SoyM+uCHQ8LChrv8TQ1ZNiYBuCGgoMKcJSwACNHCh07wAkK0IFHj4UQevjwEeGHREk3ZtjwAcSGjQgfEwUIIuTHEJSROhkgAsBPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -folder_sound-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFMzOzOTm5ERCRCwqLARqnAQ+XHR2dKyqrMzKzHRydCQiJMTi7NTu9HS61KSmpDy67DyexExSVITC3AxypBweHByu7FRiZDRiZHy+1ARypExaXBy2xGRqZFSyzJTK3AQ+RByqtASCtASGtFyuzDw+PATC1ByGlFxeXISGhJSWlFRWVAxmlBR2pBR+rAQ2PAS2xHS2vMTCxJyenLS2tCRujAxWhAxelFSixAQaHARibARudAR2hEySnPTy9Nza3GRiZNTS1IymtCRqlARWXDyCjPz6/MTGxLy+vMS+vGxqbAQiJARaZEx+hLy6vKyurERGRBQuNCw6PISanFxaXDw6PCQ2NDRGRDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfYgACCAAECg4eIAAMEBQYCB4mDBggJCgsMBQIBBg0Bhw4PEBGUDRKMBQWegg4TFBUVEBYXlZeNghgZGhsCFRyhFh0JDRWCAx4fGg0gCiERIqEcBoIjHyQeDcMlJhQnEQ8oANQpKissLS4vMDEmJhEoMjPxNDU2Ny44OTo6FzsGPD0+fgABEUTIECIMiuAzIk3GkR5IbgRJMoSAkiVKmDSRBsDJEyg1hBQYUqNGlBtSGkwZRGUDEyILWCxYcmPBgiYrB1WxEsBTgANXbCwYggVRFi2Ifm4B4CcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folder_tar-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFMzKzOTm5ERCRCwqLARqnAQ+XHR2dKSmpHRydCQiJMTi7NTu9Hy+1ARypDy67DyixHS61ITC3Ozq7BweHJySbJyWbAxypExOTPz21KyqjPz67OzmxFSyzJTK3LSujASGtDw+PKSehPz69Pz23OzitPTqvOzerKSaZBR2pBR+rKSefMy+dKyeTIR2NAxWhAxelFSixJyadOzirLyubLyqVJySPHRmJIymtCRujCRqlPTqzOzW5OzSzNzSrLyqXLSeTJSGNMTGxMS+vLy6vGxqbJSKZOzOxNzGtNzOhKSSRIR+LGReHLy+vKyurOTWlHxyJFxSFLS2tKyqrERGRHRuRNzKfNTGdGxeJGxiNFxaXJyenDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfcgACCAAECg4eIAAMEBQYCB4mDBggJCguMAgEGDAGHDQ4PEBEJDJcFp52CDRITFKAVo6UEFgaCFxgZGRgUFa8apBsAuhwdHh+5IBQhrwYZIh3PHdAdGSMTyQ4kJR4mJycdKCkqKywtIyMUJC4cKR7EKC8wMTIzMxE0BjUmJjY2NzgwcuggsIOHjB7NfPwAEkTIkBxEdBQxUuQIEgNJgihZwgRGEyJOnhyBciTKxSRSpDBh0iRGjClUjlSJYgXJFQBYbmTREmOLDi4BDnTxsgDJl0E5uXBBFBQMAD+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -folder_txt-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAMR6RPwCBAQCBExKTPzGjBQWFMzOzOTm5ERCRCwqLPyGBPzKjARqnAQ+XHR2dKSmpMzKzHRydPyGDNTu9Hy+1OR2BNSOXHS+1MTi7ITC3AxypOzq7KRKBPyCDOySZPzizPTWxFSyzHS61ITG3FROTCQSBMxmJNRyROy2lOy2nASGtDyixJTK3FxGNIRWLMR+XPzStPTKrBRupBR+tFyuzDw+PDQuJIRSNAxWhAxmnBR2pBR+rPT29FxaVEw6LKRuVIx6ZISitCRujAxelAxmlFSixOzu7JyWjBwaFKSShNTW1MTGxDQ2NMTCxNze3Nza3HRqXMS+vGxubGRiZLSytCwuLERGRJyenGxqbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAfLgAABgwIDg4eIAQSCBQYHCAMJiYMKCwAMDQ4PEAcDAggRApQSlhMUmJqOBweiFQoKBBYXGBMZGpkPBhsIHBUdHh8gISIjtCOoJCUcJicoHykqK8MstBQIASUtLi8wMTIzKtE0Ihg1gwg2Ny8xKDg5OjvhItcBCDw9Pj9AQUI4Q0QMipirZ2TDERJIkihZwg+HEHpMmjg58OQIFANLomSUQi+AACZTohiAkDEKFSocJwmoMoWKSSoPpFiZdEhAgh5XHmBhQjORTZ5+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder_video-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExOTBQWFMzKzOTm5ERCRCwqLARqnAQ+XHR2dKSmpHRydCQiJMTi7NTu9Hy+1Hx6dJyenLy6vIyOjDy67DyixHS61ITC3ARypOzq7ERGRFxaPKyqrBweHByu7ASGtFSyzITG3KSOPKyurBSazBR+rJTK3HS+1Hx6ZNzObAxWhAxelAxmlBRupBR+tFyuzDw+POzibNzOZIyqvCRujLyiPJyCPJSWlNTS1ISitFSixHxiFGxeJFxWLExKNCRqlDw2BFROHHxqPMSqVISChMzOzGxqZISCbLSaRKSWTFxWPNzGZNTCZLy+vLSytGxubJSSfGRiTMyyVLymTLyiRMSqTEQ+JGxqbNS+XNzKZOTWbLy2ZFxaXDw6PIyGbOzidOzifMy6XCwmFGxmXDw6LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfigACCAAECg4eIAAMEBQYCB4mDBggJCguMAgEGDAGHDQ4PEJQREowFBZ0TFA0VFhegGBkJEZcaGxwdHh8gFiEXGKAiowIjHCQlCCYgvL4noCgGKSoGCyssLS4vyxYwrzEyM9MSNDUrK9jKIBcGNiMjNwY4Gjk65dcIOwY8PT0+PwYUAuTIQaDeCiAGgggZMoQDEQNFchghMIHiEQNIkihZwoRJkx8RCDhxMuEJFAMGokiZQoRKFStXjpQk0QHLBgDRrEzJomULlwFHukhYgMWLIANfwIAJw+WKmDFkAjQoA8BPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -folder_violet-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExKTBwWHMzKzOzq7ERCRExGTCwqLHQWhEQOVHR2dKyqrNTS1PTy9Hx2fCQiJOTK7OzW9LyKzGxubLRW1JxOtLyCzMSS1HwijKSipLQ61HwinKxuvHQajFRSVJQytIQqlKRqvMSe1GQebHQihLSCxNzG5Pz+/KyStHQ6hPz6/PTu9Nza3KSGrJxmrOzm7MzOzDw6PDQyNOTi5MzGzMTCxGxqbLy6vLSytHRudGRiZLy2vDQuNFxaXDQ6NCH5BAEAAAAALAAAAAAQABAAAAaoQIAQEBAMj0jAgFAwHBDJoSGhWDAaDkPxEThCIpIJlcJgFgpdIaRiuYAxGcVD02gKBxuOpXPBvD1VH2ogISEceiIXI2ATBmohJAklGYaIJieOAAIoBSkqJCUlHJUmmQYrDiwFLS6foRwvpqkwMCstDTGtJCoyQjMELTQttw01Nsc3B0MBMxQ2DSfGNjg5OplHzDs5ODw5DMlRQgE9PhoMOjPh2BA/AH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folder_violet_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOTi5OTm5CwqLPz+/PTy7Ozu7HRydISCfPT29Ozq7Nze3MTGxEQOTGwahDwKRJSKfIx6XOzi1Pz6/MTKxNSi5OTS7Mym1OzizJSOhIyCdDw+PKxSzLRq1LSCxOTSvNTCnIRyVNTW1JwixHwqlKRutOTS5AQ6XMyyjNTS1JwerHQmfIQylHRmTLzCvKyWtHRChHwuhFxaXERCRHQ+fLSytDQ2NKSmpGxqbLy6vDwOTJyenDQyNKyqrCwuLDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQICBomHAQcICYwChQoBiJMLCwUMBw0NDg+bEBESEAcLDRMUExUMFggXAhAYGRoREBAIGxscFB0EBB4QHyAhGrq8EBsiIyQlHgAQJicnKMspuyorJCzVEi0uLy7Z2xopEDAx1QEMDDIzLjTZ2hI174I2CQ0EHMi4ge7EDQk4qgHI4aChAxYsLsg4J0GHQkI5dsSIeCFGDB49fFwcFOBHDRw8cOAAAmEkpyA1fOjoISQSJwPV/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folder_wordprocessing-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExOTBQSFMzKzOTm5ERCRDQuLARqnAQ+XHRydKSmpExKTCQiHMTi7NTu9HS+1HR2dCQiJDy67DyixHS61ITC3AxypKyqrBweHGxqbGRmZFxaXFRSVERGRPz+/ITG3JyalOze1PTm3Ozi1PTm1Hx2bJTK3IyOjPTy9CQqJFyuzDw+PNTGnDQyNPTq3Ozq7MS2hASGtKyaXCwqHBwaHFxWTKyahLSijKyehHRmXHRqNFSixHxyNAwKDERCPAQGBCwqLIymtCRujAxWhCRqlMS+vMTGxIyCVJSSfLy6vLS2tLSytGxubCwqJExGJEQ+JBQWFJyanDw6NDQ2NBQaFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfUgACCAAECg4eIAAMEBQIGB4mDBggJCguMDAEGCgGHDQ4PEJQRlwWmnYISExQVoBYXCREYjAaCGREaGxwdHh8PIJQKhgAhIiMkJSQkJhUnrrUGKCkf1B8pGyoUK60sLSouIS8vMCUhBw0xMjIVBjM0NTY3ODk5Og0NOwgXPCw9AD4BBvwwMABIgCBChhApUqtBhgw1INaIWMPIESMaGiIRsbFjkhpKlmDQYKgGx5MdDyxhgqFJLSdPoMiU+YRGFA5SRk4RRCWDix9TnFRxISiAE6J+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder_yellow-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHMzKzOzq7ExGTCwqLERCRJSSDFxWDGxubKyqrNTS1Hx2fCQiJOzqzPTy1NTKfHRydOTWTMSyTNTKjNzOjJyWFHR2dKymrOTaLKyaFLyyRMS6ZFRSVLy2JKSeHNTOnNTKhHR2FISGHIyKHKyeFOzmxPz+/LS2lIyCNJSWJMzKfPz6/PTy9Nze3KyqhLS2XPTu9Ozm7Nza3MzK1LSyjIyONDQyNOTi5NTO1MTGxMTCxMzGzLy6vLSutGRiZLy2vKyurKSipAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe0gACCAAECg4eIAAMEBQYGB4mDCAkKCwwNjYUOAYcPEBESlBMMjAUFnIIPFBUWnxcYChkajAaCAxscHR4SrREWlBkfqSAYIRy5uyKfIwipISQlJhgnx7oSKM0ABikFKivQCSwn1C3ZCC4vLwUwMd/RGDLZBjPqNCk1NTY33zjZOQQ1dOBrsIMHjx49FtQSFCDHgh47GvhA+AOIwkQNgwARUnHIxUiEcnwgwmBBDpCHAjw46ScQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folder_yellow_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFNze3Ozq7ERCRCwqLPz+/PTy9PT29FRSVHRydIR+fISCfOzu7OTm5MTCxFRWBIyOFFRSBJSKfIRyVOzqnPTuzNzapOzi1OzizIx6XIyCdNzORNzSZMTCfOzqzOTSvNTCnNTW1NTGFKSaHLy6ZAQ6XMyyjMzKzDw+PLS+DHyGHIySJHRmTLy+xLS2lIyKPISGJGReVOTi5ISGNExKBKyqrDQyNNza3NTS1JyeJKSipGxqbMzOzLS2tJyanKyurLy6vKyutCwuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQYCB4mHAQgJCowLAQYMAYiTDQ4FCgoPEBARnBITFBIIoBUWFaEKBREGFBcYGaoUChobFRwdBRAGEh4fIBkhuqsbIiMWJAYAFCUmJifJG7ooKRYqK9QsLS4T19kZGxIvMNMBojEyMy4u5xQ0EeEABgUFBDUxbJBzYeMGjmkAchBYqGPHjggxeMy40UMfoRw+IvxQoSICEBgUgiCUlIOGkCFAiOCgYDFRgCILgqxsGYnQgRwA/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -ftp-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3LSyrJyanPz+/Ozq7GxqbDxinBw+ZERmdIySjHRydMzOzPT29CwuNDRurIR2RPTSdJyulEyGvBw+bLzCxIyKhGxubERCRLzKvPzivPTmxNTChLSybGyCfCRSnBQqPLy6vLy2rCRShOTixPzy5OzerOTShLyaVEx6nCxerGRyhOTi3OzaxPTShNy6bEx6rER6zDRitBxCfPTq3LyulBw2VISq3GySrPTWlHyanIyitFSO3PTm1Ozi1LyqjDQyNCQ6XHSq3GyWvDxuvCRSpLSqpOzezAQCBCxGZCRKZExGLDQuHAwaLBQWHKymnOzexARCBJzOnGy2bDyePCxKJOzWvLymhAx6DAyGDDROLOTOpHRmVLyidLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfRgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFkZMICQoLlwwNDgQPghAREhMUCBUWBRcMGBmnEBobHB0eHyAhIg4CIxenJCUmJygpKisVLAIGLSMPJBQuJi8wMTIzNCEWJjU2Dzc4OTo7PD0yK94DPj9AQUIUQ0QwFDFFRjchRz5IbARJEkLJkiVMmDRx8uQBlCgbgDyQMmUKlYpTqlSsYsXFFSwTK2bRMmWkyCxbuICkmKVlySwvpXTh4mWilJs4c3bB8uXLqUEBHggdSvSBn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -link-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBFxaXPz+/AQCBKSipAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMgCLrc/jDKSau9OL/AuwxCKAzfOIwlcZIRKLJQMMyz5CcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -network-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBISChPz+/Nza3ARaZESanCyKlARudARGTLy+vNzq7ARmbMTCxARufAROVMzOzKSipARyfOzq7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVmICAGZFmKQiACweCSBImq41AYB5IodLq2hwWO0ejRWDac48Gb/QKNqNRoqspmrVcAUuIJBANS8sBIFCORUgooPEh4J8B67NgdsVBp9C5XWfl9LRMTCyReX19hARNojWlWLH+AAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -pipe-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChMTCxPz+/ARCBFxaXASChCH5BAEAAAAALAAAAAAQABAAAAM2CLoazpAFIV6UYZB6Yd5BtwRbEYqkYIqAQRir6KpnN8cdCddXivcbAy+S2qEOAuPx8MtZRP4EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -shredder-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBERCBAQCBMTCBPz+xFxaXPz+/AQChISCBISC/DQyNPz+BARCRAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARcEMgZhBUzgzuIH4G2FYThnZUlCab5Ed0hC6nZ3Yh8JIKyLjCYboeZKIK6BDHTGwyViopEoWAkdwfqoKhIKLFUwXY79coUtLG4CFAcOOstWyNWyEXMO57p2/vxfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -socket-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+xMTCBFxaXKSipDQyNPz+/MTCxISChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARKEMgZpr1SjFqx1QHoTaA4AuV2EmmHEUUxsKoHB7FMGPbhI7gCgnchII6+AyJBtBhjx0KC2TsIp9QXcpm1HafNEQF8mhAOCdfEHwEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -trashcan_empty-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBKSipERCBARCRPz+/MTCxISChFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARREEgZapiYWjGIvVNQjEZ5BKUAApVgjEWJzCtAnIGgC8eZ5bre7ICosQQFVY9Y/CGVwiYmlwwsac7qVRp6WqNGKpQZ9m7DojH2t+lVMtMP3B8BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -trashcan_full-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/Pz+xATCxMTCxMTCBKSipPyqXISCBFxaXISChAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARbEIAQJJU4BzEoIdSFbcNQnIVhBJ02GAeFIGxZjUl8KoHRagfeYqgo3kaxQOEwXPAyk4Mgtgg6jxYp1foETgPEKzSgBXOx0W9VIfZu2d3R5t3WhA5BEdQSQgP8EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -www-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3LSyrJyanPz+/Ozq7GxqbDxinBw+ZERmdIySjHRydMzOzPT29CwuNDRurIR2RPTSdJyulEyGvBw+bLzCxIyKhGxubERCPLzKvPzivOTixNTChLSybGyCfCRSnBQqPLy6vOTi3Ly2rCRShPzy5OzerLyaVEx6nCxerGRyhOTezPTShNy6bEx6rER6zDRitBxCfPTu5PTq3LyqjBw2VISq3GySrPTWlHyanIyitFSO3LSqpPTm1DQyNCQ6XHSq3GyWvDxuvCRSpKyurOzizAQCBCxGZCRKZExGLDQuHAwaLBQWHKymnPTmxOzaxHx+fMTCvOzWvLymhHRmVExGPOTOpExOTERCRLyedBwaHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfWgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFkZMICQoLlwwNDgQPghAREhMUCBUWBRcMGBmnEBobHB0eHyAhIg4jJBenJRwmJxIoKSoVKwIGwg8lFCwmLS4vMDEyIRYzNDUPNjc4OTo7PDAq3T0+Pj0/QBRBQi4UL0NENiFFPkbijoRAkiSJEiVLmDR54OQJFHEPREQRIWWihYlRMkCZQuXBgyIBihSpIjLAowBWroj7gaUIlpYvXWLJUuWKlgdbHvz44XHnzgdVami5qUinR50/efoJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -zip-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBIQChPzC/AQCBMQCxAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMeCBCh/i+IAesShNo4+v5gKI5kaZ7oxzCilLVvq/kJACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -cal1day-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANOCLrMEUDIOUS9AFLLhx8LIRZjKYZmMRCkaChFLHty/AIiS3y6q+QtT49wq8VotRtQJGwRf6Zmrlj7DJLQXsupTJmeEIN4TB5nII20wp8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -cal5days-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANMCLrMEUDIOUS9AFLLhx8LIRZjKYbj55GioRRwoQ5x4QIiIdMmcec7jy53q81qP9OO5VMAj8RXTFWzOZW95HDLdEEM4LA4nIE0zgp/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -cal7days-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANPCLrMEUDIOUS9AFLLhx8LIRZjKYbj55GioRRwoQ5x4QIiwcp0fucsj873qvGMv5Jw2FIACUsW4WakGW1O046I05qmGYBhTC6TM5CGWuFPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -calappointment-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/MTCxPz+BISCBISChKSipAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARbEMhJaQhA6D1E/wDGeeRgDhOhFoTBEi+REgdrIHScSEVvAD9Xr7cDqGSGpFEnQSqTv2NxCFQOiU1VEAiTZmstHFg1vQKuw+LxxfYaV/AuOQRI2O/4ewhT6Uv8EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -calbell-16:korganizer korganizer16 16:photo:16 16:R0lGODlhDwAOAIIAAPwCBISCBPz+BIQCBMTCxISChPz+/AQCBCH5BAEAAAAALAAAAAAPAA4AAAM+CLrR+zCIAWsgLVRGRBhOVQiG94WPVAbHaZHYAWqRYLbge88RsbInGuBCEhRYrZYm4xk4nYdoKzKIbiKHawIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -callist-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/KSipPzerMRaBEQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARDEMhJaQhA6D1E/wDGeeRgDhOhruyatjBRSIRxxOsMEAdC0BUZDcfSEYvDo3Bn++2Cxt7RqFxWhZiCdsvdhjCVsMQfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -calmonth-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANSCLrMEUDIOUS9AFLLhx8LIRZjKYbiRxLFIBpK0Q6z7MkwkJIe8b0KEeuWchFysuStVsjtfMbeMQitWpG25YfmNK1WU53XNIUYzug0OgNpuBX+BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -caltoday-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/MTCxKSipPyCBMRaBPyqXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARTEMhJaQhA6D1E/wDGeeRgDhOhFmurpi5LyIQhFfiBIAfuFzaAioBIJBCummRYPCaDPh3vhwsOZdihNfa8Ub/AJXemFZPPNBvGwG672yFMZS7xRwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -caltodo-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBAT+BAQC/AQCjPz+/MTCxPzCxKSipPwCBMQCBIQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARaEMhJaQhA6D1E/wDGeeRgDhOhFmurpi5LyMYhFXiuFwZiA6qZYbbqJX5BIw2RAPxwAAWCyWMCCsiXFGEEErKz6LQZfOqiTR1YJiGq1rFyyHmo2+/1EKbCl/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -adjustcol-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBGRiZAQCBPz+/CH5BAEAAAAALAAAAAAQABAAAAI7hI8JAWL+IgvwUSSY2Lz7VTXXkS2NdJ6TwiSaB3PNQNdCbc/4cO9OjwPmhDQiTxfcHY1MpE35g0IB/gIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -adjustrow-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBGRiZAQCBPz+/CH5BAEAAAAALAAAAAAQABAAAAI5hI8JEcItooxG1oEzBoJ7oWlHd4VbNZpbx3LqUFGuajTPhI8kSLfsO0rRUCXT5wPkyHhGhsOJs/gLACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -black_sum-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIdhI+py60BY2QwhVYdytpw/WFXF1LjcW6S1LVu6xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -border_all-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAIjhI+pq+FuHjwyRInqfRkDTXkgQ5YLOH6it00pyqqcPJk26RcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -border_bottom-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAInRIynGe0PFTQz2kdxzHf72iSiRDpc2F1niaafBroYQNe2fdx6HfgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -border_fall-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAIrRIyneRYP4wPUKWmr3E5b+DVh9GkYuFALiqnsJp6nObYZB5ow2a3Jvwv6CwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -border_horizontal-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAImRIynGe0PFTQz2kdxzHf7CoTiSB7kKUpa1Vlc86rtSjvxnOSL4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -border_inside-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAIrRIygxxYPF4zzyenqxfVk2m0g9lnKiabqqoYl43YwGcqiFWv22zRnD/AXAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -border_left-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAInBHKJmxYPY3TyVCozsjMbrk3gM27KyZDlioVQS3qwO7Nl6KC6q/kFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -border_outline-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAIrhI8ZybgQYoTy2YqtwVTunVVfN3HQsaTnc5Kp2Ibw5Zm0PHJ2w7O8I5P5CwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -border_remove-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAIjRIynGe0PFTQz2kdxzHf72iSiRDpc2F1niaafBrraSMuQXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -border_right-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAInRIynaOEPH5hRRVrzbJBLn32g1TXJuWBdpYYiy47hBl+yRqH6HfoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -border_top-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAImhI8ZyRgPo3xgVnmnprbvnUEhx1XmgpLRmH7e+rowFssleuaBXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -border_up-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAItRIynwOEPH0vRuGkjnFKjpmgX2FVkuBwNhapZKZ3VyMKcGJPv5eJmAkz5RP4CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -border_vertical-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAIrRIygxxYPF4zzyenqxfVk2m0g9llmsiCmVjJh65Jh59GtGMuzqqQNDQz4CwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -cell_edit-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAQABAAAAIshI+pm+EPnwmi2msDoLgLzQWDV4HlSJof6qki+W0nrMKlbN9bxGvMDwwG/QUAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -cell_layout-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/PzerMTCxPyqXHx+fAAAACH5BAEAAAAALAAAAAAQABAAAANCCLrc/i3ISacKIuutA8ACxWUeJg0DqBHhd6ZiRpQBag9F2n13FRis0q1QUAmCvFuKRTAYWhIi0bhz+SqQrHbL9ScAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -chart-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBAQCxAQC/AT+/MTC/Pz+BAAAACH5BAEAAAAALAAAAAAQABAAAANMCLocHiyuIASU6lE7Xx7DdgEBQVwBKE4mqlZjeT4vl7VFkYZUjOuGkMFiuJ1yKUNAWTQGkEKDknUESpdXkkYjnWIWzOVX0SyPJwx/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -comment-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+BPz+/Hx+BAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM5CLrc/i3ISacKYuStuwhAMBATKRHkAGJeu60qagqmuHK4B6Pn3N0u147Ha8FyOVCowlRCntAo1J8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -deletecell-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPz+/PwCBMQCBISChAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANICLrc/i3ISacKIuutA8BcKAwfNwwmQYDZoJ6tWrBZoRKuXIb2XRS7UG4wC25yOIGHFvu9PJ8KcRbQOVzAheoxbRCyDOKj4E8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -delete_table-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPz+/PwCBMQCBISChAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANPCLHcDDCIOSUVAaqLeY5O+G2XRQVDdA0DNxCEwrwEu9AFORVw3ee6Cu8HFKFgA2AQQ6uNTJNXYZgCNZKFBay4IhQuMBUFW/LKZlkHoOBPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -dissociatecell-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAASC/AQCBPz+/PwCBCH5BAEAAAAALAAAAAAQABAAAAI0hI+pm+EPoQlC0GqxnfV2HUzR6HDWgA5Bqppr+qIhcMUqO5Oki+M87KN1ejCRTsJIKhP+AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -first_letter_upper-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIohI+py72RIJOHRmBt3QaGz2GVBGJfKW4aiXhX2sHxbKKneDv6zht+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -fontsizedown-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAInhI+pELHqmIkQNZrwfXYvzE1fBUrWoZniOjWdp0agjLL2i7rhDvgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -fontsizeup-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pEeoNIFyIzXStw3q/T4VVhJHHlDGjgZ6n1bLyCrqPyuJe4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -funct-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+py60R3IkRVHQzo9BwD1qhqGneRU4gSqlVJ8Zy0mKPhOe6XwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -insertcell-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBPz+/Pz+BATCBAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAM7CLoa/k7IKQCEdNobc+UOMCijCD5jGjAMOowrIc/Wm77ATIe2leuETcrEYpSOJ88HpNxwmqdi40Tl+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -inserttable-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAIuRI6JwCH/HBSBmUlxbarvO0nQJ0aa5XWodjZsiKbJGrbgaMuzW8M87jPoDgx/AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -lower-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIqhI+pELHqmIkQNZrwfXYvzE0QKGniQWmNhbYSeqXn6zJOBJLTuuuh4i8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mergecell-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ATCBCH5BAEAAAAALAAAAAAQABAAAAIyhI+pm+EPoQlC0GqxnfV2HUzR6HDWgKZpCFyBCrMurMoPvZovPsgd39MBbaQI44hU+AsAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -money-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPz+BPwCBASCBATCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM+CLrcHMHJIEaUD16sqIUcQAne5pQaBglkZS6lxb6dRoIAQTzuphcFXWeW0xl/utIPGDQOSUdnA7IUhoocfwIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -oscilloscope-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBOTm5Hx+fLy+vAQCfAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANKCLrcGjDK+IS9494AgrbEJ3CeUBRWpp2daaHhhZKuq75jh8pxTRaEQbAgFAIHv1VvR/vsdrnSCmdpagYnjfXS27Q+N29nQuYA/AkAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -percent-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIkhI+py70RUHxxQmosu6BOdWkNR35PVm1etqEsaKXnwTn2DfgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -precminus-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAIthH8RiJvrmHogVoXNtFRDpjUf6JWkeUoXlpGBAMfC+cowbd+uwL54/rMFZf4CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -precplus-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAI2hG8Rp4y9IGgszqhyspLueYHih43hiX7Iui5XprGTQNeCPNNBje86L9vBdr2a7xY0AllHm78AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -removecell-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAAQCBASC/Pz+/PwCBCH5BAEAAAEALAAAAAAQABAAAAI5hG+hq+IvAGPwydlqxAohvnjHMChkR6YDcKaougZqCMdyGYqSG+jXKQtoNkGTUHPBDJMTH+jJ8RcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -removecomment-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPz+BPz+/Hx+BPwCBMQCBISChCH5BAEAAAAALAAAAAAQABAAAANVCLrc/i3ISacKYuStuwhAMBATKRHkUIScUBSeahhigBbzK+HGgXmHmYHXC41MqKDwcGDFMryCz4gi3YQwkKiFY+ZAoYrUF5g1HV3G7DFuFBvSx8GfAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -resizecol-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBFxaXAQCBDQyNPz+/AAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMyCLrcG0A4CZ90saohuv+XEgxYxkDhQp2lyIBwKhB0bct2TuB6zfe7F5D26xV1x9zFnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -resizerow-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBFxaXAQCBPz+/CH5BAEAAAAALAAAAAAQABAAAAIyhI+pmxHinph0GnqH3hoIDwocd3zZ2F0lmoInWq5s/I60xw5hmF8WPnNAhJUK44hM+AsAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -series-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBGRiZAAAACH5BAEAAAAALAAAAAAQABAAAAIjhI+py+0fUGRhGrswVtr1FgiGsGlhZVWAuarr9byyB8f24hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -sort_decrease-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAAT+BPwCBAQCBAQC/FxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM5CBDM+uKp8KiMsmaAs82dtnGeCHnNp4TjNQ4jq8CbDNOroIe3ROyEx2A4vOgkOBzgFxQ6Xa0owJ8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -sort_incr-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAAT+BAQC/AQCBPwCBFxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM4CAqxLm61CGBs81FMrQxgpnhKJlaXFJHUGg0w7DrDUmvtPQo8qyuEHoHW6hEVv+DQFvuhWtCFPwEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -special_paste-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+xPz+BNTS1MzGLMRaBMzOzPz+rPyqXPz+/MzGNDQyNKSipAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARoEMgJQhBySGx7IEQwFKMWGKgRHNZRIAJSVAm6usIwCEo+BDWVJ/CKzYAplWJZItGSgSVPZBEgU9EFQyGyWoK25XJ4DTO2iob6CxVLe2ys4rw9e8HKd8ybVJ7ndgEVQz09e1YUEmQefhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -strike_out-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBGRiZAAAACH5BAEAAAAALAAAAAAQABAAAAIghI+py+0BgwOS1gXnuS/b6ClCpCUcclJMmKIGWcby5BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text_bottom-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIVhI+py+0Po5y0hYtzrkB7zH0fN/kFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -text_center-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsnRkqtDnhu1zHfFSpjaY4PavgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -text_left-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsgRoqr3Vnt102fFSJjUC6nlPoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -text_middle-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIXhI+py+0PT5i01pisphjt3UmfFZYm5hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text_multirow-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsg2kfZvblXbwTg10WlA4rjyvgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -text_right-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+pm+EPIZstSrqsDhhv1ylfFE5jiYwX6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text_top-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIWhI9pwe2uYnq0yQtqxbz7D4biSIZ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -upper-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pEeoNIFyIzXStw3q/dR2hhEVcJqamuq6Z9brlNtKMeHuKXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -vertical_text-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIihI+pFrHqQHynTRrvyxQ12YWQWJGMpC0f2E1psr4eaj5+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -applix-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFRSVFxaXFxeXNze3Ly2rJyanOTi3Pz+/Ozq7HRydFxaVISGhGxubMzOzDQuLExKTCwqLIyKjGxqbERCRCwuLJSSlOTi5BQSFPT29IyKhDQyNISChDw6PBweHMS6pPz69Pz29PTq3Ozm3MSynMTGxAwKDPTu5Ozi1LyulExOTCQiJPTm1OzezLyqlLSyrDw2NOTazOzizOzaxLyqjKSipBwaHOTStLymhLymfGRmXNzKtOTOpLyidMTCtMS+rCH5BAEAAAAALAAAAAAQABAAAAa9QIAQEBAMikfjcCkgOJ2FgCGwFAYOiCwioUAYFtUrgtFFNBzeB5OAgESyEsWEUjFYAJYJ4hLBoDMHBRobAAaGehwdHnoZCQcfEUKHCBQBAxsgISIjJIRCeSUmHAYmJSInKCmRkgYqGw4ZKxMiLC0unoUvFBQQMBQRMTIzNBVDFjUrGwO9Nh8zNzi4BhM2LyIvGhgLNzc5akM6DsEyMjsfPDw9uAALPj4/HyQ0ND31q0ICFRv6FTAb/xE2+AkCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -binary2-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRSVFxaXFxeXFRWVNze3Ly2tJyalHR2dISCfLSyrPTy9Pz+/Ozq7GxubJyanKSmpMTCxMzKzLy6vNTS1JSSlCwuLLy6tMzGxOTi3KSipKyurHx6fOTi5IyKjGxqbERGRDQyNMzOzOzu7GxmZIyKhHRydLS2tNTW1ERCROzm5MS6pIyOjDw+PPTu5PTq3LSqnOTazOzi1GRmZJSWlCQeHPTm1OzizLyqjISGhExOTGxqZDw6PNzSxOzaxGRiZExKTCQiHEQ+NLyulOzavOzWvLymhHRybLyypNTGtOTOpOzexLyidMTCtMS+rMSynLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfqgACCAAECAwQCiIiDjAIFj48GAgcBjIIICQoLDAwNDgwPA4MIBhAREgkTmw4UDBUWAxcYFAUZGggbHB0eDh8gIQkiHSMeFRoUDyQRIxkGJRYmFScTKCcHCCkgJyoNGSsWHCwKCCgIASAgLQoZLi8wISUbEyQUJAEDKQEKMS8yMBYeZmCgMcEcghog9tm4gSNEjgEPdEDYEQJEDR4aetzwgcPCjw8VfiAAwqNFECFDehApYiSEoCMQBVjQkQBJkpVKjFhgNGBGzSRLVhZRwsTloAFNmjhZ8WQIDiZQoOwcFMCCVQshrmYN4ScQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -binary-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPz69HRydMzOzDQyNIyKhERCRPT29GxubPTy7Pzy7PTu5Ozm3LyulPTq3Ozi1OzezLyqjPz27OzaxLymhPz29OTStLyifPTm1OzavOTOpLyedMS+rMS6pMSynAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaJQIAQECgajcNkQMBkDgKEQFK4LFgLhgMiOq0WDgVEQrFdKAXfhJWRODTMQ6+64BAMGHAq+pB4hCF2eURoVwgREhMUgl5/EBUWimdWB4cVDxcYiwJiGQcVfBobmhwPEgkWFg8dmWcQEgcWFw99HpoVFR8XGiAhISKLI8EkJRgYGyK/SgvLzM0LfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -colorscm-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIcAAPz+BFxaXNze3Ly2rJyanPz+/Ozq7GxqbJxaLLxOFLQ+HLQ6NMSOnOzi5GxubMzOzDQyNMx6JOSSXOSedNx+ZMxaXLQ6ZKRalNzW3IyKjERCRNSWPPTKnNReNMRGVLxalJRGpHRanNTS3PTy9OTi3ISGfLySNOzCfPTatOy2dNxuFMw6DJxGrHROvEROnHyKrMSmTOzanNzShOSqRNyCFMxCHJxGnFxavDxqxCRmrCxijPTq3Ozm3LyulLyyZOTenNTGZMS6VISKbCyCzASGxAR6rBxmhKyqpOzi1JyuXLTShJzKdHS+XES2XCy6pDSy3Bym3AySxAR2pBxadKyinPTm1OzezLyqjGSWTHS6ZFy+ZCyyVCS2dDy61Dyq1CSOtBRqjExqZKyilOzaxLymhDyeTCSuVByyZCS6hDS2vDSatCx2lCxabIR+dBSKTByeZCSmhCymnCyanCR6hNTCrOTOpLyedCxmVCR+bCR2bCRmZExqbMy+pOTStKSelKyejMSynLyqlLymfLyifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAjqAAEIBBCgoEGDAxMGEMCQ4YAABAIkFLiwgMUCBg4UiJgQQQIFCxg0sOjgwUYIAiNImEChgoULGApkcHBAA8oNHDhI6ODhA4gQIkaQGFACgokTKFKoWGGBRQsXLwQIHQABRgwZM2jUsHEDRw4dA3bw6AHBxw8ZQIIIGUKESBEjR3YgIZtEyRImTZw8gRJFyhQqVaxcgYAli5YtXJx08fIFTBgxVsaQQVnGzBk0TtKoWcOmzZExklECcPMGThw5czqLoYOijh3RAO7gyaNnTxsxfOr0cQ2boBg/f44AChRI0KDXCiEoX84cgp+AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -core-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAASC/PzuBFxaVNza3Ly2tJyanPyuBPQCBPz+/Ozq7GxqbFRSVHx6dKSmpHRybMzOzDQyNGRiZHRydHx2fExKRCwqLPTy9ISGhERCRCwuLERGTIyOjBQSFGReXJSSlFRSTDQ2NAwKDNze3OTi3Ly2rFxaXAQCBFxeXMzKxOzm3LyqlDw6NCQiJFROTLy2pDw+PGRiXMS2pOzi1CwqJBwaHAwODAQGDJSOhOzWvLymhKSajNTGrJyWhOTOpLSyrKymlKSelMS+rLyidMTCtMS6tMS6pMSynLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfVgAAAAQAChoeHgoqCAgOOjgQCBQKCBoMABwMImwgJCggFC4sGDAQNDZoIDg+gEAcABhESEwoUFQsWFw4KGBmCGhsFGwoLEBwYCRYEFxCEHRceFwofIBwhDSIjJBCCCxISDiUaGRwmJygpKr4AGAIl4issISYtLuncgi8YLxAs5SYwYshQgQ8AixksaNSwYYLDDRc4chS0USMEQxMhHOjYEbEggBUWTQhwwANiD4mLBPj4AYTHjyA9cPQQsq7bkCFEihhRkSPHkSMeBUDIAGFo0aMZ/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -deb-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/FxaXNza3Nze3Ly2rJyanPz+/Ozu7GxqbPz6/JwCBMw+PMQCBLQCBNx6fPT29GxubMzOzIyKhDQyNLwqLLRWVLxaXNyurERCRMzKxOzq5Ozq7MQ2NMRmZLwCDOTi3Ly2tMReXOS2tMTCvPTu5Ozm3LyulMSSlNTOxPTq3Ozi1OSytPTm1OzezLyqjNyqpLxaVNzSxOzaxPTy9Ozm1OzexOzavLymhOzWvOTOpOTStLyidMyShMSulLyifLyedCH5BAEAAAAALAAAAAAQABAAAAa0QIAQECgajcNkQDAYCASEQCGQFC4NWMMBkZhWFQtGw/EwQCIGyWSoaFAqFgblIkEgMGthQ5HRbAQcFAcaBGp6DQEJCx0XFx4ZGx8geQ1ECyECByIMIyQlJnkMRBwnBwYODSgpKqB6RCIcK6gEKiwtLpQKiS8WMAQxKi0yuEOICTM0LSo0NTY2N3kAbhoHBzQ0zjg50EkKHC80LCo2ODo5O9FEBCE8Pe49Pj8/6QET9vf4E35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -document2-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJSWjPz+/Ozq7GxqbJyanPT29HRydMzOzDQyNIyKjERCROTi3Pz69PTy7Pzy7PTu5Ozm3LyqlJyWlJSSjJSOhOzi1LyulPz27PTq3PTm1OzezLyqjIyKhJSKfOzaxPz29OzizLyidIyGdIyCdOTOpLymhOzavOTStMTCtMS+rMS6pMSynMSulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaQQIAQECgajcNkQMBkDgKEQFK4LFgLhkMBIVUKroWEYlEgMLxbBKLQUBwc52HgAQ4LBo049atWQyIPA3pEdFcQEhMUFYNVagQWFxgZGoxfYRsTHB0eH5UJCJAYICEinUoPIxIcHCQkIiIllQYEGCEhJicoKYwPmiQeKisrKLFKLCwtLi8wHyUlMYwM0tPUDH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -document-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPz69HRydMzOzDQyNIyKhERCRFQ6LJSKfNTOxJSOhPT29PTy7PTu5Ozm3LyulOzi1PTq3OzezLyqjOzavPz29Pzy7OzWvLymhOTOpOzaxOTStLyedMS+rMTCtMS6pMSynAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaLQIAQECgajcNkQMBkDgKEQFK4LFgLhgMiOq0WCAREQrFdKAVXKyNxaJgBjgck4khLBAPGm4r+ghETeHtEfVaAFBUWg15gjReKZ4YTFBgYGRpvcQoPDggRnwwMG5hnHB2UFxcbHh+LAh0YDA+zDyCtZ5UXIRsiIiAjiyQlJCYnGhofI8BKC83Ozwt+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -dvi-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAASC/FxaXNze3Ly2pJyanKyijPz+/Ozq7GxubIx+RIRyLHRyVGxqbMzOzDQyNHxyTHRqNGxiJHRiLJySVIyKhERCRGQmLMy6ZNS+TMSuPLSePIRaNGReLHRuTPT29FxOFKymdIRmLHRiHGxKLDQuDPTy7Ly2tHQqLLwyPIxqVGw6LIx2LGRSHDwyDDwyFNTOxOzm3LyqlIQuNLy+zKSGdKSSfJRSRKSSNExKJLSmnOzi1LyulIyCZIxiPJyGLExGFOTSvOzezLyqjLyyXAQCBNzGRLyeREw+DFRONNzSvOzaxGxqVKSelJSCNEQ6DFRKFKSajMS2pNzOtOTStLyidEQ+FLSunOTOpIyKdMSulLymhLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfVgACCAAGFhoaDiQECjIwDAQQBiYIBBQUGmAcIBpGTCQqgC5gMDZwOgw8KEBESEwkGFAgMFacAFhcYGRobEBwdHgIDFKcWHwYgBiEhIiMkAyUCJg4nKCgp1SorLC0uBC8wMQ4yMzQnNTM2Nx84LTkNOjunNjY88z0+Hz8kOUBBQqdDiHQoYiREhBZHkORIouSfIAghjCiI8IHEEiYDgAApUAtAEwgfnDzBASWKFCBTqHQE8ONIFRwErFxRcuWKSkU8sBTIkSWLFi1btqwM4KCo0aMO/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -font_bitmap-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAASC/FRWVFxaXNze3Ly2tJyanPz+/Ozq7GxubGxqbNTS1DQyNPS+vPw2NNQeHFw6PPTy9IyKjERCRPzi5PyGhHRWVOTi5PT29OTi3IyKhPza3LySlLQGBGQCBNza3Pz69PTy7MS6pKRubPy6vGQ2NKRSVIxmZPTq3LyqjLQqLHRydPxydHwCBNTSzPTu5Ozi1MSynKQCBOQ+PKwCBIReXJwCBExOTMzGtOzezOzWvEQeHLSytOR+fIxaTOzexLymhEwCBDweHNTOzPTm1LRORIQ6PJyOfOTOpOTe1OTSvLyedMTCtMS+rLyulLyifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe6gACCAAEChYeGg4oCA42NBAEFAYqCAQMGmAYHCAaSlJaZmAkKnQuKAQwNDg8QBhEJCRKmgwITFA4VFgYXGAQZs5UaGxwdHgYfIAMhwAAiIyQlHCYgECcnKMwpKSoKKywtLicvMMwcHDEyMjM0L+3YgzUsNgH0HCw3ODnvgjU6OwMvBvCQ0cNHjh+zOgAJIqTaECJFOhg5gvAUEmsvksBAAeOIEmYBbixhEgJGExROlHw8taCly5cL/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -font_truetype-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRSTFxaXFxeXNze3Ly6vJyanPz+/Ozq7GxubHx6fCwuLDQyNIyKjKSmpPTy9PT29HRydMzOzCQmJAQCBKyqrFRSVLy+vGRiZNTS1GxqbERCRMzKzJyenOTm5JSWlLy2rIyKhMzK9KSm1Kyq3OTi3OTi5JyezBQSJExOTLy6/CwuXLy+5LyulMTC3LSytHx+7Ly2pLSyxLyqlNza3Gxq1OTWxMS6pLyqjPzy7OzexPTq3LyynOzWvLymhPTy7DQ2bOTOpGRmhERCfNzGpLyedMTCtMy+rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfIgACCAAECA4WHhoOLAgSOjgUBBgGLggEEB5kHCAkHBgKCCgsKBgwNDg8HEBESngwAExQVBhYXGBmZDREaGwuDHB0CHh+4qgQgIa+CBMEiIyQiJNAlIMoAJgYDJygpKisWLAMtvoIe2S4pLzArMTIBM9YHBRUeNAQ1KwU2NzjWFAwDDEDIgS+GDh39Fl3ykGMHPh46evggJ2gAgR87HAKZYSOID2uECGQUMkRIAiJBioAUYMTIkRs8cODwUUSlQgY4GSzQuVOnn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -font_type1-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAASC/FxaXNze3Ly2rJyanExKRPz+/Ozq7GRmZPz6/HRydMzOzDQyNJRmZPSmpIQuLGwWFKxeXPTy7IyKhNxSVGxCRLy6vPQ+PPT29GQ2LPTCxOROTPz69KQ2NPSGhPTq3Ozm5LyqlGwODPxiZOzi1LyulLwKDORydBQSDOx+fNw+PNS2tOzi3PTm1OzezLyqjNQaHPRubJx+fMS6rOzizOzaxMwuLKQWFHRaXOQuLJSShNzOvOzavOzWvLymfCwiHHx6dOzexOTOpOTStLyedMTCtMS+rMS6pMSulLymhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfFgACCAAGFhoaDiQECjIwDAQQBiYIFAgaXBgcIBgQFk4uYBgkKC5wMiQ0ODxAOERITCggFp4MUFRYCFxUCGAIDE7QAFBkWCRobChIcEr60HR0IHAYeHQQYEh8gIbQbIgjGIw8WEtgkJacmJyjfKSoFKywfLS4vpzAxEAgnHSYyJjMkaNSoB0CEChs3cMjIYULHDho8evig9aPiAQFAHAap0UPIREXYPpAIEnGIECLBABQoYmTGESRIfCQhglIRg5s4czLwEwgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -gf-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BFxaXDQyNAQCBMTCxPz+/ISChKSipERCBMTC/Pz+xPzerMQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARwEEgQahVijMmD/oRAbBw1FCgaFFrppeo5UtILWxlAGNWZHocA4bAxGAnDg9GA8LQCxGTQoHwVNYYEMEHtKYrEA0tctVIOo0Fl2Ct8AQLlKMnzLFg1KIHBCGoUbiR5VSd3C28TThpubgqIEhkfkh9+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -html-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRaVNze3Ly2tJyanPz+/Ozq7GxqbDxinBw+ZERmdIySjMzOzPT29DQyNDRurIR2RPTSdJyulFSGxLzCxIyKjHRydERCRLzKvPzivPTmxNTChLSybGyCfCRSpBQqRLy6vPTy7OTi3IyKhCRShOTixPzy5OzerOTShLyaVEx6nCxerGRyhOzi1LSyrEyGvOzaxPTShNy6bEx6rDxyzDRitCRCfPTq3LyulBw2VISq3GySrPTWlHyanIyitEyO1ER6zBxCfLSqnCQ6XHSq3GyWvFyGvDxuvLSqpPTm1OzezLyqjCxajFyO1GSi3NS2bKyaTCQuPGRufOzexLSmlER2vKyWNFxaNHx6dLyunOzWvLymfERSVExKNDRCNKyilMy+pOTOpLyifFxaVLyidMSynMSulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfYgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFkZMICQoLlwcMDQQOgg8QERITnhQFFRYHF6cPGBkaGxwdHh8gISIDI6ckJSYnKCkqKwksAiEtLg4kLzAhMTIzNDU2HxQ3NzgOOTo7PD0+P0A1QR8uNy1CDkMvREUyRjNHHjkfSElKlpxi0sTJjydQAiSIIkXIFBhUTn14UIWGFQhXHHzAkgWGli2nAHxIwIRLFy8bv4DREkZMSEEfYo4hQAVMGJZkXhIaIERImTJmlogRc0ZnAAdIkyp14CcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -image-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPz+BFxaXNze3Nza3Nza1LS2tJyanPz+/PTu5GRqZOTi3HRydMzOzDQyNJQOFDxKfKTW5OTy/OT23MTaxISKhGxmZERCRCwuLJQSFPzGpLweHJTO3ESu3DRilNz61FymXCxKRMTCxPTy7Ly2rIyKhDwCBORiRKQWFEy23CyKvJTWhDSOPCRONDQaHNROPNQ2JLRubHTC5DR6rHR+jFSqRCRyLGxqbOzm3LyulCwqLMySjMQ2JMyqrERijJSenFSGXGRmXMS6tPTq3Ozi1MS+vMxCNKyqrHR2dPTm1OzezOSKfNTe5KSmpIyGjLy2pOzWvLyqjIRqZIyKjHR2fExKTHx2bLyynOzexLymhERGRGRmZKSWhMS6pOTOpLyedMTCtMS6rMSulLymfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfcgACCAAGFhoaDiQECAwICBAUBBgGJggEEB5kHCAkHk5UBCpqZCwyeDYIOAA8QERITmRQLFRYXABgZGhscHR4fICEiAiMkDSUmJicoKQ8qKywLAwgKIxctLi8wMTIzNDUJNiEINzgNOTo7PBA9Pj/QQEFCQzg5F0RFEQQ+RhRHswVIkpS7oEMJgiUhCjBpcqSCkyFPoNjKEYVJCCNSpgSgUsXKlSdYUAG4kCOLlgpAgFTZwuVJFyy2Bi0gEsSJzZYuvYi09OULGC44wmAR48VLDkU5zClt0OACUz+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -info-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3Ly2rJyanDROXHSSpISetPz+/Nzm7GxqbGyGnMTS3MzW3JyuvERujLzG1HRydMzOzPT29DQyNMze5Iy2zLTS3Cx+pCRijLS+zIyKhGxubERCRFR6lGSivFyavISuxAxajBRejAxGdDxihJyyvCR6pBRqnAxelAxOfPTu5OTi3IyqvFSOtJy+1IyyzFxyhOzm3LyqlGySrAxejAQ6ZFxqfMzKxPTq3Ozi1LyulCxulAQuVISKjMzGvPTm1OzezLyqjBwmLBROdExOTKSinNTOvOzexBQeLAw2XAQmTCwyPLy2pOzaxOTWxLyedCQmJAQKFAQWJKSalOzavOzWvOTOpLymhKyqpMS+rOTStMSulLymfLyidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfVgACCAAGFhoaDiQECjIwDAQQBiYIFBgcImAkKCJGJCwwNDg8QmBESEwQUgg4VFhcYGBkaCBsRHB2qHgwfIAghIiMkAhMCAxsUJSYhJygiKc4qCysrLAPILS4oLwgwKcExEisyMxQFNBg1Nb7ONjc4OTo7yAU8IiIIDiIqPT4/QEFCVA0hooJBAg0eehQxciQIEnKCktiYqGQJEwJNnCB5AkWVoChSpkwpQmXAkypWrmDxKAhSlixaTlrZcqWjIi0/BmjhsgNLFy82BwWgQDQK0aNE/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -kmultiple-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXPz+/AQCBISChPz+xMTCxPzerKSipAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEIRJgb04iLEJwaAmjMTwgVbAjeaESmNcGMGrxmOhDqE8HAOVJ7MSFH4qhOmiOQIPNIGB4JJwnIaDaFaTUL4iYxc0MJidQVvROc4Yfz+a+g3V2sAVfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -log-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3Ly2rJyanPz+/OTm5GxqbMTCxARiTARSPARCNAQ6LAQyJGx+fGxubMzOzDQyNCxGPARyVARqTARaRLSyBCRGHFRuZIyKhERCRDRuXAx+ZPz+BIyOBFRybOTi3AyGbAx2XExaDBROLOzm3PTy7DRORDyeXBx2VEymVHyuJGRyDPTu5LyqlFyGTBxaNAxqVDR6PARKNPTq3Ozi1LyulCRuTCxeNBSCZDxmJEx6bOzWvPTm1OzezLyqjCSSdCSmhBySdBR+ZARqVEx+bNzSxOzizESCdAQCBNzOvOzexLymhOTStOTOpMS6pLyedMS+rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfIgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFkYIICQkKCgsLDA0ODxCbEQASExQJFRYXpBgZDwcaqxscrgkdHqMfBiADGasIIRwiHSMdJB0YJSYCA6snKCkqFgorHSwdIC0lLqsvvx0wMTIWMxgCNDU2xzcdOBw5EzoKOzw9Pj/WgAQRIiTEkAlEihg5wgMgACRBkpwQIpGDRCVLeDCJACGJx48gAzRxspHQoZNPRkJZNSjAkygDntiwwYQJlJWKIujcyTOCn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -make-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxWVFxaVOTi3Nza3LS2tJyalGRmZMTCxPTy9Pz69Pz+/Ozq7GxubJyWnFRWVHx6fHRydMzKzDQyNHx2bHx+dIyKjERCRGRiZKyilLSifMTCtLy+tISGhOS2bPzerPzuvOzetJSSjFxaXOzu7PTy7MS6pGxqbKSWdPS+dMSidOTerPzqtISCfKyurOzq5LSqnMzKxPS6ZEw6HJSKbOTStHR2dMzGvPTq3OzizLyulFRSTOyyVNymXOy+dKyqpPTm1OzezLyqjJyCTOSqTOSmRLSupNzSxOzaxOzexOzWvOTOpKyinMS6rNTGrLyedMSynAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfagACCAAEChoeGg4oCAwQEjQUCBgGKggcICQoKCwwNCg4CiwQPCBAFmRESCwYTghQCEgYHDBUSChYNDRetGAQZGhscHAIFDAoDHB2tAQYeHyAhIiMIJAolBCYTAicoKSorLBItGC4DLy8wExExKjIzNB81CBI2Nzg5Oq07KDw9Ph4mdgj4IQFIECGtHrgYQqRIjQoPjBzJkQMJQgANkrngYGFAhB8UkyjR0EpQAAkUKkQQkCGHEiVLLg6y8IDJhiZOXsJ8UtLkhpsmoAgRouIJT0UPJihdynSCn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -man-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXFRWVNze3OTi3Ly2tJyanNza1Pz+/Ozq7GxubMzOzDQyNOzq5KSmpNTS1IyKjGxqbERCRPTy7PT29LSytOTi5MTCvMTCxLy6vMS6rISChLy+vPz69HR2dLSyrLy2rNTW1IyOjOzu7OTm5HRybHx2ZNTOxLyulLS2tIyKhHRuVMS+tHx6fGRmZLyqjISGhJyenMTCtGxqZGxmVMS2pFxeZGxiTMSynLymhHx6dGRiZFxeXFRSVLyifGxmTKSSfLyidMS+rLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAEChYeGg4oBAwMEjQUCBgGKggEHCJkICQoIBgKKkgSamQoLngyWDQ4PpAgQChESqQACExQVFgkXGA8ZBBobtAENDQsGHB0dEx4fBCC0AhYhGCIjFA0kJSYnKMMPHCkqFg0DIQorLN6WCx8OLQsHIQsuKxovtIQwMR4ZHDIYZtCogU+RjQAeUmDAkELBDRw58hHSsWMDjx4XV6DwIZGYCRc/aNz4AeRFkI4sZAipgePFCx9BhkgUwKCmzZsM/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -metafont-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3Ly2rJSWlPz+/Ozq7GxqbKSajPT29GxubNTS1DQyNIyKjERCROzi5Ly+vKyqrKSipKSmpKyurISChKyinHRybISGhGRiXJyanIyOjFxeXJyenJSSjMzGxMzOzMTGxLS2tISGjExOTLyulMTCxISWpGx6jExifFxufJyepJymrFRSVLSupLyqjERKROza1OTKzNS6vGRmZLy6vPz29Hx6dMTCvHRydJSKfOTStLymhNTCxLSOjKx6fMS6pLyifLSytHx+fOzWvOTOpLyedMSulLyidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFCJKKApcFCQoLBQQMnqAFDQoHDqeDAQ8QERITBhQVFhWnF4IVsxgKGRobHB0DrxUeHyAhIiMeGCQVFCWvACYCJygWKSoTFxcD1oMJGissJiwjFC0ZLi+nMBoLMTIPFDMzDS00FvEAYlyQUMNGiBs4OuQgoWMHj2sDe/j44aNCBh1AdgS5BoCGBhNChlxAQGRHESMcYXCI5sHCkRdIkKBUxKCmzZsM/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -midi-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Nza3Ly2tJyanPz69Pz+/ISChOzm3GxqbKSipAQCBHRydMzOzDQyNIyKhERCRPT29OTi3PTu5PTy7LyqjOzi1OzezOzWvLyidOzaxOTOpMS6pMSynLymhLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaOQIAQECgajcOjUTAYEAKFgDBgOFQNiMHhkFAYosQFg2HNbg0Nx/dB3W7NW0hDEWEjxm+BWzIhINhVbnBUFH12eAeDFRQUFoBuiVoGRRQXjgGQiQQLCwELBZaHZJGMARgLGZeZCARRUKgaom8DCAEZGwscqm5YrZyfHLFKRQQdHhYWHxogD0NED9DR0g9+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -mime_empty-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPz69HRydMzOzDQyNIyKhERCRPT29PTy7Pzy7PTu5Ozm3LyulPTq3Ozi1PTm1OzezLyqjOzexOzavPz29OzWvLymhOzizOTOpOTStLyedMS+rMTCtMSynLymfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIAQECgajcNkQMBkDgKEQFK4LFgLhgMiOq1eEQnFdqEUXK2MxKFBHnqvDsGA0aaaz4iHvE68WxEQERITfG+ADxQVhGV/DxEWFBcYhQIIgBEUFBkak2UbgYkZHBwdlIgUHh4aHB+lZZkVF6sgHyGFIiMiAyQYGCUhtkoLw8TFC35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -misc_doc-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRSVFxaXFxeXFRWVOTi3NzW1Nze3Ly2rJyanPz+/Ozq7GxqbMzOzDQyNHRydExKRERGRExKTERCRCQiJIyKjCwuLGxubDw+PDw6PDQ2NBweHAQCBPT29IyKhNz+3HzmfDTCNASaBBxaHCQmJPz69PTu5JTqlGTOZCSmJAR+BBxSHOzm3LyqlFTKVASCBARmBBxGHNTSzPTq3Ozi1MSynAyeDAROBCQ+JBQSFNTOxPTm1OzezLyqjCwuNAQyBCQ2JMzGtOzexAwODOzaxOzWvLymhMzCrOTOpNTKvMS+rLyifMTCtLyulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfcgACCAAECAwQCiIiDjAMFBgeRCAMJAYyCAQUKmwoLDAoJA5eZnJsMDaAOAA8BEBESExETFAsVDwwTFgAXAhgOGBkaGhscHQUIHqoDAR8gISIjJBQGJSbHugMSJygpKisU0x0mLC2qAhEuKS8wMRsbMiYzNDW6ARM26zc4ORQ6Mzs8evgAACGDChg3fgDhF6SAECE9VEXQYKGiDwtDKAQRQqSIEV25KGzIQZIDhSNFiiAxomoQAwM6kgRRgiQlkiW6BgVIwkQJghpNeixx4qQlJiAWHCh1kFSpBT+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -netscape_doc-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNTW1Nze3Ly2rJyanPz+/Ozq7GxubPz6/OTi1Ozq3GxiTMzOzCwuLMSijGROLLSqjGRiZOze1LSOdIyKjEw+NHxGJNSqjMTGxPTy7Ozm1NzWxLSSfFw+LMzKvHRuVKyeZHxybOTazOTi3Ly2tDQyNOzm3MS6jFxaRPTu5LyulOzi1KSehMTCxKSOdHxuRMzCpJSGXOTStLyqlHRqRIR2TFRKLLyedLyqdGxWLIR6XOzezJyCZJySbEQqHKyKdFRONJSKfOzaxNTCpKSWbJSSjExKNHxuNOzWvLymhIyKhOTOpHRydHx6bIR+dOTOrLyidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfVgACCAAGFhoaDiQECA40CBAEFAYmCAQMGmAYHCAmSlAEKCwyZCA2dDoIPEIsREgkTFBUICBaoABcYGRobHAodHhkDBBW2AB8fIBwMESEiIxokJSaDJxAUKAwQESkaKicrqBssLS4vBzAfMTIRMwo00zU2LTc4OToQOzU3DDwr04Ixeljw8QNIiCBCYgyJUIxIESMfjuxAwoDDkCRK/j244CNHjhBIPDxYMoPJA1sXIDRxkuOIkycXHsyAEqUYoRk7GDAh8uJFDhw4/lUy4aCo0aJE/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -news-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBERCBPz+/FxaXIQCBMQCBMTCxISChKSipDQyNAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARXEEgZwrxYikFsvtUwBN0nEWIhkh4YiIOhjiX1hqIsHlb4jr8VwoJa/XCCBG4ZZA2bRxEi0QkgeLAloUZKYGEDhLgG6H5JBEFrYg4ItmsMCaGomFyEiz8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -pdf-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAASC/FxaXNze3Nza3LyypJSSlPz+/Pz69Pzq5Ozq7GxqbJyanNyGhNx6dGxubMzOzDQyNERCRPz6/My+vLxaVJxeXKSmpNTGxIyKjNTS1OTi5OzCxLRSVMTCxKyWjOTi3Ly2tIyKhLxmZLSWlOTe3MzKzOza3MyytNyOjAQCBKyqrOzm3LyulPSajMRWXOSGhOyGhKxiXOzi1OxyXKRORIxSTNTKzMy6vLyenLRubLwqLMxiZNSurJRybOzezLyqjJxCRGxSTLy6vGQiJMw+LJR+dMzCrOzaxIyOjKyurHxydNxWPNTCrOTStLymhIR2dKyKhIxuZIR+dJyShOTOpHRmZKSKhJyCdKyilMSulNTCpLyedMS+rMS6pLyidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfQgACCAAGFhoaDiQECAwKMBAEFAYmCAQMGBwgHCQoGC5OKAgYMDZcODwYFEIkREhMUFRYXGA4OEauCGRkaGxwZHR4ZHyAhuAAdCQgiFR8aHSMkHwS4JRomIicoJykqHh0rLKstLhQcFC8wMR0FHgQy4TM0HDU2Nzg5Ojs8PQQ+P6tAggjRVaLEjiFEihg58k+QBSQdQCTpoITIkhBMmjgxVsBCxydQokiZYoTKxkRVrFy5EgJLFi1NqGwxRohLBy5dsmT54cXLTEUQggodCsFPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -pk-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/IQChFxaXDQyNAQCBPzC/MTCxMQCxPz+/ISChKSipERCBMTC/Pz+xPzerMQCBCH5BAEAAAAALAAAAAAQABAAAAR6EIAQhLVjECJlKISwjcZgcFNxhATiugKyTaP4wu0JiOyNXBqAIWFpvRQKgUHBSTgNS4UzseBxBMxoMiG1NTcJBpLBLTaaTIVM3fXuFKeQMmk7AwbSU5QocsgkFnAPD0kbFBQdO1hELQ4fK4lWLQ0IASsoEhojIwEjfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -postscript-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxWVFRWVFxaXOTi3Nze3LS2tKSajPT29Pz+/Ozq7GxqbJyanISChPz6/HRydNTS1CwqLMTCxISGhOzu7ERCRDQyNERGRLy2rIyKhExOTAQCBKyqrOTm5KSmpHR2dNza3AQGBNzSxOzm3LyulBweHBQSFKSilOzaxAwKDOzezDw6PJSSlDw+PKSelNzOvLymhAwODNzGrOTStLyqjExKRHRqZLymfMTCvMS+tMS6rLyynMS6pOTOpLyifMTCtMS+rMS2pMSynLyidLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfPgACCAAECA4aIA4OLAgSOBQQGAgcBi4KNCAmaCgsJDAKWjQkNCA4JDxCeEYwSDQ4TFKMPCxUWAA0BEQ0GDggQDxcIBBgZthobExwICB0eFRsSHcOrER8QCwYIIA8bIRwiIyS2JSYVHgsQzhsbJygEJKsl6ykeH9zrJyIq4gAp6xsrWLT45+IFChi2YqwLwcLEvxgHZMygsarBOgsCBGioUcNGxBk3bA0SgCOHjh0oeczo4WPVoAA/fgAJIoQGjSFEiIgUNCCCBZ8Wggq14CcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -readme-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3Ly2rJyanDROXHSSpISetPz+/Nzm7GxqbGyGnMTS3MzW3JyuvERujLzG1HRydMzOzPT29DQyNMze5Iy2zLTS3Cx+pCRijLS+zIyKhGxubERCRFR6lGSivFyavISuxAxajBRejAxGdDxihJyyvCR6pBRqnAxelAxOfPTu5OTi3IyqvFSOtJy+1IyyzFxyhOzm3LyqlGySrAxejAQ6ZFxqfMzKxPTq3Ozi1LyulCxulAQuVISKjMzGvPTm1OzezLyqjBwmLBROdExOTKSinNTOvOzexBQeLAw2XAQmTCwyPLy2pOzaxOTWxLyedCQmJAQKFAQWJKSalOzavOzWvOTOpLymhKyqpMS+rOTStMSulLymfLyidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfVgACCAAGFhoaDiQECjIwDAQQBiYIFBgcImAkKCJGJCwwNDg8QmBESEwQUgg4VFhcYGBkaCBsRHB2qHgwfIAghIiMkAhMCAxsUJSYhJygiKc4qCysrLAPILS4oLwgwKcExEisyMxQFNBg1Nb7ONjc4OTo7yAU8IiIIDiIqPT4/QEFCVA0hooJBAg0eehQxciQIEnKCktiYqGQJEwJNnCB5AkWVoChSpkwpQmXAkypWrmDxKAhSlixaTlrZcqWjIi0/BmjhsgNLFy82BwWgQDQK0aNE/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -recycled-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3Ly2rJyanGRmZKyqrMTGxPz+/Ozq7KSinOTi3LzatLTGpJSSlMzKzGxubMzWzPT29DQyNMS+rOTy5KzWlEymLDSSDKTClIyKjGxqbERCRGx+bNzu1Hy+ZESeHDSWDCyKDCyGFMTKxHx6fOTi5ISCfFRuVKzGnJzKjDSOFJy2lNTSzJSSjPTy7Ozm3FR6RJzChGSqRFSePHyqdMzOzLSytNTOvLyulExyREyWPESSJMS+vKyurMzKxPTq3Ozi1BxeDDSCHNTS1Ly+vHx+dIyOfPTm1OzezLyqjBw6FBxmDFSKRMzGxERONOzavBQ6DBROBHSOdCxeLDRCJKSelOzexOzWvLymfCw6LBxGHFRiTOTOpERGRKyqpMy+rLyedMTCtLy2pMSynMSulAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfWgACCAAGFhoaDiQECjIwDAQQBiYIFBgcImAkFCJGJCgsMDQ4PmBAREgQTghQVFhcYGZYIGhAbHKodHh8gISIjJCUCEiYDJxMoKSogGCsjLC0GLgkvMAMTMTIzIjQ1LDYHNxo4CTA5Ezo7PDstEQ8HPT4nP0BB5jpCQxFE7kU3RkcHkCRRomoJkyYHnBQZ0OEJARxJoBAUFEWKjilUolSxMiDJFSxZVAnSEmVLFC4EBnzE0iVkIi8EvnwBs5JlGJGCAogRQ2EMmTJZsoS5qWiC0aNIJ/gJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -resource-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRSVFxaXFxeXFRWVOTi3NzW1Nze3Ly2rJyanPz+/Ozq7GxqbMzOzDQyNHRydExKRERGRExKTERCRCQiJIyKjCwuLGxubDw+PDw6PDQ2NBweHAQCBPT29IyKhNz+3HzmfDTCNASaBBxaHCQmJPz69PTu5JTqlGTOZCSmJAR+BBxSHOzm3LyqlFTKVASCBARmBBxGHNTSzPTq3Ozi1MSynAyeDAROBCQ+JBQSFNTOxPTm1OzezLyqjCwuNAQyBCQ2JMzGtOzexAwODOzaxOzWvLymhMzCrOTOpNTKvMS+rLyifMTCtLyulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfcgACCAAECAwQCiIiDjAMFBgeRCAMJAYyCAQUKmwoLDAoJA5eZnJsMDaAOAA8BEBESExETFAsVDwwTFgAXAhgOGBkaGhscHQUIHqoDAR8gISIjJBQGJSbHugMSJygpKisU0x0mLC2qAhEuKS8wMRsbMiYzNDW6ARM26zc4ORQ6Mzs8evgAACGDChg3fgDhF6SAECE9VEXQYKGiDwtDKAQRQqSIEV25KGzIQZIDhSNFiiAxomoQAwM6kgRRgiQlkiW6BgVIwkQJghpNeixx4qQlJiAWHCh1kFSpBT+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -rpm-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/FRaVNze3Ly2tJyanFRSVOTi3PT29Pz+/Ozq7GxqbFxaXHRydNzazDQyNIyKjERCRGRmZExOTLyipOSytLy6vIyCfBweHMzOzNS+vMRqZMRSTNzGxAQCBLxCPMzGvLyulCQmJPz69IxKRIwWFLSGfLyynAwODERGRMTGxGRiXLyqjHR6dIyOjBQWFLSqnNTCpNTKtLyidPTm1OzezOzavOzWvOTOpMTCtMy+rMSynLymfLyedAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAazQIAQECgajcNkQMBkDgKEQFJYMBwQ2ITiEJ0uDFjsgdHgOpIFQRj7UCggZyEksIgoJBPKwVCxnBUXEgwYBgkGGRobHAYDDgUdFx1fawceHh8gDiEdnEthIgcjJCUmDh0nKJwdCCmcKh0WJiumQh0sFR0tFyYuLycwK5u1nBYsFwMuJicTs0MdEhUpDRkxMRkwMDJxQl8zBjM0NTY3N9poKTg5JjorKzsyPNtEDvT19CH0fkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -shellscript2-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3LyypJyanPz+/Ozq7GxqbPT29HRydMzOzPz69DQyNHRaJKyONJR2LJyCJKyCHKSCHMSqZNTOvIyKjGxubERCRGxSFIxyRKR+HMyeHOTCLMSOHLyWFMzGtIyKhHx2bKSGZNyiFHxeDOTi3Ly2rMyudOTCpOTKxLyqjJR2VJxuDLSGHLSunPTu5Ozm3LyulJx6NNSyXOTCjOzWvPzi3MyqhGxSLFQ2DLSKLNSqTPTWtPzq7NS2nIxyVIx6ZOzezFxCFOy2POSyROTGlPTazPTWxLSiZLSSVMy+rOzaxKyCJMyeNOSyTNy+dLymXLyePNyqPKSWfOTStLymfKR6HMyaPMyaNJR6TMy6pFxKLHxWFKR2FIxiDOTOpLyedMTCtIyCbMSulAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfQgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFkZOVlwgJCgsEDIINDg8QERITFAUVFgcXpYIYGRobHB0eHwgCAyC0giEiIg8bIyQCCCUmtCInKCkpKissLS4vMDGlMjM0NQsINjc4OQ0U26U6OzQ8CAg9Pj8uQBRBKgxCQ0QzRUY2jiDRkURJkCX5ADBp4uQJjRNQokhpMSUIlSqlcFjpQOQKESlYWmTRQuUirS1cumy04qWBlhpUvoARRihMGDFaBoxRUQXMTEUMggodysBPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -shellscript-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRWVFxaXNza3OTi3Nze3Ly2tJyanPz+/Ozq7GxubNzSxMzOzMTGxHRybDQyNLy+vHRydHx6fKSipISChIyKjGxqbERCRCwuLLy6vGRiZExKTCQiJAwKDLSytLy2rJSSlHx+fDw6PKyqrBQWFPTu5Ozm3LyulLS2tCQmJAQCBPTq3Ozi1MSynCwqLAQGBOTazOzizOzezLyqjBweHNzSvOzaxKyurHRuZNzOtLymhDw+PIyCdOzWvOTOpLyidNzKtOTStLyifMTCtMS+rLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfZgACCAAEChYeGg4oCAwQFjgYBBwGKggEECJkICQoIkwADCwwNDY2mDA4Lng8QDhESsLARExQVDhYXGBkWExIaGw8cHR4SCQQfFQ8eFgUgIQEiwiMSBMYfGB4atwEXDyQd0wQlJicPKAHoFyIpJCoeDgMrLC0YKBsX6i4kL+4OMDEyZijr5oLGNxUqUCioEcPGDAwjPNyI6MEDChQjcOSwsUDHgw07RIgI4KCkAgs8cvTw8eOBogAxQtXIASTISiEuBwUYMoRIixYnZggpUgTDywdIkWJIitRPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -sound-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXFRWVExSVNze3Ozi1Ly2rJSWlPz+/Gx6dNTS1Ozq7GxubGxqbDRmbDQyNFRiXBy6xFRmZLy6vIyKjERCRAQ+RBy2xByqtHRydIyOjPT29PTy9OTi3ISGhAQ2PATC1ByGlPz6/MS2pAS2xHS2vMTCxJyenLS2tPTq3Ozm3LSmnAQaHARibARudAR2hEySnOTm5MzGvLyulARKTARWXDyCjOzaxAQiJEx+hNza3MzCtOzexOzavLymhBQuNCxqdLy+vKSelOzWvLymfDxOVISipAQCBNzOtOTOpFRybKSejMS6pOTStLyedMS+rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfLgACCAAEChYeGg4oDBAUEjwYBBwGKggEICQkKCAsMCJOVAw0OA4wIDZsHD4oQERINDRMIFA0MFauCFhcYARkJGhscHRMeuB8RICEQHgcaBCIcBSOrHyTWJSYnKB4KHCkqK6ssLS4vMA0LMRoyKe0zuDQ1LTYoHBwU7Ck374M4NTkmdHDIsKMAjx4+cAn6ASSIAhRCdvDgMYSIQkJFjBzJsALJjSFJLCoSUKCIkiVMegxpksTJxQATnjwZMWMGER9OXI58wLOnzwd+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -source_c-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMTCtPT29GxubMzOzPz69DQyNHRydERCROTi3IyKhIyOjPzy7PTu5Ozm3LyqjPz29PTq3Ozi1LyqlPTm1OzizOzWvLymhGxudGRmdFxedFRWdERKdDQ+dHR2dFxidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJQC8BXxOEDOw0DkGhYMJHCq4FuYJBQUEQN5RGlWYBQVFheEVWEYFRkaG40RXw2JGX6MaIiRHGCccQKAkRodHh4fjQ+tICEiIyQkJY0mJg8FJwWzJbVKD7gnI7K+v3EOycrLDn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -source_cpp-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMTCtPT29GxubMzOzPz69DQyNHR2bERCROTi3IyKhIyOjPTy7Pz29PTq3Ozm3LyqlPTu5Ozi1LyulPzy7LyqjPTm1OzizOzWvLymhHRydHR2ZHR2XHRyTHRyRHRyPHR2dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJQC8BXxOEDOw0DkGhYMJHCq4FuYJBQUEQN5RGlWYBUWFxiEVWEVGRYaG40RXw0ckV8djYaZFh5gnGgKnx4fICAhjSIPrSMkJCUmJ6woBQ8FJAUlJ7VKDygPD7G9vo0OycrLDn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -source_f-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMTCtPT29GxubMzOzPz69DQyNGR2ZERCROTi3IyKhIyOjPTy7PTm1LyqlPzy7PTq3LyulLyqjPTu5OzexOzWvLymhHRydHR2bFx2XFx2VFR2TEx2RHR2dFR2VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJQC8BXxOEDOw0DkGo4MJHCq4FuYJBQUdnlEaVZgCgYVFoNVYRcYGBEZjBFfDRePEgkajIUXGxgVYJxoCp+hHBwdHowfIK4PDyEiIyStJSUFDwUmJiS2Sq8PILG+v4wOycrLDn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -source-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMS+rPT29GxubMzOzPz69DQyNMTCtHRydERCROTi3IyKhIyOjPzy7PTu5Ozm3LyqjPz29PTq3Ozi1MSynPz27PTm1OzizOzaxOzWvLymhLyifOzexLyedLymfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaJQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJSCx7WAgBwi52FAsi4oBINJnCpAqCkPChUSA3tEEmoFahUWFxiGSwphGRYaGxyQEn4NHZVfj2iLlR5qoHICGYyWHyAhIpB9Dxp+IYAjsGokaiFqJZAJDwkDHBwYJiW+Sg7LzM0OfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -source_h-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxubPT29IyKjMTCtMzOzDQyNHRydERCROTi3IyChIyOjPzy7Pz27PTu5Ozm3LyulPz29PTq3Ozi1Pz69LymhOzizLyqjPTm1OzWvIyGhIR6dIRubIRmZHxaVHxSTHxCPIRydIReXHxWVHxKRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaIQIAQECgajcNkQMBkDgKEQFK4LFgLhgMiOl0mFFbEYVEgMJQC8DXRODjOw8DjGhYMIHCq4FuIKBASDwN5RGlWYBMUFRaEVWEXFBgZjEoPXxoSkX4bjYaZGBxgHZ2AkR4cHx+cSiAJCRAhIiMkJSaNCREgBScFKCkqtkq4sLK0JsFxDMrLzAx+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -source_java-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRWVFxaXNza3OTi3Nze3Ly2tJyanPz+/Ozq7GxubFRWXHRydMzOzDQyLIyKjGxqbERCRCwuLHx6dKSinKymnLyyrNza1PTy9Ly2rIyKhDQyNGReXKyejKSWhIx+bJSCdIRuZCQiJISCfGxaPJSKdHxuVHReRHxiVHxeVGRGPKSajMS+tMSynAQCBFxeXGROLFxCLFxCNFw6LGxiXFxiZMTCtOzi1ERGRLSytJSWlERKTNzSxOzaxKymlOTi5JSSjISChBwaFNzGrLyqjKSmpDw+PMS+rOTStLyqlLyifGRmZKyqpLyidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfWgACCAAEChYeGg4oCAwQFjgYBBwGKggEECJkICQoIk5ULmJoIDA2eDoqXowgPDBAREoIRExQVFhYEBA0XGBkaGwAcHR4dHx4gIRMGDBcEFg4iIyQlJicoISkqISssBC0OLi8lMDAxMiozNDUUNjctEjg5OjklDCEcOy4OFDw9Pg4QfuQAEgTCDglCHAQYMaQHEVRFBhRhIACHAyMLIHg4guShIAg6KDwYMYHBhBVJhiBRgmrQkhxMKlBo0ULlkCYtLbGwYYNmCyJNguYk5KBoUQlGi/oJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -source_l-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMTCtPT29GxubMzOzPz69DQyNHRydERCROTi3IyKhIyOjPzy7PTu5Ozm3LyqjPz29PTq3Ozi1LyqlPTm1OzizOzWvLymhGxudGRmdFxedFRWdERKdDQ+dHR2dFxidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJQC8BXxOEDOw0DkGhYMJHCq4FuYJBQUEQN5RGlWYBQVFheEVWEYFRkaG40RXw2JGX6MaIiRHGCccQKAkRodHh4fjQ+tICEiIyQkJY0mJg8FJwWzJbVKD7gnI7K+v3EOycrLDn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -source_moc-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIQAAPz+BKSipISChERCBPz+/AQCBMTC/MTCxISC/FxaXDQyNASChARCRPzCxAQC/PzerMRaBPyCBPyqXISCBPwC/MQCxIQChATCxMT+xATCBASCBIQCBARCBPwCBMQCBMTCBCH5BAEAAAAALAAAAAAQABAAAAWOICACQRkI6DCuJOG+JysGL1wIMm0YNHEUBNwqsDMgEL5AIqEYIhZPxqtwUI0CzwRDSih4E6KGeLl1vB4FMAASkTC1icmjmxZBKBXL4YLJaAoPgWoQEBsbGX4JHHR1Ih0eChkTGoqADQ9qMwR+GhwcXlSZAAJzDQNogZeiAUBeaAcNHw2iAygocQkCuQN+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -source_o-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMTCtPT29GxubMzOzPz69DQyNGR2ZERCROTi3IyKhIyOjPTy7PTm1LyqlPzy7PTq3LyulLyqjPTu5OzexOzWvLymhHRydHR2bFx2XFx2VFR2TEx2RHR2dFR2VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJQC8BXxOEDOw0DkGo4MJHCq4FuYJBQUdnlEaVZgCgYVFoNVYRcYGBEZjBFfDRePEgkajIUXGxgVYJxoCp+hHBwdHowfIK4PDyEiIyStJSUFDwUmJiS2Sq8PILG+v4wOycrLDn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -source_p-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxDQyNPz+/FxaXKSipPz+xPzerISChATCBARCBASCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARVEEgQqrUz3yqGCJlUESRZEFVooWZAfJpbEkU9gNMqo4KBi7vSAfWjyFxIUnEkJAwPy9EugEDFSE+nMzojVKvLREGsKCgWjMVybDaj0eH2OZ2Objb+CAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -source_pl-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMS+rPT29GxubMzOzPz69DQyNMTCtHRydERCROTi3IyKhIyOjPzy7PTu5Ozm3LyqjPz29PTq3Ozi1MSynPz27PTm1OzizOzaxOzWvLymhLyifOzexLyedLymfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaJQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJSCx7WAgBwi52FAsi4oBINJnCpAqCkPChUSA3tEEmoFahUWFxiGSwphGRYaGxyQEn4NHZVfj2iLlR5qoHICGYyWHyAhIpB9Dxp+IYAjsGokaiFqJZAJDwkDHBwYJiW+Sg7LzM0OfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -source_py-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNza1Nze3Ly2rJyanPz+/Ozq7GxqbPz6/NTSzDQyNKSujIyKhHRydERCRGR2PHyaLLzObIyqNKzCZIymRKy6jPTy7OTi3ISChFx+HISaNKyuPJyaBKTCRKS+VISiVGyKJHSGPLzWdKS+TMzefISCJHRiBGySJJSyNLTGbKzKRHSaHJSWhLyulHSKNJy6RKzCXISWRLTOZJSuVIyuJGyOHHyWLOzaxJSqTGyGJJSmXHySPJS+JHSOHIy2JHR2XLyqlERaHGSGHFRqJHSOJGR+JFxmPNTOxIySbHyORHSWJPTm1ISiHHyiJFRuHMSqjPTu5OzexFx6LMTCtMS+rJyidISqJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfKgACCAAGFhoaDiQECAwMCAgQBBQGJggEDBpkGBwgJk5WXmgYJCAqeC4kFAwysCQYNDggPqIMQERITFBUWFxgEGagaGhsVHB0eH8ggvQQLISIjJCUmJygpKissLRcuCy8wMSMqMhszMzQ1Njc43QA5Njo0Ozw9Pig/LCxAQbRCOkM2iBQxgsLGjyJH+CXKoEABkiRKWCxhQYQBLUsYLhxgwkRJEydPoFwkhCEKRylKbNSYIlIRASpVCFj5UeMKhJaDAizYybPnAj+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -source_s-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMTCtPT29GxubMzOzPz69DQyNHRydERCROTi3IyKhIyOjPzy7PTu5Ozm3LyqjPz29PTq3Ozi1LyqlPTm1OzizOzWvLymhGxudGRmdFxedFRWdERKdDQ+dHR2dFxidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJQC8BXxOEDOw0DkGhYMJHCq4FuYJBQUEQN5RGlWYBQVFheEVWEYFRkaG40RXw2JGX6MaIiRHGCccQKAkRodHh4fjQ+tICEiIyQkJY0mJg8FJwWzJbVKD7gnI7K+v3EOycrLDn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -source_y-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxubPT29IyKjMTCtMzOzDQyNHRydERCROTi3IyChIyOjPzy7Pz27PTu5Ozm3LyulPz29PTq3Ozi1Pz69LymhOzizLyqjPTm1OzWvIyGhIR6dIRubIRmZHxaVHxSTHxCPIRydIReXHxWVHxKRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaIQIAQECgajcNkQMBkDgKEQFK4LFgLhgMiOl0mFFbEYVEgMJQC8DXRODjOw8DjGhYMIHCq4FuIKBASDwN5RGlWYBMUFRaEVWEXFBgZjEoPXxoSkX4bjYaZGBxgHZ2AkR4cHx+cSiAJCRAhIiMkJSaNCREgBScFKCkqtkq4sLK0JsFxDMrLzAx+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -tar-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3Ly2tJyanPz+/Ozq7GxqbJySbJyadPT29Pz69GxubMzOzDQyNPz21LSujPz25OzmxNTS1IyKhERCRKyqjLy2rKSehPz67Pz23OzerKSaZMzGxPTy7PTqvOzirMy+dKyeTIR2NPTq3LyubLyqVJySPHxyJOzi1LyunPTqzOzW5OzSzNzOrJSGNGxiNLy2pPTm1OzezLyqjJSKZOTStOzOxNzGtOTSjKSSRIR+LGReHLyynOzexLymhOTWlNzOhFxSFHRuRNzKfNTGdHxuLGxeJIyCbMy6pLyifLyqlNS+pOTOpLyedHRydJySfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfLgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFkZMICAkICgULDA0LBA6Cnw8QERKgExQHDBWpCBAQFrm4EAkKAhcUqRgRGRqsGxIbHB0eAgOpCRofCw8WICEiIwMkJBDRCwsgICUmIico3CkqtissLS7mJy8wMTIzNKk1Njc4OSI6Xuzg0WOGjx/6gOQIEkTHiB0ohKjwYQOhoCEliBQxcuQIDCRJbNhQkmoQRhgflzAR2cRJSUFPekDpQbMHjR9OXCpywLOnTwd+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -tex-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxDQyNPz+/FxaXAQChKSipPz+xPzerAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARgEEgQqrUz3yqGCJlUESRZEFU4lkQREJ/2skU9BEaezzmRCwccwDCc+XwIFGhI0ZEMxiURxzIQkghp0+qjJlDDHdRnQPSyGu4oEfguRTrs9fqmWAjfPHpSkWMReyIbg34RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -tgz-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBIQChFxaXMQCxNze3Ly2tJyanPzC/Pz+/OTi3GxubJySbJyWbPT29MzOzPz69DQyNPz21LSujPz67OzmxJyadNTS1IyKjGxqbERCRKyqjLymhLy2rIyKhKSehPz23Pz+9OTevOzmtKSaZMzGxPTu5PTqzMy+dKyeTIR2NPTq3LyulOzirLyubLyqVJySPHxyJOzi1OzW5OzOxNzOrJSGNHRmJOzezJSKZOTSjGReHLyunOzaxOTWlNzOhKSSRIR+LFxSFLyynOzWvHRuRNzKfNTGdGxeJGxiNIyCbMy6pNS+pNzSrAQCBHRydLSunMSynAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfYgACCAQKFhoaCiQOEBI2NBQIGAooHjAiXCAkKCJIAAZ8BCwsMCw2XCg4PBhCCohESExQVCxYXChgZrAsSvBIaGxIbDA0JHB2sHh8gHx8SISIiIyQlBBysFR8mzBIiJygpBSUqK9cPEywiLS4oLzAFKjHkAAwmMjM06y81NgUmNxuscNCYQSIHuxopdOy4wQMgABw9cvjw8SMFEBhBhPAY4hAAkRZFjKQ4cgRJEiWgAiTy2AKJSSFLmAQ4MKDJSidPFggRAmXFhgADNthMJACC0aMQAjRZ6icQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -txt-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaVPzKjMR6RNze3Ly2tJyanPyODPz+/Ozq7GxqbPyKBPyGDPzGjPT29HRydMzOzDQuJOx6BPyGBPyKDOTWzIyKjERGRDQyNKROBOR2BOzezIyKhBwOBKRKBNSOXOza1CQOBPyCDOySZPzizPTWxPTy7Pz69Pz29PTq3LyqlMxmJNRyROy2lPTu5OTi3MSulFxGNIRWLMR+XPTKrOzStPTm3IRSNOzizOzavLymhLSyrEw6LKRuVIx6ZNzSvOzexNzWxNzW1FROTBwaFKSShOzWvOTOpOTazJyWjHRqXNzKrOTStLyifMS+vMS+rMS6pLymfLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfOgACCAAGFhoaDAgOCAQSOjgUBBgGCB4qEBAiaCAkKCJMACwwNA42bCA4PEA4GERITFKQVpwgWDwoXGBkaE6MDG6cOBAUcGB0eGgsTDR8gmw4OGwURACHIIiMkJSYIJygpKSoYgtYrLC0kLdAuKS8w1IIdMTIzNDUbLjYpG+KDABcRbtRrYWMDjhw6xg0KsCMAjx4+fmwAEiShvwBCChgYQqSIkRpHdMBjZCIFkh1JlCxhcqSJQkZOnjyBAgOGjihSpLwkhAFDBJ9Ae0bwEwgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -unknown-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXIyKjNTW1Nze3LS2tJyanER2RGS+VPz+/PTu5GxqbPz69BQ6BCxeLFSqRPT29HRydMzOzDQyNERmPKSypCRWHIyKhERCRDyGPKz2nESiLBxGHCyCHGxubPz6/PTy7Ozi1Ly2rKSipOzm3LyqlKSWhCRyFOzizLymhNTKtNzOvOzaxOTStPz27OzWvOTOpLSupLyedMS+rMS6pMSulLyqjLymfLyifAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAamQIAQECgajcOkYEBoDgoBQyAJOCCuiENCsWBIh9aGw9F4HCARiXciRDQoBUnlYRlcIgsMG5CxXAgMGhscBRAEBRd7AB0eBBoIgxUfICEiikSPgyMMIAokJZcBkBybJgomIaBJAZoMpyCmqkMBFCcVCrgKKAwpoSorKqchKCwtvasIFBIhLiYvLzDHsxQNMcMKLDAwMqEz3jQ1NTY3ONyrE+jp6hN+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -vcalendar-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXDQyNAQCBMTCxPz+/ISChAQChKSipAQC/Pz+xPzerPyqXMRaBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARyEEgQahVijMmD/oRAbBw1FCgaFFrpEbB6jt1g3OpFAscxwATUiIAgBRKJXiqIYJEMBQNSWSAYgptrMDo9FJqKrHArTR4WLGisSkbebE12gXFFGRBFyd3eaFSvbx1xCDBXC2E1e1EECo07ABkaBh4fGn4RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -vcard-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXDQyNAQCBMTCxPz+/ISChKSipISC/ERCBMTC/Pz+xPzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARvEEgQahVijMmD/oRAbBw1FCgaFFrppeo5drKhXqQUEIfREyweqWIoHo4GDYtkGxwQ0CjitEkUrCyfYjtdbJoFW/agmLJWWZSY3B0EbGJ4uAwcHlK2HpTg7YgHBgQjDH0THoGBCwULjDkAGR+RH34RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -video-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaTFxaXIxuHJyCLHx6ZLy6vJSSlNze3Ly2rMy2RNS+TKyqrMzKzPz+/Ozq7GxubJyanLSePKySNKSSPNTS1JSWlDQyNMSqPLSmVNzKZJyenIyKjHRydGxqbERCROTWXNS6XOzidNzOZPT29MS6rISChLSulMy2TLyeNKSOPJyCPOTi3JSSfHxiFGxaJFxWLFROLPTu5Ozm3ISCdDw2BFRKHHxqPFxWPLymTMzCvPTq3OzezKSWTMzCbNzGZExKNHx6dLyqjMy6XMSqTMSmTEQ+JHRybMSynISCbMyyVOTWbLy2ZBQWFGxqZOzifDw6LCwiDISCZJR6LIRqJBwWDExKRHRuXHxmJGxeJFxSHCQiFFRGFGRSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfhgACCAAECAoWHhoMDBAUGBwiRkQkCBwGCCgsLBQwNDp8ODxAOEQIAChITFJwVoA4QnhYXEhgZBRoFG62fHB0eHxcgIQUiIyO5uyQIJSYXJwUoKSoUKwEWniQkLCUXHy0DLi8vMDEfBw0kMjMnFwAfNDU2Nzc4OTgmOjs87ILvEj04NPj4ASRICR5C2vVrEWAIEQwSihg5giThIHdJiCgJMWIJkyZOLA4K8CHJkycimEAJEcWJQkECEHyQEqIHFAJTqFSxcjGAjhIfrlzAkkWLDS1bel5Y+mELly5YCEyQ4CcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -wordprocessing-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRSVFxaXFxWTNze3Ly2rJyanPz+/Ozq7GxqbHR2dHRydGRmZERGRMzOzCwqLJyWjOzi1Oze1PTm1PTm3IyKjDQyNERCPPTy7HRmXCwqJPT29DQ2NNTGnOzm3PTq3CQqJMS2hDQuLKyaXCQmHBwaHKyahLSijKyehBQaFCQiHHRqNPTu5LyulCwuLHxyNAQGBBQSFERCRBweHOzezIyCVJSSfOzavLyqjOzexOzWvLymhExGJEQ+JExCJExGLCwqHOTOpDw6POTStLyifMTCtMSynMSulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfWgACCAAECAwIChYeDjAIEj48FAgYBjIIBBAeaBwgJBwYDjAoLDIkNmgsOnw+CEBESExQSEgsHFQsJDRYAFxWbmhgZGhsEBRUcHQ8cEB4fzhAWICEYxSIjJCUDJicnKBkpKissFC0uLwAwMDEyFzHpDxgfES27DyozMyX6+TMTEzQtWJWoIYGgQRsl/t3AsStFQRoGIYrIkUPHDhcANPDo0cMHxx9AUtzQEWQHKwAcSDy4IAQbh5FDghDZNShAkZsFjBzBgaQnh0YcHojgIMIFBwtBXfgJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -1downarrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBBQSFAQGBDQyNExKTHx6fGxqbFxeXGRiZFRWVDw+PAwKDJSWlOzu7LSytJyenJSSlISGhISChIyOjFxaXDw6PPz+/MTCxLS2tIyKjKSmpKSipJyanAwODDQ2NHRydERCRFRSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZzQIBwSCwaj8ikcslsOp/OgHRKlQoCgymRUDAcEIkwYgxWFBYERpHQcDwgEclEQmk8DhWL2kiIXDBwExMNGRoJaUkEEH8bEQ0cGgcWAksEHX8QHBKSHk1sfxMHH5ROBBsOICGkT2wiq1CIULKztLW2t0h2QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -1leftarrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExKTJSSlHx6fAQGBOzu7GxqbJyenPz+/LSytFxaXMTCxGRiZKSmpISGhFxeXISChAwKDFRWVHRydJSWlBQSFERCRIyKjDQ2NIyOjLS2tDw6PBwaHFRSVDw+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZ5QIBwSCwaj8ikchgQLJGBgfNZDBAKBirRekBMtYGEYsHIgsWNhOO7tCrShDU18Hg/CJAIG0o4wCUQcksTFBUSCRYSEnpUFxgIGQkJGYyNGggbHBaVjR2QCxEeWkITHQ4IH3tPFwEMA2ajAKUgqlQTTbFEE7W5vUgGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -1rightarrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNGReZAQCBMTCxGRiZMzGzOTm5LSytPTy9Pz+/CwqLOTi5Ly6vCwmLMzKzJyanJSSlBQWFKymrIyGjCQeJJyWnISChISGhHx2fKyurDw6PAwODHx6fHRydDw2PERCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZ2QIBwSCwaj8hkMRBQKgOCgRMZIBSk06XhEM0SA4iE4uoVLhCMhqLrdSAekMgYO5VM4BQ521mxIC4UFxBWdEkSERYYFxETGQGFSBKCGBEaGRuQSBwdeZaPXpsQCB6YZQMdEI6ZSgMepKusHh+wrCC0rLdlursGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -1uparrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBFxeXDw+PMTGxHRudPz+/JSSlLSytIyKjHR2dISChIyGjIyOjLSutLy6vKSepJyanISGhJSOlOzm7Ozu7MzGzKyurJyenDQyNGReZKSmpIR+hCwuLCQiJBwaHBQSFAwKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZtQIBwSCwaj8ikcslsOp9QYyAQFQYEAyr0Sihkn1fDAeHVLsOJNELxVaITC0bDUU6GH5AIQ8KYrNtFVxQVFBYWFxgRCREYdUQZGhYEDwgIGxAHCQocCgWOQhmhGR0epR8gqCFTq1Wtrq+wsUt0QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -2downarrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAQGBBwaHDQyNExKTHx6fGxqbFxeXGRiZFRSVDw+PAwKDJSWlOzu7LSytJyenJSSlISGhISChIyOjFRWVDw6PPz+/MTCxLS2tGRmZDQ2NAwODJyanKSmpKSipIyKjHRydBQSFERCRExOTFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAasQIBwSCwah4FkQKBsDpoBIqFgOCASCYRWm1AUFgRGkdBwPCARiWRCaTwOFYvYSIhcMOiJpJGZaDYcR0IEHXceEQ0fICEWIoJDhHcQHxIHgI9SEHeVG46YUh8OISOen1INCqWmUnOYTUxQAU9NUlRWWFtbCiRgrYNlZ2lriG8lYUd1khETE24gCZeCkRgeFBAQIAeNn9OTlXKrBJoYnKrcoaPmpmSpq3S+7u50QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -2leftarrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExKTJSSlHx6fAQGBOzu7GxqbJyenPz+/LSytFxaXMTCxGRiZKSmpISGhFxeXISChAwKDFRWVHRydJSWlBQSFERCRIyKjDQ2NIyOjLS2tDw6PBwaHFRSVDw+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAavQIBwSCwaj8gkMiBYNpeDZzEQXRIKBmPgmtUSDgipcAsWjxOKBaN7Tq+n6EbCIQ3E5+KtQk6gjwl7CX11D3sPBBARTQGFDYeJT2R8EhB0koKUfgATFBUSCRYSEoqcnqCiikMXGAgZCQkZqautr7FiFxoIGxwWqQC4ury+qh2tCxEexMbIRhMdDggfYs7Q0kcXAQwDbELY2txEziBmmx3jSRNMR+nk4e2b70ry80QGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -2rightarrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNFxeXAQCBMTGxOzm7CwqLLy2vPTy9Pz+/Ly6vCQiJLSytLS2tLSutOTi5MzGzKSepIyKjJSOlKSmpMzKzJyanIyOjBwaHIyGjISGhJSSlISChBQSFJyenIR+hGxubDw+PHRydHR2dEQ+RHx6fERCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa6QIBwSCwaj8hkIIBcJgEBweAYnTYJUmMAa9USClniFtwlGg6IRFhoUKTXwwWj0FB3F46Hwl6UQyISfAB+EROCQgsUFRYSF3yJEIyBaxgWDBkaGRtclQwSHBIbEGEdGx4fGhcOICEDGBsWHBmqIq1CHRIWGRMMIyRTHRy6Er22tyONq8YdJRe0xkIDwr2/QwMfliMmZQADIxasZd4e4UYDIr7c59rc0eVFA+/m0EQD9PDt0flP/P3+BkEAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -2uparrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBGReZDQyNMTCxHx6fPz+/JyWnKyurHx2fDw6PJSSlISGhIyKjIyGjISChLy6vJyanOTm5PTy9OTi5MzKzLSytKSepMTGxMzGzLS2tLSutKymrHRydCQiJCwmLBwWHAwODLy2vHx+fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAajQIBwSCwaj8RAAMkUBgSDZdP4JBSi06TAcEAkFNLp07BgLLzY5njRcDzO3zB1C4lEGI83Wj58SiYUFRUWdg0XEXFFAwIYGRoWGxwRZQUFHZdgRAObmx4fHiChISFKpVlKWUdPaalOAlasp1sHG4myZGZ7Yltsbgu1mUhjdRF5egmxfQJ/gYOFdrZDi40iFgiSCw8jBQmYcpydn6Ego6WorUwGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -abs-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAWABYAAAJLhI+pF+vW4HMR1InqxbJzBiLCeIxCaIkneQJk6rkl+2qlONzeNi+2YvKhEIOW4iczvJSoSDDIbCpbq2oGBXUtd59r7IPshsHdB70AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -airbrush-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAASC/AQCBPyChMwCBIQCBPz+/MzKzKyqrISChDQyNPwCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAR8EMhJKw3BahvEyNvWDV+ojQMBAhgmeukaFHSxTqh6FYZx3CyYbtf7XYRAFs8nQ56WxiBpyOEdjLkkrnA9IAKGqXbnTYAP1NDMe0Z8JYR4nPP1seEqTHpWZMupVHx2by03Q4JXbxuBfYoaaVZ3i4YKbo4WaQAKBCxjcEAGEQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -appearance-22:actions actions22 22:photo:22 22:R0lGODlhFwAWAIYAAPz+BAQCBBweHPTy7Ozq5ExKRPTu5NzStLy2lCQmJAQGBOTezNTKrLyylNTKpOzm3NzWvOzm1MTCpNzaxISuvBSGvLy+pKSehOTexISutKTa7IzS7GSarJTW9HTK7CyazBRypMzGpDw2LOTaxEyKpCSSxARGbERCROTizMS6nDx2jARajIR+bOzi1OTi1MzCnLy6lOSupNx6dGS2rJS6pMy+pOS2pNxGTKwaLDSmpHTOzES2tIyuhLSmjPyqrMw6RLSOhLzSrGyqbFSmXJSyhNTOtGTCvLzm5CyOjEQ+NPRqbOxOVKyKfMzizKzepFyuZJSqlBR6fCRmZJSKdDw6NLxqZLQiNIwyNLSejDSCRJzWnEyiVHySbBRiZDQyJMSijGS6ZHSCZJyafDRmPISKbJyifDw6LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAXABYAAAf/gACCg4SFhoYBAgGHjIQBAwQEBYwBlYiQAwYGi4UBBwcInIIJA6WRBAqdCwcMDA2pggEEDpUODwSiAAEQnwwHnI8RwBIGsLoLExQVFg4XiwEPD6IKGBjAExkaGxUcocfSgwHV1uITFR0eHyAhIroRERLAC/PVIxMkJSUgJvHH1RAKTixAgQzZhAkpVKwwwYKWrgnzFrRY4IIgBoMTRryQAGPjs4zzYsgYQdIgsgMzaNRw0CCBLgn2bNzAceMgSZITcujYwaNGj2sjcPjw8QNIECFDiEgoYuSIDiQOkoSTMAGHkiU4mAhp4uQJDyhRjOSQMiUXFQdVrOC4giWLFidbRri8QBKlyxQviIp8udKjRhYwYLKEedFAjJgvucI5cFBEgoMxkMm82PjFmCERix1wLCNmcg8viRGZ6aHZcQ8zoRtVWp16UCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -attach-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBMTCxPz+/DQyNKSipAQCBISChFxaXDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARrEMgJgqA4zzus/gLhFd5HCcZAXqsphYPUdhcYFNRcZnvdtpnDqPTbUWgAJKBYwzBlw+bRo3xmkNWoBgm0OrVLn3GC9RgCk8DhUw7c0rHPr4CDu5SYQNyEt7uSY3p/UAKFhYKDSQOLiwgFdhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -back-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRGZAxCZGyavExmjHyatOTy9CxihISevPz+/KzO3BRylAw+XAQCBDRWbPz6/FzC3CSuzDyexJzO5Mzq9CxSdAQOFISmxNzu9HTS5BSmxAyexDSuzJTa7Mzu9Kzi7GS21CRmjAQOHHSWtLze7AyWvHzG3BRihAQKFCTO3BS+1AyixBSWvBSOtBSStAQWJBSixDzW5BTC3BSqzBS21CTC1ETW3AQSHEze7BRqlBRmjAQCDBR+pBRefBRSdCH5BAEAAAAALAAAAAAWABYAAAalQIBwSCwaj8ikMqBcMpvHgGAANQYIhWdVGDAcENQtIJBQLBgNx0MQaDuQXcghIplQDhBIxXKJYiAZGhscHR4VHyAhIiNWJBklGhIbJoQnFCcTKIxFKSgbKissJi0mJi4vLiYoMEcXKDEyMzQ1Nje2NisoOEg4KDU5K6g6OwwoKAN9SCOeMmgwz884PEq9PT4NYkPLP9jZQikN3d4AKVrjKePp3gZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -blend-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQmJAQyNAQ6PARGRARSVARmZARubARuXARmTARiPAReLARaHARKBAROBAQCBERydESChESOjESanESmpESytES+vETKzETKtETCpES+lES2fESybESqXESiRAQ+PARiZARybASGhASWlASmpAS6tASynASqhASiZASaTASSNASKHAR+BARiBARydAR+fAS2tARKTDRaXARaXASOjASKdASCZAR+TAR2PARuJARqFAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa3QIBwSCwaj8ikcslcBp6CAaFQMBwOiIRiwWg4HA9hAAKJSCaUiuVywWQ0G07H4wkDxp8CKCQakUolJicoKSorLC12eHouL34lMIKEhoiKEFMgLn0kMIGDhSyVYhADjJuAkoWHiaMEMXuOnJ6Tq5alBpp+nSeflKx3l6a6s6CiwKWZm52pvpaue8rEzaPIubLMta2Mscu9ob8BMgIfBDPJNDQ1Njc4OTotDXYP8/T19vZN+fr7SXRBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -bookmark_add-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCwqLCQiJCQmJMTGxAQCBLy+vLSytERGRFRWVKyurKyqrLS2tKSmpHR2dJSWlKSipISGhGxubIyOjGxqbIyKjFxaXGRmZHx+fPz+NGRiZPz+ZPz+HMTCBKSiHPz+jFxeXPz+XPz+tPz+zPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAamQIBwSCwaj4Gj0hgQLJ+AAaEAVQoI06pRYDhkoYgwIhEgKBTfZ2FhaBsYDS8VWnA8Go0FJIKeqyUTDw8EDHBpSwUUFQ4UFhcYDQYFfkoFFxEQDG8KEAUZlEeWGBIakw4FG1STiBoYBRwdBR4fHgUdHKBEBSCnIR8iIyIfIblFu6ceIyQjtcXGCbLKzAUKzrq+wMLEVa+xs7W31kOTk6nkWuOf6Ea5QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -bookmark-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBCQmJCwqLMTGxAQCBBwaHMTCxLSytERGRFRWVLy+vKyqrKSmpHR2dJSSlJyanISGhGxubIyOjKyurGxqbFxeXGRmZHx+fKSipLy6vGRiZLS2tFRSVHRydJSWlHx6fCH5BAEAAAAALAAAAAAWABYAAAWWICCOZGmewamaQrq+wUC8azHINGocOI38iIRAceDNaISFYklkGHOEhoNBfUAOhuOLEJE8HoPiRKFdESiQBqViuTDIUAsEcyAeGJmyiqC5RCwJGg0YcEh9D0V3Dxt6JwQVDRYVHBUdi40mjw0PTgwQHgeYJQQJfxUXFxAOoTkFpQ0fsRSimQkWEQ0VtI62HLt7vjl7JQYhACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -border_all-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI+hI+pyw0Bo5wR0TttUJDv0yWhRopfaYzguaKt6aasrGFYbVPxM/O7Snv9WEAfTIgMKpNGWU63emYc1GrVUAAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -border_bottom-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIyhI+pyw3xIpwyOgOv1dvl+2lhMzIlyZ1KQLUVm8Zch4ozbcq6l7L+D4QhgsTf7Xi0FwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -border_fall-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI/hI+pyw3xIpwypgBRdg/v9h2eyBnZCIKYxX2oEsJruVKjHS8vk3duKZnpHKjeRSTU0HYpTcxWgRqB1KrVYC8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -border_horizontal-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIyhI+pyw3xIpwyOgOv1dvl+2lhMzIlyZ1KwLbuyybw7KY216Einpv377FRhhUV78igFwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -border_inside-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI7hI+pyw3xIgxTRvcg1oku3njbBx4liV3dqYbsSsXyLBr0Pad1iCovsmOwgjbdz9TrGHWWSeWZikoXhgIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -border_left-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI6hI+pyw0Rnox0ygNXdG9z43Xal30gUiYhk5LoenJQRVtti5FwE+Kx4+O9RrIda6gwDmvMi+kJjTIMBQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -border_outline-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI8hI+pyw0Bo5ww0SttcKci/ymgMTZl+Yjbt3Jn26lautX0A+OizHJkjsrper7XbkZ0ATEYDZPii0qnU3sBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -border_remove-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIthI+pyw3xIpwyOgOv1dvl+2lhMzIlyZ1KQLUVm8Zch4ozbcq6F7s+fgsKb4YCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -border_right-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI7hI+pyw3xIpzyQRdVuIZj+3nHhogOiZng+I1qoqIdRVfbWy5y1u5M7MFphB1dsDULGXO15goJjUoRhgIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -border_top-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIyhI+pyw0Bo5ww0SvdCdrw7oGfNnZlczIpKorc+8RwZbZgXOc2uevOqpjJhrCb8QgwFAAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -border_up-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI/hI+pyw3xIpwyOgNRyPq+zTkcuIQKaV3T1pgHinmfm7AUedMa64Vw3bLJMr9TiZcSFUsnkw54q0Rl1KrVYSgAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -border_vertical-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI6hI+pyw3xIgxTRvcg1oku3njbBx4liV3dqYbsalFeJTp1iCovcjNsb9iZhMFcJwXUxTJLYuoJjR7sBQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -bottom-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRKZDRSbBxCXJTC1Mzi7Nzq9NTm9Bx2nAQCBNzu9JzG3Hy+1HzG3IzO5BRmjPz6/LTe7Dy61AyStCTC1FzC1AyGrETS3ETC1ETa5BRulAyuzBRylAw+XMTe7Gy+3CSqzAyexBTC3DR+nIS21KTW5Nzu/KzO3FzC3Pz+/ByixEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaXQIBwSCwaj8ikcnkMBAQDgjPAFAYKhsMBkVBUAYEFo+F4QLzVQEQyoVTOX/XBcsHA0+vMRbNBMwkRDhxuHX5GTlIeHh8gISIjFAEeiVRECiQlDAUmgxQjIhwiJHdFlycoKSIUFCEjGiGkRpcqCxYijxorsUezcxYsuoZJsxLAu0qXB7DCTJfHvArR0tPSSNTX1V/a20J2QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -brace-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAWABYAAAJRhI+pGbHYVHzQnUnrtXn7/gEYIJRHKRgYZraGuXLp28LcNL/Dqd4cYmJYRqegsKcY5DRIUhHYFDlQJGMuVn1ljdhqjhoiZrogKbMjFh/LHUMBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -brackets-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAWABYAAAJRhI+pyw0Bg3vxwImu0Zha2XkbaAjmYQrjh6qnCpwcB8evTGp1PKDrnzglZqTWDsg5DI5IUE1Yatpc0BrRFr2xfiljJlecXEPjDjG5iIRDCHsBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -centrejust-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIhhI+py+1vgpy0TogztlT7j3CiBJbZWJlqg4rry7jw/BoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -charset-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIIAAPwCBAQCBAQGBFxaXAwKDBQWFAAAAAAAACH5BAEAAAAALAAAAAAWABYAAANLCLrc/jDKuQK1zmKo3/YVJSpBSZYmKaTkAAwYoQwFELjvpisyaTM7H6AH+3lQMZQwExrOOiBh7/cJGokaXHGpQVaUo7B4TC6bw4AEACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -colorize-22:actions actions22 22:photo:22 22:R0lGODlhFwAWAIYAAPz+BAQCBBweHPTy7Ozq5ExKRPTu5NzStLy2lCQmJAQGBOTezNTKrLyylNTKpOzm3NzWvOzm1MTCpNzaxISuvBSGvLy+pKSehOTexISutKTa7IzS7GSarJTW9HTK7CyazBRypMzGpDw2LOTaxEyKpCSSxARGbERCROTizMS6nDx2jARajIR+bOzi1OTi1MzCnLy6lOSupNx6dGS2rJS6pMy+pOS2pNxGTKwaLDSmpHTOzES2tIyuhLSmjPyqrMw6RLSOhLzSrGyqbFSmXJSyhNTOtGTCvLzm5CyOjEQ+NPRqbOxOVKyKfMzizKzepFyuZJSqlBR6fCRmZJSKdDw6NLxqZLQiNIwyNLSejDSCRJzWnEyiVHySbBRiZDQyJMSijGS6ZHSCZJyafDRmPISKbJyifDw6LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAXABYAAAf/gACCg4SFhoYBAgGHjIQBAwQEBYwBlYiQAwYGi4UBBwcInIIJA6WRBAqdCwcMDA2pggEEDpUODwSiAAEQnwwHnI8RwBIGsLoLExQVFg4XiwEPD6IKGBjAExkaGxUcocfSgwHV1uITFR0eHyAhIroRERLAC/PVIxMkJSUgJvHH1RAKTixAgQzZhAkpVKwwwYKWrgnzFrRY4IIgBoMTRryQAGPjs4zzYsgYQdIgsgMzaNRw0CCBLgn2bNzAceMgSZITcujYwaNGj2sjcPjw8QNIECFDiEgoYuSIDiQOkoSTMAGHkiU4mAhp4uQJDyhRjOSQMiUXFQdVrOC4giWLFidbRri8QBKlyxQviIp8udKjRhYwYLKEedFAjJgvucI5cFBEgoMxkMm82PjFmCERix1wLCNmcg8viRGZ6aHZcQ8zoRtVWp16UCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -colorpicker-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBMT+xASaBASyBASCBARCBPz+/KyqrISChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARZEMhJ6wzBahvEyNvWEcMXcgJBFuApjavRhlgaz6J9u5dQDAUZ73VA+FhDQOAQQCQEQt6ymcjgREznlZatJpXdLZYq1ky137M3qS5zwl8lOR5IIDBx5TpviAAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -configure-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBISChFxaXNze3NTS1Ly6vKSipNTO1Ly2vNza3Pz+/MzOzOTe5DQyNOzu7MTCxGRmZMTGxPTy9Ozm7Hx6fPTu9MzGzGxmbAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAW1ICCOZGmeaEoGbBsI6joMRGEcbQwESDIrtVtAF1gwDLNaAmfKiVgLBJKgwB1KxQZrBHU0FAXmavFoQLYiB6TxFXMj5AZBwnJI2I3wcNWALyYEcgoKXxRhOHs7XxEVCwsWFgoUDRYUFwwQB25ZCxiNjo6GkwUXN2NsCxEYqhUHoQ0MEglYRQQXErcHrI55FycuB2YSmoyOBTEtB2sXuhU6XAENC2a6z9AKCwq+1tAN3E2J3ySkIQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -connect_creating-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBPz+BMTCBISCBAQCBPz+/MTCxOTi5AQGBNze3Ly6vISChNza3FxaXKSipAAAACH5BAEAAAAALAAAAAAWABYAAAR4EMhJqwzY6omD+MNGdR8YilNZnug0qGzrqrL1lnV1fyJBVB6VQEMoGH4ADGwQkxQPBwMiKGA2J8VEAnq0tgiKg5aL/C7C2gTjKCM0zowDQ8tuNQznNL7cKzjOUQsNfER+gguIg19+Pm6ChBZFDmWNi5M5FIyYFHQRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -connect_established-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBKyirPz+/KymrOTi5KSipMzCzNza3OTe5Ozi7MzGzPTq9OTm5ISChMS+xFxaXNze3GReZIyCjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWLICCOZGmeaBkAQpoGg7C6JizTQT7CxPwOwFWgYPChYIXkIHC4uQKGAiKRKCyNpxxUUVViVYNFLkqtLo+DAkMMLXQPXwAy2WCTF4544FGtKuwPDhB6DnxuUmyCcXIQhV1uYoMuEAcOBxEKCHg6TzGFCJUSizuejROKOAM9OY2SnUU7nD89NCcDsLUnIQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -connect_no-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBPz+BMTCBERCBAQCBPz+/MTCxOTi5Nze3OTm5Ly6vNza3ISChFxaXKSipAAAACH5BAEAAAAALAAAAAAWABYAAARiEMhJq7046827/+AVCKE0Dh9BAGdaGISAToFGFMcBU+11I4hDYseSZQiKwwKoI/QwBIYiuFDCZseGdIlYEjUNg1SpY6w2N4cUIW6cjwW1lsFwo+MqgtZuw0/ydw5vH34lBhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -contents2-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBDyGhCyCfFSWlESOjDyKjDSGhCx+fGSinGSenFyanEySjHSqpHSqrGympEySlBx2dISytHyyrCR6dKTGxHyurHSurHyytGSipCR6fARmZFSalEyWlBRubAxubBRydDyKhDSChLSytPz+/MzKzIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbFQIBwSCwaj8ikMhBQIpmCQdM5ZBIKhgNiugwkFAsCI7pNMhuOxkNBgBgEiAi3GkBLJpJHYgEpaClyREwVFhcSEhgOGQoMfgMaERtcARQBFRMYExZ6HB0FUYAekkIBHxqWFmlrC1haESAfG6MBGx+VFRgKYH0hInGRklO0ppYXCwwMWQiQHkwjgrWnFRdYZHIBJCTP0LaWGAcDW9jZ2nMAw9IWTOQkJSZMRsOV49nu8E+19PbmR7TY+1TovONH5V7Ag0QMBAEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -contents-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAAQCBAQ2NPwCBHSurIS2tBx2dBweHPz+/Ozm1GxiTGyqpPz6/Pz69GSqpOzaxPzy5HxuVLSmlOTazPz27PT29NzClPTexHxuXLSmjAxqbFSinPTy9KyehNy+lPTy5Pz29HxyXNzWxKSahOzexPzy7IR2ZOTWtESenPTy7KSWfIyCbKyijAQGBDyalPTu3KSSdDSOjJyOdCSGhPzu3OzizJSGdPTq1PTq3JySdMy6lAyKhOzWtOzi1OTOrJyKbMS2nJySfMS+rAwCBNzOrNTCpNzKpJSGZKyafLSifLyylIx+ZHx6ZDSChAQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAWABYAAAf/gAABAoSFhoeHAAMAiI2IAAQFjI6EAAaJkQeTjwAICYkKBQcLm5WdBwyfhgChB66bp64HCQC1lQ2irqQCAA4PowsLEBESE4wAuLIHFAAVFr+uDBcYxRm1GrmuGxwdFh4Mrh8gGCET1gDYyhsiFSMkDAsMDCUYJhvnJ9kHKCnODwwfPlBQsULCPRYAWogK9sHFiwoOPEyQh0JFPXO1YBSYwBEFghjdHkwQOYGgwQwIZRR44GHGDBogabhAsYEEihrUMAIoUMCEDRs3HODIYQHFA6MPcJA7KICFjgw7eIzo4cOfiwc/gKwIUm2SkKdDdlDt4AABDaU/iIRwwbTSUyJFOow4S3Hkx9oNDDZgXPU0h1wcSIgEGUw4ibVET5WoWMKksePHpdxmyKADAEIWly9HJtQkQJMmlAgZCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -contexthelp-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBAQChAAAACH5BAEAAAAALAAAAAAWABYAAAJQhI8Qy5F/ghBsLuOgpHHy+0hZ94HINiqWwoQrtjYpNqJ0A8Hcjbs73yPNZEHVDygTJohJWqiZe0JPM5ajtXxFMkXnklqNgsPiWzmHPatzhgIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -crop-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBMT+xASyBASCBASaBISChMTCxPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARUEMhJq704681r+EFHBcIwEKFImmfKkURhoh1cyO0rxEWZa7bezIUJ7gg04O62A22MyeeyF1XymrUSs5pZmbA61u+FLBOBhrThozq4D2cgYo6IawwRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -decrypted-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBGxqbFxaXExOTEQ+RAQCBPz+/PTy9Ozq7Nza3NTS1KSipFRSVOTi5Hx2fJSSlKyqrJyenJyWnDw6PMzKzKyurDQyNFxWXMTCxJyanHRuLHxuLGReJFxSLFROJFxWJExCHERCHBQODISChHxyLHRqNIRyNHRmLLSqbKyiZLy6fOTarPz67Pzy3OzitKymZFxSJJySTNTSnPTy3NzSpMTChLSydKyqbKSaXJySVIyGRGReLPz23NTOnMzCjHxuPLy2vKSmpOTe5LS2tLSutHxuNHRuPMS+xFxWLIR+RDw2HFRKJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SDAQIDBAUChY2EAQYHCAkKCwyOjZANDgIEAQoPjJiDAg2iggQQp5gMBwmrDBESl6MTFKuoFQSjABYRF40CGAW8BRm7hQwNxBobHB0eHx4gISIjBdiEAhYFJBslHOHSHh4hBSHlxIUmJygpKissBiwtLi8pGjDqhBoxMjMuaNSwcSMFjhw6dnjYRyrGCh4ueviw4Q5HDB0/PjAUJCBCAwMIGiiggAEIBFk/FgYLIgRkggQkhxAJkqGExkYMFnxsIGRkSQgLHhRRWUjAggQgG8AsSWRBBiP6VrYMOfKIyaBDNwLo+HHSUplOSyDRqiEHjRkretRQkcLgxayNF0wksQGQxsSKMTIq0QpgCba/gAE7whEIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -down-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRKZDRSbBxCXJTC1Mzi7Nzq9NTm9Bx2nAQCBNzu9JzG3Hy+1HzG3IzO5BRmjPz6/LTe7Dy61AyStCTC1FzC1AyGrETS3ETC1ETa5BRulAyuzBRylAw+XMTe7Gy+3CSqzAyexBTC3DR+nIS21KTW5Nzu/KzO3FzC3Pz+/ByixEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaRQIBwSCwaj8ikcnkMBAQDgjPAFAYKhsMBkVBUAYEFo+F4QLzVQEQyoVTOX/XBcsHA0+vMRbNBMwkRDhxuHX5GTlIeHh8gISIjFAEeiVRECiQlDAUmgxQjIhwiJHdFlycoKSIUFCEjGiGkRpcqCxYijxorsUezcxYsuoZJsxLAu0qXB7DCTJfHVQrMX9PU1Uh0QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editclear-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAWABYAAAJBhI+py+0PYZi0WnqC2Lx7HhjaR3YhMArBUHpnuramCLLy9tY3TuP2nfPtVD3VTxY0DpNDHqo5E12mlYj1is1e7QUAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -editcopy-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFPz+/DQyNISChDw6PMzKzMTGxERGRIyKjFxaXMTCvKSmpHR2dPz6/Pz29PTq3MS2rPz69MTCxFxWVHx6dJyWjNzSzPz27Pzy7Pzu5PTm3NTKvIR+fJyGfHxuZHxqXNTCtPTq5PTi1PTezNS+rExOTFRORMyylPTaxOzWxOzSvNze3NTOxMy2nMyulMyqjAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbYQIBwSCwahYGkUnk0BgTQ6IAQaBKfUWhBYKhaAU+CgXAQIAyChLeJzSIQhcH6GFaM0QtGY5kstqEODw8QEQELAhJTc08KBBMEFBUWDRcBE1pca20SGBkaEBscAY5maFRIAgoLHRQRHh8gIQFlZnByqA8ZGSIQIyQjJQEmYgJ5p2ACrK4gJx4gKIZZAgdeAQ4ZI9kjKSor0AwEjeAs1S0cHAslLi4vMDDRWeRIfEsxMeET4ATyVoYLC5fizXEiAR84BeMG+pEm8EsAFhAjSlR4hR6fLxiF0AkCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -editcut-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBAwCBPz+/OTi5JyanOzq7DQyNGxqbAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARbEMhJq704gxBE0Bf3cZo4kRJqBQNRfBucyudgvJS6VaxLzyMa6/bLiWA9HOg4VIIkL5vzuRkcpkvRIIAorphJLzBW84WEuRZWp6uaT7J2Sh1Hit3OY/ZO7WvsEQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editdelete-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAASC/FRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwKDAQCBExOTNze3NTW1MTGxLS2tJyanPz+/Ozu7BQSFCwqLDw+POTi5PTu7MzKxIR+fCQmJPz6/Oze1NTGvPz69Pzy7Pz29LyyrPy+vPyupPTm1BQWFIQCBPwCBMS6rPzSzNTOxPTi1NS+rPTezNzOxPTizOzWxMy2pOzaxMy2nPTaxOzOtMyynOzSvMyqjPx+fOzGpMSihPTq3OzKrOTCpNzKxNTCtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf8gACCAQIDBAUGBwgJCgsLgpCRAAwNlZYODxALEY+SkAMNEqKjEw0UD5yegqCjrRMVEqidkgWhraMWF7GptLa3EgEWFRSOnhW+vxgZEBqzkBvItxwdHryRCNGjHyAhHSLOgtgSI60c2yQjJd+eJqEnKK0hJCgnJSngAO0SF+8qEvL0VrBogW+BLX4oVKgIyMIFQU8KfDV4R+8FDBcxZBREthAFiRIsOsygsVEUh4Un3pGoUcPGjZInK65QicPlxg8oX5RwqNJGjo0hdJwQ6EIkjRM6dvDYCKIHSBc1Ztjw4eOH0oIrsgIJEqSFDBo0cuTgsdSTo7No0xYTZCcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -edit-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBISGhISChHx+fHx6fHR2dGxqbGxubGRmZGRiZFxeXFxaXFRSVIxSLPyuXMzKzMzKxMTCtExOTPzqrPz+/NTS1MS+tOSaVPyWNPz6/IxeNPzavPyKBNTW1PyCBPyGBJxmNPzOpLx6PNRqBMSCRNySTPyCDPSGBMxiBKROBHRydPSylOyydMxmBJxKBAwODPS2lPTq3OyabJxGBPTy5PTGrOyOXPR+DPz69PzmzPzevNxuPORqLMReFPzy7MyCXKxiNIRKHBQWFNTOxPzixJRaPFxONHRqVPz27PTy7PzStCwqJDQyLJSGdIx6ZPz29PTu5HRmTLSKbMSGZHROPFxKPJSKfJyShKyehMyuhDQmHEQuJJyOfLSijMSynMS6pLSefDQyNHx2bKSahLyqhLymhOzi1FRGNIR+bNzKtOTOtOTKrOTKpLyedAQCBFRWVPTq5NzOvLyunLSmlNTCrOTOrNzGrLyidMS+rLyynKyijLymjLyqjAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gAAAAQECAwQFBQYHBggJCgsLDAwADQ6CAQ8QD5ydEJ+gERKWE4ICDxSpqhWqqhYNFxMYphCtqaytGRoXGxgcggSoth25u70eH8APFR0VzMzNziAXIRjIvwAFwq3EqSLUGB/iI4LathS4JCXVJh8nKCmCKrXDFCss1eIfLS4v8ssdmgWsAGNDDBnt3s3wJ+jAtlUhaNSwccNEi4WCBBl4SAHHihw6ZOzg0QNjRgAG6KXK4CNEjBU/gDQI8kLISQAIADobAoMIzCINjLw4YvNkAno4kCRRUuNHESNLmDRxUjSjAlRPfECJImUKlSpMrFzBIqWqoKtJaWSJomULAy5XXrp4+QKGYcYFoCBEWRImi5gmY7CQyVLGriAGD2jEMHMmCxc0Xb6kUbOGTRs3N988gLM4jpw5Y+iwqcOGjZ07mE8yiGABz5c8c/Ts4cOnDJkybS7fdMO7t+/fvDMaCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -editpaste-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQWFDw6FHRuFGRaBFxSBAQCBAQKBCQiBIx6HPz6/NTOfKyiXDQuFOTm5Pz+/Ozu7PTq5Pz63PTyxNTOjKSeRExGLMTGxMzKzNTS1NTW1Dw2NKSmpKyqrKSipJyanNzWlLy6ZLSuVIx6FISChIyKhJSSlCQiJLS2tDw6NDQyNCQiFCQmHBQSDGRiZHRydGxubHx6dGxqbFxeXGRmZFxaXCwuLOzq7KyurHx+fDwmFEQuFCweFCQWDBQODBwaHBweHKSinJSWlOTi5JyepHR2dDw6PBQSFNze3ERGRIyKjIyOjISGhPz29Pzy7MS2rMzOzFRWVHx2dHxybDQiFPz27Pzu5PTq3PTm1NTCtJyGdHxuZHxqXPzq3PTaxNS6pFxWVFRKRNS2nPTi1PTStNSulNzOxNSynMymhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCgwABAgMEBYSLggaOjgcICQoLDA2Pj4MGDg8QEZ4FDxITFBUWFxcYGRobjQ8cHR4fCQ8gCyEiFSMWJCUkJieNEB4dKB4pKissK8wrLS4vMDHBAAYQHx8dFx0fJDIzNDU0M+IyHzaNNyg43Ng5Ojs7Ojw9Pj9AMkCNDiZB/h9CSOx4QLCgihItqBkYgqIDESElitAYWJCgkQcXjjRCgi1Ihw4BB5LAQOLCgyQYHihpUU3DBw5ElpAgAYNixSRJjKjQaECDCRPZPDB5IbIGSQwKLnh4wbInLA4kmJB4oaPiAwVNnER40hRK1BIAaVatUZJEFCkmpmjgCeWDCalFe4q4oFKwSRUrEa5gycLzwq8lUnPQ4PEgSpYcUZ5o2cIlS1O/JHLEDdfjQZMIVrpgweLFy5e+M6WSmBGlxYMYYBRzCaOFi5imHWBIfOEiShLTVjaP6eyFTBmN1TA5OvLDjJksWb58OVMGDRqWjAYdmU79SIvpjqJr104nEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editshred-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBFRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwKDAQCBExOTNze3NTW1MTGxLS2tJyanOze1Pz+/Ozu7BQSFCwqLDw+POTi5MzKxPTu7LyyrIR+fCQmJPz6/Pz69Pzy7Pz29OzaxPTu5PTq3PTm3My6pPzu5PTq5NS+rPTm1PTi1PTezOzWxPz27MyynOzSvMyulOzOtOzKrMymhOzGpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbpQIAwIBgMCAXDAZFQLBbCqJTRqFobjgdkEYFKowPJZEyeUBqVR/crHDTKZYplovZKCW84+YKZZNZSBXl6EwEEBhVPXxZihGMaGRscdkIdg4QeEnVfCH2OHyAhIhuUAAiXZSEhIyQlJqWnjiEnKCWupRWoYyEgJK0SKaUKjam0JCorLMFfC6iqx8giLa/MGAsT1wsuCyULKwssC9RSzdkfCyALKuALLQsvpeXYIQso3gsiCzALMfENC+dGcMNHUAY/f+jq3ctncMYCGggFrsvHcEGNh/EyPFmg8cmrJxAVkVO0EUDJklHoBAEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -edittrash-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBERGRExOTDQyNISChBQSFCQiJCwuLPT29Nze3GxqbDw6PGxubHR2dJyanLSytJSWlJSSlOzq7Pz6/Nza3Ly6vFRWVBQWFIyKjMTCxHx6fIyOjLS2tOTi5PTy9OTm5Hx+fNTW1KyurKSmpJyenExKTMzKzKSipFxeXCwqLMzOzKyqrMTGxLy+vHRydBwaHNTS1DQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb8QIBwSCwaj8KAMoA8LgUDQsFwQByay4RiwWg4GA9IRGk0SCYJSsUCsVwwGQ1EsmESD5xOp+L5gDwhBRIZDhcDdkMGDgEiIxAkJQ8Ok5MmAohDAQ1xJxUlKCUlEg0pKpiZJRoLCxmtCw1eURhOcR4rbQ8cGRwLAwgGtBYTDywtGRKjvQTARgEZLhMcKC0OrQMvAirMRc7CHCTU1g2+20TO0NIn1RwDCya/wdHT1Rnt5LToKOq79trx0tR02YPX7Jm8fRxMOIhSLhOJE/LCJSTlr5kFEBQsWDiR4UGGBgsuHDg1BEYAfTE6oEBR4AIBAiS5yWBAAAGBAyaPGAgCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -encrypted-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBHRudFxaXExGTERCRAwGDGxubPz+/Pz2/Ozm7Nza3NTS1KympFRSVHR2dNTO1JSSlKyqrKSipDQyNMTGxDw+PLSutKymrMTCxAQCBHRqLBQODJyanDQuFFxSJFRSJFRGJERCHExCHISChHxyLEQ6HGRaJExKHLSmbLy2fOzitPz23KSiZHxuNHxyNJSOTNTOnMTCjLSudKSaXJSKRJyOTOTetNzWpHxuPOTi5MzKzLS2tFxWXOzq7Ly6vOTe5Ix+RLSqdNzSpLyydKyqbKyiZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBAgMEBQKEjI0GBwgJCgsMDY2XjwkOAgQBDxCLl4QNCaGCBBGWooINCAqqrBKgqwATFKaDFRYVtBMXsIMNGBm0GRADjQIJxKIaGxwdHh8gISIhGyMZzIwkGholJiYfJiAfJyEZISDbg90oKCkqKwcHKyooLC0f7IIuLzD2YMSQgW8GDRri+AFoUMOGvRsxUhSsQQPHvmQSchyQtEAHhh0WJHDQcJERjwsKDvRI0BGDjwgicXhQyCOjSgUKPO6AObIkIQESfmxk6REDT4s0bfaYpDNkT4VAha5s+TLmzEYtatwIOHAiDZIKNQAJYk9IjCFEisyoocFEB4UACtBpm0t3LiEsgQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -eraser-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBMTC/AQChAQCBISC/PzCxPz+/MQCBIQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARfEMhJKwhi2F0DIRnHeR+oiRRZmqikrmD7wgI6r+EI4+d2l7lNwWDYsTiFw4FI61mSymXxE3xGo8xqBXpVGrQUbveAcG7H0bKowEar12wx2SyMp+lI+7s1ie/5fX8tBhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -exec-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAwKDAwKBCQiHNze3AQCBBwWFDw6NPTy9PTy/Dw2NKyytOTi3LS2tMTKzMzOxLy+tLy+vBQODNze5NTS1JyalIyCbIx6VIRyVISGfJyelOTq7EQ+NMTGxKyurGxeRLyKPOSmROSuVOy2XOSiTLzCzNTOzDw+NCwqLHxuVOy6bPzGfOSuXNTW1LSyrMSWRNymTOSmTKSCTPTGjPzSnPzWnMyaVBQSDMTCxPz+/KyahNSeRHxeLJRyTPzmtPzarOy6fJyajNza1Ly6vLyulFRCJPzirPTOlMS2pNTSzMTCvJyenBQWFNzKtPz6vPzyvPzqtOzGlOTe1AwGBFxWTLy6tPTm1PzSpPzutPz2xPTSnOTSxOy2dPzapPzerOzm5IR+dPzu5Pzu1PzqxPzy5Pz+9GRiXGxuZKympHR2bOTm5Pz6/MzSzBwaFJSSjCQmHPz2/AwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeEAQKIjIIDBAQDjYMFBoMHCAkKgwYFhwULDAUKCg0ODxCkBQgRnoUSExMUDxUWFxgZGpAbFIuGHB0eHyAhIiMkIB8lJieIKCUpJCTGIyorLCktKIUDpC4YLzAxIjIyMzQ1NhgdpJI3ODktJTowOyM8Ejc9Pj9AQUIEclAocCMIBQhDiOwgoaKIoCI+jBxBkkSJkCWemIyq0GSHCBVHihRx8gRKFCmpKhGaQqWKFYZXsGR5kkXLFgRUXBUqkCGCFS5AjnTx0sXKlyA6CRVgAAHMAilhxIwhU6ZFkBY5kgKYUoXBAzMKzixZ4AJNGgVm1KxhM0WpmQpUMtooaOPGxAM3Nw60oYLGjNYCbzYJOgAnRzNBJ95oPYQCgpJtkwzFoULlRuRPiy9fNhAIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -exit-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBHR2dDQyNCH5BAEAAAAALAAAAAAWABYAAAJOhI+py90RnIMyRUOxhDfzJkACdoXBuEDDkQFDi5go0MrKx16kns80b7qdELCgBYaEGWwL5nG1ePFiKp9A6kuYRNuho8vxVrrZivmMRtMLACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -fileclose-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBERGRERCRDw6PCwqLExOTFRWVHRydGxqbGRiZCQiJISChIyKjHx6fDQyNBwaHJSWlKSipBQWFJyanPz+/JSSlCQmJAwKDCwuLBweHBQSFGxubExKTISGhDQ2NFxeXFRSVDw+PAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbZQIBwSCwaj8jkMSAYDAgEJbFgOBwQCUOAoJAaFgvGonHIBhyP5BcSgUAYDWxggD4WFmx3e3HQngkSRgYMEBMUFG4MCId0BGlEAQeEhocVDYcUdBYKF0QCB3gRlJgUAQEYBBkaRAMbDZMMpAYcT46rQwMJrgsdC6QcfwoPnUMOBgkIV6SHHg6bw0QEAQYfBpggBZjPGsRD0gEchxwCIR6HChnQRQ8DIU4DTR4Em+ncRw8O+fmoXPXdRg+gQLFgIYM/KRIkoDP4QMKFf0o0aBAh4qGUixgzCrETBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -filefind-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQSFJyanLS6vLzCxISChNTe3OTu9Oz6/Nzy9Nzy/NTy/OT2/Nzi5Mzu9Lzq9KTe7LTq9PT+/Pz+/Nz2/Mzu/Kzm9Jza5HzK1LTi9PTu9IzW5ITO3FxaXNT2/KTi7Iza7GzC1LzW3FRSVMzO1MTq7HTS3Fy6zFS2vKzm7Lze5MTGzHzS5FTG1Ey2xEyyvJze7JzW3ITa5FTK3EymrGS+zFxWXKymrMzi7ESirEyqvLSyrKze7MzOzMTCxKSepAz+/NzW3MzKzBwWHLzS3ERCRAzi3KyurNze3MzGzLy2vLSutCQiJAyytHRydOTe5MTGxLy6tLyqpKyelJSCdOze3NS+tLyupLSmnKSOhCwuLPzy9Pzu7Oze1OzazOTOvMyihOTi5PTm3Pzi1PTazPTWxOzOtNSunDQyNPzy7Pzu5OzKrNzSzNzGvNS6rMyynMymjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCgwGFhYOIiYQBAgMEAwKHiokBBQYHCAkKCwwFAZOEBQ0IDAsODxARCZ6gAAEGEhMSFBUWFxgZCJ+TjBoMEpkRERscGBGRih0BBAgeFBQOER8gISEfIruIIwEkCCUVwhcgJicoKSrZg9srCRkRGdMsLS4vMNiK2wIKMRsbMiwzXtCocSydIBs3AuCIwIFDiBMucugAoWvSiB2VNPDg0ELHwA0MkCXr4aNSggg8NoDIQOFHgBtAkgURMiDAEAFEVBCJFKCIkSMGOyDRkETJEkOFmABoUsRJQkQdnkzQACWKlBtTplBR6qopxkFRJ0ytYuWKFCxZtBBq+hRA2AlbRrh08fLlCxi1a51g+dQhDFwuYsaQKWPmDBpKXgNETaNGjJgyhNfcVdTTiWI2XpK0cePmzRk4YA5T5otGixY0qFOXbgXAQCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -filenew-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBExOTERCRDw6PCwuLBwaHAwODAQCBOze1NTW1OTi5Nze3MTGxLS2tJyanPz+/Ozu7OTi3BQSFCwqLDw+PDQyNFRSVPTu7MzKxLyyrIR+fCQmJPz6/NTOxPz69Pzy7PTu5Pz29Pzu5PTq5PTm1My6pBQWFPTq3PTm3NS+rAwKDPTi1PTezOzWxMy2pPz27PTazOzSvMyynOzaxOzOtPTaxOzKrMyqjOzGpMymhPTizOTCpNzSzNTGvMymjMSihCH5BAEAAAAALAAAAAAWABYAAAboQIBwSCwaiYGAYEAgFAqGg/Q4DCASCsTiymgcHAcqQLB4mM+QiIQBppLPcMjkwQ4bB2X4maKgt4sVCHpnFhQTElNFE3mDDxcYGRp2RBuMgxwIHX9EBZZwHh8gCBmTQ52NISEiIyQlpUImng8hHyInKAgprwAqgnC0IKwrLLpGB4wctLYkwy0uuwd9Z8AnJywsLcVFx2YcL7UnJCwwLTEy0GXJoSgrCCwzNDTnxgjeH9UrKzXwNDY36LRGhEOwLx4NHDmgJbh3QoeOgv127EhojEeHDj16pEhRQoZHHzl+QJNCsqTJSXaCAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -fileopen-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAQCBCQWDCwaDDwmFPSubPzGhPzCfPy2dOSmZPzKlPzSnPzOlPzKjBQODPzChPzWnPy2bPSmXPyuZOyeXIRSLEQuFEwyHEQqFDQiFCweDKRuPFRSTPT29PTy9Ozq7OTi3Nze3NTW1MzOzMTGxMTCxLy6tLSytKyurDQyNMzKxOTm5OTi5Nza1NTS1MTCvLS2tLSyrKSmpJyenJSWlIyKjHx+fFxeXBwaHKxuPMzKzLy6vIyOjHx6fDw6NPy6dGxubLy+vISChCQmJNza3KyqrBQSFLR2RKSinJyanGxqZAwGBJSSlCwqLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeDAYqKiIeLj4wBjQCMhY+NkoiLk5qbhQIDoJyGBAUGBwgEo4MECQoLDA2pDrS1tKQPEAwHERITE77AvxKqhAQNDA8UFRYXFs8YBAQZGqGPxw0RGxwdHR4eHyAhIiMkJSYnKCgpBAYPEhcqHyssLS4kLzAxMjM0NTY3cBA4UCAHBw8gVnhgEcKFjhc7UPDj0cMHAAI/KFgY4YLFio/jRpTYsW8GDyCSCEQw2DChOHIqgsCQSEPIEEEEJFhAoUNECCJEyOk4d6KIyRtGcB7hIJKjixEjHu4oimSGEIs4d8IIUoKECnNB0ElMwkNJJgBLlJBAcQKGiR07KGAURVGViY0mhIwwSTKjr99+THjUoIg0r48hTRIrRtxkiOMhDgrZCQQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -fileprint-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBFxaXDQyNFxSTPTizOzi1FxORDw2NExKLPTi1Pzy9Pz6/FRWVPz29Pz2/PTy7PTu9OzezPzu5OzavAQCBPzy7PTm3OzazOzKrPTu5FxSRERCRGReXPTq5Pzu7ExGTMS+xKSmpOTKpPTq3JSCDNzSfHRydLyadOzCjOzOtOzSvLyyTMTCxKSipGRiZFROLPz+/KyurJyenJyWnGxmbLSabOzClOzm7LSutJSWlJSSlJyanGxqbNze3OTm5IyGjNTO1Nza3NzW3OTe5IyKjHx6fMzGzMTGxMzOzNTW1IR+hISGhKymrLy6vLSytERGRGxubKyqrLy2vLS2tDQ2NEQ+RASKBAT+BFxeXHRudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAgOEiYqEAgQFBgcGi5MICQoLmAQDh5OEDA2YCw4ODxARApKUCaGYEAsSCRMUnQysCwoVEhYXGLOLCBCgDqK5GQUXGooCAhscBB0euBUZEAUJvQgIgx8gIR8iCSPiHuIFEREDJCXaANwhJhsnKCnWERcRKiopFCvsBywhQrRwQWGAPAz5EhpQ9wIABRgKYsiYMTEEDQocatiwkUIEP18fbkCAAcMBjhwzdOyQwYNCgBMfKJSgMItBjxs+btwgCSGGjhw/ZoRgQKGZCRMUPgABEgSIkCE3SZok8qNqkR85NtDUEcPIkaVAkCR5SrJBDCVKlmzQ6pCCiRlMTJo4YUH3K5AeMBYYWctW0BOaUH60cBJFypQmII6wyEpFQBVFMSm4UAI3hJUrOGh8oOJrklYKWIromJGDR99Ogz5j4ZGlM+pEnwmBCwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -filesave-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBGxqbAQCBLy+vERCRExKTHRydIyKjMTCxFxaXGRiZFRSVFRWVPz6/Nze3Nzm5Pz+/JyanDw+PExOTHR2dMTGxBQWFLSytHx+fISChOzy9Ly6vAQGBJSWlMzKzAwODJSSlHx6fIyOjOTi5DQ2NISGhGxubCwuLOzq7ERGRFxeXNTW1CwqLPT29Dw6PGRmZKSmpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb/QIBQGBAMj8ikUDAgFAzKKCBwQCQUCcICKh0SEAhGw5EIZAmBrgCxeDQgcDJWyz0GIggJfL+XGwQJRxNgC3yGDwwUFUZDFhdthnwMGAZNQwEZFwQakXANBBQbHIIdERIBnRAOiR4ERx8gsSEMBBmGCyEGG3YGBwcgIr8UCwQHECOgG4xCtRkEJAvBJRklJgkSFBQeJ68hJiEoESkFKiEZIbkGARsLlwEGExENGhorGSkpFAYm66NDLAECpGiBYsUIFA8wLHBBQMWLVkdUCFCwaYVFBOymkVCgYEMgOykEpICBccMBAhhELFigTEqAAgIIwCiQ4eRKDyS6EAlJIAI0EpaudF4iIKDAAn9CkRT5eMROEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -fill-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAASC/AQCBMT+xASCBMQCBASaBPyChASyBATCBPwCBARmBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAASCEMhJq704axB2DkLnVeAwiCNHDMWZcsbaul5ZyCaKBcZwFDcgDRNbHX7AmW4SMx2MSOFQQlitEAhosrVcDQQE7NMXzVGqA6xAgCUckabQpJoIYBFsxBspUKBiHQEHaoNvBQJTgBIBdnh5B4hLihONeJBTc0uMaphMS4uRGQYfny9EEQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -filter-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBAwKDMzKzMTGxNTS1MzOzAQGBLS2tLy+vKyqrLSytLy6vMTCxBQWFKyurCQmJBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAV7ICCOZGmeaHoGbKuOAjsQhVG764EgyT7YhaCBVQogFMhFImEABoUBknFxRDAazac2Kg00djystkA0sQ4BgzgYK6+Ch/bBseOmAmMD4gF5ifBCDwoRfiOABgyEhYYFCA6LUo19kH+Nj5QAaQh2kHibmJkFBJydpKCnfnYhACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -find-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQSFJSWlFxaXJyanKy2tLzCxDw+PHyChNTa3Nzq7Nz29NTy9Mzu9OT29Nzi5Oz6/Mzy9Kzi7Jze5Lze5Nzy9JyenIyKjHR2dMTu9Kzm7JzW3ITW3ISChGxubERGROz+/Lzq9IzW5HzK1LTm7FRSVHTS3GS+zLTS1DQ2NMzOzMTq7Lzq7ITW5FS2vMTi5ExOTKTm7EzCzEy2vEyutJTa5FTK1ESirGy+zMzi5ESerESmtITa5OTy9KTe5KyqrAz+/Azi3ASutERCRExKTFRWVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCggGFhYOIAAIDiYUEBQYFAoeJAweKhAgJCgsLDA0OCAGJg4wBCA8QDhENEhMUFaKDFhcYgwEJCxAQDBkaGxwSFaMAFh0eAx8AAQIKECAODCEaIiMjJJMAtQMlygEGEBkVva4mJycTKKMYJd0pyyoOKyssGhMtIycuGi/EMB/vlhmoQEFDjHsmZMygUUMdqWUCGgCbYMKEjRk3cEjI9jBADg3Wzs3QsYOHA2IdO1SQkI/GjRMtFhBA2RFBDwk+OASrMPMHkIe3AhBA8QLFzAAHgvyg2dEQMSEHPCwltQgooSFSmVpSxKjjh6wPtwINgHVqsVpWESEFeywZ17RkED2s40YEgFirlIq4SwvUQCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -finish-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBBxCXDR+nIS21Aw+XJTC1Nzu/KzO3Pz+/Nzq9Pz6/MTe7KTW5FzC1Nzu9CRKZMzi7IzK3Lzi7LTe7HzG3Gy+3AyuzAyexFzC3DRSbHy+1Dy61CSqzAySvAyStLze7IzO5AyGrEze7BRmjCTC1ETS3ETa5BTC3Bx2nAyWvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAakQIBwSCwaj8hkMqBsBgTN5IAAJQqqykCBasUmDQcEV3gtBs7oATihGJeJgcOCQWc0HA8Ig/seRiQTFAsVFhcYGRp6VH1CGwscHQ8dGB4fIBkPIWKMAAMLIiAjIJcgH5gkGSWcARIiJicoJikpHikoHqqrKiW8JSogKymoqgCrV8cCARgkuFWcRwYeqVjPRgEExEPVRQbZ2l5IBuBRQ0zk5+hRBkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder_new-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBNzaTPT2FISCBCQaDPz+BExKBDwmFPSubPzChPzCfPy2dPz6BMzOTAQCBOSmZPzKlPzSnPzOlPzKjBQODPz+rPz+3PzWnPyuZPSmXNyaXPTyhISCLIRSLEQuFEwyHPy2bKRuPFRSTPT29PTy9Ozq7Pz+xJyanDQyNPzGhMzKzOTi3Nza3OTiVBQWFDwqFKxuPOTi5JSSjISChHR2dGRmZFxeXPS2dNTSzNTS1OTm5KSipLS2tLSytKyqpIyKhGRiZNze3NTW1MTGxMTCvLy6tIyKjCQmJMTCxMzOzMzKxJyenHx6fLR2RLy6vJSSlHx+fDw6NLy+vIyOjAwGBGxqZKyurCwuLBQSFJSWlCwqLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeIiYqLjI2MAY6HAgOHBJYEhJCDBQaDmgcICQoLB4MGDA0OAQUBDg2cAAcPEBESE6QUuQasFRYVq5SxCRcSCggYGRjIGgYbFs8bHIMHExIJGR0eHx7cB83PFhsDDuTUEyAhIiMjJCQluwEmvsAnKAcp1x4qKyUrLLupWrByxcnFiwQIYIggEaNEiRgBZMyYQaNADRs2REA6cCODBxw5+OnQgWMHjx4+BND4MQOIg1gI0gUREkTHiplDhhApEoCGkRlHBL3I8MEHEhz+WAhJogTJySVMfthwIehAExE5jubAkYQpESc8fOx4AiXKNA8+ekhBgqSpzh5hPHcsmVLjpSAqVZBY6VGkiJMiPQKLnTvjCiEsWU4o3nGC8YksMmT8YCmC6iAXKLRc2cz5yGYtR0JjKWQgEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -forward-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBBxCXDR+nIS21Aw+XJTC1Nzu/KzO3Pz+/Nzq9Pz6/MTe7KTW5FzC1Nzu9CRKZMzi7IzK3Lzi7LTe7HzG3Gy+3AyuzAyexFzC3DRSbHy+1Dy61CSqzAySvAyStLze7IzO5AyGrETa5ByixBRmjCTC1ETS3BTC3Bx2nAyWvEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaYQIBwSCwaj8hkMqBsBgTN5IAAjRoDBaq1aDggtMuAWDzoJhTgY+CwYLgZDccDwkgXI5IJZVGxXDAZGnR2QxsLHB0PHRgeHyAZDyFfVUQDCyIgIyCPIB+QJCUmlEMBEiInKCQnKSkeKSQeomoqJrUmKiArKSwZsmoCwMEBGCyxo1EGHr3HUQEEvltCBtDRAAbMW0zV29xDBkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -frac-22:actions actions22 22:photo:22 22:R0lGODlhFwAWAIIAAPwCBAQCBAwODAwKDAQGBIQChAAAAAAAACH5BAEAAAAALAAAAAAXABYAAANICLrc/iwEJSEUQA45LcOKMHWeU5XWiUYZsZClOIjj+naqrS9F7/9A326YCYBypREOpMPBVifjkBRw7SpIG+eJIg2IWC5UikoAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -frameprint-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBFxaXDQyNFxSTPTizOzi1FxORDw2NExKLPTi1Pzy9Pz6/FRWVPz29Pz2/PTu9PTu5OzezPzu5OzavAQCBPzy7PTm3OzazOzOtPTu7ERCRGReXPzu7PTq5OzKrExGTMS+xKSmpOTKpPTq3JSCDNzSfHRydLyadOzCjOzSvLyyTMTCxKSipGxmbOzClFROLPz+/LSutJSWlJyWnOzm7JSSlJyenOTe5OTi5MzKzASKBAT+BNzW3OTm5KyurMzGzMTGxMzOzNTW1KyqrLy2vERGRGxubIyGjLSytGRiZISChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAgOEiYqEAgQFBgcGi5MICQoLmAQDh5OEDA2YCw4LDxARApKUCaGYDwsSCRMUnQysCxUKEhYXGLOLCBCgow4VEhkFF6mMAhobBRAcChUVGR0FCR4UCAiDHyAhHyIJCRAjHOUJEREDJCXcAN4hJhonKBjXESn5Kdkq7wcrQoRg0YLCgBMuRFxIwTCFgXYvAFCA0SCGjBkYQxQMUE8EBhEUVPj6QOMBDBgLLM6oYYMFhYkvYcSkwOAGDho3TyqIUaPGyZ9AKXzIoWMHDx44bvQ4+WAi0KA1fPwAEiTIjyBCkDp9KlMiBRMzhhAhsqLsD64/fQEo8tLIERZIH8Ru5arow8skSmTMDdpJQ0y0XTsJ2gtU8GCZMBMbCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -funct-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI+hI+py+0PIwhUohpMXfl6103h1nTUNproEU6am62v1pLsPX/siO9Jiou9TD2XyHfMGUs65aVmiUqn1CrCUAAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -gear-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFCQiJERGRBwaHFxeXHx+fDw+PGRmZExOTGxubKSipDQyNHx6fIyKjJSSlJyanISGhISChLS2tIyOjHR2dAwKDAQGBJyenAQCBCwqLLy+vKyqrAwODMTGxKyurFRWVLSytLy6vMTCxMzOzGRiZNTW1CwuLMzKzFxaXJSWlOTm5Nze3Ozu7OTi5Ozq7GxqbDw6PHRydAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb/QIBwSBwGBMVkMjAgFAwHBFJpPB4SiQJCsWAQqEJB4prdNhQNx7QYIFwLD0ikQZdMHgelOPGYULQVDg4QEAVfRAEBBwUTEE0WFwcYhAuNF0QDBQULDwwZGUIaEAuVGxgBRAIFEhwHHUQMCxwTHAVrAAwFFRwKFkQZsxseDqBDGXMSHwfFQiAhIiMeJApEBwcOcahDJcLSJCYcGkQKcRAnQhkF0SgmEykHXkObox8q1iEjKN8rENqYD7MmeBCmzwSLFS1I3AqzYIPDESS+sWCxgQMLEgOSJKjozeAKFyskCDigQFwSBhJMjDDhAlyLFyVA+dIzAUUKEi0eaNhAIg8YGiEMenkwASNDDBkLqRQAEEAkup9KDkEFgC4IACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -gohome-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAQCBCQiJNze3ERCROTi5MzGzLy6vDw6PKyqrKyurBQSFGRiZGxqbGRmZISChEQ+RExKTExOTHRydDQyNOTe5FROVLSurCwqLMTCxPT29Pz6/LSutFxeXLyytLSytPz+/JSWlKympPTq7KSipNzW3BwaHHx6fKx2VJRWNHQmBFweDOzq7Ly+vNTW1JxWNLSajPTe1Ny6pKxWJNTS1IyOjJRmbPTi3OzKrNSSXMSGVHQiBHx+fJSSlPzy9IxOVOzWxOSyjNSCPLxeDJyWnIRGTOTGtMxmDLRWBHwqBIxGTLRSDDQuNNSunKxKBGwyNMSafMxqHMReDKRGDPTu9LxuPLxaDJQ+DIR+hGQqNIQyBGQiBNTO1EQKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAYSIiYQCAwQCiokEhwACBQYHBAiQhAiHlQYJCgkEC5uCkp8MDQ4NDwylmwgQlgQRERIEBBOkmxQVBgQWFwUFFxEEDLyJGAUZtQoFGhsFHLYdyoOVHsEf0SAbIAUex8mwlAUhtSIFG+3uIyTWvAIGJMEkJe76GyXbEeWUBJg4USKaBhQpVKzYoIFFiwYUBBJa8MAFCw0vYMSQMWOhBhoTKCQSUKMEiw02buDIoWOHBg0GeIhEFKAHDR8afgAJImSIioYliMws1MPkhiJGchxBkmTDCBo1hg4KQMTiBiUyhBxZ8pNFiR5MEtU0WqSJVidJNDyNKraHC5xPNKBEkTLlJ5WvUgWNvfikyhArV34+7ZEXQAAsB2iUyHLlihYtW0pwOYAFgyJDmDNr7jIIWiAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -goto-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBBQSDAwODAQCBCwiHDQuJExCNFRCNAwGBDwuJEw+NFxKPBQODEQ6LFxOPEw6NCwmHDQmJBwaFCQaFEQ2LCQeFDwyJBwWFDwyLDQqJAwKBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWSICCOJBkEQqmWA1EYR4Gsq5Aoy2EYKU0yDcPCkSP4SgShw2FoDI6jQeNxYD6MUBFCEXxAelkRgxCRhEWQiW/wXE2CataAUmiXKo+Fwg6YWxQWfCQEAxckUgoYDRSCR4gKB4ZnFVwUCgUMZ30KCRQUhJpzBRQQjUcSnmyaM32mPgQNmZpRBwmSsxAZBBqzUa4iBiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -help-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBCQuNBwiJAwiLAwaJAwSHAwSFIy+3ERynCw2PCQuPAwmPCxOZCxWdJzG3FSazBwmNAQKDAQGBDRmhBQyTDxujDR2rIy21AwWJDyGxCxmjAwmNDRihAQOFDxmhCxunBQWFAwaLCRahDR6rESGvDQ2PCRWdDRunDSGvCRSdAwWHCwuLDSOzHSmxDyKxBxCZBwqNHSu1DyOzAQSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAahQIBwCAgIBAPCoGAgOoeBAyKhWCwYDUf0CX1AIhLiJEGpBLiAAaRxdgYsl7Ybk8igBZoN5xmAdDxoanp8HyANISF8EBsiXBMjJBolBEQmGHFoRScbKHIKDykqK5lFAZRCnyknTaROLA8tq61OChgtKqyzQgEYEJi6UC4vI3LAASkbMBPARAEBdszR0sACEaPSMTIQM8W6KzNl3bo0NOJDdEEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -int-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIIAAPwCBIQChAQCBBwaHAQGBAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAANJCLrc/iDAuYKlU0r8NHfXB24iEyrCIAjAynakQLQuDS+vrTcnI1M9HyaIykFOKwUhZ6zEWC5oU9GrRY+kkqdUiXCdWW74SzYkAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -leftjust-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIihI+py+1vgpy0Tohzs1T7z3CiBJbQWJnqg4rre7jwTBtGAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -locationbar_erase-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAWABYAAAJChI+py+0PX5i0VmbzVboHPgmCJVoJJY5haR5VGsCa+6ZqZ2Sy95E2n0OVdi2A8EacIIS+YpC3WUIpi6kygs1qsYYCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -lock-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBHRudFxaXExGTERCRAwGDGxubPz+/Pz2/Ozm7Nza3NTS1KympFRSVHR2dNTO1JSSlKyqrKSipDQyNMTGxDw+PLSutKymrMTCxAQCBHRqLBQODJyanDQuFFxSJFRSJFRGJERCHExCHISChHxyLEQ6HGRaJExKHLSmbLy2fOzitPz23KSiZHxuNHxyNJSOTNTOnMTCjLSudKSaXJSKRJyOTOTetNzWpHxuPOTi5MzKzLS2tFxWXOzq7Ly6vOTe5Ix+RLSqdNzSpLyydKyqbKyiZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBAgMEBQKEjI0GBwgJCgsMDY2XjwkOAgQBDxCLl4QNCaGCBBGWooINCAqqrBKgqwATFKaDFRYVtBMXsIMNGBm0GRADjQIJxKIaGxwdHh8gISIhGyMZzIwkGholJiYfJiAfJyEZISDbg90oKCkqKwcHKyooLC0f7IIuLzD2YMSQgW8GDRri+AFoUMOGvRsxUhSsQQPHvmQSchyQtEAHhh0WJHDQcJERjwsKDvRI0BGDjwgicXhQyCOjSgUKPO6AObIkIQESfmxk6REDT4s0bfaYpDNkT4VAha5s+TLmzEYtatwIOHAiDZIKNQAJYk9IjCFEisyoocFEB4UACtBpm0t3LiF4gQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -lsub-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBIQChAAAACH5BAEAAAAALAAAAAAWABYAAAI9hI+pe+EPHTNhgjox04srn4CI2FgkZaaZurGd+5nRfAiCYVuJzfN6jbvdfrshEZE7ApNGXa+nZDaVVIOhAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -lsup-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBIQChAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAI5hI+pF2G9YpszKgcgtgtyuX2I44UcRYkM5qmWAMcyzAn1/eKRnfe7vuD9fEGgQlgkHo2JmRPpStgLACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mail_forward-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBJR2dLyijPTixPz69Pzq3Pzy3Pzu5PTu7Ozi1LyelOzavPz+/DwqLLyafPTmvPz67Pz29Pzy7LSWlPzmzPz6/LyajPTitOTSzMyurPz25PTatPTi3KyOjPzuxAwqVDQiJHxiZPTetKySlPzqvPz27BQ6bAwmTPTexLyinNzGxDRunPzy5KySjCQ+ZNzq9KTO7JzC3Nzq/Ozu/LzW7FSm1BR6vGSWvFyq1AyGxAxytAx6vBSKxAxSjMyujLSunES+5BSi1ByGvAQCBNzCrOTaxNTOvMS6rKyelCx6rBx6tBQKDOTWvPzu1PTq1OzezAQOHAxGdBROhAQGFPzy1NzOvIRqXLyynOzarPz21Jx2XPTWrLSShAw2XKSCbPzuzAwePAQCDPzyzPzqzPTmxOzWtAwGBKyObOTSrNzGrKyGbOzatEQyNKyCZOzWrOTGpNS2lCweHCQaHCQWFBwSFBQODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBhBwgQKFSpY0HgBQwYNGzh0mDhRAAUPHziACEGBpYgRJDiUGEkSwoCQJk6opNASRQoOFETQJDkggwoOJlYApcCihQuVL2DUhBDjhIqjJmRwwDCDhswaNm5MjYHjKggOOU7o0CGTA9gdYknG2KCCBw8VJVL0uBgihAUfP+CSNGCjsI/DiBPbAMJBsEQbQYQM+UG5smUiRYw0jlvYxhEkSYyIHm1EyRLTTH40EZvAyZPOR4pAmU07ipIkUKQ0mQIhAZUqVq5gKXzkSBYtyLVEyd1ki8QFXLp4+WJFQowbYLJnD5NbzJiJCjaQnhnvpYwZM0/OPFlvQ/f3iQvQpBlvQc0aCWy4VKnCpY0Y5yQxgEYXZFjghgwZUOHGCW90YQEccUwloBwGyjAHHXUoSAMZb0xhx1QOoMHDHSfIwSEOdTjhAQ1d4MFbTQ6Q4MYacrzxhhx04JCHHhvQsMeLJPHRBxpr+LHCGnusgccfgKixQR1ATtTBlDDAEIggggxCCCGFbLGFHVFKZEdAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mail_generic-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBDQyNCwqLCQiJBwaHBQSFAwKDAQCBDw6PPz+/Pz69Pz27PTy7PTy5PTu5PTu3PTu1PTq1PTqzOzmzPzuvOzitPTmvOzivAQGBDw+POzevPz67Pz25Pz23Pzy1PzyzPzqvOTavERCRKSilPz21OTevIR+ZExKTOTi3JyanLS2tPz6/Pz65KyihJSKbMS6lExOTNTW1JSWlJSKZMSylNTOrNTKpFRSVPz29MTCxPTmzKymjIyCdOTWxOzexOTWrBQWFFRWVOzu7MzKxJyalOzatLSulMzKtOzmxOTarFxaXKyqnPTmtIyGdIR+bOzetOzixBweHGRiZOzm3NzWzNzSrOTetGRmZOzizOTexOzm1JSKdGxqbHRydJySdHR2dOzapHx6fKyijOTixCwuLHx+fFxeXERGRDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeIiYqLAQECjwORAwSUBZYFBpkHmwgJCgsMDA0OD6UQERITFBMVFhcVGBkangq1ChsLGxwcHQ0dHR4fICEGIiMSCbS3uLq8wCQUJSYGJygpKhQJKyvLLM4Nwi0uLwUwDQsxMtmeuQveHR8UMzQ1NgU3Dgo41jk6ns0cKOzgYaOHjx9AgjTAUUvIECLZNmxoUISHkSM9KiBJQkCJA4kKEoBQoWJJAiYtmjh5AmVCsCJRpHzckKCCySlUUvBYUqUHDysSPnxIEuXKA5pPRiRwxwFLFhRaIEDYUoEChCcDuECoOWKFuwW7nHkg4WELkw8/BHRRwESpt10dU8SSHevlRxIBX6C0WBE27q8GZMkKbTADjIAwYlb4GLMYShYoPTRo6FGiSJEKPyzMIFMmzJcvXbhwkSLFjJkbQW6cOHNGhAgEAdAsmk27tm0ABgIBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mail_get-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQ6bCQ+ZAwePKTC5Ozu/NTi9GSWvAwSJGSu3JS+5CR+rAQOHPTy/AyKzES23AwOHCw+bOTq/BR6xES+5AwmTBw6ZMTW9Ax6tByi1BRGdAw2XAQCBDQuNDRupKzS9FSm1BR2vBym3EzC7CSGxBROhNTW1Pz+/OTm5NTO1AQGFNzW3Ozq7Ozm7IyKjJyWnMzOzNzq9Nze3OTa5Ly6vCQiJGReZISChKyqrAwqVBRWlOTi5MS6xJSWlNza3OTe5Ly2vGxmbKymrIyGjMzGzISGhKSepCQmJDw6PHR2dJSOlPTy9MTGxLy+vLS2tMzKzLSutMTCxLSytKSipJyenKyurJyanCwqLCwmLCwuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBhgIBA4SLjAABBAUGBwiNlY4FCQoLDJaNAQ0ODwsQnYwREhMUE5ylFYYRFhcYGRgaGxsDHJUdFR4SHyAhEyIjJCUcuo0cJr0nExihxgwoyYscKSnMHicOIw4lKissLdWDHC4vMCu9McYqMjMyNOUANTY3OPEoOTolDCszdrSgwaMcBxs9TMxYOCMHBx8zfPj48QNINQ5BbMBIIUShDIUoTAhR94PHPEEHbQwZckOGjBQviMxYUWQIDCMmdXE4gqRnkiFETAxR8iKFjJU2evZEdmLJkgJIbqS4wXJIUapImj5FtuSEVyRVV1IVi4RIChhEkLVAgcJHEqVwVJUmYdKkiRNkALMRecKECRG/ff8CEQJFCA5kMKJEoUHDCQ/HkB9LmWKECpUeyKoIMSLEyosen0OD7iH2xg1dV7BkqXGlBpbWNTq4Zn2khu0aAAwEAgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -mail_replyall-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBLyejPTixPz29PTu3Pzu5Pzy7Ozi1LyelPTavPz+/DwqLPz67PTetPz69ERCRLSWlPTmzPz6/OzexLyajPzqvDw+PDQ2NMyurDQiJPz23PTatJyenAQCBPTevPz25LSajOzq7HxiZPTexPz65JyanBQ6bKSmpBwuTOTi5OzaxBRCdHySvGRiZHx6fBQSFERGRNzq9IyOjHx+fGxqbPzu3BwaHFSq3Aw6XAxKfPzy3Gy63ByWzJzO7Mzi9OzavBRytAx6vCSazGRKTPzy1AQKHBRGdBRyrDy63ES+3Cym1CR6rBwWVAQSLAx+xCyCtBRmnPzuzAQWLAwePPzyzKSCbAQOJByGvOTWvPTmxBQODFQ6PPTWrPzqzOzatAwGBKyObLSWfPTivKyCZEQyNKyGZOzWrOzWtOTSrOTGpNS2lJx2XDQmJCweHCQaHCQWFBwSFBQKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpkzGjhAoYMGjZMpMghQgcNFjh4mODhA4gQGkSIHAmBwAgNJEpo8KDSxAkUGjhMSEGz5gUVIiKs2PmBRQudHiwQpUnAxYsXImB0aBqjBcuoU0fKmPGChgUNH2qIqGHjg9u3bicWIFs2rYgbNnDkyGFhb8cccQ3ouJqWQo0dPFr0WMy4h48LFj4gsKriB5AeNngEaSGks+chPnwQOXFAh4oXRYxk9nAEyY7XO2wksWHDx5ATCDIoUXEBsYclTJo4cWJhuIjhSXacSPBEiZLMQY4wgRKluvXqUpyIsDElAxUqVaxcwcGCPQuWLOixaNHCZAsXBU+oqKDSxQqULF6ifNmyn/8VMOtxwcAK36kQRhdJQIFFEmKM4eCDYGyhhYAEkqFEGSuYYcUZLaDxXRpqSNRCEu6twYaFZXTQhgRd2NCCG9918AYELTjoXgNuKAFHB2RQEUYHVbQQRwlUpPHGGFwkyQUEDsgxx4lh9BhCBy2U8UQJcrSg5JIQ0FEHG3bc0QGYK+CRhx57PEGlkhM9sAEffKTQhx9+/AEIIIGoEUgLLRRFR0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mail_reply-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBMSihPTixPz69PTq5Pzy1Pzu5PTq1Pzy7Pzu7Ozi1LyelPTavPz+/DwqLLSajPTetPz27LSWlPzmzPz6/PTexPz67Pz29OTSzMyurPz25LyajBRCdPzuvDQmJOzexPTevOzq5BQ6bBwuTDQiJHxiZPz23Pz65LyinPzmvBxCbHySvAQCBOTi3OTq9CweHOzaxFSq3Aw6XGy63ByWzJzO7Mzi9OzavNzq9BRytAx6vBR6tPzy3AwOHDy63Ax+xCSazCym1CR6rBwWVOzizAQSLES+3CyCtBRyrBRmnGRKTPzu1MzGtAxKfAQWLAwePPTizMy6nByGvNzWxOzWrNzOtBQKDJR2ZNS2lPTmvBQODPTatKSCbOTaxLyqlAQKHFQ6PPzyzPzqzPTu1PTivOzWtKyObPzuzOTOtLSWfPzqvAwGBKyCZPTWrPTmxNzKrEQyNOzatOTGpJx2XCQaHCQWFBwSFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpYuIDBQgYNGzh08DCR4oQPIDqEmDBhJQYRIzqQIFkSAoESJCKkDGFiwgkUKTpMwECz5IASKjqsSMlSA4sWQjG4qGnzhYoQSmF0iCFjBgmWGWhQrVHCxg2sOHLo2MGjB0sLYmsWQHq1p4wdPtqemGDhB1UDQFSouKHi7oQgQmSwUMyYxcQDZQWz2EFiCJEiRoyQyLzZyGIIB47YKLwDSRAiSZSoXq1kCRHNLBK8YGKjCYskTp4ogeKkt+8oUaBImZKAAxMmVKrctqL7ihTnz7FkAT5FC4cKFbZwadIFdxcvX8KLss8iJcoUBUcq2KgAJoxyMTy4jCFTxoxEHl2GLyCDncmWM2hUIQMPY2CXhhoTfTEcA2tgVwEba7Thxhs88FdBD/ZB8MUUHMJBRhw2sAGCHBKU4UaFc1RAhxnhcdhhHUzYAUIcFdxRAh4R5KGHinu4OIVEDqTBRx81xhGHHzD8wQYQetDRI4cTAcIHGWT0EQgZa1ApCBqDcBAID1Q94IEHLtBAAyGEFGKIIWqYYQYPYNZkQEAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mail_send-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIcAAIR6fIRydHxubHRqbHRmZGxeXGxaXGRWVFxSVFxOTFRGRExCREw+PEQ6PDw2NDwuLPwCBLSijOzixPz69PTq3PTu5PTu3PTu7OTi1KyelOzavPz+/DQqLPz67LSafOzetPz27Pz29KyajPTmzPz6/NzSzLyurCwiJPz25Ozi3JyOjPzuxBRGbAwSHOzexPz23KSSlPzqvBROdISavBxSdAwaLHRiZLSinNTGxMy+vBxGZNzu9BSGrAwWJMSyrKSSjFy61ETO3BRWfPz65PTqzHTK3ByqzBSWxEzW5AQWJOTWxBRCXOTu9BSOvDzO3ByavBRKbOzaxOzizKSWlCQ2TAQCBJza7BRWdNzSxJSCbMzq9BSOtCSKrAwiPOTavPzy3LymlCySrAwmPFRKTPzy1NTGrPzu1JR+bOzatPzyzCy61ByGpOzWtJyCbPTmvPzuzIS+3FymxCSuzBR6nJyCZOTWvKSObMSujOzivAwKDOTSrNzKrJyGbDwyNOzWrMy2lIx2XBwWFBQSFBQODAwGBAQGBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpYqMDxAoYMGjZwmEixg4cPGzqA6BBiAggRIzaQGEkSwgAMJCKgnNBhQogSJlKGOFHTpgYUG0TsnJBCxQoSE1i0KErAxYsOJJRuuAAjhkwZM2jUqGnDBQoUHTbciIEjx4YNOmbs4CGjB8kCZlGAALHBx4+YcTcACcJDyFSJBo6iGNIhhQkiG8BOKGLkCBK6SSQisHoWhZIbG5bMYALECI8mTZw8gTL1QJQXZ6VMiUylSpUlVpoYaXLFtm0EGmCjwJLlA2O9MrRsccKlC8kEXr7AdgEmwtkhX2SQ2BIkjBiSYzSQr/nyhUKZLIrJJOcexvlEBV7IvCBjRkmAMzHOaufhxDvJBWiQISAFxUUQQRovJNeEGmu4JxEDbKQhXxsfuFDGGW68IQMcccgxRxUkNRDhC3R8QMQIdZwXQ11JJGFbiB+QYccHaaTxhgt13OFBDGTgkUdRDrhAhx5k2JjGCB/swYcXMXwAYk190OGHHx/4wUaVepTxByAaoPEkSQ5wwMEJZAZipiCDDJIHIYV8OZEdAQEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -matrix-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBIQChCH5BAEAAAAALAAAAAAWABYAAAJHhI+pyw0Bw4sTVmmw1C/3/20ex2VUtJ2Uwx7oBb9eR45ziNfgy6tW2+pZhJicjXbTiZA7X2q4AjqIsajSuDsuty5n9SddGAoAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -message_get-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBFxatHx+/Hx69GRixFRWtHR29FxaxHx6/Gxq9ExKxGRm/FRW9Dw+xFxavFxazFRS1ExO9ERC/DQy5CQmzBwaxBQSpCwqLMS+xBwatExK/DQy9CQm/BQW3AQCjJyavAQCBMzGzAwOtDQ21DQy/Cwq/BQW9AwK5JSStOTi5AwKDKyurMTGxLS2xISGpNTS1IyKjJyanMTCxAQC1MzKzNza3MzOzCQiJGxqbHx6fKyqrLy61NTO1JSSlNTW1NzW3Nze3HRydKSipISChDw6PLy+vFxaXPTy9ISGhPz+/Ly6vLSytJSWlHx+fCQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBAgIDBISLjIWHiY2RggWHBgeSkYYICQqYjQUICwwNnoMFDg8QDBESExQVFpgXGBkQERoSGxwdHh8gkiAhGCIjJCUmJx4oKb+NKissIS0iHcgeLi8pzI0gMDEyLzIiM9c0NTU2zYQ3ODk6L/A7yvDnPBjqgiA5PTYvPvU+fvh4AeQFDXwgggTBwEIIOB8sakB0iO7gIH05hvToIeQFBo4eNwoJEaIZiAtEUgbhWGQjRxk9hhhJSeQXiCM4jxBxyXMjEiI5bR5JQnRnT5dDiNCgIcNmCiBAfAShSZVmECVKltgc+MIGCxlgw4pdskKHEJtMZRTJuqStW7dCImLEYGLTrJC4PeYy0asXxpAhTZpdGHzBSWHDiBPfWCzIQCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -misc-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFCQiJERGRBwaHFxeXHx+fDw+PGRmZExOTGxubKSipDQyNHx6fIyKjJSSlJyanISGhISChLS2tIyOjHR2dAwKDAQGBJyenAQCBCwqLLy+vKyqrAwODMTGxKyurFRWVLSytLy6vMTCxMzOzGRiZNTW1CwuLMzKzFxaXJSWlOTm5Nze3Ozu7OTi5Ozq7GxqbDw6PHRydAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb/QIBwSBwGBMVkMjAgFAwHBFJpPB4SiQJCsWAQqEJB4prdNhQNx7QYIFwLD0ikQZdMHgelOPGYULQVDg4QEAVfRAEBBwUTEE0WFwcYhAuNF0QDBQULDwwZGUIaEAuVGxgBRAIFEhwHHUQMCxwTHAVrAAwFFRwKFkQZsxseDqBDGXMSHwfFQiAhIiMeJApEBwcOcahDJcLSJCYcGkQKcRAnQhkF0SgmEykHXkObox8q1iEjKN8rENqYD7MmeBCmzwSLFS1I3AqzYIPDESS+sWCxgQMLEgOSJKjozeAKFyskCDigQFwSBhJMjDDhAlyLFyVA+dIzAUUKEi0eaNhAIg8YGiEMenkwASNDDBkLqRQAEEAkup9KDkEFACUIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -move-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI6hI8RyJ26nAQQzlbrdWrP7nHRNh5gwpxmaZxWylJdRtf2fcux2rr7n8LsQrxQzyhE9mhIplKjPE5wBQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -news_subscribe-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAASC/Dw6PAQCBHRydPT29GxqbCQiJPz+9PTy9JwCBKwqLPz6/GRiZERCRPz+/FRSVDQyNBQSFBwaHDQ2NKSipJyanHx+fMzOzNza3FTCFGRmZCwqLAwODLzqpCwuLExOTLzqrFTGFAQGBES+BETCBEzCDDSqBBQ+BLTqnBRCBFRWVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb0QIBwCAgIiMgkckAoHJVQgEFAOCCc0WThcEgoDgvGMztFJLiJ83Ws3C4ODIY1jUCIlQ0Bd+FwMLZmCXV3Qw8CCAICfW9wBQhddVgAEIcCCwuJDlxWBQx1AhFPjlyJlwISj1ZWBJQTAImIerGqVwgEiAwUR46ysAeJcKoEoYkTVLGPvrWVDBUWEwEXF1aziMGfAhhiAhAVFdKPyMux2YkAEc3fF3WcdQTAGYkQQxAF3uAIGggbCBwCHfEEeEBiIB0+BB8cgHAQogMIKPXurRMxgkQJExjZELT3jUGDEyhMpDhxIouUOB8qqAhZ0iS9CJMStTQQBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -next-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBOze9ORy7Pzy/PSi5LQCvNSG1JQ2nNx21LQCzMRGzNRy3KQCpLwKzAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq704axC671WAfR8VCOKUbudApCBHksVgHO+5agFiHwVBAuYZ+RQLBmLHatgMS8mMyREsDI7oRipEeLWsKVG8Fce26EspzeaR2vDQNE7PGCIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -openterm-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIcAAPwCBAQCBPTy9PTu9Ozq7OTi5Nze3OTe5Nza3NzW3NTS1MzOzMzKzMzGzMTCxMTGxOzm7AwGDBQOFBQSFCQeHCwmLCwuLDQyNDw6PERCRFROVEQ+RDQ2NLy+vKSipISChGxqbExKTOzu7OTm5Pz+/GRiZMS+xLy6vBQWFLy2vCwiHFQ+NMSmfNSyhIxmTDwuLJx+bLS2tCwmHMyyhMyqfPTqpPzyvLSWbLSWfPzitIx+ZDw2PAwKDCQiJGxWRPTmrPTerMyuhPzqtPz63PTWnPz6zNy+nIRiVDQuLKyWbOTanPz21NS2jNS6lDQqJHRaTPzmrPTSnPzyxOTClPz2xNSuhPTqxPzuvOzSpAQGDOTKnMy2jOzSrPTu1NzKnOzOnBwWHJRuXLSWdPTatPzqvNzClCwmJOzSnOTOnPTuxOzKlOzerOzarOzitJR6ZNTO1IxmXPTWrNSyjPzOjPTSpLSehHRqZOzirOTCjPS+fPzGhOy6bOzKhGROPMy2lPz+1PzmtKRyRHRiNNTCdPz+zNzCjEQ2NKySdDQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAj/AAEIHEiwoMGBARIqXMhQIUIBAwYQIFCggIEDCBIoULBgAYMGDgIIDEBAwMSKBRBk3NjxAciQIwdACBBBwgQKFSxcwJBBwwYMHBx0EAmA5EwPH0CEsCChoYgOQ0cSGCHhA4kSS5syJGDiBNEAFVGUKKEBAwWFFM6SNJHi64gDFEKE4FBBggoKK1i0cPECxokYXw0gsECYggQZM2jAqGHjBo4cOtqOxLhDAg8ePXz8ABJEyBAWRIoYOfJipEoMCZEkuaFkSAslS5jUGJKkSRAnRREo0JDwCZQoTKQAmUKlihQrVa5gKZ1lI+oAK7QM2cJlSZMuU4Z4+TJEx0iNOwKAggkjZkyOFmS8kClzpcUQLRRGbjRD4MgZNEzSqKG+ZgobI2248dUbDDDwABzcxSEHEFpgEcUcdMRRhx1fFejAAx0cgcYdSxiBRx566LEHH0d8QFRRNC3Uhx985CHEH0MAEkhCBxWkgiCDFEFIEYUYUmONMhyCRxVH/PgjBYioYJAdAQEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -paintbrush-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBMTC/AQCtAQCdPz+/MzKzOzu7KyqrCwuLAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARZEMhJ6wxiDMsp1lvHfRohWuRAmOeVlUTQSukqz3U8A/nd9rtCAWTbAQoGg0q3OyANCOYPA0UgfCdMJnHFimre72sZ7pBWiTLqRUirK5hV7A0P2O3GvD5PjwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -paren-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAWABYAAAJThI+pGou9oDuS1hlqnkxu/niVQB6kYHzAiJYoUK7paLrxpr6GMJjWeqlFGirEaQhcDHQJnEQX2/1kMBv08Yu1ttNkFRr1ikHjIiYYjDjSWLIbUAAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -pencil-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAASC/IQCBPwCBPyChMQCBPzCxAQCBPz+/MzKzISChKyqrDQyNEQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARYEMhJ6wxiEMtpIAWxddwXiqRlikSQeiAbuC+wirNR322gv7zcLobzDU+9XypoBBKTR1lz+RTWDgip8nUwZK1XLyIx5XoVicX2RUAo1DVKi7GOBxjxfNwQAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -percent-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIzhI+py+0P4wkU1XfDhBdo/zndF4qh1pkGKYFk2XpTqoJr9G5YfmOz3hixfBZa7IhMJg0FACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -player_eject-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAwKDJSWlFRSVBQSFKymrOzq7HRydERCRPz+/MzGzISGhJyenKSmpGxqbJyWnJSOlKSepLy2vIyOjGRiZPTu9IyGjLSutFxaXExOTHx2fGReZAQCBAQGBBwaHCQiJLSytKyurJSSlFxeXNze3LS2tIyKjFxWXHRudAwGDBQOFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa1QIBwSCwaj8ikcqkMCJjHwIBQgBIDhgMiUbVKFQsGItBdBhpgh4PxIJvRC8cA4oiMy8bvQhJhMAYTFBVOURAWEw0QFxcMERAYCBluVxobDxkVHJocmBwEGgmEQx0dHh0CpKmkH6odVlanBR8FtAIFtiCkSB0LISEiGCIGIxAPDySuRwIOBwrOzwoHJRHJRh0jJgMj2gMnERQUCNVFHQQoCBvo6CkICATjRB0qp7b1K6qv+foyQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -player_end-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNFxeXAQCBMTCxGReZBQSFOzm7AwKDKymrJSSlFRSVCwqLLy6vPTy9OTe5Ozq7CQiJLSytOTi5BwaHPz+/HRydMzKzKSepJSOlKSipJyanIyGjIyKjKyurISGhMzGzJyWnHR2dISChIyOjLSutDw+PERCRHx6fJSWlIR+hJyenGRmZHx2fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa6QIBwSCwaj8ikMBBQKgOCgRMZIBSkxYHWoDVWD9EigpBQLLBERsPxCA8NDUhjgTBGJJNGG02RVBQWdUV3FxgZe0IGfoAGdhoXGxwdiAYef4FGFBoeHB8dGSBRihUhIo1FBhkbIyMkJRYmAwYal4JEBh2RChIWJ1IIGxUZFqdECCgkHR6wWAYpFR2YWSobvL5vFgfDaEMDIivMRBEsD9HcQgMWvecDLB0tZ0btsfJa9vLXU/X6/P3+b0EAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -player_pause-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBAwODMTCxKSmpJSWlFRSVAQGBBwaHLSutOzq7Ly6vCQeJPz+/Hx2fBQWFGxubLSytJSOlBQOFAwKDJSSlJyWnIyOjHRydNze3GRiZAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWBICCOZGmeaKqubOumQSDEgRjPMSoMRGEcol3vh0IkFAtDDWBEKlGMRKPgEIii0yrqIS1ArADu9KuLNCSOSdCMVp8ohEZFC4DL6SaBpXGh6/l4JX8XZACDhXkYCn1LAoqMUBAZEhBLDJKUSyYBGmhPAJyemiU0NDaloy+qq6ytI8whACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -player_start-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExOTAwKDAQGBJSSlHx+fBQSFMTCxKymrFRSVOzu7GxqbLSytLy6vJyanPz+/GReZBwaHHRydKSepKSipGRiZJyWnAwODLSutKSmpISChPTu9ISGhFxaXJSWlIyGjJSOlERCRIyKjDw2PIyOjLy2vOzm7Dw6PLS2tCQmJOTe5GxmbDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa7QIBwSCwaj8ik0hgQLJGBgbMoqBIKU2LAcMgOEQmFYeEFbBmNMgDhYDwWBC0k4pCoJ46IgRIXBioRCRYXamwRGBQIfgaBFhiERhkaenxmCoEbBhyQRYaIGVsdghgem4UWegcEBB8UHhsgIaZGBBgRIpUIIxQhChginEQIIBEklWslFyYnBsFfFCi4WQgpFBwqFxNGKxcsxl4IAS0NZEYCF3vlwgEfUuZV8JEuI2pPAARN9kcE9fr+SwaCAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -player_stop-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAwKDBQSFBwaHCQmJJSSlISChJSOlJSWlGxqbGRiZNTS1PTy9Pz+/Ozm7OTi5FRSVIyKjOTe5MTCxIR+hExOTHR2dLy6vLSytLy2vHRydFxWXIyGjIyOjPz2/FRWVHx6fExKTMzOzJyanKSmpKyqrKSipAQGBLSutHx2fDw6PAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa1QIBwSCwaj8ikcslsAgKCAWEQjQ4KgSwyYDAcugZEQqFYYJECA6PhaLcfEEUkgJZAGJB8fkKpWOhHAxcOGBQZGBoaGQgbHIBGAhUOGR0SBxISBh4Xf0iCHxQSlRIIXhsgj0UCIaCXmJgHGyKpRJ+hmB5dHQqOaCENIx0epBIkBhdzngoPGCQlJifQJBvJRygRKRcKGxcXGypys1srEREc5SLnICLiR1koLFVUWfRO9vf4+UwyQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -prec_minus-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBKSipPz+/CH5BAEAAAAALAAAAAAWABYAAAJAhI+py62RgnRnGguZ3BlTYIHdl13jh3goFpIleggvTK8ctw76Pswav/MtAkCd8NHj9HLFY6S4JEGdqdumtjAUAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -prec_plus-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBKSipPz+/CH5BAEAAAAALAAAAAAWABYAAAJHhI+py22hgjwSonktxBZU7GnhkyXc6JmmeDpnG2lg1YCOInT3zrvfxwsMhsSBrkYUDo8MpTEZNH6M0SV058xWi1Tsj9ZjGAoAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -previous-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBOzC7PTq9NSG1MxW3LQCzNRi7MRGzLQCvPz2/NRq3ORy7HQCdJwClAAAACH5BAEAAAAALAAAAAAWABYAAARUEMhJq70Yh813rl1HheInBYIwrEJwktxJFEbRmuOBJIXivp5LQLcj+HCnBaPBMBhdMBBjw0w8ccEA0/EzdQHaHywmnIyDyDSIrG4LQ+64OSqvx+kRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -prod-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBIQChCH5BAEAAAAALAAAAAAWABYAAAI7hI+py+1/gpy0hlVRZlP19mmSE0YjeIoXuqpkarYYbJQeDdiJrrs77gvOZDVg7Eb8JXtFSpMJiUoB9AIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -queue-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIIAAPwCBAQCBKSipMTC/Pz+/AAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAANfCLrc/jDKEGQMQlDLKM5aZQXDQIHZ9nhleaLqEhAE1bofKCozXZO3l0bmK9qCQ2LRCDQlAb3lkoTZQaVS6jOKpWmt3O5X2fU6wWXfuBM2mmINCpbKkavho56VI9s7DAkAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -redo-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCReDJzGjMzivOTu3Pz+/JTWbHy+VHTCTMTivPT69BxGDESuJDyiHESiHEymJIzKZAQCBFS2LFzKNGzWPDRqHCxqDFSqLHy2XESCHAwaBAQOBBQqBDyWJHyqZDyKFGSiVESeJBQ6BAwSBGTGPFyWPFSSLEyOLESGJBQiDAwiBBQmDCRGFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaoQIBwSCwaj8hkMcBkKpcBwYAwEDif0YLhwEUkFItFMkAwMBoOR+PxgHwjRDggamhIJpQ8ZbKGKOQLcgEFdhUWEYgRF3sNfhELBHALAhgZFhobRBwREhQdEAIEHpIKHwsaSJwUDQgQIJINARxKESESDQ0dgCIjSpAkDAwPco+ZSJAlJicnKHIAIrNHidOIQxunT0kpCyrZSCss0d5Fj6jjRonn6uvs2QZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -reload-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBCRSFCRSHBw+DBxCFCQ6FBwyDBQWBBxGFCxyLGTChMzqzLzmvHzKjDyOTER+RERyNDSqXNzy3LzivFS+fCyCPBQmBCQiBBxKFBQqDOTy3LTitES2dDR+PCxuJOT25KTarCx+PESSTCxKHDSeVCyKRNT21ESWVDSGPBQyDAQCBBQSFDRuLDSyZDySTGzChCRiJKSmpExKTDS2ZGzGhLy+vGxqbISChDSKRMzKzGxubDQ2NIyOjCQiJCwqLBQWFCwuLKSipERCRERGRHR2dAwKDDw6PFRWVIyKjCQmJFRSVBwaHKyurAQGBExOTBweHFxeXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf9gACCg4IBAgMEBQYHhI2ECAkKCwwNDg8QBAOOhAQREhMUFQgWBxcHGBmbggkaGxwPB4yDB6SbBJIKHQaqtY0eHyAhsqrDgx4aCiKpqoQHAyMjJBMKJaSxzAAHIRsmJgonKA0LHSmDKiuOBywRLSQuLyEwwyoxMuiN6iUzNBXy5jU2bsgoJugABBz95uXQsUMGD3vpPPgTpKIGwx4+HMr4kW4YkCA2hAzxAQSIECI+imBTwVIFESNHerRUgc0cEiFHkjiiyYzeDiVLdvLcySSkkKGEWiZVweSGkIHMmvQosoQlkaZOjvhosvKJjIAxoOAsgpRZkQNLnvSoqspAIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -revert-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAAQCBPwCBPz+/BQSFPTy9CQiJNTW1ERCRLSytAQGBISChMzKzFRWVDQyNCwqLMTCxFxeXOTm1KSipPz69BweHHR2dJSWlMya/Mxm/GQCzOzWxGRmZPzOzMzOzMzOnExOTDw6PNze3Ozq7OTi5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAWABYAAAbrQIBwSAwYAwDjUCloOgUDQlJJFCKfzoLAMF0ih9jmASGQfq3IBECgYC8YCsah4Rgc7+Bw2fCY4pNrCg8QboIIEX5HXXoEjWZ3eAIMgxITcRRVmVdOE50TBRV6TkJsD3EWDBUOoRcXGBmwsAJqT44aoKJNtAoVDAwWFRUFGwKxxhkCQhMEyxEcGrfEuWoGBgsdDwseHhQQvt++Hx8HmUQU4OHiICAJkHcDDB8hBCIj1QYfDomQAOIiHwxCPBiYr507JeNGAOQz8IC+g0YKrAtxAMQDBBgPFDB4EACIAwIHDkQAAhNEKuUStDMQBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -rightjust-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIhhI+py+1vgpy0Toizjvbur3WiBJbhSJnqgorri7nwDBoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -rsub-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBIQChAAAACH5BAEAAAAALAAAAAAWABYAAAI+hI+pFu3f1gmSVUBrlnt19SUhMk5XaWnnqrYc+2rQfNWHIBi4feP+zssBdkJez5gAIodDYbH2+yGBymXCUAAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -rsup-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBIQChAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAI6hI+pyxBhXlOv1omggxon6VFdGG1laFmkyQLCC8fvJNB2U+M3k/P70gP+FEHiMFFEHhFJJk0GXUkNBQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -run-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBOzq5MzOzPTy9KyurNze3PTy7IyOjOTi5MTGxNza3MTCxMzKzHx+fOTm5NTSzNTS1NTW1FxaXAQGBLy+vJSWlGxqbGRmZIyKhDw6PAQGDJyenAwKDLy6vLSytBQSFLy6tKyqrHR2dLS2tJyanJSSlISGhKSmpCQiJISGjCwqLBwaHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbcQIBwSCwaj8RAAMkUBgSDZdMpBQQIharyGDAclsoDYhtIKKrDwMEgUBMWiwSj3HCg0w+DfgGJQAYSDRMUTAELBhJ8fw0KFXdJBwkLEhYXGAUNDBUZj0pXkxYaARsIDRUMHJ5pAgQHkxEYUh0JFR4fHAVZTgMFCAt+sUIgBB4hIggOI1pKCQO8CB0gAgYkJGNbRQEKEYwNCa7VIhOPaRAKCpoV1QUl5E5mDJrFJAW4JuRlCuMnKB+94yVQ2DGi7QSYABcQgACTDF+VFChULJsiZIUCiRS5sMjIsQidIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -showmenu-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBBwaHERCRIyKjBQi/ERO7HR+1Ly+1Pz+/Ozq7MTCxOzu7NTS1AAAAAAAACH5BAEAAAAALAAAAAAWABYAAARkEMhJq7046z2D/2AoDAQVFGiqqsaBmGH8jWWX3Hiu3+YdKglPMIDrDXc+Is92zAmFi5pECWIkjySj0EkUZplb3JP4nV65WCmAqhR3yeo2Emmc0zsyGc3U6Pv/gAAKHISFhoQGEQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -signature-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAISGhISChHx+fHx6fHR2dHRydGxubGxqbGRmZGRiZFxeXFxaXFRWVFRSVExOTPwCBAQCBMzKzMzOzMTCtMS2dJSCTCwqLPz+/PTu1MzCtERCRMSydPTqxPz+9Pz6/MS+rNzKlKSSVOTarPz69ISCtGxurJyaxPT29MS6pOzmvNzSnHRyrPz29OTi5LyqXOzavMy6fFxanHR2rOzq5JyKTOzizPTqzKyWVGxqpPTy7LymZGRipLSy1PTu5KSSZFRKLExKTGRaNPz27PTq3LSiXPTq1GRWNDQ2NMTC3FxSNLymXGxqrPzy7IRyPDQyNCQmJGRinJSCdHxuVBQSDPTy5PTm1IR2RJyOfKSSfBweHGRenFxepNzGrKyejNS+pNTCnNzCpLyedBwaFBQWFNzOrOTOtOTOrBQSFOzStOTKpAwKBMS+tMS6rMS2nMSylMSulLymhLymfAQGBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAA8ALAAAAAAWABYAAAf/gAAAAQIDBAUGBwgJCgsMDQ4OD5MPEAEREpmYmJqaE5IPFBUWAxEXp6ipqJ+TFRgVBaaqsxcZGhUVGxwdBrK0qB4fFSAhIiMYCLIkJSa0JygVKSIhKSoJvhcrqh4sLRUuKR4vITAL2DGpMiMzNBs1FzYiKjcMER6oOKglLDkVOinwRMCAAcKBrx33eMTwkKPHPx8/RGxwEaICkIMXcOBgMaJfCgw/fMCgWCGIhoMlSOQQkmMIkSJGUoysGOTBEVlIZMTg16NHhSJJZCqhOenmqSU5cDDB0JJIzJlNak5yYoqHDBY7hmgN8aPGhhslKU16EgHJDiY9oGz9EcJFkChSaKaIfUC2I5UhMarU+GElyJUrWHzIFZslAtqWVbRs4dIFi5cvYMKImTsmQs8qVVrUePGCDJcyZkCEGUzpTAQMmGts5ozGTJo0XEbPVTNhDRsUbdy82Q0HTpwwwNXMlQOhuPHjyIWLNRAIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -spellcheck-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAASC/AQCBFxaXBQWFAwKDPzCxPwaHPwiJNQGBOxKTPQ6PNQCBGwCBPQ+POwCBPwqLMwCBHwCBBwCBFQCBLQCBPwCBBQCBCQCBPQCBOQCBDQCBFwCBJQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWGICCOZGmeaAoErMi+4xuQgQAI8yoKw2rfOZ1LRIgJh0hhDncsyXKypNMIKAKbNGpwFjxukcza7jt8xmCAgkpVMKxRhQOCnTAVFAtGqtBwLEgFDxAREigBExQVFRAibYNdJhaIigmODBdvF4gYDwoZDBpvIhKIGYOFoi4bHBGQogESqKlvBiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -sqrt-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIIAAPwCBIQChAQCBBwaHAQGBAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAANPCLrc/jDCQKutkcqQJeCP5k3g6IjCIAjAynYt0brzUn7gW++i0i8CGcNiuyl0NlyysYKhXgQdUvmcNZtDTo/mmvo+ptMvjDOSzWey+mFIAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -start-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBCRGZAxCZGyavExmjHyatOTy9CxihISevPz+/KzO3BRylAw+XDRWbPz6/FzC3CSuzDyexJzO5Mzq9CxSdAQOFISmxNzu9HTS5BSmxAyexDSuzJTa7Mzu9Kzi7GS21CRmjAQOHHSWtLze7AyWvHzG3BRihCTO3BS+1AyixBSWvBSOtBSStAQWJDzW5BTC3BSqzBS21CTC1ETW3AQSHEze7BRqlBRmjAQCDBR+pBRefBRSdAQKFAAAACH5BAEAAAAALAAAAAAWABYAAAa0QIBwSCwaj8ikMqBcMpsCQTEwIDQBUWKgYHgqs8LAAZGwQqWAgGLBaDgEj0Fgjh5mxRBERDKhICAQFRYXRVEBGBAZGhscHR4VHyAhIiOFAiQZJRoSGyaNJxQnEyiVRFEoGykqKyYsJiYtLi0mKC+WFygrMDEyMzQ1wDQqKDaWADYoMzcqsjg5DSgoBISmaCOoMG4v29s2OsZCyDs8DldgQtc95WdFPg7rV0Y+XvHt9ff4SXRBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -stop-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAASC/CQKDBwKDCwODNyKjPzq7My+vIxiXAQCBOSOjPz6/OSelNySjNyGhMR+fLRaTGQ2LPz+/Nx+dNR2bNRybMxuZMxeXMxiZLQSFJQaHFwqJNyKhOSCfNyCfNR6dMxmXMxWVMRORLQODOR+fOSSjNR2dMQ2LJQWFMRWTLwWDNSCfMxeVLwaFKQODNR+fNx+fMxiXKQSDOSWlMRSTMxaVMQ6NMxORMQyJOTS1MxqXLwWFLRORMxKPMQaHMxKTLQWFCH5BAEAAAAALAAAAAAWABYAAAb2QIBwSCwajwGBcikIHIsDQmFKNRwQT2EgoVgsGOCG4wHBIgmRhWRCqVQsF0xGYyYGNgoGh9PpeCQfICEic3UAAWgLIxwRJBsbHSUREyYYJ3RDAQULexGejhueESgpl3WaCxsqJKKsChEUKywtmFoFDC4vCayikzCyMbWHt38NCTKiHhUfMyzBdQIFKsodob0VNDWzwppuKxMRrx6iNjcitNA4bh+iEzkwojc66JkOOxcf7G35PBE9KS1MEUGgIQOIFfk++KjRw9wJgUUIZvhRoyLDFCliQDQisUWLGCJOeNx4hKCGkyhPGnqCoKVLl1liypyZxUAQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -sum-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBIQChCH5BAEAAAAALAAAAAAWABYAAAIyhI+py+1/gpyUMrvm1bdhFTgfhIykYZ4pyZ2o5EZwDLSurc7ZFnqZDgLKKsQe7QihFwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text_block-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUWzvNzo33GfFl5jVlonlTrr1DbvFi9vjeeNUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text_bold-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIxhI+py+0Powm0VnknjVkH2AEhE45LZ55Wqn6e65TsMc5eYosbksswubJIhsSiccgvAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -text_center-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUbz3Sh7yIWfFHKjVl4nmFrr1Lpr7LwkjeeIUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBBwaHAwKDBQSFLy+vLS2tJSWlBQWFKyqrFRSVCwqLDQyNNTS1GxqbFxaXJyanIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAVcICCOZGmKQSoMaZsShBsQBdAapHvgaIDUqUPJlRjSbAoT0fRDKgODRbF0PLUYjZO2F2Bst9evNix+dsvDlGKK5jraudQb7qbX6a2HEJ+ycyF+LRE8ZTI+fX5oGCEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text_italic-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py+0P4wqUSlQvttrkDnyaOHIdeaGRupplAIauVM3xjeeOUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text_left-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+pyw0Bo5zB2UXz3Sp7yG2fFJajVjonmIor2TJvfL0wjecIXQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text_right-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUfz3SZ7yIXdF4kWqZkbCqoMO7kXLC+wVOe6YRQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text_under-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIvhI+py+0PowmUnhpeVVnb1DkbCI1I2JhX+Z0sOr2cTHpwK7a4rUr+hAnufsTirwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -toggle_log-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAAQCBAQ2NPwCBATW1KSWfBweHATS1Pz+/Ozm1GxiTATOzPz6/Pz69ATGxKSahOzaxPzy5HxuVLSmlOTazPz27AS+vPT29NzClPTexHxuXLSmjAyKhPTy9KyehNy+lPTy5Pz29HxyXNzWxAS2tOzexPzy7IR6ZASytPTy7ASurPTu3KSSdIx+bASqrJyOdIyCbASmpJySfPzu3OzizJyKbKyijASipJSGdOTWtPTq1PTq3NS+lJySdOzWtOzi1My6lMS+rOTOrMS2nNTGrNTCpNzKpJSGZKyafLSifIx+ZHx6ZFR6bFR+dAQyNAQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAWABYAAAf/gAABAoSFhoeHAAMAiI2IigSMjoQABYkGBAeSjwAICYkKmQublJ0HDJ+GAA0OB66bpq4HCQC1lA2ZrqMCAA8QBwvBERITFIwAFa2yFgAXGL+uDBkaxRu1FQQLshwdHhgfDK4gIRoiFNYAI8quHA4XJCUMCwwMJhLm6Ce5rigEzhAMQICwYKLcuVopWgUDoWLFhQcfKNCjwOLeQQAtCFDYiAKBC28QKITk8MIgOhgxIHyQIWOGi4cfIHAogYJGjWq1bNzAkSOHjgc0dmBAgQKCUR43S1jjVeFGDx8PcNAAKePDjxg1gOCThOxFEBxBgpJQMQGpkCETEIBYSqkpkSJGOYTyOCJkgg4OIDaybXvjh5ELLpAMUYEAgQ7COPbyTWJEiY3HkCOTaruESYVamDPbQtTESedJhOgEAgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -top-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAw2VHSWtBRihAQOHISmxNzu9BSmxHyatPz6/Lze7CTO3AyixAQSHHTS5BTC3DzW5ByyzPz+/OTy9AyexEze7GyavKzO3FzC3AyWvBSqzBR+pAQKFCRGZExmjCxihBRylCSuzBSWvBS21BSStBRSdAw+XAxCZDyexDSuzCTC1BSOtJzO5JTa7ETW3BRqlAQWJDRWbOT2/Mzq9HzG3BRmjJzS5Kzi7GS21BS+1CxSdCRmjAQOFAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaoQIBwSCwaj8jkMMBsOp3Ip7SpHAoGhELVKDAcENmtNaFYMBoEh1hAPjwgEUlYyZ5QHpIKxALWIgUXFBgZCBUaG3AcBB1HAh4fICEiFRUjJCUhBCYnjEQCAignoikqhissKAKiJwFJAS0uKhovMDFiADIzNDUsLza2Yh4KNDcsEbW3Ago4NSUrBMBbAjQ5KRo60Mk7PATdKH5bAT0xDg4xPa236uvsShRBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -undo-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCReDJzGjMzivOTu3PT69MTivHy+VJTWbIzKZEymJESmFESiHDyiHESqLAQCBFzKNGzWPFS2LNTmzCxqDDRqHPz+/KTGnBQqBAQOBAwaBESCHHy2XBxGDOzy7HTCTEyyJDSqFHzWTAwSBBQ6BIy+dESKJFySPFSSNAwiBCRGFBQmDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAalQIBwSCwaj8ikMsBkKotMwYAwEDiXgYLhwD0gCFZiQKxNKBYMRqPh+D6G16y5AYnYIxBJAyF4AwITTAUJdBESD4gPFBV6Fn6ABBcJDIYPGEQZGhQbHAIdfx4JHw2VSBodGwWfAR4LDSALfkgYAQurBiAhICKfSSMkvQElGyYnGyi9Rxkdj4nOskUYyU9FpxnURikdGtjRKivdRKfQ2Inh5+jpRwZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -up-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBHSWtBRmjAQOHISmxNzu9BSmxBRihHyatPz6/Lze7CTO3BSixHTS5BTC3DzW5ByyzPz+/OTy9AyexEze7ByixGyavKzO3FzC3AyWvBS+1BR+pAQKFCRGZExmjCxihBRylCSuzBSWvBS21BSOtBRSdAw+XAxCZDyexDSyzCTC1JzO5JTa7DSuzETW3BRqlAQWJDRWbOT2/Mzq9HzG3JzS5Kzi7BSStGS21CxSdCRmjAQOFAQSHAAAACH5BAEAAAAALAAAAAAWABYAAAaeQIBwSCwaj8ikcqkMCJjHwIBQgBIDhgMiUbUGFAtGw0GFfheHByQi4S6/E8pDUoFYLm5kAEPJaBAVGxIcER0JHlEfICEiIxUkGyUmIgknKIhXASkonCorgSwmKQGcKE9IAi0uLxUwMTJWMzQ1NiYwBLBQHws1N7avXgs4NjkcCblMATU6KhvGyG87PAnUKV1MAj0+2zIFp1bg4eJJdkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -view_choose-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBFRSVExKTDQyNPz69PTq5Pz+/OzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq70466Cl+AMxBVwnFIVRAmQHCIeBrC1L3tQgJ/SaEbeeC1PLBHE2ybFI9A1HzstHEIK6YCmhDTmBybQaHYJn7QC5zKeytIQe1+pKNE6P2yMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -view_detailed-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz+/Pz69PTq5AQCBOzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAQ+EMhJq7046817+MLQUQFRGMc4lQaSAkcMx3QltMmrDrSu/sCgEPgJhIiFk89DaL1qPRnlhsgBebWhdstVESIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -view_icon-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz69PTq5AQCBPz+/OzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARWEMhJq7046z2DF0PlBeAVEERhiKhqHgWyUgEsX0KczFOO7JeBYciTCImc5ITIXDKHyqhU9AnRqq9UEVDTvmLbGhin2/qAliOUot5OLc81IO5+2+8WewQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewmag--22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAbKQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/47vrq9P3s/avno2BBf/MCClSob4iBIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -viewmag-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbIQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/47vrq9P3s/cunr9S8gAIRFhTCLAgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewmag+-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAbQQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/4zT766vRI+fvHD4CPgwcJ9qg0UB85JA0dDjEQBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -view_multicolumn-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz+/Pz69PTq5AQCBOzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq7046813+MJQfUF4BURhHGO6noSBsEcNoDJtS4KcsJQe4ncZ1HYT47HDbDqfUAnJRJmKLIGCCjjJbmE5wBI3EyOFxKCPS1EiJW52dE6vZyIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -view_sidetree-22:actions actions22 22:photo:22 22:R0lGODlhFgAVAIUAAPwCBFRWVFxWXFxaXExKTNTO1NTS1Nze3Hx6fLSutMzGzLy6vMTCxDQyNMzOzPT29Pz6/Pz+/PTu9Ozq7OTi5Pz2/Ozm7MzKzGxmbIyKjAQCBPTy9FROVFRSVPTq5OzOpMS+xPzu5OTKpExOTJSOlOzu7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABUAAAb/QIBwSCwaAQFBcqlsLgcBAnFQqBqqhwIiUVB4F4wGMeB4QMyPSCFQkEwmlMlCPKRC7pCKmjpxTyxzUwVmEBF6FxiDbxZyUnUFdxERhQUZbX4TDBlEAgUVkQ8DogEDAqYBTwEaAw54eQNusRMPs319Gp0PFZ8PAhMRGpLCwxOrFw/IFRuwwMICHAIEkhK4lxK0A7/Bkh0RHtvFAwp9D27MGugRAh4f29TithIW2c2SBOjgqwxv/AIS9cOEvQPBiBEFetsidOhAQFqEcCDgWLBAwR9AARFCuMPFAMwCEAsQpuMQQkS+EQ1SNkBAwuKwe+kiUDuSzU0JPyUm5HSj4Qi+Bp9A8QEIAgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -view_text-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIkhI+py+0Po2ShBlOxzbP7n2yaJoLm+ZTcxqHuC6hXzML2HVEFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -view_tree-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBFRSVExKTDQyNPz+/Pz69Pzu5PTq5OzaxBQOFOzKpFRWVFxWXOzexPTexCH5BAEAAAAALAAAAAAWABYAAARPEMhJq704g6A779kHCORAgNskFMYhakE8FkjyBcoWv+JwJItXaELYCTFHlCSpZKKcoB5jYHpOGgUadLKbIRw3jhEzQDyCSuI4zW673yhDBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -window_fullscreen-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBNTW1NTS1MzOzMTGxLy+vLy6vLS2tKyurKyqrKSmpKSipJyenMzKzMTCxLSytFxaXPz+/Pz+9Pz+7IQCBMzOvMzOtPz+1MzOrPz+5Pz+3MzOpMzOnMzOxAAAACH5BAEAAAAALAAAAAAWABYAAAWxICCOZGmeKBqsbOu+rjAQRFEYxoEkibIwjUZMRnAUHjkEpPcLriLQqHQ6XRUk2Kw2O+lSKIUVoUKubLflikVcPnO75cvKkXZL4HG2pK31lilqc1lmfRNfgBQYGBlidl5fGhobGxqMAQNnXYaQkZOLjVgVmpsUkRoVnpZje2SkphtlGBUcbH+br5NptAF0rYe4G4plHSseaaW4irLDcxYOFtDRFhnU1B3X1zDa2indIwYhACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -window_nofullscreen-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBNTW1NTS1MzOzMTGxLy+vLy6vLS2tKyurKyqrKSmpKSipJyenMzKzMTCxLSytFxaXPz+/Pz+9Pz+7IQCBMzOvMzOtPz+5Pz+3MzOrPz+1Pz+zMzOpPz+xMzOxMzOnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbKQIBwSCwaj0hkYMlsOp9OwYBAKBQMhgMikVAsGI1GVEpwFB5ZBKT7DS8j8Lh8Pl8WJPiJfr/PTygUBUsEEhV4h4h+ExUUFoMVkIWJhxWLkBeDhZCGiXqbFRiYAYSanId7mxihSwOlphJ6gJ8ZGksOiqd/gKoYGRmipIh7gBSqvhkbtaOuw7sYn8mseJuxxcabGxwdmZ/EvL6f2o+Qz869yBUem9sBH4sYf7znG/Qb6h4gSx8fDh8W/wA1CBTYoSCIfFASQknCcIiBIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -wizard-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBNzaTPz6BAQCBPz+BExKBMzOTPz+rPz+3ISCBPTyhISCLISChPz+xOTiVPz+/MTCxKSipKyqrExOTDw+PDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAV+ICCOZAkEZqoKqoqKAzHAb1sIxhAQwWAQhRaJd0AcdgkhqaBAOBUL5WjAaD6TUqog0DAildqcg+cDtgaPACTCiM0AOhV6sG4DWOAHnf2uyfV1b1lsgVIwEgwTFHaGA2yKFYJgiJCSQo6JFJGGcJSalkKPn5wimZukAJWoIgYhACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= diff --git a/ext/tk/sample/tkextlib/ICONS/tkIcons.kde b/ext/tk/sample/tkextlib/ICONS/tkIcons.kde deleted file mode 100644 index 0d5b2c8695..0000000000 --- a/ext/tk/sample/tkextlib/ICONS/tkIcons.kde +++ /dev/null @@ -1,195 +0,0 @@ -actattach16:act act16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBPz+/AQCBAAAACH5BAEAAAAALAAAAAAQABAAAAI2hAOCxg2h0nJHyEshi9HpxU1GOCLdZoKpQ15nibUoprKp9lh2oucUxsBRXsJh4Hjs/QTMpr8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actbookmark16:act act16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy+vERGRFRWVDQ2NKSmpAQCBKyurMTGxISChJyanHR2dIyKjGxubHRydGRmZIyOjFxeXHx6fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVbICACwWieY1CibCCsrBkMb0zchSEcNYskCtqBBzshFkOGQFk0IRqOxqPBODRHCMhCQKteRc9FI/KQWGOIyFYgkDC+gPR4snCcfRGKOIKIgSMQE31+f4OEYCZ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actbookmarknew16:act act16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy6vERGRFRWVDQyNKSipAQCBMTGxKyurISChJSSlJyanHR2dIyKjPz+xISGhPz+BGxubMTCBHx+fPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVfICACwWieY1CibCCsrBkMb0zchTEcNYsIiYHiwIOdEAvigdFQGE0Ix4NBbSAgsWjk+jBIAlcUYrJASChnSXZSoUDelKfoKpFALJA61ueGI2IAZmhogGFmCGGAgXsifiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -actcheck16:act act16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBMT+xATCBASCBARCBAQCBEQCBAAAACH5BAEAAAAALAAAAAAQABAAAAM2CLrc/itAF8RkdVyVye4FpzUgJwijORCGUhDDOZbLG6Nd2xjwibIQ2y80sRGIl4IBuWk6Af4EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actcross16:act act16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/PwCBMQCBEQCBIQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMuCLrc/hCGFyYLQjQsquLDQ2ScEEJjZkYfyQKlJa2j7AQnMM7NfucLze1FLD78CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actexit16:act act16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBDQyNHR2dCH5BAEAAAAALAAAAAAQABAAAAI4hI+pFrHb3nEg1iWiDiINCwYDko0V9XUTda6I1TIsUMpGinyzbB6ZeGuoEr+GUDL4CXqSphPhLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -acthelp16:act act16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQ6XAQCBCyCvARSjAQ+ZGSm1ARCbEyWzESOxIy63ARalAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ/EEgQqhUz00GEJx2WFUY3BZw5HYh4cu6mSkEy06B72LHkiYFST0NRLIaa4I0oQyZhTKInSq2eAlaaMAuYEv0RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actitemadd16:act act16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBARCZPz+/Mzq9BTC3ITC1HSyzGSivAw+XBSStIS6zHy2zAQCDFyatAQOHFSStEyOtAQSJBSq1DR2nCxunCRmlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVbICCOQTmeaCAMRIC+AVu47xkTBl2Ld16XQNYBQTQBVIOkMHFQJBeMI4tAbSSu2IRDSnhAvFfI97sFRM6RwOMacbjLKckVvgvIJ5EdSU7J648VgXQ7Dmd/hyJ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actitemdelete16:act act16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBARCZPz+/Mzq9BTC3AQCDAQOHFSStAQSJAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQwEMhJq704681n+GAISoEwnGg6EAUQrEQsz4ThEkeu77kNIAagMEj0dY7IpHI58UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actlock16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJEQ+FExGHCQiDBwaDGxiLHxyNHRuPIR+TIyGZJSSfFxaRFxWJGRiLJyaXNzWpNTOnMzGnLy2hJSKTGReLKyqjPTu1NzarMS+jLSyfKyibJySXIyGVCQeDLSytPT29Ozu7OTi5NTS1KyurJSSjGxqVFxaXLS2tKSebOzuzLSufJSOXExGLGRiTExONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwGCgGhkhkQDBoEpLKQoBACAyOUID1qTVwoQGvMPxNFgVjAxp6QCQUicSCwVgkG44HJCKRRCYUCAxIFRYXhxgZGhYbHINEHR4fGCAhIiMkFSVKJicoKSoFKwMsLZtDLison6GjLA92qCueoAUvpC2xQhWqrLYDErmEMDEXlDIwMxAHukI0NS01EzY2NAmPAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actredo16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBxOHBxSHBRGHKzCtNzu3MTSzBQ2FLzSxIzCjCSKFCyeHDzCLAxGHAwuFDSCNBxKLES+NHSmfBQ6FBxWJAQaDAQWFAw+HDSyLJzOnISyjMTexAQOBAwmDAw+FMzizAQODDymNKzWrAQKDAwaDEy6TFTGTFSyXDyKTAQCBAwiFBQyHAwSFAwmHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ2QIBwSCwaj0hAICBICgcDQsEgaB4PiIRiW0AEiE3sdsFgcK2CBsCheEAcjgYjoigwJRM2pUK0XDAKGRobDRwKHUcegAsfExUdIEcVCgshImojfEUkCiUmJygHACkqHEQpqKkpogAgK5FOQywtprFDKRwptrZ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actreload16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCRaJBxWJBxOHBRGBCxeLLTatCSKFCymJBQ6BAwmBNzu3AQCBAQOBCRSJKzWrGy+ZDy+NBxSHFSmTBxWHLTWtCyaHCSSFCx6PETKNBQ+FBwaHCRKJMTixLy6vExOTKyqrFxaXDQyNDw+PBQSFHx6fCwuLJyenDQ2NISChLSytJSSlFxeXAwODCQmJBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIBQGBAMBALCcCksGA4IQkJBUDIDC6gVwGhshY5HlMn9DiCRL1MyYE8iiapaSKlALBdMRiPckDkdeXt9HgxkGhWDXB4fH4ZMGnxcICEiI45kQiQkDCUmJZskmUIiJyiPQgyoQwwpH35LqqgMKiEjq5obqh8rLCMtowAkLqovuH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actrun16:act act16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/ISChKSipMTCxLS2tLy+vMzOzMTGxNTS1AAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARlEMgJQqDYyiDGrR8oWJxnCcQXDMU4GEYqFN4UEHB+FEhtv7EBIYEohkjBkwJBqggEMB+ncHhaBsDUZmbAXq67EecQ02x2CMWzkAs504gCO3qcDZjkl11FMJVIN0cqHSpuGYYSfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -actstop16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/Gw6NGQuLHQ6NGQmJFweHFQaFPTm5PTa3PTW1Oy+vOS6tNSinKReVDQWFPz+/Nx6fNyCfNyGhNR+dMxybMRiXLxGRIwWFNx2dNx+fNx2bMxuZLQWFBwWFPTu7Pzy9NRqZNRuZMRSVLwmJGwWFNR2dMQiHPTKxMxmXMQyLMxmZNx6dMxiXMRSRMRaVKxybMxaVEQWFMQuJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaaQIAQEBAMCAWDYcgkHhAJxYLRcDQBggckIplQKpaLdRh4YDIaSWa94Vw6woAHgv6AMKGPaMQhwQMJJRkfhHmEJhdvRCcgGSCEkCgpbnAECiorGYYfLCItlAAFCygQj5AfbYlwBQwVE5AukG6KBi8tMC0fLi0pHxyzcAAxFxwmMny/wEwOxMm/qlcdJCSJ1H5XQh3a28HY3kx+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actundo16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBxSHBxOHMTSzNzu3KzCtBRGHCSKFIzCjLzSxBQ2FAxGHDzCLCyeHBQ+FHSmfAwuFBxKLDSCNMzizISyjJzOnDSyLAw+FAQSDAQeDBxWJAwmDAQOBKzWrDymNAQaDAQODAwaDDyKTFSyXFTGTEy6TAQCBAQKDAwiFBQyHAwSFAwmHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ1QIBwSCwaj0hiQCBICpcDQsFgGAaIguhhi0gohIsrQEDYMhiNrRfgeAQC5fMCAolIDhD2hFI5WC4YRBkaBxsOE2l/RxsHHA4dHmkfRyAbIQ4iIyQlB5NFGCAACiakpSZEJyinTgAcKSesACorgU4mJ6uxR35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actunlock16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJExGHEQ+FCQiDBwaDBweDGxiLHxyNHRuPIR+RIyGZJSSfFxaRGxmLJyaXNzWpNTOnMzGnMS+jJSKTGReLKyqjPTu1NzarLSufKyibJySXIyGVGxiNFxaXLSytPT29Ozu7OTi5NTS1KyurGxqVCQeDJSSjLS2tNTW1KSmpGRiLKSebOzuzJSOXExONExGLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaVQIBwOAwYA8SkMCAYOAnKYiFAIAQGyOgVCggYuEovVxztMpdnwAGRSCgUCwOjIeQ6HpCIZDKRUNYMRBUWF4UYGRoWGxyBRR0eHxgaICEiIyR0QyUmJygpKgUrAxMsLUQlKyieoKIuEAunK52fBS8DLiywQySpnjC1Mbi6QjIzNBeSIBY1EQfDQgosLAEUNjY3Co1DfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -appbook16:app app16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBDyKhDSChGSinFSWlEySjCx+fHSqrGSipESOjCR6dKTGxISytIy6vFSalBxydAQeHHyurAxubARmZCR+fBx2dDyKjPz+/MzKzLTS1IyOjAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVkICCOZGmKQXCWqTCoa0oUxnDAZIrsSaEMCxwgwGggHI3E47eA4AKRogQxcy0mFFhgEW3MCoOKBZsdUrhFxSUMyT7P3bAlhcnk4BoHvb4RBuABGHwpJn+BGX1CLAGJKzmKjpF+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -appbookopen16:app app16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExCNGSenHRmVCwqJPTq1GxeTHRqXPz+/DwyJPTq3Ny+lOzexPzy5HRuVFSWlNzClPTexIR2ZOzevPz29AxqbPz6/IR+ZDyKjPTy5IyCZPz27ESOjJySfDSGhPTm1PTizJSKdDSChNzWxMS2nIR6ZKyijNzOrOzWtIx+bLSifNTGrMy6lIx+ZCRWRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQEAAQCwWBYJiYEAoGAFIw0E5QCScAIVikUgQqNargtFwdB9KSDhxiEjMiUlgHlB3E48IpdKdLCxzEAQJFxUTblwJGH9zGQgVGhUbbhxdG4wBHQQaCwaTb10emB8EBiAhInp8CSKYIw8kDRSfDiUmJ4xCIxMoKSoRJRMrJyy5uhMtLisTLCQkC8bHGBMj1daARgEjLyN03kPZc09FfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -appboxes16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMT+xAT+BASCBATCBMT+/AT+/ASChATCxPz+xPz+BISCBMTCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEEgZwrwYBCFqvhs3DNYXjChRlWBRjIRqGN4UuEUczMZxsDeXykdEsDQVVSLhQxhBCkVlmXA+KVHFYhFYOoHbMGN6pTQaW8YYiQmcG+q16a0+Zipw+4e9B/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -appbox16:app app16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+xISCBMTCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANECKoR6ys2IVqokF08yMTA1gwkYX5WQK5ma4VceTYPxXnBWdtY6+0834/Bowgzm6APWRQcH4TiMhPK2WYRiZWW7XK7/gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -appbrowser16:app app16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxONCROfCRKfKx6LNy+bNTOpGSS1DRupAwyXBRSnPTSjPTqvOzqzMzSvHSSlKy6ZDxutAxCpBQ2XBxepLTKvPzqzPzy5OTShLS2dLSqRFR2jBRerBQ+jOTixOzetNS2XHx6XDR2tCRexBwyTDyKzOTavPzq1OzKdCx23BRKtCQ6VCQmHFSa7IyirOzSnGSGpIR+bFSO1DyK7DR+5CRixBw2VDQuHFye7IS27NzGXISuhEyS5DR25BRWxBQ+lBQyXCQqPCxSfGyu7GyerKy2ZFR+rERqfCRmxBROtBQ+fBwuTBwmNDSW9JyabLyqRIx+TExSXBQ6bAQCBBQ6ZBxapDR+zBxq3LyaLJySRHxqPGxeNBxGbCRmrHRyRERONDRKNDQ2JCQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAeygACCg4SFhgABAQIDh4MBBAUGBwgDCYcKCwwNDg8QERIThRQVFhcNGBkaGxwdoYMDHhcXHxggISIjEiSvJSYXJwsoISkpIyorLIIDLS4WLzAxMjM0NSo2N8o4OS46OzwzPSk+P0BBgkI8Q0NERUZHCEhJSktMgwk4Qy1NTk9QUVJLphCiUsWKlStYsmjZQiJgIS4KuijQ4iXAFxYCDVFJwGUFmDBhMjYSw0KMyEYoBfkJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -appcalc16:app app16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBISChPz+/AQCBCH5BAEAAAAALAAAAAAQABAAAAI4hI9pwe0Ogpi00hHF2LzzzFlTsIHD45SSx6oCeW4wjK2tl83y7t64pIsJaxrfh2bEAJIlhRPhLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -appclock16:app app16 16:photo:16 16:R0lGODlhEAAQAIIAALy+vAQCBPwCBMQCBIQCBISChPz+/MTCxCH5BAAAAAAALAAAAAAQABAAAANbCLHcrSLKOZcYmDSCsR1aUABAsXDDJwJGa5SBFwgaWxbCG3CWaBwG3C8Y67FawpYiNQscg65fsVkYuoAmJs1pBR522lQB6ILJLqHRwQQOZzYdZnw+dzruDIA/AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -appdate16:app app16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBPzerPyqXMRaBIQCBISChPz+/KSipMTCxPz+BMTCBPwCBPz+xPzCxMQCBISCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVxICCOQGCeJjkGwkC8RFEEavkax2G8dB0QuRyhhzoBg8MSYsncJXKJZIDZHCoWP1ogGIwGrtnSgUFmHLyNRHhrdpjRamnO/SYkromHdnxwnwkKVxByZW8DgQsQM2JcfwZXO0MBCZSVBgMuLzJaRZ0pfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -apppencil16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/IQCBMQCBPzCxAQCBPz+/MTCxISChDQyNKSipEQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARDEMhJZRBD1H2z3lMnjKCFjUJQimOgcmcbELCXzjXq0hV785WCQYcDFQjDXeloMByKG6YTAdwIDAlqSZJSVFeKLcUfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -appsheet16:app app16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBAT+/Pz+/KSipPz+BAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANFCBDc7iqIKUW98WkWpx1DAIphR41ouWya+YVpoBAaCKtMoRfsyue8WGC3YxBii5+RtiEWmASFdDVs6GRTKfCa7UK6AH8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -apptool16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBISChGRmZMTCxKSipLS2tHx6fPz+/OTm5FxaXOzu7DQyNMzOzAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMhAq7wYBDECKVSGBcbRfcEYauSZXgFCrEEXgDCSeIEyzKSXZoBYVCoJVIqBGByKu0Cy8QHxmgNngWCkGgqsGWFseu6oMApoXHAWhWnKrv0UqeYDe0YO10/6fhJ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -apptools16:app app16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBExKTERCRAQCBOzu7Nze3MzKzLy+vCxqZBQ2NJyanKyqrGRiZDRydKza3FRWVPT29LSytDw6PMTm5EySjCxaXGRaJFSanCRSVGxqbPTmvMSqVJTW1GSurHS6vOzq7KSipISChFRKHJSGNPz23GxKFBQ6PKyurCwqLMyufJx2RAQGBJSWlEwyDIRiLNy+lLSKVDwmDJRuNOTOrLyabGRCFDx2dKSCVOzWtHzCxOTGnNSyhAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAahQIBwCAgIBAOiUiggFAyHASKxDAwUC8Zg0HAglA9IZPGQABoTSqJCFTIOEIsFgHBcEhhHUpKJFCwaGxYYHB0VEx4IEh8gIQwiIyQbJRMcHokmEicfDygAkCkqJQgIGG0rLElCLS4vMCWqQwMCQg0UMTIzNDVLQjaIGDE3ODQlS785CEkxKjowvEOHybG4O6JDCdNKuDUxRAmxRDHeveUAfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -appuser16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MTCxISChMT+/ATCxASChFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMg5gw00yyDGIAR1YUDggeFWFIZhnSBZrsZxdIOFEGTA2oeBAHeyuGwvzxBlYdUOLROMFzDQntJPrNoqAKUBaqnV+k57ZORruykHDj2LqIzUVKp1u0iuB/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -appusers16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxISChAT+BMRaBPyqXARCBPz+/FxaXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARLEIRJa5Ui673nsGAgeKE1Bl9AUEXbiqTlFlZaGUZoszm4BzhDAVf5BYbAXI+TAR6CS2ZGSZSEiIIqYIsSIEaJ7GRrlY7J1lKA7I8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -appwp16:app app16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBKSinJyOfPz27Pzy7AwKDExOTJyWlERCRKSelPz69LyyrKymnPz+/MS2fDQyJAQCBOTazLSiXOzivMS2jKSSVOzmxPz25NzSpPTu5KyebOzixNTGjOTWpMSydMSybCwqFGReVKyaXNzSnGxeNJSCVMS2nPz23MSuZIR+bJyShLyqnOTOtGxiXIR6XOTSvIx6RMSubIyCdKSalMS6pOTWxMzKvKSabJyKTOzezHxuPGRmZKyurMTCvPTq3AAAACH5BAEAAAAALAAAAAAQABAAAAajQIBwCAgIiEhiYEA4FgwHRDKhIBAWz4OhgGQ0FAPHA7qFEBONb0Qy0ULeQ2+aUrFcMI+3GYBOZzQbHB0eHyAhIQByDREiEwMjFRIkJQImAgJ+jScjHigkKSorLC0AKg2NFSMoki4qCy+IQgITKDAxkjIzNDWkQxQoJaskMgk2Eb1DNzgoOCoHDDY5yEIwJToAOzw9ET7TQiREAhkZ3kmy5QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -cal1day16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANOCLrMEUDIOUS9AFLLhx8LIRZjKYZmMRCkaChFLHty/AIiS3y6q+QtT49wq8VotRtQJGwRf6Zmrlj7DJLQXsupTJmeEIN4TB5nII20wp8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -cal5days16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANMCLrMEUDIOUS9AFLLhx8LIRZjKYbj55GioRRwoQ5x4QIiIdMmcec7jy53q81qP9OO5VMAj8RXTFWzOZW95HDLdEEM4LA4nIE0zgp/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -cal7days16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANPCLrMEUDIOUS9AFLLhx8LIRZjKYbj55GioRRwoQ5x4QIiwcp0fucsj873qvGMv5Jw2FIACUsW4WakGW1O046I05qmGYBhTC6TM5CGWuFPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -calappointment16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/MTCxPz+BISCBISChKSipAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARbEMhJaQhA6D1E/wDGeeRgDhOhFoTBEi+REgdrIHScSEVvAD9Xr7cDqGSGpFEnQSqTv2NxCFQOiU1VEAiTZmstHFg1vQKuw+LxxfYaV/AuOQRI2O/4ewhT6Uv8EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -calbell16:cal cal16 16:photo:16 16:R0lGODlhDwAOAIIAAPwCBISCBPz+BIQCBMTCxISChPz+/AQCBCH5BAEAAAAALAAAAAAPAA4AAAM+CLrR+zCIAWsgLVRGRBhOVQiG94WPVAbHaZHYAWqRYLbge88RsbInGuBCEhRYrZYm4xk4nYdoKzKIbiKHawIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -callist16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/KSipPzerMRaBEQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARDEMhJaQhA6D1E/wDGeeRgDhOhruyatjBRSIRxxOsMEAdC0BUZDcfSEYvDo3Bn++2Cxt7RqFxWhZiCdsvdhjCVsMQfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -calmonth16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANSCLrMEUDIOUS9AFLLhx8LIRZjKYbiRxLFIBpK0Q6z7MkwkJIe8b0KEeuWchFysuStVsjtfMbeMQitWpG25YfmNK1WU53XNIUYzug0OgNpuBX+BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -caltoday16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/MTCxKSipPyCBMRaBPyqXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARTEMhJaQhA6D1E/wDGeeRgDhOhFmurpi5LyIQhFfiBIAfuFzaAioBIJBCummRYPCaDPh3vhwsOZdihNfa8Ub/AJXemFZPPNBvGwG672yFMZS7xRwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -caltodo16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBAT+BAQC/AQCjPz+/MTCxPzCxKSipPwCBMQCBIQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARaEMhJaQhA6D1E/wDGeeRgDhOhFmurpi5LyMYhFXiuFwZiA6qZYbbqJX5BIw2RAPxwAAWCyWMCCsiXFGEEErKz6LQZfOqiTR1YJiGq1rFyyHmo2+/1EKbCl/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -connecting16:connect connect16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBPz+BMTCBISCBAQCBPz+/MTCxMTGxISChFxaXMzGzKSipAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJZbihUiz60FPnfaA0iBpBVGdHEYWxToEoSHBRHHM9AgSEQRcj+AYkYAJxIPKQFUJiOdTJQFIDU6dYzKKFhTCM+E5g4mXaDAyrlogEG+DGTecA7wsP8EcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -connectno16:connect connect16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBPz+BMTCBAQCBERCBPz+/MTCxMTGxISChFxaXMzGzKSipAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARPEMhJq704axBEHoPUEdhQGMNYFuwxkKInDYjBniEnwMCQIIebSzXx/WwsFK+YMABZikWuYlrUCtZpEYv4WRPaHhb064YB41kCfJFSQBh/BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -connectyes16:connect connect16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/KSipDQyNMTCxMTGxISChFxaXMzGzAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJZxCjgsAtDtUlCOA1gJQ4kl/IDatAoF7xxkS6GgEBr6jAobCyBX42SQBxMOx6A8MhiGASR8YDgrYsNEeJ0zaEGZY7uoH2oB6nOUwtbdLaVOeTUwo/8UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -devcdmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tOzOvNTqvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/LzKvMTCxDQyNASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAa0QIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTBqUiuUCVmAeiYzmsKlwOt/AAKFIFAIIFx4WHyAhUwIDIgsZFyMkFxchJSYmiBkSBBoIJJwIGgOhiCYFJSEnFyQjFwNZewABISAfFiYnCAEmCREIrwAIFhwVGwcaBAkPGApsQsAVFA0GBQMRbxBTKM0ODQwTEq192ClDgROkBHvYKuNJUu5CKCorX1RDKCkpUn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -devcdunmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tNzmvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/MTCxLy6vDQyNOTm5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAapQIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTLqUigWsuDwSmMxBQ9lwvoEBQpEoBBAWHRseHyBTAgMhCxgWIiMWFiASJCSHEgQSGQgjmwglGKCHBQUSICYWIyIWAwshIVMBIB8eFSQmCAEFCREIekIIFRsUGgcZEgkPFydrvxUUDg0GBSEREGJfv9AMEySsJxDYQ4DcEhh64UpS6lTs7QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -devdiskmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBDQyNIRuVKyCXMSKROzSrOzKpOTGnLSafLySZKxuLMSOVPTWvPzixLSehNyibOzOrGxaVJx+XOzGnFw2FJRuPKx+TPTSrHRWPKyKZPTOpHxOJKyKXFw+HKSipISChMTCxFxaXIRiPNSWXExOTOS2hLR+PLRyLPTWtMyOTASCBARCBPz+/DTSJIyKjIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwCAgYA8SkMCAYDARI5ZJQMBwQiWgyoFgwrA3HQ7scQAqFAcEQOUi0zAkFUSFYLghMBloUCDQNGxwdHhwHekcfICEhICIfIxkLJBABJUYCICABIhAOBiYnKJaXmH4CGSkYCCqkSAEfTKenrkOwsrQll0IrS7G5uwArLLaxLbXCLsTFLyDBKy4wZEVHvCwsRn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -devdiskunmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBDQyNIRuVKyCXMSKRPTWtOzKpOTGnLSafLySZKxuLMSOVOzOrPzm1LSehNyibGxaVJx+XOzGnFw2FJRuPKx+TPTSrHRWPKyKZPTWvHxOJKyKXFw+HPTOpKSipISChMTCxFxaXIRiPHxaNLRyLNSWXExOTPzixOS2hLR+PMyOTPz+/IyKjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaIQIBwCAgYA8SkMCAYDARI5ZJQMBwQiWgyoFgwGgiD46FdDiCFwoDQAEe0TMkEQSFULIcLBloUCDIaDRscHRsNHhhHHyAhISAiHyMkJSYQASdGAiAgASIQKA0pKguXmJl+AiQGFwgrpUgBH0yoqK9DsbO1J5hbsrq8SrgstlJFHy0gwMVFR1J+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -devfloppymount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBMTCxARmZPz+/FSWlLSytKSipERCRIyOjISChOTm5HRydNza3GRiZFRSVASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVrICCOQBCQKBkIw5mqLFG47zoQ+FwbN57TosDhgPD5dMEEIqE04kwlBWKBUEiNVYFpyqAyGEUCgqEtERiNNMLhQKzLQYJg7n7Y4aMAwbCUPvAQeWNgfzQQETAIhSMQEogwgBITQEGGEREmfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -devfloppyunmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxARmZPz+/FSWlLSytKSipERCRIyOjISChOTm5HRydNza3GRiZFRSVCH5BAEAAAAALAAAAAAQABAAAARcEMgJQqCYBjFu1hxReN82EOhYGieaklJwHIjrqnGCJLqNWhUFYoFQCG1FgWXIIDIYNQKCoawQGI0swuFAbKsxgmDsfZjBkwDBsNM90Jot9A3DbBD0Dwiur9QnfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -devnetwork16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBISChPz+/Nza3ARaZESanCyKlARudARGTLy+vNzq7ARmbMTCxARufAROVMzOzKSipARyfOzq7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVmICAGZFmKQiACweCSBImq41AYB5IodLq2hwWO0ejRWDac48Gb/QKNqNRoqspmrVcAUuIJBANS8sBIFCORUgooPEh4J8B67NgdsVBp9C5XWfl9LRMTCyReX19hARNojWlWLH+AAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -devpc16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBISChHx+fPz+/AQCBAQC/AT+/AQCxAQChAT+BLy+vAR+BAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARYEIAgqK1YzsG754QUDERpmkEpkkXrtoK6EcVgHIibhnNx564Yb0TDvQq7FQ34EiqPOhnREqhWSUPsyZSQAbbg7GcMEgwUiYVivTa1R+y4XEGoWO/4AMAfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -devscanner16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MT+/ASChARCRATCxMTCxFxaXKSipDQyNAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEMgJgqWBVivEldkUdKSXhVjZfenommglDERh3Tc4E4ZRHAGgkEPr9X6H5AHBERSMRyWzkug8jQXFEhWoOo8dRYxqLXSmGjIJnVaz29Q3fAP3RwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -devscreen16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXFRSVPz+/PT29OTm5OTi5DQyNDw+PERGRExKTHx+fISChIyKjHRydFxeXDQ2NCQmJBQSFAQCBERCRMTGxHR2dGRiZExOTDw6PCQiJAwODCwuLFRWVOzu7BweHAwKDCwqLHx6fBQWFGxqbGRmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAanQIBwSCwKAwKkMslEAgSDqDRKqBYKhkNgcDggEorkMrDQchkNhuOhgEQkk0l5S2lUGpYLJqPZTAwMHB0DCmhqAW0Rfh5zAxgOkBcCFAcfIBMECxwBBAEPFw8dChkhcBMDDAcdnQqtFKSWcQMimx4dGRkQBxGxsg6bBQEawx8jl3GnJFoFHRNXVVNRJYIFDAsL1tgiDiQXFx0HABwcXeQH5OjkRutEfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -devspeaker16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXAT+/DQyNATCxMTCxPz+/AQCBKSipASChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEMgJQqCXziDG2JoUEENhZBkmHIWJVptAmqcIW/Js1MiF56TBzkckAAcHoa9nMRKeA4TyJk0knsHhTeK5khBaH2VwLYVh40TJhQ6RzeIQV32Quz8hfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -editcopy16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAFxaXPwCBNze3GxubERCRPz+/Pz29Pzy5OTe3LS2tAQCBPTq3PTizLyulKyqrOzexLymhLy+vPTy9OzWvLyifMTCxHRydOzSrLyihPz6/OTKpLyabOzu7OTm5MS2nMSqjKSipDQyNJyenLSytOTi5NTS1JyanNTW1JSWlLy6vKyurAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAaUQIBwCAgYj0eAYLkcEJBIZWFaGBie0ICUOnBiowKq4YBIKIbJcGG8YDQUDoHTKGU/HhBFpHrVIiQHbQ8TFAoVBRZeSoEIgxcYhhkSAmZKghcXGht6EhwdDmcRHh4NHxgbmwkcCwIgZwqwsbAhCR0CCiIKWQAOCQkjJAolJrpQShK2wicoxVEJKSMqDiAizLuysiF+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editcut16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAQABAAAAIwhI9pwaHrGFRBNDdPlYB3bWHQ1YXPtYln+iCpmqCDp6El7Ylsp6ssR1uYSKuW0V8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -editdelete16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPT29GxubMzOzDQyNIyKjHRydERCROTi3IyKhPz29Ox6bPzCxPzy7PTm3NS6rIQCBMxCNPTq3PTi1PTezMyynPTm1PTaxOzWvMyulOzGrMymhPTq5OzOtNTKxNTOzNTCtNS+rMSehAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaKQAAgQCwahcihYMkcBAiBpLJApRoOBWgyIKhSEQkFgrBAcr1URiPhKAsDD3QB8RhA3FM0IlLHnyUTVBMSFBUWfl0XGBMTGBcZGodmcQWKjpAbHIgIBY2LHRoempOdjooTGx8giIOPFYofISJ+DyMXI6AfFySyfiUmJSUnKBYcICIpfgELzM3OZX5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -edit16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaVMR+RPzKjNze3AQCBMR6RPzGjPyODPz+/MzOzPyKDPyKBPz29OTWzPyGDPyGBOx6BOza1OR2BKROBNSOXKRKBBwOBOzu7PTWxPzizOySZPyCDFxaXOy2lNRyRMxmJCQOBPTm1OzStPTKrMR+XIRWLFxGNCQSBDQyNIRSNDQuJERGRLyqlNzSvIx6ZKRuVEw6LLSyrLymhKSShBwaFFROTJyWjMS+vNzW1OTazNzKrHRqXOzezOTOpPTq3OzWvOTStLyedMS+rLy2pMSynMSulAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAewgAAAAYSFhoQCA4IBBI2OjgUGBwiLBAmXlpcKkgsMlZcJBA0JDpIPEBGVjwkSBgOnExSfmBIVBxAMExYXswkYGRobHLq8gh2PHhoeHyAWIYKzIiMkJSYnKCnQg5YNHtQqKywtK9qMBC4vMDEBMjIz2dCMDTQ1Njc4OToz5PEEOzw3ZPToMcLHO23HfogQ0QMIkCA+hPBbhAPHECJFjMyYIUQIvEUpUqwQOXKkSEF+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -editpaste16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQiFHRqNIx+LFxSBDw6PKSaRPz+/NTOjKyiZDw+POTe3AQCBIR2HPT23Ly2dIR2FMTCxLS2tCQmJKSipExGLHx+fHR2dJyenJyanJSSlERCRGRmZNTW1ERGRNze3GxubBweHMzOzJSWlIyOjHRydPz29MzKzIyKjPTq3Ly2rLy+vISGhPzy5LymhISChPTizOzWvKyurPTexOzSrDQyNHx6fCwuLGxqbOzKpMSabAQGBMS2nLyulMSidAAAACH5BAEAAAAALAAAAAAQABAAAAa7QIBQGBAMCMMkoMAsGA6IBKFZECoWDEbDgXgYIIRIRDJZMigUMKHCrlgul7KCgcloNJu8fsMpFzoZgRoeHx0fHwsgGyEACiIjIxokhAeVByUmG0snkpIbC5YHF4obBREkJCgon5YmKQsqDAUrqiwsrAcmLSkpLrISLC/CrCYOKTAxvgUywhYvGx+6xzM0vjUSNhdvn7zIMdUMNxw4IByKH8fINDk6DABZWTsbYzw9Li4+7UoAHvD+4X6CAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editshred16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbGxubMzOzPz69DQyNIyKjERCRPz29PT29OTi3IyKhPz27PTu5PTy5Pz6/Pzy7PTq3OzexLyqlPTm1PTizOzavLyqjOzWvOzaxLyifOzizOTOpAQCBOzezAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaEQAAgQCwahcihYMkcBAiBpLJApRoOBWgyIKhWEQkFYYHkeqkMxKFBFpq9jgdkEGlPqwrJhCIY2N8FFRYUFxcYGX9dgRKEGhiHiYEOhBcbGBwdiQEOARcBGwEeAZllAgEUnQEfoQEgmp4hrCKtrwEYsrRlTiMBJAG8syN/IyMAxMXHSH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -edittrash16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipFxaXPz+/MTCxISChDQyNCH5BAEAAAAALAAAAAAQABAAAANQCKrRsZA5EYZ7K5BdugkdlQVCsRHdoGLMRwqw8UWvIKvGwTICQdmGgY7W+92GEJKPdNwBlMYgMlNkSp3QgOxKXAKFWE0UHHlObI3yyFH2JwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -fileclose16:file file16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCQiJBwaHAQCBDQyNDw6PFxaXFRSVERGRCwqLAwODGRiZHx6fPz+/GxqbAwKDCQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVaICCOZGmeqBgEwjCkRGEcSKK4JrEcBrMgAdeLVDg0GguGsYEbBQyGYyN6FDoPDIf0+LCKBIgetQERDgGDBGIpNY8GioAU0m6KXFw883w3+/l9f4AkfimGIn4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -filedocument16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJSWjPz+/Ozq7GxqbJyanPT29HRydMzOzDQyNIyKjERCROTi3Pz69PTy7Pzy7PTu5Ozm3LyqlJyWlJSSjJSOhOzi1LyulPz27PTq3PTm1OzezLyqjIyKhJSKfOzaxPz29OzizLyidIyGdIyCdOTOpLymhOzavOTStMTCtMS+rMS6pMSynMSulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaQQIAQECgajcNkQMBkDgKEQFK4LFgLhkMBIVUKroWEYlEgMLxbBKLQUBwc52HgAQ4LBo049atWQyIPA3pEdFcQEhMUFYNVagQWFxgZGoxfYRsTHB0eH5UJCJAYICEinUoPIxIcHCQkIiIllQYEGCEhJicoKYwPmiQeKisrKLFKLCwtLi8wHyUlMYwM0tPUDH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -filefind16:file file16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBCQmJDw+PBQSFAQCBMza3NTm5MTW1HyChOT29Ozq7MTq7Kze5Kzm7Oz6/NTy9Iza5GzGzKzS1Nzy9Nz29Kzq9HTGzHTK1Lza3AwKDLzu9JTi7HTW5GTCzITO1Mzq7Hza5FTK1ESyvHzKzKzW3DQyNDyqtDw6PIzW5HzGzAT+/Dw+RKyurNTOzMTGxMS+tJSGdATCxHRydLSqpLymnLSijBweHERCRNze3Pz69PTy9Oze1OTSxOTGrMSqlLy+vPTu5OzSvMymjNTGvNS+tMy2pMyunMSefAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe4gACCAAECA4OIiAIEBQYHBAKJgwIICQoLDA0IkZIECQ4PCxARCwSSAxITFA8VEBYXGBmJAQYLGhUbHB0eH7KIGRIMEBAgISIjJKaIJQQLFxERIialkieUGigpKRoIBCqJKyyLBwvJAioEyoICLS4v6QQwMQQyLuqLli8zNDU2BCf1lN3AkUPHDh49fAQAAEnGD1MCCALZEaSHkIUMBQS8wWMIkSJGhBzBmFEGgRsBUqpMiSgdAD+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -filenew16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPz6/GxubNTKxDQyNIyKhHRydERCROTi3PT29Pz29Pzy7PTq3My2pPzu5PTi1NS+rPTq5PTezMyynPTm1Pz69OzWvMyqjPTu5PTm3OzOtOzGrMSehNTCtNS+tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ/QAAgQCwWhUhhQMBkDgKEQFIpKFgLhgMiOl1eC4iEYrtIer+MxsFRRgYe3wLkMWC0qXE5/T6sfiMSExR8Z1YRFRMWF4RwYIcYFhkahH6AGBuRk2YCCBwSFZgdHR6UgB8gkR0hpJsSGCAZoiEiI4QKtyQlFBQeHrVmC8HCw21+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -fileopen16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBOSmZPzSnPzChPzGhPyuZEwyHExOTFROTFxaVFRSTMSGTPT29Ozu7Nze3NTS1MzKzMTGxLy6vLS2tLSytDQyNOTm5OTi5Ly+vKyqrKSmpIyOjLR+RNTW1MzOzJyenGxqZBweHKSinJSWlExKTMTCxKyurGxubBQSFAwKDJyanERCRERGRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaRQIBwGCgGhkhkEWA8HpNPojFJFU6ryitTiw0IBgRBkxsYFAiGtDodDZwPCERCEV8sEk0CI9FoOB4BEBESExQVFgEEBw8PFxcYEBIZGhscCEwdCxAPGA8eHxkUGyAhIkwHEREQqxEZExUjJCVWCBAZJhEmGRUnoygpQioZGxsnxsQrHByzQiJxz3EsLSwWpkJ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -fileprint16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFRKNAQCBPz+/MTCxExKLPTq5Pz29Pz6/OzezPT29PTu7PTy7NzClOzm1PTu5LSabJyanPTm3FxaXOzCjOTKrOzi1OzaxOTSvJyenGRmZLyyTKSipDQyNERCROTi5Hx+fMzKzJSSlIyOjISChLS2tAT+BDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaYQIBwKAwIBMTkMDAYEApIpVBgOCAOg4RRGlAoEAuGIdGITgWOq4LxcCQgZkEkIHksHgYJOR6ZQCgVFhYJFxgTBVMZihoCfxUYDWUbUBGKGREcjBoQEB2TAB4CAx+Vl5WMhyACHiEhH6IfIiMktCQgE0cZJQStr6O2t6EARxO6vK6iEx4dZsMCxbsmBB4nzUTEutVSSUdmfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -filesave16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBFRSVMTCxKyurPz+/JSWlFRWVJyenKSipJSSlOzu7ISChISGhIyOjHR2dJyanIyKjHx6fMzOzGRiZAQGBFxeXGRmZHRydGxqbAwODOTm5ExOTERGRExKTHx+fGxubNza3Dw+PDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaAQIAQECgOj0jBgFAoBpBHpaFAbRqRh0F1a30ClAhuNZHwZhViqgFhJizSjIZXQCAoHOKHYw5xRBiAElQTFAoVQgINFBYXGBkZFxYHGRqIDBQbmRwdHgKeH2YgHpmkIR0HAhFeTqSZIhwCFIdIrBsjAgcPXlBERZ4Gu7xCRZVDfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -folder16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHMzKzOzq7ERCRExGTCwqLARqnAQ+ZHR2dKyqrNTOzHx2fCQiJMTi9NTu9HzC3AxmnAQ+XPTm7Dy67DymzITC3IzG5AxypHRydKymrMzOzOzu7BweHByy9AyGtFyy1IzG3NTu/ARupFRSVByazBR6rAyGvFyuzJTK3MTm9BR+tAxWhHS61MTi7Pz+/IymvCxulBRelAx2rHS63Pz6/PTy9PTu9Nza3ISitBRupFSixNTS1CxqnDQyNMzGzOTi5MTCxMTGxGxubGxqbLy2vLSutGRiZLy6vLSytKyurDQuNFxaXKSipDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQYHCImDBgkKCwwNBQIBBw4Bhw8QERITFJYEFQUFnoIPFhcYoRkaFBscHR4Ggh8gIRciEiMQJBkltCa6JyUoKSkXKhIrLCQYuQAPLS4TEyUhKb0qLzDVAjEFMjMuNBMoNcw21QY3ODkFOjs82RM1PfDzFRU3fOggcM7Fj2pAgggRokOHDx9DhhAZUqQaISBGhjwMEvEIkiIHEgUAkgSJkiNLmFSMJChAEydPGBSBwvJQgAc0/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folderhtml16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBERGRBQWFMzKzOzq7CwqLDw6NARqnAQ+XHR2dKyqrOTm5ExKTERCRHRydMTi7NTu9HS+1KSmpBweHDy67DyixHS61ITG3AxypByu7DxinBw+ZERmdIySjITC3ARypExOTDRurIR2RPTSdJyulEyGvBw+bFSyzJTK3LzKvPzivOTixNTChLSybGyCfCRSnBQqRASGtFyuzDw+PCRShPzy5OzerOTShKyaTEx6pCxerGRufBR+rOTezPTShNy6bER+1BxCfBQuRAxelFSixBw2VISq3GySrPTWlHyanIyitFSO3IymtCRujAxWhCRqlCQ6XGyWvNS2bFyGvDxuvCRSpLy+vMS+vGxqbFyO1GSi3EyO1FRaVCQuPLS2tDxyzKyWNFxaNCQyPGxubCxajERSVExKNJyenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfZgACCAAECg4eIAAMEBQICBomDBwgJCgsEDA0BDg8BhwYQERKUDxOYDAyeghQVFhehGBmVlwwOqxobHB0eH6EfIAkPIYIiIyQlJhsnKBcpvrYiKissLS4vMDEyFjOvNAA1LDY3ODk6Oyc8PTIyFzQ1Jj42P0A6QTtCQ0REIEUORkdIkihZwsSekBhNnDyBciCKiSNSplDRUcWKkRhXCGDJYgiGli1cpuTocsILjytfFmRpACAGRTBhRogZgzHlAjKGWnIoY+bMgRgBDHRBo/LAIZoxuhwKatRPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -folderlocked16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQSFMzKzOTm5CwuLERCRARqnAQ+XHR2dKSmpOzm5GxqbCQiJMTi7NTu9HS+1HRydOTm1Ozq7Dy67DyixHS61ITC3AxypERGRBweHByu7ASGtFyy1DSOtDRmfExOTBSazBR+rCwqLAxWhAxelByGtDSaxAwODHy+1Dw+PPT29IyqvCxujOzu7NTW1Nza3ExGJJyebKyqfMTCpFRSPOTi5DQqHOTezDw2NMTGxKyqhMTGrGxmXDQ2NMTCxMTGpHx6bHx2bBQWFIyOXDQuDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQICBomDBwgJCgsEDAKFDQGHDg8QEZQSlxMUDJ2CDhUWF6AYGZWXFBqCGxwdFh4XGK8fIAohtiIIIx25EZwBDREHgiQjJSYmGScoKSoRKQ8rggIsDC0uJS4oGygoAyjdAAcsLxQUMDEyMzQ1EzapBy8MDDc36tFwgONFjlQ6dgCEEZBHDx8+ctRIRehHAyAwZASZIGRIEBoUBwUwIGMCiwFEaBQJichIjo9FZLBsacRIAB0A/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -foldernew16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBPz+hPz+BOSmZPzSnPzChFxaXMTCBPyuZPz+xPzGhEwyHExOTPz+/MSGTFROTPT29OTm5KyurDQyNNza3Ozq5Nze3LR+RLy+vJyenMzKzNTS1Ly6vJSWlFRSTMzOzMTGxLS2tKSmpGxubBQSFAwKDKSinJyanIyOjCQiJERCRERGRBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaNQIBwSCwaj8ikcokMCIqBaEDoBAQG1meAUDAQpIcBQoy1dg2JdBqhECgQ1IWB0WgcBIOBwIHXBwwPEBEREhIBbG4IExR/DBUVFhIXV2NjDVYYDY8SFU4ZVxpVAQwbGxynGxkdTh6XVh8gGSGzGSITIxokJUImGSMTwLcnKCkprgAqDSt1zCssKxQtQ35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -folderopen16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOzi1Ozq7ERCRCwqLPz+/PT29Ozu7OTm5FRSVHRydIR+fISCfMTCvAQ6XARqnJSKfIx6XPz6/MzKxJTa9Mzq9JzO5PTy7OzizJSOhIyCdOTi5Dy65FTC7HS2zMzm7OTSvNTCnIRyVNza3Dw+PASq5BSGrFyqzMyyjMzOzAR+zBRejBxqnBx+rHRmTPTy9IyqvDRylFxaXNze3DRujAQ2VLSyrDQ2NNTW1NTS1AQ6VJyenGxqbMTGxLy6vGRiZKyurKyqrKSmpDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfCgACCAAECg4eIAAMEBQYCB4mHAQgJCgsLDAEGDQGIkw4PBQkJBYwQnRESEREIoRMUE6IVChYGERcYGaoRGhsbHBQdHgu2HyAhGSK6qxsjJCUmJwARKCkpKsjKqislLNIRLS4vLykw2MkRMRAGhDIJMzTiLzDXETUQ0gAGCgU2HjM35N3AkYMdAB0EbCjcwcPCDBguevjIR0jHDwgWLACBECRIBB8GJekQMiRIjhxEIlBMFOBADR9FIhiJ5OnAEQB+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mailforward16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRydHxubHxmZGxiXHRmZFxOTFxGPFxKTPwCBLymlMy+pOze3PTq3PTu5Pzy7LSmnOTaxOzm5LyqlNzOtPz69Pz27MzCtLyqrPT27IRubPzuzNTGvNTCxLSelPz25Bw+ZFxKPPzy1Pz65LyupBxKdCxWfPTm1Pz23LyinBxGbGzO5DRafBxWfBxajCymxHTS5BxSdBxKbFTK3EzG1CSGvCyKvCSSxCSavGTO5GRaVPzqzFzK5EzG3BSCtAwiPGxaVPTivPzy3NzKpBxObCRefBxqlPTmzJR2bKyahAwyRPzmvOTOpKyObNS+nPz21AQOFKyOfPzuxAQCBGRORLSadPzyzLymjMy2lOzetDwuJFRCPEw6NEQ6LEQyLEQ6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAQABAAAAfhgAABAgIDBAQFBgcIBwmOCQIKCwwNDg8OEBESjY8CDBMUFRYVFxgZDJyOGhsPChwVHR4fFSAhjwkaIiMOJBQQDRUVJSa3GicoHw4pEA8SGSorLI8tLtQu19gqLzDECTEyMzQ14zY1Njc3ODkqCTo7MjIxNCs5PD03PjctPwlAQUIihhBpQbCIihtG+CUocASFkAhIkogQ8kFJwkcFlogIkoRJEydPnkBR6GiAxiQLgiiIIkXElFQJqESoMsRKkAhXqkhhApNKFSxZggTJ4nHIEJhaDhzYwoVLFy1avHyB6ScQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mailget16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAxKdBRSfCyGvFSm1BxKfCSWzCyWzBRCXCRKfBwuRAQGDDw6PHy23Cym1CSSxByCxBxunBQSFKyurMTCxExihNza3NTW1JSSlMzKzFxaXLS2tNze3KSipCQmJGxmbNTS1KSepLy2vISGhJSWlHx+fERGRPz6/IyKjDw+POzq7JyenMzOzKSmpCwuLDQyNIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQIBwGBAIAsOkUjAgFJRQQMHgjC4PBIEVgAh4D4aEYrGAMhINxwPyiCgYSsmEUmk82grLRZJkYCgXaAEKFxYZcEISGhsZFxwFeY0WHR5CDB8dGCAXG5shGxQicBIMpSMUGxgTGSQlpQwSJicnEwwdI7gdKAwTsykpKiobr8QMKxeHDBcsGRvOzxsT0i0uL9HSHdkT2ZkoMJXF4a8AfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mail16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBGxaVOTe1Oze3OTWxOTWvNzStNzKpEQ6LOTezPz+/Pzy7Pz69Pz27Pz25Pz21PzuzPzuxEQyLLyinLSmnPz67Pz23LSafKyObDwuJMzCtLSelPzy1My6nLymjNTCxLyqnPzq1LyihKyOfOzavOzetEQ6NPTq3NzOtLymnNTGxJR2bOTOpPTivNTGvLymlKSShKyahEw+NOTe3PTm1Pzu1Pzy3FRCPPz65LSadFxGPOzm3PzqzPTmzPzmvEw6NCH5BAEAAAAALAAAAAAQABAAAAaqQIBwSCwaj8ikMhloOp/QpmAgqAoIhELBUDgcEIGEYrFgNBoLx+IBiRwkgQnFoWAwKhWLhX3BZAILGhsCDXgODhwdGB5vgAofICBlDiEiIx4kJSYBJ2UoEykqHSMrLC0nLWAnFS4UCycvMAcEMR0RLTIBMwaSahw0NTYtFwclNwEdLws4eoc2DxwQOR06ASk7PBAhIRE9Pj0tLSUY1T8I5gjn6Qgy7D8SfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mailreplyall16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTFRCPFxKTFxGPPwCBLymlMy6pOTa1PTq3PTu5Pz27Dw+POzi3PTm1OTWvPz25FRSVERCRLympPzuzPTu7NTGvFxaXKSmpPzu1Pz65Hx6fHxqZPzq1Pz23HR2dBw+ZHx+fISChJSWlDQmJHRydCxWfBxGbJyenExKTHRiXPzqzPzy3CQmJDRafGTO5ExOTERKTGxWVCRSfHTS5CymxBxajBxWfPTmvPzy1CyixCSaxCySxDSaxDSWxDSSvDyaxGS21PTmzPz21AwiPBRejCSavByGtCSezEzG3FzK5FzG3GzO5FTK3CQ2bPTixBxqlCRefBxSdBxSfBx2nCQ+dHxmXPzmvLSafAwmRAwyRPzyzDw6POzavNzKpAQOFPzuxBwWTBw2ZGRORLyWdMy2lOzetPTivAQCBKyObOTOpAweNBwWVEQyLEw2LEQ2LDwuJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAf4gAABAgMEBQUGBwgJCguOCwEMDQ4PEBESDA4TjY8DFAwVERYXGBkRm4+QGhsMHB0eGB8bDpyOARogEBceIRgXv8COIiMkGB4lJSYnIcwoKb/DGyoXKywtKS4pHinMLzAxJDIzNDUtNjcv6B0hLzgfMh85OjstPDw99zwd7T4/LTVAgggZQqSIECNHevSAgSSJkiVMmjh5AiWKlClAiFARUeVHFSVWmLS40gNLlh5agGzh0kWDlwZfrIDREKaCAjEqrFA5MMYLmTAxlJTxYoZMozNozqRRs4ZNmy5s3LwhA0dBnDNn5MxBoAABnTp17IitowDrmQV+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mailreply16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTEw+NFxKTFxGPPwCBLymnMy6pOTa1PTm1Pzy7LymlOzi3HxqZOTWvPz69Pz25My+tLympFRGRHxuZPzu1LymjNTGvNTCxBw+ZPz23PzuzPz65PTu5NzOtCxWfBxKbPzq1DRafGTO5BxGbPzy9HTS5CymxBxajHRiXPzqzCyixCSaxCySxDSaxDSSvGS21GxWVAwmRBRejCSavByGtCSezEzG3FzK5FzG3CQ2bPzuxAwiPBxqlBxKdCRefBxWfBxSdBxSfBx2nCQ+dPzy1CRqlAwyRDQmJPTmvPTixLSafOTOpAQOFPz21BwWTBw2ZPzmvNS6nPTivAQCBAweNBwWVNzKpPzyzLyihGRORLyWdMy2lOzetKyObEQyLEw6NEw2LDwuJEQ2LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAfqgAABAgMEBQUGBwgJCguOCwEMDQ4PEJYRDhKNjxMPDBQVFhAXGBUSGY8LGhsQHB0VHh8gFQ6bjgEhIiMMJCUmFbS2CwMnG6IoKSorI7WpEycWFiUsLSou1yXXji8wFiopMTIzNDUz4zbZNxsbODk6Ozw9Pj8pPzEzQDdB60JDOkRFjBw5giRJDCWdlmxwIIRJExAWKDRyMgTIiydLoESRImQKlSUSF1SxUoXAlSBRsGSJoCVICIlbqlThcoBClC5eYFD4EiVIFwUyqywAE0ZMlqNjpJDpIkUBl0dlFChAYOZMmTJoyqQR5icQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mailsend16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTFRCPFxKTFxGPPwCBHxqZLyqlMy6pOze3PTq3PTu5Pz27Pzy7LyinOTaxOzi3Ozq3LymlOTOtPz69Pzy5My+tLympPzqzNTGvLSelPzy3BxGbBQ6VPzuzPz65LyupNzOtPz+/GzO5BRejPzq1Pz23LymjHTS5CyixCSavBxqlPz25LymnGTO5CymxCSaxByGtHRiXPzy1CySxCSezGxWVPzuxKyOhMy6nDSaxEzG3PTivNzKpKyOfPzu1FzK5PTmzJR2ZLyihLSWfKyObOzmzPzmvDyaxOzavLSafGRORMy2lOzetDwuJEw6NEw2LEQyLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAfUgAABAgMEBQUGBwgJCguOCwwNDg8QERITFBUWjY8DFxgZGhsaHB0aD5yODB4TGB+kICEaIiOPCwEkJRcmJyYPKCIpKrWqKywTmC0SIi4vMDHEDCsyMg8zEyI0NTY3z7U4Hhs5Mx+0IyI6OyPrIzw9Gys+PxIy2EBBxAs8Qjk5Q0RFWFxAZySfgSMsilRAkiRECHQ08hHgJ0TJkCU/mECU2ISEkowUlpAQ4QTfowNPoAzJIeRJCyjm8kVRIkWIzSkXhwxJtYAKgp9VrFi5QoWKFZ5+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nav1downarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIYhI+py+0PUZi0zmTtypflV0VdRJbm6fgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -nav1leftarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAP///wAAACH5BAEAAAAALAAAAAAQABAAAAIdhI+pyxqdwoNGTmgvy9px/IEWBWRkKZ2oWrKu4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nav1rightarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIdhI+pyxCtwoNHTmpvy3rxnnwQh1mUI52o6rCu6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nav1uparrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIYhI+py+0PWwhxzmetzFpxnnxfRJbmufgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -nav2downarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIfhI+pq+EPXYpxUckoO3AjbF3dJwahllXe6AFgC8d+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav2leftarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pyxf5VohmSlsxmpjTzAHeN5ak6UHpqKRi2GpwvH3Q3eT64RcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nav2rightarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pq5HOAjQyVnqfhHue7oAaKH5kiW0AmnLqaHomkj02g+e6XwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nav2uparrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIghI+pyxfR0HsRzNnuXVqn3mVQZWFRyIDjp65Ga5Ly4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -navback16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRSdBRObCQ2TBxObISevAQCBNzu/BRGZPz6/FzC3Pz+/HTS5ByyzJze7Mzq9ITC3AQWLAyWvBSavFyuxAwaLAwSHBRafBSOrDzW5AyixCS61ETW3CzG1AQeLAweLAxefBSStEze7CSWtCyatBSCnBRWfAwmPBRWdByixAQSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZiQIBwSCwah4HjUTBQFgkFg3MoKBykU0QhoUAIAuAksbpgNByPxQMSGVsVDYlkIqdUiJYLJqORbDgcHRseRR8gISIaEyMkGCVYRBEmeyAnlgaQkSgpmU4RAZ1OKqFOpFNGfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -navdown16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObCRKZBxCXAwyTKTK3Ozy/NTm9GSivAQWHNzu/FzC3IzO5CySrAQOHAyuzETS3CSWtAyOtETa5Aw2VLze7ByWtBy61BSavAxWdBRCXAwqPAQCBDR+nKTe7FS+1Eze7ByixBRmjPz+/AyexAyixAQKFBRqjAQGDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZeQIBwSCwaj0hAYCkYEJLKguGASEADigWj4bgaHpBINykwSCYRa5HCFFQsF0xGo9lwhpSOwfORYC4gISJ3RAQdIyQYJSAlImNrh4uNJkl5CoKUUBQnjlB4KJ6hokN+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -navforward16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAwyTBRObAw2VDR+nCRKZOzy/KTe7Pz+/KTK3Nzu/Lze7FS+1AyexAyuzBSavAyOtBSmzOTy/BRqjNTm9IzO5ETS3ETa5By61AyixByixBRmjAQGDBxCXGSivCySrCSWtBTC3AQOHAQWHAxWdEze7AQKFBRCXAwqPAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZjQIBwSCwahYGjUjBQGgWEpHNYMBCaT4G2UDggos+EwmBYMBpf6VBgYDgeEMgjIpmoAQVKxXLBPDIXGhscRB0eHyAgDSGBGyJFASMiIiMkJYImUwAnmJqbjp4AKCmhAKSlTn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -navhome16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBDw6PBQWFCQiJAQCBFxeXMTCxJyanDwyLDQqLFRSVLSytJSSlISChCQmJERGRFRWVGxubKSmpJyenGRmZLy+vOzq7OTi5Ly6vGRiZPTy9Pz6/OTm5ExOTPT29BwaHNza3NS6tJRqRGQqBNy6pIyKjDwGBPTe1JSWlDQyNOTGrNRiBGwmBIRaLNymdLxWBHxGFNySXCwqLKyqrNR6LKxGBNTS1NTW1Jw+BEweDDQ2NAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaoQIBwCAgIiEjAgAAoGA6I5DBBUBgWjIZDqnwYGgVIoTGQQgyRiGRCgZCR1nTFcsFkHm9hBp2paDYbHAsZHW9eERkYGh4eGx4ag3gfSgMTIBshIiMkGyAlCCZTEpciJyQjGxcoKUQBEhcbIiorLB4XEltDrhcaLS4vtbcJra8bMDHAGrcyrTMXHjA0NSypEsO6EzY3IzU4OdoTzK0BCAkDMgkIOjJlAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -navup16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObAwSHBRSdISevBRWfAweLNzu/BSOrAQWLPz6/FzC3DzW5BxObHTS5ByyzAyixEze7BSStBRWdAyWvByixAQSHCQ2TAQCBBRGZJze7CS61BSavAxefMzq9ETW3CSWtAwmPPz+/CzG1ITC3FyuxBSCnAQeLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZfQIBwSCwaj8hhQJAkDggFQxMQIBwQhUSyqlgwsFpjg6BwPCARySSstC4eFAqEURlYhoMLBpPRUDYcHXt7RgUeFB8gIU0BIoiKjAcUIwiLSQUkJRsmGIwJJwmEU6OkfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -playeject16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+py+0R3IFQUtruXVqn3kkWyIARR4rqKvoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -playend16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+py8Eb3ENRggrxjRnrVIWcIoYd91FaenysMU6wTNeLXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -playpause16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIfhI+py+1vgoxzyUCxrZd18ClfmIyVyJ1lqkHuC0N+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -playstart16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+pyxudwlNyguqkqRZh3h0gl43hpoElqlHt9UKw7NG27BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -playstop16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py+1vgpySUWpvXXqrHmSaeJEYhKYq6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textblock16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py40Bo5SOzRvrwlgrfnkJOIkPaaaJXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textbold16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIihI+py70BowPQ1HZpwNv212Vg9IGHmIjoWa4ey5DSRNd+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -textbottom16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIVhI+py+0Po5y0hYtzrkB7zH0fN/kFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -textcenter16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsnRkqtDnhu1zHfFSpjaY4PavgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -textitalic16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py+0BgztwUmmjBXX3jE0auHHhM5Yq4xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textleft16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsgRoqr3Vnt102fFSJjUC6nlPoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -textmiddle16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIXhI+py+0PT5i01pisphjt3UmfFZYm5hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textmove16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsg2kfZvblXbwTg10WlA4rjyvgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -textright16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+pm+EPIZstSrqsDhhv1ylfFE5jiYwX6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textsortdec16:text text16 16:photo:16 16:R0lGODlhEAAQAIIAAAT+BPwCBAQCBAQC/FxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM5CBDM+uKp8KiMsmaAs82dtnGeCHnNp4TjNQ4jq8CbDNOroIe3ROyEx2A4vOgkOBzgFxQ6Xa0owJ8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -textsortinc16:text text16 16:photo:16 16:R0lGODlhEAAQAIIAAAT+BAQC/AQCBPwCBFxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM4CAqxLm61CGBs81FMrQxgpnhKJlaXFJHUGg0w7DrDUmvtPQo8qyuEHoHW6hEVv+DQFvuhWtCFPwEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIlhI8Jwe2/AmpTynqPTXSqrnBM+I0kdmpmGmUp+K4nPMvhYx9+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -texttop16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIWhI9pwe2uYnq0yQtqxbz7D4biSIZ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -textunder16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+pu+FxXoOIKpds1oBH7hlYxYxRCaIZ01lhJbHy9tTv7BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewchoose16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMzCLrcGlAs6UAYgwLdLtEcI4ygQo7VVp2oupGpG4vmaUVTemX523qlFcw0a4RqNlkx5k8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewdetailed16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMmCLrc/i1IAVkYg1Z1iRYUKCqitp1oikqBWV3ZOnhkWNagqu+qnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewicon16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCLrcG1AwGOQbw6qANeCEB3pCSZpO6pgowJZqLKuUGE0dnuEhf8IL1kz1shSHDX8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewmag-16:view view16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ+QIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6eUAFCusJSzr7Kmpl0CtLGLvbW2Zn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewmag16:view view16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ8QIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6eUAFCusJSzr7GLArS5Q7O1tmZ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -viewmag+16:view view16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6cAsLECrqeys7WxpqZdtK9Ct8C0fsHAZn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewmulticolumn16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCLrc/ixI0WSgKoyBl+beQFACpo1AqXbKCr1wLAMWS08hGG3dSZqin4sxnBmPD38CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewtext16:view view16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIchI+py40BTQSwuovp3DXkv1ia1IHmIXLiyWJ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -viewtree16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBDQyNPz+/PzerAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAMuCLHcri4yGISlj4kxcANgNRBQCIbL6U1Su7bB62rXvGydG25kqpwfIGxILBr9CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actattach22:act act22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBMTCxPz+/DQyNKSipAQCBISChFxaXDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARrEMgJgqA4zzus/gLhFd5HCcZAXqsphYPUdhcYFNRcZnvdtpnDqPTbUWgAJKBYwzBlw+bRo3xmkNWoBgm0OrVLn3GC9RgCk8DhUw7c0rHPr4CDu5SYQNyEt7uSY3p/UAKFhYKDSQOLiwgFdhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -actbookmark22:act act22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBCQmJCwqLMTGxAQCBBwaHMTCxLSytERGRFRWVLy+vKyqrKSmpHR2dJSSlJyanISGhGxubIyOjKyurGxqbFxeXGRmZHx+fKSipLy6vGRiZLS2tFRSVHRydJSWlHx6fCH5BAEAAAAALAAAAAAWABYAAAWWICCOZGmewamaQrq+wUC8azHINGocOI38iIRAceDNaISFYklkGHOEhoNBfUAOhuOLEJE8HoPiRKFdESiQBqViuTDIUAsEcyAeGJmyiqC5RCwJGg0YcEh9D0V3Dxt6JwQVDRYVHBUdi40mjw0PTgwQHgeYJQQJfxUXFxAOoTkFpQ0fsRSimQkWEQ0VtI62HLt7vjl7JQYhACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actbookmarknew22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCwqLCQiJCQmJMTGxAQCBLy+vLSytERGRFRWVKyurKyqrLS2tKSmpHR2dJSWlKSipISGhGxubIyOjGxqbIyKjFxaXGRmZHx+fPz+NGRiZPz+ZPz+HMTCBKSiHPz+jFxeXPz+XPz+tPz+zPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAamQIBwSCwaj4Gj0hgQLJ+AAaEAVQoI06pRYDhkoYgwIhEgKBTfZ2FhaBsYDS8VWnA8Go0FJIKeqyUTDw8EDHBpSwUUFQ4UFhcYDQYFfkoFFxEQDG8KEAUZlEeWGBIakw4FG1STiBoYBRwdBR4fHgUdHKBEBSCnIR8iIyIfIblFu6ceIyQjtcXGCbLKzAUKzrq+wMLEVa+xs7W31kOTk6nkWuOf6Ea5QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actexit22:act act22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBHR2dDQyNCH5BAEAAAAALAAAAAAWABYAAAJOhI+py90RnIMyRUOxhDfzJkACdoXBuEDDkQFDi5go0MrKx16kns80b7qdELCgBYaEGWwL5nG1ePFiKp9A6kuYRNuho8vxVrrZivmMRtMLACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -acthelp22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBCQuNBwiJAwiLAwaJAwSHAwSFIy+3ERynCw2PCQuPAwmPCxOZCxWdJzG3FSazBwmNAQKDAQGBDRmhBQyTDxujDR2rIy21AwWJDyGxCxmjAwmNDRihAQOFDxmhCxunBQWFAwaLCRahDR6rESGvDQ2PCRWdDRunDSGvCRSdAwWHCwuLDSOzHSmxDyKxBxCZBwqNHSu1DyOzAQSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAahQIBwCAgIBAPCoGAgOoeBAyKhWCwYDUf0CX1AIhLiJEGpBLiAAaRxdgYsl7Ybk8igBZoN5xmAdDxoanp8HyANISF8EBsiXBMjJBolBEQmGHFoRScbKHIKDykqK5lFAZRCnyknTaROLA8tq61OChgtKqyzQgEYEJi6UC4vI3LAASkbMBPARAEBdszR0sACEaPSMTIQM8W6KzNl3bo0NOJDdEEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -actlock22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBHRudFxaXExGTERCRAwGDGxubPz+/Pz2/Ozm7Nza3NTS1KympFRSVHR2dNTO1JSSlKyqrKSipDQyNMTGxDw+PLSutKymrMTCxAQCBHRqLBQODJyanDQuFFxSJFRSJFRGJERCHExCHISChHxyLEQ6HGRaJExKHLSmbLy2fOzitPz23KSiZHxuNHxyNJSOTNTOnMTCjLSudKSaXJSKRJyOTOTetNzWpHxuPOTi5MzKzLS2tFxWXOzq7Ly6vOTe5Ix+RLSqdNzSpLyydKyqbKyiZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBAgMEBQKEjI0GBwgJCgsMDY2XjwkOAgQBDxCLl4QNCaGCBBGWooINCAqqrBKgqwATFKaDFRYVtBMXsIMNGBm0GRADjQIJxKIaGxwdHh8gISIhGyMZzIwkGholJiYfJiAfJyEZISDbg90oKCkqKwcHKyooLC0f7IIuLzD2YMSQgW8GDRri+AFoUMOGvRsxUhSsQQPHvmQSchyQtEAHhh0WJHDQcJERjwsKDvRI0BGDjwgicXhQyCOjSgUKPO6AObIkIQESfmxk6REDT4s0bfaYpDNkT4VAha5s+TLmzEYtatwIOHAiDZIKNQAJYk9IjCFEisyoocFEB4UACtBpm0t3LiF4gQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -actredo22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCReDJzGjMzivOTu3Pz+/JTWbHy+VHTCTMTivPT69BxGDESuJDyiHESiHEymJIzKZAQCBFS2LFzKNGzWPDRqHCxqDFSqLHy2XESCHAwaBAQOBBQqBDyWJHyqZDyKFGSiVESeJBQ6BAwSBGTGPFyWPFSSLEyOLESGJBQiDAwiBBQmDCRGFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaoQIBwSCwaj8hkMcBkKpcBwYAwEDif0YLhwEUkFItFMkAwMBoOR+PxgHwjRDggamhIJpQ8ZbKGKOQLcgEFdhUWEYgRF3sNfhELBHALAhgZFhobRBwREhQdEAIEHpIKHwsaSJwUDQgQIJINARxKESESDQ0dgCIjSpAkDAwPco+ZSJAlJicnKHIAIrNHidOIQxunT0kpCyrZSCss0d5Fj6jjRonn6uvs2QZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actreload22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBCRSFCRSHBw+DBxCFCQ6FBwyDBQWBBxGFCxyLGTChMzqzLzmvHzKjDyOTER+RERyNDSqXNzy3LzivFS+fCyCPBQmBCQiBBxKFBQqDOTy3LTitES2dDR+PCxuJOT25KTarCx+PESSTCxKHDSeVCyKRNT21ESWVDSGPBQyDAQCBBQSFDRuLDSyZDySTGzChCRiJKSmpExKTDS2ZGzGhLy+vGxqbISChDSKRMzKzGxubDQ2NIyOjCQiJCwqLBQWFCwuLKSipERCRERGRHR2dAwKDDw6PFRWVIyKjCQmJFRSVBwaHKyurAQGBExOTBweHFxeXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf9gACCg4IBAgMEBQYHhI2ECAkKCwwNDg8QBAOOhAQREhMUFQgWBxcHGBmbggkaGxwPB4yDB6SbBJIKHQaqtY0eHyAhsqrDgx4aCiKpqoQHAyMjJBMKJaSxzAAHIRsmJgonKA0LHSmDKiuOBywRLSQuLyEwwyoxMuiN6iUzNBXy5jU2bsgoJugABBz95uXQsUMGD3vpPPgTpKIGwx4+HMr4kW4YkCA2hAzxAQSIECI+imBTwVIFESNHerRUgc0cEiFHkjiiyYzeDiVLdvLcySSkkKGEWiZVweSGkIHMmvQosoQlkaZOjvhosvKJjIAxoOAsgpRZkQNLnvSoqspAIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -actrun22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAwKDAwKBCQiHNze3AQCBBwWFDw6NPTy9PTy/Dw2NKyytOTi3LS2tMTKzMzOxLy+tLy+vBQODNze5NTS1JyalIyCbIx6VIRyVISGfJyelOTq7EQ+NMTGxKyurGxeRLyKPOSmROSuVOy2XOSiTLzCzNTOzDw+NCwqLHxuVOy6bPzGfOSuXNTW1LSyrMSWRNymTOSmTKSCTPTGjPzSnPzWnMyaVBQSDMTCxPz+/KyahNSeRHxeLJRyTPzmtPzarOy6fJyajNza1Ly6vLyulFRCJPzirPTOlMS2pNTSzMTCvJyenBQWFNzKtPz6vPzyvPzqtOzGlOTe1AwGBFxWTLy6tPTm1PzSpPzutPz2xPTSnOTSxOy2dPzapPzerOzm5IR+dPzu5Pzu1PzqxPzy5Pz+9GRiXGxuZKympHR2bOTm5Pz6/MzSzBwaFJSSjCQmHPz2/AwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeEAQKIjIIDBAQDjYMFBoMHCAkKgwYFhwULDAUKCg0ODxCkBQgRnoUSExMUDxUWFxgZGpAbFIuGHB0eHyAhIiMkIB8lJieIKCUpJCTGIyorLCktKIUDpC4YLzAxIjIyMzQ1NhgdpJI3ODktJTowOyM8Ejc9Pj9AQUIEclAocCMIBQhDiOwgoaKIoCI+jBxBkkSJkCWemIyq0GSHCBVHihRx8gRKFCmpKhGaQqWKFYZXsGR5kkXLFgRUXBUqkCGCFS5AjnTx0sXKlyA6CRVgAAHMAilhxIwhU6ZFkBY5kgKYUoXBAzMKzixZ4AJNGgVm1KxhM0WpmQpUMtooaOPGxAM3Nw60oYLGjNYCbzYJOgAnRzNBJ95oPYQCgpJtkwzFoULlRuRPiy9fNhAIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actstop22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAASC/CQKDBwKDCwODNyKjPzq7My+vIxiXAQCBOSOjPz6/OSelNySjNyGhMR+fLRaTGQ2LPz+/Nx+dNR2bNRybMxuZMxeXMxiZLQSFJQaHFwqJNyKhOSCfNyCfNR6dMxmXMxWVMRORLQODOR+fOSSjNR2dMQ2LJQWFMRWTLwWDNSCfMxeVLwaFKQODNR+fNx+fMxiXKQSDOSWlMRSTMxaVMQ6NMxORMQyJOTS1MxqXLwWFLRORMxKPMQaHMxKTLQWFCH5BAEAAAAALAAAAAAWABYAAAb2QIBwSCwajwGBcikIHIsDQmFKNRwQT2EgoVgsGOCG4wHBIgmRhWRCqVQsF0xGYyYGNgoGh9PpeCQfICEic3UAAWgLIxwRJBsbHSUREyYYJ3RDAQULexGejhueESgpl3WaCxsqJKKsChEUKywtmFoFDC4vCayikzCyMbWHt38NCTKiHhUfMyzBdQIFKsodob0VNDWzwppuKxMRrx6iNjcitNA4bh+iEzkwojc66JkOOxcf7G35PBE9KS1MEUGgIQOIFfk++KjRw9wJgUUIZvhRoyLDFCliQDQisUWLGCJOeNx4hKCGkyhPGnqCoKVLl1liypyZxUAQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actundo22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCReDJzGjMzivOTu3PT69MTivHy+VJTWbIzKZEymJESmFESiHDyiHESqLAQCBFzKNGzWPFS2LNTmzCxqDDRqHPz+/KTGnBQqBAQOBAwaBESCHHy2XBxGDOzy7HTCTEyyJDSqFHzWTAwSBBQ6BIy+dESKJFySPFSSNAwiBCRGFBQmDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAalQIBwSCwaj8ikMsBkKotMwYAwEDiXgYLhwD0gCFZiQKxNKBYMRqPh+D6G16y5AYnYIxBJAyF4AwITTAUJdBESD4gPFBV6Fn6ABBcJDIYPGEQZGhQbHAIdfx4JHw2VSBodGwWfAR4LDSALfkgYAQurBiAhICKfSSMkvQElGyYnGyi9Rxkdj4nOskUYyU9FpxnURikdGtjRKivdRKfQ2Inh5+jpRwZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -actunlock22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBGxqbFxaXExOTEQ+RAQCBPz+/PTy9Ozq7Nza3NTS1KSipFRSVOTi5Hx2fJSSlKyqrJyenJyWnDw6PMzKzKyurDQyNFxWXMTCxJyanHRuLHxuLGReJFxSLFROJFxWJExCHERCHBQODISChHxyLHRqNIRyNHRmLLSqbKyiZLy6fOTarPz67Pzy3OzitKymZFxSJJySTNTSnPTy3NzSpMTChLSydKyqbKSaXJySVIyGRGReLPz23NTOnMzCjHxuPLy2vKSmpOTe5LS2tLSutHxuNHRuPMS+xFxWLIR+RDw2HFRKJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SDAQIDBAUChY2EAQYHCAkKCwyOjZANDgIEAQoPjJiDAg2iggQQp5gMBwmrDBESl6MTFKuoFQSjABYRF40CGAW8BRm7hQwNxBobHB0eHx4gISIjBdiEAhYFJBslHOHSHh4hBSHlxIUmJygpKissBiwtLi8pGjDqhBoxMjMuaNSwcSMFjhw6dnjYRyrGCh4ueviw4Q5HDB0/PjAUJCBCAwMIGiiggAEIBFk/FgYLIgRkggQkhxAJkqGExkYMFnxsIGRkSQgLHhRRWUjAggQgG8AsSWRBBiP6VrYMOfKIyaBDNwLo+HHSUplOSyDRqiEHjRkretRQkcLgxayNF0wksQGQxsSKMTIq0QpgCba/gAE7IhMIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -appbook22:app app22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBDyGhCyCfFSWlESOjDyKjDSGhCx+fGSinGSenFyanEySjHSqpHSqrGympEySlBx2dISytHyyrCR6dKTGxHyurHSurHyytGSipCR6fARmZFSalEyWlBRubAxubBRydDyKhDSChLSytPz+/MzKzIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbFQIBwSCwaj8ikMhBQIpmCQdM5ZBIKhgNiugwkFAsCI7pNMhuOxkNBgBgEiAi3GkBLJpJHYgEpaClyREwVFhcSEhgOGQoMfgMaERtcARQBFRMYExZ6HB0FUYAekkIBHxqWFmlrC1haESAfG6MBGx+VFRgKYH0hInGRklO0ppYXCwwMWQiQHkwjgrWnFRdYZHIBJCTP0LaWGAcDW9jZ2nMAw9IWTOQkJSZMRsOV49nu8E+19PbmR7TY+1TovONH5V7Ag0QMBAEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -appbookopen22:app app22 22:photo:22 22:R0lGODlhFgAWAIYAAAQCBAQ2NPwCBHSurIS2tBx2dBweHPz+/Ozm1GxiTGyqpPz6/Pz69GSqpOzaxPzy5HxuVLSmlOTazPz27PT29NzClPTexHxuXLSmjAxqbFSinPTy9KyehNy+lPTy5Pz29HxyXNzWxKSahOzexPzy7IR2ZOTWtESenPTy7KSWfIyCbKyijAQGBDyalPTu3KSSdDSOjJyOdCSGhPzu3OzizJSGdPTq1PTq3JySdMy6lAyKhOzWtOzi1OTOrJyKbMS2nJySfMS+rAwCBNzOrNTCpNzKpJSGZKyafLSifLyylIx+ZHx6ZDSChAQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAWABYAAAf/gAABAoSFhoeHAAMAiI2IAAQFjI6EAAaJkQeTjwAICYkKBQcLm5WdBwyfhgChB66bp64HCQC1lQ2irqQCAA4PowsLEBESE4wAuLIHFAAVFr+uDBcYxRm1GrmuGxwdFh4Mrh8gGCET1gDYyhsiFSMkDAsMDCUYJhvnJ9kHKCnODwwfPlBQsULCPRYAWogK9sHFiwoOPEyQh0JFPXO1YBSYwBEFghjdHkwQOYGgwQwIZRR44GHGDBogabhAsYEEihrUMAIoUMCEDRs3HODIYQHFA6MPcJA7KICFjgw7eIzo4cOfiwc/gKwIUm2SkKdDdlDt4AABDaU/iIRwwbTSUyJFOow4S3Hkx9oNDDZgXPU0h1wcSIgEGUw4ibVET5WoWMKksePHpdxmyKADAEIWly9HJtQkQJMmlAgZCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -apppencil22:app app22 22:photo:22 22:R0lGODlhFgAWAIMAAASC/IQCBPwCBPyChMQCBPzCxAQCBPz+/MzKzISChKyqrDQyNEQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARYEMhJ6wxiEMtpIAWxddwXiqRlikSQeiAbuC+wirNR322gv7zcLobzDU+9XypoBBKTR1lz+RTWDgip8nUwZK1XLyIx5XoVicX2RUAo1DVKi7GOBxjxfNwQAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -apptool22:app app22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBISChFxaXNze3NTS1Ly6vKSipNTO1Ly2vNza3Pz+/MzOzOTe5DQyNOzu7MTCxGRmZMTGxPTy9Ozm7Hx6fPTu9MzGzGxmbAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAW1ICCOZGmeaEoGbBsI6joMRGEcbQwESDIrtVtAF1gwDLNaAmfKiVgLBJKgwB1KxQZrBHU0FAXmavFoQLYiB6TxFXMj5AZBwnJI2I3wcNWALyYEcgoKXxRhOHs7XxEVCwsWFgoUDRYUFwwQB25ZCxiNjo6GkwUXN2NsCxEYqhUHoQ0MEglYRQQXErcHrI55FycuB2YSmoyOBTEtB2sXuhU6XAENC2a6z9AKCwq+1tAN3E2J3ySkIQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -connecting22:connect connect22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBPz+BMTCBISCBAQCBPz+/MTCxOTi5AQGBNze3Ly6vISChNza3FxaXKSipAAAACH5BAEAAAAALAAAAAAWABYAAAR4EMhJqwzY6omD+MNGdR8YilNZnug0qGzrqrL1lnV1fyJBVB6VQEMoGH4ADGwQkxQPBwMiKGA2J8VEAnq0tgiKg5aL/C7C2gTjKCM0zowDQ8tuNQznNL7cKzjOUQsNfER+gguIg19+Pm6ChBZFDmWNi5M5FIyYFHQRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -connectno22:connect connect22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBPz+BMTCBERCBAQCBPz+/MTCxOTi5Nze3OTm5Ly6vNza3ISChFxaXKSipAAAACH5BAEAAAAALAAAAAAWABYAAARiEMhJq7046827/+AVCKE0Dh9BAGdaGISAToFGFMcBU+11I4hDYseSZQiKwwKoI/QwBIYiuFDCZseGdIlYEjUNg1SpY6w2N4cUIW6cjwW1lsFwo+MqgtZuw0/ydw5vH34lBhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -connectyes22:connect connect22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBKyirPz+/KymrOTi5KSipMzCzNza3OTe5Ozi7MzGzPTq9OTm5ISChMS+xFxaXNze3GReZIyCjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWLICCOZGmeaBkAQpoGg7C6JizTQT7CxPwOwFWgYPChYIXkIHC4uQKGAiKRKCyNpxxUUVViVYNFLkqtLo+DAkMMLXQPXwAy2WCTF4544FGtKuwPDhB6DnxuUmyCcXIQhV1uYoMuEAcOBxEKCHg6TzGFCJUSizuejROKOAM9OY2SnUU7nD89NCcDsLUnIQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -devscreen22:dev dev22 22:photo:22 22:R0lGODlhFgAWAIcAAPwCBAQCBPTy9PTu9Ozq7OTi5Nze3OTe5Nza3NzW3NTS1MzOzMzKzMzGzMTCxMTGxOzm7AwGDBQOFBQSFCQeHCwmLCwuLDQyNDw6PERCRFROVEQ+RDQ2NLy+vKSipISChGxqbExKTOzu7OTm5Pz+/GRiZMS+xLy6vBQWFLy2vCwiHFQ+NMSmfNSyhIxmTDwuLJx+bLS2tCwmHMyyhMyqfPTqpPzyvLSWbLSWfPzitIx+ZDw2PAwKDCQiJGxWRPTmrPTerMyuhPzqtPz63PTWnPz6zNy+nIRiVDQuLKyWbOTanPz21NS2jNS6lDQqJHRaTPzmrPTSnPzyxOTClPz2xNSuhPTqxPzuvOzSpAQGDOTKnMy2jOzSrPTu1NzKnOzOnBwWHJRuXLSWdPTatPzqvNzClCwmJOzSnOTOnPTuxOzKlOzerOzarOzitJR6ZNTO1IxmXPTWrNSyjPzOjPTSpLSehHRqZOzirOTCjPS+fPzGhOy6bOzKhGROPMy2lPz+1PzmtKRyRHRiNNTCdPz+zNzCjEQ2NKySdDQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAj/AAEIHEiwoMGBARIqXMhQIUIBAwYQIFCggIEDCBIoULBgAYMGDgIIDEBAwMSKBRBk3NjxAciQIwdACBBBwgQKFSxcwJBBwwYMHBx0EAmA5EwPH0CEsCChoYgOQ0cSGCHhA4kSS5syJGDiBNEAFVGUKKEBAwWFFM6SNJHi64gDFEKE4FBBggoKK1i0cPECxokYXw0gsECYggQZM2jAqGHjBo4cOtqOxLhDAg8ePXz8ABJEyBAWRIoYOfJipEoMCZEkuaFkSAslS5jUGJKkSRAnRREo0JDwCZQoTKQAmUKlihQrVa5gKZ1lI+oAK7QM2cJlSZMuU4Z4+TJEx0iNOwKAggkjZkyOFmS8kClzpcUQLRRGbjRD4MgZNEzSqKG+ZgobI2248dUbDDDwABzcxSEHEFpgEcUcdMRRhx1fFejAAx0cgcYdSxiBRx566LEHH0d8QFRRNC3Uhx985CHEH0MAEkhCBxWkgiCDFEFIEYUYUmONMhyCRxVH/PgjBYioYJAdAQEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -editcopy22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFPz+/DQyNISChDw6PMzKzMTGxERGRIyKjFxaXMTCvKSmpHR2dPz6/Pz29PTq3MS2rPz69MTCxFxWVHx6dJyWjNzSzPz27Pzy7Pzu5PTm3NTKvIR+fJyGfHxuZHxqXNTCtPTq5PTi1PTezNS+rExOTFRORMyylPTaxOzWxOzSvNze3NTOxMy2nMyulMyqjAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbYQIBwSCwahYGkUnk0BgTQ6IAQaBKfUWhBYKhaAU+CgXAQIAyChLeJzSIQhcH6GFaM0QtGY5kstqEODw8QEQELAhJTc08KBBMEFBUWDRcBE1pca20SGBkaEBscAY5maFRIAgoLHRQRHh8gIQFlZnByqA8ZGSIQIyQjJQEmYgJ5p2ACrK4gJx4gKIZZAgdeAQ4ZI9kjKSor0AwEjeAs1S0cHAslLi4vMDDRWeRIfEsxMeET4ATyVoYLC5fizXEiAR84BeMG+pEm8EsAFhAjSlR4hR6fLxiF0AkCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -editcut22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBAwCBPz+/OTi5JyanOzq7DQyNGxqbAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARbEMhJq704gxBE0Bf3cZo4kRJqBQNRfBucyudgvJS6VaxLzyMa6/bLiWA9HOg4VIIkL5vzuRkcpkvRIIAorphJLzBW84WEuRZWp6uaT7J2Sh1Hit3OY/ZO7WvsEQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editdelete22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIYAAASC/FRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwKDAQCBExOTNze3NTW1MTGxLS2tJyanPz+/Ozu7BQSFCwqLDw+POTi5PTu7MzKxIR+fCQmJPz6/Oze1NTGvPz69Pzy7Pz29LyyrPy+vPyupPTm1BQWFIQCBPwCBMS6rPzSzNTOxPTi1NS+rPTezNzOxPTizOzWxMy2pOzaxMy2nPTaxOzOtMyynOzSvMyqjPx+fOzGpMSihPTq3OzKrOTCpNzKxNTCtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf8gACCAQIDBAUGBwgJCgsLgpCRAAwNlZYODxALEY+SkAMNEqKjEw0UD5yegqCjrRMVEqidkgWhraMWF7GptLa3EgEWFRSOnhW+vxgZEBqzkBvItxwdHryRCNGjHyAhHSLOgtgSI60c2yQjJd+eJqEnKK0hJCgnJSngAO0SF+8qEvL0VrBogW+BLX4oVKgIyMIFQU8KfDV4R+8FDBcxZBREthAFiRIsOsygsVEUh4Un3pGoUcPGjZInK65QicPlxg8oX5RwqNJGjo0hdJwQ6EIkjRM6dvDYCKIHSBc1Ztjw4eOH0oIrsgIJEqSFDBo0cuTgsdSTo7No0xYTZCcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -edit22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBISGhISChHx+fHx6fHR2dGxqbGxubGRmZGRiZFxeXFxaXFRSVIxSLPyuXMzKzMzKxMTCtExOTPzqrPz+/NTS1MS+tOSaVPyWNPz6/IxeNPzavPyKBNTW1PyCBPyGBJxmNPzOpLx6PNRqBMSCRNySTPyCDPSGBMxiBKROBHRydPSylOyydMxmBJxKBAwODPS2lPTq3OyabJxGBPTy5PTGrOyOXPR+DPz69PzmzPzevNxuPORqLMReFPzy7MyCXKxiNIRKHBQWFNTOxPzixJRaPFxONHRqVPz27PTy7PzStCwqJDQyLJSGdIx6ZPz29PTu5HRmTLSKbMSGZHROPFxKPJSKfJyShKyehMyuhDQmHEQuJJyOfLSijMSynMS6pLSefDQyNHx2bKSahLyqhLymhOzi1FRGNIR+bNzKtOTOtOTKrOTKpLyedAQCBFRWVPTq5NzOvLyunLSmlNTCrOTOrNzGrLyidMS+rLyynKyijLymjLyqjAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gAAAAQECAwQFBQYHBggJCgsLDAwADQ6CAQ8QD5ydEJ+gERKWE4ICDxSpqhWqqhYNFxMYphCtqaytGRoXGxgcggSoth25u70eH8APFR0VzMzNziAXIRjIvwAFwq3EqSLUGB/iI4LathS4JCXVJh8nKCmCKrXDFCss1eIfLS4v8ssdmgWsAGNDDBnt3s3wJ+jAtlUhaNSwccNEi4WCBBl4SAHHihw6ZOzg0QNjRgAG6KXK4CNEjBU/gDQI8kLISQAIADobAoMIzCINjLw4YvNkAno4kCRRUuNHESNLmDRxUjSjAlRPfECJImUKlSpMrFzBIqWqoKtJaWSJomULAy5XXrp4+QKGYcYFoCBEWRImi5gmY7CQyVLGriAGD2jEMHMmCxc0Xb6kUbOGTRs3N988gLM4jpw5Y+iwqcOGjZ07mE8yiGABz5c8c/Ts4cOnDJkybS7fdMO7t+/fvDMaCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -editpaste22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQWFDw6FHRuFGRaBFxSBAQCBAQKBCQiBIx6HPz6/NTOfKyiXDQuFOTm5Pz+/Ozu7PTq5Pz63PTyxNTOjKSeRExGLMTGxMzKzNTS1NTW1Dw2NKSmpKyqrKSipJyanNzWlLy6ZLSuVIx6FISChIyKhJSSlCQiJLS2tDw6NDQyNCQiFCQmHBQSDGRiZHRydGxubHx6dGxqbFxeXGRmZFxaXCwuLOzq7KyurHx+fDwmFEQuFCweFCQWDBQODBwaHBweHKSinJSWlOTi5JyepHR2dDw6PBQSFNze3ERGRIyKjIyOjISGhPz29Pzy7MS2rMzOzFRWVHx2dHxybDQiFPz27Pzu5PTq3PTm1NTCtJyGdHxuZHxqXPzq3PTaxNS6pFxWVFRKRNS2nPTi1PTStNSulNzOxNSynMymhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCgwABAgMEBYSLggaOjgcICQoLDA2Pj4MGDg8QEZ4FDxITFBUWFxcYGRobjQ8cHR4fCQ8gCyEiFSMWJCUkJieNEB4dKB4pKissK8wrLS4vMDHBAAYQHx8dFx0fJDIzNDU0M+IyHzaNNyg43Ng5Ojs7Ojw9Pj9AMkCNDiZB/h9CSOx4QLCgihItqBkYgqIDESElitAYWJCgkQcXjjRCgi1Ihw4BB5LAQOLCgyQYHihpUU3DBw5ElpAgAYNixSRJjKjQaECDCRPZPDB5IbIGSQwKLnh4wbInLA4kmJB4oaPiAwVNnER40hRK1BIAaVatUZJEFCkmpmjgCeWDCalFe4q4oFKwSRUrEa5gycLzwq8lUnPQ4PEgSpYcUZ5o2cIlS1O/JHLEDdfjQZMIVrpgweLFy5e+M6WSmBGlxYMYYBRzCaOFi5imHWBIfOEiShLTVjaP6eyFTBmN1TA5OvLDjJksWb58OVMGDRqWjAYdmU79SIvpjqJr104nEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -editshred22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBFRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwKDAQCBExOTNze3NTW1MTGxLS2tJyanOze1Pz+/Ozu7BQSFCwqLDw+POTi5MzKxPTu7LyyrIR+fCQmJPz6/Pz69Pzy7Pz29OzaxPTu5PTq3PTm3My6pPzu5PTq5NS+rPTm1PTi1PTezOzWxPz27MyynOzSvMyulOzOtOzKrMymhOzGpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbpQIAwIBgMCAXDAZFQLBbCqJTRqFobjgdkEYFKowPJZEyeUBqVR/crHDTKZYplovZKCW84+YKZZNZSBXl6EwEEBhVPXxZihGMaGRscdkIdg4QeEnVfCH2OHyAhIhuUAAiXZSEhIyQlJqWnjiEnKCWupRWoYyEgJK0SKaUKjam0JCorLMFfC6iqx8giLa/MGAsT1wsuCyULKwssC9RSzdkfCyALKuALLQsvpeXYIQso3gsiCzALMfENC+dGcMNHUAY/f+jq3ctncMYCGggFrsvHcEGNh/EyPFmg8cmrJxAVkVO0EUDJklHoBAEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -edittrash22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBERGRExOTDQyNISChBQSFCQiJCwuLPT29Nze3GxqbDw6PGxubHR2dJyanLSytJSWlJSSlOzq7Pz6/Nza3Ly6vFRWVBQWFIyKjMTCxHx6fIyOjLS2tOTi5PTy9OTm5Hx+fNTW1KyurKSmpJyenExKTMzKzKSipFxeXCwqLMzOzKyqrMTGxLy+vHRydBwaHNTS1DQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb8QIBwSCwaj8KAMoA8LgUDQsFwQByay4RiwWg4GA9IRGk0SCYJSsUCsVwwGQ1EsmESD5xOp+L5gDwhBRIZDhcDdkMGDgEiIxAkJQ8Ok5MmAohDAQ1xJxUlKCUlEg0pKpiZJRoLCxmtCw1eURhOcR4rbQ8cGRwLAwgGtBYTDywtGRKjvQTARgEZLhMcKC0OrQMvAirMRc7CHCTU1g2+20TO0NIn1RwDCya/wdHT1Rnt5LToKOq79trx0tR02YPX7Jm8fRxMOIhSLhOJE/LCJSTlr5kFEBQsWDiR4UGGBgsuHDg1BEYAfTE6oEBR4AIBAiS5yWBAAAGBAyaPGAgCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -fileclose22:file file22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBERGRERCRDw6PCwqLExOTFRWVHRydGxqbGRiZCQiJISChIyKjHx6fDQyNBwaHJSWlKSipBQWFJyanPz+/JSSlCQmJAwKDCwuLBweHBQSFGxubExKTISGhDQ2NFxeXFRSVDw+PAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbZQIBwSCwaj8jkMSAYDAgEJbFgOBwQCUOAoJAaFgvGonHIBhyP5BcSgUAYDWxggD4WFmx3e3HQngkSRgYMEBMUFG4MCId0BGlEAQeEhocVDYcUdBYKF0QCB3gRlJgUAQEYBBkaRAMbDZMMpAYcT46rQwMJrgsdC6QcfwoPnUMOBgkIV6SHHg6bw0QEAQYfBpggBZjPGsRD0gEchxwCIR6HChnQRQ8DIU4DTR4Em+ncRw8O+fmoXPXdRg+gQLFgIYM/KRIkoDP4QMKFf0o0aBAh4qGUixgzCrETBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -filefind22:file file22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQSFJyanLS6vLzCxISChNTe3OTu9Oz6/Nzy9Nzy/NTy/OT2/Nzi5Mzu9Lzq9KTe7LTq9PT+/Pz+/Nz2/Mzu/Kzm9Jza5HzK1LTi9PTu9IzW5ITO3FxaXNT2/KTi7Iza7GzC1LzW3FRSVMzO1MTq7HTS3Fy6zFS2vKzm7Lze5MTGzHzS5FTG1Ey2xEyyvJze7JzW3ITa5FTK3EymrGS+zFxWXKymrMzi7ESirEyqvLSyrKze7MzOzMTCxKSepAz+/NzW3MzKzBwWHLzS3ERCRAzi3KyurNze3MzGzLy2vLSutCQiJAyytHRydOTe5MTGxLy6tLyqpKyelJSCdOze3NS+tLyupLSmnKSOhCwuLPzy9Pzu7Oze1OzazOTOvMyihOTi5PTm3Pzi1PTazPTWxOzOtNSunDQyNPzy7Pzu5OzKrNzSzNzGvNS6rMyynMymjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCgwGFhYOIiYQBAgMEAwKHiokBBQYHCAkKCwwFAZOEBQ0IDAsODxARCZ6gAAEGEhMSFBUWFxgZCJ+TjBoMEpkRERscGBGRih0BBAgeFBQOER8gISEfIruIIwEkCCUVwhcgJicoKSrZg9srCRkRGdMsLS4vMNiK2wIKMRsbMiwzXtCocSydIBs3AuCIwIFDiBMucugAoWvSiB2VNPDg0ELHwA0MkCXr4aNSggg8NoDIQOFHgBtAkgURMiDAEAFEVBCJFKCIkSMGOyDRkETJEkOFmABoUsRJQkQdnkzQACWKlBtTplBR6qopxkFRJ0ytYuWKFCxZtBBq+hRA2AlbRrh08fLlCxi1a51g+dQhDFwuYsaQKWPmDBpKXgNETaNGjJgyhNfcVdTTiWI2XpK0cePmzRk4YA5T5otGixY0qFOXbgXAQCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -filenew22:file file22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBExOTERCRDw6PCwuLBwaHAwODAQCBOze1NTW1OTi5Nze3MTGxLS2tJyanPz+/Ozu7OTi3BQSFCwqLDw+PDQyNFRSVPTu7MzKxLyyrIR+fCQmJPz6/NTOxPz69Pzy7PTu5Pz29Pzu5PTq5PTm1My6pBQWFPTq3PTm3NS+rAwKDPTi1PTezOzWxMy2pPz27PTazOzSvMyynOzaxOzOtPTaxOzKrMyqjOzGpMymhPTizOTCpNzSzNTGvMymjMSihCH5BAEAAAAALAAAAAAWABYAAAboQIBwSCwaiYGAYEAgFAqGg/Q4DCASCsTiymgcHAcqQLB4mM+QiIQBppLPcMjkwQ4bB2X4maKgt4sVCHpnFhQTElNFE3mDDxcYGRp2RBuMgxwIHX9EBZZwHh8gCBmTQ52NISEiIyQlpUImng8hHyInKAgprwAqgnC0IKwrLLpGB4wctLYkwy0uuwd9Z8AnJywsLcVFx2YcL7UnJCwwLTEy0GXJoSgrCCwzNDTnxgjeH9UrKzXwNDY36LRGhEOwLx4NHDmgJbh3QoeOgv127EhojEeHDj16pEhRQoZHHzl+QJNCsqTJSXaCAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -fileopen22:file file22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAQCBCQWDCwaDDwmFPSubPzGhPzCfPy2dOSmZPzKlPzSnPzOlPzKjBQODPzChPzWnPy2bPSmXPyuZOyeXIRSLEQuFEwyHEQqFDQiFCweDKRuPFRSTPT29PTy9Ozq7OTi3Nze3NTW1MzOzMTGxMTCxLy6tLSytKyurDQyNMzKxOTm5OTi5Nza1NTS1MTCvLS2tLSyrKSmpJyenJSWlIyKjHx+fFxeXBwaHKxuPMzKzLy6vIyOjHx6fDw6NPy6dGxubLy+vISChCQmJNza3KyqrBQSFLR2RKSinJyanGxqZAwGBJSSlCwqLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeDAYqKiIeLj4wBjQCMhY+NkoiLk5qbhQIDoJyGBAUGBwgEo4MECQoLDA2pDrS1tKQPEAwHERITE77AvxKqhAQNDA8UFRYXFs8YBAQZGqGPxw0RGxwdHR4eHyAhIiMkJSYnKCgpBAYPEhcqHyssLS4kLzAxMjM0NTY3cBA4UCAHBw8gVnhgEcKFjhc7UPDj0cMHAAI/KFgY4YLFio/jRpTYsW8GDyCSCEQw2DChOHIqgsCQSEPIEEEEJFhAoUNECCJEyOk4d6KIyRtGcB7hIJKjixEjHu4oimSGEIs4d8IIUoKECnNB0ElMwkNJJgBLlJBAcQKGiR07KGAURVGViY0mhIwwSTKjr99+THjUoIg0r48hTRIrRtxkiOMhDgrZCQQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -fileprint22:file file22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBFxaXDQyNFxSTPTizOzi1FxORDw2NExKLPTi1Pzy9Pz6/FRWVPz29Pz2/PTy7PTu9OzezPzu5OzavAQCBPzy7PTm3OzazOzKrPTu5FxSRERCRGReXPTq5Pzu7ExGTMS+xKSmpOTKpPTq3JSCDNzSfHRydLyadOzCjOzOtOzSvLyyTMTCxKSipGRiZFROLPz+/KyurJyenJyWnGxmbLSabOzClOzm7LSutJSWlJSSlJyanGxqbNze3OTm5IyGjNTO1Nza3NzW3OTe5IyKjHx6fMzGzMTGxMzOzNTW1IR+hISGhKymrLy6vLSytERGRGxubKyqrLy2vLS2tDQ2NEQ+RASKBAT+BFxeXHRudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAgOEiYqEAgQFBgcGi5MICQoLmAQDh5OEDA2YCw4ODxARApKUCaGYEAsSCRMUnQysCwoVEhYXGLOLCBCgDqK5GQUXGooCAhscBB0euBUZEAUJvQgIgx8gIR8iCSPiHuIFEREDJCXaANwhJhsnKCnWERcRKiopFCvsBywhQrRwQWGAPAz5EhpQ9wIABRgKYsiYMTEEDQocatiwkUIEP18fbkCAAcMBjhwzdOyQwYNCgBMfKJSgMItBjxs+btwgCSGGjhw/ZoRgQKGZCRMUPgABEgSIkCE3SZok8qNqkR85NtDUEcPIkaVAkCR5SrJBDCVKlmzQ6pCCiRlMTJo4YUH3K5AeMBYYWctW0BOaUH60cBJFypQmII6wyEpFQBVFMSm4UAI3hJUrOGh8oOJrklYKWIromJGDR99Ogz5j4ZGlM+pEnwmBCwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -filesave22:file file22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBGxqbAQCBLy+vERCRExKTHRydIyKjMTCxFxaXGRiZFRSVFRWVPz6/Nze3Nzm5Pz+/JyanDw+PExOTHR2dMTGxBQWFLSytHx+fISChOzy9Ly6vAQGBJSWlMzKzAwODJSSlHx6fIyOjOTi5DQ2NISGhGxubCwuLOzq7ERGRFxeXNTW1CwqLPT29Dw6PGRmZKSmpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb/QIBQGBAMj8ikUDAgFAzKKCBwQCQUCcICKh0SEAhGw5EIZAmBrgCxeDQgcDJWyz0GIggJfL+XGwQJRxNgC3yGDwwUFUZDFhdthnwMGAZNQwEZFwQakXANBBQbHIIdERIBnRAOiR4ERx8gsSEMBBmGCyEGG3YGBwcgIr8UCwQHECOgG4xCtRkEJAvBJRklJgkSFBQeJ68hJiEoESkFKiEZIbkGARsLlwEGExENGhorGSkpFAYm66NDLAECpGiBYsUIFA8wLHBBQMWLVkdUCFCwaYVFBOymkVCgYEMgOykEpICBccMBAhhELFigTEqAAgIIwCiQ4eRKDyS6EAlJIAI0EpaudF4iIKDAAn9CkRT5eMROEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -foldernew22:folder folder22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBNzaTPT2FISCBCQaDPz+BExKBDwmFPSubPzChPzCfPy2dPz6BMzOTAQCBOSmZPzKlPzSnPzOlPzKjBQODPz+rPz+3PzWnPyuZPSmXNyaXPTyhISCLIRSLEQuFEwyHPy2bKRuPFRSTPT29PTy9Ozq7Pz+xJyanDQyNPzGhMzKzOTi3Nza3OTiVBQWFDwqFKxuPOTi5JSSjISChHR2dGRmZFxeXPS2dNTSzNTS1OTm5KSipLS2tLSytKyqpIyKhGRiZNze3NTW1MTGxMTCvLy6tIyKjCQmJMTCxMzOzMzKxJyenHx6fLR2RLy6vJSSlHx+fDw6NLy+vIyOjAwGBGxqZKyurCwuLBQSFJSWlCwqLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeIiYqLjI2MAY6HAgOHBJYEhJCDBQaDmgcICQoLB4MGDA0OAQUBDg2cAAcPEBESE6QUuQasFRYVq5SxCRcSCggYGRjIGgYbFs8bHIMHExIJGR0eHx7cB83PFhsDDuTUEyAhIiMjJCQluwEmvsAnKAcp1x4qKyUrLLupWrByxcnFiwQIYIggEaNEiRgBZMyYQaNADRs2REA6cCODBxw5+OnQgWMHjx4+BND4MQOIg1gI0gUREkTHiplDhhApEoCGkRlHBL3I8MEHEhz+WAhJogTJySVMfthwIehAExE5jubAkYQpESc8fOx4AiXKNA8+ekhBgqSpzh5hPHcsmVLjpSAqVZBY6VGkiJMiPQKLnTvjCiEsWU4o3nGC8YksMmT8YCmC6iAXKLRc2cz5yGYtR0JjKWQgEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -mailforward22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBJR2dLyijPTixPz69Pzq3Pzy3Pzu5PTu7Ozi1LyelOzavPz+/DwqLLyafPTmvPz67Pz29Pzy7LSWlPzmzPz6/LyajPTitOTSzMyurPz25PTatPTi3KyOjPzuxAwqVDQiJHxiZPTetKySlPzqvPz27BQ6bAwmTPTexLyinNzGxDRunPzy5KySjCQ+ZNzq9KTO7JzC3Nzq/Ozu/LzW7FSm1BR6vGSWvFyq1AyGxAxytAx6vBSKxAxSjMyujLSunES+5BSi1ByGvAQCBNzCrOTaxNTOvMS6rKyelCx6rBx6tBQKDOTWvPzu1PTq1OzezAQOHAxGdBROhAQGFPzy1NzOvIRqXLyynOzarPz21Jx2XPTWrLSShAw2XKSCbPzuzAwePAQCDPzyzPzqzPTmxOzWtAwGBKyObOTSrNzGrKyGbOzatEQyNKyCZOzWrOTGpNS2lCweHCQaHCQWFBwSFBQODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBhBwgQKFSpY0HgBQwYNGzh0mDhRAAUPHziACEGBpYgRJDiUGEkSwoCQJk6opNASRQoOFETQJDkggwoOJlYApcCihQuVL2DUhBDjhIqjJmRwwDCDhswaNm5MjYHjKggOOU7o0CGTA9gdYknG2KCCBw8VJVL0uBgihAUfP+CSNGCjsI/DiBPbAMJBsEQbQYQM+UG5smUiRYw0jlvYxhEkSYyIHm1EyRLTTH40EZvAyZPOR4pAmU07ipIkUKQ0mQIhAZUqVq5gKXzkSBYtyLVEyd1ki8QFXLp4+WJFQowbYLJnD5NbzJiJCjaQnhnvpYwZM0/OPFlvQ/f3iQvQpBlvQc0aCWy4VKnCpY0Y5yQxgEYXZFjghgwZUOHGCW90YQEccUwloBwGyjAHHXUoSAMZb0xhx1QOoMHDHSfIwSEOdTjhAQ1d4MFbTQ6Q4MYacrzxhhx04JCHHhvQsMeLJPHRBxpr+LHCGnusgccfgKixQR1ATtTBlDDAEIggggxCCCGFbLGFHVFKZEdAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mailget22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQ6bCQ+ZAwePKTC5Ozu/NTi9GSWvAwSJGSu3JS+5CR+rAQOHPTy/AyKzES23AwOHCw+bOTq/BR6xES+5AwmTBw6ZMTW9Ax6tByi1BRGdAw2XAQCBDQuNDRupKzS9FSm1BR2vBym3EzC7CSGxBROhNTW1Pz+/OTm5NTO1AQGFNzW3Ozq7Ozm7IyKjJyWnMzOzNzq9Nze3OTa5Ly6vCQiJGReZISChKyqrAwqVBRWlOTi5MS6xJSWlNza3OTe5Ly2vGxmbKymrIyGjMzGzISGhKSepCQmJDw6PHR2dJSOlPTy9MTGxLy+vLS2tMzKzLSutMTCxLSytKSipJyenKyurJyanCwqLCwmLCwuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBhgIBA4SLjAABBAUGBwiNlY4FCQoLDJaNAQ0ODwsQnYwREhMUE5ylFYYRFhcYGRgaGxsDHJUdFR4SHyAhEyIjJCUcuo0cJr0nExihxgwoyYscKSnMHicOIw4lKissLdWDHC4vMCu9McYqMjMyNOUANTY3OPEoOTolDCszdrSgwaMcBxs9TMxYOCMHBx8zfPj48QNINQ5BbMBIIUShDIUoTAhR94PHPEEHbQwZckOGjBQviMxYUWQIDCMmdXE4gqRnkiFETAxR8iKFjJU2evZEdmLJkgJIbqS4wXJIUapImj5FtuSEVyRVV1IVi4RIChhEkLVAgcJHEqVwVJUmYdKkiRNkALMRecKECRG/ff8CEQJFCA5kMKJEoUHDCQ/HkB9LmWKECpUeyKoIMSLEyosen0OD7iH2xg1dV7BkqXGlBpbWNTq4Zn2khu0aAAwEAgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -mail22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBDQyNCwqLCQiJBwaHBQSFAwKDAQCBDw6PPz+/Pz69Pz27PTy7PTy5PTu5PTu3PTu1PTq1PTqzOzmzPzuvOzitPTmvOzivAQGBDw+POzevPz67Pz25Pz23Pzy1PzyzPzqvOTavERCRKSilPz21OTevIR+ZExKTOTi3JyanLS2tPz6/Pz65KyihJSKbMS6lExOTNTW1JSWlJSKZMSylNTOrNTKpFRSVPz29MTCxPTmzKymjIyCdOTWxOzexOTWrBQWFFRWVOzu7MzKxJyalOzatLSulMzKtOzmxOTarFxaXKyqnPTmtIyGdIR+bOzetOzixBweHGRiZOzm3NzWzNzSrOTetGRmZOzizOTexOzm1JSKdGxqbHRydJySdHR2dOzapHx6fKyijOTixCwuLHx+fFxeXERGRDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeIiYqLAQECjwORAwSUBZYFBpkHmwgJCgsMDA0OD6UQERITFBMVFhcVGBkangq1ChsLGxwcHQ0dHR4fICEGIiMSCbS3uLq8wCQUJSYGJygpKhQJKyvLLM4Nwi0uLwUwDQsxMtmeuQveHR8UMzQ1NgU3Dgo41jk6ns0cKOzgYaOHjx9AgjTAUUvIECLZNmxoUISHkSM9KiBJQkCJA4kKEoBQoWJJAiYtmjh5AmVCsCJRpHzckKCCySlUUvBYUqUHDysSPnxIEuXKA5pPRiRwxwFLFhRaIEDYUoEChCcDuECoOWKFuwW7nHkg4WELkw8/BHRRwESpt10dU8SSHevlRxIBX6C0WBE27q8GZMkKbTADjIAwYlb4GLMYShYoPTRo6FGiSJEKPyzMIFMmzJcvXbhwkSLFjJkbQW6cOHNGhAgEAdAsmk27tm0ABgIBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -mailreplyall22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBLyejPTixPz29PTu3Pzu5Pzy7Ozi1LyelPTavPz+/DwqLPz67PTetPz69ERCRLSWlPTmzPz6/OzexLyajPzqvDw+PDQ2NMyurDQiJPz23PTatJyenAQCBPTevPz25LSajOzq7HxiZPTexPz65JyanBQ6bKSmpBwuTOTi5OzaxBRCdHySvGRiZHx6fBQSFERGRNzq9IyOjHx+fGxqbPzu3BwaHFSq3Aw6XAxKfPzy3Gy63ByWzJzO7Mzi9OzavBRytAx6vCSazGRKTPzy1AQKHBRGdBRyrDy63ES+3Cym1CR6rBwWVAQSLAx+xCyCtBRmnPzuzAQWLAwePPzyzKSCbAQOJByGvOTWvPTmxBQODFQ6PPTWrPzqzOzatAwGBKyObLSWfPTivKyCZEQyNKyGZOzWrOzWtOTSrOTGpNS2lJx2XDQmJCweHCQaHCQWFBwSFBQKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpkzGjhAoYMGjZMpMghQgcNFjh4mODhA4gQGkSIHAmBwAgNJEpo8KDSxAkUGjhMSEGz5gUVIiKs2PmBRQudHiwQpUnAxYsXImB0aBqjBcuoU0fKmPGChgUNH2qIqGHjg9u3bicWIFs2rYgbNnDkyGFhb8cccQ3ouJqWQo0dPFr0WMy4h48LFj4gsKriB5AeNngEaSGks+chPnwQOXFAh4oXRYxk9nAEyY7XO2wksWHDx5ATCDIoUXEBsYclTJo4cWJhuIjhSXacSPBEiZLMQY4wgRKluvXqUpyIsDElAxUqVaxcwcGCPQuWLOixaNHCZAsXBU+oqKDSxQqULF6ifNmyn/8VMOtxwcAK36kQRhdJQIFFEmKM4eCDYGyhhYAEkqFEGSuYYcUZLaDxXRpqSNRCEu6twYaFZXTQhgRd2NCCG9918AYELTjoXgNuKAFHB2RQEUYHVbQQRwlUpPHGGFwkyQUEDsgxx4lh9BhCBy2U8UQJcrSg5JIQ0FEHG3bc0QGYK+CRhx57PEGlkhM9sAEffKTQhx9+/AEIIIGoEUgLLRRFR0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mailreply22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBMSihPTixPz69PTq5Pzy1Pzu5PTq1Pzy7Pzu7Ozi1LyelPTavPz+/DwqLLSajPTetPz27LSWlPzmzPz6/PTexPz67Pz29OTSzMyurPz25LyajBRCdPzuvDQmJOzexPTevOzq5BQ6bBwuTDQiJHxiZPz23Pz65LyinPzmvBxCbHySvAQCBOTi3OTq9CweHOzaxFSq3Aw6XGy63ByWzJzO7Mzi9OzavNzq9BRytAx6vBR6tPzy3AwOHDy63Ax+xCSazCym1CR6rBwWVOzizAQSLES+3CyCtBRyrBRmnGRKTPzu1MzGtAxKfAQWLAwePPTizMy6nByGvNzWxOzWrNzOtBQKDJR2ZNS2lPTmvBQODPTatKSCbOTaxLyqlAQKHFQ6PPzyzPzqzPTu1PTivOzWtKyObPzuzOTOtLSWfPzqvAwGBKyCZPTWrPTmxNzKrEQyNOzatOTGpJx2XCQaHCQWFBwSFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpYuIDBQgYNGzh08DCR4oQPIDqEmDBhJQYRIzqQIFkSAoESJCKkDGFiwgkUKTpMwECz5IASKjqsSMlSA4sWQjG4qGnzhYoQSmF0iCFjBgmWGWhQrVHCxg2sOHLo2MGjB0sLYmsWQHq1p4wdPtqemGDhB1UDQFSouKHi7oQgQmSwUMyYxcQDZQWz2EFiCJEiRoyQyLzZyGIIB47YKLwDSRAiSZSoXq1kCRHNLBK8YGKjCYskTp4ogeKkt+8oUaBImZKAAxMmVKrctqL7ihTnz7FkAT5FC4cKFbZwadIFdxcvX8KLss8iJcoUBUcq2KgAJoxyMTy4jCFTxoxEHl2GLyCDncmWM2hUIQMPY2CXhhoTfTEcA2tgVwEba7Thxhs88FdBD/ZB8MUUHMJBRhw2sAGCHBKU4UaFc1RAhxnhcdhhHUzYAUIcFdxRAh4R5KGHinu4OIVEDqTBRx81xhGHHzD8wQYQetDRI4cTAcIHGWT0EQgZa1ApCBqDcBAID1Q94IEHLtBAAyGEFGKIIWqYYQYPYNZkQEAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -mailsend22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAIR6fIRydHxubHRqbHRmZGxeXGxaXGRWVFxSVFxOTFRGRExCREw+PEQ6PDw2NDwuLPwCBLSijOzixPz69PTq3PTu5PTu3PTu7OTi1KyelOzavPz+/DQqLPz67LSafOzetPz27Pz29KyajPTmzPz6/NzSzLyurCwiJPz25Ozi3JyOjPzuxBRGbAwSHOzexPz23KSSlPzqvBROdISavBxSdAwaLHRiZLSinNTGxMy+vBxGZNzu9BSGrAwWJMSyrKSSjFy61ETO3BRWfPz65PTqzHTK3ByqzBSWxEzW5AQWJOTWxBRCXOTu9BSOvDzO3ByavBRKbOzaxOzizKSWlCQ2TAQCBJza7BRWdNzSxJSCbMzq9BSOtCSKrAwiPOTavPzy3LymlCySrAwmPFRKTPzy1NTGrPzu1JR+bOzatPzyzCy61ByGpOzWtJyCbPTmvPzuzIS+3FymxCSuzBR6nJyCZOTWvKSObMSujOzivAwKDOTSrNzKrJyGbDwyNOzWrMy2lIx2XBwWFBQSFBQODAwGBAQGBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpYqMDxAoYMGjZwmEixg4cPGzqA6BBiAggRIzaQGEkSwgAMJCKgnNBhQogSJlKGOFHTpgYUG0TsnJBCxQoSE1i0KErAxYsOJJRuuAAjhkwZM2jUqGnDBQoUHTbciIEjx4YNOmbs4CGjB8kCZlGAALHBx4+YcTcACcJDyFSJBo6iGNIhhQkiG8BOKGLkCBK6SSQisHoWhZIbG5bMYALECI8mTZw8gTL1QJQXZ6VMiUylSpUlVpoYaXLFtm0EGmCjwJLlA2O9MrRsccKlC8kEXr7AdgEmwtkhX2SQ2BIkjBiSYzSQr/nyhUKZLIrJJOcexvlEBV7IvCBjRkmAMzHOaufhxDvJBWiQISAFxUUQQRovJNeEGmu4JxEDbKQhXxsfuFDGGW68IQMcccgxRxUkNRDhC3R8QMQIdZwXQ11JJGFbiB+QYccHaaTxhgt13OFBDGTgkUdRDrhAhx5k2JjGCB/swYcXMXwAYk190OGHHx/4wUaVepTxByAaoPEkSQ5wwMEJZAZipiCDDJIHIYV8OZEdAQEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -nav1downarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBBQSFAQGBDQyNExKTHx6fGxqbFxeXGRiZFRWVDw+PAwKDJSWlOzu7LSytJyenJSSlISGhISChIyOjFxaXDw6PPz+/MTCxLS2tIyKjKSmpKSipJyanAwODDQ2NHRydERCRFRSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZzQIBwSCwaj8ikcslsOp/OgHRKlQoCgymRUDAcEIkwYgxWFBYERpHQcDwgEclEQmk8DhWL2kiIXDBwExMNGRoJaUkEEH8bEQ0cGgcWAksEHX8QHBKSHk1sfxMHH5ROBBsOICGkT2wiq1CIULKztLW2t0h2QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav1leftarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExKTJSSlHx6fAQGBOzu7GxqbJyenPz+/LSytFxaXMTCxGRiZKSmpISGhFxeXISChAwKDFRWVHRydJSWlBQSFERCRIyKjDQ2NIyOjLS2tDw6PBwaHFRSVDw+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZ5QIBwSCwaj8ikchgQLJGBgfNZDBAKBirRekBMtYGEYsHIgsWNhOO7tCrShDU18Hg/CJAIG0o4wCUQcksTFBUSCRYSEnpUFxgIGQkJGYyNGggbHBaVjR2QCxEeWkITHQ4IH3tPFwEMA2ajAKUgqlQTTbFEE7W5vUgGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav1rightarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNGReZAQCBMTCxGRiZMzGzOTm5LSytPTy9Pz+/CwqLOTi5Ly6vCwmLMzKzJyanJSSlBQWFKymrIyGjCQeJJyWnISChISGhHx2fKyurDw6PAwODHx6fHRydDw2PERCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZ2QIBwSCwaj8hkMRBQKgOCgRMZIBSk06XhEM0SA4iE4uoVLhCMhqLrdSAekMgYO5VM4BQ521mxIC4UFxBWdEkSERYYFxETGQGFSBKCGBEaGRuQSBwdeZaPXpsQCB6YZQMdEI6ZSgMepKusHh+wrCC0rLdlursGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav1uparrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBFxeXDw+PMTGxHRudPz+/JSSlLSytIyKjHR2dISChIyGjIyOjLSutLy6vKSepJyanISGhJSOlOzm7Ozu7MzGzKyurJyenDQyNGReZKSmpIR+hCwuLCQiJBwaHBQSFAwKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZtQIBwSCwaj8ikcslsOp9QYyAQFQYEAyr0Sihkn1fDAeHVLsOJNELxVaITC0bDUU6GH5AIQ8KYrNtFVxQVFBYWFxgRCREYdUQZGhYEDwgIGxAHCQocCgWOQhmhGR0epR8gqCFTq1Wtrq+wsUt0QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav2downarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAQGBBwaHDQyNExKTHx6fGxqbFxeXGRiZFRSVDw+PAwKDJSWlOzu7LSytJyenJSSlISGhISChIyOjFRWVDw6PPz+/MTCxLS2tGRmZDQ2NAwODJyanKSmpKSipIyKjHRydBQSFERCRExOTFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAasQIBwSCwah4FkQKBsDpoBIqFgOCASCYRWm1AUFgRGkdBwPCARiWRCaTwOFYvYSIhcMOiJpJGZaDYcR0IEHXceEQ0fICEWIoJDhHcQHxIHgI9SEHeVG46YUh8OISOen1INCqWmUnOYTUxQAU9NUlRWWFtbCiRgrYNlZ2lriG8lYUd1khETE24gCZeCkRgeFBAQIAeNn9OTlXKrBJoYnKrcoaPmpmSpq3S+7u50QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav2leftarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExKTJSSlHx6fAQGBOzu7GxqbJyenPz+/LSytFxaXMTCxGRiZKSmpISGhFxeXISChAwKDFRWVHRydJSWlBQSFERCRIyKjDQ2NIyOjLS2tDw6PBwaHFRSVDw+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAavQIBwSCwaj8gkMiBYNpeDZzEQXRIKBmPgmtUSDgipcAsWjxOKBaN7Tq+n6EbCIQ3E5+KtQk6gjwl7CX11D3sPBBARTQGFDYeJT2R8EhB0koKUfgATFBUSCRYSEoqcnqCiikMXGAgZCQkZqautr7FiFxoIGxwWqQC4ury+qh2tCxEexMbIRhMdDggfYs7Q0kcXAQwDbELY2txEziBmmx3jSRNMR+nk4e2b70ry80QGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -nav2rightarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNFxeXAQCBMTGxOzm7CwqLLy2vPTy9Pz+/Ly6vCQiJLSytLS2tLSutOTi5MzGzKSepIyKjJSOlKSmpMzKzJyanIyOjBwaHIyGjISGhJSSlISChBQSFJyenIR+hGxubDw+PHRydHR2dEQ+RHx6fERCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa6QIBwSCwaj8hkIIBcJgEBweAYnTYJUmMAa9USClniFtwlGg6IRFhoUKTXwwWj0FB3F46Hwl6UQyISfAB+EROCQgsUFRYSF3yJEIyBaxgWDBkaGRtclQwSHBIbEGEdGx4fGhcOICEDGBsWHBmqIq1CHRIWGRMMIyRTHRy6Er22tyONq8YdJRe0xkIDwr2/QwMfliMmZQADIxasZd4e4UYDIr7c59rc0eVFA+/m0EQD9PDt0flP/P3+BkEAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -nav2uparrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBGReZDQyNMTCxHx6fPz+/JyWnKyurHx2fDw6PJSSlISGhIyKjIyGjISChLy6vJyanOTm5PTy9OTi5MzKzLSytKSepMTGxMzGzLS2tLSutKymrHRydCQiJCwmLBwWHAwODLy2vHx+fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAajQIBwSCwaj8RAAMkUBgSDZdP4JBSi06TAcEAkFNLp07BgLLzY5njRcDzO3zB1C4lEGI83Wj58SiYUFRUWdg0XEXFFAwIYGRoWGxwRZQUFHZdgRAObmx4fHiChISFKpVlKWUdPaalOAlasp1sHG4myZGZ7Yltsbgu1mUhjdRF5egmxfQJ/gYOFdrZDi40iFgiSCw8jBQmYcpydn6Ego6WorUwGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -navback22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRGZAxCZGyavExmjHyatOTy9CxihISevPz+/KzO3BRylAw+XAQCBDRWbPz6/FzC3CSuzDyexJzO5Mzq9CxSdAQOFISmxNzu9HTS5BSmxAyexDSuzJTa7Mzu9Kzi7GS21CRmjAQOHHSWtLze7AyWvHzG3BRihAQKFCTO3BS+1AyixBSWvBSOtBSStAQWJBSixDzW5BTC3BSqzBS21CTC1ETW3AQSHEze7BRqlBRmjAQCDBR+pBRefBRSdCH5BAEAAAAALAAAAAAWABYAAAalQIBwSCwaj8ikMqBcMpvHgGAANQYIhWdVGDAcENQtIJBQLBgNx0MQaDuQXcghIplQDhBIxXKJYiAZGhscHR4VHyAhIiNWJBklGhIbJoQnFCcTKIxFKSgbKissJi0mJi4vLiYoMEcXKDEyMzQ1Nje2NisoOEg4KDU5K6g6OwwoKAN9SCOeMmgwz884PEq9PT4NYkPLP9jZQikN3d4AKVrjKePp3gZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -navdown22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRKZDRSbBxCXJTC1Mzi7Nzq9NTm9Bx2nAQCBNzu9JzG3Hy+1HzG3IzO5BRmjPz6/LTe7Dy61AyStCTC1FzC1AyGrETS3ETC1ETa5BRulAyuzBRylAw+XMTe7Gy+3CSqzAyexBTC3DR+nIS21KTW5Nzu/KzO3FzC3Pz+/ByixEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaRQIBwSCwaj8ikcnkMBAQDgjPAFAYKhsMBkVBUAYEFo+F4QLzVQEQyoVTOX/XBcsHA0+vMRbNBMwkRDhxuHX5GTlIeHh8gISIjFAEeiVRECiQlDAUmgxQjIhwiJHdFlycoKSIUFCEjGiGkRpcqCxYijxorsUezcxYsuoZJsxLAu0qXB7DCTJfHVQrMX9PU1Uh0QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -navforward22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBBxCXDR+nIS21Aw+XJTC1Nzu/KzO3Pz+/Nzq9Pz6/MTe7KTW5FzC1Nzu9CRKZMzi7IzK3Lzi7LTe7HzG3Gy+3AyuzAyexFzC3DRSbHy+1Dy61CSqzAySvAyStLze7IzO5AyGrETa5ByixBRmjCTC1ETS3BTC3Bx2nAyWvEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaYQIBwSCwaj8hkMqBsBgTN5IAAjRoDBaq1aDggtMuAWDzoJhTgY+CwYLgZDccDwkgXI5IJZVGxXDAZGnR2QxsLHB0PHRgeHyAZDyFfVUQDCyIgIyCPIB+QJCUmlEMBEiInKCQnKSkeKSQeomoqJrUmKiArKSwZsmoCwMEBGCyxo1EGHr3HUQEEvltCBtDRAAbMW0zV29xDBkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -navhome22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAQCBCQiJNze3ERCROTi5MzGzLy6vDw6PKyqrKyurBQSFGRiZGxqbGRmZISChEQ+RExKTExOTHRydDQyNOTe5FROVLSurCwqLMTCxPT29Pz6/LSutFxeXLyytLSytPz+/JSWlKympPTq7KSipNzW3BwaHHx6fKx2VJRWNHQmBFweDOzq7Ly+vNTW1JxWNLSajPTe1Ny6pKxWJNTS1IyOjJRmbPTi3OzKrNSSXMSGVHQiBHx+fJSSlPzy9IxOVOzWxOSyjNSCPLxeDJyWnIRGTOTGtMxmDLRWBHwqBIxGTLRSDDQuNNSunKxKBGwyNMSafMxqHMReDKRGDPTu9LxuPLxaDJQ+DIR+hGQqNIQyBGQiBNTO1EQKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAYSIiYQCAwQCiokEhwACBQYHBAiQhAiHlQYJCgkEC5uCkp8MDQ4NDwylmwgQlgQRERIEBBOkmxQVBgQWFwUFFxEEDLyJGAUZtQoFGhsFHLYdyoOVHsEf0SAbIAUex8mwlAUhtSIFG+3uIyTWvAIGJMEkJe76GyXbEeWUBJg4USKaBhQpVKzYoIFFiwYUBBJa8MAFCw0vYMSQMWOhBhoTKCQSUKMEiw02buDIoWOHBg0GeIhEFKAHDR8afgAJImSIioYliMws1MPkhiJGchxBkmTDCBo1hg4KQMTiBiUyhBxZ8pNFiR5MEtU0WqSJVidJNDyNKraHC5xPNKBEkTLlJ5WvUgWNvfikyhArV34+7ZEXQAAsB2iUyHLlihYtW0pwOYAFgyJDmDNr7jIIWiAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -navup22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBHSWtBRmjAQOHISmxNzu9BSmxBRihHyatPz6/Lze7CTO3BSixHTS5BTC3DzW5ByyzPz+/OTy9AyexEze7ByixGyavKzO3FzC3AyWvBS+1BR+pAQKFCRGZExmjCxihBRylCSuzBSWvBS21BSOtBRSdAw+XAxCZDyexDSyzCTC1JzO5JTa7DSuzETW3BRqlAQWJDRWbOT2/Mzq9HzG3JzS5Kzi7BSStGS21CxSdCRmjAQOFAQSHAAAACH5BAEAAAAALAAAAAAWABYAAAaeQIBwSCwaj8ikcqkMCJjHwIBQgBIDhgMiUbUGFAtGw0GFfheHByQi4S6/E8pDUoFYLm5kAEPJaBAVGxIcER0JHlEfICEiIxUkGyUmIgknKIhXASkonCorgSwmKQGcKE9IAi0uLxUwMTJWMzQ1NiYwBLBQHws1N7avXgs4NjkcCblMATU6KhvGyG87PAnUKV1MAj0+2zIFp1bg4eJJdkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -playeject22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAwKDJSWlFRSVBQSFKymrOzq7HRydERCRPz+/MzGzISGhJyenKSmpGxqbJyWnJSOlKSepLy2vIyOjGRiZPTu9IyGjLSutFxaXExOTHx2fGReZAQCBAQGBBwaHCQiJLSytKyurJSSlFxeXNze3LS2tIyKjFxWXHRudAwGDBQOFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa1QIBwSCwaj8ikcqkMCJjHwIBQgBIDhgMiUbVKFQsGItBdBhpgh4PxIJvRC8cA4oiMy8bvQhJhMAYTFBVOURAWEw0QFxcMERAYCBluVxobDxkVHJocmBwEGgmEQx0dHh0CpKmkH6odVlanBR8FtAIFtiCkSB0LISEiGCIGIxAPDySuRwIOBwrOzwoHJRHJRh0jJgMj2gMnERQUCNVFHQQoCBvo6CkICATjRB0qp7b1K6qv+foyQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -playend22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNFxeXAQCBMTCxGReZBQSFOzm7AwKDKymrJSSlFRSVCwqLLy6vPTy9OTe5Ozq7CQiJLSytOTi5BwaHPz+/HRydMzKzKSepJSOlKSipJyanIyGjIyKjKyurISGhMzGzJyWnHR2dISChIyOjLSutDw+PERCRHx6fJSWlIR+hJyenGRmZHx2fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa6QIBwSCwaj8ikMBBQKgOCgRMZIBSkxYHWoDVWD9EigpBQLLBERsPxCA8NDUhjgTBGJJNGG02RVBQWdUV3FxgZe0IGfoAGdhoXGxwdiAYef4FGFBoeHB8dGSBRihUhIo1FBhkbIyMkJRYmAwYal4JEBh2RChIWJ1IIGxUZFqdECCgkHR6wWAYpFR2YWSobvL5vFgfDaEMDIivMRBEsD9HcQgMWvecDLB0tZ0btsfJa9vLXU/X6/P3+b0EAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -playpause22:play play22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBAwODMTCxKSmpJSWlFRSVAQGBBwaHLSutOzq7Ly6vCQeJPz+/Hx2fBQWFGxubLSytJSOlBQOFAwKDJSSlJyWnIyOjHRydNze3GRiZAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWBICCOZGmeaKqubOumQSDEgRjPMSoMRGEcol3vh0IkFAtDDWBEKlGMRKPgEIii0yrqIS1ArADu9KuLNCSOSdCMVp8ohEZFC4DL6SaBpXGh6/l4JX8XZACDhXkYCn1LAoqMUBAZEhBLDJKUSyYBGmhPAJyemiU0NDaloy+qq6ytI8whACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -playstart22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExOTAwKDAQGBJSSlHx+fBQSFMTCxKymrFRSVOzu7GxqbLSytLy6vJyanPz+/GReZBwaHHRydKSepKSipGRiZJyWnAwODLSutKSmpISChPTu9ISGhFxaXJSWlIyGjJSOlERCRIyKjDw2PIyOjLy2vOzm7Dw6PLS2tCQmJOTe5GxmbDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa7QIBwSCwaj8ik0hgQLJGBgbMoqBIKU2LAcMgOEQmFYeEFbBmNMgDhYDwWBC0k4pCoJ46IgRIXBioRCRYXamwRGBQIfgaBFhiERhkaenxmCoEbBhyQRYaIGVsdghgem4UWegcEBB8UHhsgIaZGBBgRIpUIIxQhChginEQIIBEklWslFyYnBsFfFCi4WQgpFBwqFxNGKxcsxl4IAS0NZEYCF3vlwgEfUuZV8JEuI2pPAARN9kcE9fr+SwaCAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -playstop22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAwKDBQSFBwaHCQmJJSSlISChJSOlJSWlGxqbGRiZNTS1PTy9Pz+/Ozm7OTi5FRSVIyKjOTe5MTCxIR+hExOTHR2dLy6vLSytLy2vHRydFxWXIyGjIyOjPz2/FRWVHx6fExKTMzOzJyanKSmpKyqrKSipAQGBLSutHx2fDw6PAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa1QIBwSCwaj8ikcslsAgKCAWEQjQ4KgSwyYDAcugZEQqFYYJECA6PhaLcfEEUkgJZAGJB8fkKpWOhHAxcOGBQZGBoaGQgbHIBGAhUOGR0SBxISBh4Xf0iCHxQSlRIIXhsgj0UCIaCXmJgHGyKpRJ+hmB5dHQqOaCENIx0epBIkBhdzngoPGCQlJifQJBvJRygRKRcKGxcXGypys1srEREc5SLnICLiR1koLFVUWfRO9vf4+UwyQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -textblock22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUWzvNzo33GfFl5jVlonlTrr1DbvFi9vjeeNUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textbold22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIxhI+py+0Powm0VnknjVkH2AEhE45LZ55Wqn6e65TsMc5eYosbksswubJIhsSiccgvAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -textcenter22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUbz3Sh7yIWfFHKjVl4nmFrr1Lpr7LwkjeeIUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textitalic22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py+0P4wqUSlQvttrkDnyaOHIdeaGRupplAIauVM3xjeeOUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textleft22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+pyw0Bo5zB2UXz3Sp7yG2fFJajVjonmIor2TJvfL0wjecIXQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textright22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUfz3SZ7yIXdF4kWqZkbCqoMO7kXLC+wVOe6YRQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -text22:text text22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBBwaHAwKDBQSFLy+vLS2tJSWlBQWFKyqrFRSVCwqLDQyNNTS1GxqbFxaXJyanIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAVcICCOZGmKQSoMaZsShBsQBdAapHvgaIDUqUPJlRjSbAoT0fRDKgODRbF0PLUYjZO2F2Bst9evNix+dsvDlGKK5jraudQb7qbX6a2HEJ+ycyF+LRE8ZTI+fX5oGCEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -textunder22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIvhI+py+0PowmUnhpeVVnb1DkbCI1I2JhX+Z0sOr2cTHpwK7a4rUr+hAnufsTirwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewchoose22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBFRSVExKTDQyNPz69PTq5Pz+/OzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq70466Cl+AMxBVwnFIVRAmQHCIeBrC1L3tQgJ/SaEbeeC1PLBHE2ybFI9A1HzstHEIK6YCmhDTmBybQaHYJn7QC5zKeytIQe1+pKNE6P2yMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewdetailed22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz+/Pz69PTq5AQCBOzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAQ+EMhJq7046817+MLQUQFRGMc4lQaSAkcMx3QltMmrDrSu/sCgEPgJhIiFk89DaL1qPRnlhsgBebWhdstVESIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewicon22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz69PTq5AQCBPz+/OzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARWEMhJq7046z2DF0PlBeAVEERhiKhqHgWyUgEsX0KczFOO7JeBYciTCImc5ITIXDKHyqhU9AnRqq9UEVDTvmLbGhin2/qAliOUot5OLc81IO5+2+8WewQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewmag-22:view view22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAbKQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/47vrq9P3s/avno2BBf/MCClSob4iBIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -viewmag22:view view22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbIQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/47vrq9P3s/cunr9S8gAIRFhTCLAgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewmag+22:view view22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAbQQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/4zT766vRI+fvHD4CPgwcJ9qg0UB85JA0dDjEQBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 -viewmulticolumn22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz+/Pz69PTq5AQCBOzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq7046813+MJQfUF4BURhHGO6noSBsEcNoDJtS4KcsJQe4ncZ1HYT47HDbDqfUAnJRJmKLIGCCjjJbmE5wBI3EyOFxKCPS1EiJW52dE6vZyIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw== -viewtext22:view view22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIkhI+py+0Po2ShBlOxzbP7n2yaJoLm+ZTcxqHuC6hXzML2HVEFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs= -viewtree22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBFRSVExKTDQyNPz+/Pz69Pzu5PTq5OzaxBQOFOzKpFRWVFxWXOzexPTexCH5BAEAAAAALAAAAAAWABYAAARPEMhJq704g6A779kHCORAgNskFMYhakE8FkjyBcoWv+JwJItXaELYCTFHlCSpZKKcoB5jYHpOGgUadLKbIRw3jhEzQDyCSuI4zW673yhDBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 diff --git a/ext/tk/sample/tkextlib/ICONS/viewIcons.rb b/ext/tk/sample/tkextlib/ICONS/viewIcons.rb deleted file mode 100644 index 7ed3c267e4..0000000000 --- a/ext/tk/sample/tkextlib/ICONS/viewIcons.rb +++ /dev/null @@ -1,330 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -# -# viewIcons.rb -# -# -- Display icons from icon library. -# -# -- Copy the clicked icon data (command string of creating -# a TkPhotoImage instance) to the clipboard. -# -require 'tk' -require 'tkextlib/ICONS' - -class ViewIcons - ##################################### - private - ##################################### - def _create_controls - @controls = base = TkFrame.new - columns = TkFrame.new(base) - line1 = TkFrame.new(base, :height=>2, :borderwidth=>1, :relief=>:sunken) - line2 = TkFrame.new(base, :height=>2, :borderwidth=>1, :relief=>:sunken) - - lbl_library = TkLabel.new(base, :font=>@boldfont, :text=>'Library') - lbl_groups = TkLabel.new(base, :font=>@boldfont, :text=>'Groups') - lbl_columns = TkLabel.new(base, :font=>@boldfont, :text=>'Columns') - - ent_library = TkEntry.new(base, :width=>50, :textvariable=>@library) - ent_groups = TkEntry.new(base, :width=>50, :textvariable=>@groups) - - btn_browse = TkButton.new(base, :text=>'Browse', - :command=>method(:select_icons)) - btn_view = TkButton.new(base, :text=>'View', - :command=>method(:display_icons)) - btn_exit = TkButton.new(base, :text=>'Exit', :command=>proc{exit}) - - @column_btns = {} - 6.step(20, 2){|i| - @column_btns[i] = TkButton.new(columns, - :text=>i.to_s, :width=>2, - :command=>proc{set_columns(i)} - ).pack(:side=>:left) - } - @column_btns[@columns][:relief] = :sunken - - lbl_library.grid(:row=>0, :column=>0, :padx=>4) - ent_library.grid(:row=>0, :column=>1) - btn_browse.grid(:row=>0, :column=>2, :padx=>4, :pady=>2, :sticky=>:ew) - - line1.grid(:row=>1, :column=>0, :pady=>2, :columnspan=>3, :sticky=>:ew) - - lbl_groups.grid(:row=>2, :column=>0, :padx=>4) - ent_groups.grid(:row=>2, :column=>1) - btn_view.grid(:row=>2, :column=>2, :padx=>4, :pady=>2, :sticky=>:ew) - - line1.grid(:row=>3, :column=>0, :pady=>2, :columnspan=>3, :sticky=>:ew) - - lbl_columns.grid(:row=>4, :column=>0, :padx=>4) - columns.grid(:row=>4, :column=>1, :padx=>2, :sticky=>:ew) - btn_exit.grid(:row=>4, :column=>2, :padx=>4, :pady=>2, :sticky=>:ew) - - base.pack - - ent_library.bind('Return', method(:display_icons), '') - ent_groups.bind('Return', method(:display_icons), '') - end - - def _create_display - base = TkFrame.new(:borderwidth=>2, :relief=>:sunken) - - @icons_window = icons = TkCanvas.new(base) - xscr = icons.xscrollbar(TkScrollbar.new(base)) - yscr = icons.yscrollbar(TkScrollbar.new(base)) - - icons.grid(:row=>0, :column=>0, :sticky=>:news) - yscr.grid(:row=>0, :column=>1, :sticky=>:ns) - xscr.grid(:row=>1, :column=>0, :sticky=>:ew) - base.grid_columnconfigure(0, :weight=>1) - base.grid_columnconfigure(1, :weight=>0) - base.grid_rowconfigure(0, :weight=>1) - base.grid_rowconfigure(1, :weight=>0) - # yscr.pack(:side=>:right, :fill=>:y) - # xscr.pack(:side=>:bottom, :fill=>:x) - # icons.pack(:side=>:left, :fill=>:both, :expand=>true) - - @icons_layout = TkFrame.new(icons).pack - TkcWindow.create(icons, 0, 0, :anchor=>:nw, :window=>@icons_layout) - @icons_layout.bind('Configure', method(:layout_resize), '') - - base.pack(:expand=>true, :fill=>:both) - end - - def _create_info_window - @info_window = TkToplevel.new(:background=>'lightyellow', :borderwidth=>1, - :relief=>:solid){|w| - lbl_name = TkLabel.new(w, :text=>'Name', :background=>'lightyellow', - :font=>@boldfont, :justify=>:left) - lbl_grps = TkLabel.new(w, :text=>'Groups', :background=>'lightyellow', - :font=>@boldfont, :justify=>:left) - lbl_type = TkLabel.new(w, :text=>'Type', :background=>'lightyellow', - :font=>@boldfont, :justify=>:left) - lbl_size = TkLabel.new(w, :text=>'Size', :background=>'lightyellow', - :font=>@boldfont, :justify=>:left) - - lbl_name.grid(:row=>0, :column=>0, :sticky=>:w) - lbl_grps.grid(:row=>1, :column=>0, :sticky=>:w) - lbl_type.grid(:row=>2, :column=>0, :sticky=>:w) - lbl_size.grid(:row=>3, :column=>0, :sticky=>:w) - - @name = TkLabel.new(w, :background=>'lightyellow', :justify=>:left) - @grps = TkLabel.new(w, :background=>'lightyellow', :justify=>:left) - @type = TkLabel.new(w, :background=>'lightyellow', :justify=>:left) - @size = TkLabel.new(w, :background=>'lightyellow', :justify=>:left) - - @name.grid(:row=>0, :column=>1, :sticky=>:w) - @grps.grid(:row=>1, :column=>1, :sticky=>:w) - @type.grid(:row=>2, :column=>1, :sticky=>:w) - @size.grid(:row=>3, :column=>1, :sticky=>:w) - - def name(txt) - @name['text'] = txt - end - def groups(txt) - @grps['text'] = txt - end - def type(txt) - @type['text'] = txt - end - def size(txt) - @size['text'] = txt - end - - overrideredirect(true) - withdraw - } - end - - def initialize(init_path = Tk::LIBRARY) - init_path = Tk::LIBRARY unless init_path - init_path = File.expand_path(init_path) - if File.directory?(init_path) - @initial_dir = init_path - @initial_file = 'tkIcons' - else - @initial_dir = File.dirname(init_path) - @initial_file = File.basename(init_path) - end - - if Tk::PLATFORM['platform'] == 'unix' - TkOption.add('*HighlightThickness', 0) - end - - @columns = 14 - @command = "" - - @delay_timer = nil - - dummy = TkLabel.new - @font = dummy.font - @boldfont = TkFont.new(@font, :weight=>:bold) - @icons = {} - @icon_name = {} - @icon_info = {} - - @library = TkVariable.new(File.join(@initial_dir, @initial_file)) - @groups = TkVariable.new('*') - - _create_controls - - _create_display - - _create_info_window - - Tk.root.title('viewIcons') - layout_resize - Tk.root.resizable(false, true) - - display_icons - end - - def init_info(item, name) - @icon_name[item] = name - - item.bind('Button-1', method(:clip_info), '%W') - item.bind('Enter', method(:delay_info), '%W') - item.bind('Leave', method(:cancel_info), '') - end - - def delay_info(item) - cancel_info - @delay_timer = TkTimer.new(200, 1, proc{ show_info(item) }).start - end - - def cancel_info - if @delay_timer - @delay_timer.cancel - @delay_timer = nil - end - @info_window.withdraw - end - - def show_info(item) - name, groups, type, size = @icon_info[@icon_name[item]] - @info_window.name(name) - @info_window.groups(groups) - @info_window.type(type) - @info_window.size(size) - - info_x = item.winfo_rootx + 10 - info_y = item.winfo_rooty + item.winfo_height - - @info_window.geometry("+#{info_x}+#{info_y}") - @info_window.deiconify - - @info_window.raise - - @delay_timer = nil - end - - def primary_transfer(offset, max_chars) - @command - end - - def lost_selection - @command = "" - end - - def clip_info(item) - name = @icon_name[item] - data_width = 60 - - cmd = "#{name} = TkPhotoImage.new(:data=><<'EOD')\n" - - icon_data = Tk::ICONS.query(name, :file=>@library.value, :items=>'d')[0][0] - - icon_data.scan(/.{1,#{data_width}}/m){|s| cmd << ' ' << s << "\n"} - - cmd << "EOD\n" - - @command = cmd - - TkClipboard.clear - TkClipboard.append(@command) - - if Tk::PLATFORM['platform'] == 'unix' - TkSelection.handle(Tk.root, method(:primary_transfer), - :selection=>'PRIMARY') - TkSelection.set_owner(Tk.root, :selection=>'PRIMARY', - :command=>method(:lost_selection)) - end - - Tk.bell - end - - def layout_resize - Tk.update - bbox = @icons_window.bbox('all') - width = @controls.winfo_width - @icons_window.yscrollbar.winfo_width - 8 - - @icons_window.configure(:width=>width, :scrollregion=>bbox, - :xscrollincrement=>'0.1i', - :yscrollincrement=>'0.1i') - end - - def select_icons - new_lib = Tk.getOpenFile(:initialdir=>@initial_dir, - :initialfile=>'tkIcons', - :title=>'Select Icon Library', - :filetypes=>[ - ['Icon Libraries', ['tkIcons*']], - ['All Files', ['*']] - ]) - - @library.value = new_lib if new_lib.length != 0 - display_icons - end - - def display_icons - column = 0 - limit = @columns - 1 - row = 0 - - unless File.exist?(@library.value) - Tk.messageBox(:icon=>'warning', :message=>'File does not exist', - :title=>'viewIcons') - return - end - - cursor = Tk.root[:cursor] - Tk.root[:cursor] = 'watch' - - Tk::ICONS.delete(@icons) - - @icons_frame.destroy if @icons_frame - @icons_frame = TkFrame.new(@icons_layout).pack - - @icons = Tk::ICONS.create(:file=>@library.value, :group=>@groups.value) - - Tk::ICONS.query(:file=>@library.value, :group=>@groups.value).each{|inf| - name = inf[0] - @icon_info[name] = inf - - lbl = TkLabel.new(@icons_frame, :image=>"::icon::#{name}") - lbl.grid(:column=>column, :row=>row, :padx=>3, :pady=>3) - # lbl.grid_columnconfigure column - - init_info(lbl, name) - - if column == limit - column = 0 - row += 1 - else - column += 1 - end - } - - Tk.root[:cursor] = cursor - end - - def set_columns(columns) - @columns = columns - 6.step(20, 2){|i| @column_btns[i][:relief] = :raised } - @column_btns[@columns][:relief] = :sunken - display_icons - end -end - -ViewIcons.new(ARGV[0]) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/blt/barchart5.rb b/ext/tk/sample/tkextlib/blt/barchart5.rb deleted file mode 100644 index f818ffc375..0000000000 --- a/ext/tk/sample/tkextlib/blt/barchart5.rb +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/blt' - -load File.join(File.dirname(File.expand_path(__FILE__)), - 'scripts', 'stipples.rb') - -TkOption.add('*graph.x.Title', 'X Axis Label') -TkOption.add('*graph.y.Title', 'Y Axis Label') -TkOption.add('*graph.title', 'A Simple Barchart') -TkOption.add('*graph.x.Font', 'Times 10') -TkOption.add('*graph.Element.Relief', :raised) - -visual = Tk.root.winfo_screenvisual -if visual != 'staticgray' && visual != 'grayscale' - TkOption.add('*graph.LineMarker.color', 'yellow') - TkOption.add('*graph.Element.Background', 'white') - TkOption.add('*graph.Legend.activeForeground', 'pink') - TkOption.add('*print.background', 'yellow') - TkOption.add('*quit.background', 'red') - TkOption.add('*graph.background', 'palegreen') - TkOption.add('*graph.plotBackground', 'lightblue') -end - -htext = Tk::BLT::Htext.new(:widgetname=>'.htext', :text=><'print', :text=>'Print', - :command=>proc{ - $graph.postsript(:output=>'bar.ps') - }) - Tk::BLT::Htext::Htext_Widget.window.append(b) - } - -%% button. -%% - - ruby { - $graph = Tk::BLT::Barchart.new(:widgetname=>'.htext.graph', - :relief=>:raised, :borderwidth=>2) - $graph.xaxis_configure(:rotate=>90, :stepsize=>0) - Tk::BLT::Htext::Htext_Widget.window.append($graph, - :fill=>:both, :padx=>4) - } - -%% - Hit the %% - - ruby { - b = TkButton.new(Tk::BLT::Htext::Htext_Widget.window, - :widgetname=>'quit', :text=>'Quit', - :command=>proc{ exit }) - Tk::BLT::Htext::Htext_Widget.window.append(b) - } - -%% button when you've seen enough.%% - - ruby { - l = TkLabel.new(Tk::BLT::Htext::Htext_Widget.window, :bitmap=>'BLT') - Tk::BLT::Htext::Htext_Widget.window.append(l, :padx=>20) - } - -%% -EOD - -names = %w(One Two Three Four Five Six Seven Eight) -if visual == 'staticgray' || visual == 'grayscale' - fgcolors = %w(white white white white white white white white) - bgcolors = %w(black black black black black black black black) -else - fgcolors = %w(yellow orange red magenta purple blue cyan green) - bgcolors = %w(yellow4 orange4 red4 magenta4 purple4 blue4 cyan4 green4) -end - -numColors = names.length - -Tk::TCL_PRECISION.value = 15 - -x = Tk::BLT::Vector.new -y = Tk::BLT::Vector.new -x.seq(-5.0, 5.0, 0.2) -y.expr("sin(#{x})") -barWidth = 0.19 - -$graph.element_create('sin', :relief=>:raised, :borderwidth=>1, - :x=>x, :y=>y, :barwidth=>barWidth) - -Tk::BLT::Table.add(Tk.root, htext, :fill=>:both) - -Tk.root.minsize(0, 0) - -Tk::BLT.zoom_stack($graph) -Tk::BLT.crosshairs($graph) -Tk::BLT.active_legend($graph) -Tk::BLT.closest_point($graph) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/blt/calendar.rb b/ext/tk/sample/tkextlib/blt/calendar.rb deleted file mode 100644 index c7989cec36..0000000000 --- a/ext/tk/sample/tkextlib/blt/calendar.rb +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false - -require 'tk' -require 'tkextlib/blt' - -require 'date' - -dir = File.join(File.dirname(File.expand_path(__FILE__)), 'images') -file = File.join(dir, 'chalk.gif') -active = File.join(dir, 'rain.gif') - -texture1 = TkPhotoImage.new(:file=>file) -texture2 = TkPhotoImage.new(:file=>active) - -TkOption.add('*Tile', texture1) - -TkOption.add('*HighlightThickness', 0) -TkOption.add('*calendar.weekframe*Tile', texture2) -TkOption.add('*Calendar.Label.borderWidth', 0) -TkOption.add('*Calendar.Label.relief', :sunken) -TkOption.add('*Calendar.Frame.borderWidth', 2) -TkOption.add('*Calendar.Frame.relief', :raised) -TkOption.add('*Calendar.Label.font', 'Helvetica 11') -TkOption.add('*Calendar.Label.foreground', 'navyblue') -TkOption.add('*button.foreground', 'navyblue') -TkOption.add('*background', 'grey85') -TkOption.add('*Label.ipadX', 200) - -TkOption.add('*tile', texture2) - -class BLT_Calendar_sample - @@monthInfo = [ - nil, # dummy - ['January', 31], - ['February', 28], - ['March', 31], - ['April', 30], - ['May', 31], - ['June', 30], - ['July', 31], - ['August', 31], - ['September', 30], - ['October', 31], - ['November', 30], - ['December', 31] - ] - - @@abbrDays = [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ] - - def initialize() - today = Date.today - - if TkComm.bool(Tk.info(:commands, '.calendar')) - Tk.destroy('.calendar') - end - cal = Tk::BLT::Tile::Frame.new(:widgetname=>'.calendar', - :classname=>'Calendar', - :width=>'3i', :height=>'3i') - - mon = Tk::BLT::Tile::Label.new(cal, :font=>'Courier 14 bold', - :text=>"#{@@monthInfo[today.month][0]} " + - "#{today.year}") - Tk::BLT::Table.add(cal, mon, [1, 0], :cspan=>7, :pady=>10) - - week_f = Tk::BLT::Tile::Frame.new(cal, :widgetname=>'weekframe', - :relief=>:sunken, :borderwidth=>1) - Tk::BLT::Table.add(cal, week_f, [2, 0], :columnspan=>7, :fill=>:both) - - @@abbrDays.each_with_index{|dayName, idx| - Tk::BLT::Table.add(cal, - Tk::BLT::Tile::Label.new(cal, :text=>dayName, - :font=>'Helvetica 12'), - [2, idx], :pady=>2, :padx=>2) - } - - Tk::BLT::Table.itemconfigure(cal, 'c*', 'r2', :pad=>4) - - numDays = @@monthInfo[today.month][1] - week = 0 - cnt = 1 - - wkday = today.wday - ((today.day - 1) % 7) - wkday += 7 if wkday < 0 - - while cnt <= numDays - Tk::BLT::Table.add(cal, - Tk::BLT::Tile::Label.new(cal, :text=>cnt){ - self.configure(:borderwidth=>1, - :relief=>:sunken) if cnt == today.day - }, - [week+3, wkday], :fill=>:both, :ipadx=>10, :ipady=>4) - cnt += 1 - wkday += 1 - if wkday == 7 - week += 1 - wkday = 0 - end - end - - Tk::BLT::Tile::Frame.new(cal, :borderwidth=>1, :relief=>:sunken){|f| - Tk::BLT::Table.add(f, - Tk::BLT::Tile::Button.new(f, :widgetname=>'button', - :command=>proc{exit}, - :borderwidth=>2, - :text=>'Quit'), - :padx=>4, :pady=>4) - Tk::BLT::Table.add(cal, f, [week+4, 5], :cspan=>2, :pady=>4) - } - - Tk::BLT::Table.add(Tk.root, cal, :fill=>:both) - Tk::BLT::Table.itemconfigure(cal, 'r0', :resize=>:none) - end -end - -BLT_Calendar_sample.new - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/blt/graph6.rb b/ext/tk/sample/tkextlib/blt/graph6.rb deleted file mode 100644 index 26baa527ef..0000000000 --- a/ext/tk/sample/tkextlib/blt/graph6.rb +++ /dev/null @@ -1,2223 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false - -require 'tk' -require 'tkextlib/blt' - -Tk::TCL_PRECISION.value = 15 - -[ - ['*Graph.Width', '10i'], - ['*Graph.leftMargin', '.75i'], - ['*Graph.Height', '6i'], - ['*Graph.plotBackground', 'black'], - ['*LineMarker.color', 'white'], - ['*LineMarker.Dashes', 5], - ['*TextMarker.foreground', 'white'], - ['*TextMarker.Background', ''], - - ['*Graph.x.hide', true], - ['*Graph.x.title', ''], - ['*Graph.y.rotate', 90], - # ['*Graph.y.stepSize', 2.0], - ['*Graph.title', ''], - ['*graph.Title', 'Example s27'], - ['*graph.x.hide', false], - ['*graph.topMargin', 0], - ['*graph.bottomMargin', 0], - ['*x.Title', 'Time'], - ['*y.Title', 'Signals'], - ['*Pixels', 1], - - ['*Reduce', 0.5], - ['*bufferElements', false], - - ['*Element.color', 'green4'], - ['*Element.ScaleSymbols', true], - ['*Element.Color', 'grey70'], - ['*Element.Symbol', :none], - ['*Element.LineWidth', 1], - # ['*Element.Smooth', :natural], - ['*Element.Smooth', :catrom], - - ['*activeLine.LineWidth', 2], - ['*activeLine.Color', 'white'], - ['*activeLine.Color', 'green1'], - - # ['*Legend.Hide', true], - ['*Legend.Position', :right], - ['*Legend.Relief', :flat], - ['*Legend.activeRelief', :sunken], - ['*Legend.borderWidth', 2], - #['*Legend.Font', '-*-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*'], - ['*Legend.Font', 'Helvetica -10'], - ['*Grid.hide', false], - ['*Grid.dashes', [1, 5]], - - # ['*foreground', 'white'], - ['*zoomOutline.outline', 'yellow'], -].each{|k, v| TkOption.add(k, v)} - -############################## - -class BLT_Graph_Demo - def initialize - @graph = Tk::BLT::Graph.new(:widgetname=>'graph') - - @root = Tk.root - @root.minsize(0, 0) - - _set_vectors() - (1..39).each{|i| @graph.element_create("V#{i}", :x=>@x, :y=>@v[i])} - - @top = Tk::BLT::Tile::Toplevel.new -=begin - legend = Tk::BLT::Graph.new(@top, :widgetname=>'legend', - :without_creating=>true) - @graph.legend_configure(:position=>legend) -=end - # legend = @graph.legend_window_create(@top, :widgetname=>'legend') - legend = @graph.legend_window_create(@top) - legend.pack(:fill=>:both, :expand=>true) - - Tk::BLT::Table.add(@root, @graph, [0,0], :fill=>:both) - - @quit_btn = Tk::BLT::Tile::Button.new(:text=>' quit ', :background=>'red', - :command=>proc{exit}) - Tk::BLT::Table.add(@root, @quit_btn, [1,0], :anchor=>:e, :padx=>10) - - @graph.zoom_stack - @graph.crosshairs - @graph.closest_point - @graph.print_key - - @graph.legend_bind(:all, 'ButtonRelease-1', - proc{|w| highlightTrace(w)}, '%W') - @graph.legend_bind(:all, 'ButtonRelease-3', - proc{|w| - w.legend_deactivate('*') - active = w.element_activate - w.element_deactivate(*active) - }, '%W') - end - - private - - def _set_vectors - @x = Tk::BLT::Vector.new(:variable=>'') - @v = [] - (1..39).each{|i| @v[i] = Tk::BLT::Vector.new(:variable=>'')} - - @x.set(<<-'EOD') - 0 1e-10 2e-10 3e-10 4e-10 5e-10 6e-10 7e-10 8e-10 9e-10 - 1e-09 1.1e-09 1.2e-09 1.3e-09 1.4e-09 1.5e-09 1.6e-09 1.7e-09 - 1.8e-09 1.9e-09 2e-09 2.1e-09 2.2e-09 2.3e-09 2.4e-09 2.5e-09 - 2.6e-09 2.7e-09 2.8e-09 2.9e-09 3e-09 3.1e-09 3.2e-09 3.3e-09 - 3.4e-09 3.5e-09 3.6e-09 3.7e-09 3.8e-09 3.9e-09 4e-09 4.1e-09 - 4.2e-09 4.3e-09 4.4e-09 4.5e-09 4.6e-09 4.7e-09 4.8e-09 - 4.9e-09 5e-09 5.1e-09 5.2e-09 5.3e-09 5.4e-09 5.5e-09 5.6e-09 - 5.7e-09 5.8e-09 5.9e-09 6e-09 6.1e-09 6.2e-09 6.3e-09 6.4e-09 - 6.5e-09 6.6e-09 6.7e-09 6.8e-09 6.9e-09 7e-09 7.1e-09 7.2e-09 - 7.3e-09 7.4e-09 7.5e-09 7.6e-09 7.7e-09 7.8e-09 7.9e-09 - 8e-09 8.1e-09 8.2e-09 8.3e-09 8.4e-09 8.5e-09 8.6e-09 8.7e-09 - 8.8e-09 8.9e-09 9e-09 9.1e-09 9.2e-09 9.3e-09 9.4e-09 9.5e-09 - 9.6e-09 9.7e-09 9.8e-09 9.9e-09 1e-08 1.01e-08 1.02e-08 - 1.03e-08 1.04e-08 1.05e-08 1.06e-08 1.07e-08 1.08e-08 1.09e-08 - 1.1e-08 1.11e-08 1.12e-08 1.13e-08 1.14e-08 1.15e-08 1.16e-08 - 1.17e-08 1.18e-08 1.19e-08 1.2e-08 1.21e-08 1.22e-08 1.23e-08 - 1.24e-08 1.25e-08 1.26e-08 1.27e-08 1.28e-08 1.29e-08 1.3e-08 - 1.31e-08 1.32e-08 1.33e-08 1.34e-08 1.35e-08 1.36e-08 1.37e-08 - 1.38e-08 1.39e-08 1.4e-08 1.41e-08 1.42e-08 1.43e-08 1.44e-08 - 1.45e-08 1.46e-08 1.47e-08 1.48e-08 1.49e-08 1.5e-08 1.51e-08 - 1.52e-08 1.53e-08 1.54e-08 1.55e-08 1.56e-08 1.57e-08 1.58e-08 - 1.59e-08 1.6e-08 1.61e-08 1.62e-08 1.63e-08 1.64e-08 1.65e-08 - 1.66e-08 1.67e-08 1.68e-08 1.69e-08 1.7e-08 1.71e-08 1.72e-08 - 1.73e-08 1.74e-08 1.75e-08 1.76e-08 1.77e-08 1.78e-08 1.79e-08 - 1.8e-08 1.81e-08 1.82e-08 1.83e-08 1.84e-08 1.85e-08 1.86e-08 - 1.87e-08 1.88e-08 1.89e-08 1.9e-08 1.91e-08 1.92e-08 1.93e-08 - 1.94e-08 1.95e-08 1.96e-08 1.97e-08 1.98e-08 1.99e-08 2e-08 - 2.01e-08 2.02e-08 2.03e-08 2.04e-08 2.05e-08 2.06e-08 2.07e-08 - 2.08e-08 2.09e-08 2.1e-08 2.11e-08 2.12e-08 2.13e-08 2.14e-08 - 2.15e-08 2.16e-08 2.17e-08 2.18e-08 2.19e-08 2.2e-08 2.21e-08 - 2.22e-08 2.23e-08 2.24e-08 2.25e-08 2.26e-08 2.27e-08 2.28e-08 - 2.29e-08 2.3e-08 2.31e-08 2.32e-08 2.33e-08 2.34e-08 2.35e-08 - 2.36e-08 2.37e-08 2.38e-08 2.39e-08 2.4e-08 2.41e-08 2.42e-08 - 2.43e-08 2.44e-08 2.45e-08 2.46e-08 2.47e-08 2.48e-08 2.49e-08 - 2.5e-08 2.51e-08 2.52e-08 2.53e-08 2.54e-08 2.55e-08 2.56e-08 - 2.57e-08 2.58e-08 2.59e-08 2.6e-08 2.61e-08 2.62e-08 2.63e-08 - 2.64e-08 2.65e-08 2.66e-08 2.67e-08 2.68e-08 2.69e-08 2.7e-08 - 2.71e-08 2.72e-08 2.73e-08 2.74e-08 2.75e-08 2.76e-08 2.77e-08 - 2.78e-08 2.79e-08 2.8e-08 2.81e-08 2.82e-08 2.83e-08 2.84e-08 - 2.85e-08 2.86e-08 2.87e-08 2.88e-08 2.89e-08 2.9e-08 2.91e-08 - 2.92e-08 2.93e-08 2.94e-08 2.95e-08 2.96e-08 2.97e-08 2.98e-08 - 2.99e-08 3e-08 3.01e-08 3.02e-08 3.03e-08 3.04e-08 3.05e-08 - 3.06e-08 3.07e-08 3.08e-08 3.09e-08 3.1e-08 3.11e-08 3.12e-08 - 3.13e-08 3.14e-08 3.15e-08 3.16e-08 3.17e-08 3.18e-08 3.19e-08 - 3.2e-08 3.21e-08 3.22e-08 3.23e-08 3.24e-08 3.25e-08 3.26e-08 - 3.27e-08 3.28e-08 3.29e-08 3.3e-08 3.31e-08 3.32e-08 3.33e-08 - 3.34e-08 3.35e-08 3.36e-08 3.37e-08 3.38e-08 3.39e-08 3.4e-08 - 3.41e-08 3.42e-08 3.43e-08 3.44e-08 3.45e-08 3.46e-08 3.47e-08 - 3.48e-08 3.49e-08 3.5e-08 3.51e-08 3.52e-08 3.53e-08 3.54e-08 - 3.55e-08 3.56e-08 3.57e-08 3.58e-08 3.59e-08 3.6e-08 - EOD - - @v[1].set(<<-'EOD') - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - EOD - - @v[2].set(<<-'EOD') - 0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 4 3 2 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 4 3 2 1 - 5.32907e-15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 5 - 5 5 5 5 5 5 5 5 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 - EOD - - @v[3].set(<<-'EOD') - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 3 2 1 8.88178e-16 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 4 3 2 1 2.13718e-14 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 - EOD - - @v[4].set(<<-'EOD') - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - EOD - - @v[5].set(<<-'EOD') - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - EOD - - @v[6].set(<<-'EOD') - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 3 2 1 8.88178e-16 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 4 3 2 1 2.13718e-14 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 - EOD - - @v[7].set(<<-'EOD') - 5 5.16904 4.84159 3.34542 0.317102 0.103304 0.0275721 0.0221534 - 0.017689 0.0142639 0.0113974 0.00918238 0.00742541 0.00616602 - 0.00481195 0.00397049 -0.0659889 -0.025671 0.165495 0.986891 - 3.05229 4.55511 4.91611 4.98192 4.99428 4.99833 4.99095 - 4.97295 4.95493 4.93428 4.90723 4.94799 4.98584 4.99566 - 4.99813 4.99907 4.99947 4.99965 4.99976 4.99984 4.99989 - 4.99992 4.99994 4.99996 4.99998 5.00002 5.00006 5.00002 - 4.99996 4.99994 4.99999 5.00003 5.00002 5 4.99997 4.99997 - 4.99997 4.99997 4.99997 4.99996 4.99997 4.99997 4.99998 - 4.99998 4.99999 5 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5 5 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99998 4.99998 4.99998 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5.16575 - 4.69986 2.43862 0.0230224 0.035229 -0.0210607 -0.0292766 - -0.0172693 -0.00271479 -0.000912251 -0.000349106 -0.000116866 - -4.24733e-05 -1.39536e-05 -3.01179e-05 -0.0657192 -0.0204835 - 0.183378 1.07181 3.118 4.46472 4.84158 4.94795 4.98173 4.99236 - 4.99762 5.01939 5.0433 5.05332 5.04959 5.03955 5.02851 5.02052 - 5.01422 5.00965 5.00631 5.00405 5.00248 5.00083 5.00012 - 5.00209 5.00387 5.00347 4.99917 4.99213 4.98411 4.97521 - 4.96332 4.94601 4.9304 4.94633 4.97936 4.99264 4.99685 4.99857 - 4.99925 4.99954 4.9997 4.99973 4.9997 4.99973 4.99979 4.99983 - 4.99986 4.99988 4.9999 4.9999 4.99992 4.99993 4.99994 4.99995 - 4.99996 4.99996 4.99997 4.99997 4.99998 4.99998 4.99998 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00002 5.00002 5.00002 - 5.00002 5.00001 5.00001 5.00001 5 5 5 5 5 5 5 5 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 5 5 5.14242 4.76101 3.16003 0.299374 - 0.0645506 -0.000498424 -2.45108e-05 -2.27986e-05 -5.24401e-05 - -4.9884e-05 -4.92491e-05 -2.93354e-05 -3.21402e-05 -2.11851e-05 - -3.37925e-05 -0.0657892 -0.020563 0.182582 1.06058 3.12484 - 4.46552 4.84146 4.95102 4.98556 4.99472 4.99806 4.99909 - 4.99955 4.99976 4.99994 4.99992 5.00029 4.99967 4.99849 - 4.99736 4.99884 5.00099 5.00377 5.00215 4.99994 4.99893 - 4.99788 4.99862 5.00055 5.00134 5.00127 5.00073 5.00039 - 5.00018 5.00006 5.00001 4.99985 5.00026 5.00018 5.00003 - 4.99981 4.99985 4.99987 4.99985 4.99982 4.99982 4.99982 - 4.99983 4.99985 4.99987 4.99989 4.99991 4.99992 4.99994 - 4.99995 4.99995 4.99994 4.99994 4.99996 4.99999 5.00002 - 5.00008 5.00009 5.00006 5.00001 5 4.99999 4.99998 4.99997 - 4.99996 4.99997 4.99997 4.99998 4.99998 4.99999 4.99999 - 4.99999 5 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99998 4.99998 - 4.99998 - EOD - - @v[8].set(<<-'EOD') - 5 5.03758 5.04711 4.96911 4.20882 3.96295 4.01117 4.15521 - 4.2967 4.42274 4.5295 4.6176 4.69014 4.74831 4.7966 4.83537 - 4.80526 4.787 4.79295 4.88588 5.08978 5.15615 5.10778 5.07718 - 5.06652 5.08225 4.9744 4.52977 3.77452 2.69426 1.15294 0.245509 - 0.0981544 0.0567527 0.0367487 0.0252578 0.0180599 0.0133837 - 0.0101497 0.0078616 0.00620186 0.00499056 0.0041027 0.00344223 - 0.00295808 0.00260089 0.00229887 0.00200817 0.00176397 0.00160116 - 0.00147381 0.00134645 0.00125029 0.00116043 0.00107371 0.00101981 - 0.000965921 0.000912028 0.000858135 0.000804242 0.000761669 - 0.00072672 0.000691771 0.000656823 0.000621874 0.000588722 - 0.00057041 0.000552098 0.000533785 0.000515473 0.000497162 - 0.00047885 0.000460537 0.000442226 0.000423914 0.000405601 - 0.000388399 0.000378694 0.000368989 0.000359284 0.00034958 - 0.000339875 0.00033017 0.000320465 0.00031076 0.000301055 - 0.00029135 0.000282207 0.000276247 0.000270287 0.000264327 - 0.000258367 0.000252407 0.000246447 0.000240487 0.000234527 - 0.000228567 0.000222607 0.000217086 0.000213696 0.000210307 - 0.000206918 0.000203528 0.000200139 0.00019675 0.00019336 - 0.000189971 0.000186582 0.000183192 0.000179803 0.000176414 - 0.000173025 0.000169635 0.000166246 0.000162857 0.000159467 - 0.000156078 0.000152689 0.000149299 0.00014591 0.00014255 - 0.0316021 0.163272 0.348732 0.603651 0.35745 0.135965 0.0707354 - 0.0314595 0.0201047 0.00994945 0.00389601 0.00138839 0.00060778 - 0.000329648 0.000492396 -0.0732035 -0.0844077 -0.0789062 - -0.0390837 0.0197559 0.0183094 -0.00180099 -0.0189565 -0.0424144 - -0.0735904 -0.0892423 0.285039 1.13702 2.10809 2.95826 3.60164 - 4.0435 4.35771 4.57254 4.71769 4.81329 4.87534 4.91487 4.94264 - 4.97375 5.01526 5.06517 5.10154 5.06259 4.89005 4.5787 4.12226 - 3.46151 2.49023 1.2586 0.32725 0.116753 0.0701865 0.0455509 - 0.0286914 0.0178176 0.0117599 0.00902715 0.00760583 0.00637745 - 0.00543811 0.00439377 0.00352448 0.0030151 0.00285771 0.002465 - 0.00203114 0.00173004 0.0014839 0.00125177 0.00105327 0.000894905 - 0.000766372 0.000658894 0.000569105 0.000492114 0.000427938 - 0.000370217 0.000314758 0.000266569 0.000233726 0.000209048 - 0.000191957 0.000177169 0.000166604 0.000161 0.000157314 - 0.000143828 0.000130342 0.000116857 0.000103371 8.98855e-05 - 7.63998e-05 6.29141e-05 5.76583e-05 5.30027e-05 4.8347e-05 - 4.36913e-05 3.90357e-05 3.438e-05 2.97243e-05 2.72507e-05 - 2.59083e-05 2.45659e-05 2.32235e-05 2.18811e-05 2.05387e-05 - 1.91963e-05 1.78539e-05 1.65115e-05 1.51691e-05 1.38267e-05 - 1.24843e-05 1.11419e-05 9.79954e-06 8.51574e-06 7.69807e-06 - 6.8804e-06 6.06273e-06 5.24506e-06 0.0287318 0.0317111 -0.0320087 - -0.103609 0.0369639 0.0121128 0.00961197 0.00934971 0.00820853 - 0.00699769 0.00607002 0.00535541 0.00476552 0.00427601 0.00376357 - -0.073012 -0.0866964 -0.0809538 -0.038005 0.0277001 0.0188906 - 0.00614597 0.00373629 0.00489787 0.0146573 0.0191052 0.0151708 - 0.0124224 0.0105859 0.00879272 0.00729464 0.0070047 0.00449575 - -0.00626652 -0.0252417 -0.0147287 0.022538 0.0822905 0.0947372 - 0.0657516 0.0445506 0.0316753 0.0220971 0.0158101 0.0140971 - 0.0161498 0.0139876 0.0122447 0.0106994 0.009397 0.00822236 - 0.00686509 0.00797431 0.00751269 0.00671173 0.00595243 0.00524633 - 0.00459528 0.00401688 0.00350109 0.00303954 0.00260569 0.00222792 - 0.00191033 0.00163917 0.00140949 0.00121464 0.0010471 0.000900638 - 0.000768847 0.000645236 0.000524807 0.000460275 0.000442237 - 0.000446775 0.000397026 0.000301585 0.000228994 0.000190894 - 0.000166569 0.000152261 0.000137953 0.000123644 0.000109336 - 9.50281e-05 8.56557e-05 7.78437e-05 7.00318e-05 6.22198e-05 - 5.44079e-05 4.87539e-05 4.57761e-05 4.27982e-05 3.98203e-05 - 3.68425e-05 3.38646e-05 3.08868e-05 2.79089e-05 2.4931e-05 - 2.19532e-05 1.89753e-05 1.75244e-05 1.64095e-05 1.52946e-05 - 1.41797e-05 1.30648e-05 1.19499e-05 1.0835e-05 9.72011e-06 - 8.60521e-06 7.4903e-06 6.5117e-06 6.10334e-06 5.69497e-06 - 5.2866e-06 4.87824e-06 4.46987e-06 4.06151e-06 3.65314e-06 - 3.24477e-06 - EOD - - @v[9].set(<<-'EOD') - 1.86175 1.99708 2.07867 2.01211 2.43309 3.27194 3.63896 - 3.90426 4.11074 4.27932 4.41496 4.52543 4.61491 4.68862 - 4.7479 4.79666 4.72895 4.68886 4.70354 4.81353 5.01568 5.14184 - 5.10482 5.07362 5.05143 5.03638 5.02323 5.01465 5.00853 - 5.00383 4.99985 5.00454 5.00652 5.00546 5.00411 5.003 5.00214 - 5.00151 5.00106 5.00073 5.0005 5.00034 5.00023 5.00015 5.0001 - 5.00005 5 5.00001 5.00005 5.00005 5.00003 5 4.99998 4.99996 - 4.99994 4.99995 4.99997 4.99998 5 5.00001 5.00002 5.00002 - 5.00003 5.00003 5.00003 5.00003 5.00003 5.00003 5.00002 - 5.00002 5.00001 5.00001 5.00001 5 5 5 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99998 - 4.99998 4.99998 4.99999 4.99999 4.99999 4.99999 5 5 5 5 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.17392 4.94828 3.78491 - 1.52079 0.608874 0.244031 0.127087 0.0552995 0.0361032 0.0169025 - 0.006364 0.00217624 0.000921391 0.000457305 0.000786754 - -0.120016 -0.148054 -0.15898 -0.0801463 0.16463 0.174017 - 0.0799249 0.0318788 0.0129696 0.00483397 0.0025677 0.0042079 - 0.00350003 0.00178404 -8.72902e-05 -0.00128497 -0.00142213 - -0.00130018 -0.00106874 -0.000789207 -0.000824335 -0.00104518 - -0.00136799 -0.004366 -0.0102621 -0.0109254 -0.00649259 - -0.00194842 0.00029793 0.00148673 0.00221085 0.00228291 - 0.00185261 0.00139687 0.00148183 0.00562266 0.00844119 0.00754627 - 0.00657396 0.00591212 0.00539269 0.0049282 0.00448417 0.0040572 - 0.00363719 0.00320392 0.00279607 0.00243938 0.00211505 0.00182302 - 0.00156254 0.0013341 0.00113834 0.000971865 0.00082776 0.000706193 - 0.000602499 0.000515059 0.000441401 0.00037897 0.000325459 - 0.00028083 0.000242096 0.000207274 0.000176444 0.000150372 - 0.000126407 0.000103373 9.05522e-05 8.53555e-05 8.63685e-05 - 9.02593e-05 8.37346e-05 7.72099e-05 7.06852e-05 6.41605e-05 - 5.76358e-05 5.11112e-05 4.45865e-05 4.08176e-05 3.72497e-05 - 3.36818e-05 3.01138e-05 2.65459e-05 2.2978e-05 1.94101e-05 - 1.76154e-05 1.67399e-05 1.58645e-05 1.4989e-05 1.41136e-05 - 1.32381e-05 1.23626e-05 1.14872e-05 1.06117e-05 9.73629e-06 - 8.86083e-06 7.98538e-06 7.10993e-06 6.23447e-06 5.44363e-06 - 5.32578e-06 5.20792e-06 5.09007e-06 4.97222e-06 0.0784323 - 0.0474527 -0.0764232 -0.151146 0.0615785 0.0144489 0.00974161 - 0.00947176 0.00849005 0.00728201 0.00630581 0.00554032 0.00487809 - 0.00441504 0.00384139 -0.118943 -0.149894 -0.161173 -0.0825299 - 0.171686 0.176912 0.0816085 0.0335236 0.013791 0.0056976 - 0.00238833 0.00105348 0.000526199 0.00025969 0.000396026 - 0.000837835 0.00170131 0.00196699 -0.000553314 -0.0061621 - -0.0111895 -0.0142698 -0.0124608 -0.00795847 -0.00467822 - -0.0043058 -0.00874449 -0.0118584 -0.00871386 -0.00377892 - 1.95244e-05 0.00218952 0.00325486 0.00386497 0.00422837 - 0.00446883 0.00447065 0.00486647 0.00547838 0.00565398 0.00559092 - 0.00538752 0.00507015 0.00466305 0.00420756 0.00373465 0.00328404 - 0.00287059 0.00250057 0.00216124 0.00184861 0.00156815 0.00134624 - 0.00117857 0.00103412 0.0008948 0.000761012 0.000619853 - 0.000462614 0.000319965 0.000287666 0.000356415 0.000379946 - 0.000339183 0.00027972 0.000252982 0.000226244 0.000199507 - 0.000172769 0.000146031 0.000130097 0.000117578 0.000105059 - 9.25401e-05 8.00213e-05 7.11204e-05 6.67061e-05 6.22918e-05 - 5.78775e-05 5.34632e-05 4.90489e-05 4.46346e-05 4.02203e-05 - 3.5806e-05 3.13916e-05 2.69773e-05 2.4827e-05 2.31747e-05 - 2.15225e-05 1.98702e-05 1.8218e-05 1.65658e-05 1.49135e-05 - 1.32613e-05 1.1609e-05 9.95678e-06 8.50108e-06 7.86765e-06 - 7.23422e-06 6.60079e-06 5.96736e-06 5.33393e-06 4.7005e-06 - 4.06707e-06 3.43363e-06 - EOD - - @v[10].set(<<-'EOD') - 1.86175 1.99308 2.16619 2.46661 3.09359 3.76864 4.31299 - 4.65564 4.83425 4.92153 4.96157 4.98063 4.98649 4.99039 - 4.9945 4.9972 4.96206 4.89882 4.83865 4.83202 4.91016 5.04479 - 5.06078 5.04827 5.03474 5.0246 5.01639 5.00996 5.00569 5.00239 - 5.00043 5.00296 5.00437 5.00382 5.00287 5.00208 5.00148 - 5.00104 5.00073 5.0005 5.00034 5.00023 5.00016 5.00011 5.00008 - 5.00007 5.00007 5.00004 5 4.99998 4.99998 4.99997 4.99998 - 4.99999 5 5 5.00001 5.00001 5.00001 5.00002 5.00002 5.00001 - 5.00001 5.00001 5.00001 5 5 5 5 5 5 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 5 5 5 5 5 5 5 5 5 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5 5 5 5 5 5 5 5 5.10081 - 5.10949 4.98359 5.00733 5.15145 4.37298 2.36126 0.470759 - 0.0577238 0.0115884 0.00262611 0.000671499 0.000389038 0.000291291 - 0.000317347 -0.0167823 -0.0158344 -0.0140559 0.0104849 0.0865874 - 0.107813 0.0524688 0.0214369 0.00876443 0.00341595 0.00170778 - 0.00259042 0.0022241 0.00118519 1.10217e-06 -0.000784506 - -0.000948169 -0.000856256 -0.000696719 -0.000485987 -0.000724787 - -0.000981491 -0.001454 -0.00552498 -0.0114992 -0.0105266 - -0.00543527 -0.000982798 0.00127356 0.00224212 0.00275439 - 0.00281098 0.0025471 0.00230368 0.00222576 0.00485522 0.00729453 - 0.00691796 0.0062615 0.00573987 0.0052688 0.00481185 0.00436934 - 0.00394326 0.00352712 0.00309978 0.00270038 0.00235335 0.00203742 - 0.00175256 0.00150067 0.00128126 0.00109323 0.000933619 - 0.000795113 0.000678182 0.00057843 0.000494345 0.000423609 - 0.000363821 0.000312766 0.000269856 0.000232389 0.000198382 - 0.000168126 0.00014267 0.000119293 9.69034e-05 8.5669e-05 - 8.26828e-05 8.64066e-05 9.26665e-05 8.5454e-05 7.82416e-05 - 7.10291e-05 6.38167e-05 5.66043e-05 4.93918e-05 4.21794e-05 - 3.86073e-05 3.53007e-05 3.19941e-05 2.86876e-05 2.5381e-05 - 2.20744e-05 1.87678e-05 1.70933e-05 1.62648e-05 1.54363e-05 - 1.46079e-05 1.37794e-05 1.2951e-05 1.21225e-05 1.12941e-05 - 1.04656e-05 9.63716e-06 8.80871e-06 7.98026e-06 7.1518e-06 - 6.32335e-06 5.5374e-06 5.08959e-06 4.64178e-06 4.19397e-06 - 3.74616e-06 0.0438026 0.0242078 -0.0602019 -0.0840866 0.00148461 - -0.00292489 0.000442098 0.00219489 0.00281478 0.00290756 - 0.00277945 0.00263896 0.00240099 0.00223283 0.001947 -0.0153629 - -0.0148815 -0.0128673 0.0126017 0.0905161 0.11051 0.0538958 - 0.022562 0.00935726 0.00397422 0.00172534 0.000790207 0.000416322 - 0.000191632 0.000469721 0.0009779 0.00192566 0.00200688 - -0.0016502 -0.00733932 -0.0128113 -0.0147608 -0.0115456 - -0.00668995 -0.00401368 -0.00463908 -0.0101197 -0.0118993 - -0.0076276 -0.00262656 0.000813059 0.00264455 0.00350796 - 0.00399494 0.0043049 0.00451658 0.00444739 0.00503842 0.00559516 - 0.00568213 0.00556459 0.0053176 0.00496654 0.00454337 0.00408592 - 0.00362171 0.00317793 0.00277001 0.00240394 0.00207009 0.00176575 - 0.00149725 0.00129045 0.00114257 0.00101135 0.000871672 - 0.000723764 0.000580438 0.000427507 0.000296956 0.000281834 - 0.000376628 0.000412266 0.000367547 0.000295305 0.000264513 - 0.000233721 0.000202929 0.000172137 0.000141345 0.000124721 - 0.000112577 0.000100433 8.82893e-05 7.61453e-05 6.75517e-05 - 6.33609e-05 5.91701e-05 5.49792e-05 5.07884e-05 4.65976e-05 - 4.24067e-05 3.82159e-05 3.40251e-05 2.98342e-05 2.56434e-05 - 2.36401e-05 2.21181e-05 2.05961e-05 1.90741e-05 1.75521e-05 - 1.60301e-05 1.45081e-05 1.29861e-05 1.14641e-05 9.94208e-06 - 8.59252e-06 7.96439e-06 7.33626e-06 6.70813e-06 6.07999e-06 - 5.45186e-06 4.82373e-06 4.1956e-06 3.56747e-06 - EOD - - @v[11].set(<<-'EOD') - 1.86175 1.73419 1.42874 1.04055 0.943004 0.268275 0.0826455 - 0.0388346 0.0214104 0.0135431 0.00961322 0.00712846 0.00588262 - 0.00432397 0.00377774 0.00270134 -0.00393731 -0.00542187 - -0.00126596 0.0113777 0.0134522 0.00477056 -0.00211067 -0.00229253 - -0.00173355 -0.00122404 -0.00113426 -0.000744931 -0.000520112 - -0.000410048 -0.000220439 0.000508104 5.15856e-05 -0.000112593 - -0.000118917 -9.57394e-05 -7.15727e-05 -5.11847e-05 -3.58275e-05 - -2.47166e-05 -1.68866e-05 -1.14082e-05 -7.66646e-06 -5.12139e-06 - -3.63426e-06 -3.01815e-06 -2.64862e-06 -1.4947e-06 -1.91403e-07 - -2.5763e-08 -7.73699e-07 -1.52164e-06 -1.07268e-06 -3.81696e-07 - 2.6727e-07 4.75489e-07 6.83708e-07 8.91926e-07 1.10014e-06 - 1.30836e-06 1.2482e-06 1.00726e-06 7.66311e-07 5.25364e-07 - 2.84417e-07 6.27857e-08 7.43904e-10 -6.12979e-08 -1.2334e-07 - -1.85382e-07 -2.47423e-07 -3.09465e-07 -3.71507e-07 -4.33549e-07 - -4.95591e-07 -5.57633e-07 -6.04571e-07 -5.4944e-07 -4.9431e-07 - -4.3918e-07 -3.84049e-07 -3.28919e-07 -2.73789e-07 -2.18659e-07 - -1.63528e-07 -1.08398e-07 -5.32678e-08 1.062e-09 5.08502e-08 - 1.00638e-07 1.50427e-07 2.00215e-07 2.50003e-07 2.99791e-07 - 3.4958e-07 3.99368e-07 4.49156e-07 4.98944e-07 5.34512e-07 - 5.01032e-07 4.67553e-07 4.34073e-07 4.00593e-07 3.67113e-07 - 3.33633e-07 3.00153e-07 2.66674e-07 2.33194e-07 1.99714e-07 - 1.66234e-07 1.32754e-07 9.92744e-08 6.57945e-08 3.23147e-08 - -1.16513e-09 -3.4645e-08 -6.81248e-08 -1.01605e-07 -1.35084e-07 - -1.68564e-07 -2.18729e-07 0.0114926 -0.0245378 -0.111828 - 0.0964775 1.61491 3.22668 4.22041 4.54492 4.82845 4.94868 - 4.98588 4.99609 4.9981 4.99908 4.99788 4.98395 4.99294 4.99724 - 5.01939 5.0471 5.00902 4.98194 4.98496 4.99188 4.99623 4.99862 - 5.00025 4.99974 4.99953 4.99946 4.99958 5.00012 4.99997 - 4.99992 4.99988 4.99985 4.9998 4.9997 4.9988 4.99806 4.99982 - 5.00143 5.00159 5.00098 5.00053 5.00028 5.00007 4.99977 - 4.99992 5.00005 5.00133 5.0009 4.99993 4.99972 4.99975 4.9998 - 4.99982 4.99983 4.99983 4.99983 4.99983 4.99984 4.99986 - 4.99987 4.99989 4.9999 4.99991 4.99992 4.99994 4.99995 4.99995 - 4.99996 4.99997 4.99997 4.99998 4.99998 4.99998 4.99998 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 5 5 5 5.00001 5.00001 5.00001 5.00002 5.00002 5.00002 5.00002 - 5.00002 5.00001 5.00001 5.00001 5 5 5 5 5 5 5 5 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 5 5 5.01457 4.99482 4.96561 4.99326 - 5.03452 5.00424 5.00101 5.00045 5.00004 4.99965 4.99997 - 4.99994 4.99958 4.99999 4.99936 4.9839 4.99248 4.99717 5.01976 - 5.04869 5.0087 4.98143 4.98488 4.99199 4.99622 4.9983 4.99928 - 4.99971 4.99986 5.00031 5.00022 5.00035 5.0001 4.99884 4.99811 - 4.99803 4.99887 5.00078 5.00151 5.00116 5.00007 4.99843 - 4.99915 5.00107 5.00168 5.00141 5.00092 5.00055 5.0003 5.00016 - 5.0001 5.00001 5.00016 5.0002 5.00009 4.99993 4.99975 4.99984 - 4.99991 4.99991 4.99982 4.99974 4.99974 4.99985 4.99995 - 4.99999 4.99998 5.00004 5.00013 5.00015 5.00007 4.99988 - 4.99982 4.99985 4.99995 5.00006 5.0002 5.00025 5.0002 5.00009 - 5.00006 5.00004 5.00002 5 4.99998 4.99997 4.99998 4.99998 - 4.99999 4.99999 4.99999 5 5 5 5 5 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 - 4.99998 4.99998 4.99998 - EOD - - @v[12].set(<<-'EOD') - 5 5.16975 4.78685 2.94241 0.126698 0.0487004 -0.00422591 - -0.00130689 -0.000486756 -0.000195875 -0.000108988 -6.66736e-05 - -7.26005e-05 -5.63608e-05 -3.81859e-05 -2.123e-05 -0.0646846 - -0.0184474 0.182248 1.06731 3.10988 4.46133 4.84133 4.95113 - 4.98364 4.99455 4.99694 4.99727 4.9994 4.99975 5.0001 5.00132 - 5.00089 5.00039 5.00019 5.00011 5.00006 5.00005 5.00004 - 5.00001 4.99992 4.99992 5.00002 5.00013 5.00017 5.00009 - 4.99992 4.99991 4.99994 4.99996 4.99998 4.99999 5.00001 - 5.00004 5.00006 5.00005 5.00004 5.00003 5.00002 5.00001 - 5 4.99999 4.99999 4.99998 4.99998 4.99997 4.99997 4.99998 - 4.99998 4.99998 4.99998 4.99999 4.99999 4.99999 4.99999 - 5 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 5 5.14699 4.78074 - 3.19424 0.305663 0.0611255 -0.00179951 -0.0012032 0.000405978 - 0.000989399 0.000445194 0.000191447 8.30476e-05 3.96236e-05 - 1.91866e-05 1.70665e-05 -0.0655239 -0.0210234 0.1827 1.06848 - 3.11554 4.46518 4.84212 4.94853 4.98244 4.99434 4.9997 5.00081 - 5.00009 4.99972 4.99985 4.99974 4.9995 4.99949 4.99958 4.99973 - 4.99948 4.99914 4.99874 4.99946 5.00309 5.0091 5.01576 5.01835 - 5.01852 5.0176 5.01625 5.01479 5.01345 5.01264 5.011 5.01092 - 5.01344 5.01363 5.01289 5.01184 5.01071 5.00956 5.00848 - 5.00751 5.00663 5.00577 5.00497 5.00427 5.00365 5.0031 5.00264 - 5.00224 5.00191 5.00163 5.00138 5.00117 5.00099 5.00083 - 5.00071 5.00061 5.00053 5.00045 5.00037 5.00029 5.00022 - 5.00019 5.0002 5.00023 5.00024 5.00023 5.00023 5.00022 5.0002 - 5.00018 5.00016 5.00014 5.00011 5.00009 5.00007 5.00006 - 5.00005 5.00005 5.00004 5.00003 5.00002 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 - 5.00002 5.00001 5.00001 5.00001 5.14298 4.79809 3.32704 - 0.498385 0.105773 0.0160646 0.0319912 0.0299434 0.0240102 - 0.0185844 0.0130411 0.0106532 0.00864871 0.00744519 0.00660887 - -0.0612913 -0.0203719 0.174998 0.991787 3.06292 4.60005 - 4.93058 4.98917 5.00033 4.9999 4.99909 4.9966 4.9955 4.99488 - 4.99374 4.9943 5.00131 5.00506 4.99311 4.96288 4.93567 4.92439 - 4.94236 4.9732 4.98864 4.99458 5.00031 5.00694 5.01525 5.01945 - 5.01998 5.01953 5.01874 5.01766 5.0164 5.01509 5.01326 5.01423 - 5.01455 5.01361 5.01245 5.01122 5.01002 5.00888 5.00783 - 5.00687 5.00596 5.00514 5.00442 5.00379 5.00325 5.00279 - 5.0024 5.00208 5.0018 5.00153 5.00126 5.00107 5.00094 5.00085 - 5.00078 5.00072 5.00063 5.00053 5.00042 5.00038 5.00034 - 5.0003 5.00027 5.00023 5.00021 5.00019 5.00017 5.00015 5.00013 - 5.00012 5.00011 5.0001 5.0001 5.00009 5.00008 5.00007 5.00007 - 5.00006 5.00005 5.00005 5.00004 5.00004 5.00003 5.00003 - 5.00002 5.00002 5.00002 5.00001 5.00001 5 5 5 5.00001 5.00001 - 5.00001 5.00002 5.00002 5.00002 5.00002 - EOD - - @v[13].set(<<-'EOD') - 9.73784e-10 0.0189926 0.0926769 0.206309 0.111533 0.0953491 - 0.0426966 0.0214177 0.0117943 0.00741442 0.00528816 0.00398417 - 0.0032967 0.00266499 0.00206647 0.00158788 -0.0371391 -0.0439528 - -0.0408653 -0.0188706 0.0150241 0.0126852 0.00209817 -0.000239206 - -5.31488e-05 0.000876324 -0.00451221 -0.0165223 -0.0284127 - -0.0427584 -0.0502453 -0.0257366 -0.00903938 -0.00376456 - -0.00233385 -0.00169922 -0.00130397 -0.00102542 -0.000811435 - -0.000648115 -0.000529266 -0.00043795 -0.00036574 -0.00030716 - -0.00026221 -0.000229662 -0.000205112 -0.000181038 -0.000162045 - -0.000148988 -0.000137633 -0.000126278 -0.000115562 -0.000104976 - -9.49324e-05 -9.0585e-05 -8.62375e-05 -8.18901e-05 -7.75426e-05 - -7.31952e-05 -6.93752e-05 -6.59106e-05 -6.24461e-05 -5.89815e-05 - -5.55169e-05 -5.22412e-05 -5.05263e-05 -4.88114e-05 -4.70966e-05 - -4.53817e-05 -4.36668e-05 -4.19519e-05 -4.0237e-05 -3.85222e-05 - -3.68073e-05 -3.50924e-05 -3.34782e-05 -3.25442e-05 -3.16102e-05 - -3.06763e-05 -2.97423e-05 -2.88083e-05 -2.78744e-05 -2.69404e-05 - -2.60064e-05 -2.50725e-05 -2.41385e-05 -2.32635e-05 -2.27232e-05 - -2.21829e-05 -2.16426e-05 -2.11023e-05 -2.0562e-05 -2.00217e-05 - -1.94814e-05 -1.89411e-05 -1.84007e-05 -1.78604e-05 -1.73647e-05 - -1.70853e-05 -1.68059e-05 -1.65265e-05 -1.62471e-05 -1.59677e-05 - -1.56883e-05 -1.54089e-05 -1.51295e-05 -1.48501e-05 -1.45707e-05 - -1.42913e-05 -1.40119e-05 -1.37325e-05 -1.34531e-05 -1.31737e-05 - -1.28943e-05 -1.26149e-05 -1.23355e-05 -1.20561e-05 -1.17767e-05 - -1.14973e-05 -1.10954e-05 0.0152675 0.0228237 -0.00460678 - -0.0341525 0.0232109 -0.0138039 -0.0416538 -0.0458764 -0.0201967 - -0.00878316 -0.00379173 -0.00164621 -0.000785131 -0.00037575 - -0.000352375 -0.0545586 -0.0746881 -0.0771865 -0.05386 -0.0022199 - 0.0136703 0.00633526 0.00138826 -0.00108934 0.0038886 0.0298077 - 0.0475776 0.0481003 0.0464167 0.047818 0.042789 0.035207 - 0.0264423 0.0193959 0.0151614 0.00624257 -0.00913057 -0.0310696 - -0.0430238 0.016426 0.189762 0.49025 0.820116 1.13919 1.43549 - 1.70658 1.95183 2.17414 2.38506 2.5657 2.73958 2.97905 3.21403 - 3.43025 3.62645 3.8028 3.96002 4.09996 4.22443 4.33427 4.42886 - 4.51097 4.5817 4.64326 4.6957 4.74132 4.7797 4.81298 4.84102 - 4.86512 4.88523 4.90224 4.91649 4.92846 4.93868 4.94755 - 4.95483 4.96114 4.96682 4.97161 4.97502 4.9776 4.97944 4.98141 - 4.98319 4.98467 4.98585 4.9869 4.98796 4.98902 4.99008 4.99114 - 4.9922 4.99326 4.9938 4.99429 4.99479 4.99528 4.99578 4.99628 - 4.99677 4.99704 4.99718 4.99733 4.99747 4.99762 4.99777 - 4.99791 4.99806 4.9982 4.99835 4.9985 4.99864 4.99879 4.99893 - 4.99907 4.99916 4.99925 4.99934 4.99943 5.01473 4.92293 - 4.61974 4.0316 3.7835 3.74195 3.78344 3.87272 3.97386 4.07319 - 4.16686 4.25256 4.33126 4.40264 4.46697 4.49249 4.51807 - 4.55803 4.64055 4.78574 4.86074 4.88334 4.8999 4.91455 4.92814 - 4.93926 4.94761 4.95433 4.95907 4.9654 4.98317 5.0208 5.05134 - 4.85852 4.16041 3.00077 1.68376 0.672707 0.240838 0.0794725 - -0.0106347 -0.00879443 0.107196 0.368163 0.701424 1.03581 - 1.3601 1.6678 1.95731 2.22701 2.47544 2.69099 2.92327 3.16648 - 3.3877 3.59067 3.77344 3.93584 4.08066 4.20863 4.32065 4.41791 - 4.50211 4.57423 4.63614 4.68888 4.73377 4.7721 4.80519 4.83338 - 4.85732 4.87815 4.89514 4.90927 4.92108 4.93122 4.94014 - 4.94845 4.95601 4.96251 4.96576 4.969 4.97225 4.9755 4.97874 - 4.98087 4.98265 4.98442 4.9862 4.98797 4.98924 4.9899 4.99055 - 4.9912 4.99186 4.99251 4.99316 4.99381 4.99447 4.99512 4.99577 - 4.99609 4.99634 4.99659 4.99683 4.99708 4.99732 4.99757 - 4.99782 4.99806 4.99831 4.99853 4.99863 4.99873 4.99883 - 4.99893 4.99903 4.99913 4.99923 4.99933 - EOD - - @v[14].set(<<-'EOD') - 1.86175 2.00147 1.85141 1.0654 0.275481 0.205547 0.0712627 - 0.0313387 0.0151431 0.00864531 0.00593861 0.00438111 0.0037479 - 0.00305857 0.00221221 0.0017081 -0.0896128 -0.109079 -0.121356 - -0.0542001 0.175821 0.177442 0.0814591 0.0333042 0.0134909 - 0.00625777 0.00100092 -0.00552776 -0.00411139 -0.00150395 - -0.000564784 3.48169e-05 -0.000287014 -0.000538515 -0.000456537 - -0.000325677 -0.000275468 -0.000166452 -8.27481e-05 -8.28704e-05 - -7.47644e-05 -4.60552e-05 -2.61481e-06 2.26359e-05 2.53852e-05 - -1.39853e-06 -4.23456e-05 -4.0907e-05 -2.8501e-05 -1.5945e-05 - -9.01122e-06 -2.07747e-06 1.49328e-06 4.38398e-06 6.84248e-06 - 4.76711e-06 2.69173e-06 6.16362e-07 -1.45901e-06 -3.53438e-06 - -4.14256e-06 -3.76238e-06 -3.3822e-06 -3.00202e-06 -2.62184e-06 - -2.24878e-06 -1.93456e-06 -1.62033e-06 -1.3061e-06 -9.91867e-07 - -6.77638e-07 -3.63409e-07 -4.91792e-08 2.6505e-07 5.7928e-07 - 8.93509e-07 1.16076e-06 1.11055e-06 1.06034e-06 1.01014e-06 - 9.59927e-07 9.09719e-07 8.59511e-07 8.09302e-07 7.59094e-07 - 7.08886e-07 6.58678e-07 5.99251e-07 4.87523e-07 3.75795e-07 - 2.64068e-07 1.5234e-07 4.06119e-08 -7.1116e-08 -1.82844e-07 - -2.94572e-07 -4.063e-07 -5.18027e-07 -6.08517e-07 -5.95879e-07 - -5.83241e-07 -5.70604e-07 -5.57966e-07 -5.45328e-07 -5.3269e-07 - -5.20053e-07 -5.07415e-07 -4.94777e-07 -4.8214e-07 -4.69502e-07 - -4.56864e-07 -4.44226e-07 -4.31589e-07 -4.18951e-07 -4.06313e-07 - -3.93676e-07 -3.81038e-07 -3.684e-07 -3.55762e-07 -3.43125e-07 - 1.06736e-05 0.0797407 0.0437947 -0.0645098 -0.0877312 0.0653203 - -0.00621184 -0.0353188 -0.0491378 -0.0251957 -0.0110996 - -0.00481123 -0.0020941 -0.000998038 -0.000478747 -0.000445332 - -0.102046 -0.135753 -0.154351 -0.0827509 0.163348 0.174012 - 0.0794822 0.0310624 0.0112213 0.00249061 0.00130764 0.00181315 - 0.00163875 0.00101454 0.000497435 0.000195258 5.31901e-05 - 2.4607e-05 6.62736e-05 7.90718e-05 4.0372e-05 -0.000141184 - -0.000280623 5.5608e-05 0.000799565 0.000920189 0.000931616 - 0.000494527 0.000162303 -8.24884e-05 -0.000183938 -0.000203899 - -0.000144788 -9.87063e-05 -0.000227929 2.93932e-05 0.000208563 - 1.88958e-06 -7.6335e-05 -0.000172472 -0.000165656 -0.000145889 - -0.000177311 -0.000191058 -0.000168287 -0.00015755 -0.00013142 - -8.10488e-05 -6.36115e-05 -7.8699e-05 -8.11282e-05 -7.98625e-05 - -5.98807e-05 -3.40879e-05 -1.95464e-05 -1.79247e-05 -4.45514e-05 - -7.47995e-05 -8.7682e-05 -7.50806e-05 -3.25561e-05 -4.34114e-05 - -7.69099e-05 -0.000141101 -0.00018743 -0.000148471 -5.06546e-05 - 0.000120195 0.000177635 0.000177052 0.000146344 9.75126e-05 - 8.31233e-05 6.8734e-05 5.43447e-05 3.99554e-05 2.55661e-05 - 1.11768e-05 -3.21253e-06 -3.88937e-06 -3.56628e-06 -3.24318e-06 - -2.92008e-06 -2.59699e-06 -2.27389e-06 -1.9508e-06 -1.73227e-06 - -1.56796e-06 -1.40365e-06 -1.23934e-06 -1.07503e-06 -9.10722e-07 - -7.46412e-07 -5.82101e-07 -4.1779e-07 -2.5348e-07 -8.91694e-08 - 7.51412e-08 2.39452e-07 4.03762e-07 5.95733e-07 1.00771e-06 - 1.41969e-06 1.83167e-06 2.24365e-06 0.0828257 0.231038 0.465438 - 1.54516 2.8461 3.19221 3.40395 3.6382 3.80758 3.93848 4.04882 - 4.15428 4.247 4.32917 4.40235 4.36941 4.397 4.48862 4.64552 - 4.86595 5.03475 5.0348 5.02627 5.01967 5.01542 5.00925 4.98613 - 4.9519 4.91581 4.87357 4.82302 4.80403 4.82565 4.86102 4.89483 - 4.92253 4.94428 4.96257 4.97608 4.98373 4.98823 4.99182 - 4.99437 4.99635 4.99745 4.99802 4.99843 4.99873 4.99895 - 4.99912 4.99925 4.99931 4.99962 4.99973 4.99972 4.99971 - 4.9997 4.99969 4.9997 4.99971 4.99973 4.99974 4.99976 4.99978 - 4.9998 4.99982 4.99985 4.99987 4.99989 4.9999 4.99991 4.99991 - 4.99993 4.99994 4.99997 5.00001 5.00006 5.00008 5.00006 - 5.00002 5 4.99999 4.99998 4.99997 4.99995 4.99995 4.99995 - 4.99995 4.99995 4.99995 4.99995 4.99996 4.99997 4.99997 - 4.99998 4.99999 5 5 5.00001 5.00002 5.00002 5.00002 5.00002 - 5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 5.00001 - 5.00001 5.00001 5.00001 5.00001 5 5 5 4.99999 4.99999 4.99999 - EOD - - @v[15].set(<<-'EOD') - 1.86175 2.00199 2.08919 1.84314 1.08254 0.214737 0.0377351 - 0.00952455 0.00232763 0.000563614 0.000263477 0.000148642 - 0.000285086 0.000242592 7.34699e-05 -1.53467e-05 -0.0161874 - -0.0157876 -0.0141194 0.0132576 0.0903272 0.109938 0.0535295 - 0.0224216 0.00940945 0.00466825 -0.000649972 -0.00654752 - -0.00333248 -0.00103671 -0.000508276 -5.8896e-05 -0.00043938 - -0.000544704 -0.00044444 -0.000307093 -0.00024517 -0.000154538 - -8.78602e-05 -7.10461e-05 -6.06485e-05 -3.91039e-05 -8.45988e-06 - 9.43442e-06 1.28351e-05 -2.16734e-06 -2.6142e-05 -2.54768e-05 - -1.88997e-05 -1.17906e-05 -7.3808e-06 -2.97101e-06 1.19146e-07 - 2.94246e-06 5.38942e-06 3.88851e-06 2.38761e-06 8.86704e-07 - -6.14201e-07 -2.11511e-06 -2.59565e-06 -2.38885e-06 -2.18205e-06 - -1.97525e-06 -1.76845e-06 -1.56241e-06 -1.36258e-06 -1.16276e-06 - -9.62939e-07 -7.63116e-07 -5.63293e-07 -3.6347e-07 -1.63647e-07 - 3.61756e-08 2.35999e-07 4.35822e-07 6.07653e-07 5.90323e-07 - 5.72994e-07 5.55665e-07 5.38336e-07 5.21007e-07 5.03678e-07 - 4.86349e-07 4.6902e-07 4.51691e-07 4.34361e-07 4.11899e-07 - 3.60315e-07 3.08731e-07 2.57146e-07 2.05562e-07 1.53977e-07 - 1.02393e-07 5.08082e-08 -7.76222e-10 -5.23607e-08 -1.03945e-07 - -1.47815e-07 -1.54225e-07 -1.60635e-07 -1.67045e-07 -1.73455e-07 - -1.79864e-07 -1.86274e-07 -1.92684e-07 -1.99094e-07 -2.05504e-07 - -2.11914e-07 -2.18324e-07 -2.24734e-07 -2.31144e-07 -2.37554e-07 - -2.43964e-07 -2.50373e-07 -2.56783e-07 -2.63193e-07 -2.69603e-07 - -2.76013e-07 -2.82423e-07 2.92534e-06 0.0446777 0.024278 - -0.0518987 -0.0636547 0.00983929 -0.000518204 -0.000265194 - 0.000154772 0.000299538 3.12715e-05 -3.18225e-05 -2.48268e-05 - -1.16701e-05 -6.05117e-06 7.61116e-06 -0.0163668 -0.0158244 - -0.0141177 0.0100085 0.0857144 0.107784 0.051862 0.0204448 - 0.00629858 0.000967736 0.00121674 0.00190276 0.00154009 - 0.000860922 0.000410386 0.000164585 3.99493e-05 1.93797e-05 - 5.67594e-05 0.000110126 2.49925e-05 -7.17815e-05 -0.000142299 - -1.63109e-05 0.000439529 0.000562489 0.000594599 0.000326164 - 0.000126423 -4.26063e-05 -0.000122927 -0.000114152 -6.72706e-05 - -6.41242e-05 -0.000135588 2.61507e-05 0.000134036 6.43734e-06 - -4.6223e-05 -0.000112047 -0.000101388 -8.67847e-05 -0.000117664 - -0.000133957 -0.000116558 -0.000100873 -7.65448e-05 -4.44964e-05 - -3.6677e-05 -5.26632e-05 -5.45172e-05 -5.13545e-05 -3.73869e-05 - -1.99732e-05 -1.0907e-05 -1.10081e-05 -3.02609e-05 -5.18517e-05 - -6.13597e-05 -5.30706e-05 -2.39572e-05 -3.24146e-05 -5.70062e-05 - -0.000103448 -0.000135376 -0.0001024 -2.39007e-05 0.000110929 - 0.000151226 0.000142044 0.000105922 5.62834e-05 4.78476e-05 - 3.94117e-05 3.09759e-05 2.25401e-05 1.41042e-05 5.66837e-06 - -2.76747e-06 -3.08639e-06 -2.81341e-06 -2.54043e-06 -2.26745e-06 - -1.99447e-06 -1.72149e-06 -1.44851e-06 -1.26226e-06 -1.12096e-06 - -9.79661e-07 -8.38363e-07 -6.97065e-07 -5.55768e-07 -4.1447e-07 - -2.73173e-07 -1.31875e-07 9.42259e-09 1.5072e-07 2.92018e-07 - 4.33315e-07 5.74613e-07 7.10363e-07 8.01984e-07 8.93604e-07 - 9.85225e-07 1.07685e-06 0.04474 0.0928765 0.141327 0.0176048 - -0.071675 -0.0124613 0.989022 2.28104 3.40619 4.21417 4.67173 - 4.87438 4.96044 4.98996 4.99858 4.96672 4.89502 4.79391 - 4.76433 4.8387 4.98612 5.0161 5.01722 5.01437 5.01256 4.99827 - 4.95807 4.9209 4.88217 4.83006 4.78461 4.80759 4.85548 4.89604 - 4.9254 4.94617 4.96126 4.97374 4.98255 4.98792 4.99126 4.99361 - 4.99554 4.99699 4.99792 4.99846 4.99881 4.99905 4.99924 - 4.99938 4.99949 4.99955 4.9997 4.9998 4.99982 4.99982 4.99982 - 4.99982 4.99982 4.99983 4.99984 4.99985 4.99986 4.99987 - 4.99988 4.99989 4.9999 4.99992 4.99993 4.99994 4.99995 4.99995 - 4.99996 4.99996 4.99998 4.99999 5.00001 5.00002 5.00002 - 5.00001 5.00001 5 4.99999 4.99999 4.99998 4.99998 4.99998 - 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 - 4.99999 4.99999 4.99999 4.99999 5 5 5 5 5 5 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - EOD - - @v[16].set(<<-'EOD') - 1.86175 1.73073 1.50572 1.89001 3.39004 4.36034 4.79012 - 4.93798 4.98305 4.99539 4.9979 4.99904 4.99772 4.9983 4.99935 - 4.99975 4.98837 4.99456 4.99728 5.01838 5.04568 5.00759 - 4.98112 4.98479 4.99197 4.99641 4.99747 4.99775 5.00043 - 5.0007 5.00035 5.00023 4.99976 5.00002 5.00007 5.0002 4.99993 - 5.00003 5.00021 5.00006 4.99993 4.99992 5.00002 5.00013 - 5.00017 5.00009 4.99992 4.99991 4.99993 4.99996 4.99998 - 4.99999 5.00001 5.00003 5.00005 5.00004 5.00004 5.00003 - 5.00002 5.00001 5 4.99999 4.99999 4.99998 4.99998 4.99997 - 4.99997 4.99998 4.99998 4.99998 4.99998 4.99999 4.99999 - 4.99999 4.99999 5 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00002 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 5 5.01498 4.99342 4.96899 5.00301 5.02627 4.9977 - 4.99548 4.99757 5.00277 5.00245 5.0014 5.00069 5.00032 5.00014 - 5.00009 4.9867 4.99262 4.99607 5.01805 5.04713 5.00927 4.98184 - 4.98483 4.9914 4.99616 4.99902 4.9999 4.99987 4.99979 4.99981 - 4.99989 4.99994 4.99998 5.0002 5.00001 5.00008 5.00008 5.0001 - 5.00021 5.00032 5.00025 5.00019 5.00006 5.00007 4.99994 - 4.99997 4.99999 5.00023 5.00008 4.99993 4.99998 4.99986 - 4.99982 5.00003 4.99985 4.99996 5.00014 5 4.99984 4.99979 - 4.99982 4.99993 5.00008 5.00011 5.00002 4.99996 4.9999 4.99994 - 5.00001 5.00007 5.00009 4.99995 4.99978 4.99971 4.99976 - 4.99997 4.99996 4.99989 4.99972 4.99955 4.99953 4.99959 - 4.99976 4.9999 5.00005 5.00023 5.00039 5.00034 5.00029 5.00024 - 5.00019 5.00014 5.00009 5.00004 5.00003 5.00002 5.00001 - 5 5 4.99999 4.99998 4.99998 4.99998 4.99998 4.99998 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 - 5.00001 5.00002 5.00003 5.00004 5.01564 5.03395 5.04932 - 5.11868 3.92502 1.31888 0.163888 0.0946876 0.0789578 0.0565084 - 0.0260333 0.0156986 0.00907667 0.00613629 0.00468417 -0.00174008 - -0.0021422 0.000586962 0.0124937 0.0147977 0.00838454 0.00039383 - -0.000522021 -0.000426598 -0.000290214 -0.00173713 -0.00384132 - -0.00382945 -0.00429219 -0.00580193 -0.00393246 0.0017543 - 0.00423045 0.00408931 0.0031976 0.00245457 0.00187293 0.00159068 - 0.00105697 0.000609902 0.000358825 0.000334125 0.000212708 - 0.000168116 8.97349e-05 5.21578e-05 3.84527e-05 2.93033e-05 - 2.10067e-05 1.59954e-05 1.13917e-05 5.49738e-06 2.77217e-05 - 6.51259e-06 -6.65468e-06 2.09837e-06 -6.617e-06 -4.80187e-06 - 1.55031e-06 4.26536e-06 7.69457e-07 -1.46213e-06 -7.25202e-07 - 3.26501e-06 6.55807e-06 7.524e-06 6.07209e-06 6.00701e-06 - 5.41166e-06 3.86573e-06 1.10651e-06 -2.74603e-06 -2.18566e-06 - 2.3658e-06 8.59956e-06 8.35046e-06 2.90621e-06 -8.75982e-07 - -1.87189e-06 -2.1528e-06 -1.94875e-06 -1.74471e-06 -1.54067e-06 - -1.33662e-06 -1.13258e-06 -8.40567e-07 -5.20743e-07 -2.00918e-07 - 1.18906e-07 4.38731e-07 6.11382e-07 6.01529e-07 5.91675e-07 - 5.81822e-07 5.71968e-07 5.62115e-07 5.52261e-07 5.42407e-07 - 5.32554e-07 5.227e-07 5.12847e-07 4.72812e-07 4.26137e-07 - 3.79462e-07 3.32786e-07 2.86111e-07 2.39436e-07 1.92761e-07 - 1.46086e-07 9.94107e-08 5.27356e-08 -2.77779e-10 -7.98079e-08 - -1.59338e-07 -2.38868e-07 -3.18398e-07 -3.97928e-07 -4.77458e-07 - -5.56988e-07 -6.36519e-07 - EOD - - @v[17].set(<<-'EOD') - 5 5.16963 4.84136 3.33754 0.316206 0.103113 0.0273341 0.0221102 - 0.0177008 0.0143758 0.0115203 0.00929231 0.00752716 0.00625439 - 0.00489872 0.00403656 -0.0657317 -0.0256467 0.165394 0.985963 - 3.05067 4.55799 4.89728 4.92464 4.8882 4.90592 4.97315 4.99241 - 4.99694 4.99845 4.99905 4.99939 4.99959 4.99971 4.9998 4.99986 - 4.9999 4.99993 4.99995 4.99996 4.99997 4.99998 4.99998 4.99999 - 4.99999 4.99999 4.99999 4.99999 5 5.00001 5.00003 5.00005 - 5.00004 5.00002 5 4.99999 4.99999 4.99998 4.99998 4.99997 - 4.99997 4.99998 4.99998 4.99999 4.99999 5 5 5 5 5 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00002 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5 5 5 5 - 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99998 - 4.99998 4.99998 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 5 5 5 5 5 5 5.00025 5.1657 4.69981 2.43895 - 0.0229743 0.0351406 -0.0211974 -0.0312063 -0.0160331 -0.0021718 - -0.000766597 -0.000251052 -5.49363e-05 -3.36364e-06 -2.01983e-06 - -9.70575e-06 -0.0657007 -0.0205247 0.183332 1.07163 3.11839 - 4.46213 4.84163 4.95195 4.99159 5.02084 5.04029 5.04138 - 5.0271 5.00445 4.97957 4.95702 4.95231 4.97819 4.99191 4.9963 - 4.99822 4.99878 4.99903 4.99925 4.99942 4.9995 4.99954 4.99957 - 4.99961 4.99966 4.9997 4.99974 4.99977 4.99981 4.99983 4.99986 - 4.99988 4.9999 4.99991 4.99992 4.99994 4.99995 4.99995 4.99996 - 4.99997 4.99997 4.99998 4.99998 4.99998 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5.00001 5.00001 5.00001 - 5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 - 5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5 5 5 4.99999 4.99998 4.99997 4.99996 5.14239 4.76219 - 3.16574 0.299969 0.0631609 -0.00118611 -0.00026052 -5.96333e-05 - -1.44904e-05 -4.3859e-06 -2.99454e-06 1.10547e-06 4.84662e-06 - 1.30971e-05 2.23082e-05 -0.0655844 -0.0204818 0.182507 1.05954 - 3.12277 4.46735 4.83915 4.94512 4.97679 4.98654 4.9966 5.00833 - 5.00776 5.00432 5.00199 5.00086 5.00033 5.00008 5 5.00001 - 5 5.00005 5.00002 4.99981 4.99991 4.99998 4.99979 4.99979 - 4.99984 4.9998 4.9998 5.00006 5.00002 5.00001 5 5 4.99992 - 4.99998 4.99999 5.00002 5.00014 4.99999 4.99987 4.99993 - 5.00003 5.00011 5.00005 4.99996 4.99987 4.99985 4.99994 - 5.00009 5.0001 5 4.99993 4.99997 5.00008 5.00015 5.00021 - 5.00021 5.00007 4.99978 4.99965 4.99973 4.9999 4.99992 4.99995 - 4.99997 4.99999 5.00001 5.00002 5.00001 5.00001 5.00001 - 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99998 4.99998 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 5 5 5 5 5 5.00001 5.00001 5.00001 5.00002 - 5.00002 5.00002 - EOD - - @v[18].set(<<-'EOD') - 5 5.0333 5.02472 4.92559 4.18383 3.93923 3.9961 4.14293 - 4.28591 4.41336 4.52157 4.61101 4.68472 4.7439 4.79294 4.83239 - 4.80697 4.78808 4.79322 4.8838 5.08529 5.21863 4.88852 3.90198 - 2.14586 0.383977 0.101103 0.0525711 0.0318287 0.020895 0.0146908 - 0.010831 0.00830272 0.00656377 0.00532066 0.00440078 0.00369956 - 0.00315713 0.00272614 0.00237965 0.00209659 0.00186339 0.00167014 - 0.0015081 0.00137172 0.00125607 0.00115393 0.00106076 0.000980166 - 0.000918015 0.000862837 0.00080766 0.000763488 0.000721541 - 0.000680825 0.000653026 0.000625226 0.000597426 0.000569627 - 0.000541827 0.000519087 0.000499756 0.000480424 0.000461093 - 0.000441761 0.000423291 0.000411941 0.00040059 0.00038924 - 0.000377889 0.000366539 0.000355188 0.000343838 0.000332487 - 0.000321137 0.000309786 0.000299055 0.000292509 0.000285963 - 0.000279417 0.000272871 0.000266325 0.000259779 0.000253233 - 0.000246686 0.00024014 0.000233594 0.000227387 0.0002231 - 0.000218813 0.000214526 0.00021024 0.000205953 0.000201666 - 0.000197379 0.000193092 0.000188805 0.000184519 0.000180526 - 0.000177963 0.0001754 0.000172837 0.000170274 0.000167711 - 0.000165148 0.000162585 0.000160022 0.000157459 0.000154895 - 0.000152332 0.000149769 0.000147206 0.000144643 0.00014208 - 0.000139517 0.000136954 0.000134391 0.000131828 0.000129265 - 0.000126702 0.000132838 0.0311184 0.163151 0.34986 0.604501 - 0.357125 0.136137 0.0711304 0.0346959 0.0212674 0.00872193 - 0.00252206 0.000455269 7.59332e-05 2.91532e-05 0.000320562 - -0.0720911 -0.0840491 -0.0791345 -0.0404143 0.0182035 -0.0235871 - -0.0426072 -0.0597501 0.00824773 0.481404 1.32496 2.11949 - 2.57317 2.58202 2.15054 1.33786 0.45702 0.153772 0.0913584 - 0.0604989 0.0421591 0.0271456 0.0170021 0.0115815 0.00907886 - 0.00742466 0.00626096 0.00531127 0.00450501 0.00381927 0.00323718 - 0.00274374 0.00232494 0.00196885 0.00166686 0.00141134 0.00119437 - 0.0010109 0.000855534 0.000723378 0.000611408 0.000516704 - 0.000436769 0.000369523 0.000313026 0.00026526 0.000223976 - 0.000188972 0.000159042 0.000134148 0.000112688 9.49738e-05 - 7.97877e-05 6.721e-05 5.65115e-05 4.77194e-05 4.03591e-05 - 3.42848e-05 2.92627e-05 2.50435e-05 2.1412e-05 1.84532e-05 - 1.58624e-05 1.34673e-05 1.14461e-05 1.00935e-05 9.12375e-06 - 8.50202e-06 7.81431e-06 7.20729e-06 6.73936e-06 6.3702e-06 - 5.90049e-06 5.43077e-06 4.96105e-06 4.49133e-06 4.02162e-06 - 3.5519e-06 3.08218e-06 2.79099e-06 2.51281e-06 2.23463e-06 - 1.95645e-06 1.67827e-06 1.40009e-06 1.12191e-06 1.01376e-06 - 9.9375e-07 9.73741e-07 9.53733e-07 9.33724e-07 9.13715e-07 - 8.93707e-07 8.73698e-07 8.5369e-07 8.33681e-07 8.13673e-07 - 7.93664e-07 7.73655e-07 7.53647e-07 7.21781e-07 5.956e-07 - 4.69419e-07 3.43239e-07 2.17058e-07 0.0284032 0.0374438 - -0.0157543 -0.0680497 0.0504768 0.0100294 0.00222261 0.000528697 - 0.000132929 3.99489e-05 2.46066e-05 4.56327e-06 -6.54853e-06 - 1.33783e-05 -3.68221e-05 -0.0724498 -0.0843663 -0.0792935 - -0.0406426 0.0200019 0.0426259 0.0220753 0.00668555 -0.000968483 - 0.024662 0.0383437 0.0911513 0.087848 0.0602076 0.0390559 - 0.0260573 0.0180444 0.012974 0.00985409 0.00788132 0.0064228 - 0.005545 0.00453571 0.00364245 0.00310278 0.00270523 0.00236439 - 0.0020945 0.00186808 0.00167493 0.00151731 0.00138594 0.00126945 - 0.00116695 0.0010762 0.000996366 0.000928387 0.000864414 - 0.000808258 0.000759574 0.000713865 0.000666712 0.000632716 - 0.000601262 0.000572163 0.000543986 0.000515253 0.0004897 - 0.000468112 0.000449313 0.000432981 0.000417911 0.000401307 - 0.000382712 0.000366678 0.000355736 0.000349171 0.000335727 - 0.000317091 0.000296086 0.000283543 0.000277366 0.000272233 - 0.000267001 0.000263147 0.000256699 0.000250251 0.000243803 - 0.000237355 0.000230907 0.000225424 0.000220247 0.000215069 - 0.000209892 0.000204714 0.000200213 0.000196548 0.000192884 - 0.00018922 0.000185556 0.000181892 0.000178228 0.000174564 - 0.0001709 0.000167236 0.000163572 0.000160824 0.000158279 - 0.000155733 0.000153187 0.000150641 0.000148095 0.000145549 - 0.000143003 0.000140457 0.000137911 0.000135457 0.000133386 - 0.000131315 0.000129245 0.000127174 0.000125103 0.000123032 - 0.000120961 0.000118891 - EOD - - @v[19].set(<<-'EOD') - 1.86175 1.99994 2.0833 2.01627 2.42503 3.25769 3.62134 3.88827 - 4.09688 4.26773 4.40529 4.51734 4.60827 4.68313 4.74346 - 4.79302 4.72815 4.68959 4.70421 4.81316 5.01375 5.14493 - 5.10305 5.0699 5.04484 5.03751 5.03348 5.02504 5.01799 5.01271 - 5.00895 5.00628 5.0044 5.00309 5.00216 5.00151 5.00105 5.00073 - 5.00051 5.00034 5.00023 5.00015 5.0001 5.00007 5.00003 4.99998 - 4.99993 4.99993 4.99995 4.99999 5.00001 5.00003 5.00002 - 5.00001 5 5 5 5 4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5.00017 5.17398 - 4.94779 3.78508 1.52302 0.608808 0.244311 0.126053 0.0597175 - 0.038422 0.0158174 0.00481338 0.00107847 0.000301256 0.000114861 - 0.00059489 -0.118904 -0.147478 -0.158986 -0.080544 0.165361 - 0.171378 0.0776087 0.0435738 0.0428235 0.0423755 0.0347695 - 0.0225061 0.0155539 0.0121357 0.0107997 0.0103976 0.0124406 - 0.016814 0.0167556 0.0149852 0.01459 0.0141182 0.0131934 - 0.0120286 0.0108692 0.0097184 0.00855881 0.00744912 0.00643877 - 0.00554044 0.00475165 0.00406535 0.00347158 0.00295981 0.00251995 - 0.00214318 0.00182101 0.00154613 0.00131196 0.0011119 0.000941587 - 0.000796999 0.000674582 0.000571283 0.000484276 0.000410649 - 0.000347005 0.000292984 0.000246715 0.000208143 0.00017489 - 0.000147412 0.000123854 0.000104332 8.77229e-05 7.40686e-05 - 6.2637e-05 5.32e-05 4.53946e-05 3.88343e-05 3.31864e-05 - 2.85905e-05 2.45725e-05 2.08671e-05 1.77301e-05 1.55911e-05 - 1.40153e-05 1.29421e-05 1.18693e-05 1.09815e-05 1.03484e-05 - 9.87664e-06 9.14446e-06 8.41228e-06 7.68011e-06 6.94793e-06 - 6.21575e-06 5.48357e-06 4.7514e-06 4.38454e-06 4.04432e-06 - 3.7041e-06 3.36388e-06 3.02366e-06 2.68344e-06 2.34322e-06 - 2.15196e-06 2.03791e-06 1.92386e-06 1.80982e-06 1.69577e-06 - 1.58173e-06 1.46768e-06 1.35363e-06 1.23959e-06 1.12554e-06 - 1.0115e-06 8.9745e-07 7.83404e-07 6.69358e-07 4.76113e-07 - -3.47071e-07 -1.17025e-06 -1.99344e-06 -2.81662e-06 0.0783754 - 0.0500262 -0.0659563 -0.120914 0.0815957 0.0154255 0.00347177 - 0.000840357 0.000214582 6.54655e-05 3.91709e-05 8.07396e-06 - -4.44265e-07 1.74384e-05 -4.52725e-05 -0.119379 -0.147984 - -0.159247 -0.0824604 0.169014 0.177628 0.0758742 0.010558 - -0.0346506 -0.0710288 -0.0838952 -0.0599521 -0.034568 -0.0181615 - -0.00968034 -0.00547115 -0.00333511 -0.00232468 -0.00181159 - -0.00143841 -0.00116601 -0.000839755 -0.000569764 -0.000578683 - -0.000490551 -0.000411712 -0.000437859 -0.000408185 -0.000356644 - -0.000311332 -0.000269006 -0.000221396 -0.000210054 -0.0001923 - -0.000175122 -0.000161039 -0.0001428 -0.000126123 -0.000127893 - -8.14516e-05 -0.000120166 -0.000154909 -0.000112733 -8.40377e-05 - -7.11342e-05 -8.09538e-05 -9.77789e-05 -9.82402e-05 -7.73531e-05 - -5.28255e-05 -3.1096e-05 -1.87967e-05 -1.96552e-05 -4.16655e-05 - -5.77185e-05 -5.24142e-05 -2.83153e-05 -1.90012e-05 -1.54415e-05 - -2.52569e-05 -6.23747e-05 -0.000130543 -0.000149394 -0.000110886 - -4.35517e-05 -4.17084e-05 -3.98651e-05 -3.80218e-05 -3.61785e-05 - -3.43352e-05 -3.36249e-05 -3.32729e-05 -3.29208e-05 -3.25687e-05 - -3.22166e-05 -3.17143e-05 -3.10258e-05 -3.03372e-05 -2.96486e-05 - -2.89601e-05 -2.82715e-05 -2.75829e-05 -2.68944e-05 -2.62058e-05 - -2.55173e-05 -2.48287e-05 -2.43043e-05 -2.38159e-05 -2.33276e-05 - -2.28393e-05 -2.2351e-05 -2.18626e-05 -2.13743e-05 -2.0886e-05 - -2.03977e-05 -1.99093e-05 -1.945e-05 -1.91122e-05 -1.87744e-05 - -1.84366e-05 -1.80987e-05 -1.77609e-05 -1.74231e-05 -1.70853e-05 - -1.67474e-05 - EOD - - @v[20].set(<<-'EOD') - 1.86175 1.99724 2.17266 2.48439 3.15933 3.85231 4.38091 - 4.69033 4.85034 4.92851 4.96453 4.98188 4.98736 4.991 4.99482 - 4.9973 4.96422 4.89989 4.83907 4.83151 4.90868 5.04854 5.06104 - 5.04571 5.03219 5.03025 5.02273 5.01707 5.0123 5.0087 5.00611 - 5.00429 5.00301 5.00211 5.00148 5.00103 5.00072 5.0005 5.00035 - 5.00024 5.00016 5.00011 5.00007 5.00005 5.00003 5.00001 - 4.99999 4.99998 4.99998 4.99998 4.99998 4.99998 4.99999 - 5 5 5.00001 5.00001 5.00002 5.00002 5.00002 5.00002 5.00002 - 5.00002 5.00001 5.00001 5 5 5 5 5 5 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5 5 5 5 - 5 5 4.99981 5.10081 5.10903 4.98404 5.00999 5.14946 4.36501 - 2.23938 0.325144 0.00660272 -0.0102186 -0.0082401 -0.00556785 - -0.00374178 -0.00264763 -0.00202823 -0.0182241 -0.0169551 - -0.0150395 0.0103736 0.0877592 0.104382 0.0515938 0.0373818 - 0.0411547 0.0397009 0.0308946 0.0205793 0.0154037 0.0129191 - 0.0119327 0.011527 0.0124295 0.0161152 0.0161076 0.0145391 - 0.0144541 0.0139287 0.0129215 0.0117239 0.0105795 0.00942983 - 0.00827423 0.00718354 0.00619954 0.00532868 0.00456631 0.00390448 - 0.00333254 0.00284003 0.00241714 0.00205524 0.0017458 0.00148202 - 0.00125739 0.0010655 0.000902213 0.000763611 0.000646279 - 0.000547291 0.000463934 0.000393401 0.000332424 0.000280655 - 0.000236328 0.000199386 0.000167536 0.000141218 0.000118654 - 9.99559e-05 8.40479e-05 7.09694e-05 6.00188e-05 5.09786e-05 - 4.3502e-05 3.72191e-05 3.18114e-05 2.74071e-05 2.35539e-05 - 1.99967e-05 1.69871e-05 1.49449e-05 1.3451e-05 1.24492e-05 - 1.14256e-05 1.05669e-05 9.94487e-06 9.47514e-06 8.77318e-06 - 8.07123e-06 7.36927e-06 6.66731e-06 5.96536e-06 5.2634e-06 - 4.56144e-06 4.23044e-06 3.92649e-06 3.62254e-06 3.31858e-06 - 3.01463e-06 2.71068e-06 2.40673e-06 2.23063e-06 2.12082e-06 - 2.01102e-06 1.90121e-06 1.7914e-06 1.68159e-06 1.57178e-06 - 1.46197e-06 1.35216e-06 1.24235e-06 1.13255e-06 1.02274e-06 - 9.12929e-07 8.0312e-07 6.33171e-07 -1.51288e-08 -6.63428e-07 - -1.31173e-06 -1.96003e-06 0.0437517 0.0265689 -0.0515377 - -0.0658688 0.010727 -0.000511921 -8.36924e-05 2.13278e-05 - 1.45207e-05 4.54862e-06 -6.14726e-06 2.0062e-06 1.02709e-06 - 1.4152e-05 -3.08225e-05 -0.0166501 -0.0157139 -0.013957 - 0.0107537 0.0873717 0.111302 0.0454129 -0.00530142 -0.0468336 - -0.0790063 -0.0826944 -0.0534753 -0.0288705 -0.0149009 -0.00801592 - -0.0046342 -0.00291835 -0.00213019 -0.00170055 -0.001352 - -0.00110593 -0.000742655 -0.000532042 -0.000544742 -0.000479206 - -0.000407307 -0.000403575 -0.000366209 -0.000324161 -0.000286183 - -0.000247579 -0.000214281 -0.000203435 -0.000186896 -0.000171033 - -0.00015779 -0.000145259 -0.000128069 -0.000122647 -9.89398e-05 - -0.000114926 -0.000132195 -0.000107872 -8.91015e-05 -7.87996e-05 - -8.14061e-05 -8.9098e-05 -8.83368e-05 -7.6122e-05 -6.14668e-05 - -4.75402e-05 -3.81855e-05 -3.69696e-05 -4.78656e-05 -5.61346e-05 - -5.35007e-05 -4.1459e-05 -3.35411e-05 -2.52374e-05 -2.37479e-05 - -4.6406e-05 -9.41884e-05 -0.000109222 -8.52676e-05 -4.25166e-05 - -4.10125e-05 -3.95085e-05 -3.80045e-05 -3.65004e-05 -3.49964e-05 - -3.41627e-05 -3.3541e-05 -3.29193e-05 -3.22976e-05 -3.16758e-05 - -3.10334e-05 -3.03653e-05 -2.96971e-05 -2.9029e-05 -2.83609e-05 - -2.76928e-05 -2.70246e-05 -2.63565e-05 -2.56884e-05 -2.50203e-05 - -2.43521e-05 -2.38716e-05 -2.34324e-05 -2.29932e-05 -2.25539e-05 - -2.21147e-05 -2.16755e-05 -2.12362e-05 -2.0797e-05 -2.03578e-05 - -1.99186e-05 -1.95079e-05 -1.9217e-05 -1.8926e-05 -1.8635e-05 - -1.8344e-05 -1.8053e-05 -1.7762e-05 -1.74711e-05 -1.71801e-05 - EOD - - @v[21].set(<<-'EOD') - 1.86175 1.73273 1.42016 1.02483 0.944013 0.274107 0.0823742 - 0.0379366 0.020816 0.0132952 0.00955525 0.00717008 0.00592286 - 0.00437379 0.00383557 0.00273694 -0.0037467 -0.0054191 -0.00131454 - 0.0112179 0.0133918 0.00519747 -0.00260113 -0.00252847 -0.00181292 - 0.000183398 -0.000667607 -0.000750747 -0.000594314 -0.000433904 - -0.000308985 -0.000217858 -0.000152926 -0.000107454 -7.54076e-05 - -5.2675e-05 -3.66299e-05 -2.54341e-05 -1.75095e-05 -1.18848e-05 - -7.97289e-06 -5.30239e-06 -3.53615e-06 -2.38504e-06 -2.40158e-06 - -3.84485e-06 -5.29435e-06 -2.57099e-06 1.95189e-06 3.55083e-06 - 2.06179e-06 5.72753e-07 3.30469e-07 3.40296e-07 3.60221e-07 - 4.86081e-07 6.1194e-07 7.37799e-07 8.63659e-07 9.89518e-07 - 9.21274e-07 7.22275e-07 5.23276e-07 3.24277e-07 1.25278e-07 - -5.59467e-08 -9.03265e-08 -1.24706e-07 -1.59086e-07 -1.93466e-07 - -2.27846e-07 -2.62226e-07 -2.96605e-07 -3.30985e-07 -3.65365e-07 - -3.99745e-07 -4.24266e-07 -3.82163e-07 -3.40061e-07 -2.97959e-07 - -2.55857e-07 -2.13755e-07 -1.71652e-07 -1.2955e-07 -8.7448e-08 - -4.53457e-08 -3.24353e-09 3.76901e-08 7.19937e-08 1.06297e-07 - 1.40601e-07 1.74904e-07 2.09208e-07 2.43512e-07 2.77815e-07 - 3.12119e-07 3.46422e-07 3.80726e-07 4.04507e-07 3.77191e-07 - 3.49876e-07 3.22561e-07 2.95246e-07 2.67931e-07 2.40616e-07 - 2.13301e-07 1.85986e-07 1.58671e-07 1.31356e-07 1.04041e-07 - 7.67256e-08 4.94105e-08 2.20955e-08 -5.21962e-09 -3.25347e-08 - -5.98498e-08 -8.71649e-08 -1.1448e-07 -1.41795e-07 -1.6911e-07 - 7.87893e-06 0.0114592 -0.0245712 -0.111637 0.0961324 1.61168 - 3.22343 4.20442 4.53535 4.83834 4.95464 4.98874 4.99746 - 4.99883 4.99948 4.99815 4.98431 4.99298 4.99718 5.01948 - 5.04749 5.008 4.98243 4.98985 4.99781 4.99887 4.99679 4.99616 - 4.99743 4.99859 4.99936 4.99972 5.00058 5.00123 5.0002 4.99945 - 4.99983 4.9998 4.99966 4.99958 4.99956 4.99956 4.99956 4.99958 - 4.99961 4.99965 4.99969 4.99973 4.99977 4.9998 4.99983 4.99985 - 4.99987 4.99989 4.99991 4.99992 4.99993 4.99994 4.99995 - 4.99996 4.99997 4.99997 4.99998 4.99998 4.99998 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5.00001 5.00001 - 5.00001 5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 - 5.00002 5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5 5 5 4.99999 4.99998 4.99997 4.99996 5.01454 - 4.99566 4.96796 4.99819 5.03232 5.00034 4.99867 4.99937 - 4.99977 4.99992 4.99997 4.99999 5.00001 5.00021 4.99974 - 4.98462 4.99301 4.99723 5.01936 5.04807 5.00929 4.9789 4.97876 - 4.98244 4.9863 4.99575 5.0069 5.00863 5.00624 5.00357 5.0019 - 5.00098 5.00048 5.00025 5.00016 5.00011 5.00013 5.00009 - 4.99982 4.99994 5.00005 4.99994 4.99988 4.99989 4.99997 - 5.00003 5.00005 5.00002 5.00001 5.00001 5.00001 4.99993 - 4.99999 5 5.00021 4.99997 4.99981 5 5.00009 5.0001 5.00001 - 4.99991 4.9999 5 5.00011 5.00017 5.00018 5.00018 5.00014 - 5.00007 4.99999 4.9999 4.9999 5.00001 5.00016 5.00014 4.99999 - 4.99993 4.99999 5.00009 5.00007 5.00006 5.00004 5.00003 - 5.00001 5.00001 5 4.99999 4.99998 4.99997 4.99997 4.99997 - 4.99998 4.99998 4.99998 4.99998 4.99999 4.99999 4.99999 - 5 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5.00002 - 5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5 5 - EOD - - @v[22].set(<<-'EOD') - 7.10441e-10 0.00107105 0.000637109 -0.00236346 -0.018079 - -0.0120077 -0.00217059 0.00266679 0.00403383 0.00403836 - 0.00356705 0.00303303 0.00244716 0.00198586 0.0016855 0.00136497 - -3.96022e-05 -0.000367409 -3.77079e-05 0.00194085 0.00506964 - -0.0400214 -0.0402572 0.0524434 0.286234 0.803011 1.44795 - 2.02473 2.54768 3.02748 3.4415 3.78287 4.09667 4.35152 4.53987 - 4.67614 4.77407 4.84319 4.89227 4.92702 4.95119 4.96764 - 4.97846 4.98557 4.98982 4.99209 4.99371 4.99569 4.99727 - 4.99802 4.99834 4.99867 4.99892 4.99915 4.99936 4.99939 - 4.99943 4.99946 4.9995 4.99953 4.99957 4.9996 4.99963 4.99967 - 4.9997 4.99973 4.99974 4.99975 4.99976 4.99977 4.99978 4.9998 - 4.99981 4.99982 4.99983 4.99984 4.99985 4.99986 4.99986 - 4.99986 4.99987 4.99987 4.99988 4.99988 4.99989 4.99989 - 4.9999 4.9999 4.9999 4.9999 4.99991 4.99991 4.99991 4.99991 - 4.99992 4.99992 4.99992 4.99992 4.99993 4.99993 4.99993 - 4.99993 4.99993 4.99993 4.99993 4.99993 4.99994 4.99994 - 4.99994 4.99994 4.99994 4.99994 4.99994 4.99994 4.99995 - 4.99995 4.99995 4.99995 4.99995 4.99995 4.99995 5.00145 - 5.00659 5.01209 5.01931 5.00279 4.99273 4.99217 4.99295 - 4.99471 4.99594 4.99696 4.9978 4.99844 4.99891 4.99924 4.99635 - 4.99699 4.99813 5.00068 5.00307 5.0588 4.96365 4.54012 3.6307 - 2.35176 1.0322 0.354379 0.115986 0.0435668 0.0245112 0.020786 - 0.0164656 0.0118409 0.00849698 0.00597078 0.0040105 0.0026076 - 0.0016597 0.00118185 0.00121067 0.00153587 0.00174836 0.00136519 - -0.000189116 -0.00315555 -0.00646603 -0.00898042 -0.010203 - -0.0110896 -0.0123764 -0.00953841 -0.00225795 0.000818314 - 0.00152252 0.00150269 0.00119025 0.000767068 0.000308852 - -3.79272e-05 -0.00019691 -0.000186642 -9.73653e-05 -8.49784e-06 - 2.04147e-05 -9.91086e-06 -1.55959e-05 -1.80499e-05 -1.77097e-05 - -1.51548e-05 -1.1978e-05 -9.84916e-06 -1.29728e-05 -1.67235e-05 - -1.74153e-05 -1.39958e-05 -5.92272e-06 -8.08216e-06 -1.53077e-05 - -2.92531e-05 -3.91049e-05 -2.98935e-05 -7.32122e-06 3.18534e-05 - 4.39134e-05 4.18753e-05 3.22759e-05 1.86766e-05 1.58432e-05 - 1.30098e-05 1.01765e-05 7.34312e-06 4.50975e-06 1.67639e-06 - -1.15697e-06 -1.23877e-06 -1.11991e-06 -1.00106e-06 -8.82208e-07 - -7.63355e-07 -6.44502e-07 -5.2565e-07 -4.29318e-07 -3.44661e-07 - -2.60004e-07 -1.75347e-07 -9.06904e-08 -6.03349e-09 7.86234e-08 - 1.6328e-07 2.47937e-07 3.32594e-07 4.17251e-07 5.01908e-07 - 5.86565e-07 6.71222e-07 7.36123e-07 6.43886e-07 5.5165e-07 - 4.59414e-07 3.67178e-07 0.000334759 -4.60833e-05 -0.00106139 - -0.00166624 0.000859563 0.00102606 0.00410037 0.00419931 - 0.00518997 0.00459791 0.00503125 0.00523877 0.00452158 0.00339924 - 0.00233399 0.000876915 0.000546439 0.000444299 0.000983968 - 0.00119304 -0.0429422 -0.0403983 0.0534896 0.288013 0.807345 - 1.44247 2.03448 2.57021 3.05049 3.47332 3.8131 4.1009 4.34677 - 4.53512 4.67127 4.76531 4.82526 4.86593 4.89586 4.91904 - 4.93806 4.95348 4.96597 4.97629 4.9843 4.98983 4.99335 4.9957 - 4.99741 4.99864 4.99946 4.99994 5.00047 5.00073 5.00086 - 5.00092 5.00094 5.00091 5.00087 5.00081 5.00074 5.00067 - 5.00059 5.00052 5.00046 5.0004 5.00034 5.0003 5.00026 5.00022 - 5.00019 5.00016 5.00014 5.00012 5.0001 5.00009 5.00007 5.00006 - 5.00006 5.00005 5.00004 5.00004 5.00004 5.00003 5.00003 - 5.00003 5.00002 5.00002 5.00002 5.00002 5.00001 5.00001 - 5.00001 5.00001 5.00001 5 5 5 5 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5 5 5.00001 5.00001 - 5.00001 5.00001 5.00002 5.00002 - EOD - - @v[23].set(<<-'EOD') - 5 5.00284 5.01266 5.01895 4.98936 4.99575 4.99217 4.99545 - 4.99775 4.99894 4.99946 4.99968 4.99975 4.99977 4.99986 - 4.9999 4.99528 4.99808 5.00039 5.00392 5.00512 4.99985 4.99863 - 4.99942 4.99992 5.00017 4.99897 4.99803 4.99784 4.99739 - 4.99883 5.00365 5.00298 5.00133 5.00048 5.00019 5.00008 - 5.00005 5.00004 5.00003 5.00002 5.00002 5.00001 5.00001 - 5.00001 5.00001 5.00001 5 5 4.99999 4.99997 4.99995 4.99996 - 4.99998 5 5.00001 5.00001 5.00002 5.00002 5.00003 5.00003 - 5.00002 5.00002 5.00001 5.00001 5 5 5 5 5 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99998 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00002 - 5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5 5 5 5 5 5 5 5.00217 5.00108 4.99547 4.99658 5.00667 - 4.99641 4.99532 4.99938 5.00328 5.00222 5.00114 5.00052 - 5.00024 5.00011 5.00009 4.99285 4.99591 4.99897 5.00403 - 5.00786 5.00318 4.99942 4.9992 4.99949 5.001 5.00408 5.00319 - 5.00063 4.99995 5.00014 4.99982 4.99832 4.99838 4.99865 - 4.99912 4.99836 4.99735 4.99606 4.99814 5.00958 5.02973 - 5.05293 5.06103 4.99342 4.80726 4.50744 4.07509 3.41358 - 2.37924 1.03194 0.261552 0.142392 0.0904482 0.0555071 0.0322869 - 0.018289 0.0113802 0.00875182 0.00757055 0.00629906 0.00523 - 0.00403349 0.0031953 0.00280864 0.00286119 0.00250389 0.00202815 - 0.001723 0.00147312 0.0012411 0.00104401 0.000886204 0.000758277 - 0.000651915 0.00056348 0.000487966 0.000424048 0.000365613 - 0.000308178 0.000258725 0.000228061 0.000207976 0.000198491 - 0.00018518 0.000172716 0.000163197 0.000155007 0.000141734 - 0.000128461 0.000115188 0.000101915 8.86417e-05 7.53686e-05 - 6.20956e-05 5.69164e-05 5.23275e-05 4.77385e-05 4.31495e-05 - 3.85605e-05 3.39716e-05 2.93826e-05 2.69449e-05 2.56224e-05 - 2.42999e-05 2.29774e-05 2.16549e-05 2.03324e-05 1.90099e-05 - 1.76873e-05 1.63648e-05 1.50423e-05 1.37198e-05 1.23973e-05 - 1.10748e-05 9.75232e-06 8.48447e-06 7.65129e-06 6.81811e-06 - 5.98494e-06 5.15176e-06 0.00056893 -0.00787906 -0.0217381 - -0.0370066 -0.00770505 0.00659312 0.00975477 0.00949456 - 0.00777552 0.00655645 0.00568776 0.00508782 0.00458121 0.00410187 - 0.00365665 0.0015121 0.00160863 0.00263181 0.00638941 0.00772607 - 0.00225583 0.0010843 0.000882939 0.000801563 0.00075632 - 0.000554992 0.000435131 0.0003474 0.000217667 0.000491602 - 0.0012267 0.00250446 0.000212058 -0.0174972 -0.0527527 -0.0479071 - 0.194908 1.45838 3.40677 4.49242 4.86894 4.97215 5.01218 - 5.04342 5.06228 5.03069 4.87169 4.57056 4.11523 3.38264 - 2.19691 0.715839 0.172818 0.102162 0.0627162 0.0363388 0.020289 - 0.0119414 0.00826608 0.0066417 0.00549092 0.00492505 0.00439443 - 0.0037156 0.00306471 0.00247451 0.00195965 0.0014822 0.0010815 - 0.000904464 0.0010514 0.00152308 0.00120752 0.000228447 - -0.00102833 -0.00116644 -0.00042067 4.78758e-05 5.09599e-05 - -4.45756e-05 -3.22966e-06 3.81163e-05 7.94622e-05 0.000120808 - 0.000162154 0.000161895 0.000148481 0.000135068 0.000121654 - 0.000108241 9.81453e-05 9.2164e-05 8.61827e-05 8.02014e-05 - 7.42201e-05 6.82388e-05 6.22576e-05 5.62763e-05 5.0295e-05 - 4.43137e-05 3.83324e-05 3.54323e-05 3.321e-05 3.09877e-05 - 2.87654e-05 2.65431e-05 2.43209e-05 2.20986e-05 1.98763e-05 - 1.7654e-05 1.54317e-05 1.34612e-05 1.25441e-05 1.1627e-05 - 1.07099e-05 9.79276e-06 8.87564e-06 7.95851e-06 7.04139e-06 - 6.12427e-06 - EOD - - @v[24].set(<<-'EOD') - 5 5.01099 5.00866 4.97845 4.92369 4.9273 4.97413 4.9929 - 4.99826 4.99958 4.99978 5.00005 4.99968 4.99959 5.00014 - 4.99979 4.99914 4.99982 5.00023 5.00295 5.00664 4.99854 - 4.99647 5.00438 5.01722 5.03681 5.04766 5.04799 5.04867 - 5.04873 5.04685 5.04413 5.0367 5.02505 5.01726 5.01183 5.00806 - 5.00549 5.00371 5.00246 5.00162 5.00105 5.00069 5.00045 - 5.00031 5.00024 5.00019 5.00012 5.00007 5.00004 5.00001 - 4.99998 4.99999 4.99999 5 5.00001 5.00001 5.00002 5.00002 - 5.00003 5.00003 5.00003 5.00002 5.00002 5.00001 5.00001 - 5.00001 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 5 5 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5 5 5 5 5 5 5 5.00418 4.99953 4.99152 - 4.99807 5.00497 5.00112 5.00055 5.00038 5.00018 5.00006 - 5.00006 5.00007 5.00006 5.00004 5.00004 4.99853 4.99945 - 4.99998 5.00304 5.00935 5.00742 4.99181 4.97421 4.93603 - 4.8853 4.8927 4.93984 4.97458 4.99039 4.99614 4.99801 4.99851 - 4.99869 4.99924 5.00108 5.00181 5.00119 5.00059 5.00031 - 5.00022 5.00018 5.00011 5.00001 5.00006 4.99981 4.99977 - 4.99982 5.00012 4.99993 5.00008 5.00043 5.00048 5.00024 - 5.00008 4.99984 4.99993 5.00011 4.99996 4.9998 4.99977 4.9998 - 4.99993 5.00008 5.00011 5.00002 4.99995 4.99989 4.99993 - 5 5.00007 5.00009 4.99994 4.99977 4.9997 4.99975 4.99996 - 4.99996 4.99988 4.9997 4.99952 4.9995 4.99956 4.99973 4.99988 - 5.00005 5.00025 5.00042 5.00036 5.00031 5.00025 5.0002 5.00014 - 5.00009 5.00003 5.00002 5.00001 5.00001 5 4.99999 4.99998 - 4.99998 4.99997 4.99998 4.99998 4.99998 4.99998 4.99998 - 4.99998 4.99998 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 5.00284 - 5.00442 5.00381 4.98997 4.99092 5.00733 5.07791 4.98237 - 4.86434 4.76835 4.74067 4.79278 4.85094 4.90068 4.93603 - 4.95698 4.96984 4.97856 4.98869 4.99904 5.0005 4.99524 5.00181 - 5.01878 5.05177 5.07986 4.98917 4.56217 3.68 2.3539 1.18541 - 0.505772 0.221044 0.115287 0.0760938 0.0589194 0.0476784 - 0.0457213 0.0412911 0.033889 0.0259741 0.0191452 0.0139018 - 0.0100235 0.00711788 0.00497657 0.00349368 0.00250021 0.00176179 - 0.00121843 0.000838368 0.000582711 0.000423458 0.000294608 - 0.000201251 0.000133748 8.6227e-05 5.44252e-05 3.30514e-05 - 1.93926e-05 1.09814e-05 5.29857e-06 1.92247e-06 3.08708e-07 - -3.74311e-07 -6.11121e-07 -7.27807e-07 -4.87604e-07 -4.80493e-07 - -9.15925e-07 -2.03774e-06 -4.01128e-06 -2.46644e-06 2.10626e-06 - 8.22422e-06 1.04922e-05 9.83047e-06 7.27106e-06 3.29654e-06 - -2.06736e-06 -2.18019e-06 -2.29303e-06 -2.40586e-06 -2.51869e-06 - -2.63153e-06 -2.24615e-06 -1.70325e-06 -1.16036e-06 -6.17468e-07 - -7.45754e-08 2.45198e-07 2.88285e-07 3.31373e-07 3.7446e-07 - 4.17548e-07 4.60635e-07 5.03723e-07 5.4681e-07 5.89898e-07 - 6.32985e-07 6.76073e-07 6.19054e-07 5.4001e-07 4.60967e-07 - 3.81923e-07 3.02879e-07 2.23836e-07 1.44792e-07 6.57488e-08 - -1.32948e-08 -9.23383e-08 -1.6698e-07 -2.23206e-07 -2.79432e-07 - -3.35658e-07 -3.91884e-07 -4.48109e-07 -5.04335e-07 -5.60561e-07 - -6.16787e-07 - EOD - - @v[25].set(<<-'EOD') - 1.34824 1.35838 1.36465 1.34675 1.29167 1.23161 1.2201 1.2185 - 1.2181 1.21798 1.21793 1.21788 1.21785 1.21782 1.21779 1.21776 - 1.21655 1.21656 1.21669 1.21871 1.22421 1.22247 1.21858 - 1.2228 1.23803 1.27737 1.10647 0.395248 0.0600669 0.027687 - 0.0192374 0.015425 0.0130881 0.00977445 0.00696598 0.00491122 - 0.00341952 0.00237078 0.00162339 0.00109178 0.000726647 - 0.000478886 0.00031568 0.000207902 0.000143494 0.000109768 - 8.62987e-05 5.69775e-05 3.36547e-05 2.30356e-05 1.86108e-05 - 1.41861e-05 1.08293e-05 7.68835e-06 4.79593e-06 4.51019e-06 - 4.22444e-06 3.9387e-06 3.65295e-06 3.36721e-06 3.04559e-06 - 2.69981e-06 2.35403e-06 2.00825e-06 1.66247e-06 1.34508e-06 - 1.26225e-06 1.17941e-06 1.09657e-06 1.01373e-06 9.30893e-07 - 8.48054e-07 7.65216e-07 6.82378e-07 5.9954e-07 5.16702e-07 - 4.37489e-07 3.82774e-07 3.2806e-07 2.73346e-07 2.18632e-07 - 1.63917e-07 1.09203e-07 5.4489e-08 -2.2523e-10 -5.49395e-08 - -1.09654e-07 -1.52862e-07 -1.3079e-07 -1.08718e-07 -8.6646e-08 - -6.45739e-08 -4.25019e-08 -2.04298e-08 1.64229e-09 2.37144e-08 - 4.57864e-08 6.78585e-08 8.71693e-08 9.30725e-08 9.89758e-08 - 1.04879e-07 1.10782e-07 1.16685e-07 1.22589e-07 1.28492e-07 - 1.34395e-07 1.40298e-07 1.46201e-07 1.52105e-07 1.58008e-07 - 1.63911e-07 1.69814e-07 1.75718e-07 1.81621e-07 1.87524e-07 - 1.93427e-07 1.9933e-07 2.05234e-07 2.11137e-07 2.19788e-07 - 0.000393944 -0.000218983 -0.00105784 0.00172403 -0.00027134 - -0.000204147 8.79968e-06 5.93762e-05 5.83554e-05 4.13815e-05 - 3.71369e-05 3.03372e-05 2.25336e-05 1.5986e-05 1.07284e-05 - -7.5239e-05 5.60593e-05 6.97571e-05 0.000667617 0.000960856 - 0.00131749 -0.00759564 -0.0217897 -0.0450321 -0.076646 -0.128569 - -0.186391 -0.202175 -0.206953 -0.2082 -0.208416 -0.208669 - -0.208934 -0.209111 -0.209234 -0.209329 -0.209389 -0.209416 - -0.2094 -0.209329 -0.20926 -0.209204 -0.209208 -0.209285 - -0.209454 -0.209641 -0.20977 -0.209811 -0.209833 -0.209887 - -0.209653 -0.209127 -0.208893 -0.208811 -0.208777 -0.208758 - -0.208747 -0.20874 -0.208726 -0.208697 -0.208657 -0.208611 - -0.208565 -0.208524 -0.208488 -0.208451 -0.208412 -0.208373 - -0.208333 -0.208294 -0.208256 -0.208219 -0.208183 -0.208145 - -0.208107 -0.208066 -0.208029 -0.207993 -0.207959 -0.207923 - -0.207883 -0.207838 -0.207789 -0.207747 -0.20771 -0.207675 - -0.207642 -0.207605 -0.207568 -0.207531 -0.207494 -0.207457 - -0.20742 -0.207383 -0.207346 -0.207308 -0.207271 -0.207233 - -0.207196 -0.207158 -0.207121 -0.207084 -0.207046 -0.207009 - -0.206972 -0.206935 -0.206898 -0.206861 -0.206823 -0.206786 - -0.206749 -0.206712 -0.206675 -0.206638 -0.2066 -0.206563 - -0.206526 -0.206489 -0.206452 -0.206415 -0.203384 -0.20015 - -0.196872 -0.205024 -0.210727 -0.206779 -0.0685263 0.586138 - 1.4665 2.22945 2.77554 3.076 3.24926 3.34515 3.40164 3.43006 - 3.43713 3.43075 3.42886 3.4384 3.46567 3.49025 3.51287 3.53821 - 3.57841 3.39846 2.80753 2.22947 1.7549 1.30429 0.707786 - 0.303206 0.131352 0.0671706 0.0429955 0.032461 0.0257161 - 0.0239521 0.0217397 0.0179705 0.0138745 0.0102813 0.00749643 - 0.0054328 0.00386817 0.0027004 0.00189442 0.00135552 0.000954715 - 0.000659981 0.000453435 0.000313993 0.000231347 0.000159665 - 0.000108122 7.10528e-05 4.50233e-05 2.77892e-05 1.62765e-05 - 8.9893e-06 4.5471e-06 1.54614e-06 -1.6542e-07 -8.68508e-07 - -1.04369e-06 -9.63086e-07 -8.44294e-07 -6.57339e-07 -7.35885e-07 - -9.80056e-07 -1.39772e-06 -2.10199e-06 -1.37474e-06 6.13269e-07 - 3.3028e-06 4.60941e-06 4.91053e-06 4.14186e-06 2.45258e-06 - -8.7388e-09 -3.59647e-07 -7.10554e-07 -1.06146e-06 -1.41237e-06 - -1.76328e-06 -1.63073e-06 -1.34534e-06 -1.05995e-06 -7.74561e-07 - -4.8917e-07 -2.95733e-07 -2.16326e-07 -1.3692e-07 -5.75135e-08 - 2.18929e-08 1.01299e-07 1.80706e-07 2.60112e-07 3.39519e-07 - 4.18925e-07 4.98332e-07 4.83984e-07 4.4901e-07 4.14035e-07 - 3.79061e-07 3.44087e-07 3.09112e-07 2.74138e-07 2.39163e-07 - 2.04189e-07 1.69215e-07 1.26002e-07 4.83213e-08 -2.9359e-08 - -1.07039e-07 -1.8472e-07 -2.624e-07 -3.4008e-07 -4.1776e-07 - -4.95441e-07 - EOD - - @v[26].set(<<-'EOD') - 7.10441e-10 0.000309731 -0.000308186 -0.001694 -0.00360784 - 8.40909e-05 0.00203175 0.0012896 0.000596548 0.000277191 - 0.000161134 0.000120439 8.4915e-05 9.49929e-05 6.18812e-05 - 1.65433e-05 1.89682e-05 3.97578e-05 4.95446e-05 0.000225325 - 0.000214579 -0.00230134 -0.000451102 0.00997237 0.0341443 - 0.0449314 0.0424411 0.0341996 0.0315315 0.0308892 0.0291614 - 0.024365 0.0190282 0.0188976 0.017238 0.0138526 0.0105645 - 0.00778548 0.00561753 0.0039871 0.00279554 0.00194075 0.0013468 - 0.000934775 0.000664723 0.000498911 0.000377384 0.000254183 - 0.000163421 0.000120773 9.65058e-05 7.22384e-05 5.60316e-05 - 4.14549e-05 2.79516e-05 2.57096e-05 2.34677e-05 2.12257e-05 - 1.89837e-05 1.67417e-05 1.46737e-05 1.27228e-05 1.07719e-05 - 8.82099e-06 6.87009e-06 5.0896e-06 4.71705e-06 4.34451e-06 - 3.97196e-06 3.59941e-06 3.22686e-06 2.85431e-06 2.48176e-06 - 2.10921e-06 1.73666e-06 1.36411e-06 1.02855e-06 9.42931e-07 - 8.57316e-07 7.71701e-07 6.86086e-07 6.00471e-07 5.14856e-07 - 4.29241e-07 3.43626e-07 2.58011e-07 1.72396e-07 9.85409e-08 - 9.14091e-08 8.42773e-08 7.71456e-08 7.00138e-08 6.2882e-08 - 5.57503e-08 4.86185e-08 4.14867e-08 3.4355e-08 2.72232e-08 - 2.05821e-08 1.63235e-08 1.2065e-08 7.80643e-09 3.54786e-09 - -7.10696e-10 -4.96926e-09 -9.22782e-09 -1.34864e-08 -1.77449e-08 - -2.20035e-08 -2.62621e-08 -3.05206e-08 -3.47792e-08 -3.90378e-08 - -4.32963e-08 -4.75549e-08 -5.18134e-08 -5.6072e-08 -6.03306e-08 - -6.45891e-08 -6.88477e-08 -8.76373e-06 0.000131607 -0.00021685 - -0.000433027 0.00047234 0.000211593 -0.000189601 3.2492e-05 - 0.000575955 7.72235e-05 -0.000285172 -0.000242061 -0.000135112 - -3.50117e-05 -2.75868e-05 5.48974e-05 1.80604e-07 5.48911e-05 - 3.97478e-05 0.000192909 0.000297932 0.00402253 -0.0122366 - -0.047853 -0.0963082 -0.108071 -0.0567275 -0.0239271 -0.0178628 - -0.0233027 -0.031853 -0.0400843 -0.0482725 -0.0576154 -0.0627218 - -0.0511236 -0.0279524 -0.0150986 -0.00931091 -0.00652876 - -0.00479286 -0.00344346 -0.00249578 -0.0019532 -0.00157977 - -0.00131848 -0.00111251 -0.000939229 -0.000797445 -0.000708384 - -0.000630452 -0.000539722 -0.000508862 -0.000480596 -0.000439484 - -0.000407217 -0.000363866 -0.000329506 -0.000318642 -0.000307362 - -0.000286511 -0.000266253 -0.000242943 -0.000218107 -0.000204661 - -0.00020241 -0.000194435 -0.000185062 -0.000173042 -0.000160549 - -0.000151407 -0.000145626 -0.000145976 -0.000147342 -0.000145288 - -0.000137979 -0.000124481 -0.000123218 -0.000127453 -0.000139006 - -0.000145486 -0.000129764 -9.82749e-05 -4.72596e-05 -3.08671e-05 - -3.28834e-05 -4.52254e-05 -6.25389e-05 -6.32516e-05 -6.39643e-05 - -6.4677e-05 -6.53897e-05 -6.61023e-05 -6.6815e-05 -6.75277e-05 - -6.61005e-05 -6.45173e-05 -6.29341e-05 -6.13509e-05 -5.97676e-05 - -5.81844e-05 -5.66012e-05 -5.54231e-05 -5.4455e-05 -5.3487e-05 - -5.25189e-05 -5.15508e-05 -5.05828e-05 -4.96147e-05 -4.86466e-05 - -4.76785e-05 -4.67105e-05 -4.57424e-05 -4.47743e-05 -4.38063e-05 - -4.28382e-05 -4.18821e-05 -4.10211e-05 -4.016e-05 -3.9299e-05 - -3.8438e-05 4.29885e-05 5.14113e-05 -0.000127986 -0.000611463 - -0.000149428 0.000882394 0.00297059 -0.00405825 -0.00591067 - -0.00546997 -0.00158744 0.00190677 0.00298403 0.00268595 - 0.00196161 0.00130289 0.000783347 0.000520683 0.000565306 - 0.00053419 -0.00224696 -0.000920818 0.0132755 0.0322504 - 0.0442808 0.0638615 0.0701007 0.0539356 0.0247771 0.056244 - 0.294266 0.831368 1.45424 2.02898 2.54559 2.9937 3.35333 - 3.72609 4.06363 4.32789 4.52413 4.66504 4.7652 4.83637 4.88631 - 4.92109 4.94464 4.96046 4.97218 4.98079 4.98679 4.99076 - 4.99361 4.99555 4.99686 4.99783 4.99853 4.99902 4.99936 - 4.99959 4.99973 4.99983 4.9999 4.99993 4.99996 4.99998 5 - 5.00001 5 4.99999 4.99997 4.99994 4.99993 4.99994 4.99996 - 4.99999 5.00004 5.00006 5.00005 5.00003 5.00002 5.00001 - 5 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 5 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99999 4.99998 - EOD - - @v[27].set(<<-'EOD') - 5 4.99984 4.99796 4.99478 4.9889 4.98738 4.98896 4.99087 - 4.99262 4.99419 4.99552 4.99659 4.99743 4.99807 4.99855 - 4.9989 4.99894 4.99908 4.99935 5.00001 5.0007 5.00132 5.00032 - 4.99976 5.00134 5.00339 5.00315 5.00157 5.00091 5.00058 - 5.00012 4.99944 4.99886 4.9994 4.99934 4.99899 4.99876 4.99868 - 4.99872 4.99883 4.99898 4.99914 4.9993 4.99944 4.99956 4.99967 - 4.99976 4.99982 4.99986 4.9999 4.99993 4.99997 4.99997 4.99998 - 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 - 4.99999 4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5.00009 5.00028 5.00015 4.99983 - 5.00036 4.99996 4.99834 4.99783 5.00383 5.00734 5.00387 - 5.00058 4.99893 4.99836 4.99832 4.99854 4.99873 4.99905 - 4.99927 4.99952 4.99969 4.99834 4.99536 4.99163 4.99073 - 5.0053 5.03631 5.03103 4.9008 4.62503 4.21887 3.70902 3.09967 - 2.35791 1.41912 0.519675 0.210458 0.131362 0.0980819 0.0708209 - 0.0471701 0.0323272 0.0253535 0.0199144 0.0152615 0.0117228 - 0.00917696 0.00738117 0.00609292 0.00512664 0.00436184 0.0037961 - 0.00331639 0.00289006 0.0025477 0.00226529 0.00202925 0.00182793 - 0.00165474 0.00150531 0.00137529 0.00125983 0.00115603 0.00106455 - 0.000982977 0.000911255 0.000846819 0.000790092 0.000738698 - 0.000692816 0.00065107 0.000613595 0.000579642 0.000548935 - 0.00052106 0.000495598 0.000472174 0.000450849 0.000431118 - 0.000412667 0.000395868 0.000381319 0.000368487 0.000357327 - 0.000344212 0.000330334 0.00031622 0.000303298 0.000295809 - 0.00028832 0.000280831 0.000273342 0.000265853 0.000258364 - 0.000250875 0.000245118 0.000239488 0.000233857 0.000228227 - 0.000222596 0.000216966 0.000211336 0.000207047 0.000203455 - 0.000199863 0.00019627 0.000192678 0.000189085 0.000185493 - 0.0001819 0.000178308 0.000174716 0.000171123 0.000167531 - 0.000163938 0.000160346 0.000156835 0.000153973 0.00015111 - 0.000148248 0.000145385 0.000296579 -3.96718e-05 -0.000449085 - 0.000323433 0.000750086 0.000268264 0.000149028 -0.000100249 - 7.00956e-05 0.00012605 0.00022592 0.000193036 0.000120453 - 8.07865e-05 7.65771e-05 -3.27828e-05 0.000116759 0.000169498 - 0.000409804 0.000414965 0.00092323 -0.00590633 -0.0175477 - -0.032433 -0.0559842 -0.0820373 0.0688484 0.626629 1.32929 - 2.01657 2.60925 3.12329 3.38952 3.14128 2.38463 1.23802 - 0.316019 0.107832 0.0694707 0.051837 0.035247 0.0209999 - 0.0116618 0.00967674 0.00789182 0.00574566 0.00386872 0.00258612 - 0.00167126 0.00104169 0.000641093 0.000401246 0.000277928 - 0.000171775 0.000102266 5.89376e-05 3.29258e-05 1.80463e-05 - 1.0057e-05 6.4571e-06 5.10093e-06 4.06791e-06 3.62716e-06 - 3.63321e-06 3.99625e-06 4.64368e-06 5.20886e-06 4.77728e-06 - 3.23919e-06 1.14113e-06 -1.29416e-06 -4.15607e-06 -1.88532e-06 - 5.24411e-06 1.38678e-05 1.28823e-05 3.6758e-06 -2.52285e-06 - -3.97133e-06 -4.03071e-06 -3.37154e-06 -2.71238e-06 -2.05321e-06 - -1.39404e-06 -7.34872e-07 -3.73325e-07 -1.05873e-07 1.61578e-07 - 4.2903e-07 6.96482e-07 8.18468e-07 7.60065e-07 7.01662e-07 - 6.43258e-07 5.84855e-07 5.26452e-07 4.68049e-07 4.09646e-07 - 3.51243e-07 2.9284e-07 2.34437e-07 1.71213e-07 1.06928e-07 - 4.2644e-08 -2.16403e-08 -8.59247e-08 -1.50209e-07 -2.14493e-07 - -2.78778e-07 -3.43062e-07 -4.07346e-07 -4.55065e-07 -4.3348e-07 - -4.11896e-07 -3.90311e-07 -3.68726e-07 -3.47141e-07 -3.25556e-07 - -3.03971e-07 -2.82386e-07 - EOD - - @v[28].set(<<-'EOD') - 0.368163 0.361756 0.327463 0.269513 0.149476 0.0805716 0.0501146 - 0.03403 0.0230886 0.0160474 0.0116071 0.00870013 0.00679614 - 0.00542384 0.00432512 0.00340653 -0.00129719 -0.00399429 - -0.00318719 0.00443085 0.0150156 0.0334147 0.0132288 -0.0189751 - -0.0508377 -0.0252174 -0.0142489 -0.00675908 -0.0038653 - -0.00243423 -0.00168891 -0.00120901 -0.000900426 -0.000685575 - -0.000557595 -0.000457268 -0.000377427 -0.000315269 -0.000266613 - -0.000228397 -0.000198283 -0.000174248 -0.000154886 -0.00013892 - -0.000125864 -0.000115189 -0.000105841 -9.66611e-05 -8.84262e-05 - -8.23872e-05 -7.74668e-05 -7.25463e-05 -6.79992e-05 -6.35276e-05 - -5.92413e-05 -5.68994e-05 -5.45574e-05 -5.22154e-05 -4.98735e-05 - -4.75315e-05 -4.54981e-05 -4.36726e-05 -4.18471e-05 -4.00216e-05 - -3.81961e-05 -3.64559e-05 -3.54209e-05 -3.43858e-05 -3.33508e-05 - -3.23157e-05 -3.12807e-05 -3.02456e-05 -2.92105e-05 -2.81755e-05 - -2.71404e-05 -2.61054e-05 -2.51232e-05 -2.44984e-05 -2.38736e-05 - -2.32487e-05 -2.26239e-05 -2.19991e-05 -2.13742e-05 -2.07494e-05 - -2.01246e-05 -1.94998e-05 -1.88749e-05 -1.82865e-05 -1.79044e-05 - -1.75224e-05 -1.71403e-05 -1.67582e-05 -1.63762e-05 -1.59941e-05 - -1.56121e-05 -1.523e-05 -1.4848e-05 -1.44659e-05 -1.41138e-05 - -1.39075e-05 -1.37011e-05 -1.34947e-05 -1.32883e-05 -1.30819e-05 - -1.28755e-05 -1.26691e-05 -1.24627e-05 -1.22563e-05 -1.205e-05 - -1.18436e-05 -1.16372e-05 -1.14308e-05 -1.12244e-05 -1.1018e-05 - -1.08116e-05 -1.06052e-05 -1.03988e-05 -1.01924e-05 -9.98605e-06 - -9.77966e-06 -2.85319e-05 0.00281092 0.00180106 -0.000981083 - 0.00551926 -0.00119763 -0.0295069 -0.0367677 0.064749 0.119022 - 0.0882007 0.0552062 0.03418 0.0223243 0.015545 0.011949 - 0.00757134 0.00667655 0.00583243 0.00644443 0.00650959 -0.0302575 - -0.0437806 -0.0355466 0.0381776 0.282109 0.674178 1.07582 - 1.45189 1.789 2.08649 2.34663 2.57245 2.81211 3.04778 3.2523 - 3.45877 3.65593 3.83396 3.9923 4.13368 4.25864 4.36719 4.46064 - 4.54086 4.60962 4.66835 4.71838 4.76094 4.79716 4.82796 - 4.85413 4.87634 4.89518 4.91116 4.92476 4.93631 4.94608 - 4.95434 4.9613 4.96715 4.97211 4.97638 4.98001 4.98312 4.98571 - 4.98795 4.98979 4.99138 4.99269 4.99381 4.99474 4.99551 - 4.99615 4.99668 4.99713 4.99752 4.99783 4.99811 4.99836 - 4.99858 4.99873 4.99884 4.99892 4.999 4.99907 4.99912 4.99916 - 4.99921 4.99926 4.99932 4.99937 4.99942 4.99948 4.99953 - 4.99956 4.99958 4.99961 4.99963 4.99966 4.99968 4.99971 - 4.99972 4.99973 4.99974 4.99975 4.99976 4.99977 4.99978 - 4.99979 4.9998 4.9998 4.99981 4.99982 4.99983 4.99984 4.99985 - 4.99986 4.99986 4.99987 4.99987 5.00498 5.00354 4.99359 - 4.98981 5.00498 5.00099 5.00041 5.00022 5.00015 5.00012 - 5.0001 5.00008 5.00005 5.00003 5 4.99431 4.99459 4.99591 - 5.00087 5.01029 5.03935 4.92784 4.51643 3.78356 2.68745 - 1.43417 0.583128 0.205094 0.0777337 0.0391566 0.02723 0.023883 - 0.018808 0.010165 0.00254623 -0.00377463 -0.0038097 0.00144145 - 0.00267231 0.00193045 0.00144538 0.00121758 0.00112893 0.00109424 - 0.0010226 0.000948072 0.000882573 0.000826996 0.000776391 - 0.000729719 0.000686499 0.000647333 0.000610108 0.000575631 - 0.000545069 0.000515485 0.000488514 0.000465316 0.000443215 - 0.000422454 0.00040292 0.00038488 0.000368472 0.000353628 - 0.000339643 0.000326197 0.000313483 0.000302884 0.000294038 - 0.000284003 0.000270941 0.000254925 0.000246511 0.000244089 - 0.000245538 0.000242099 0.000235728 0.000227482 0.000218001 - 0.000207257 0.000202127 0.000196997 0.000191868 0.000186738 - 0.000181608 0.00017758 0.000173899 0.000170219 0.000166538 - 0.000162857 0.000159576 0.00015679 0.000154005 0.000151219 - 0.000148433 0.000145647 0.000142861 0.000140076 0.00013729 - 0.000134504 0.000131718 0.000129603 0.000127635 0.000125668 - 0.0001237 0.000121732 0.000119765 0.000117797 0.000115829 - 0.000113862 0.000111894 0.000109993 0.000108372 0.000106751 - 0.00010513 0.000103509 0.000101887 0.000100266 9.86449e-05 - 9.70237e-05 - EOD - - @v[29].set(<<-'EOD') - 5 4.99899 4.99654 4.99327 4.9863 4.98954 4.99212 4.99378 - 4.9951 4.99624 4.99715 4.99786 4.99839 4.99879 4.99909 4.99931 - 4.99922 4.99933 4.99971 5.00064 5.00084 5.00123 4.99865 - 4.99853 4.99983 5.00457 5.00242 5.00105 5.00062 5.00042 - 4.99971 4.9994 4.9992 4.9996 4.99955 4.99932 4.99918 4.99915 - 4.99919 4.99927 4.99937 4.99948 4.99957 4.99966 4.99974 - 4.9998 4.99985 4.99989 4.99992 4.99993 4.99994 4.99994 4.99996 - 4.99998 5 5 5.00001 5.00001 5.00001 5.00002 5.00002 5.00001 - 5.00001 5.00001 5 5 5 5 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99998 4.99998 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 - 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00002 5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5 5 5 5 5 5 4.9997 4.99998 4.99954 4.99963 - 5.00059 4.99945 4.99732 4.99957 5.00919 5.00558 5.00033 - 4.99851 4.9983 4.99854 4.99871 4.99928 4.99914 4.99939 4.99952 - 4.9998 4.99976 4.99744 4.99598 4.99478 4.99806 5.01911 5.04602 - 5.05469 5.01317 4.89484 4.69655 4.42036 4.06069 3.60793 - 3.12531 2.72975 2.45187 2.25081 2.09841 1.98509 1.90211 - 1.84084 1.79411 1.7574 1.72763 1.70283 1.68188 1.66389 1.64823 - 1.63438 1.62201 1.61088 1.60081 1.59163 1.58323 1.57549 - 1.56835 1.56173 1.55558 1.54985 1.54451 1.53951 1.53479 - 1.53035 1.52615 1.5222 1.51845 1.5149 1.51153 1.50834 1.50529 - 1.5024 1.49964 1.497 1.49449 1.49208 1.48977 1.48755 1.48542 - 1.48336 1.48138 1.47948 1.47765 1.4759 1.47419 1.47255 1.47096 - 1.46949 1.46823 1.46696 1.4657 1.46444 1.46317 1.46191 1.46065 - 1.45956 1.4585 1.45743 1.45636 1.45529 1.45422 1.45315 1.45226 - 1.45145 1.45064 1.44983 1.44902 1.44821 1.4474 1.44659 1.44579 - 1.44498 1.44417 1.44336 1.44255 1.44174 1.44094 1.44019 - 1.43944 1.43868 1.43793 1.43765 1.43679 1.43515 1.43405 - 1.43478 1.43387 1.43345 1.43184 1.43086 1.43021 1.43003 - 1.42988 1.42944 1.42883 1.42818 1.42702 1.42642 1.42595 - 1.42586 1.42616 1.42783 1.41733 1.38106 1.30738 1.3877 2.09819 - 3.05285 3.58059 3.77601 3.87609 4.02557 4.24887 4.4608 4.60411 - 4.72109 4.8255 4.90465 4.97379 5.01253 5.01532 5.01239 5.0092 - 5.00665 5.00474 5.00333 5.00232 5.00163 5.00117 5.00082 - 5.00057 5.00039 5.00027 5.00019 5.00013 5.00009 5.00006 - 5.00004 5.00003 5.00002 5.00001 5.00001 5 5 5 4.99998 4.99995 - 4.99992 4.99996 5.00005 5.00012 5.00008 4.99996 4.9999 4.99985 - 4.99986 4.99997 5.00021 5.0003 5.00024 5.00009 5.00007 5.00005 - 5.00003 5.00001 4.99998 4.99998 4.99998 4.99999 4.99999 - 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00002 5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99998 - 4.99998 4.99998 - EOD - - @v[30].set(<<-'EOD') - 7.10441e-10 5.70385e-05 0.000226143 0.000131916 -0.000887764 - -8.01837e-05 -3.49653e-05 9.40039e-05 0.000118663 0.000108025 - 8.6059e-05 6.33268e-05 4.99295e-05 3.16843e-05 3.60692e-05 - 2.07572e-05 -8.6375e-05 3.44583e-05 8.07397e-05 0.000196296 - 0.000115615 -7.12768e-05 -0.000129812 -4.18679e-05 7.94364e-05 - 0.000182034 -5.41226e-05 -0.000451819 -0.000713937 -0.00129863 - -0.00262186 -0.00213417 -0.00133767 0.000775698 0.000969902 - 0.000549281 0.000280946 0.000140321 8.6919e-05 7.22446e-05 - 6.5631e-05 6.45263e-05 6.63087e-05 7.17391e-05 7.59042e-05 - 7.59172e-05 7.03353e-05 6.33558e-05 5.31136e-05 4.64278e-05 - 4.40594e-05 4.16909e-05 4.05674e-05 3.96957e-05 3.87875e-05 - 3.74977e-05 3.62079e-05 3.49181e-05 3.36283e-05 3.23385e-05 - 3.12427e-05 3.02775e-05 2.93124e-05 2.83472e-05 2.7382e-05 - 2.64613e-05 2.59077e-05 2.5354e-05 2.48004e-05 2.42468e-05 - 2.36931e-05 2.31395e-05 2.25859e-05 2.20322e-05 2.14786e-05 - 2.0925e-05 2.03916e-05 1.9995e-05 1.95984e-05 1.92019e-05 - 1.88053e-05 1.84087e-05 1.80122e-05 1.76156e-05 1.7219e-05 - 1.68225e-05 1.64259e-05 1.6051e-05 1.57991e-05 1.55471e-05 - 1.52952e-05 1.50433e-05 1.47913e-05 1.45394e-05 1.42875e-05 - 1.40356e-05 1.37836e-05 1.35317e-05 1.32978e-05 1.31513e-05 - 1.30048e-05 1.28583e-05 1.27118e-05 1.25653e-05 1.24188e-05 - 1.22724e-05 1.21259e-05 1.19794e-05 1.18329e-05 1.16864e-05 - 1.15399e-05 1.13934e-05 1.12469e-05 1.11005e-05 1.0954e-05 - 1.08075e-05 1.0661e-05 1.05145e-05 1.0368e-05 1.02215e-05 - 1.76447e-05 7.21516e-05 -3.59786e-05 -0.000159618 0.000156236 - 0.000135106 -0.000336402 -0.000302283 0.000699323 0.000473866 - -0.000156146 -0.000225625 -0.000123592 -3.78116e-05 8.47472e-06 - 2.43387e-06 -7.44762e-05 7.80111e-05 9.43608e-05 0.000170159 - 8.83919e-05 -0.00018802 -0.000373512 -0.000390597 0.000156875 - 0.0032343 0.00776304 -0.000566905 -0.00760695 -0.0159226 - -0.0245989 -0.0331402 -0.0100902 0.067837 0.266702 0.910818 - 1.82282 2.69714 3.43247 3.98325 4.32893 4.51529 4.67087 - 4.79288 4.87574 4.92797 4.95902 4.97655 4.98622 4.99195 - 4.99526 4.99735 4.9991 4.99974 4.99982 4.99974 4.99961 4.9995 - 4.99943 4.9994 4.9994 4.99942 4.99944 4.99948 4.99952 4.99956 - 4.99961 4.99965 4.9997 4.99974 4.99977 4.99981 4.99983 4.99986 - 4.99988 4.9999 4.99991 4.99992 4.99993 4.99994 4.99995 4.99995 - 4.99996 4.99997 4.99997 4.99998 4.99998 4.99999 4.99999 - 4.99999 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5 - 5 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 5 5.00019 4.99888 4.99663 4.99457 4.99902 - 5.00229 5.00323 5.00302 5.0023 5.0015 5.00085 5.00041 5.00013 - 4.99993 4.99979 4.99948 4.99954 4.99983 5.00055 5.00109 - 5.00009 4.9987 4.998 4.99755 4.99676 4.99618 5.01091 5.05272 - 5.04156 4.80112 4.27692 3.42343 2.23953 0.967179 0.429813 - 0.540757 1.32991 2.32147 3.14903 3.78143 4.22325 4.47978 - 4.59448 4.69875 4.79798 4.87419 4.92339 4.95249 4.97174 - 4.98408 4.99124 4.99478 4.99729 4.99868 4.9992 4.99941 4.99947 - 4.99946 4.99943 4.9994 4.99939 4.9994 4.99942 4.99946 4.99951 - 4.99956 4.99961 4.99967 4.99973 4.99977 4.9998 4.99981 4.99983 - 4.99984 4.99987 4.99992 5.00001 5.00005 5.00001 4.99994 - 4.99995 4.99995 4.99996 4.99996 4.99996 4.99997 4.99997 - 4.99997 4.99998 4.99998 4.99998 4.99998 4.99999 4.99999 - 4.99999 4.99999 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5 5 5 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 - 4.99998 4.99998 4.99998 - EOD - - @v[31].set(<<-'EOD') - 1.8179e-09 -5.28841e-06 -1.44913e-05 -3.62932e-05 -9.75719e-05 - 0.000141781 3.73396e-05 -1.65603e-05 -1.5271e-05 -6.73884e-06 - 4.40157e-06 -4.85345e-06 -1.02964e-05 2.03126e-05 -1.89457e-05 - -8.75564e-06 7.67422e-06 4.71103e-06 1.29798e-05 6.13469e-06 - -1.14363e-05 -0.0394563 -0.0477298 -0.0622012 -0.0519225 - 0.262499 0.943611 1.67052 2.31017 2.84028 3.28467 3.61582 - 3.85887 4.13011 4.36511 4.54063 4.67013 4.76408 4.83263 - 4.8825 4.91837 4.94373 4.96117 4.97318 4.98093 4.98562 4.98906 - 4.99267 4.99539 4.99666 4.99731 4.99797 4.99844 4.99887 - 4.99927 4.99933 4.99938 4.99944 4.99949 4.99955 4.9996 4.99965 - 4.9997 4.99975 4.9998 4.99985 4.99986 4.99987 4.99989 4.9999 - 4.99991 4.99992 4.99993 4.99995 4.99996 4.99997 4.99998 - 4.99998 4.99999 4.99999 4.99999 4.99999 5 5 5 5 5.00001 - 5.00001 5.00001 5 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99997 5.00002 5.00004 5.0001 5.0001 4.99987 5.00009 - 5.00021 5.00002 5.00004 4.99988 5.00013 4.99993 5.00026 - 4.99973 5 5.00006 5.00009 5.00004 5.00004 5.04854 4.82711 - 4.04208 2.64155 0.838902 0.19014 0.0982549 0.0723197 0.0576863 - 0.0427644 0.0301979 0.020146 0.0135728 0.00980358 0.00774482 - 0.00586604 0.0036687 0.00211511 0.00121906 0.000647581 0.000828436 - 0.00190938 0.00224254 0.00199956 0.00165488 0.00135612 0.00113715 - 0.000984181 0.000877175 0.000789973 0.000741139 0.000689338 - 0.000625676 0.000586082 0.000550152 0.000529573 0.000505606 - 0.000482117 0.000460574 0.000441649 0.000424674 0.000408398 - 0.000391914 0.000376272 0.000361487 0.000348181 0.000336045 - 0.000324466 0.000313545 0.000303046 0.000293056 0.00028356 - 0.000274586 0.000266155 0.000258279 0.000250938 0.000243789 - 0.000236912 0.000230244 0.000224186 0.000219291 0.000215346 - 0.000212468 0.000207291 0.000200862 0.00019368 0.000186767 - 0.000183515 0.000180263 0.00017701 0.000173758 0.000170506 - 0.000167253 0.000164001 0.000161164 0.000158357 0.00015555 - 0.000152743 0.000149936 0.000147129 0.000144322 0.000142066 - 0.000140096 0.000138127 0.000136157 0.000134187 0.000132218 - 0.000130248 0.000128278 0.000126308 0.000124339 0.000122369 - 0.000120399 0.000118429 0.00011646 0.000114527 0.000112892 - 0.000111258 0.000109623 0.000107988 0.000103598 6.86052e-05 - 3.337e-05 7.00783e-05 0.000218764 0.000221318 0.000118593 - -0.000113962 5.78552e-05 9.42068e-05 0.000237037 0.000171302 - 0.0001033 6.16066e-05 5.52908e-05 6.30233e-05 7.01897e-05 - 8.48573e-05 0.000106859 8.37213e-05 -0.0391541 -0.047722 - -0.0618454 -0.0169804 0.345725 1.03426 1.74825 2.37152 2.88737 - 3.32173 3.66761 3.9707 4.17762 3.98832 3.30483 2.09737 0.710892 - 0.148159 0.0707463 0.0555808 0.045618 0.0319116 0.0199589 - 0.0133357 0.00898528 0.00586075 0.00375478 0.00245443 0.00156038 - 0.000962344 0.000590953 0.000375107 0.000250243 0.00015882 - 0.000100203 6.18122e-05 3.7372e-05 2.23009e-05 1.32569e-05 - 8.29437e-06 5.72457e-06 3.96832e-06 2.98935e-06 2.59699e-06 - 2.75024e-06 3.38689e-06 4.0453e-06 3.50095e-06 1.64988e-06 - -3.84371e-07 -2.03828e-06 -3.46401e-06 -1.24301e-06 4.63458e-06 - 1.14104e-05 1.02619e-05 2.15487e-06 -2.98487e-06 -3.67221e-06 - -2.94279e-06 -2.58649e-06 -2.23019e-06 -1.87389e-06 -1.5176e-06 - -1.1613e-06 -7.92127e-07 -4.18889e-07 -4.56502e-08 3.27588e-07 - 7.00827e-07 8.79539e-07 8.17025e-07 7.5451e-07 6.91996e-07 - 6.29481e-07 5.66966e-07 5.04452e-07 4.41937e-07 3.79422e-07 - 3.16908e-07 2.54393e-07 1.90078e-07 1.25366e-07 6.0654e-08 - -4.05776e-09 -6.87696e-08 -1.33481e-07 -1.98193e-07 -2.62905e-07 - -3.27617e-07 -3.92329e-07 -4.40392e-07 -4.18802e-07 -3.97213e-07 - -3.75624e-07 -3.54035e-07 -3.32446e-07 -3.10856e-07 -2.89267e-07 - -2.67678e-07 - EOD - - @v[32].set(<<-'EOD') - 1.10294 1.10297 1.10291 1.10277 1.10259 1.10294 1.10313 - 1.10306 1.10299 1.10296 1.10295 1.10295 1.10294 1.10294 - 1.10294 1.10294 1.10294 1.10294 1.10294 1.10296 1.10296 - 1.00547 0.998599 1.5201 2.49297 3.31258 3.73162 3.84757 - 3.92505 4.02965 4.16599 4.30294 4.41541 4.52886 4.64414 - 4.73865 4.81065 4.86391 4.90315 4.93188 4.95258 4.96726 - 4.97738 4.98436 4.98888 4.99162 4.99363 4.99573 4.99731 - 4.99804 4.99843 4.99881 4.99909 4.99934 4.99957 4.9996 4.99964 - 4.99967 4.9997 4.99973 4.99977 4.9998 4.99983 4.99986 4.99988 - 4.99991 4.99992 4.99992 4.99993 4.99994 4.99994 4.99995 - 4.99996 4.99996 4.99997 4.99997 4.99998 4.99998 4.99999 - 4.99999 4.99999 4.99999 5 5 5 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 5.00028 4.99988 4.99968 - 5.00019 4.99987 5.00021 4.99973 4.99977 4.99996 4.99997 - 5.0002 4.99957 5.00026 4.99947 5.00074 5.00003 4.99987 4.99979 - 5.00008 4.99997 5.08794 5.05993 4.76875 3.99197 3.10174 - 2.5197 2.21771 2.04 1.92235 1.83874 1.77592 1.72665 1.686 - 1.65276 1.6286 1.61299 1.60039 1.58934 1.57954 1.57083 1.56306 - 1.55604 1.54963 1.54375 1.53832 1.53331 1.52865 1.52432 - 1.52026 1.51645 1.51287 1.50949 1.50629 1.50327 1.50039 - 1.49766 1.49505 1.49257 1.49019 1.48792 1.48574 1.48365 - 1.48164 1.47971 1.47784 1.47604 1.47431 1.47264 1.47102 - 1.46945 1.46794 1.46647 1.46505 1.46367 1.46233 1.46103 - 1.45976 1.45853 1.45733 1.45616 1.45502 1.45392 1.45284 - 1.45179 1.45076 1.44975 1.4488 1.44795 1.44711 1.44626 1.44541 - 1.44457 1.44372 1.44287 1.44212 1.44138 1.44063 1.43989 - 1.43914 1.4384 1.43766 1.43701 1.43641 1.43581 1.43522 1.43462 - 1.43402 1.43342 1.43282 1.43223 1.43163 1.43103 1.43043 - 1.42984 1.42924 1.42865 1.42808 1.42752 1.42695 1.42639 - 1.42584 1.42529 1.42472 1.42412 1.42365 1.42326 1.42304 - 1.42162 1.42082 1.42032 1.42029 1.42026 1.41995 1.41947 - 1.41894 1.41841 1.4179 1.41742 1.41699 1.41656 1.32097 1.30963 - 1.78765 2.64656 3.35764 3.747 3.86589 3.94217 4.04185 4.18453 - 4.3561 4.53439 4.68621 4.74905 4.77848 4.84629 4.91261 4.97541 - 5.01284 5.01548 5.01248 5.00924 5.00666 5.00475 5.00334 - 5.00234 5.00164 5.00118 5.00083 5.00058 5.0004 5.00028 5.00019 - 5.00013 5.00009 5.00007 5.00004 5.00003 5.00002 5.00001 - 5.00001 5.00001 5 5 4.99999 4.99995 4.99992 4.99996 5.00006 - 5.00012 5.00009 4.99997 4.9999 4.99985 4.99986 4.99997 5.00021 - 5.00031 5.00024 5.0001 5.00007 5.00005 5.00003 5.00001 4.99998 - 4.99998 4.99999 4.99999 4.99999 5 5 5 5 5 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00002 5.00002 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5 5 5 5 - 5 4.99999 4.99999 4.99999 4.99998 4.99998 4.99998 - EOD - - @v[33].set(<<-'EOD') - 5 5.00012 5.00023 5.0003 4.99972 4.99988 4.99984 4.99991 - 4.99996 4.99999 5.00008 5.00009 4.99986 5.00003 5.00007 - 4.99995 4.9999 4.99997 5.00013 5.00014 5.00013 4.99701 4.99763 - 4.99742 4.99998 5.02836 5.07262 4.96856 4.57267 3.85637 - 2.79544 1.45942 0.408016 0.084885 0.0271375 0.0119294 0.00707546 - 0.0051087 0.00373035 0.00264737 0.00186477 0.00130379 0.000915857 - 0.000653121 0.000483893 0.000380852 0.000302362 0.000219498 - 0.000154435 0.000121928 0.000104026 8.61242e-05 7.48526e-05 - 6.49216e-05 5.56238e-05 5.29689e-05 5.03139e-05 4.7659e-05 - 4.5004e-05 4.23491e-05 4.00356e-05 3.79522e-05 3.58687e-05 - 3.37852e-05 3.17018e-05 2.97592e-05 2.89804e-05 2.82016e-05 - 2.74228e-05 2.66441e-05 2.58653e-05 2.50865e-05 2.43077e-05 - 2.35289e-05 2.27501e-05 2.19714e-05 2.12346e-05 2.07821e-05 - 2.03295e-05 1.98769e-05 1.94244e-05 1.89718e-05 1.85192e-05 - 1.80667e-05 1.76141e-05 1.71615e-05 1.6709e-05 1.62828e-05 - 1.60061e-05 1.57294e-05 1.54527e-05 1.5176e-05 1.48993e-05 - 1.46226e-05 1.43459e-05 1.40692e-05 1.37925e-05 1.35158e-05 - 1.3262e-05 1.31191e-05 1.29761e-05 1.28332e-05 1.26903e-05 - 1.25474e-05 1.24045e-05 1.22615e-05 1.21186e-05 1.19757e-05 - 1.18328e-05 1.16898e-05 1.15469e-05 1.1404e-05 1.12611e-05 - 1.11182e-05 1.09752e-05 1.08323e-05 1.06894e-05 1.05465e-05 - 1.04036e-05 1.02606e-05 1.00185e-05 3.8343e-05 -3.06781e-05 - -0.000111758 0.000111673 0.000130815 -0.000210491 -0.000231304 - 0.000310226 0.000265303 3.0878e-05 -4.48405e-05 -1.2852e-05 - -7.84469e-06 3.29986e-05 -1.23286e-05 -6.07871e-05 5.35082e-05 - 7.69194e-05 0.000126221 6.57178e-05 0.00223349 -0.0148854 - -0.0476636 -0.0491447 0.220125 1.11174 2.03988 2.90209 3.61069 - 4.13554 4.50679 4.71501 4.83916 4.91027 4.95284 4.98086 - 4.99151 4.98651 4.97113 4.95075 4.93102 4.93683 4.95457 - 4.97071 4.98212 4.98948 4.99386 4.99636 4.99785 4.9987 4.99927 - 4.99989 5.00014 5.00007 4.99988 4.99982 4.99976 4.99973 - 4.99972 4.99972 4.99973 4.99974 4.99975 4.99977 4.99979 - 4.99981 4.99984 4.99986 4.99988 4.99989 4.99991 4.99992 - 4.99993 4.99994 4.99995 4.99996 4.99996 4.99997 4.99997 - 4.99998 4.99998 4.99998 4.99998 4.99999 4.99999 4.99999 - 4.99999 5 5 5 5.00001 5.00001 5.00001 5.00002 5.00001 5.00001 - 5.00001 5.00001 5.00001 5 5 5 5 5 5 5 5 4.99999 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 - 4.99999 4.99999 4.99999 5 5.00012 4.99946 4.99839 4.99733 - 4.99948 5.00114 5.00158 5.00147 5.00113 5.00073 5.00043 - 5.0002 5.00006 4.99995 4.99986 4.99973 4.99976 4.9999 5.00029 - 5.00055 4.99704 4.99734 4.9972 5.00278 5.03354 5.07184 4.94057 - 4.51936 3.75638 2.60982 1.23803 0.315016 0.0796102 0.0252894 - 0.0165723 0.0827785 0.491298 1.40686 2.33436 3.1251 3.7691 - 4.22201 4.49976 4.68115 4.80513 4.88509 4.93208 4.95861 - 4.97579 4.98655 4.99268 4.99571 4.99771 4.99881 4.99929 - 4.99954 4.99965 4.9997 4.99971 4.99971 4.99971 4.99971 4.99972 - 4.99974 4.99976 4.99978 4.99981 4.99984 4.99987 4.99989 - 4.99991 4.99991 4.99992 4.99992 4.99993 4.99997 5.00003 - 5.00006 5.00004 5.00001 5 4.99999 4.99998 4.99998 4.99997 - 4.99997 4.99997 4.99998 4.99998 4.99998 4.99999 4.99999 - 4.99999 4.99999 5 5 5 5 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5 5 5 5 5 5 5 4.99999 - 4.99999 4.99999 4.99999 4.99998 4.99998 - EOD - - @v[34].set(<<-'EOD') - 5 5.00207 5.00813 5.01486 5.00156 5.0018 4.99861 4.99844 - 4.99888 4.9993 4.99956 4.99971 4.99979 4.99983 4.99987 4.99989 - 4.99671 4.9974 4.99864 5.00131 5.00377 5.0021 5.00039 4.99993 - 5.00004 5.0009 5.00109 4.99636 4.98617 4.96778 4.92047 4.89528 - 4.91112 4.9559 4.98286 4.99369 4.99812 4.99951 4.99994 5.00014 - 5.00008 4.99994 4.99984 4.99989 4.99998 5.00004 5.00004 - 5.00006 5.00005 5.00001 4.99997 4.99992 4.99993 4.99994 - 4.99996 4.99996 4.99996 4.99996 4.99996 4.99996 4.99996 - 4.99996 4.99996 4.99996 4.99996 4.99996 4.99996 4.99996 - 4.99997 4.99997 4.99997 4.99997 4.99997 4.99997 4.99997 - 4.99997 4.99997 4.99997 4.99997 4.99997 4.99997 4.99997 - 4.99997 4.99997 4.99997 4.99997 4.99997 4.99997 4.99997 - 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 - 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 - 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 - 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 - 4.99998 4.99998 4.99998 4.99998 5.00131 5.00072 4.9977 4.99811 - 5.00325 4.99647 4.98948 4.99459 5.00262 5.00276 5.00156 - 5.00072 5.0003 5.00013 4.99995 4.99668 4.99775 4.99917 5.00173 - 5.00386 5.00188 4.99888 4.99757 4.99951 5.01712 5.0557 5.07088 - 5.07704 5.07758 5.06958 5.04223 5.03331 5.0279 5.03408 5.07611 - 5.01911 4.68594 3.99152 2.92195 1.69878 0.809 0.344091 0.154663 - 0.0788717 0.0467212 0.0336168 0.0280514 0.0254947 0.024173 - 0.0223567 0.0220555 0.0271514 0.0295872 0.0296052 0.0283971 - 0.0264726 0.0241813 0.0218244 0.0195349 0.017368 0.0152495 - 0.013295 0.0115444 0.00996982 0.00857091 0.00733891 0.00627261 - 0.0053494 0.00456316 0.00388373 0.00331073 0.00282181 0.00240991 - 0.00206389 0.00177187 0.00152283 0.00131167 0.00112558 0.000954373 - 0.000805726 0.00069326 0.000600991 0.000525743 0.00047355 - 0.00044359 0.000434815 0.000436053 0.000402511 0.000368969 - 0.000335427 0.000301886 0.000268344 0.000234802 0.00020126 - 0.000184967 0.000169932 0.000154896 0.000139861 0.000124825 - 0.00010979 9.47546e-05 8.67896e-05 8.24901e-05 7.81906e-05 - 7.38911e-05 6.95915e-05 6.5292e-05 6.09925e-05 5.66929e-05 - 5.23934e-05 4.80939e-05 4.37943e-05 3.94948e-05 3.51953e-05 - 3.08957e-05 2.67968e-05 2.42936e-05 2.17904e-05 1.92872e-05 - 1.6784e-05 0.00125927 -0.00794344 -0.0305499 -0.0621697 - -0.0463796 -0.0224608 -0.00538381 0.00546086 0.0108675 0.012883 - 0.0131787 0.0127271 0.0119702 0.0110398 0.0100635 0.00649617 - 0.00489388 0.00545863 0.0098351 0.0167428 0.0126563 0.00697542 - 0.00427027 0.00330002 0.00390774 0.00408999 -0.00259143 - -0.0160578 -0.0451849 -0.0409651 0.1301 0.597429 1.3848 - 2.63426 3.81272 4.51373 4.8412 4.98731 4.88165 4.37165 3.40034 - 2.17681 1.12217 0.505129 0.219703 0.104992 0.0622333 0.0448317 - 0.0355782 0.0311867 0.0293529 0.0274615 0.0288739 0.0307845 - 0.0304909 0.029245 0.0273602 0.0251006 0.022697 0.0202765 - 0.0179357 0.0157106 0.0136562 0.0117951 0.0101273 0.00865784 - 0.00739394 0.00634364 0.00551356 0.00480538 0.00415747 0.00356084 - 0.00297585 0.00236711 0.00181853 0.00160713 0.00169822 0.00166542 - 0.00145504 0.00120252 0.00109259 0.000982658 0.00087273 - 0.000762802 0.000652874 0.000584068 0.000528263 0.000472458 - 0.000416653 0.000360848 0.000321155 0.000301442 0.000281729 - 0.000262016 0.000242303 0.00022259 0.000202877 0.000183164 - 0.000163451 0.000143738 0.000124025 0.000114582 0.000107399 - 0.000100216 9.30332e-05 8.58502e-05 7.86672e-05 7.14841e-05 - 6.43011e-05 5.7118e-05 4.9935e-05 4.35378e-05 4.04281e-05 - 3.73184e-05 3.42088e-05 3.10991e-05 2.79894e-05 2.48798e-05 - 2.17701e-05 1.86604e-05 - EOD - - @v[35].set(<<-'EOD') - 7.24585e-12 2.21843e-05 3.20014e-05 1.25076e-05 -2.44947e-05 - 1.8425e-05 5.50546e-06 3.53025e-05 -1.07551e-05 -3.94383e-06 - -2.27848e-06 -9.04789e-05 7.44215e-05 -2.7662e-05 0.000200038 - -2.11998e-05 -2.09011e-05 2.37098e-05 2.18751e-05 -2.28422e-05 - -6.23659e-05 3.58241e-05 1.76386e-05 -4.28311e-05 0.000355626 - 0.00156903 0.00100999 -0.0085304 -0.02067 -0.0389485 -0.0651568 - -0.128475 -0.314362 -0.406837 -0.421558 -0.421277 -0.418176 - -0.414481 -0.410845 -0.407348 -0.403971 -0.400716 -0.397582 - -0.394563 -0.391658 -0.388866 -0.386178 -0.383585 -0.381094 - -0.378789 -0.376569 -0.37435 -0.372256 -0.370188 -0.36815 - -0.366422 -0.364694 -0.362967 -0.361239 -0.359511 -0.357888 - -0.356334 -0.354781 -0.353227 -0.351674 -0.350152 -0.348888 - -0.347625 -0.346361 -0.345098 -0.343834 -0.342571 -0.341307 - -0.340044 -0.33878 -0.337517 -0.336279 -0.335215 -0.334152 - -0.333088 -0.332024 -0.330961 -0.329897 -0.328833 -0.32777 - -0.326706 -0.325642 -0.324601 -0.323683 -0.322766 -0.321849 - -0.320932 -0.320014 -0.319097 -0.31818 -0.317263 -0.316345 - -0.315428 -0.314545 -0.313825 -0.313106 -0.312387 -0.311667 - -0.310948 -0.310228 -0.309509 -0.308789 -0.30807 -0.307351 - -0.306631 -0.305912 -0.305192 -0.304473 -0.303754 -0.303034 - -0.302315 -0.301595 -0.300876 -0.300157 -0.299437 -0.298716 - -0.29798 -0.297329 -0.296691 -0.295837 -0.29516 -0.294725 - -0.294044 -0.292917 -0.292351 -0.291965 -0.291365 -0.290687 - -0.290027 -0.289376 -0.288772 -0.288193 -0.287505 -0.286892 - -0.28626 -0.285714 -0.284545 -0.289246 -0.298717 -0.298492 - -0.214163 0.181451 0.0749974 0.0454707 0.0292987 0.0196837 - 0.0124119 0.00884715 0.00527181 0.00585821 0.0296361 0.169856 - 0.361207 0.538856 0.67469 0.685933 0.392802 0.17772 0.0813085 - 0.0424601 0.0246654 0.0175258 0.0144256 0.0129859 0.012205 - 0.0112846 0.010933 0.0134813 0.0147254 0.0147981 0.0142156 - 0.0132732 0.0121355 0.0109587 0.00981238 0.00872731 0.00767007 - 0.00669346 0.00581341 0.00502167 0.00431819 0.00369842 0.00316168 - 0.00269663 0.00230035 0.00195801 0.00166928 0.00142286 0.00121522 - 0.00104072 0.000893384 0.000767675 0.000661268 0.000567659 - 0.000481766 0.000407101 0.000350044 0.000302721 0.000263424 - 0.000236813 0.00022199 0.000218182 0.000219548 0.0002027 - 0.000185853 0.000169006 0.000152158 0.000135311 0.000118463 - 0.000101616 9.33782e-05 8.57685e-05 7.81588e-05 7.0549e-05 - 6.29393e-05 5.53296e-05 4.77199e-05 4.36954e-05 4.15296e-05 - 3.93637e-05 3.71978e-05 3.50319e-05 3.28661e-05 3.07002e-05 - 2.85343e-05 2.63685e-05 2.42026e-05 2.20367e-05 1.98709e-05 - 1.7705e-05 1.55391e-05 1.34772e-05 1.22416e-05 1.10061e-05 - 9.77055e-06 8.535e-06 0.000631271 -0.00362586 -0.0146235 - -0.0308486 -0.0237466 -0.0117522 -0.00304171 0.00251033 - 0.00531986 0.0063897 0.00657351 0.00636494 0.00599705 0.00553442 - 0.00505994 0.00330925 0.00246671 0.0027006 0.00473161 0.00830333 - 0.00649147 0.00356815 0.00217448 0.00187579 0.00270447 0.00219543 - -0.00546118 -0.0179576 -0.0445306 -0.0649309 0.0197935 0.473629 - 0.87268 0.269542 0.0086094 0.0844602 0.606456 1.04929 0.906014 - 0.916205 0.919425 0.872867 0.556244 0.262457 0.11838 0.0571226 - 0.0333451 0.0237133 0.0185096 0.0159617 0.0148663 0.0138683 - 0.0144081 0.0153797 0.0152551 0.0146487 0.0137192 0.0125973 - 0.0113996 0.0101903 0.00901851 0.00790495 0.00687502 0.00593994 - 0.00510092 0.00436111 0.00372439 0.0031945 0.00277537 0.00241888 - 0.002095 0.00179943 0.00150419 0.00119264 0.00090934 0.000802394 - 0.000852816 0.000838368 0.000730842 0.000601028 0.000546616 - 0.000492205 0.000437793 0.000383381 0.000328969 0.00029454 - 0.000266428 0.000238317 0.000210205 0.000182093 0.000162091 - 0.000152145 0.000142198 0.000132252 0.000122306 0.000112359 - 0.000102413 9.24665e-05 8.25201e-05 7.25738e-05 6.26274e-05 - 5.78553e-05 5.42216e-05 5.05878e-05 4.69541e-05 4.33204e-05 - 3.96867e-05 3.60529e-05 3.24192e-05 2.87855e-05 2.51518e-05 - 2.19153e-05 2.03406e-05 1.8766e-05 1.71913e-05 1.56167e-05 - 1.4042e-05 1.24674e-05 1.08927e-05 9.31806e-06 - EOD - - @v[36].set(<<-'EOD') - 5 5.01426 5.02852 5.01923 4.77685 4.56471 4.52338 4.56813 - 4.63122 4.693 4.74776 4.79385 4.83258 4.86358 4.88918 4.91021 - 4.90553 4.89733 4.89554 4.91953 5.00757 5.07101 5.06318 - 5.05241 5.05535 5.08042 5.07251 4.90973 4.56136 3.98637 - 3.237 2.67216 2.33678 2.13529 2.00544 1.91429 1.84638 1.79461 - 1.75338 1.71958 1.69175 1.6686 1.64918 1.63258 1.61836 1.60607 - 1.59506 1.58483 1.57575 1.56847 1.56193 1.55538 1.54968 - 1.54416 1.5388 1.53523 1.53165 1.52807 1.52449 1.52091 1.51771 - 1.51477 1.51182 1.50888 1.50593 1.50309 1.50113 1.49917 - 1.4972 1.49524 1.49328 1.49132 1.48935 1.48739 1.48543 1.48346 - 1.48157 1.48012 1.47868 1.47724 1.47579 1.47435 1.47291 - 1.47146 1.47002 1.46857 1.46713 1.46574 1.46462 1.4635 1.46238 - 1.46126 1.46014 1.45902 1.4579 1.45678 1.45567 1.45455 1.45349 - 1.45275 1.45201 1.45127 1.45053 1.44979 1.44905 1.44831 - 1.44757 1.44683 1.44609 1.44535 1.44461 1.44387 1.44313 - 1.44239 1.44165 1.44091 1.44017 1.43943 1.43869 1.43795 - 1.43721 1.43874 1.43976 1.43619 1.43182 1.43726 1.43084 - 1.42587 1.42383 1.42642 1.42728 1.42736 1.4271 1.42669 1.42621 - 1.42569 1.41703 1.41244 1.41019 1.41199 1.41833 1.42502 - 1.41504 1.37535 1.28381 1.44779 2.33713 3.25835 3.67554 - 3.84975 4.01125 4.2253 4.45433 4.62215 4.74478 4.82998 4.8868 - 4.92396 4.94768 4.96498 4.98537 5.0128 5.04467 5.06722 5.06535 - 5.01475 4.91956 4.80647 4.7242 4.7059 4.73552 4.76379 4.81684 - 4.87376 4.92276 4.96112 4.9884 5.0045 5.00999 5.00933 5.00619 - 5.00384 5.00342 5.00373 5.00362 5.00309 5.00272 5.00239 - 5.00204 5.00172 5.00146 5.00124 5.00105 5.00089 5.00076 - 5.00065 5.00057 5.00048 5.00041 5.00034 5.00028 5.00023 - 5.00019 5.00015 5.00015 5.00016 5.0002 5.00023 5.00021 5.00019 - 5.00017 5.00015 5.00012 5.0001 5.00008 5.00007 5.00006 5.00005 - 5.00004 5.00003 5.00002 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00002 5.00002 5.00002 5.00002 - 5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 5.00001 - 5.00001 5.00001 5.00062 4.99506 4.9835 4.96726 4.9728 4.97877 - 4.98675 4.9966 5.00406 5.00679 5.00629 5.00561 5.00487 5.00429 - 5.00384 5.002 5.00164 5.00229 5.00484 5.00769 5.00019 5.00242 - 5.01319 5.0335 5.07265 5.10129 5.11485 5.12551 5.13953 5.16048 - 5.18862 5.22811 5.25656 5.25627 5.19975 4.9139 4.24745 3.43732 - 2.8202 2.43224 2.17409 2.01333 1.93951 1.94622 1.98861 2.02217 - 2.05383 2.08376 2.11184 2.13793 2.16191 2.18267 2.20502 - 2.22837 2.24958 2.26901 2.28648 2.302 2.31582 2.32802 2.33869 - 2.34795 2.35596 2.36282 2.3687 2.37371 2.37797 2.38161 2.38476 - 2.38743 2.3897 2.39168 2.39329 2.39463 2.39575 2.39671 2.39756 - 2.39835 2.39907 2.39968 2.39999 2.4003 2.40061 2.40091 2.40122 - 2.40142 2.40159 2.40176 2.40193 2.4021 2.40222 2.40228 2.40234 - 2.4024 2.40247 2.40253 2.40259 2.40265 2.40271 2.40277 2.40284 - 2.40287 2.40289 2.40291 2.40294 2.40296 2.40298 2.40301 - 2.40303 2.40305 2.40308 2.4031 2.40311 2.40312 2.40313 2.40314 - 2.40315 2.40316 2.40317 2.40318 - EOD - - @v[37].set(<<-'EOD') - 5 5.01732 5.03181 5.05944 5.12686 5.20725 5.28103 5.31254 - 5.32901 5.33709 5.3408 5.34257 5.34311 5.34347 5.34386 5.34411 - 5.3406 5.33484 5.32942 5.32904 5.33644 5.34869 5.35001 5.34882 - 5.34758 5.34672 5.34599 5.34496 5.34364 5.34165 5.33712 - 5.33502 5.3366 5.34067 5.34306 5.34398 5.34434 5.34442 5.34443 - 5.34443 5.34441 5.34439 5.34437 5.34437 5.34438 5.34438 - 5.34438 5.34438 5.34438 5.34437 5.34437 5.34436 5.34436 - 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 - 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 - 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 - 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 - 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 - 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 - 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 - 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 - 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 - 5.34437 5.34437 5.34437 5.34437 5.34437 5.35377 5.35451 - 5.34265 5.34488 5.35861 5.28622 4.90033 4.75027 4.89731 - 4.97098 4.99293 4.99832 4.99909 4.99956 4.99858 4.99829 - 4.9998 5.00035 5.0038 5.00989 5.00251 4.99438 4.9953 4.99761 - 4.99985 5.00152 5.0011 5.00046 4.99996 4.99925 4.99862 4.99919 - 4.99961 5.00048 5.00234 4.99654 4.98235 4.95936 4.83738 - 4.53021 4.21004 4.00593 3.91207 3.88059 3.87822 3.89117 - 3.91278 3.94044 3.97376 4.01152 4.05052 4.10679 4.17908 - 4.25673 4.33414 4.40875 4.47879 4.54342 4.60258 4.65595 - 4.70291 4.74414 4.78018 4.81185 4.83915 4.86291 4.88301 - 4.90048 4.91528 4.92802 4.9387 4.94777 4.95539 4.9618 4.96725 - 4.97195 4.97588 4.97932 4.98247 4.98512 4.98697 4.98831 - 4.98919 4.99015 4.99101 4.99169 4.99222 4.99282 4.99341 - 4.994 4.9946 4.99519 4.99578 4.99638 4.99667 4.99693 4.9972 - 4.99747 4.99773 4.998 4.99827 4.99841 4.99849 4.99856 4.99864 - 4.99872 4.9988 4.99888 4.99896 4.99904 4.99911 4.99919 4.99927 - 4.99935 4.99943 4.9995 4.99955 4.9996 4.99965 4.9997 5.00736 - 4.98252 4.87516 4.66727 4.49142 4.43103 4.4301 4.4571 4.49729 - 4.5407 4.5835 4.62363 4.66114 4.69577 4.72738 4.74632 4.75971 - 4.77576 4.80671 4.87073 4.91665 4.93252 4.94418 4.95331 - 4.96094 4.96727 4.97148 4.97471 4.97612 4.98276 5.00247 - 5.04086 5.08628 5.10673 5.08887 5.0564 5.02767 5.01336 4.99685 - 4.97422 4.90866 4.67035 4.33117 4.07888 3.94432 3.89105 - 3.88174 3.89292 3.91442 3.94564 3.98708 4.0355 4.09134 4.16315 - 4.24088 4.31918 4.39527 4.46693 4.53337 4.59405 4.6486 4.69693 - 4.73938 4.77617 4.80809 4.83551 4.85895 4.87894 4.89596 - 4.91081 4.92417 4.93651 4.94552 4.95198 4.9565 4.96096 4.96523 - 4.96972 4.97428 4.97868 4.98064 4.9826 4.98455 4.98651 4.98847 - 4.98967 4.99064 4.9916 4.99257 4.99353 4.99422 4.99457 4.99493 - 4.99528 4.99563 4.99598 4.99633 4.99668 4.99703 4.99738 - 4.99773 4.9979 4.99804 4.99817 4.9983 4.99843 4.99856 4.99869 - 4.99883 4.99896 4.99909 4.99921 4.99926 4.99931 4.99937 - 4.99942 4.99948 4.99953 4.99959 4.99964 - EOD - - @v[38].set(<<-'EOD') - 4.49849 4.53282 4.58329 4.66625 4.83345 4.97823 5.0207 5.01816 - 5.01116 5.00595 5.00296 5.00148 5.00073 5.00062 5.00033 - 5.0003 4.99864 4.99661 4.99652 4.99928 5.00361 5.12573 5.17251 - 5.22612 5.33479 5.44503 5.44432 5.44379 5.44334 5.443 5.44276 - 5.44258 5.44246 5.44238 5.44232 5.44228 5.44225 5.44223 - 5.44221 5.4422 5.44219 5.44219 5.44218 5.44218 5.44218 5.44218 - 5.44217 5.44217 5.44217 5.44217 5.44217 5.44217 5.44217 - 5.44217 5.44217 5.44217 5.44217 5.44217 5.44217 5.44217 - 5.44217 5.44217 5.44217 5.44217 5.44217 5.44217 5.44216 - 5.44216 5.44216 5.44216 5.44216 5.44216 5.44216 5.44216 - 5.44216 5.44216 5.44216 5.44216 5.44216 5.44216 5.44216 - 5.44216 5.44216 5.44216 5.44216 5.44215 5.44215 5.44215 - 5.44215 5.44215 5.44215 5.44215 5.44215 5.44215 5.44215 - 5.44215 5.44215 5.44215 5.44215 5.44215 5.44215 5.44215 - 5.44215 5.44215 5.44215 5.44215 5.44215 5.44215 5.44215 - 5.44214 5.44214 5.44214 5.44214 5.44214 5.44214 5.44214 - 5.44214 5.44214 5.44214 5.44214 5.44212 5.45159 5.45236 - 5.44064 5.44307 5.45616 5.38122 4.77163 3.53297 2.74466 - 2.34448 2.11802 1.9783 1.88656 1.82001 1.77389 1.72955 1.69632 - 1.66971 1.6526 1.65236 1.56034 1.53764 1.97139 2.75096 3.39212 - 3.74042 3.82345 3.85696 3.88547 3.91862 3.9585 4.00467 4.05903 - 4.1254 4.19533 4.26791 4.34517 4.42112 4.49238 4.55807 4.6179 - 4.6713 4.71815 4.75889 4.79418 4.82456 4.85062 4.87291 4.89196 - 4.90823 4.92209 4.93388 4.9439 4.95242 4.95968 4.96585 4.97108 - 4.9755 4.97923 4.98237 4.98503 4.98732 4.98927 4.99094 4.99233 - 4.99353 4.99452 4.99538 4.99608 4.99668 4.99718 4.9976 4.99794 - 4.99822 4.99847 4.99867 4.99884 4.99899 4.99913 4.99924 - 4.99932 4.99938 4.99943 4.99947 4.99951 4.99953 4.99955 - 4.99958 4.99961 4.99964 4.99967 4.99969 4.99972 4.99975 - 4.99977 4.99978 4.99979 4.99981 4.99982 4.99983 4.99985 - 4.99986 4.99986 4.99987 4.99987 4.99988 4.99988 4.99988 - 4.99989 4.99989 4.9999 4.9999 4.99991 4.99991 4.99992 4.99992 - 4.99993 4.99993 4.99993 4.99994 5.00381 5.00064 4.99246 - 4.99823 5.00349 5.00076 5.00033 5.00015 5.00009 5.00007 - 5.00005 5.00004 5.00003 5.00002 4.99988 4.99732 4.99728 - 4.9978 5.00187 5.00927 5.08712 5.07654 4.92855 4.4863 3.76162 - 3.00049 2.49834 2.20883 2.03492 1.92384 1.84676 1.79021 - 1.74716 1.7132 1.68576 1.66309 1.64406 1.62785 1.61383 1.60162 - 1.59081 1.58117 1.57253 1.56473 1.55765 1.55117 1.54527 - 1.53988 1.53485 1.53012 1.5257 1.5216 1.51773 1.51411 1.51071 - 1.50746 1.50438 1.50146 1.49868 1.49603 1.4935 1.49109 1.48878 - 1.48657 1.48445 1.48242 1.48046 1.47858 1.47677 1.47502 - 1.47333 1.4717 1.47012 1.46859 1.46711 1.46568 1.46428 1.46292 - 1.4616 1.46034 1.45923 1.45812 1.45701 1.4559 1.45479 1.45378 - 1.45279 1.45181 1.45082 1.44983 1.44893 1.44813 1.44732 - 1.44652 1.44571 1.44491 1.4441 1.4433 1.44249 1.44169 1.44089 - 1.44019 1.43951 1.43883 1.43815 1.43747 1.4368 1.43612 1.43544 - 1.43476 1.43408 1.43342 1.43283 1.43223 1.43163 1.43104 - 1.43044 1.42984 1.42924 1.42865 - EOD - - @v[39].set(<<-'EOD') - 5 5.01048 5.01221 4.98887 4.76261 4.54943 4.51564 4.56249 - 4.62621 4.68843 4.74374 4.79044 4.82972 4.86127 4.88724 - 4.90862 4.90791 4.89858 4.89589 4.91767 5.00405 5.16956 - 5.12391 4.7557 3.87953 3.01124 2.48482 2.20424 2.03812 1.92679 - 1.84956 1.79256 1.74907 1.71487 1.68724 1.6644 1.64513 1.6287 - 1.61446 1.60197 1.59095 1.58117 1.57245 1.5646 1.55752 1.55109 - 1.54516 1.53958 1.53444 1.53008 1.52606 1.52205 1.51843 - 1.5149 1.51146 1.50893 1.50639 1.50387 1.50133 1.4988 1.49651 - 1.49436 1.49222 1.49007 1.48793 1.48585 1.48433 1.4828 1.48128 - 1.47975 1.47823 1.4767 1.47518 1.47365 1.47213 1.4706 1.46912 - 1.46795 1.46678 1.46561 1.46444 1.46327 1.4621 1.46093 1.45976 - 1.45859 1.45741 1.45628 1.45534 1.45441 1.45347 1.45254 - 1.4516 1.45067 1.44973 1.4488 1.44786 1.44693 1.44604 1.44539 - 1.44475 1.4441 1.44345 1.44281 1.44216 1.44151 1.44086 1.44022 - 1.43957 1.43892 1.43828 1.43763 1.43698 1.43633 1.43569 - 1.43504 1.43439 1.43375 1.4331 1.43245 1.4318 1.43157 1.43089 - 1.43001 1.43042 1.42899 1.42439 1.42216 1.43447 1.44048 - 1.43705 1.43314 1.43039 1.42861 1.42739 1.42651 1.42548 - 1.42488 1.4243 1.42392 1.4235 1.32443 1.31149 1.78169 2.64844 - 3.43211 3.95252 4.20231 4.3746 4.49948 4.58929 4.65742 4.71183 - 4.77057 4.83196 4.88354 4.92894 4.96625 4.99235 5.00651 - 5.00941 5.00813 5.00689 5.00588 5.00504 5.00431 5.00368 - 5.00314 5.00268 5.00228 5.00194 5.00165 5.0014 5.00118 5.001 - 5.00085 5.00072 5.00061 5.00052 5.00044 5.00037 5.00031 - 5.00027 5.00022 5.00019 5.00016 5.00013 5.00011 5.00009 - 5.00008 5.00007 5.00006 5.00005 5.00004 5.00003 5.00003 - 5.00003 5.00002 5.00002 5.00002 5.00001 5.00001 5.00001 - 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 - 5.00001 5.00001 5 5 5 5 5 4.99999 4.99999 4.99999 4.99998 - 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99999 - 4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 5.00001 - 5.00002 5.00003 5.00004 5.00022 4.99974 4.99942 4.99997 - 5.00063 5.00002 5.00003 4.99994 4.99998 4.99999 5 5 5 5 - 5 4.99981 4.99998 5.00004 5.00036 5.00049 5.12012 5.16315 - 5.19712 5.21835 4.87874 4.10151 3.31555 2.74207 2.38075 - 2.15872 2.01614 1.91886 1.84852 1.79401 1.75052 1.71508 - 1.68672 1.66467 1.64602 1.62985 1.61576 1.60343 1.59256 - 1.58287 1.57418 1.56632 1.55922 1.55282 1.54687 1.54132 - 1.53618 1.53143 1.52698 1.52282 1.51895 1.51527 1.5118 1.50851 - 1.5054 1.50244 1.49963 1.49695 1.4944 1.49196 1.48963 1.4874 - 1.48527 1.48322 1.48124 1.47934 1.47751 1.47574 1.47403 - 1.47239 1.4708 1.46926 1.46777 1.46632 1.46491 1.46355 1.46237 - 1.4612 1.46002 1.45884 1.45766 1.45659 1.45555 1.45451 1.45346 - 1.45242 1.45147 1.45062 1.44978 1.44894 1.44809 1.44725 - 1.4464 1.44556 1.44472 1.44387 1.44303 1.4423 1.44159 1.44088 - 1.44017 1.43947 1.43876 1.43805 1.43734 1.43664 1.43593 - 1.43524 1.43462 1.434 1.43338 1.43276 1.43213 1.43151 1.43089 - 1.43027 - EOD - end - - def highlightTrace(graph) - entry = graph.legend_get(:current) - active_list = graph.legend_activate - if active_list.include?(entry) - graph.legend_deactivate(entry) - graph.element_deactivate(entry) - else - graph.legend_activate(entry) - graph.element_activate(entry) - end - end - -end - -BLT_Graph_Demo.new - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/blt/graph7.rb b/ext/tk/sample/tkextlib/blt/graph7.rb deleted file mode 100644 index 0e68388596..0000000000 --- a/ext/tk/sample/tkextlib/blt/graph7.rb +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/blt' - -length = 250000 -graph = Tk::BLT::Graph.new(:title=>"Scatter Plot\n#{length} points") -graph.xaxis_configure(:loose=>false, :title=>'X Axis Label') -graph.yaxis_configure(:title=>'Y Axis Label') -graph.legend_configure(:activerelief=>:sunken, :background=>'') - -Tk::BLT::Table.add(Tk.root, graph, [0,0], :fill=>:both) - -v_x = Tk::BLT::Vector.new(length) -v_y = Tk::BLT::Vector.new(length) -v_x.expr("random(#{v_x})") -v_y.expr("random(#{v_y})") -v_x.sort(v_y) - -plot = Tk::BLT::PlotComponent::Element.new(graph, :symbol=>:square, - :color=>'green4', :fill=>'green2', - :linewidth=>0, :outlinewidth=>1, - :pixels=>4, :label=>'plot', - :xdata=>v_x, :ydata=>v_y) - -Tk.root.minsize(0, 0) - -#graph.zoom_stack -#graph.crosshairs -#graph.active_legend -#graph.closest_point -Tk::BLT.zoom_stack(graph) -Tk::BLT.crosshairs(graph) -Tk::BLT.active_legend(graph) -Tk::BLT.closest_point(graph) - -Tk::BLT::Busy.hold(graph) -Tk.update -Tk::BLT::Busy.release(graph) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/blt/graph7a.rb b/ext/tk/sample/tkextlib/blt/graph7a.rb deleted file mode 100644 index aa744f1f74..0000000000 --- a/ext/tk/sample/tkextlib/blt/graph7a.rb +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/blt' - -file = File.join(File.dirname(File.expand_path(__FILE__)), - 'images', 'buckskin.gif') -bgTexture = TkPhotoImage.new(:file=>file) - -TkOption.add('*Graph.Tile', bgTexture) -TkOption.add('*Label.Tile', bgTexture) -TkOption.add('*Frame.Tile', bgTexture) -TkOption.add('*Htext.Tile', bgTexture) -TkOption.add('*TileOffset', 0) -TkOption.add('*HighlightThickness', 0) -TkOption.add('*Element.ScaleSybols', false) -TkOption.add('*Element.Smooth', :linear) -TkOption.add('*activeLine.Color', 'yellow4') -TkOption.add('*activeLine.Fill', 'yellow') -TkOption.add('*activeLine.LineWidth', 0) -TkOption.add('*Element.Pixels', 3) -TkOption.add('*Graph.halo', '7i') - -if Tk.root.winfo_screenvisual != 'staticgray' - TkOption.add('*print.background', 'yellow') - TkOption.add('*quit.background', 'red') -end - -length = 250000 -graph = Tk::BLT::Graph.new(:title=>"Scatter Plot\n#{length} points") -graph.xaxis_configure(:loose=>false, :title=>'X Axis Label') -graph.yaxis_configure(:title=>'Y Axis Label') -graph.legend_configure(:activerelief=>:sunken, :background=>'') - -Tk::BLT::Table.add(Tk.root, graph, [0,0], :fill=>:both) - -v_x = Tk::BLT::Vector.new(length) -v_y = Tk::BLT::Vector.new(length) -v_x.expr("random(#{v_x})") -v_y.expr("random(#{v_y})") -v_x.sort(v_y) - -plot = Tk::BLT::PlotComponent::Element.new(graph, :symbol=>:square, - :color=>'green4', :fill=>'green2', - :linewidth=>0, :outlinewidth=>1, - :pixels=>4, :label=>'plot', - :xdata=>v_x, :ydata=>v_y) - -Tk.root.minsize(0, 0) - -#graph.zoom_stack -#graph.crosshairs -#graph.active_legend -#graph.closest_point -Tk::BLT.zoom_stack(graph) -Tk::BLT.crosshairs(graph) -Tk::BLT.active_legend(graph) -Tk::BLT.closest_point(graph) - -Tk::BLT::Busy.hold(graph) -Tk.update -Tk::BLT::Busy.release(graph) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/blt/graph7b.rb b/ext/tk/sample/tkextlib/blt/graph7b.rb deleted file mode 100644 index 5b30c4bac0..0000000000 --- a/ext/tk/sample/tkextlib/blt/graph7b.rb +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/blt' - -length = 250000 -graph = Tk::BLT::Graph.new(:title=>"Scatter Plot\n#{length} points") -graph.xaxis_configure(:loose=>false, :title=>'X Axis Label') -graph.yaxis_configure(:title=>'Y Axis Label') -graph.legend_configure(:activerelief=>:sunken, :background=>'') - -Tk::BLT::Table.add(Tk.root, graph, [0,0], :fill=>:both) - -x = Array.new(length) -y = Array.new(length) -(0...length).each{|i| - x[i] = rand - y[i] = rand -} - -plot = Tk::BLT::PlotComponent::Element.new(graph, :symbol=>:square, - :color=>'green4', :fill=>'green2', - :linewidth=>0, :outlinewidth=>1, - :pixels=>4, :label=>'plot', - :xdata=>x, :ydata=>y) - -Tk.root.minsize(0, 0) - -#graph.zoom_stack -#graph.crosshairs -#graph.active_legend -#graph.closest_point -Tk::BLT.zoom_stack(graph) -Tk::BLT.crosshairs(graph) -Tk::BLT.active_legend(graph) -Tk::BLT.closest_point(graph) - -Tk::BLT::Busy.hold(graph) -Tk.update -Tk::BLT::Busy.release(graph) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/blt/graph7c.rb b/ext/tk/sample/tkextlib/blt/graph7c.rb deleted file mode 100644 index 8cbf3223f1..0000000000 --- a/ext/tk/sample/tkextlib/blt/graph7c.rb +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/blt' - -length = 250000 -graph = Tk::BLT::Graph.new(:title=>"Scatter Plot\n#{length} points") -graph.xaxis_configure(:loose=>false, :title=>'X Axis Label') -graph.yaxis_configure(:title=>'Y Axis Label') -graph.legend_configure(:activerelief=>:sunken, :background=>'') - -Tk::BLT::Table.add(Tk.root, graph, [0,0], :fill=>:both) - -v_x = Tk::BLT::Vector.new(length) -v_y = Tk::BLT::Vector.new(length) -x = Array.new(length) -y = Array.new(length) -(0...length).each{|i| - x[i] = rand - y[i] = rand -} -v_x.set(x) -v_y.set(y) - -plot = Tk::BLT::PlotComponent::Element.new(graph, :symbol=>:square, - :color=>'green4', :fill=>'green2', - :linewidth=>0, :outlinewidth=>1, - :pixels=>4, :label=>'plot', - :xdata=>v_x, :ydata=>v_y) - -Tk.root.minsize(0, 0) - -#graph.zoom_stack -#graph.crosshairs -#graph.active_legend -#graph.closest_point -Tk::BLT.zoom_stack(graph) -Tk::BLT.crosshairs(graph) -Tk::BLT.active_legend(graph) -Tk::BLT.closest_point(graph) - -Tk::BLT::Busy.hold(graph) -Tk.update -Tk::BLT::Busy.release(graph) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/blt/images/buckskin.gif b/ext/tk/sample/tkextlib/blt/images/buckskin.gif deleted file mode 100644 index e2d7be9d62..0000000000 Binary files a/ext/tk/sample/tkextlib/blt/images/buckskin.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/blt/images/chalk.gif b/ext/tk/sample/tkextlib/blt/images/chalk.gif deleted file mode 100644 index 30d29a7221..0000000000 Binary files a/ext/tk/sample/tkextlib/blt/images/chalk.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/blt/images/qv100.t.gif b/ext/tk/sample/tkextlib/blt/images/qv100.t.gif deleted file mode 100644 index 1e738ee86b..0000000000 Binary files a/ext/tk/sample/tkextlib/blt/images/qv100.t.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/blt/images/rain.gif b/ext/tk/sample/tkextlib/blt/images/rain.gif deleted file mode 100644 index d7bb417939..0000000000 Binary files a/ext/tk/sample/tkextlib/blt/images/rain.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/blt/images/sample.gif b/ext/tk/sample/tkextlib/blt/images/sample.gif deleted file mode 100644 index 1d8a4010c3..0000000000 Binary files a/ext/tk/sample/tkextlib/blt/images/sample.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/blt/pareto.rb b/ext/tk/sample/tkextlib/blt/pareto.rb deleted file mode 100644 index e68cde7992..0000000000 --- a/ext/tk/sample/tkextlib/blt/pareto.rb +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false - -require 'tk' -require 'tkextlib/blt' - -# Example of a pareto chart. -# -# The pareto chart mixes line and bar elements in the same graph. -# Each processing operating is represented by a bar element. The -# total accumulated defects is displayed with a single line element. -b = Tk::BLT::Barchart.new(:title=>'Defects Found During Inspection', - :font=>'Helvetica 12', :plotpady=>[12, 4], - :width=>'6i', :height=>'5i') -Tk::BLT::Table.add(Tk.root, b, :fill=>:both) - -data = [ - ["Spot Weld", 82, 'yellow'], - ["Lathe", 49, 'orange'], - ["Gear Cut", 38, 'green'], - ["Drill", 24, 'blue'], - ["Grind", 17, 'red'], - ["Lapping", 12, 'brown'], - ["Press", 8, 'purple'], - ["De-burr", 4, 'pink'], - ["Packaging", 3, 'cyan'], - ["Other", 12, 'magenta'] -] - -# Create an X-Y graph line element to trace the accumulated defects. -b.line_create('accum', :label=>'', :symbol=>:none, :color=>'red') - -# Define a bitmap to be used to stipple the background of each bar. -pattern1 = Tk::BLT::Bitmap.define([ [4, 4], [1, 2, 4, 8] ]) - -# For each process, create a bar element to display the magnitude. -count = 0 -sum = 0 -ydata = [0] -xdata = [0] -labels = [] - -data.each{|label, value, color| - count += 1 - b.element_create(label, :xdata=>count, :ydata=>value, :foreground=>color, - :relief=>:solid, :borderwidth=>1, :stipple=>pattern1, - :background=>'lightblue') - labels[count] = label - # Get the total number of defects. - sum += value - ydata << sum - xdata << count -} - -# Configure the coordinates of the accumulated defects, -# now that we know what they are. -b.element_configure('accum', :xdata=>xdata, :ydata=>ydata) - -# Add text markers to label the percentage of total at each point. -xdata.zip(ydata){|x, y| - percent = (y * 100.0) / sum - if x == 0 - text = ' 0%' - else - text = '%.1f' % percent - end - b.marker_create(:text, :coords=>[x, y], :text=>text, :font=>'Helvetica 10', - :foreground=>'red4', :anchor=>:center, :yoffset=>-5) -} - -# Display an auxiliary y-axis for percentages. -b.axis_configure('y2', :hide=>false, :min=>0.0, :max=>100.0, - :title=>'Percentage') - -# Title the y-axis -b.axis_configure('y', :title=>'Defects') - -# Configure the x-axis to display the process names, instead of numbers. -b.axis_configure('x', :title=>'Process', :rotate=>90, :subdivisions=>0, - :command=>proc{|w, val| - val = val.round - labels[val]? labels[val]: val - }) - -# No legend needed. -b.legend_configure(:hide=>true) - -# Configure the grid lines. -b.gridline_configure(:mapx=>:x, :color=>'lightblue') - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/blt/plot1.rb b/ext/tk/sample/tkextlib/blt/plot1.rb deleted file mode 100644 index 95797c96b7..0000000000 --- a/ext/tk/sample/tkextlib/blt/plot1.rb +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/blt' - -graph = Tk::BLT::Graph.new.pack -plot = Tk::BLT::PlotComponent::Element.new(graph, :linewidth=>0, :label=>'foo') -plot.data([[1.0, 3.4], [1.1, 2.8], [1.2, 3.1], [1.4, 2.9]].flatten) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/blt/plot1b.rb b/ext/tk/sample/tkextlib/blt/plot1b.rb deleted file mode 100644 index 96adbd792b..0000000000 --- a/ext/tk/sample/tkextlib/blt/plot1b.rb +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/blt' - -graph = Tk::BLT::Graph.new.pack -plot = graph.element_create -plot.configure(:linewidth=>0, :label=>'foo', - :data=>[[1.0, 3.4], [1.1, 2.8], [1.2, 3.1], [1.4, 2.9]].flatten) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/blt/readme.txt b/ext/tk/sample/tkextlib/blt/readme.txt deleted file mode 100644 index 8ac1044b0b..0000000000 --- a/ext/tk/sample/tkextlib/blt/readme.txt +++ /dev/null @@ -1,2 +0,0 @@ -The scripts and image files in this directory are based on demo files -of Tcl/Tk's BLT extension. diff --git a/ext/tk/sample/tkextlib/blt/scripts/stipples.rb b/ext/tk/sample/tkextlib/blt/scripts/stipples.rb deleted file mode 100644 index 2a4943e032..0000000000 --- a/ext/tk/sample/tkextlib/blt/scripts/stipples.rb +++ /dev/null @@ -1,157 +0,0 @@ -# frozen_string_literal: false -$stipples = {} unless $stipples - -$stipples['bdiagonal1'] = Tk::BLT::Bitmap.new(<file) -else - fail RuntimeError, 'no image file' -end - -width = src.width -height = src.height - -TkOption.add('*Label.font', '*helvetica*10*') -TkOption.add('*Label.background', 'white') - -l_img0 = TkLabel.new(:image=>src) -l_hdr0 = TkLabel.new(:text=>"#{width} x #{height}") -l_ftr0 = TkLabel.new(:text=>'100%') -Tk.root.background('white') - -(2..10).each{|i| - iw = width/i - ih = height/i - r = '%6g'%(100.0/i) - dst = TkPhotoImage.new(:width=>iw, :height=>ih) - Tk::BLT::Winop.image_resample(src, dst, :sinc) - l_hdr = TkLabel.new(:text=>"#{iw} x #{ih}") - l_ftr = TkLabel.new(:text=>"#{r}%") - l_img = TkLabel.new(:image=>dst) - Tk::BLT::Table.add(Tk.root, - [0,i], l_hdr, - [1,i], l_img, - [2,i], l_ftr) - Tk.update -} - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/blt/winop2.rb b/ext/tk/sample/tkextlib/blt/winop2.rb deleted file mode 100644 index cc708573ab..0000000000 --- a/ext/tk/sample/tkextlib/blt/winop2.rb +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/blt' - -file = File.join(File.dirname(File.expand_path(__FILE__)), - 'images', 'qv100.t.gif') -if File.exist?(file) - src = TkPhotoImage.new(:file=>file) -else - fail RuntimeError, 'no image file' -end - -width = src.width -height = src.height - -TkOption.add('*Label.font', '*helvetica*10*') -TkOption.add('*Label.background', 'white') - -[0, 90, 180, 270, 360, 45].each_with_index{|r, i| - dest = TkPhotoImage.new - Tk::BLT::Winop.image_rotate(src, dest, r) - l_txt = TkLabel.new(:text=>"#{r} degrees") - l_img = TkLabel.new(:image=>dest) - Tk::BLT::Table.add(Tk.root, [0,i], l_img, [1,i], l_txt) - Tk.update -} - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt b/ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt deleted file mode 100644 index 16ddca4e3c..0000000000 --- a/ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt +++ /dev/null @@ -1,53 +0,0 @@ - - ###################################################################### - ### The following text is the original 'LICENSE.txt' of BWidget ### - ### extension. ### - ### Original Tcl source files are not include in this directory, ### - ### because of all of them are rewritten to Ruby files. ### - ### However, the bitmap data files ('bwidgtet.xbm' and 'x1.xbm') ### - ### included in this directory are quoted from BWidget source ### - ### archive. So, those bitmaps are under the following license. ### - ###################################################################### - - -BWidget ToolKit -Copyright (c) 1998-1999 UNIFIX. -Copyright (c) 2001-2002 ActiveState Corp. - -The following terms apply to all files associated with the software -unless explicitly disclaimed in individual files. - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - -GOVERNMENT USE: If you are acquiring this software on behalf of the -U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal -Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you -are acquiring the software on behalf of the Department of Defense, the -software shall be classified as "Commercial Computer Software" and the -Government shall have only "Restricted Rights" as defined in Clause -252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the -authors grant the U.S. Government and others acting in its behalf -permission to use and distribute the software in accordance with the -terms specified in this license. diff --git a/ext/tk/sample/tkextlib/bwidget/basic.rb b/ext/tk/sample/tkextlib/bwidget/basic.rb deleted file mode 100644 index 11122ac941..0000000000 --- a/ext/tk/sample/tkextlib/bwidget/basic.rb +++ /dev/null @@ -1,199 +0,0 @@ -# frozen_string_literal: false -# -# basic demo --- called from demo.rb -# -unless Object.const_defined?('DemoVar') - fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. " -end - -module DemoBasic - @@var = TkVariable.new_hash - @@after = nil - @@count = 0 - - def self.create(nb) - frame = nb.insert('end', 'demoBasic', :text=>'Basic') - topf = TkFrame.new(frame) - - titf1 = Tk::BWidget::TitleFrame.new(topf, :text=>'Label') - titf2 = Tk::BWidget::TitleFrame.new(topf, :text=>'Entry') - - titf3 = Tk::BWidget::TitleFrame.new(frame, :text=>'Button and ArrowButton') - - _label(titf1.get_frame) - _entry(titf2.get_frame) - _button(titf3.get_frame) - - Tk.pack(titf1, titf2, :side=>:left, :fill=>:both, :padx=>4, :expand=>true) - topf.pack(:pady=>2, :fill=>:x) - titf3.pack(:pady=>2, :padx=>4, :fill=>:x) - end - - def self._label(parent) - lab = Tk::BWidget::Label.new(parent, :text=>'This is a Label widget', - :helptext=>'Label widget') - chk = TkCheckbutton.new(parent, :text=>'Disabled', - :variable=>@@var.ref(lab, 'state'), - :onvalue=>'disabled', :offvalue=>'normal', - :command=>proc{lab[:state] = @@var[lab, 'state']}) - lab.pack(:anchor=>:w, :pady=>4) - chk.pack(:anchor=>:w) - end - - def self._entry(parent) - ent = Tk::BWidget::Entry.new(parent, :text=>'Press enter', - :helptext=>'Entry widget', - :command=>proc{ - @@var['entcmd'] = 'command called' - Tk.after(500, proc{@@var['entcmd'] = ''}) - }) - - chk1 = TkCheckbutton.new(parent, :text=>'Disabled', - :variable=>@@var.ref(ent, 'state'), - :onvalue=>'disabled', :offvalue=>'normal', - :command=>proc{ent.state = @@var[ent, 'state']}) - - chk2 = TkCheckbutton.new(parent, :text=>'Non editable', - :variable=>@@var.ref(ent, 'editable'), - :onvalue=>false, :offvalue=>true, - :command=>proc{ - ent.editable = @@var[ent, 'editable'] - }) - - lab = TkLabel.new(parent, :textvariable=>@@var.ref('entcmd'), - :foreground=>'red') - - ent.pack(:pady=>4, :anchor=>:w) - Tk.pack(chk1, chk2, :anchor=>:w) - lab.pack(:pady=>4) - end - - def self._button(parent) - frame = TkFrame.new(parent) - but = Tk::BWidget::Button.new(frame, :text=>'Press me!', - :repeatdelay=>300, - :command=>proc{_butcmd('command')}, - :helptext=>'This is a Button widget') - - sep1 = Tk::BWidget::Separator.new(frame, :orient=>:vertical) - arr1 = Tk::BWidget::ArrowButton.new(frame, :type=>:button, - :width=>25, :height=>25, :repeatdelay=>300, - :command=>proc{_butcmd('command')}, - :helptext=>"This is an ArrowButton widget\nof type button") - - sep2 = Tk::BWidget::Separator.new(frame, :orient=>:vertical) - arr2 = Tk::BWidget::ArrowButton.new(frame, :type=>:arrow, - :width=>25, :height=>25, :relief=>:sunken, - :ipadx=>0, :ipady=>0, :repeatdelay=>300, - :command=>proc{_butcmd('command')}, - :helptext=>"This is an ArrowButton widget\nof type arrow") - - but.pack(:side=>:left, :padx=>4) - sep1.pack(:side=>:left, :padx=>4, :fill=>:y) - arr1.pack(:side=>:left, :padx=>4) - sep2.pack(:side=>:left, :padx=>4, :fill=>:y) - arr2.pack(:side=>:left, :padx=>4) - frame.pack - - Tk::BWidget::Separator.new(parent, - :orient=>:horizontal).pack(:fill=>:x, :pady=>10) - - labf1 = Tk::BWidget::LabelFrame.new(parent, :text=>'Command', - :side=>:top, :anchor=>:w, - :relief=>:sunken, :borderwidth=>1) - subf = labf1.get_frame - chk1 = TkCheckbutton.new(subf, :text=>'Disabled', - :variable=>@@var.ref('bstate'), - :onvalue=>'disabled', :offvalue=>'normal', - :command=>proc{_bstate(@@var['bstate'], - but, arr1, arr2)}) - chk2 = TkCheckbutton.new(subf, :text=>"Use armcommand/\ndisarmcommand", - :variable=>@@var.ref('barmcmd'), - :command=>proc{_barmcmd(@@var['barmcmd'], - but, arr1, arr2)}) - Tk.pack(chk1, chk2, :anchor=>:w) - - label = TkLabel.new(parent, :textvariable=>@@var.ref('butcmd'), - :foreground=>'red').pack(:side=>:bottom, :pady=>4) - - labf2 = Tk::BWidget::LabelFrame.new(parent, :text=>'Direction', - :side=>:top, :anchor=>:w, - :relief=>:sunken, :borderwidth=>1) - subf = labf2.get_frame - @@var['bside'] = :top - [:top, :left, :bottom, :right].each{|dir| - TkRadiobutton.new(subf, :text=>"#{dir} arrow", - :variable=>@@var.ref('bside'), :value=>dir, - :command=>proc{_bside(@@var['bside'], arr1, arr2)} - ).pack(:anchor=>:w) - } - - labf3 = Tk::BWidget::LabelFrame.new(parent, :text=>'Relief', - :side=>:top, :anchor=>:w, - :relief=>:sunken, :borderwidth=>1) - subf = labf3.get_frame - @@var['brelief'] = :raised - [ %w(raised sunken ridge groove), %w(flat solid link)].each{|lrelief| - f = TkFrame.new(subf) - lrelief.each{|relief| - TkRadiobutton.new(f, :text=>relief, - :variable=>@@var.ref('brelief'), :value=>relief, - :command=>proc{ - _brelief(@@var['brelief'], but, arr1, arr2) - }).pack(:anchor=>:w) - } - f.pack(:side=>:left, :padx=>2, :anchor=>:n) - } - Tk.pack(labf1, labf2, labf3, :side=>:left, :fill=>:y, :padx=>4) - end - - def self._bstate(state, but, arr1, arr2) - [but, arr1, arr2].each{|b| b[:state] = state} - end - - def self._brelief(relief, but, arr1, arr2) - but[:relief] = relief - if relief.to_s != 'link' - [arr1, arr2].each{|arr| arr[:relief] = relief} - end - end - - def self._bside(side, *args) - args.each{|arr| arr[:dir] = side} - end - - def self._barmcmd(value, but, arr1, arr2) - if TkComm.bool(value) - but.configure(:armcommand=>proc{_butcmd('arm')}, - :disarmcommand=>proc{_butcmd('disarm')}, - :command=>'') - [arr1, arr2].each{|arr| - arr.configure(:armcommand=>proc{_butcmd('arm')}, - :disarmcommand=>proc{_butcmd('disarm')}, - :command=>'') - } - else - but.configure(:armcommand=>'', :disarmcommand=>'', - :command=>proc{_butcmd('command')}) - [arr1, arr2].each{|arr| - arr.configure(:armcommand=>'', :disarmcommand=>'', - :command=>proc{_butcmd('command')}) - } - end - end - - def self._butcmd(reason) - unless @@after - @@after = TkTimer.new(500, 1, proc{@@var['butcmd'] = ''}) - end - @@after.stop - if (reason == 'arm') - @@count += 1 - @@var['butcmd'] = "#{reason} command called (#{@@count})" - else - @@count = 0 - @@var['butcmd'] = "#{reason} command called" - end - @@after.start - end -end diff --git a/ext/tk/sample/tkextlib/bwidget/bwidget.xbm b/ext/tk/sample/tkextlib/bwidget/bwidget.xbm deleted file mode 100644 index 5451ebb9c0..0000000000 --- a/ext/tk/sample/tkextlib/bwidget/bwidget.xbm +++ /dev/null @@ -1,46 +0,0 @@ -#define bwidget_width 76 -#define bwidget_height 64 -static char bwidget_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf0,0x00,0xb6,0x6d,0xdb,0x16,0x00,0x00,0x00,0x00,0xf0, - 0x00,0xdb,0xb6,0x6d,0xab,0x00,0x00,0x00,0x00,0xf0,0x00,0x55,0x55,0x55,0x75, - 0x01,0x00,0x00,0x00,0xf0,0x00,0x6d,0xdb,0xb6,0xad,0x02,0x00,0x00,0x00,0xf0, - 0x00,0xb6,0x6d,0xdb,0xb6,0x05,0x00,0x00,0x00,0xf0,0x00,0x55,0x55,0x55,0x55, - 0x05,0x00,0x00,0x00,0xf0,0x00,0xda,0xb6,0xad,0x6d,0x0b,0x00,0x00,0x00,0xf0, - 0x00,0x6b,0x03,0xc0,0xb6,0x05,0x00,0x00,0x00,0xf0,0x00,0x56,0x05,0x00,0x55, - 0x0d,0x00,0x00,0x00,0xf0,0x00,0xbb,0x05,0x80,0xdb,0x06,0x00,0x00,0x00,0xf0, - 0x00,0xca,0x06,0x00,0x6c,0x0b,0x00,0x00,0x00,0xf0,0x00,0xb6,0x02,0x00,0xaa, - 0x0a,0x00,0x00,0x00,0xf0,0x00,0xab,0x05,0x00,0x6c,0x0b,0x00,0x00,0x00,0xf0, - 0x00,0xdd,0x06,0x00,0xb6,0x05,0x00,0x00,0x00,0xf0,0x00,0xaa,0x02,0x00,0x55, - 0x05,0x00,0x00,0x00,0xf0,0x00,0xb7,0x05,0xc0,0xda,0x02,0x00,0x00,0x00,0xf0, - 0x00,0xd9,0x06,0x50,0x6b,0x01,0x00,0x00,0x00,0xf0,0x00,0x56,0xb5,0xad,0xad, - 0x00,0x00,0x00,0x00,0xf0,0x00,0xdb,0xd6,0x76,0x15,0x00,0x00,0x00,0x00,0xf0, - 0x00,0x6a,0xab,0xaa,0x2d,0x00,0x00,0x00,0x00,0xf0,0x00,0x56,0x75,0xad,0xb6, - 0x02,0x00,0x00,0x00,0xf0,0x00,0xbb,0xad,0xd6,0xaa,0x05,0x00,0x00,0x00,0xf0, - 0x00,0xca,0xb6,0x6b,0xdb,0x2a,0x00,0x00,0x00,0xf0,0x00,0x77,0xd5,0x5c,0x6d, - 0x2d,0x00,0x00,0x00,0xf0,0x00,0x99,0x05,0x00,0xaa,0x56,0x00,0x00,0x00,0xf0, - 0x00,0xee,0x06,0x00,0x6c,0xbb,0x00,0x00,0x00,0xf0,0x00,0xaa,0x02,0x00,0xb0, - 0x55,0x00,0x00,0x00,0xf0,0x00,0x55,0x05,0x00,0xa8,0xd6,0x00,0x00,0x00,0xf0, - 0x00,0xee,0x06,0x00,0xd0,0x6a,0x00,0x00,0x00,0xf0,0x00,0x55,0x03,0x00,0x68, - 0xb7,0xfc,0x00,0x7e,0xf0,0x00,0x6d,0x05,0x00,0xa8,0xaa,0xfc,0x80,0x7e,0xf0, - 0x00,0xb6,0x05,0x00,0x50,0xbb,0xfe,0x01,0x7e,0xf0,0x00,0x55,0x05,0x00,0x78, - 0xad,0xfe,0x81,0x1f,0xf0,0x00,0xb6,0x05,0x00,0xa4,0xb5,0xfe,0x81,0x1f,0xf0, - 0x00,0x5b,0x05,0x80,0xba,0x56,0xfe,0x83,0x1f,0xf0,0x00,0xaa,0x6b,0x5b,0xd5, - 0x5a,0xff,0x85,0x1f,0xf0,0x00,0xdb,0x5a,0xad,0x57,0x2b,0xff,0xc7,0x0f,0xf0, - 0x00,0x6d,0xad,0xd5,0x6a,0x0d,0xff,0xc7,0x0f,0xf0,0x00,0xaa,0xd6,0xb6,0xba, - 0x05,0xdf,0xc7,0x0f,0xf0,0x00,0xb7,0xb5,0x5a,0xab,0x8a,0xdf,0xcf,0x0f,0xf0, - 0x00,0xd9,0x5a,0xab,0x6d,0x8f,0xcf,0xef,0x07,0xf0,0x00,0x56,0xad,0x75,0xb5, - 0xaf,0x8f,0xef,0x07,0xf0,0x00,0xb5,0xeb,0x5a,0x00,0x9f,0xcf,0xef,0x07,0xf0, - 0x00,0x00,0x00,0x00,0x00,0xff,0x8f,0xff,0x07,0xf0,0x00,0x00,0x00,0x00,0x00, - 0xfe,0x87,0xff,0x03,0xf0,0x00,0x00,0x00,0x00,0x00,0xff,0x03,0xff,0x03,0xf0, - 0x00,0x00,0x00,0x00,0x00,0xfe,0x03,0xff,0x03,0xf0,0x00,0x00,0x00,0x00,0x00, - 0xfe,0x03,0xff,0x01,0xf0,0x00,0x00,0x00,0x00,0x00,0xfc,0x01,0xff,0x03,0xf0, - 0x00,0x00,0x00,0x00,0x00,0xfe,0x01,0xfe,0x01,0xf0,0x00,0x00,0x00,0x00,0x00, - 0xfc,0x01,0xfe,0x01,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0}; diff --git a/ext/tk/sample/tkextlib/bwidget/demo.rb b/ext/tk/sample/tkextlib/bwidget/demo.rb deleted file mode 100644 index 5fe54eebbd..0000000000 --- a/ext/tk/sample/tkextlib/bwidget/demo.rb +++ /dev/null @@ -1,244 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/bwidget' - -module DemoVar - @_wfont = nil - @notebook = nil - @mainframe = nil - @status = TkVariable.new - @prgtext = TkVariable.new - @prgindic = TkVariable.new - @font = nil - @font_name = nil - @toolbar1 = TkVariable.new(true) - @toolbar2 = TkVariable.new(true) -end -class << DemoVar - attr_accessor :_wfont, :notebook, :mainframe, :font, :font_name - attr_reader :status, :prgtext, :prgindic, :toolbar1, :toolbar2 -end - -class BWidget_Demo - DEMODIR = File.dirname(File.expand_path(__FILE__)) - - %w(manager basic select dnd tree tmpldlg).each{|f| - require File.join(DEMODIR, f << '.rb') - } - - def initialize - TkOption.add('*TitleFrame.l.font', 'helvetica 11 bold italic') - - root = TkRoot.new(:title=>'BWidget demo') - root.withdraw - - _create - - Tk::BWidget.place(root, 0, 0, :center) - root.deiconify - root.raise - root.focus(true) - - root.geometry(root.geometry) - end - - def _create - DemoVar.prgtext.value = 'Please wait while loading font...' - DemoVar.prgindic.value = -1 - - intro = _create_intro - - Tk.update - - Tk::BWidget::SelectFont.load_font - - descmenu = [ - '&File', 'all', 'file', 0, [ - ['command', 'E&xit', [], 'Exit BWidget demo', [], - {:command=>proc{exit}}] - ], - '&Options', 'all', 'options', 0, [ - ['checkbutton', 'Toolbar &1', ['all', 'option'], - 'Show/hide toolbar 1', [], - { :variable=>DemoVar.toolbar1, - :command=>proc{ - DemoVar.mainframe.show_toolbar(0, DemoVar.toolbar1.value) - } - } - ], - ['checkbutton', 'Toolbar &2', ['all', 'option'], - 'Show/hide toolbar 2', [], - { :variable=>DemoVar.toolbar2, - :command=>proc{ - DemoVar.mainframe.show_toolbar(1, DemoVar.toolbar2.value) - } - } - ] - ] - ] - - DemoVar.prgtext.value = 'Creating MainFrame...' - DemoVar.prgindic.value = 0 - - DemoVar.mainframe = Tk::BWidget::MainFrame.new( - :menu=>descmenu, - :textvariable=>DemoVar.status, - :progressvar=>DemoVar.prgindic - ) - - # toolbar 1 creation - DemoVar.prgindic.numeric += 1 - - DemoVar.mainframe.add_toolbar{|tb1| - Tk::BWidget::ButtonBox.new(tb1, :spacing=>0, :padx=>1, :pady=>1){|bbox| - add(:image=>Tk::BWidget::Bitmap.new('new'), - :highlightthickness=>0, :takefocus=>0, :relief=>:link, - :borderwidth=>1, :padx=>1, :pady=>1, - :command=>proc{puts 'select "Create a new file" icon'}, - :helptext=>"Create a new file") - - add(:image=>Tk::BWidget::Bitmap.new('open'), - :highlightthickness=>0, :takefocus=>0, :relief=>:link, - :borderwidth=>1, :padx=>1, :pady=>1, - :command=>proc{puts 'select "Open an existing file" icon'}, - :helptext=>"Open an existing file") - - add(:image=>Tk::BWidget::Bitmap.new('save'), - :highlightthickness=>0, :takefocus=>0, :relief=>:link, - :borderwidth=>1, :padx=>1, :pady=>1, - :command=>proc{puts 'select "Save file" icon'}, - :helptext=>"Save file") - - pack(:side=>:left, :anchor=>:w) - } - - Tk::BWidget::Separator.new(tb1, :orient=>:vertical){ - pack(:side=>:left, :fill=>:y, :padx=>4, :anchor=>:w) - } - - DemoVar.prgindic.numeric += 1 - - Tk::BWidget::ButtonBox.new(tb1, :spacing=>0, :padx=>1, :pady=>1){|bbox| - add(:image=>Tk::BWidget::Bitmap.new('cut'), - :highlightthickness=>0, :takefocus=>0, :relief=>:link, - :borderwidth=>1, :padx=>1, :pady=>1, - :command=>proc{puts 'select "Cut selection" icon'}, - :helptext=>"Cut selection") - - add(:image=>Tk::BWidget::Bitmap.new('copy'), - :highlightthickness=>0, :takefocus=>0, :relief=>:link, - :borderwidth=>1, :padx=>1, :pady=>1, - :command=>proc{puts 'select "Copy selection" icon'}, - :helptext=>"Copy selection") - - add(:image=>Tk::BWidget::Bitmap.new('paste'), - :highlightthickness=>0, :takefocus=>0, :relief=>:link, - :borderwidth=>1, :padx=>1, :pady=>1, - :command=>proc{puts 'select "Paste selection" icon'}, - :helptext=>"Paste selection") - - pack(:side=>:left, :anchor=>:w) - } - } - - # toolbar 2 creation - DemoVar.prgindic.numeric += 1 - - tb2 = DemoVar.mainframe.add_toolbar - DemoVar._wfont = Tk::BWidget::SelectFont::Toolbar.new(tb2, - :command=>proc{update_font(DemoVar._wfont[:font])} - ) - DemoVar.font = DemoVar._wfont[:font] - DemoVar._wfont.pack(:side=>:left, :anchor=>:w) - - DemoVar.mainframe.add_indicator( - :text=>"BWidget #{Tk::BWidget.package_version}" - ) - DemoVar.mainframe.add_indicator(:textvariable=>'tk_patchLevel') - - # NoteBook creation - DemoVar.notebook = Tk::BWidget::NoteBook.new(DemoVar.mainframe.get_frame) - - DemoVar.prgtext.value = "Creating Manager..." - DemoVar.prgindic.numeric += 1 - DemoManager.create(DemoVar.notebook) - - DemoVar.prgtext.value = "Creating Basic..." - DemoVar.prgindic.numeric += 1 - DemoBasic.create(DemoVar.notebook) - - DemoVar.prgtext.value = "Creating Select..." - DemoVar.prgindic.numeric += 1 - DemoSelect.create(DemoVar.notebook) - - DemoVar.prgtext.value = "Creating Dialog..." - DemoVar.prgindic.numeric += 1 - DemoDialog.create(DemoVar.notebook) - - DemoVar.prgtext.value = "Creating Drag and Drop..." - DemoVar.prgindic.numeric += 1 - DemoDnD.create(DemoVar.notebook) - - DemoVar.prgtext.value = "Creating Tree..." - DemoVar.prgindic.numeric += 1 - DemoTree.create(DemoVar.notebook) - - DemoVar.prgtext.value = "Done" - DemoVar.prgindic.numeric += 1 - - DemoVar.notebook.compute_size - DemoVar.notebook.pack(:fill=>:both, :expand=>true, :padx=>4, :pady=>4) - DemoVar.notebook.raise(DemoVar.notebook.get_page(0)) - - DemoVar.mainframe.pack(:fill=>:both, :expand=>true) - - Tk.update_idletasks - - intro.destroy - end - - def update_font(newfont) - root = Tk.root - root[:cursor] = 'watch' - if newfont != '' && DemoVar.font != newfont - DemoVar._wfont[:font] = newfont - DemoVar.notebook[:font] = newfont - DemoVar.font = newfont - end - root[:cursor] = '' - end - - def _create_intro - top = TkToplevel.new(:relief=>:raised, :borderwidth=>2) - top.withdraw - top.overrideredirect(true) - - ximg = TkLabel.new(top, :bitmap=>"@#{File.join(DEMODIR,'x1.xbm')}", - :foreground=>'grey90', :background=>'white') - bwimg = TkLabel.new(ximg, :bitmap=>"@#{File.join(DEMODIR,'bwidget.xbm')}", - :foreground=>'grey90', :background=>'white') - frame = TkFrame.new(ximg, :background=>'white') - TkLabel.new(frame, :text=>'Loading demo', - :background=>'white', :font=>'times 8').pack - TkLabel.new(frame, :textvariable=>DemoVar.prgtext, - :background=>'white', :font=>'times 8', :width=>35).pack - Tk::BWidget::ProgressBar.new(frame, :width=>50, :height=>10, - :background=>'white', - :variable=>DemoVar.prgindic, - :maximum=>10).pack - frame.place(:x=>0, :y=>0, :anchor=>:nw) - bwimg.place(:relx=>1, :rely=>1, :anchor=>:se) - ximg.pack - Tk::BWidget.place(top, 0, 0, :center) - top.deiconify - - top - end -end - -module DemoVar - Demo = BWidget_Demo.new -end - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/bwidget/dnd.rb b/ext/tk/sample/tkextlib/bwidget/dnd.rb deleted file mode 100644 index 326288bade..0000000000 --- a/ext/tk/sample/tkextlib/bwidget/dnd.rb +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: false -# -# dnd demo --- called from demo.rb -# -unless Object.const_defined?('DemoVar') - fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. " -end - -module DemoDnD - def self.create(nb) - frame = nb.insert('end', 'demoDnD', :text=>'Drag and Drop') - - titf1 = Tk::BWidget::TitleFrame.new(frame, :text=>'Drag source') - subf = titf1.get_frame - - ent1 = Tk::BWidget::LabelEntry.new(subf, :label=>'Entry', - :labelwidth=>14, :dragenabled=>true, - :dragevent=>3) - labf1 = Tk::BWidget::LabelFrame.new(subf, :text=>'Label (text)', - :width=>14) - f = labf1.get_frame - lab = Tk::BWidget::Label.new(f, :text=>'Drag this text', - :dragenabled=>true, :dragevent=>3).pack - - labf2 = Tk::BWidget::LabelFrame.new(subf, :text=>'Label (bitmap)', - :width=>14) - f = labf2.get_frame - lab = Tk::BWidget::Label.new(f, :bitmap=>'info', - :dragenabled=>true, :dragevent=>3).pack - - Tk.pack(ent1, labf1, labf2, :side=>:top, :fill=>:x, :pady=>4) - - titf2 = Tk::BWidget::TitleFrame.new(frame, :text=>'Drop targets') - subf = titf2.get_frame - - ent1 = Tk::BWidget::LabelEntry.new(subf, :label=>'Entry', - :labelwidth=>14, :dropenabled=>true) - labf1 = Tk::BWidget::LabelFrame.new(subf, :text=>'Label', :width=>14) - f = labf1.get_frame - lab = Tk::BWidget::Label.new(f, :dropenabled=>true, - :highlightthickness=>1).pack(:fill=>:x) - Tk.pack(ent1, labf1, :side=>:top, :fill=>:x, :pady=>4) - Tk.pack(titf1, titf2, :pady=>4) - - frame - end -end diff --git a/ext/tk/sample/tkextlib/bwidget/manager.rb b/ext/tk/sample/tkextlib/bwidget/manager.rb deleted file mode 100644 index caa2fbef7a..0000000000 --- a/ext/tk/sample/tkextlib/bwidget/manager.rb +++ /dev/null @@ -1,151 +0,0 @@ -# frozen_string_literal: false -# -# manager demo --- called from demo.rb -# -unless Object.const_defined?('DemoVar') - fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. " -end - -module DemoManager - @@progress = TkVariable.new(false) - @@status = TkVariable.new('Compute in progress...') - @@homogeneous = TkVariable.new(false) - @@constw = TkVariable.new - @@afterobj = nil - - def self.create(nb) - frame = nb.insert('end', 'demoManager', :text=>'Manager') - - topf = TkFrame.new(frame) - titf1 = Tk::BWidget::TitleFrame.new(topf, :text=>"MainFrame") - titf2 = Tk::BWidget::TitleFrame.new(topf, :text=>"NoteBook") - titf3 = Tk::BWidget::TitleFrame.new(frame, :text=>"Paned & ScrolledWindow") - - _mainframe(titf1.get_frame) - _notebook(titf2.get_frame) - _paned(titf3.get_frame) - - Tk.pack(titf1, titf2, :padx=>4, :side=>:left, :fill=>:both, :expand=>true) - Tk.pack(topf, :fill=>:x, :pady=>2) - Tk.pack(titf3, :pady=>2, :padx=>4, :fill=>:both, :expand=>true) - - frame - end - - def self._mainframe(parent) - labf1 = Tk::BWidget::LabelFrame.new(parent, :text=>'Toolbar', - :side=>:top, :anchor=>:w, - :relief=>:sunken, :borderwidth=>2) - subf = labf1.get_frame - chk1 = TkCheckbutton.new(subf, :text=>'View toolbar 1', - :variable=>DemoVar.toolbar1, - :command=>proc{ - DemoVar.mainframe.show_toolbar( - 0, DemoVar.toolbar1.value - ) - }) - chk2 = TkCheckbutton.new(subf, :text=>'View toolbar 2', - :variable=>DemoVar.toolbar2, - :command=>proc{ - DemoVar.mainframe.show_toolbar( - 1, DemoVar.toolbar2.value - ) - }) - - Tk.pack(chk1, chk2, :anchor=>:w, :fill=>:x) - labf1.pack(:fill=>:both) - - labf2 = Tk::BWidget::LabelFrame.new(parent, :text=>'Status bar', - :side=>:top, :anchor=>:w, - :relief=>:sunken, :borderwidth=>2) - subf = labf2.get_frame - chk1 = TkCheckbutton.new(subf, :text=>"Show Progress\nindicator", - :justify=>:left, :variable=>@@progress, - :command=>proc{ _show_progress }) - chk1.pack(:anchor=>:w, :fill=>:x) - - Tk.pack(labf1, labf2, :side=>:left, :padx=>4, :fill=>:both) - end - - def self._notebook(parent) - TkCheckbutton.new(parent, :text=>'Homogeneous label', - :variable=>@@homogeneous, - :command=>proc{ - DemoVar.notebook[:homogeneous] = @@homogeneous.value - }).pack(:side=>:left, :anchor=>:n, :fill=>:x) - end - - def self._paned(parent) - pw1 = Tk::BWidget::PanedWindow.new(parent, :side=>:top) - pane = pw1.add(:minsize=>100) - - pw2 = Tk::BWidget::PanedWindow.new(pane, :side=>:left) - pane1 = pw2.add(:minsize=>100) - pane2 = pw2.add(:minsize=>100) - - pane3 = pw1.add(:minsize=>100) - - [pane1, pane2].each{|pane| - sw = Tk::BWidget::ScrolledWindow.new(pane) - lb = TkListbox.new(sw, :height=>8, :width=>20, :highlightthickness=>0) - (1..8).each{|i| lb.insert('end', "Value #{i}") } - sw.set_widget(lb) - sw.pack(:fill=>:both, :expand=>true) - } - - sw = Tk::BWidget::ScrolledWindow.new(pane3, :relief=>:sunken, - :borderwidth=>2) - sf = Tk::BWidget::ScrollableFrame.new(sw) - sw.set_widget(sf) - subf = sf.get_frame - lab = TkLabel.new(subf, :text=>'This is a ScrollableFrame') - chk = TkCheckbutton.new(subf, :text=>'Constrained with', - :variable=>@@constw, :command=>proc{ - sf['constrainedwidth'] = @@constw.value - }) - lab.pack - chk.pack(:anchor=>:w) - chk.bind('FocusIn', proc{sf.see(chk)}) - (0..20).each{|i| - ent = TkEntry.new(subf, :width=>50).pack(:fill=>:x, :pady=>4) - ent.bind('FocusIn', proc{sf.see(ent)}) - ent.insert('end', "Text field #{i}") - } - - Tk.pack(sw, pw2, pw1, :fill=>:both, :expand=>true) - end - - def self._show_progress - unless @@afterobj - @@afterobj = TkTimer.new(30, -1, proc{_update_progress}) - end - if @@progress.bool - DemoVar.status.value = 'Compute in progress...' - DemoVar.prgindic.value = 0 - DemoVar.mainframe.show_statusbar(:progression) - @@afterobj.start unless @@afterobj.running? - else - DemoVar.status.value = '' - DemoVar.mainframe.show_statusbar(:status) - @@afterobj.stop - end - end - - def self._update_progress - if @@progress.bool - if DemoVar.prgindic.numeric < 100 - DemoVar.prgindic.numeric += 5 - else - @@progress.value = false - DemoVar.mainframe.show_statusbar(:status) - DemoVar.status.value = 'Done' - @@afterobj.stop - Tk.after(500, proc{ DemoVar.status.value = '' }) - end - else - @@afterobj.stop - end - end - -end - diff --git a/ext/tk/sample/tkextlib/bwidget/select.rb b/ext/tk/sample/tkextlib/bwidget/select.rb deleted file mode 100644 index b32a69d837..0000000000 --- a/ext/tk/sample/tkextlib/bwidget/select.rb +++ /dev/null @@ -1,83 +0,0 @@ -# frozen_string_literal: false -# -# select demo --- called from demo.rb -# -unless Object.const_defined?('DemoVar') - fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. " -end - -module DemoSelect - @@var = TkVariable.new_hash - - def self.create(nb) - frame = nb.insert('end', 'demoSelect', :text=>'Spin & Combo') - - titf1 = Tk::BWidget::TitleFrame.new(frame, :text=>'SpinBox') - subf = titf1.get_frame - spin = Tk::BWidget::SpinBox.new(subf, :range=>[1, 100, 1], - :textvariable=>@@var.ref('spin', 'var'), - :helptext=>'This is the SpinBox') - ent = Tk::BWidget::LabelEntry.new(subf, :label=>'Linked var', - :labelwidth=>10, :labelanchor=>:w, - :textvariable=>@@var.ref('spin', 'var'), - :editable=>0, - :helptext=>"This is an Entry reflecting\nthe linked var of SpinBox") - labf = Tk::BWidget::LabelFrame.new(subf, :text=>'Options', - :side=>:top, :anchor=>:w, - :relief=>:sunken, :borderwidth=>1, - :helptext=>'Modify some options of SpinBox') - subf = labf.get_frame - chk1 = TkCheckbutton.new(subf, :text=>'Non editable', - :variable=>@@var.ref('spin', 'editable'), - :onvalue=>false, :offvalue=>true, - :command=>proc{ - spin.editable(@@var['spin', 'editable']) - }) - chk2 = TkCheckbutton.new(subf, :text=>'Disabled', - :variable=>@@var.ref('spin', 'state'), - :onvalue=>'disabled', :offvalue=>'normal', - :command=>proc{ - spin.state(@@var['spin', 'state']) - }) - Tk.pack(chk1, chk2, :side=>:left, :anchor=>:w) - Tk.pack(spin, ent, labf, :pady=>4, :fill=>:x) - titf1.pack - - titf2 = Tk::BWidget::TitleFrame.new(frame, :text=>'ComboBox') - subf = titf2.get_frame - combo = Tk::BWidget::ComboBox.new(subf, - :textvariable=>@@var.ref('combo', 'var'), - :values=>[ - 'first value', 'second value', - 'third value', 'fourth value', - 'fifth value' - ], - :helptext=>'This is the ComboBox') - ent = Tk::BWidget::LabelEntry.new(subf, :label=>'Linked var', - :labelwidth=>10, :labelanchor=>:w, - :textvariable=>@@var.ref('combo', 'var'), - :editable=>0, :helptext=>"This is an Entry reflecting\nthe linked var of ComboBox") - labf = Tk::BWidget::LabelFrame.new(subf, :text=>'Options', :side=>:top, - :anchor=>:w, :relief=>:sunken, - :borderwidth=>1, :helptext=>'Modify some options of ComboBox') - subf = labf.get_frame - chk1 = TkCheckbutton.new(subf, :text=>'Non editable', - :variable=>@@var.ref('combo', 'editable'), - :onvalue=>false, :offvalue=>true, - :command=>proc{ - combo.editable(@@var['combo', 'editable']) - }) - chk2 = TkCheckbutton.new(subf, :text=>'Disabled', - :variable=>@@var.ref('combo', 'state'), - :onvalue=>'disabled', :offvalue=>'normal', - :command=>proc{ - combo.state(@@var['combo', 'state']) - }) - - Tk.pack(chk1, chk2, :side=>:left, :anchor=>:w) - Tk.pack(combo, ent, labf, :pady=>4, :fill=>:x) - Tk.pack(titf1, titf2, :pady=>4) - - frame - end -end diff --git a/ext/tk/sample/tkextlib/bwidget/tmpldlg.rb b/ext/tk/sample/tkextlib/bwidget/tmpldlg.rb deleted file mode 100644 index 1496cbce2f..0000000000 --- a/ext/tk/sample/tkextlib/bwidget/tmpldlg.rb +++ /dev/null @@ -1,222 +0,0 @@ -# frozen_string_literal: false -# -# templdlg demo --- called from demo.rb -# -unless Object.const_defined?('DemoVar') - fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. " -end - -module DemoDialog - @@tmpl = TkVariable.new_hash - @@msg = TkVariable.new_hash - @@msgdlg = nil - @@progmsg = TkVariable.new - @@progval = TkVariable.new - @@progdlg = nil - @@resources = TkVariable.new('en') - - def self.create(nb) - frame = nb.insert('end', 'demoDlg', :text=>'Dialog') - - titf1 = Tk::BWidget::TitleFrame.new(frame, :text=>'Resources') - titf2 = Tk::BWidget::TitleFrame.new(frame, :text=>'Template Dialog') - titf3 = Tk::BWidget::TitleFrame.new(frame, :text=>'Message Dialog') - titf4 = Tk::BWidget::TitleFrame.new(frame, :text=>'Other dialog') - - subf = titf1.get_frame - cmd = proc{ TkOption.read_file(File.join(Tk::BWidget::LIBRARY, 'lang', - @@resources.value + '.rc')) } - Tk.pack(TkRadiobutton.new(subf, :text=>'English', :value=>'en', - :variable=>@@resources, :command=>cmd), - TkRadiobutton.new(subf, :text=>'French', :value=>'fr', - :variable=>@@resources, :command=>cmd), - TkRadiobutton.new(subf, :text=>'German', :value=>'de', - :variable=>@@resources, :command=>cmd), - :side=>:left) - - _tmpldlg(titf2.get_frame) - _msgdlg(titf3.get_frame) - _stddlg(titf4.get_frame) - - titf1.pack(:fill=>:x, :pady=>2, :padx=>2) - titf4.pack(:side=>:bottom, :fill=>:x, :pady=>2, :padx=>2) - Tk.pack(titf2, titf3, :side=>:left, :padx=>2, :fill=>:both, :expand=>true) - end - - def self._tmpldlg(parent) - @@tmpl['side'] = :bottom - @@tmpl['anchor'] = :c - - labf1 = Tk::BWidget::LabelFrame.new(parent, :text=>'Button side', - :side=>:top, :anchor=>:w, - :relief=>:sunken, :borderwidth=>1) - subf = labf1.get_frame - Tk.pack(TkRadiobutton.new(subf, :text=>'Bottom', :value=>:bottom, - :variable=>@@tmpl.ref('side'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'Left', :value=>:left, - :variable=>@@tmpl.ref('side'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'Right', :value=>:right, - :variable=>@@tmpl.ref('side'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'Top', :value=>:top, - :variable=>@@tmpl.ref('side'), :anchor=>:w), - :fill=>:x, :anchor=>:w) - - labf2 = Tk::BWidget::LabelFrame.new(parent, :text=>'Button anchor', - :side=>:top, :anchor=>:w, - :relief=>:sunken, :borderwidth=>1) - subf = labf2.get_frame - Tk.pack(TkRadiobutton.new(subf, :text=>'North', :value=>:n, - :variable=>@@tmpl.ref('anchor'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'West', :value=>:w, - :variable=>@@tmpl.ref('anchor'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'East', :value=>:e, - :variable=>@@tmpl.ref('anchor'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'South', :value=>:s, - :variable=>@@tmpl.ref('anchor'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'Center', :value=>:c, - :variable=>@@tmpl.ref('anchor'), :anchor=>:w), - :fill=>:x, :anchor=>:w) - - sep = Tk::BWidget::Separator.new(parent, :orient=>:horizontal) - button = TkButton.new(parent, :text=>'Show', :command=>proc{_show_tmpldlg}) - - button.pack(:side=>:bottom) - sep.pack(:side=>:bottom, :fill=>:x, :pady=>10) - Tk.pack(labf1, labf2, :side=>:left, :padx=>4, :anchor=>:n) - end - - def self._msgdlg(parent) - @@msg['type'] = 'ok' - @@msg['icon'] = 'info' - - labf1 = Tk::BWidget::LabelFrame.new(parent, :text=>'Type', :side=>:top, - :anchor=>:w, :relief=>:sunken, - :borderwidth=>1) - subf = labf1.get_frame - Tk.pack(TkRadiobutton.new(subf, :text=>'Ok', :value=>'ok', - :variable=>@@msg.ref('type'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'Ok, Cancel', :value=>'okcancel', - :variable=>@@msg.ref('type'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'Retry, Cancel', - :value=>'retrycancel', - :variable=>@@msg.ref('type'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'Yes, No', :value=>'yesno', - :variable=>@@msg.ref('type'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'Yes, No, Cancel', - :value=>'yesnocancel', - :variable=>@@msg.ref('type'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'Abort, Retry, Ignore', - :value=>'abortretryignore', - :variable=>@@msg.ref('type'), :anchor=>:w), - :fill=>:x, :anchor=>:w) - - Tk.pack(TkRadiobutton.new(subf, :text=>'User', :value=>'user', - :variable=>@@msg.ref('type'), :anchor=>:w), - Tk::BWidget::Entry.new(subf, :textvariable=>@@msg.ref('buttons')), - :side=>:left) - - labf2 = Tk::BWidget::LabelFrame.new(parent, :text=>'Icon', :side=>:top, - :anchor=>:w, :relief=>:sunken, - :borderwidth=>1) - subf = labf2.get_frame - Tk.pack(TkRadiobutton.new(subf, :text=>'Information', :value=>'info', - :variable=>@@msg.ref('icon'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'Question', :value=>'question', - :variable=>@@msg.ref('icon'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'Warning', :value=>'warning', - :variable=>@@msg.ref('icon'), :anchor=>:w), - TkRadiobutton.new(subf, :text=>'Error', :value=>'error', - :variable=>@@msg.ref('icon'), :anchor=>:w), - :fill=>:x, :anchor=>:w) - - sep = Tk::BWidget::Separator.new(parent, :orient=>:horizontal) - button = TkButton.new(parent, :text=>'Show', :command=>proc{_show_msgdlg}) - - button.pack(:side=>:bottom) - sep.pack(:side=>:bottom, :fill=>:x, :pady=>10) - Tk.pack(labf1, labf2, :side=>:left, :padx=>4, :anchor=>:n) - end - - def self._stddlg(parent) - Tk.pack(TkButton.new(parent, :text=>'Select a color '){|w| - command(proc{DemoDialog._show_color(w)}) - }, - TkButton.new(parent, :text=>'Font selector dialog', - :command=>proc{_show_fontdlg}), - TkButton.new(parent, :text=>'Progression dialog', - :command=>proc{_show_progdlg}), - TkButton.new(parent, :text=>'Password dialog', - :command=>proc{_show_passdlg}), - :side=>:left, :padx=>5, :anchor=>:w) - end - - def self._show_color(w) - dlg = Tk::BWidget::SelectColor.new(w, :color=>w.background) - color = dlg.menu([:below, w]) - unless color.empty? - w.background(color) - end - end - - def self._show_tmpldlg - dlg = Tk::BWidget::Dialog.new(:relative=>Tk.root, :modal=>:local, - :separator=>true, :title=>'Template dialog', - :side=>@@tmpl['side'], - :anchor=>@@tmpl['anchor'], - :default=>0, :cancel=>1) - dlg.add('name'=>'ok') - dlg.add('name'=>'cancel') - TkMessage.new(dlg.get_frame, :text=>"Template\nDialog", :justify=>:center, - :anchor=>:c, :width=>80).pack(:fill=>:both, :expand=>true, - :padx=>100, :pady=>100) - dlg.draw - dlg.destroy - end - - def self._show_msgdlg - @@msgdlg.destroy if @@msgdlg - @@msgdlg = Tk::BWidget::MessageDlg.new(:relative=>Tk.root, - :message=>'Message for MessageBox', - :type=>@@msg['type'], - :icon=>@@msg['icon'], - :buttons=>@@msg['buttons']) - @@msgdlg.create - end - - def self._show_fontdlg - font = Tk::BWidget::SelectFont.new(:relative=>Tk.root, - :font=>DemoVar.font).create - DemoVar::Demo.update_font(font) - end - - def self._show_progdlg - @@progmsg.value = "Compute in progress..." - @@progval.value = 0 - - @@progdlg = Tk::BWidget::ProgressDlg.new(:relative=>Tk.root, - :title=>'Wait...', - :type=>'infinite', :width=>20, - :textvariable=>@@progmsg, - :variable=>@@progval, - :stop=>'Stop') { - command(proc{self.destroy}) - create - } - _update_progdlg - end - - def self._update_progdlg - TkTimer.new(20, -1, proc{ - if @@progdlg && @@progdlg.winfo_exist? - @@progval.value = 2 - else - stop - end - }).start - end - - def self._show_passdlg - Tk::BWidget::PasswdDlg.new(:relative=>Tk.root).create - end -end - diff --git a/ext/tk/sample/tkextlib/bwidget/tree.rb b/ext/tk/sample/tkextlib/bwidget/tree.rb deleted file mode 100644 index 8a2566f9c9..0000000000 --- a/ext/tk/sample/tkextlib/bwidget/tree.rb +++ /dev/null @@ -1,290 +0,0 @@ -# frozen_string_literal: false -# -# templdlg demo --- called from demo.rb -# -unless Object.const_defined?('DemoVar') - fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. " -end - -module DemoTree - @@count = 0 - @@dblclick = false - @@top = nil - - def self.create(nb) - frame = nb.insert('end', 'demoTree', :text=>'Tree') - pw = Tk::BWidget::PanedWindow.new(frame, :side=>:top) - - pane = pw.add(:weight=>1) - title = Tk::BWidget::TitleFrame.new(pane, :text=>'Directory tree') - sw = Tk::BWidget::ScrolledWindow.new(title.get_frame, - :relief=>:sunken, :borderwidth=>2) - tree = Tk::BWidget::Tree.new(sw, :relief=>:flat, :borderwidth=>0, - :width=>15, :highlightthickness=>0, - :redraw=>false, :dropenabled=>true, - :dragenabled=>true, :dragevent=>3, - :droptypes=>[ - 'TREE_NODE', [ - :copy, [], - :move, [], - :link, [] - ], - 'LISTBOX_ITEM', [ - :copy, [], - :move, [], - :link, [] - ] - ], - :opencmd=>proc{|node| - moddir(1, tree, node) - }, - :closecmd=>proc{|node| - moddir(0, tree, node) - }) - sw.set_widget(tree) - - sw.pack(:side=>:top, :expand=>true, :fill=>:both) - title.pack(:fill=>:both, :expand=>true) - - pane = pw.add(:weight=>2) - lf = Tk::BWidget::TitleFrame.new(pane, :text=>'Content') - sw = Tk::BWidget::ScrolledWindow.new(lf.get_frame, - :scrollbar=>:horizontal, - :auto=>:none, :relief=>:sunken, - :borderwidth=>2) - - list = Tk::BWidget::ListBox.new(sw, :relief=>:flat, :borderwidth=>0, - :highlightthickness=>0, :width=>20, - :multicolumn=>true, :redraw=>false, - :dragevent=>3, :dropenabled=>true, - :dragenabled=>true, - :droptypes=>[ - 'TREE_NODE', [ - :copy, [], - :move, [], - :link, [] - ], - 'LISTBOX_ITEM', [ - :copy, [], - :move, [], - :link, [] - ] - ]) - sw.set_widget(list) - - Tk.pack(sw, lf, :fill=>:both, :expand=>true) - - pw.pack(:fill=>:both, :expand=>true) - - tree.textbind('ButtonPress-1', - proc{|node, ev| select('tree', 1, tree, list, node)}) - tree.textbind('Double-ButtonPress-1', - proc{|node, ev| select('tree', 2, tree, list, node)}) - - list.textbind('ButtonPress-1', - proc{|node, ev| select('list', 1, tree, list, node)}) - list.textbind('Double-ButtonPress-1', - proc{|node, ev| select('list', 2, tree, list, node)}) - - list.imagebind('Double-ButtonPress-1', - proc{|node, ev| select('list', 2, tree, list, node)}) - - nb.itemconfigure('demoTree', - :createcmd=>proc{|*args| init(tree, list, *args)}, - :raisecmd=>proc{ - Tk.root.geometry =~ - /\d+x\d+([+-]{1,2}\d+)([+-]{1,2}\d+)/ - global_w = ($1 || 0).to_i - global_h = ($2 || 0).to_i - if @@top - Tk::BWidget.place(@@top, 0, 0, :at, - global_w - Tk.root.winfo_screenwidth, global_h) - @@top.deiconify - Tk.root.bind('Unmap', proc{@@top.withdraw}) - Tk.root.bind('Map', proc{@@top.deiconify}) - Tk.root.bind('Configure', proc{|w| - if w == Tk.root - Tk.root.geometry =~ - /\d+x\d+([+-]{1,2}\d+)([+-]{1,2}\d+)/ - global_w = ($1 || 0).to_i - global_h = ($2 || 0).to_i - Tk::BWidget.place(@@top, 0, 0, :at, - global_w - Tk.root.winfo_screenwidth, - global_h) - end - }, '%W') - end - }, - :leavecmd=>proc{ - @@top.withdraw if @@top - Tk.root.bind_remove('Unmap') - Tk.root.bind_remove('Map') - Tk.root.bind_remove('Configure') - true - }) - end - - def self.init(tree, list, *args) - @@count = 0 - if Tk::PLATFORM['platform'] == 'unix' - rootdir = File.expand_path('~') - else - rootdir = 'c:' - end - - tree.insert('end', 'root', 'home', - :text=>rootdir, :data=>rootdir, :open=>true, - :image=>Tk::BWidget::Bitmap.new('openfold')) - getdir(tree, 'home', rootdir) - select('tree', 1, tree, list, 'home') - tree.redraw(true) - list.redraw(true) - - @@top = TkToplevel.new - @@top.withdraw - @@top.protocol('WM_DELETE_WINDOW'){ - # don't kill me - } - @@top.resizable(false, false) - @@top.title('Drag rectangle to scroll directory tree') - @@top.transient(Tk.root) - Tk::BWidget::ScrollView.new(@@top, :window=>tree, :fill=>'white', - :width=>300, :height=>300, :relief=>:sunken, - :bd=>1).pack(:fill=>:both, :expand=>true) - end - - def self.getdir(tree, node, path) - lentries = Dir.glob(File.join(path, '*')).sort - lfiles = [] - lentries.each{|f| - basename = File.basename(f) - if File.directory?(f) - Tk::BWidget::Tree::Node.new(tree, node, - :index=>'end', :text=>basename, - :image=>Tk::BWidget::Bitmap.new('folder'), - :drawcross=>:always, :data=>f) - @@count += 1 - else - lfiles << basename - end - } - tree.itemconfigure(node, :drawcross=>:auto, :data=>lfiles) - end - - def self.moddir(idx, tree, node) - if (idx != 0 && tree.itemcget(node, :drawcross).to_s == 'always') - getdir(tree, node, tree.itemcget(node, :data)) - if tree.nodes(node).empty? - tree.itemconfigure(node, :image=>Tk::BWidget::Bitmap.new('folder')) - else - tree.itemconfigure(node, :image=>Tk::BWidget::Bitmap.new('openfold')) - end - else - img = %w(folder openfold)[idx] || 'openfold' - tree.itemconfigure(node, :image=>Tk::BWidget::Bitmap.new(img)) - end - end - - def self.select(where, num, tree, list, node) - @@dblclick = true - if num == 1 - if (where == 'tree' && - tree.selection_get.find{|x| - TkUtil._get_eval_string(x) == TkUtil._get_eval_string(node) - }) - @@dblclick = false - Tk.after(500, proc{edit('tree', tree, list, node)}) - return - end - if (where == 'list' && - list.selection_get.find{|x| - TkUtil._get_eval_string(x) == TkUtil._get_eval_string(node) - }) - @@dblclick = false - Tk.after(500, proc{edit('list', tree, list, node)}) - return - end - if where == 'tree' - select_node(tree, list, node) - else - list.selection_set(node) - end - elsif (where == 'list' && tree.exist?(node)) - parent = tree.parent(node) - while TkUtil._get_eval_string(parent) != 'root' - tree.itemconfigure(parent, :open=>true) - parent = tree.parent(parent) - end - select_node(tree, list, node) - end - end - - def self.select_node(tree, list, node) - tree.selection_set(node) - Tk.update - list.delete(*(list.items(0, 'end'))) - - dir = tree.itemcget(node, :data) - if tree.itemcget(node, :drawcross).to_s == 'always' - getdir(tree, node, dir) - dir = tree.itemcget(node, :data) - end - - tree.nodes(node).each{|subnode| - list.insert('end', subnode, - :text=>tree.itemcget(subnode, :text), - :image=>Tk::BWidget::Bitmap.new('folder')) - } - - TkComm.simplelist(dir).each{|f| - Tk::BWidget::ListBox::Item.new(list, 'end', :text=>f, - :image=>Tk::BWidget::Bitmap.new('file')) - } - end - - def self.edit(where, tree, list, node) - return if @@dblclick - - if (where == 'tree' && - tree.selection_get.find{|x| - TkUtil._get_eval_string(x) == TkUtil._get_eval_string(node) - }) - res = tree.edit(node, tree.itemcget(node, :text)) - if res != '' - tree.itemconfigure(node, :text=>res) - if list.exist?(node) - list.itemconfigure(node, :text=>res) - end - tree.selection_set(node) - end - return - end - - if (where == 'list') - res = list.edit(node, list.igemcget(node, :text)) - if res != '' - list.itemconfigure(node, :text=>res) - if tree.exist?(node) - tree.itemconfigure(node, :text=>res) - else - cursel = tree.selection_get[0] - index = list.index(node) - tree.nodes(cursel).size - data = TkComm.simplelist(tree.itemcget(cursel, :data)) - data[index] = res - tree.itemconfigure(cursel, :date=>data) - end - list.selection_set(node) - end - end - end - - def self.expand(tree, but) - unless (cur = tree.selection_get).empty? - if TkComm.bool(but) - tree.opentree(cur) - else - tree.closetree(cur) - end - end - end -end diff --git a/ext/tk/sample/tkextlib/bwidget/x1.xbm b/ext/tk/sample/tkextlib/bwidget/x1.xbm deleted file mode 100644 index 6137a118f8..0000000000 --- a/ext/tk/sample/tkextlib/bwidget/x1.xbm +++ /dev/null @@ -1,2258 +0,0 @@ -#define x1_width 626 -#define x1_height 428 -static char x1_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x03,0x80,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xe0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00, - 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x80,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff, - 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00, - 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff, - 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff, - 0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00, - 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00, - 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff, - 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00, - 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xfc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00, - 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff, - 0xff,0x3f,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, - 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, - 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00, - 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x1f,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xc0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, - 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x0f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xfc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x80,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, - 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x07,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x01,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xfc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x1f,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x3f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, - 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x07, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xe0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, - 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x03,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x03,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0xfc,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff, - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0xfc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x80,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x0f,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x0f,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x7f,0x00,0x00,0x00, - 0x00,0xf8,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0xfc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff, - 0x7f,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfe,0xff,0xff,0x3f,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x3f,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xe0,0xff,0xff, - 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x1f,0x00,0x00, - 0x00,0xf0,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff, - 0xff,0x1f,0x00,0x00,0x00,0xfc,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00, - 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xf0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xfe,0xff,0xff,0x3f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xfe,0xff, - 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x0f,0x00, - 0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff, - 0xff,0xff,0x07,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x01,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x01, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x03,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xe0,0xff, - 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00, - 0xf8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xfc,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x03, - 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, - 0x00,0x00,0x00,0x00,0xfe,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xfc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff, - 0xff,0xff,0xff,0x01,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x80,0xff,0x07,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x07,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xf0,0xff,0xff,0xff,0xff, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc0,0xff,0x07,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x07,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xf8, - 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00, - 0xe0,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xfc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff, - 0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x3f, - 0x00,0x00,0x00,0x00,0xf8,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff, - 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff, - 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0xfc,0xff,0x0f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x0f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xfc,0xff,0xff,0xff, - 0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00, - 0xfe,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00, - 0x00,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff, - 0x7f,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff, - 0x07,0x00,0x00,0x00,0x80,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, - 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff, - 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xc0,0xff,0xff,0x1f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x1f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xe0,0xff,0xff, - 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, - 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00, - 0x00,0xf0,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff, - 0xff,0x3f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff, - 0xff,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x3f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8, - 0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff, - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x1f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x80,0xff,0xff, - 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0xfe,0xff, - 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00, - 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, - 0x00,0x00,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff, - 0xff,0xff,0x1f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff, - 0xff,0x1f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, - 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff, - 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x1f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xe0,0xff, - 0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xe0,0xff, - 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, - 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x07,0x00, - 0x00,0x00,0xe0,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff, - 0xff,0xff,0xff,0x0f,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff, - 0xff,0xff,0x03,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xe0,0xff,0xff,0xff,0xff, - 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xe0,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xf0, - 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfc, - 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x07,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff, - 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xf0,0xff,0xff,0xff, - 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x80,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff, - 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00, - 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x80, - 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x07,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff, - 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xf8,0xff,0xff, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xf0,0xff,0xff,0xff, - 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00, - 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x07,0x00,0x00,0x00, - 0xf8,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x03,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff, - 0x03,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfe,0xff,0xff,0x01,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x01,0x00,0x00,0x00,0xfe,0xff,0xff, - 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, - 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x00,0x00,0x00, - 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff, - 0x7f,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0xff,0x7f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff, - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x1f,0x00,0x00, - 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0, - 0xff,0x1f,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00, - 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xf0,0xff,0x0f,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff, - 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00, - 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x07,0x00,0x00,0x00,0xf8,0xff, - 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x07,0x00, - 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, - 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xe0,0xff,0x03,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfe,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xe0,0xff,0x01,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff, - 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00, - 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x01,0x00,0x00,0x00,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x07,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x00, - 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00, - 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x80,0x7f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xfe,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x80,0x7f,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07, - 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3f,0x00,0x00,0x00,0xe0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x80,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x0f,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f, - 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, - 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x80,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x07,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x80,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0xf8,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x1f,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, - 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x3f,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x06,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0xf0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xfc, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00, - 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00,0x00, - 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd, - 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xfd,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00,0x00,0x00,0xc0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00, - 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xfd,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0xf8, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00, - 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0x00, - 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0x00,0x00,0x00,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfc, - 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x3f,0xfc,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfc,0x00,0x00,0x00,0x00,0xf8,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfc,0x00,0x00,0x00, - 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, - 0xfc,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x1f,0xfc,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xfc,0x00,0x00,0x00,0x00,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xfc,0x00,0x00, - 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x0f,0xfc,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x0f,0xfc,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0xfc,0x00,0x00,0x00,0xe0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0xfc,0x00, - 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x07,0xfc,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x07,0xfc,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xfc,0x00,0x00,0x00,0xf8, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xfc, - 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x03,0xfc,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xfc,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xfc,0x00,0x00,0x00, - 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0xfc,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00,0xfc,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xfc,0x00,0x00,0x80,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0xfc,0x00,0x00, - 0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, - 0x00,0xfc,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x3f,0x00,0xfc,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0xfc,0x00,0x00,0xe0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0xfc,0x00, - 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x1f,0x00,0xfc,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x1f,0x00,0xfc,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0xfc,0x00,0x00,0xf8,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0xfc, - 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x0f,0x00,0xfc,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x07,0x00,0xfc,0x00,0x00,0xfe,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0xfc,0x00,0x00,0xfe, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00, - 0xfc,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x03,0x00,0xfc,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0xfc,0x00,0x80,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0xfc,0x00,0x80, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0xfc,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00,0x00,0xfc,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xfc,0x00,0xe0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xfc,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f, - 0x00,0x00,0xfc,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x3f,0x00,0x00,0xfc,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xfc,0x00,0xf0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xfc, - 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x0f,0x00,0x00,0xfc,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xfc,0x00,0xf8,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xfc,0x00,0xfc,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00, - 0xfc,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x03,0x00,0x00,0xfc,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xfc,0x00,0xfe,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xfc,0x00,0xfe, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00, - 0x00,0xfc,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x7f,0x00,0x00,0x00,0xfc,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xfc,0x00,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xfc,0x80, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00, - 0x00,0x00,0xfc,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x1f,0x00,0x00,0x00,0xfc,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xfc,0xc0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xfc, - 0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07, - 0x00,0x00,0x00,0xfc,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xfc,0xc0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xfc,0xe0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00, - 0xfc,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x01,0x00,0x00,0x00,0xfc,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfc,0xf0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xfc,0xf0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00, - 0x00,0xfc,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x3f,0x00,0x00,0x00,0x00,0xfc,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0xfc,0xf8,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xfc,0xf8, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, - 0x00,0x00,0xfc,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x07,0x00,0x00,0x00,0x00,0xfc,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xfc,0xf8,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0xfc, - 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00, - 0x00,0x00,0x00,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00, - 0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00, - 0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00, - 0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07, - 0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x7f,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0xfc,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x7f,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0xf8, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x0f,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xe0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00, - 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0xe0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x01,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x03,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0xc0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x07, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00, - 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x7f,0x00,0x00,0x00,0xc0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, - 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xc0,0x0f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x01,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xe0, - 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x80,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x80,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00, - 0xfc,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x80,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x01,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x80, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff, - 0x7f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x80,0xff,0x7f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00, - 0x80,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x80,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x3f,0x00,0x00,0x00,0xc0,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, - 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xe0,0xff,0xff,0x01,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff, - 0xff,0x7f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xf0,0xff,0xff, - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8, - 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, - 0x00,0xf8,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x07,0x00,0x00,0x00,0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x3f,0x00, - 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xfc,0xff,0xff,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff, - 0xff,0xff,0x3f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xfe,0xff, - 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00, - 0x00,0x00,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xc0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff, - 0xff,0x7f,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x1f, - 0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, - 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x0f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0x1f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xc0,0xff, - 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xe0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00, - 0x00,0x00,0xe0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xe0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff, - 0xff,0xff,0x0f,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff, - 0x0f,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0, - 0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, - 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xf8, - 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xe0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x01, - 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x07,0x00,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x3f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff, - 0xff,0x07,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, - 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xf0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x03,0x00, - 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff, - 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff, - 0xff,0xff,0x03,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xe0,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xe0,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff, - 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xfc, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xf8,0xff, - 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff, - 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x01, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff, - 0xff,0xff,0xff,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xf8,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, - 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00, - 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x3f,0x00,0x00,0x00,0xfc, - 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff, - 0x3f,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x3f, - 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xf0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff, - 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf8,0xff,0xff,0x1f,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xf0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x80,0xff,0xff, - 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x0f,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, - 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x07,0x00,0x00, - 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x07,0x00,0x00,0x00, - 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, - 0xff,0x01,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff, - 0x01,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xe0,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff, - 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x7f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xc0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xf8,0xff, - 0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x80,0xff,0xff,0xff, - 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, - 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x80,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff, - 0xff,0x1f,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x80,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x80,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff, - 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x03, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x80, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x03,0x00, - 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xc0,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0xf0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, - 0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x1f,0x00, - 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xfe,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff, - 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xfc,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xe0,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x7f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00, - 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x7f,0x00, - 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xf8,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, - 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x07,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xf0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xc0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x01,0x00,0x00,0x00,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x7f,0x00, - 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xe0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfe,0x1f,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x1f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00, - 0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x80,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x7f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff, - 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xf8,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xfe,0xff,0xff,0xff,0xff, - 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xfc, - 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x01,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff, - 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfe,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xf0,0xff,0xff,0xff, - 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00, - 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x07,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff, - 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff, - 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xc0,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xc0,0xff,0xff, - 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00, - 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x0f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8, - 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff, - 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xf8,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfe, - 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x7f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x1f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xf0,0xff,0xff,0xff, - 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x80,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, - 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff, - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x80,0xff,0xff, - 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00, - 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff, - 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0xf8, - 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00, - 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x7f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff, - 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00, - 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff, - 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0xf8,0xff, - 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x80, - 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff, - 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00, - 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00, - 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, - 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff, - 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe, - 0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x80,0x0f,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0xc0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x80, - 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xfc}; diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt deleted file mode 100644 index 8392da7cec..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt +++ /dev/null @@ -1,42 +0,0 @@ - - ####################################################################### - ### The following text is the original 'license.terms' of iwidgets ### - ### extension. ### - ### Original Tcl source files are not include in this directory, ### - ### because of all of them are rewritten to Ruby files. ### - ### However, the image data files in the 'images' directory are ### - ### quoted from iwidgets source archive. ### - ####################################################################### - - -This software is copyrighted by DSC Technologies and private individual -contributors. The copyright holder is specifically listed in the header -of each file. The following terms apply to all files associated with the -software unless explicitly disclaimed in individual files by private -contributors. - -Copyright 1997 DSC Technologies Corporation - -Permission to use, copy, modify, distribute and license this software and -its documentation for any purpose, and without fee or written agreement -with DSC, is hereby granted, provided that the above copyright notice -appears in all copies and that both the copyright notice and warranty -disclaimer below appear in supporting documentation, and that the names of -DSC Technologies Corporation or DSC Communications Corporation not be used -in advertising or publicity pertaining to the software without specific, -written prior permission. - -DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON-INFRINGEMENT. -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND -DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, -ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL DSC BE LIABLE FOR ANY -SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -RESTRICTED RIGHTS: Use, duplication or disclosure by the government -is subject to the restrictions as set forth in subparagraph (c) (1) (ii) -of the Rights in Technical Data and Computer Software Clause as DFARS -252.227-7013 and FAR 52.227-19. diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm deleted file mode 100644 index 7498e15de2..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm +++ /dev/null @@ -1,14 +0,0 @@ -#define Tool_32_box_width 32 -#define Tool_32_box_height 32 -static unsigned char Tool_32_box_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x20, 0x00, 0x00, 0x08, - 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, - 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, - 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, - 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, - 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, - 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif deleted file mode 100644 index bd45628aa7..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/close.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/close.gif deleted file mode 100644 index f91b9e9d1e..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/close.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif deleted file mode 100644 index 7319f1dcb0..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif deleted file mode 100644 index 4258b17591..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif deleted file mode 100644 index e462be033f..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/find.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/find.gif deleted file mode 100644 index dddcb8044b..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/find.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/help.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/help.gif deleted file mode 100644 index bc8f18c00d..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/help.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm deleted file mode 100644 index 4622ae978b..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm +++ /dev/null @@ -1,14 +0,0 @@ -#define lineOp_width 32 -#define lineOp_height 32 -static unsigned char lineOp_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, - 0x80, 0x07, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x00, 0x3c, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, - 0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, - 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x3c, 0x00, - 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xe0, 0x01, - 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif deleted file mode 100644 index 4a5be66e76..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/new.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/new.gif deleted file mode 100644 index 9c68ad35f5..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/new.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/open.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/open.gif deleted file mode 100644 index bed862c8c4..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/open.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm deleted file mode 100644 index 856bd43785..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm +++ /dev/null @@ -1,14 +0,0 @@ -#define ovalOp_width 32 -#define ovalOp_height 32 -static unsigned char ovalOp_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, - 0x00, 0x1c, 0x70, 0x00, 0x00, 0x03, 0x80, 0x01, 0x80, 0x00, 0x00, 0x02, - 0x40, 0x00, 0x00, 0x04, 0x20, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x10, - 0x10, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20, - 0x08, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x10, - 0x10, 0x00, 0x00, 0x10, 0x20, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x04, - 0x80, 0x00, 0x00, 0x02, 0x00, 0x03, 0x80, 0x01, 0x00, 0x1c, 0x70, 0x00, - 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif deleted file mode 100644 index 9974f23bf5..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm deleted file mode 100644 index c50aa4c5f3..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm +++ /dev/null @@ -1,14 +0,0 @@ -#define dotPencilOp_width 32 -#define dotPencilOp_height 32 -static unsigned char dotPencilOp_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x12, 0x00, - 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x80, 0x04, 0x00, - 0x00, 0x80, 0x04, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x20, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, - 0x00, 0x90, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, - 0x00, 0x24, 0x00, 0x18, 0x00, 0x24, 0x00, 0x18, 0x00, 0x12, 0x00, 0x00, - 0x00, 0x12, 0x00, 0x30, 0x00, 0x0e, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x06, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x30, 0xa0, 0x01, - 0x00, 0x60, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif deleted file mode 100644 index 2b595bb9b7..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/print.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/print.gif deleted file mode 100644 index d321f17457..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/print.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif deleted file mode 100644 index 00d26febf6..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/save.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/save.gif deleted file mode 100644 index d1ceb1a5c4..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/save.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/select.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/select.gif deleted file mode 100644 index f885c9ca5f..0000000000 Binary files a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/select.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm deleted file mode 100644 index ffb0686303..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm +++ /dev/null @@ -1,14 +0,0 @@ -#define font_edit_width 32 -#define font_edit_height 32 -static unsigned char font_edit_bits[] = { - 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x80, 0x7b, - 0x00, 0x00, 0x80, 0x7e, 0x00, 0x00, 0xc0, 0xfd, 0x00, 0x00, 0x60, 0xfb, - 0x00, 0x00, 0xb0, 0xf7, 0x00, 0x00, 0xd0, 0xef, 0x00, 0x00, 0xf8, 0xdf, - 0x00, 0x00, 0xd4, 0x7f, 0x00, 0x00, 0xaa, 0x1f, 0x00, 0x00, 0x15, 0x0f, - 0x00, 0x80, 0x82, 0x06, 0x03, 0x40, 0x01, 0x01, 0x07, 0xa0, 0x80, 0x00, - 0x0f, 0x10, 0x40, 0x00, 0x1f, 0x08, 0x20, 0x00, 0x3b, 0xe4, 0x1f, 0x00, - 0x73, 0x1a, 0x00, 0x00, 0xe3, 0x07, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x00, - 0xe3, 0x03, 0x00, 0x00, 0x7b, 0x07, 0x00, 0x00, 0x1f, 0x06, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb deleted file mode 100644 index c64c3f0247..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -# sample 1 -p bb1 = Tk::Iwidgets::Buttonbox.new -p bb1.add('Yes', :text=>'Yes', :command=>proc{puts 'Yes'}) -p bb1.add('No', :text=>'No', :command=>proc{puts 'No'}) -p bb1.add('Maybe', :text=>'Maybe', :command=>proc{puts 'Maybe'}) -bb1.default('Yes') -bb1.pack(:expand=>true, :fill=>:both, :pady=>5) -print "\n" - -# sample 2 -p bb2 = Tk::Iwidgets::Buttonbox.new -p btn1 = bb2.add(:text=>'Yes', :command=>proc{puts 'Yes'}) -p btn2 = bb2.add(:text=>'No', :command=>proc{puts 'No'}) -p btn3 = bb2.add(:text=>'Maybe', :command=>proc{puts 'Maybe'}) -bb2.default(btn1) -bb2.pack(:expand=>true, :fill=>:both, :pady=>5) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb b/ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb deleted file mode 100644 index 4093997029..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Tk::Iwidgets::Calendar.new(:command=>proc{|arg| puts(arg.date)}, - :weekendbackground=>'mistyrose', - :weekdaybackground=>'ghostwhite', - :outline=>'black', :startday=>'wednesday', - :days=>%w(We Th Fr Sa Su Mo Tu)).pack -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb deleted file mode 100644 index 1680aae695..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Tk::Iwidgets::Canvasprintbox.new(:orient=>:landscape, :stretch=>1) \ - .pack(:padx=>10, :pady=>10, :fill=>:both, :expand=>true) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb deleted file mode 100644 index 1bedf2c543..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Tk::Iwidgets::Canvasprintdialog.new.activate - -Tk.mainloop - diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb deleted file mode 100644 index bd0a21fd7f..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -cb = Tk::Iwidgets::Checkbox.new -cb.add('bold', :text=>'Bold') -cb.add('italic', :text=>'Italic') -cb.add('underline', :text=>'Underline') -cb.select('underline') -cb.pack(:expand=>true, :fill=>:both, :padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb deleted file mode 100644 index 1ce2c9085e..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -# -# Non-editable Dropdown Combobox -# -cb1 = Tk::Iwidgets::Combobox.new(:labeltext=>'Month:', - :selectioncommand=>proc{ - puts(cb1.get_curselection) - }, - :editable=>false, :listheight=>185, - :popupcursor=>'hand1') - -cb1.insert_list('end', *%w(Jan Feb Mar Apr May June Jul Aug Sept Oct Nov Dec)) - - -# -# Editable Dropdown Combobox -# -cb2 = Tk::Iwidgets::Combobox.new(:labeltext=>'Operating System:', - :selectioncommand=>proc{ - puts(cb2.get_curselection) - }) - -cb2.insert_list('end', *%w(Linux HP-UX SunOS Solaris Irix)) -cb2.insert_entry('end', 'L') - -cb1.pack(:padx=>10, :pady=>10, :fill=>:x) -cb2.pack(:padx=>10, :pady=>10, :fill=>:x) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb b/ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb deleted file mode 100644 index 873f702cb5..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Tk::Iwidgets::Dateentry.new.pack - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb b/ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb deleted file mode 100644 index 30c72a1351..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -df = Tk::Iwidgets::Datefield.new(:command=>proc{puts(df.get)}) -df.pack(:fill=>:x, :expand=>true, :padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb deleted file mode 100644 index f9ceffb201..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Thread.new{Tk.mainloop} - -d = Tk::Iwidgets::Dialog.new(:modality=>:application) - -d.buttonconfigure('OK', :command=>proc{puts 'OK'; d.deactivate true}) -d.buttonconfigure('Apply', :command=>proc{puts 'Apply'}) -d.buttonconfigure('Cancel', :command=>proc{puts 'Cancel'; d.deactivate false}) -d.buttonconfigure('Help', :command=>proc{puts 'Help'}) - -TkListbox.new(d.child_site, :relief=>:sunken).pack(:expand=>true, :fill=>:both) - -if TkComm.bool(d.activate) - puts "Exit via OK button" -else - puts "Exit via Cancel button" -end diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb b/ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb deleted file mode 100644 index 240768a259..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -ds = Tk::Iwidgets::Dialogshell.new(:modality=>:none) - -ds.add('OK', :text=>'OK', :command=>proc{puts 'OK'; ds.deactivate}) -ds.add('Cancel', :text=>'Cancel', :command=>proc{puts 'Cancel'; ds.deactivate}) -ds.default('OK') - -TkButton.new(:text=>'ACTIVATE', :padx=>7, :pady=>7, - :command=>proc{puts ds.activate}).pack(:padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb deleted file mode 100644 index 151a06f8da..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -djl = Tk::Iwidgets::Disjointlistbox.new.pack(:fill=>:both, :expand=>true, - :padx=>10, :pady=>10) -djl.set_lhs(*[0,2,4,5]) -djl.set_rhs(3,6) - -djl.insert_lhs(1,7,8) -djl.insert_rhs(9) - -p djl.get_lhs -p djl.get_rhs - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.rb b/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.rb deleted file mode 100644 index 1bb68d7434..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.rb +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -######################################################### -# -# use Tk::UTF8_String() for a utf8 character -# -######################################################### -require 'tk' -require 'tkextlib/iwidgets' - -TkOption.add('*textBackground', 'white') - -ef = Tk::Iwidgets::Entryfield.new(:command=>proc{puts "Return Pressed"}) - -fef = Tk::Iwidgets::Entryfield.new(:labeltext=>'Fixed:', - :fixed=>10, :width=>12) - -nef = Tk::Iwidgets::Entryfield.new(:labeltext=>'Numeric:', - :validate=>:numeric, :width=>12) - -aef = Tk::Iwidgets::Entryfield.new(:labeltext=>'Alphabetic:', - :validate=>:alphabetic, :width=>12, - :invalid=>proc{ - puts "Alphabetic contents invalid" - }) - -pef = Tk::Iwidgets::Entryfield.new(:labeltext=>'Password:', :width=>12, - :show=>Tk::UTF8_String("\267"), - ## <=== utf8 character - :command=>proc{puts "Return Pressed"}) - -Tk::Iwidgets::Labeledwidget.alignlabels(ef, fef, nef, aef, pef) - -ef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) -fef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) -nef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) -aef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) -pef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb b/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb deleted file mode 100644 index 0b75e56f9a..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -######################################################### -# -# set $KCODE to 'utf' for a utf8 character -# -######################################################### -unless defined?(::Encoding.default_external) - $KCODE='utf' -else - DEFAULT_TK_ENCODING = 'UTF-8' -end - -require 'tk' -require 'tkextlib/iwidgets' - -TkOption.add('*textBackground', 'white') - -ef = Tk::Iwidgets::Entryfield.new(:command=>proc{puts "Return Pressed"}) - -fef = Tk::Iwidgets::Entryfield.new(:labeltext=>'Fixed:', - :fixed=>10, :width=>12) - -nef = Tk::Iwidgets::Entryfield.new(:labeltext=>'Numeric:', - :validate=>:numeric, :width=>12) - -aef = Tk::Iwidgets::Entryfield.new(:labeltext=>'Alphabetic:', - :validate=>:alphabetic, :width=>12, - :invalid=>proc{ - puts "Alphabetic contents invalid" - }) - -pef = Tk::Iwidgets::Entryfield.new(:labeltext=>'Password:', :width=>12, - :show=>"\267", ## <=== utf8 character - :command=>proc{puts "Return Pressed"}) - -Tk::Iwidgets::Labeledwidget.alignlabels(ef, fef, nef, aef, pef) - -ef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) -fef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) -nef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) -aef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) -pef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb b/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb deleted file mode 100644 index 2aad4da2d8..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -######################################################### -# -# set Tk.encoding = 'utf-8' for a utf8 character -# -######################################################### -require 'tk' -require 'tkextlib/iwidgets' - -Tk.encoding = 'utf-8' - -TkOption.add('*textBackground', 'white') - -ef = Tk::Iwidgets::Entryfield.new(:command=>proc{puts "Return Pressed"}) - -fef = Tk::Iwidgets::Entryfield.new(:labeltext=>'Fixed:', - :fixed=>10, :width=>12) - -nef = Tk::Iwidgets::Entryfield.new(:labeltext=>'Numeric:', - :validate=>:numeric, :width=>12) - -aef = Tk::Iwidgets::Entryfield.new(:labeltext=>'Alphabetic:', - :validate=>:alphabetic, :width=>12, - :invalid=>proc{ - puts "Alphabetic contents invalid" - }) - -pef = Tk::Iwidgets::Entryfield.new(:labeltext=>'Password:', :width=>12, - :show=>"\267", ## <=== utf8 character - :command=>proc{puts "Return Pressed"}) - -Tk::Iwidgets::Labeledwidget.alignlabels(ef, fef, nef, aef, pef) - -ef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) -fef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) -nef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) -aef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) -pef.pack(:fil=>:x, :expand=>true, :padx=>10, :pady=>5) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb b/ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb deleted file mode 100644 index fbacebc563..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Tk::Iwidgets::Extbutton.new(:text=>'Bitmap example', :bitmap=>'info', - :background=>'bisque', :activeforeground=>'red', - :bitmapforeground=>'blue', :defaultring=>true, - :command=>proc{ - puts "Bisque is beautiful" - }).pack(:expand=>true) - -#img = TkPhotoImage.new(:file=>File.join(File.dirname(File.expand_path(__FILE__)), '../../../images/earthris.gif')) -img = TkPhotoImage.new(:file=>File.join(File.dirname(File.expand_path(__FILE__)), '../catalog_demo/images/clear.gif')) - -Tk::Iwidgets::Extbutton.new(:text=>'Image example', :relief=>:ridge, - :image=>img, :imagepos=>:e, :font=>'9x15bold', - :activebackground=>'lightyellow', - :background=>'lightgreen').pack(:expand=>true) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb deleted file mode 100644 index 2eb0c7aca0..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Tk::Iwidgets::Extfileselectionbox.new.pack(:padx=>10, :pady=>10, - :fill=>:both, :expand=>true) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb deleted file mode 100644 index 24a32da49a..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -mainloop = Thread.new{Tk.mainloop} - -# -# Non-modal example -# -nmfsd = Tk::Iwidgets::Extfileselectiondialog.new(:title=>'Non-Modal') -nmfsd.buttonconfigure('OK', :command=>proc{ - puts "You selected #{nmfsd.get}" - nmfsd.deactivate - }) -nmfsd.activate - -# -# Modal example -# -mfsd = Tk::Iwidgets::Extfileselectiondialog.new(:modality=>:application) -mfsd.center -if TkComm.bool(mfsd.activate) - puts "You selected #{mfsd.get}" -else - puts "You cancelled the dialog" -end - - -mainloop.join diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb b/ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb deleted file mode 100644 index 27fe625a5d..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Tk::Iwidgets::Feedback.new(:labeltext=>'Status', :steps=>20){|fb| - pack(:padx=>10, :pady=>10, :fill=>:both, :expand=>true) - TkTimer.new(500, 20, proc{fb.step}).start(2500) -} - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb deleted file mode 100644 index c87ee27a6c..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Tk::Iwidgets::Fileselectionbox.new.pack(:padx=>10, :pady=>10, - :fill=>:both, :expand=>true) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb deleted file mode 100644 index 1585bd4639..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -mainloop = Thread.new{Tk.mainloop} - -# -# Non-modal example -# -nmfsd = Tk::Iwidgets::Fileselectiondialog.new(:title=>'Non-Modal') -nmfsd.buttonconfigure('OK', :command=>proc{ - puts "You selected #{nmfsd.get}" - nmfsd.deactivate - }) -nmfsd.activate - -# -# Modal example -# -mfsd = Tk::Iwidgets::Fileselectiondialog.new(:modality=>:application) -mfsd.center -if TkComm.bool(mfsd.activate) - puts "You selected #{mfsd.get}" -else - puts "You cancelled the dialog" -end - -mainloop.join diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb deleted file mode 100644 index a32a08ffbf..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -mainloop = Thread.new{Tk.mainloop} - -st = Tk::Iwidgets::Scrolledtext.new.pack -st.insert('end', "Now is the time for all good men\n") -st.insert('end', "to come to the aid of their country") - -fd = Tk::Iwidgets::Finddialog.new(:textwidget=>st) -fd.center(st) -fd.activate - -mainloop.join diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb b/ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb deleted file mode 100644 index bb65a66b4d..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -def get_files(file) - dir = (file.empty?)? ENV['HOME'] : TkComm._fromUTF8(file) - Dir.chdir(dir) rescue return '' - Dir['*'].sort.collect{|f| - [TkComm._toUTF8(File.join(dir, f)), TkComm._toUTF8(f)] - } -end - -Tk::Iwidgets::Hierarchy.new(:querycommand=>proc{|arg| get_files(arg.node)}, - :visibleitems=>'30x15', - :labeltext=>ENV['HOME']).pack(:side=>:left, - :expand=>true, - :fill=>:both) - -# Tk::Iwidgets::Hierarchy.new(:querycommand=>[proc{|n| get_files(n)}, '%n'], -# :visibleitems=>'30x15', -# :labeltext=>ENV['HOME']).pack(:side=>:left, -# :expand=>true, -# :fill=>:both) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb b/ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb deleted file mode 100644 index dcda4030f3..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -mainloop = Thread.new{Tk.mainloop} - -dir = '/usr/local/ActiveTcl/demos/IWidgets/html/' -href = [ 'hyperhelp.n', 'buttonbox.n', 'calendar.n' ] - -hh = Tk::Iwidgets::Hyperhelp.new(:topics=>href, :helpdir=>dir) -hh.show_topic('hyperhelp.n') -hh.activate - -mainloop.join diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb b/ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb deleted file mode 100644 index 52bf957208..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -lf = Tk::Iwidgets::Labeledframe.new(:labeltext=>'Entry Frame', :labelpos=>:n) -lf.pack(:fill=>:both, :expand=>true, :padx=>10, :pady=>10) - -cs = lf.child_site - -Tk::Iwidgets::Entryfield.new(cs, :labeltext=>'Name:').pack(:side=>:top, :fill=>:x) -Tk::Iwidgets::Spinint.new(cs, :labeltext=>'Number:').pack(:side=>:top, :fill=>:x) -Tk::Iwidgets::Pushbutton.new(cs, :text=>'Details:').pack(:side=>:top, :fill=>:x) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb b/ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb deleted file mode 100644 index 8b45d2bcb0..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -lw = Tk::Iwidgets::Labeledwidget.new(:labeltext=>'Canvas Widget', - :labelpos=>:s) -lw.pack(:fill=>:both, :expand=>true, :padx=>10, :pady=>10) - -cw = TkCanvas.new(lw.child_site, :relief=>:raised, :width=>200, :height=>200, - :borderwidth=>3, :background=>:white) -cw.pack(:padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb b/ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb deleted file mode 100644 index 3e5e511a1e..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -mw = Tk::Iwidgets::Mainwindow.new - -mw.menubar.add(:menubutton, 'file', :text=>'File', :underline=>0, - :padx=>8, :pady=>2, :menu=>[ - [:options, {:tearoff=>false}], - - [:command, 'new', { - :label=>'New', :underline=>0, - :helpstr=>'Create a new file' - } - ], - - [:command, 'open', { - :label=>'Open ...', :underline=>0, - :helpstr=>'Open an existing file' - } - ], - - [:command, 'save', { - :label=>'Save', :underline=>0, - :helpstr=>'Save the current file' - } - ], - - [:command, 'saveas', { - :label=>'Save As', :underline=>5, - :helpstr=>'Save the file as a different name' - } - ], - - [:command, 'print', { - :label=>'Print', :underline=>0, - :helpstr=>'Print the file' - } - ], - - [:separator, 'sep1'], - - [:command, 'close', { - :label=>'Close', :underline=>0, - :helpstr=>'Close the file' - } - ], - - [:separator, 'sep2'], - - [:command, 'exit', { - :label=>'Exit', :underline=>1, - :helpstr=>'Exit this application' - } - ], - - nil - ]) - -Tk::Iwidgets::Scrolledtext.new(mw.child_site).pack(:fill=>:both, :expand=>true) - -mw.activate - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb b/ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb deleted file mode 100644 index 389a622966..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -helpvar = TkVariable.new -viewmode = TkVariable.new - -menu_spec = [ - [:menubutton, 'file', { - :text=>'File', :menu=>[ - [:options, {:tearoff=>false}], - - [:command, 'new', { - :label=>'New', :helpstr=>'Open new document', - :command=>proc{puts 'NEW'} - } - ], - - [:command, 'close', { - :label=>'Close', :helpstr=>'Close current document', - :command=>proc{puts 'CLOSE'} - } - ], - - [:separator, 'sep1'], - - [:command, 'exit', { - :label=>'Exit', :helpstr=>'Exit application', - :command=>proc{exit} - } - ] - ] - } - ], - - [:menubutton, 'edit', { - :text=>'Edit', :menu=>[ - [:options, {:tearoff=>false}], - - [:command, 'undo', { - :label=>'Undo', :underline=>0, - :helpstr=>'Undo last command', - :command=>proc{puts 'UNDO'} - } - ], - - [:separator, 'sep2'], - - [:command, 'cut', { - :label=>'Cut', :underline=>1, - :helpstr=>'Cut selection to clipboard', - :command=>proc{puts 'CUT'} - } - ], - - [:command, 'copy', { - :label=>'Copy', :underline=>1, - :helpstr=>'Copy selection to clipboard', - :command=>proc{puts 'COPY'} - } - ], - - [:command, 'paste', { - :label=>'Paste', :underline=>0, - :helpstr=>'Paste clipboard contents', - :command=>proc{puts 'PASTE'} - } - ] - ] - } - ], - - [:menubutton, 'options', { - :text=>'Options', :menu=>[ - [:options, {:tearoff=>false, :selectcolor=>'blue'}], - - [:radiobutton, 'byName', { - :variable=>viewmode, :value=>'NAME', - :label=>'by Name', :helpstr=>'View files by name order', - :command=>proc{puts 'NAME'} - } - ], - - [:radiobutton, 'byDate', { - :variable=>viewmode, :value=>'DATE', - :label=>'by Date', :helpstr=>'View files by date order', - :command=>proc{puts 'DATE'} - } - ], - - [:cascade, 'prefs', { - :label=>'Preferences', :menu=>[ - [:command, 'colors', { - :label=>'Colors...', :helpstr=>'Change text colors', - :command=>proc{puts 'COLORS'} - } - ], - - [:command, 'fonts', { - :label=>'Fonts...', :helpstr=>'Change text font', - :command=>proc{puts 'COLORS'} - } - ] - ] - } - ] - ] - } - ] -] - -#mb = Tk::Iwidgets::Menubar.new(:helpvariable=>helpvar, -# :menubuttons=>menu_spec) -mb = Tk::Iwidgets::Menubar.new(:helpvariable=>helpvar) -mb.configure(:menubuttons=>menu_spec) - -fr = TkFrame.new(:width=>300, :height=>300) -ef = TkEntry.new(:textvariable=>helpvar) - -mb.pack(:anchor=>:nw, :fill=>:x, :expand=>true) -fr.pack(:fill=>:both, :expand=>true) -ef.pack(:anchor=>:sw, :fill=>:x, :expand=>true) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb b/ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb deleted file mode 100644 index c3fd8bc35d..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -helpvar = TkVariable.new -viewmode = TkVariable.new - -mb = Tk::Iwidgets::Menubar.new -mb.menubuttons = [ - [:menubutton, 'file', { - :text=>'File', :menu=>[ - [:command, 'new', {:label=>'New'}], - [:command, 'close', {:label=>'Close'}], - [:separator, 'sep1'], - [:command, 'quit', {:label=>'Quit'}] - ] - } - ], - [:menubutton, 'edit', {:text=>'Edit'}] -] - -mb.add(:command, '.edit.undo', :label=>'Undo', :underline=>0) -mb.add(:separator, '.edit.sep2') -mb.add(:command, '.edit.cut', :label=>'Cut', :underline=>1) -mb.add(:command, '.edit.copy', :label=>'Copy', :underline=>1) -mb.add(:command, '.edit.paste', :label=>'Paste', :underline=>0) - -mb.add(:menubutton, '.options', :text=>'Options', :menu=>[ - [:radiobutton, 'byName', { - :variable=>viewmode, :value=>'NAME', :label=>'by Name'} - ], - [:radiobutton, 'byDate', { - :variable=>viewmode, :value=>'DATE', :label=>'by Date'} - ] - ]) - -mb.add(:cascade, '.options.prefs', :label=>'Preferences', :menu=>[ - [:command, 'colors', {:label=>'Colors...'}], - [:command, 'fonts', {:label=>'Fonts...'}] - ]) - -mb.pack(:side=>:left, :anchor=>:nw, :fill=>:x, :expand=>true) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb b/ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb deleted file mode 100644 index 8f51ab754f..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -mb = Tk::Iwidgets::Messagebox.new(:hscrollmode=>:dynamic, - :labeltext=>'Messages', :labelpos=>:n, - :height=>120, :width=>550, - :savedir=>'/tmp', :textbackground=>'#d9d9d9') -mb.pack(:padx=>5, :pady=>5, :fill=>:both, :expand=>true) - -mb.type_add('ERROR', :background=>'red', :foreground=>'white', :bell=>true) -mb.type_add('WARNING', :background=>'yellow', :foreground=>'black') -mb.type_add('INFO', :background=>'white', :foreground=>'black') - -mb.issue('This is an error message in red with a beep', 'ERROR') -mb.issue('This warning message in yellow', 'WARNING') -mb.issue('This is an informational message', 'INFO') - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb b/ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb deleted file mode 100644 index 9bb15ebec2..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -mb = Tk::Iwidgets::Messagebox.new(:hscrollmode=>:dynamic, - :labeltext=>'Messages', :labelpos=>:n, - :height=>120, :width=>550, - :savedir=>'/tmp', :textbackground=>'#d9d9d9') -mb.pack(:padx=>5, :pady=>5, :fill=>:both, :expand=>true) - -error = mb.type_add(:background=>'red', :foreground=>'white', :bell=>true) -warning = mb.type_add(:background=>'yellow', :foreground=>'black') -info = mb.type_add(:background=>'white', :foreground=>'black') - -mb.issue('This is an error message in red with a beep', error) -mb.issue('This warning message in yellow', warning) -mb.issue('This is an informational message', info) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb deleted file mode 100644 index ca73ed54d2..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -mainloop = Thread.new{Tk.mainloop} - -# -# Standard question message dialog used for confirmation. -# -md = Tk::Iwidgets::Messagedialog.new(:title=>'Message Dialog', - :text=>'Are you sure ? ', - :bitmap=>'questhead', :modality=>:global) - -md.buttonconfigure('OK', :text=>'Yes') -md.buttonconfigure('Cancel', :text=>'No') - -if TkComm.bool(md.activate) - md.text('Are you really sure ? ') - if TkComm.bool(md.activate) - puts 'Yes' - else - puts 'No' - end -else - puts 'No' -end - -md.destroy - -# -# Copyright notice with automatic deactivation. -# -bmp = '@' + File.join(File.dirname(File.expand_path(__FILE__)), '../catalog_demo/images/text.xbm') - -cr = Tk::Iwidgets::Messagedialog.new(:title=>'Copyright', - :bitmap=>bmp, :imagepos=>:n, - :text=>"Copyright 200x XXX Corporation\nAll rights reserved") - -cr.hide('Cancel') - -cr.activate -Tk.after(7000, proc{cr.deactivate; Tk.root.destroy}) - -mainloop.join diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb b/ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb deleted file mode 100644 index 4305db4f5c..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -# Create the tabnotebook widget and pack it. -nb = Tk::Iwidgets::Notebook.new(:width=>100, :height=>100) -nb.pack(:anchor=>:nw, :fill=>:both, :expand=>true, - :side=>:left, :padx=>10, :pady=>10) - -# Add two pages to the tabnotebook, -# labelled "Page One" and "Page Two" -nb.add(:label=>'Page One') -nb.add(:label=>'Page Two') - -# Get the child site frames of these two pages. -page1CS = nb.child_site(0) -page2CS = nb.child_site('Page Two') - -# Create buttons on each page of the tabnotebook. -TkButton.new(page1CS, :text=>'Button One').pack -TkButton.new(page2CS, :text=>'Button Two').pack - -# Select the first page of the tabnotebook. -nb.select(0) - -# Create the scrollbar and associate the scrollbar -# and the notebook together, then pack the scrollbar -nb.scrollbar(TkScrollbar.new).pack(:fill=>:y, :expand=>true, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb b/ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb deleted file mode 100644 index a3b00b2a87..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -# Create the tabnotebook widget and pack it. -nb = Tk::Iwidgets::Notebook.new(:width=>100, :height=>100) -nb.pack(:anchor=>:nw, :fill=>:both, :expand=>true, - :side=>:top, :padx=>10, :pady=>0) - -# Add two pages to the tabnotebook, -# labelled "Page One" and "Page Two" -nb.add(:label=>'Page One') -nb.add(:label=>'Page Two') - -# Get the child site frames of these two pages. -page1CS = nb.child_site(0) -page2CS = nb.child_site('Page Two') - -# Create buttons on each page of the tabnotebook. -TkButton.new(page1CS, :text=>'Button One').pack -TkButton.new(page2CS, :text=>'Button Two').pack - -# Select the first page of the tabnotebook. -nb.select(0) - -# Create the scrollbar and associate the scrollbar -# and the notebook together, then pack the scrollbar -nb.xscrollbar(TkScrollbar.new).pack(:fill=>:x, :expand=>true, :padx=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb b/ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb deleted file mode 100644 index 2dc7eaf411..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -om = Tk::Iwidgets::Optionmenu.new(:labelmargin=>5, :labelpos=>:w, - :labeltext=>"Operating System :") - -om.insert('end', 'Unix', 'VMS', 'Linux', 'OS/2', 'Windows NT', 'DOS') -om.sort_ascending -om.select('Linux') - -om.pack(:padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb b/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb deleted file mode 100644 index ba36319f85..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -pw = Tk::Iwidgets::Panedwindow.new(:width=>300, :height=>300) - -pw.add('top') -pw.add('middle', :margin=>10) -pw.add('bottom', :margin=>10, :minimum=>10) - -pw.pack(:fill=>:both, :expand=>true) - -pw.child_site_list.each{|pane| - TkButton.new(pane, :text=>pane.path, :relief=>:raised, - :borderwidth=>2).pack(:fill=>:both, :expand=>true) -} - -pw.fraction(50,30,20) -pw.paneconfigure(0, :minimum=>20) -pw.paneconfigure('bottom', :margin=>15) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb b/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb deleted file mode 100644 index 4abd5f4a45..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -pw = Tk::Iwidgets::Panedwindow.new(:width=>300, :height=>300) - -top = pw.add -middle = pw.add(:margin=>10) -bottom = pw.add(:margin=>10, :minimum=>10) - -pw.pack(:fill=>:both, :expand=>true) - -pw.child_site_list.each{|pane| - TkButton.new(pane, :text=>pane.path, :relief=>:raised, - :borderwidth=>2).pack(:fill=>:both, :expand=>true) -} - -pw.fraction(50,30,20) -pw.paneconfigure(0, :minimum=>20) # 0 == pw.index(top) -pw.paneconfigure(bottom, :margin=>15) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb deleted file mode 100644 index 7f011f4833..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -mainloop = Thread.new{Tk.mainloop} - -TkOption.add('*textBackground', 'white') - -pd = Tk::Iwidgets::Promptdialog.new(:modality=>:global, :title=>'Password', - :labeltext=>'Password:', :show=>'*') -pd.hide('Apply') - -if TkComm.bool(pd.activate) - puts "Password entered: #{pd.get}" -else - puts "Password prompt cancelled" -end diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb b/ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb deleted file mode 100644 index 5d3bdc7efd..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Tk::Iwidgets::Pushbutton.new(:text=>'Hello', - :command=>proc{puts 'Hello World'}, - :defaultring=>true).pack(:padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb deleted file mode 100644 index 470ed8cee5..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -rb = Tk::Iwidgets::Radiobox.new(:labeltext=>'Fonts') -rb.add('times', :text=>'Times') -rb.add('helvetica', :text=>'Helvetica') -rb.add('courier', :text=>'Courier') -rb.add('symbol', :text=>'Symbol') -rb.select('courier') -rb.pack(:expand=>true, :fill=>:both, :padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb b/ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb deleted file mode 100644 index 85e6a47b1a..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -sc = Tk::Iwidgets::Scrolledcanvas.new - -sc.create(TkcRectangle, 100, 100, 400, 400, :fill=>'red') -TkcRectangle.new(sc, 300, 300, 600, 600, :fill=>'green') -TkcRectangle.new(sc, [[200, 200], [500, 500]], :fill=>'blue') - -sc.pack(:expand=>true, :fill=>:both, :padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb b/ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb deleted file mode 100644 index 91d22131c0..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -sf = Tk::Iwidgets::Scrolledframe.new(:width=>150, :height=>180, - :labeltext=>'scrolledframe') -cs = sf.child_site - -TkButton.new(cs, :text=>'Hello').pack(:pady=>10) -TkButton.new(cs, :text=>'World').pack(:pady=>10) -TkButton.new(cs, :text=>'This is a test').pack(:pady=>10) -TkButton.new(cs, :text=>'This is a really big button').pack(:pady=>10) -TkButton.new(cs, :text=>'This is another really big button').pack(:pady=>10) -TkButton.new(cs, :text=>'This is the last really big button').pack(:pady=>10) - -sf.pack(:expand=>true, :fill=>:both, :padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb b/ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb deleted file mode 100644 index f825483b2c..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -TkOption.add('*textBackground', 'white') - -sh = Tk::Iwidgets::Scrolledhtml.new(:fontname=>'helvetica', - :linkcommand=>proc{|href| - sh.import_link(href) - }) -sh.pack(:expand=>true, :fill=>:both, :padx=>10, :pady=>10) - -sh.import(Tk.getOpenFile(:title=>'select HTML document')) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb deleted file mode 100644 index 3872fb7d40..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -TkOption.add('*textBackground', 'white') - -slb = Tk::Iwidgets::Scrolledlistbox.new(:selectmode=>:single, - :vscrollmode=>:static, - :hscrollmode=>:dynamic, - :labeltext=>'List', - :selectioncommand=>proc{ - puts(slb.get_curselection) - }, - :dblclickcommand=>proc{ - puts('Double Click') - puts(slb.get_curselection) - }) -slb.pack(:expand=>true, :fill=>:both, :padx=>10, :pady=>10) - -slb.insert('end', *['Hello', 'Out There', 'World']) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb b/ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb deleted file mode 100644 index 4965039371..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -st = Tk::Iwidgets::Scrolledtext.new(:hscrollmode=>:dynamic, :wrap=>:none, - :labeltext=>'Password File') -st.pack(:expand=>true, :fill=>:both, :padx=>10, :pady=>10) - -st.import('/etc/passwd') - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb deleted file mode 100644 index 8c0b68a22e..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -TkOption.add('*textBackground', 'white') - -sb = Tk::Iwidgets::Selectionbox.new.pack(:padx=>10, :pady=>10, - :fill=>:both, :expand=>true) - -sb.insert_items('end', *['Hello', 'Out There', 'World']) - -TkLabel.new(sb.child_site, - :text=>'Child Site is Here').pack(:fill=>:x, :padx=>10, :pady=>10) - -sb.insert_items(2, 'Cruel Cruel') - -sb.selection_set(1) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb deleted file mode 100644 index 9fbf8b7d2a..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -mainloop = Thread.new{Tk.mainloop} - -TkButton.new(:text=>'QUIT', - :command=>proc{Tk.root.destroy}).pack(:padx=>10, :pady=>10) - -Tk::Iwidgets::Selectiondialog.new.activate - -mainloop.join diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/shell.rb b/ext/tk/sample/tkextlib/iwidgets/sample/shell.rb deleted file mode 100644 index 4cbf4416c0..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/shell.rb +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -sh = Tk::Iwidgets::Shell.new(:modality=>:application, - :padx=>20, :pady=>20, :title=>'Shell') - -TkButton.new(:text=>'ACTIVATE', :padx=>7, :pady=>7, - :command=>proc{puts sh.activate}).pack(:padx=>10, :pady=>10) - -TkLabel.new(sh.child_site, :text=>'SHELL').pack -TkButton.new(sh.child_site, :text=>'YES', - :command=>proc{sh.deactivate 'press YES'}).pack(:fill=>:x) -TkButton.new(sh.child_site, :text=>'NO', - :command=>proc{sh.deactivate 'press NO'}).pack(:fill=>:x) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb b/ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb deleted file mode 100644 index 38d9b49c86..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Tk::Iwidgets::Spindate.new.pack(:padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb b/ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb deleted file mode 100644 index 1887f46e05..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -TkOption.add('*textBackground', 'white') - -Tk::Iwidgets::Spinint.new(:labeltext=>'Temperature', :labelpos=>:w, :width=>5, - :fixed=>true, :range=>[32, 212]).pack(:pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb b/ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb deleted file mode 100644 index 2e64bdfb08..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -class Spinner_demo < TkWindow - Months = %w(January February March April May June July August September October November December) - - def block_input(c) - false - end - - def spin_month(step) - index = Months.index(@spinner.get) + step - index = 11 if index < 0 - index = 0 if index > 11 - - @spinner.value = Months[index] - end - - def initialize(parent=nil) - @spinner = Tk::Iwidgets::Spinner.new(parent, :labeltext=>'Month : ', - :width=>10, :fixed=>10, - :validate=>proc{|c| block_input}, - :decrement=>proc{spin_month -1}, - :increment=>proc{spin_month 1}) - @path = @spinner - @spinner.insert(0, Months[0]) - end -end - -Spinner_demo.new.pack(:padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb b/ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb deleted file mode 100644 index 597e7d014c..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Tk::Iwidgets::Spintime.new.pack(:padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb b/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb deleted file mode 100644 index 0c94cd1738..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -# Create the tabnotebook widget and pack it. -tn = Tk::Iwidgets::Tabnotebook.new(:width=>300, :height=>100) -tn.pack(:anchor=>:nw, :fill=>:both, :expand=>true, - :side=>:left, :padx=>10, :pady=>10) - -# Add two pages to the tabnotebook, -# labelled "Page One" and "Page Two" -tn.add(:label=>'Page One') -tn.add(:label=>'Page Two') - -# Get the child site frames of these two pages. -page1CS = tn.child_site(0) -page2CS = tn.child_site('Page Two') - -# Create buttons on each page of the tabnotebook. -TkButton.new(page1CS, :text=>'Button One').pack -TkButton.new(page2CS, :text=>'Button Two').pack - -# Select the first page of the tabnotebook. -tn.select(0) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb b/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb deleted file mode 100644 index 57f9e46214..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -# Create the tabnotebook widget and pack it. -tn = Tk::Iwidgets::Tabnotebook.new(:width=>300, :height=>100) -tn.pack(:anchor=>:nw, :fill=>:both, :expand=>true, - :side=>:top, :padx=>10, :pady=>0) - -# Add two pages to the tabnotebook, -# labelled "Page One" and "Page Two" -tn.add(:label=>'Page One') -tn.add(:label=>'Page Two') - -# Get the child site frames of these two pages. -page1CS = tn.child_site(0) -page2CS = tn.child_site('Page Two') - -# Create buttons on each page of the tabnotebook. -TkButton.new(page1CS, :text=>'Button One').pack -TkButton.new(page2CS, :text=>'Button Two').pack - -# Select the first page of the tabnotebook. -tn.select(0) - -# Create the scrollbar -# and the notebook together, then pack the scrollbar -tn.xscrollbar(TkScrollbar.new).pack(:fill=>:x, :expand=>true, :padx=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb b/ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb deleted file mode 100644 index 99d5ac6071..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -# Create a listbox with two items (one and two) -l = TkListbox.new(:selectmode=>:single, :exportselection=>false).pack -l.insert('end', 'one') -l.insert('end', 'two') -l.selection_set(0) - -# Define a proc that knows how to select an item -# from a list given an index from the tabset -command callback. -selectItem = proc{|item| - l.selection_clear(l.curselection) - l.selection_set(item) - l.see(item) -} - -# Create a tabset, set its -command to call selectItem -# Add two labels to the tabset (one and two). -ts = Tk::Iwidgets::Tabset.new(:command=>selectItem) -ts.add(:label=>1) -ts.add(:label=>2) -ts.select(0) -ts.pack(:fill=>:x, :expand=>true) - -# Define a proc that knows how to select a tab -# given a y pixel coordinate from the list.. -selectTab = proc{|y| ts.select(l.nearest(y)) } - -# bind button 1 press to the selectTab procedure. -l.bind('ButtonPress-1', proc{|y| selectTab.call(y) }, '%y') - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb b/ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb deleted file mode 100644 index 5841f0aadf..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Tk::Iwidgets::Timeentry.new.pack - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb b/ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb deleted file mode 100644 index e2824b17aa..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -tf = Tk::Iwidgets::Timefield.new(:command=>proc{puts(tf.get)}) -tf.pack(:fill=>:x, :expand=>true, :padx=>10, :pady=>10) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb b/ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb deleted file mode 100644 index 3cbaec210b..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -########################################## -# icon images -editcopy22 = TkPhotoImage.new(:data=><<'EOD') - R0lGODlhFgAWAIUAAPwCBBQSFPz+/DQyNISChDw6PMzKzMTGxERGRIyKjFxa - XMTCvKSmpHR2dPz6/Pz29PTq3MS2rPz69MTCxFxWVHx6dJyWjNzSzPz27Pzy - 7Pzu5PTm3NTKvIR+fJyGfHxuZHxqXNTCtPTq5PTi1PTezNS+rExOTFRORMyy - lPTaxOzWxOzSvNze3NTOxMy2nMyulMyqjAQCBAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbY - QIBwSCwahYGkUnk0BgTQ6IAQaBKfUWhBYKhaAU+CgXAQIAyChLeJzSIQhcH6 - GFaM0QtGY5kstqEODw8QEQELAhJTc08KBBMEFBUWDRcBE1pca20SGBkaEBsc - AY5maFRIAgoLHRQRHh8gIQFlZnByqA8ZGSIQIyQjJQEmYgJ5p2ACrK4gJx4g - KIZZAgdeAQ4ZI9kjKSor0AwEjeAs1S0cHAslLi4vMDDRWeRIfEsxMeET4ATy - VoYLC5fizXEiAR84BeMG+pEm8EsAFhAjSlR4hR6fLxiF0AkCACH+aENyZWF0 - ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5 - OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2 - ZWxjb3IuY29tADs= -EOD - -editcut22 = TkPhotoImage.new(:data=><<'EOD') - R0lGODlhFgAWAIMAAPwCBAQCBAwCBPz+/OTi5JyanOzq7DQyNGxqbAAAAAAA - AAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARbEMhJq704gxBE - 0Bf3cZo4kRJqBQNRfBucyudgvJS6VaxLzyMa6/bLiWA9HOg4VIIkL5vzuRkc - pkvRIIAorphJLzBW84WEuRZWp6uaT7J2Sh1Hit3OY/ZO7WvsEQAh/mhDcmVh - dGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAx - OTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRl - dmVsY29yLmNvbQA7 -EOD - -editpaste22 = TkPhotoImage.new(:data=><<'EOD') - R0lGODlhFgAWAIYAAPwCBBQWFDw6FHRuFGRaBFxSBAQCBAQKBCQiBIx6HPz6 - /NTOfKyiXDQuFOTm5Pz+/Ozu7PTq5Pz63PTyxNTOjKSeRExGLMTGxMzKzNTS - 1NTW1Dw2NKSmpKyqrKSipJyanNzWlLy6ZLSuVIx6FISChIyKhJSSlCQiJLS2 - tDw6NDQyNCQiFCQmHBQSDGRiZHRydGxubHx6dGxqbFxeXGRmZFxaXCwuLOzq - 7KyurHx+fDwmFEQuFCweFCQWDBQODBwaHBweHKSinJSWlOTi5JyepHR2dDw6 - PBQSFNze3ERGRIyKjIyOjISGhPz29Pzy7MS2rMzOzFRWVHx2dHxybDQiFPz2 - 7Pzu5PTq3PTm1NTCtJyGdHxuZHxqXPzq3PTaxNS6pFxWVFRKRNS2nPTi1PTS - tNSulNzOxNSynMymhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAA - LAAAAAAWABYAAAf/gACCgwABAgMEBYSLggaOjgcICQoLDA2Pj4MGDg8QEZ4F - DxITFBUWFxcYGRobjQ8cHR4fCQ8gCyEiFSMWJCUkJieNEB4dKB4pKissK8wr - LS4vMDHBAAYQHx8dFx0fJDIzNDU0M+IyHzaNNyg43Ng5Ojs7Ojw9Pj9AMkCN - DiZB/h9CSOx4QLCgihItqBkYgqIDESElitAYWJCgkQcXjjRCgi1Ihw4BB5LA - QOLCgyQYHihpUU3DBw5ElpAgAYNixSRJjKjQaECDCRPZPDB5IbIGSQwKLnh4 - wbInLA4kmJB4oaPiAwVNnER40hRK1BIAaVatUZJEFCkmpmjgCeWDCalFe4q4 - oFKwSRUrEa5gycLzwq8lUnPQ4PEgSpYcUZ5o2cIlS1O/JHLEDdfjQZMIVrpg - weLFy5e+M6WSmBGlxYMYYBRzCaOFi5imHWBIfOEiShLTVjaP6eyFTBmN1TA5 - OvLDjJksWb58OVMGDRqWjAYdmU79SIvpjqJr104nEAAh/mhDcmVhdGVkIGJ5 - IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5 - OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29y - LmNvbQA7 -EOD - -editdelete22 = TkPhotoImage.new(:data=><<'EOD') - R0lGODlhFgAWAIYAAASC/FRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwK - DAQCBExOTNze3NTW1MTGxLS2tJyanPz+/Ozu7BQSFCwqLDw+POTi5PTu7MzK - xIR+fCQmJPz6/Oze1NTGvPz69Pzy7Pz29LyyrPy+vPyupPTm1BQWFIQCBPwC - BMS6rPzSzNTOxPTi1NS+rPTezNzOxPTizOzWxMy2pOzaxMy2nPTaxOzOtMyy - nOzSvMyqjPx+fOzGpMSihPTq3OzKrOTCpNzKxNTCtAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAA - LAAAAAAWABYAAAf8gACCAQIDBAUGBwgJCgsLgpCRAAwNlZYODxALEY+SkAMN - EqKjEw0UD5yegqCjrRMVEqidkgWhraMWF7GptLa3EgEWFRSOnhW+vxgZEBqz - kBvItxwdHryRCNGjHyAhHSLOgtgSI60c2yQjJd+eJqEnKK0hJCgnJSngAO0S - F+8qEvL0VrBogW+BLX4oVKgIyMIFQU8KfDV4R+8FDBcxZBREthAFiRIsOsyg - sVEUh4Un3pGoUcPGjZInK65QicPlxg8oX5RwqNJGjo0hdJwQ6EIkjRM6dvDY - CKIHSBc1Ztjw4eOH0oIrsgIJEqSFDBo0cuTgsdSTo7No0xYTZCcQACH+aENy - ZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29y - IDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cu - ZGV2ZWxjb3IuY29tADs= -EOD - -text22 = TkPhotoImage.new(:data=><<'EOD') - R0lGODlhFgAWAIQAAPwCBAQCBBwaHAwKDBQSFLy+vLS2tJSWlBQWFKyqrFRS - VCwqLDQyNNTS1GxqbFxaXJyanIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAVcICCOZGmK - QSoMaZsShBsQBdAapHvgaIDUqUPJlRjSbAoT0fRDKgODRbF0PLUYjZO2F2Bs - t9evNix+dsvDlGKK5jraudQb7qbX6a2HEJ+ycyF+LRE8ZTI+fX5oGCEAIf5o - Q3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxD - b3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3 - dy5kZXZlbGNvci5jb20AOw== -EOD - -########################################## - -bmp_dir = File.join(File.dirname(File.expand_path(__FILE__)), - '../catalog_demo/images') - -########################################## - -status_var = TkVariable.new -radio_var = TkVariable.new -check_var1 = TkVariable.new -check_var2 = TkVariable.new - -tb = Tk::Iwidgets::Toolbar.new(:helpvariable=>status_var) - -########################################## - -tb.add(:button, :helpstr=>'Copy It', :image=>editcopy22, - :balloonstr=>'Copy', :command=>proc{puts 'Copy It'}) - -tb.add(:button, :helpstr=>'Cut It', :image=>editcut22, - :balloonstr=>'Cut', :command=>proc{puts 'Cut It'}) - -tb.add(:button, :helpstr=>'Paste It', :image=>editpaste22, - :balloonstr=>'Paste', :command=>proc{puts 'Paste It'}) - -tb.add(:button, :helpstr=>'Delete It', :image=>editdelete22, - :balloonstr=>'Delete', :command=>proc{puts 'Delete It'}) - -#-------------------------------- - -tb.add(:frame, :borderwidth=>1, :width=>10, :height=>10) - -#-------------------------------- - -tb.add(:radiobutton, :variable=>radio_var, :value=>'Box', - :bitmap=>"@#{bmp_dir}/box.xbm", - :helpstr=>'Radio Button #1', :balloonstr=>'Radio', - :command=>proc{puts 'Radio Button "Box"'}) - -tb.add(:radiobutton, :variable=>radio_var, :value=>'Line', - :bitmap=>"@#{bmp_dir}/line.xbm", - :helpstr=>'Radio Button #2', :balloonstr=>'Radio', - :command=>proc{puts 'Radio Button "Line"'}) - -tb.add(:radiobutton, :variable=>radio_var, :value=>'Oval', - :bitmap=>"@#{bmp_dir}/oval.xbm", - :helpstr=>'Radio Button #3', :balloonstr=>'Radio', - :command=>proc{puts 'Radio Button "Oval"'}) - -#-------------------------------- - -tb.add(:frame, :borderwidth=>1, :width=>10, :height=>10) - -#-------------------------------- - -tb.add(:checkbutton, :variable=>check_var1, :onvalue=>'yes', :offvalue=>'no', - :image=>text22, :command=>proc{puts 'Checkbutton 1'}) - -tb.add(:checkbutton, :variable=>check_var2, :onvalue=>'yes', :offvalue=>'no', - :bitmap=>"@#{bmp_dir}/points.xbm", :command=>proc{puts 'Checkbutton 2'}) - -tb.pack(:side=>:top, :anchor=>:nw) - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/watch.rb b/ext/tk/sample/tkextlib/iwidgets/sample/watch.rb deleted file mode 100644 index b06f173eee..0000000000 --- a/ext/tk/sample/tkextlib/iwidgets/sample/watch.rb +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -require 'tk' -require 'tkextlib/iwidgets' - -Thread.new{ - trap('INT') {puts 'catch SIGINT'} - sleep 5 - trap('INT', 'DEFAULT') -} - -Tk::Iwidgets::Watch.new(:state=>:disabled, :showampm=>:no, - :width=>155, :height=>155){|w| - w.pack(:padx=>10, :pady=>10, :fill=>:both, :expand=>true) - # TkTimer.new(1000, -1, proc{w.show; Tk.update}).start - TkTimer.new(25, -1, proc{w.show; Tk.update}).start -} - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt b/ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt deleted file mode 100644 index 975f23e3f1..0000000000 --- a/ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt +++ /dev/null @@ -1,46 +0,0 @@ - - >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - >>> The following text is the original 'license.term' of tklib <<< - >>> extension. <<< - >>> Original Tcl files are not include in this directory, because <<< - >>> of all of them are rewritten to Ruby files. <<< - >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - -This software is copyrighted by Ajuba Solutions and other parties. -The following terms apply to all files associated with the software unless -explicitly disclaimed in individual files. - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - -GOVERNMENT USE: If you are acquiring this software on behalf of the -U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal -Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you -are acquiring the software on behalf of the Department of Defense, the -software shall be classified as "Commercial Computer Software" and the -Government shall have only "Restricted Rights" as defined in Clause -252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the -authors grant the U.S. Government and others acting in its behalf -permission to use and distribute the software in accordance with the -terms specified in this license. diff --git a/ext/tk/sample/tkextlib/tcllib/datefield.rb b/ext/tk/sample/tkextlib/tcllib/datefield.rb deleted file mode 100644 index 101950da1a..0000000000 --- a/ext/tk/sample/tkextlib/tcllib/datefield.rb +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/ruby -# frozen_string_literal: false - -require 'tk' -require 'tkextlib/tcllib/datefield' -require 'parsedate' - -Tk.root.title('Datefield example') - - -my_date1 = TkVariable.new -my_date2 = TkVariable.new -my_date1.trace('w'){ - begin - t = Time.local(*(ParseDate.parsedate(my_date1.value))) - my_date2.value = t.strftime('%A') - rescue - # ignore error - end -} - -df = Tk::Tcllib::Datefield.new(:textvariable=>my_date1) -Tk.grid(TkLabel.new(:text=>'Enter a date:', :anchor=>:e), df, :sticky=>:ew) -Tk.grid(TkLabel.new(:text=>'That date is a:', :anchor=>:e), - TkLabel.new(:textvariable=>my_date2, :relief=>:sunken, :width=>12), - :sticky=>:ew) - -df.set_focus - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/tcllib/plotdemos1.rb b/ext/tk/sample/tkextlib/tcllib/plotdemos1.rb deleted file mode 100644 index 89166c1c30..0000000000 --- a/ext/tk/sample/tkextlib/tcllib/plotdemos1.rb +++ /dev/null @@ -1,159 +0,0 @@ -#!/usr/bin/ruby -# frozen_string_literal: false - -require 'tk' -require 'tkextlib/tcllib/plotchart' - -############################### - -c1 = TkCanvas.new(:background=>'white', :width=>400, :height=>200) -c2 = TkCanvas.new(:background=>'white', :width=>400, :height=>200) -c3 = TkCanvas.new(:background=>'white', :width=>400, :height=>200) -Tk.pack(c1,c2,c3, :fill=>:both, :side=>:top) - -h = TkToplevel.new(:title=>'h') -hc1 = TkCanvas.new(h, :background=>'white', :width=>400, :height=>200) -hc2 = TkCanvas.new(h, :background=>'white', :width=>400, :height=>200) -Tk.pack(hc1,hc2, :fill=>:both, :side=>:top) - -v = TkToplevel.new(:title=>'v') -vc1 = TkCanvas.new(v, :background=>'white', :width=>400, :height=>200) -vc2 = TkCanvas.new(v, :background=>'white', :width=>400, :height=>200) -vc3 = TkCanvas.new(v, :background=>'white', :width=>400, :height=>200) -Tk.pack(vc1,vc2,vc3, :fill=>:both, :side=>:top) - -############################### - -s = Tk::Tcllib::Plotchart::XYPlot.new(c1, [0.0, 100.0, 10.0], - [0.0, 100.0, 20.0]) - - -xd = 5.0 -yd = 20.0 -xold = 0.0 -yold = 50.0 - -s.dataconfig('series1', :color=>'red') - -(0..19).each{|i| - xnew = xold + xd - ynew = yold + (rand() - 0.5) * yd - ynew2 = yold + (rand() - 0.5) * 2.0 * yd - s.plot('series1', xnew, ynew) - s.plot('series2', xnew, ynew2) - xold = xnew - yold = ynew -} - -s.xtext "X-coordinate" -s.ytext "Y-data" -s.title "Aha!" - -c1.wait_visibility - -s.save_plot "aha.ps" - -############################### - -s = Tk::Tcllib::Plotchart::Piechart.new(c2) - -s.plot([ ["Long names", 10], ["Short names", 30], - ["Average", 40], ["Ultra-short names", 5] ]) - -# -# Note: title should be shifted up -# - distinguish a separate title area -# -s.title "Okay - this works" - -############################### - -s = Tk::Tcllib::Plotchart::PolarPlot.new(c3, [3.0, 1.0]) - -0.step(359, 10){|angle| - rad = 1.0+Math.cos(angle*Math::PI/180.0) - s.plot('cardioid', rad, angle) -} - -s.title "Cardioid" - -############################### - -s = Tk::Tcllib::Plotchart::Barchart.new(hc1, %w(A B C D E), - [0.0, 10.0, 2.0], 2) - -s.plot('series1', [1.0, 4.0, 6.0, 1.0, 7.0], 'red') -s.plot('series2', [0.0, 3.0, 7.0, 9.3, 2.0], 'green') -s.title "Arbitrary data" - -############################### - -s = Tk::Tcllib::Plotchart::Barchart.new(hc2, %w(A B C D E), - [0.0, 20.0, 5.0], :stacked) - -s.plot('series1', [1.0, 4.0, 6.0, 1.0, 7.0], 'red') -s.plot('series2', [0.0, 3.0, 7.0, 9.3, 2.0], 'green') -s.title "Stacked diagram" - -############################### - -s = Tk::Tcllib::Plotchart::HorizontalBarchart.new(vc1, [0.0, 10.0, 2.0], - %w(A B C D E), 2) - -s.plot('series1', [1.0, 4.0, 6.0, 1.0, 7.0], 'red') -s.plot('series2', [0.0, 3.0, 7.0, 9.3, 2.0], 'green') -s.title "Arbitrary data" - -############################### - -s = Tk::Tcllib::Plotchart::HorizontalBarchart.new(vc2, [0.0, 20.0, 5.0], - %w(A B C D E), :stacked) - -s.plot('series1', [1.0, 4.0, 6.0, 1.0, 7.0], 'red') -s.plot('series2', [0.0, 3.0, 7.0, 9.3, 2.0], 'green') -s.title "Stacked diagram" - -############################### - -s = Tk::Tcllib::Plotchart::Timechart.new(vc3, "1 january 2004", - "31 december 2004", 4) - -s.period("Spring", "1 march 2004", "1 june 2004", 'green') -s.period("Summer", "1 june 2004", "1 september 2004", 'yellow') -s.vertline("1 jan", "1 january 2004") -s.vertline("1 apr", "1 april 2004") -s.vertline("1 jul", "1 july 2004") -s.vertline("1 oct", "1 october 2004") -s.milestone("Longest day", "21 july 2004") -s.title "Seasons (northern hemisphere)" - -############################### - -z = TkToplevel.new(:title=>'3D') - -zc1 = TkCanvas.new(z, :background=>'white', :width=>400, :height=>300) -zc2 = TkCanvas.new(z, :background=>'white', :width=>400, :height=>250) -Tk.pack(zc1,zc2) - -s = Tk::Tcllib::Plotchart::Plot3D.new(zc1, - [0, 10, 3], [-10, 10, 10], [0, 10, 2.5]) - -s.title "3D Plot" -s.plot_function{|x, y| - # cowboyhat - x1 = x.to_f/9.0 - y1 = y.to_f/9.0 - 3.0 * (1.0-(x1*x1+y1*y1))*(1.0-(x1*x1+y1*y1)) -} - -s = Tk::Tcllib::Plotchart::Plot3D.new(zc2, - [0, 10, 3], [-10, 10, 10], [0, 10, 2.5]) -s.title "3D Plot - data " -s.colour("green", "black") -s.plot_data([ [1.0, 2.0, 1.0, 0.0], - [1.1, 3.0, 1.1, -0.5], - [3.0, 1.0, 4.0, 5.0] ]) - -############################### - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/tcllib/plotdemos2.rb b/ext/tk/sample/tkextlib/tcllib/plotdemos2.rb deleted file mode 100644 index 58c5b1928b..0000000000 --- a/ext/tk/sample/tkextlib/tcllib/plotdemos2.rb +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/ruby -# frozen_string_literal: false - -require 'tk' -require 'tkextlib/tcllib/plotchart' - -############################### - -c1 = TkCanvas.new(:background=>'white', :width=>400, :height=>200) -c2 = TkCanvas.new(:background=>'white', :width=>400, :height=>200) -Tk.pack(c1,c2, :fill=>:both, :side=>:top) - -############################### -# Set up a strip chart -############################### -slipchart = Tk::Tcllib::Plotchart::Stripchart.new(c1, [0.0, 100.0, 10.0], - [0.0, 100.0, 20.0]) - -TkTimer.new(500, -1, proc{|obj| # obj --> TkTimer object - slipchart, xold, xd, yold, yd = obj.return_value - xnew = xold + xd - ynew = yold + (rand() - 0.5) * yd - ynew2 = yold + (rand() - 0.5) * 2.0 * yd - slipchart.plot('series1', xnew, ynew) - slipchart.plot('series2', xnew, ynew2) - obj.stop if xnew >= 200 - [slipchart, xnew, xd, ynew, yd] # return_value - }).start(100, proc{ - # init return_value - [slipchart, 0.0, 15.0, 50.0, 30.0] - }) - -slipchart.title "Aha!" - -############################### -# Set up an isometric plot -############################### -s = Tk::Tcllib::Plotchart::IsometricPlot.new(c2, [0.0, 100.0], [0.0, 200.0], - :noaxes) - -s.set_zoom_pan - -s.plot('rectangle', [10.0, 10.0, 50.0, 50.0], 'green') -s.plot('filled-rectangle', [20.0, 20.0, 40.0, 40.0], 'red') -s.plot('filled-circle', [70.0, 70.0, 40.0], 'yellow') -s.plot('circle', [70.0, 70.0, 42.0]) - -############################### -# Check the symbols -############################### -h = TkToplevel.new(:title=>'h') -c = TkCanvas.new(h, :bg=>'white', :width=>400, :height=>200).pack(:fill=>:both) - -s = Tk::Tcllib::Plotchart::XYPlot.new(c, [0.0, 100.0, 10.0], - [0.0, 100.0, 20.0]) -s.dataconfig('series1', :colour=>'red', :type=>:symbol) -s.dataconfig('series2', :colour=>'green', :type=>:both) - -s.yconfig(:format=>"%12.2e") - -x = 5.0 -%w(plus cross circle up down dot upfilled downfilled).each{|sym| - s.dataconfig('series1', :symbol=>sym) - s.dataconfig('series2', :symbol=>sym) - s.plot('series1', x, 50.0) - s.plot('series2', x, 20) - x += 10 -} - -############################## - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/tcllib/plotdemos3.rb b/ext/tk/sample/tkextlib/tcllib/plotdemos3.rb deleted file mode 100644 index 816e38b6a6..0000000000 --- a/ext/tk/sample/tkextlib/tcllib/plotdemos3.rb +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/ruby -# frozen_string_literal: false - -require 'tk' -require 'tkextlib/tcllib/plotchart' - -############################### -# Set up a strip chart -############################### - -Tk::Tcllib::Plotchart::Stripchart.new([0.0, 100.0, 10.0], - [0.0, 100.0, 20.0], - :background=>'white', - :width=>400, :height=>200){|chart| - title "Aha!" - pack(:fill=>:both, :side=>:top) - - series1 = Tk::Tcllib::Plotchart::PlotSeries.new(chart) - series2 = Tk::Tcllib::Plotchart::PlotSeries.new(chart) - - xd = 15.0 - yd = 30.0 - - TkTimer.new(500, -1, proc{|obj| # obj --> TkTimer object - xold, yold = obj.return_value - xnew = xold + xd - ynew = yold + (rand() - 0.5) * yd - ynew2 = yold + (rand() - 0.5) * 2.0 * yd - - series1.plot(xnew, ynew) - series2.plot(xnew, ynew2) - - obj.stop if xnew >= 200 - - [xnew, ynew] # return_value - }).start(100, proc{ [0.0, 50.0] }) # init return_value -} - -############################### -# Set up an isometric plot -############################### -Tk::Tcllib::Plotchart::IsometricPlot.new([0.0, 100.0], [0.0, 200.0], :noaxes, - :background=>'white', - :width=>400, :height=>200){|chart| - pack(:fill=>:both, :side=>:top) - set_zoom_pan - - chart.plot('rectangle', [10.0, 10.0, 50.0, 50.0], 'green') - chart.plot('filled-rectangle', [20.0, 20.0, 40.0, 40.0], 'red') - chart.plot('filled-circle', [70.0, 70.0, 40.0], 'yellow') - chart.plot('circle', [70.0, 70.0, 42.0]) -} - -############################### -# Check the symbols -############################### -TkToplevel.new(:title=>'h'){|h| - Tk::Tcllib::Plotchart::XYPlot.new(h, [0.0, 100.0, 10.0], - [0.0, 100.0, 20.0], - :bg=>'white', - :width=>400, :height=>200){|chart| - pack(:fill=>:both) - - yconfig(:format=>"%12.2e") - - series1 = Tk::Tcllib::Plotchart::PlotSeries.new(chart, :colour=>'red', - :type=>:symbol) - series2 = Tk::Tcllib::Plotchart::PlotSeries.new(chart, :colour=>'green', - :type=>:both) - - x = 5.0 - %w(plus cross circle up down dot upfilled downfilled).each{|sym| - series1.dataconfig(:symbol=>sym) - series2.dataconfig(:symbol=>sym) - series1.plot(x, 50.0) - series2.plot(x, 20) - x += 10 - } - } -} - -############################## - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/tcllib/xyplot.rb b/ext/tk/sample/tkextlib/tcllib/xyplot.rb deleted file mode 100644 index 3d71c3bf9f..0000000000 --- a/ext/tk/sample/tkextlib/tcllib/xyplot.rb +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/ruby -# frozen_string_literal: false - -require 'tk' -require 'tkextlib/tcllib/plotchart' - -TkCanvas.new(:background=>'white', :width=>400, :height=>200){|c| - pack(:fill=>:both) - Tk::Tcllib::Plotchart::XYPlot.new(c, [0.0, 100.0, 10.0], - [0.0, 100.0, 20.0]){ - [ [0.0, 32.0], [10.0, 50.0], [25.0, 60.0], [78.0, 11.0] ].each{|x, y| - plot('series1', x, y) - } - title("Data series") - } -} - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt b/ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt deleted file mode 100644 index 2326ef21fa..0000000000 --- a/ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt +++ /dev/null @@ -1,30 +0,0 @@ - - ###################################################################### - ### The following text is the original 'license.terms' of tile ### - ### extension. ### - ###################################################################### - - -LICENSE ("MIT-style") - -This software is Copyright (C) 2003 Joe English and other parties. - -The following terms apply to all files associated with this software -unless explicitly disclaimed in individual files. - -The author(s) hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS for a PARTICULAR PURPOSE. IN NO EVENT -shall the AUTHORS of THIS SOFTWARE be LIABLE to ANY PARTY for -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, or CONSEQUENTIAL DAMAGES -arising out of the USE of THIS SOFTWARE and its DOCUMENTATION. diff --git a/ext/tk/sample/tkextlib/tile/demo.rb b/ext/tk/sample/tkextlib/tile/demo.rb deleted file mode 100644 index 8348ecdb58..0000000000 --- a/ext/tk/sample/tkextlib/tile/demo.rb +++ /dev/null @@ -1,984 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -# -# Demo for 'tile' package. -# -require 'tk' - -demodir = File.dirname($0) -themesdir = File.join(demodir, 'themes') -Tk::AUTO_PATH.lappend('.', demodir, themesdir) - -Dir.foreach(themesdir){|name| - next if name == '.' || name == '..' - dir = File.join(themesdir, name) - Tk::AUTO_PATH.lappend(dir) if File.directory?(dir) -} - -require 'tkextlib/tile' - -def version?(ver) - TkPackage.vcompare(Tk::Tile.package_version, ver) >= 0 -end - -# define Tcl/Tk procedures for compatibility -Tk::Tile.__define_LoadImages_proc_for_compatibility__! -Tk::Tile::Style.__define_wrapper_proc_for_compatibility__! - -unless Tk::Tile::Style.theme_names.include?('step') - Tk::Tile::Style.theme_create('step') -end - -Tk.load_tclscript(File.join(demodir, 'toolbutton.tcl')) -Tk.load_tclscript(File.join(demodir, 'repeater.tcl')) - -# This forces an update of the available packages list. It's required -# for package names to find the themes in demos/themes/*.tcl -## Tk.tk_call(TkPackage.unknown_proc, 'Tcl', TkPackage.provide('Tcl')) -## --> This doesn't work. -## Because, unknown_proc may be "command + some arguments". -Tk.ip_eval("#{TkPackage.unknown_proc} Tcl #{TkPackage.provide('Tcl')}") - -TkRoot.new{ - title 'Tile demo' - iconname 'Tile demo' -} - -# The descriptive names of the builtin themes. -$THEMELIST = [ - ['default', 'Default'], - ['classic', 'Classic'], - ['alt', 'Revitalized'], - ['winnative', 'Windows native'], - ['xpnative', 'XP Native'], - ['aqua', 'Aqua'], -] - -$V = TkVariable.new_hash(:THEME => 'default', - :COMPOUND => 'top', - :CONSOLE => false, - :MENURADIO1 => 'One', - :MENUCHECK1 => true, - :PBMODE => 'determinate', - :SELECTED => true, - :CHOICE => 2) - -# Add in any available loadable themes. -TkPackage.names.find_all{|n| n =~ /^(tile|ttk)::theme::/}.each{|pkg| - name = pkg.split('::')[-1] - unless $THEMELIST.assoc(name) - $THEMELIST << [name, Tk.tk_call('string', 'totitle', name)] - end -} - -# Add theme definition written by ruby -$RUBY_THEMELIST = [] -begin - load(File.join(demodir, 'themes', 'kroc.rb'), true) -rescue => e -raise e - $RUBY_THEMELIST << ['kroc-rb', 'Kroc (by Ruby)', false] -else - $RUBY_THEMELIST << ['kroc-rb', 'Kroc (by Ruby)', true] -end - -def makeThemeControl(parent) - c = Tk::Tile::Labelframe.new(parent, :text=>'Theme') - $THEMELIST.each{|theme, name| - b = Tk::Tile::Radiobutton.new(c, :text=>name, :value=>theme, - :variable=>$V.ref(:THEME), - :command=>proc{setTheme(theme)}) - b.grid(:sticky=>:ew) - unless (TkPackage.names.find{|n| n =~ /(tile|ttk)::theme::#{theme}/}) - b.ttk_state(:disabled) - end - } - $RUBY_THEMELIST.each{|theme, name, available| - b = Tk::Tile::Radiobutton.new(c, :text=>name, :value=>theme, - :variable=>$V.ref(:THEME), - :command=>proc{setTheme(theme)}) - b.grid(:sticky=>:ew) - b.ttk_state(:disabled) unless available - } - c -end - -def makeThemeMenu(parent) - m = TkMenu.new(parent) - $THEMELIST.each{|theme, name| - m.add(:radiobutton, :label=>name, :variable=>$V.ref(:THEME), - :value=>theme, :command=>proc{setTheme(theme)}) - unless (TkPackage.names.find{|n| n =~ /(tile|ttk)::theme::#{theme}/}) - m.entryconfigure(:end, :state=>:disabled) - end - } - $RUBY_THEMELIST.each{|theme, name, available| - m.add(:radiobutton, :label=>name, :variable=>$V.ref(:THEME), - :value=>theme, :command=>proc{setTheme(theme)}) - m.entryconfigure(:end, :state=>:disabled) unless available - } - m -end - -def setTheme(theme) - if (pkg = TkPackage.names.find{|n| n =~ /(tile|ttk)::theme::#{theme}/}) - unless Tk::Tile::Style.theme_names.find{|n| n == theme} - TkPackage.require(pkg) - end - end - Tk::Tile::Style.theme_use(theme) -end - -# -# Load icons... -# -$BUTTONS = ['open', 'new', 'save'] -$CHECKBOXES = ['bold', 'italic'] -$ICON = {} - -def loadIcons(file) - Tk.load_tclscript(file) - img_data = TkVarAccess.new('ImgData') - img_data.keys.each{|icon| - $ICON[icon] = TkPhotoImage.new(:data=>img_data[icon]) - } -end - -loadIcons(File.join(demodir, 'iconlib.tcl')) - -# -# Utilities: -# -def foreachWidget(wins, cmd) - wins.each{|w| - cmd.call(w) - foreachWidget(w.winfo_children, cmd) - } -end - -# sbstub -# Used as the :command option for a scrollbar, -# updates the scrollbar's position. -# -def sbstub(sb, cmd, num, units = 'units') - num = TkComm.number(num) - case cmd.to_s - when 'moveto' - sb.set(num, num+0.5) - - when 'scroll' - if units.to_s == 'pages' - delta = 0.2 - else - delta = 0.05 - end - current = sb.get - sb.set(current[0] + delta * num, current[1] + delta * num) - end -end - -# ... for debugging: -TkBindTag::ALL.bind('ButtonPress-3', proc{|w| $W = w}, '%W') -TkBindTag::ALL.bind('Control-ButtonPress-3', proc{|w| w.set_focus}, '%W') - -def showHelp() - Tk.messageBox(:message=>'No help yet...') -end - -# -# See toolbutton.tcl. -TkOption.add('*Toolbar.relief', :groove) -TkOption.add('*Toolbar.borderWidth', 2) - -TkOption.add('*Toolbar.Button.Pad', 2) - -$ROOT = Tk.root -$BASE = $ROOT -Tk.destroy(*($ROOT.winfo_children)) - -$TOOLBARS = [] - -# -# Toolbar button standard vs. tile comparison: -# -def makeToolbars - # - # Tile toolbar: - # - tb = Tk::Tile::Frame.new($BASE, :class=>'Toolbar') - $TOOLBARS << tb - i = 0 - $BUTTONS.each{|icon| - i += 1 - Tk::Tile::Button.new(tb, :text=>icon, :image=>$ICON[icon], - :compound=>$V[:COMPOUND], - :style=>:Toolbutton).grid(:row=>0, :column=>i, - :sticky=>:news) - } - $CHECKBOXES.each{|icon| - i += 1 - Tk::Tile::Checkbutton.new(tb, :text=>icon, :image=>$ICON[icon], - :variable=>$V.ref(icon), - :compound=>$V[:COMPOUND], - :style=>:Toolbutton).grid(:row=>0, :column=>i, - :sticky=>:news) - } - - mb = Tk::Tile::Menubutton.new(tb, :text=>'toolbar', :image=>$ICON['file'], - :compound=>$V[:COMPOUND]) - mb.configure(:menu=>makeCompoundMenu(mb)) - i += 1 - mb.grid(:row=>0, :column=>i, :sticky=>:news) - - i += 1 - tb.grid_columnconfigure(i, :weight=>1) - - # - # Standard toolbar: - # - tb = TkFrame.new($BASE, :class=>'Toolbar') - $TOOLBARS << tb - i = 0 - $BUTTONS.each{|icon| - i += 1 - TkButton.new(tb, :text=>icon, :image=>$ICON[icon], - :compound=>$V[:COMPOUND], :relief=>:flat, - :overrelief=>:raised).grid(:row=>0, :column=>i, - :sticky=>:news) - } - $CHECKBOXES.each{|icon| - i += 1 - TkCheckbutton.new(tb, :text=>icon, :image=>$ICON[icon], - :variable=>$V.ref(icon), :compound=>$V[:COMPOUND], - :indicatoron=>false, :selectcolor=>'', :relief=>:flat, - :overrelief=>:raised).grid(:row=>0, :column=>i, - :sticky=>:news) - } - - mb = TkMenubutton.new(tb, :text=>'toolbar', :image=>$ICON['file'], - :compound=>$V[:COMPOUND]) - mb.configure(:menu=>makeCompoundMenu(mb)) - i += 1 - mb.grid(:row=>0, :column=>i, :sticky=>:news) - - i += 1 - tb.grid_columnconfigure(i, :weight=>1) -end - -# -# Toolbar :compound control: -# -def makeCompoundMenu(mb) - menu = TkMenu.new(mb) - %w(text image none top bottom left right center).each{|str| - menu.add(:radiobutton, :label=>Tk.tk_call('string', 'totitle', str), - :variable=>$V.ref(:COMPOUND), :value=>str, - :command=>proc{ changeToolbars() }) - } - menu -end - -makeToolbars() - -## CONTROLS -control = Tk::Tile::Frame.new($BASE) - -# -# Overall theme control: -# -makeThemeControl(control).grid(:sticky=>:news, :padx=>6, :ipadx=>6) -control.grid_rowconfigure(99, :weight=>1) - -def changeToolbars - foreachWidget($TOOLBARS, - proc{|w| - begin - w.compound($V[:COMPOUND]) - rescue - end - }) -end - -def scrolledWidget(parent, klass, themed, *args) - if themed - f = Tk::Tile::Frame.new(parent) - t = klass.new(f, *args) - vs = Tk::Tile::Scrollbar.new(f) - hs = Tk::Tile::Scrollbar.new(f) - else - f = TkFrame.new(parent) - t = klass.new(f, *args) - vs = TkScrollbar.new(f) - hs = TkScrollbar.new(f) - end - t.yscrollbar(vs) - t.xscrollbar(hs) - - TkGrid.configure(t, vs, :sticky=>:news) - TkGrid.configure(hs, 'x', :sticky=>:news) - TkGrid.rowconfigure(f, 0, :weight=>1) - TkGrid.columnconfigure(f, 0, :weight=>1) - - [f, t] -end - -# -# Notebook demonstration: -# -def makeNotebook - nb = Tk::Tile::Notebook.new($BASE, :padding=>6) - nb.enable_traversal - client = Tk::Tile::Frame.new(nb) - nb.add(client, :text=>'Demo', :underline=>0) - nb.select(client) - - scales = Tk::Tile::Frame.new(nb) - nb.add(scales, :text=>'Scales') - combo = Tk::Tile::Frame.new(nb) - nb.add(combo, :text=>'Combobox', :underline=>7) - tree = Tk::Tile::Frame.new(nb) - nb.add(tree, :text=>'Tree') - others = Tk::Tile::Frame.new(nb) - nb.add(others, :text=>'Others', :underline=>4) - - [nb, client, scales, combo, tree, others] -end - -nb, client, scales, combo, tree, others = makeNotebook() - -# -# Side-by side check, radio, and menu button comparison: -# -def fillMenu(menu) - %w(above below left right flush).each{|dir| - menu.add(:command, :label=>Tk.tk_call('string', 'totitle', dir), - :command=>proc{ menu.winfo_parent.direction(dir) }) - } - menu.add(:cascade, :label=>'Submenu', :menu=>(submenu = TkMenu.new(menu))) - submenu.add(:command, :label=>'Subcommand 1') - submenu.add(:command, :label=>'Subcommand 2') - submenu.add(:command, :label=>'Subcommand 3') - - menu.add(:separator) - menu.add(:command, :label=>'Quit', :command=>proc{Tk.root.destroy}) -end - -l = Tk::Tile::Labelframe.new(client, :text=>'Themed', :padding=>6) -r = TkLabelframe.new(client, :text=>'Standard', :padx=>6, :pady=>6) - -## Styled frame -cb = Tk::Tile::Checkbutton.new(l, :text=>'Checkbutton', - :variable=>$V.ref(:SELECTED), :underline=>2) -rb1 = Tk::Tile::Radiobutton.new(l, :text=>'One', :variable=>$V.ref(:CHOICE), - :value=>1, :underline=>0) -rb2 = Tk::Tile::Radiobutton.new(l, :text=>'Two', :variable=>$V.ref(:CHOICE), - :value=>2) -rb3 = Tk::Tile::Radiobutton.new(l, :text=>'Three', - :variable=>$V.ref(:CHOICE), - :value=>3, :underline=>0) -btn = Tk::Tile::Button.new(l, :text=>'Button', :underline=>0) - -mb = Tk::Tile::Menubutton.new(l, :text=>'Menubutton', :underline=>2) -m = TkMenu.new(mb) -mb.menu(m) -fillMenu(m) - -$entryText = TkVariable.new('Entry widget') -e = Tk::Tile::Entry.new(l, :textvariable=>$entryText) -e.selection_range(6, :end) - -ltext_f, ltext = scrolledWidget(l, TkText, true, - :width=>12, :height=>5, :wrap=>:none) -# NOTE TO MAINTAINERS: -# The checkbuttons are -sticky ew / -expand x on purpose: -# it demonstrates one of the differences between TCheckbuttons -# and standard checkbuttons. -# -Tk.grid(cb, :sticky=>:ew) -Tk.grid(rb1, :sticky=>:ew) -Tk.grid(rb2, :sticky=>:ew) -Tk.grid(rb3, :sticky=>:ew) -Tk.grid(btn, :sticky=>:ew, :padx=>2, :pady=>2) -Tk.grid(mb, :sticky=>:ew, :padx=>2, :pady=>2) -Tk.grid(e, :sticky=>:ew, :padx=>2, :pady=>2) -Tk.grid(ltext_f, :sticky=>:news) - -TkGrid.columnconfigure(l, 0, :weight=>1) -TkGrid.rowconfigure(l, 7, :weight=>1) # text widget (grid is a PITA) - -## Orig frame -cb = TkCheckbutton.new(r, :text=>'Checkbutton', :variable=>$V.ref(:SELECTED)) -rb1 = TkRadiobutton.new(r, :text=>'One', - :variable=>$V.ref(:CHOICE), :value=>1) -rb2 = TkRadiobutton.new(r, :text=>'Two', :variable=>$V.ref(:CHOICE), - :value=>2, :underline=>1) -rb3 = TkRadiobutton.new(r, :text=>'Three', - :variable=>$V.ref(:CHOICE), :value=>3) -btn = TkButton.new(r, :text=>'Button') - -mb = TkMenubutton.new(r, :text=>'Menubutton', :underline=>3, :takefocus=>true) -m = TkMenu.new(mb) -mb.menu(m) -$V[:rmbIndicatoron] = mb.indicatoron -m.add(:checkbutton, :label=>'Indicator?', #' - :variable=>$V.ref(:rmbIndicatoron), - :command=>proc{mb.indicatoron($V[:rmbIndicatoron])}) -m.add(:separator) -fillMenu(m) - -e = TkEntry.new(r, :textvariable=>$entryText) - -rtext_f, rtext = scrolledWidget(r, TkText, false, - :width=>12, :height=>5, :wrap=>:none) - -Tk.grid(cb, :sticky=>:ew) -Tk.grid(rb1, :sticky=>:ew) -Tk.grid(rb2, :sticky=>:ew) -Tk.grid(rb3, :sticky=>:ew) -Tk.grid(btn, :sticky=>:ew, :padx=>2, :pady=>2) -Tk.grid(mb, :sticky=>:ew, :padx=>2, :pady=>2) -Tk.grid(e, :sticky=>:ew, :padx=>2, :pady=>2) -Tk.grid(rtext_f, :sticky=>:news) - -TkGrid.columnconfigure(l, 0, :weight=>1) -TkGrid.rowconfigure(l, 7, :weight=>1) # text widget (grid is a PITA) - -Tk.grid(l, r, :sticky=>:news, :padx=>6, :pady=>6) -TkGrid.rowconfigure(client, 0, :weight=>1) -TkGrid.columnconfigure(client, [0, 1], :weight=>1) - -# -# Add some text to the text boxes: -# -msgs = [ -"The cat crept into the crypt, crapped and crept out again", -"Peter Piper picked a peck of pickled peppers", -"How much wood would a woodchuck chuck if a woodchuck could chuck wood", -"He thrusts his fists against the posts and still insists he sees the ghosts", -"Who put the bomb in the bom-b-bom-b-bom,", -"Is this your sister's sixth zither, sir?", -"Who put the ram in the ramalamadingdong?", -"I am not the pheasant plucker, I'm the pheasant plucker's mate." -] - -nmsgs = msgs.size -(0...50).each{|n| - msg = msgs[n % nmsgs] - ltext.insert(:end, "#{n}: #{msg}\n") - rtext.insert(:end, "#{n}: #{msg}\n") -} -# -# Scales and sliders pane: -# -l = Tk::Tile::Labelframe.new(scales, :text=>'Themed', :padding=>6) -r = TkLabelframe.new(scales, :text=>'Standard', :padx=>6, :pady=>6) - -if version?('0.6') - - # thremed frame - scale = Tk::Tile::Scale.new(l, :orient=>:horizontal, :from=>0, :to=>100, - :variable=>$V.ref(:SCALE)) - vscale = Tk::Tile::Scale.new(l, :orient=>:vertical, :from=>0, :to=>100, - :variable=>$V.ref(:VSCALE)) - progress = Tk::Tile::Progressbar.new(l, :orient=>:horizontal, :maximum=>100) - vprogress = Tk::Tile::Progressbar.new(l, :orient=>:vertical, :maximum=>100) - - if true - def progress.inverted(w, value) - if w.mode == 'indeterminate' - w.value(value) - else - w.value(w.maximum - value) - end - end - scale.command {|value| progress.value(value)} - vscale.command {|value| progress.inverted(vprogress, value) } - else - # This would also work, but the Tk scale widgets - # in the right hand pane cause some interference when - # in autoincrement/indeterminate mode. - # - progress.variable $V.ref(:SCALE) - vprogress.variable $V.ref(:VSCALE) - end - - scale.set(50) - vscale.set(50) - - lmode = Tk::Tile::Label.new(l, :text=>'Progress bar mode') - pbmode0 = Tk::Tile::Radiobutton.new(l, :variable=>$V.ref(:PBMODE), - :text=>'determinate', :value=>'determinate', - :command=>proc{pbMode(progress, vprogress)}) - pbmode1 = Tk::Tile::Radiobutton.new(l, :variable=>$V.ref(:PBMODE), - :text=>'indeterminate', :value=>'indeterminate', - :command=>proc{pbMode(progress, vprogress)}) - def pbMode(progress, vprogress) - if vprogress.mode != $V[:PBMODE] - vprogress.value(vprogress.maximum - vprogress.value) - end - - progress.mode $V[:PBMODE] - vprogress.mode $V[:PBMODE] - end - - start = Tk::Tile::Button.new(l, :text=>"Start", - :command=>proc{pbStart(progress, vprogress)}) - def pbStart(progress, vprogress) - # $V[:PBMODE] = 'indeterminate' - pbMode(progress, vprogress) - progress.start 10 - vprogress.start - end - - stop = Tk::Tile::Button.new(l, :text=>'Stop', - :command=>proc{pbStop(progress, vprogress)}) - def pbStop(progress, vprogress) - progress.stop - vprogress.stop - end - - Tk.grid(scale, :columnspan=>2, :sticky=>'ew') - Tk.grid(progress, :columnspan=>2, :sticky=>'ew') - Tk.grid(vscale, vprogress, :sticky=>'nws') - - Tk.grid(lmode, :sticky=>'we', :columnspan=>2) - Tk.grid(pbmode0, :sticky=>'we', :columnspan=>2) - Tk.grid(pbmode1, :sticky=>'we', :columnspan=>2) - Tk.grid(start, :sticky=>'we', :columnspan=>2) - Tk.grid(stop, :sticky=>'we', :columnspan=>2) - - l.grid_columnconfigure(0, :weight=>1) - l.grid_columnconfigure(1, :weight=>1) - l.grid_rowconfigure(99, :weight=>1) - - # standard frame - TkScale.new(r, :orient=>:horizontal, :from=>0, :to=>100, - :variable=>$V.ref(:SCALE)).grid(:sticky=>'news') - TkScale.new(r, :orient=>:vertical, :from=>0, :to=>100, - :variable=>$V.ref(:VSCALE)).grid(:sticky=>'nws') - - r.grid_columnconfigure(0, :weight=>1) - r.grid_columnconfigure(1, :weight=>1) - r.grid_rowconfigure(99, :weight=>1) - -else # tile 0.5 or earlier - - # themed frame - scale = Tk::Tile::Scale.new(l, :variable=>$V.ref(:SCALE), - :orient=>:horizontal, :from=>0, :to=>100) - vscale = Tk::Tile::Scale.new(l, :variable=>$V.ref(:VSCALE), - :orient=>:vertical, :from=>-25, :to=>25) - - progress = Tk::Tile::Progress.new(l, - :orient=>:horizontal, :from=>0, :to=>100) - vprogress = Tk::Tile::Progress.new(l, - :orient=>:vertical, :from=>-25, :to=>25) - - if true - scale.command{|value| progress.set(value)} - vscale.command{|value| vprogress.set(value)} - else # this would also work. (via TkVariable#trace) - v1 = scale.variable - v2 = vscale.variable - v1.trace('w', proc{ progress.set(v1.value) }) - v2.trace('w', proc{ vprogress.set(v2.value) }) - end - - Tk.grid(scale, :columnspan=>2, :sticky=>:ew) - Tk.grid(progress, :columnspan=>2, :sticky=>:ew) - Tk.grid(vscale, vprogress, :sticky=>:nws) - TkGrid.columnconfigure(l, 0, :weight=>1) - TkGrid.columnconfigure(l, 1, :weight=>1) - - # standard frame - TkScale.new(r, :variable=>$V.ref(:SCALE), - :orient=>:horizontal, :from=>0, :to=>100).grid(:sticky=>'news') - TkScale.new(r, :variable=>$V.ref(:VSCALE), - :orient=>:vertical, :from=>-25, :to=>25).grid(:sticky=>'nws') - - TkGrid.columnconfigure(r, 0, :weight=>1) - TkGrid.columnconfigure(r, 1, :weight=>1) -end - -# layout frames -Tk.grid(l, r, :sticky=>'nwes', :padx=>6, :pady=>6) -scales.grid_columnconfigure(0, :weight=>1) -scales.grid_columnconfigure(1, :weight=>1) -scales.grid_rowconfigure(0, :weight=>1) - -# -# Command box: -# -cmd = Tk::Tile::Frame.new($BASE) -b_close = Tk::Tile::Button.new(cmd, :text=>'Close', - :underline=>0, :default=>:normal, - :command=>proc{Tk.root.destroy}) -b_help = Tk::Tile::Button.new(cmd, :text=>'Help', :underline=>0, - :default=>:normal, :command=>proc{showHelp()}) -Tk.grid('x', b_close, b_help, :pady=>[6, 4], :padx=>4) -TkGrid.columnconfigure(cmd, 0, :weight=>1) - -# -# Set up accelerators: -# -$ROOT.bind('KeyPress-Escape', proc{Tk.event_generate(b_close, '')}) -$ROOT.bind('', proc{Tk.event_generate(b_help, '')}) -Tk::Tile::KeyNav.enableMnemonics($ROOT) -Tk::Tile::KeyNav.defaultButton(b_help) - -Tk.grid($TOOLBARS[0], '-', :sticky=>:ew) -Tk.grid($TOOLBARS[1], '-', :sticky=>:ew) -Tk.grid(control, nb, :sticky=>:news) -Tk.grid(cmd, '-', :sticky=>:ew) -TkGrid.columnconfigure($ROOT, 1, :weight=>1) -TkGrid.rowconfigure($ROOT, 2, :weight=>1) - -# -# Add a menu -# -menu = TkMenu.new($BASE) -$ROOT.menu(menu) -m_file = TkMenu.new(menu, :tearoff=>0) -menu.add(:cascade, :label=>'File', :underline=>0, :menu=>m_file) -m_file.add(:command, :label=>'Open', :underline=>0, - :compound=>:left, :image=>$ICON['open']) -m_file.add(:command, :label=>'Save', :underline=>0, - :compound=>:left, :image=>$ICON['save']) -m_file.add(:separator) -m_f_test = TkMenu.new(menu, :tearoff=>0) -m_file.add(:cascade, :label=>'Test submenu', :underline=>0, :menu=>m_f_test) -m_file.add(:checkbutton, :label=>'Text check', :underline=>5, - :variable=>$V.ref(:MENUCHECK1)) -m_file.insert(:end, :separator) - -if Tk.windowingsystem != 'x11' - TkConsole.create - m_file.insert(:end, :checkbutton, :label=>'Console', :underline=>5, - :variable=>$V.ref(:CONSOLE), :command=>proc{toggle_console()}) - def toggle_console - if TkComm.bool($V[:CONSOLE]) - TkConsole.show - else - TkConsole.hide - end - end -end - -m_file.add(:command, :label=>'Exit', :underline=>1, - :command=>proc{Tk.event_generate(b_close, '')}) - -%w(One Two Three Four).each{|lbl| - m_f_test.add(:radiobutton, :label=>lbl, :variable=>$V.ref(:MENURADIO1)) -} - -# Add Theme menu. -# -menu.add(:cascade, :label=>'Theme', :underline=>3, - :menu=>makeThemeMenu(menu)) - -setTheme($V[:THEME]) - -# -# Combobox demo pane: -# -values = %w(list abc def ghi jkl mno pqr stu vwx yz) -2.times {|i| - cb = Tk::Tile::Combobox.new( - combo, :values=>values, :textvariable=>$V.ref(:COMBO)) - cb.pack(:side=>:top, :padx=>2, :pady=>2, :expand=>false, :fill=>:x) - if i == 1 - cb.ttk_state :readonly - begin - cb.current = 3 # ignore if unsupported (tile0.4) - rescue - end - end -} - -# -# Treeview widget demo pane: -# -if version?('0.5') - - treeview = nil # avoid 'undefined' error - scrollbar = Tk::Tile::Scrollbar.new(tree, - :command=>proc{|*args| treeview.yview(*args)}) - treeview = Tk::Tile::Treeview.new(tree, :columns=>%w(Class), :padding=>4, - :yscrollcommand=>proc{|*args| scrollbar.set(*args)}) - - Tk.grid(treeview, scrollbar, :sticky=>'news') - tree.grid_columnconfigure(0, :weight=>1) - tree.grid_rowconfigure(0, :weight=>1) - tree.grid_propagate(0) - - # Add initial tree node: - # Later nodes will be added in <> binding. - treeview.insert('', 0, :id=>'.', :text=>'Main Window', :open=>false, - :values=>[TkWinfo.classname('.')]) - treeview.headingconfigure('#0', :text=>'Widget') - treeview.headingconfigure('Class', :text=>'Class') - treeview.bind('', proc{fillTree(treeview)}) - - def fillTree(treeview) - id = treeview.focus_item - unless TkWinfo.exist?(id) - treeview.delete(id) - end - # Replace tree item children with current list of child windows. - treeview.delete(treeview.children(id)) - for child in TkWinfo.children(id) - treeview.insert(id, :end, :id=>child, :text=>TkWinfo.appname(child), - :open=>false, :values=>[TkWinfo.classname(child)]) - unless TkWinfo.children(child).empty? - # insert dummy child to show [+] indicator - treeview.insert(child, :end) - end - end - end - -else - Tk::Tile::Label.new(tree, - :text=>'Treeview is supported on tile 0.5 or later...').pack -end - -# -# Other demos: -# -$Timers = {:StateMonitor=>nil, :FocusMonitor=>nil} - -begin - msg = Tk::Tile::Label.new(others, :justify=>:left, :wraplength=>300) -rescue - msg = TkMessage.new(others, :aspect=>200) -end - -$Desc = {} - -showDescription = TkBindTag.new -showDescription.bind('Enter', proc{|w| msg.text($Desc[w.path])}, '%W') -showDescription.bind('Leave', proc{|w| msg.text('')}, '%W') - -[ - [ :trackStates, "Widget states...", - "Display/modify widget state bits" ], - - [ :scrollbarResizeDemo, "Scrollbar resize behavior...", - "Shows how Tile and standard scrollbars differ when they're sized too large" ], - - [ :trackFocus, "Track keyboard focus..." , - "Display the name of the widget that currently has focus" ], - - [ :repeatDemo, "Repeating buttons...", - "Demonstrates custom classes (see demos/repeater.tcl)" ] - -].each{|demo_cmd, label, description| - b = Tk::Tile::Button.new(others, :text=>label, - :command=>proc{ self.__send__(demo_cmd) }) - $Desc[b.path] = description - b.bindtags <<= showDescription - - b.pack(:side=>:top, :expand=>false, :fill=>:x, :padx=>6, :pady=>6) -} - -msg.pack(:side=>:bottom, :expand=>true, :fill=>:both) - - -# -# Scrollbar resize demo: -# -$scrollbars = nil - -def scrollbarResizeDemo - if $scrollbars - begin - $scrollbars.destroy - rescue - end - end - $scrollbars = TkToplevel.new(:title=>'Scrollbars', :geometry=>'200x200') - f = TkFrame.new($scrollbars, :height=>200) - tsb = Tk::Tile::Scrollbar.new(f, :command=>proc{|*args| sbstub(tsb, *args)}) - sb = TkScrollbar.new(f, :command=>proc{|*args| sbstub(sb, *args)}) - Tk.grid(tsb, sb, :sticky=>:news) - - sb.set(0, 0.5) # prevent backwards-compatibility mode for old SB - - f.grid_columnconfigure(0, :weight=>1) - f.grid_columnconfigure(1, :weight=>1) - f.grid_rowconfigure(0, :weight=>1) - - f.pack(:expand=>true, :fill=>:both) -end - -# -# Track focus demo: -# -$FocusInf = TkVariable.new_hash -$focus = nil - -def trackFocus - if $focus - begin - $focus.destroy - rescue - end - end - $focus = TkToplevel.new(:title=>'Keyboard focus') - i = 0 - [ - ["Focus widget:", :Widget], - ["Class:", :WidgetClass], - ["Next:", :WidgetNext], - ["Grab:", :Grab], - ["Status:", :GrabStatus] - ].each{|label, var_index| - Tk.grid(Tk::Tile::Label.new($focus, :text=>label, :anchor=>:e), - Tk::Tile::Label.new($focus, - :textvariable=>$FocusInf.ref(var_index), - :width=>40, :anchor=>:w, :relief=>:groove), - :sticky=>:ew) - i += 1 - } - $focus.grid_columnconfigure(1, :weight=>1) - $focus.grid_rowconfigure(i, :weight=>1) - - $focus.bind('Destroy', proc{Tk.after_cancel($Timers[:FocusMonitor])}) - focusMonitor -end - -def focusMonitor - $FocusInf[:Widget] = focus_win = Tk.focus - if focus_win - $FocusInf[:WidgetClass] = focus_win.winfo_classname - $FocusInf[:WidgetNext] = Tk.focus_next(focus_win) - else - $FocusInf[:WidgetClass] = $FocusInf[:WidgetNext] = '' - end - - $FocusInf[:Grab] = grab_wins = Tk.current_grabs - unless grab_wins.empty? - $FocusInf[:GrabStatus] = grab_wins[0].grab_status - else - $FocusInf[:GrabStatus] = '' - end - - $Timers[:FocusMonitor] = Tk.after(200, proc{ focusMonitor() }) -end - -# -# Widget state demo: -# -$Widget = TkVariable.new - -TkBindTag::ALL.bind('Control-Shift-ButtonPress-1', - proc{|w| - $Widget.value = w - updateStates() - Tk.callback_break - }, '%W') -$states_list = %w(active disabled focus pressed selected - background indeterminate invalid default) -$states_btns = {} -$states = nil - -$State = TkVariable.new_hash - -def trackStates - if $states - begin - $state.destroy - rescue - end - end - $states = TkToplevel.new(:title=>'Widget states') - - l_inf = Tk::Tile::Label.new($states, :text=>"Press Control-Shift-Button-1 on any widget") - - l_lw = Tk::Tile::Label.new($states, :text=>'Widget:', - :anchor=>:e, :relief=>:groove) - l_w = Tk::Tile::Label.new($states, :textvariable=>$Widget, - :anchor=>:w, :relief=>:groove) - - Tk.grid(l_inf, '-', :sticky=>:ew, :padx=>6, :pady=>6) - Tk.grid(l_lw, l_w, :sticky=>:ew) - - $states_list.each{|st| - cb = Tk::Tile::Checkbutton.new($states, :text=>st, - :variable=>$State.ref(st), - :command=>proc{ changeState(st) }) - $states_btns[st] = cb - Tk.grid('x', cb, :sticky=>:nsew) - } - - $states.grid_columnconfigure(1, :weight=>1) - - f_cmd = Tk::Tile::Frame.new($states) - Tk.grid('x', f_cmd, :sticky=>:nse) - - b_close = Tk::Tile::Button.new(f_cmd, :text=>'Close', - :command=>proc{ $states.destroy }) - Tk.grid('x', b_close, :padx=>4, :pady=>[6,4]) - f_cmd.grid_columnconfigure(0, :weight=>1) - - $states.bind('KeyPress-Escape', proc{Tk.event_generate(b_close, '')}) - - $states.bind('Destroy', proc{Tk.after_cancel($Timers[:StateMonitor])}) - stateMonitor() -end - -def stateMonitor - updateStates() if $Widget.value != '' - $Timers[:StateMonitor] = Tk.after(200, proc{ stateMonitor() }) -end - -def updateStates - $states_list.each{|st| - begin - $State[st] = $Widget.window.ttk_instate(st) - rescue - $states_btns[st].ttk_state('disabled') - else - $states_btns[st].ttk_state('!disabled') - end - } -end - -def changeState(st) - if $Widget.value != '' - if $State.bool_element(st) - $Widget.window.ttk_state(st) - else - $Widget.window.ttk_state("!#{st}") - end - end -end - -# -# Repeating buttons demo: -# -def repeatDemo - if defined?($repeatDemo) && $repeatDemo.exist? - $repeatDemo.deiconify; return - end - $repeatDemo = TkToplevel.new(:title=>'Repeating button') - - f = Tk::Tile::Frame.new($repeatDemo) - b = Tk::Tile::Button.new(f, :class=>'Repeater', :text=>'Press and hold') - if version?('0.6') - p = Tk::Tile::Progressbar.new(f, :orient=>:horizontal, :maximum=>10) - else # progressbar is not supported - p = Tk::Tile::Progress.new(f, :orient=>:horizontal, :from=>0, :to=>10) - def p.step - i = self.get + 1 - i = self.from if i > self.to - self.set(i) - end - end - b.command {p.step} - - b.pack(:side=>:left, :expand=>false, :fill=>:none, :padx=>6, :pady=>6) - p.pack(:side=>:right, :expand=>true, :fill=>:x, :padx=>6, :pady=>6) - f.pack(:expand=>true, :fill=>:both) -end - -Tk.mainloop diff --git a/ext/tk/sample/tkextlib/tile/iconlib.tcl b/ext/tk/sample/tkextlib/tile/iconlib.tcl deleted file mode 100644 index 9a93ece504..0000000000 --- a/ext/tk/sample/tkextlib/tile/iconlib.tcl +++ /dev/null @@ -1,110 +0,0 @@ -array set ImgData { -bold {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAI6hI+py60U3wj+ -RYQFJYRvEWFBCeFbRFhQQvhG8YPgX0RYUEL4FhEWlBC+RYQFJYQPFN8IPqYut/8hBQA7} -copy {R0lGODlhEAAQAJEAANnZ2QAAAP///wAAhCH5BAEAAAAALAAAAAAQABAAAAJUhI8JFJ/gY4iI -UEL4FyIiFIXgW0iEUDgfACBI9pzMAAGRiIghWSMDECR7JEKGtkFIRFBG+TIQKDQxtgzcDcmX -IfgwQrFlCD4MyZch+EDzj+Bj6mYBADs=} -cut {R0lGODlhEAAQAJEAANnZ2QAAAAAAhP///yH5BAEAAAAALAAAAAAQABAAAAJFhI+pcUHwEeIi -E0gACIKPEAFBIXy0gMg8EhM+YmQiKSL4eAIiJMI/EQEhQGYGYiQIQAg+iAkIATIzECMBIgT/ -RBARERlSADs=} -dragfile {R0lGODlhGAAYAKIAANnZ2TMzM////wAAAJmZmf///////////yH5BAEAAAAALAAAAAAYABgA -AAPACBi63IqgC4GiyxwogaAbKLrMgSKBoBoousyBogEACIGiyxwoKgGAECI4uiyCExMTOACB -osuNpDoAGCI4uiyCIkREOACBosutSDoAgSI4usyCIjQAGCi63Iw0ACEoOLrMgiI0ABgoutyM -NAAhKDi6zIIiNAAYKLrcjDQAISg4usyCIjQAGCi63Iw0AIGiiqPLIyhCA4CBosvNSAMQKKo4 -ujyCIjQAGCi63Iw0AIGiy81IAxCBpMu9GAMAgKPL3QgJADs=} -dragicon {R0lGODlhGAAYALMAANnZ2TMzM/////8zM8zMzGYAAAAAAJmZmQCZMwAzZgCZzGZmZv////// -/////////yH5BAEAAAAALAAAAAAYABgAAAT/EMAgJ60SAjlBgEJOSoMIEMgZoJCT0iADBFIG -KOSkNMwAAABhwiHnIEKIIIQQAQIZhBBwyDmKEMIEE0yABoAghIBDzlGEENDIaQAIQgg45BwF -CinPOccAECYcUiKEEBFCiHPgMQAEIcQYYyABBUGIQCHlMQCEScZAAhKEEApCECGOARAEIQQp -BRGIpAyCJCGOASBAISdEcqJAVBLiGABggELOAJGUKyiVhDgGABigkJMEhNAKSqkEhTgGgCCl -FCQEGIJSSiUhjgEgQCEnJVBJmYQ4BoAAhZyTQCVnEuIYAAIUckoCk5xSiGMACFDISSs9BoBg -rRXQMQAEKOSklR4DEUAI8MhJ6wwGAACgkZNWCkAEADs=} -error {R0lGODlhIAAgAKIAANnZ2YQAAP8AAISEhP///////////////yH5BAEAAAAALAAAAAAgACAA -AAP/CLoMGLqKoMvtGIqiqxEYCLrcioGiyxwIusyBgaLLLRiBoMsQKLrcjYGgu4Giy+2CAkFX -A0WX2wXFIOgGii7trkCEohsDCACBoktEKLpKhISiGwAIECiqSKooukiqKKoxgACBooukKiIo -SKooujGDECi6iqQqsopEV2MQAkV3kXQZRXdjEAJFl5F0FUWXY3ACRZcFSRdFlyVwJlB0WZB0 -UXRZAmcCRZeRdBVFl2NwAkV3kXQZRXdjcAJFV5FURVaR6GoMDgSKLpKqiKAgqaLoxgwOBIoq -kiqKLpIqimrM4ECg6BIRiq4SIaHoxgyCBoou7a5AhKIbMzgAAIGiy+2CTWJmBhAAAkWX2wXF -zCDoBooud2PMDIKuRqDocgtGzMwg6O4Eii5z4Kgi6DIMhqLoagQGjiqCLvPgYOgqji6CLrfi -6DIj6HI7jq4i6DIkADs=} -file {R0lGODlhCwANAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAALAA0AAAIyhI9G8Q0AguSH -AMQdxQgxEyEFQfItICQokYgEBMm3gBCKLRIQJN8CQii2SECQfAug+FgAOw==} -folder {R0lGODlhEAANAKIAANnZ2YSEhMbGxv//AP///wAAAP///////yH5BAEAAAAALAAAAAAQAA0A -AANjCIqhiqDLITgyEgi6GoIjIyMYugCBpMsaWBA0giMjIzgyUYBBMjIoIyODEgVBODIygiMj -E1gQJIMyMjIoI1GAQSMjODIyghMFQSgjI4MyMhJYEDSCIyMjODJRgKHLXAiApcucADs=} -hourglass {R0lGODlhIAAgAKIAANnZ2YAAAAAAAP8AAP///8DAwICAgP///yH5BAEAAAAALAAAAAAgACAA -AAPZCLrc/jDKSau9OGcUuqyCoMvNGENVhaMrCLrcjaLLgqDL7WhFVIVVZoKgy+1oRUSFVWaC -oMvtaEVEhVVmgqDL7WhFRIVVZoKgy+1oVVaCJWaCoMvtgKxISrBMEHS5fZEVSRkKgi63NzIq -EwRdbndkVCYIutzeyIqqDAVBl9sXWRFJYZkg6HI7ICsiKqwyEwRdbkcrIhKsMhMEXW5HKyIp -lDITBF1uRysyEiwxEwRdbkcrIyuUEhMEXW5H0WVB0OVujKGqwtEVBF1uRtHlRdDl9odRTlrt -xRmjBAA7} -info {R0lGODlhIAAgAKIAANnZ2YSEhMbGxv///wAA/wAAAP///////yH5BAEAAAAALAAAAAAgACAA -AAP/CLoMGLqKoMvtGCo4uhKBgaDLDRghOLqsghEIuryBgqPLPSiBoMsQOLojhEQkOLpTCLob -OLqKpIujq4WgC4Gju0i6OLpbCKohOLorhEQkOLorhaAQOLrc3qgCIARHl9sbSQUEji4j6RKO -Lk9hQODosiKp4ujyFIbi6LIiqeLo8hSG4uiyIqni6PIUhuLosiKp4ujyFIYKji4PkiqOLkth -BASOLg+SKo4uV2AEhODoMpIqju5KYShA4Ogqku7i6E4FRgAAYOHocvugiohAUC0cXe7GiohA -0IUSHF3uQamICATdrULB0WUVrIqIQNBlCCwVHF2pwsJQRdDlDYyoKsHRPMLQDQRdbsDQqBmc -wlBF0OV2jJqZwggEXW5vVDMVgaDL7Y5qKgJBl9sfVUUg6HL7AxSKoMvtr1AEgi5DAgA7} -italic {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAIrhI+py+1A4hN8 -hIjINBITPlpEZBqJCR8tIjKNxISPFhGZQOITfExdbv9FCgA7} -new {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAJFhI95FN8IvgXJ -jyD4ECQ/JAh+kPyICIIdJP+CYAfJvyDYQfIvCHaQ/AuCHST/gmAHyb8g2EHyLwh2kPwLgk3x -MQg+pu4WADs=} -open {R0lGODlhEAAQAKIAANnZ2QAAAP//AP///4SEAP///////////yH5BAEAAAAALAAAAAAQABAA -AANZCLrczigUQZc1EDQgEHSZAwMgIhB0NQIDQkYwdANBNUZwZGQEJxBUQwZlZGRQAkE1RnAE -Q5dVcCSQdDcAYySQdDcAISSQdDcAASKQdDcAAQBDlwNBl9sfApQAOw==} -openfold {R0lGODlhEAANAKIAANnZ2YSEhP///8bGxv//AAAAAP///////yH5BAEAAAAALAAAAAAQAA0A -AANgCIqhiqDLgaIaCLoagkNDIxi6AIFCQ0M4KKpRgCFDQzg0NIQThaHLSxgVKLochRMVMkhD -Q4M0VBFYEDKEQ0NDOFFRgCE0NEhDQ4MVBRAoNDSEQ0NRWAAYuqyFBQBYurwJADs=} -overstrike {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAI3hI+py80Uh+Aj -RFhQCP8iMILgWwRGEHyLwAiCbxEYQfCB4iPBhwiMIPgXYREEHyEiguBj6nI7FQA7} -palette {R0lGODlhEAAQAKIAANnZ2QAAAP//AP////8A/4QAhP8AAAD//yH5BAEAAAAALAAAAAAQABAA -AANtCLrcjqGBoMsRKCMTgaALMSgDAYMSCKoxgAFBITgSAIAQEhUIARCAEgAQOBAwghMQEwga -MoIjIxAIEgCAEBEyKBAgg4GgGxAIYTGCgaALcRgQIIGgCwEYICODgaALITgyEoGguxiqCLrc -/lChBAA7} -passwd {R0lGODlhIAAgAMQAANnZ2QAAAICAgICAAP///7CwsMDAwMjIAPjIAOjo6Pj4AODg4HBwcMj4 -ANjY2JiYANDQ0MjIyPj4yKCgoMiYAMjImDAwAMjIMJiYmJCQkP////////////////////// -/yH5BAEAAAAALAAAAAAgACAAAAX/ICCOIhiIIgiII1maZSCMQnCeJyAIQiAIAiAMwxCcJwkk -EAQRCIUwGMSBDEEAAuJIlgKRJEEgGAMRBIGiDENQlqNAJAsYCEwgEEEgBAHSIEMAAuJIAgKR -LEsgGEMgCEJgBMqhHENQlgJILMsSCMRABEFgGAESHMcRgIA4kgKxOIsTBAOhKAITKEGDHMhD -kqIAEqAjisJAgIooBkpwNMcTgIA4jgLhOBAkEAOhKIoSKEGDIMcTkKQICgQEQQIxEIqiBEpw -IMdxPAEIiCMJCEQUMUQ0EIqiHIfSIM3xBGUpCiABCUQyEMqhHMiBHMjxBCAgjuQoEAKxRANB -HMqhHM1x/zxDUJajQIACsUTDQBAEIR3IcQRDAALiSIoCYQiEE03gII7HQR3BEICAOJICYRSC -QDjRNE1CAAzVQR3WE5AkAAqEUQiFQEARBAUAAAzHQR3BEICAOI4CUQhFIBAREwXjUFUHdQRD -QJJAABbCFAhEJBgBAADAMAwXdQRDAALiCAhEIRQCYRiCEZDjUFFHMAQkIBAFOAmTQBiFUAQg -II7AUFXUEQwBCQjEJExBkBRCEZCjMIBD9RxDAALiGEzCFBBYIRTBOI7AQB1DMIoCMQkYGAjL -JEwBCIgjOVDDEJCAQGACJiTTJEwBSY5BEJAiSCCwTAiCZBKmAATEkSzNQBCCYCDBJgELTNMk -g0AMEgwTAhAQR7I0zYARgvM8TyAIznMMAQA7} -paste {R0lGODlhEAAQAKIAANnZ2QAAAP//AISEAISEhP///wAAhP///yH5BAEAAAAALAAAAAAQABAA -AANwCLrcjqGBoKsYqiKrCDSGBkMiJJCGAgCDKBB0gwYDIKYwdJUIAyBokIaGBmloAhBiaAgH -TdcCEIKGBsmwVM0AIYaGcAxL1coQgoYGySoisMzMAoeGxrB01QJpaMiwMHTLAEPVsHTVEHTR -dBlBlxswAQA7} -print {R0lGODlhEAAQAKIAANnZ2QAAAP///4SEhP//AP///////////yH5BAEAAAAALAAAAAAQABAA -AANZCLrcjqG7CLqBoquBoBuCoSqBoBsouhoIuiEYqrKBoIGiqwEYEIChyxAIEYGgywEYgKHL -DAgRCLozgwABARgIukSEABEBGLq8gAEQCLobgAEAgKHLgaDLzZgAOw==} -question {R0lGODlhIAAgAKIAANnZ2YSEhMbGxv///wAAAAAA/////////yH5BAEAAAAALAAAAAAgACAA -AAP/CLoMGLqKoMvtGCo4uhKBgaDLDRghOLqsghEIuryBgqPLPSiBoMsQOLrcjYSgu4GjO4Kl -Kzi6Qwi6EDi6I4UyU1VYgqM7hKAagqM7VTg6VYWFoztCCAqBo6tVWDVThVU4ukqBACE4ulqF -VSNVWIWjq0IYEDi6K4UlU1VYOLpMgRA4uryCpTi6PIShOLq8hVU4uqyEoTi6vIUlOLqshKE4 -uryFhaPLSxgqOLrc3kgoAgJHl0ewSnB0eQhDIQRHl6uwCkeXhTAUIHB0uQqrcHSZAiMAAJBw -dFcKS3B0lwIjAkGVcHS5GykiAkEXSHB0uQeFIiIQdJcIBUeXVZAoIgJBT5chkFRwdIUICUMV -QZc3MIKIBEcJQzcQdLkBQ4NmcAhDFUGX2zFoZggjEHS5vRHNUASCLrc7oqEIBF1uf0QUgaDL -7Q9QKIIut79CEQi6DAkAOw==} -redo {R0lGODlhEAAQAJEAANnZ2QAAhP///////yH5BAEAAAAALAAAAAAQABAAAAIvhI+py+1vSByC -jxAYQXDMwsyAggQAQBB8iwgMgg8REQgUwqbYBDsIPqYutz+MgBQAOw==} -save {R0lGODlhEAAQAJEAANnZ2QAAAISEAP///yH5BAEAAAAALAAAAAAQABAAAAJWhI9pFB8RIIRC -+BYQFqQQvkWEBSmEbyFhQQrhW0hYkEL4FhIWpBC+hYQFSYxvIgFAoXy0AAiSGP8kAIIkxgcI -CSBEQvEBQgIIkVB8gJAAAhgfj+BjWgEAOw==} -underline {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAI3hI+py60UBy4I -vkVcBMG/iIsg+BdxEQT/Ii6C4F/ERRD8i7gIgn8RF0HwkWITfExFin8EH1OXCwA7} -undo {R0lGODlhEAAQAJEAANnZ2QAAhP///////yH5BAEAAAAALAAAAAAQABAAAAIuhI+py+2vSByC -HxdxQCHsCIg7oAAAEUHwLTAiKIQPgRSbYMfd3VEIH1OX2x8mUgA7} -warning {R0lGODlhIAAgAKIAANnZ2YSEAP//AMbGxgAAAISEhP///////yH5BAEAAAAALAAAAAAgACAA -AAP/CLq8gREIutz+KESGEHS5vVGIiAxSIehy+6JAUaUqBF1uBxQoukOFhaDL7RgoukKFhaDL -3RgoujqEVQi63IyBortUWAi63IuBostDWIWgy60YIjKERCMiSFUIutyAISKCpCoiOFSFoMsd -KCpIqiKCQlUIusyBooqkKiIoQ1UIuryBooqkiqJKVQi6rIGii6SKojpUWAi6DIGiG0RIgaJL -VQi6HCi6MoREg6I7VFgIuhsoukqEhKKrVFgIuhoouhuEgaKrQ1iFoAuBortDOCi6S4WFoBso -uiyEostDWIWgGii63K6IqgAAIVB0WQaJBkV3h7AKAAJFl4WQiFB0mQoLRyBQdFkJiQhFl4ew -CgJFl3WQaFB0WQirIFB0ud0RVVWg6HJ7o6GqAgwUXW5fNFRVhQCBpMvti0oVABCwdLndEehi -6XI7I4AEADs=} -} diff --git a/ext/tk/sample/tkextlib/tile/readme.txt b/ext/tk/sample/tkextlib/tile/readme.txt deleted file mode 100644 index 6c4a5cf543..0000000000 --- a/ext/tk/sample/tkextlib/tile/readme.txt +++ /dev/null @@ -1,2 +0,0 @@ -All of *.tcl and under themes/ directory (except kroc.rb) are -quoted from Tcl/Tk's Tile extension. Please read Orig_LICENSE.txt. diff --git a/ext/tk/sample/tkextlib/tile/repeater.tcl b/ext/tk/sample/tkextlib/tile/repeater.tcl deleted file mode 100644 index 43beb9430a..0000000000 --- a/ext/tk/sample/tkextlib/tile/repeater.tcl +++ /dev/null @@ -1,117 +0,0 @@ -# -# $Id$ -# -# Demonstration of custom classes. -# -# The Tile button doesn't have built-in support for autorepeat. -# Instead of adding -repeatdelay and -repeatinterval options, -# and all the extra binding scripts required to deal with them, -# we create a custom widget class for autorepeating buttons. -# -# Usage: -# ttk::button .b -class Repeater [... other options ...] -# -# TODO: -# Use system settings for repeat interval and initial delay. -# -# Notes: -# Repeater buttons work more like scrollbar arrows than -# Tk repeating buttons: they fire once immediately when -# first pressed, and $State(delay) specifies the initial -# interval before the button starts autorepeating. -# - -namespace eval tile::Repeater { - variable State - set State(timer) {} ;# [after] id of repeat script - set State(interval) 100 ;# interval between repetitions - set State(delay) 300 ;# delay after initial invocation -} - -### Class bindings. -# - -bind Repeater { %W state active } -bind Repeater { %W state !active } - -bind Repeater { tile::Repeater::Activate %W } -bind Repeater <> { tile::Repeater::Activate %W } - -bind Repeater { tile::Repeater::Press %W } -bind Repeater { tile::Repeater::Release %W } -bind Repeater { tile::Repeater::Pause %W } -bind Repeater { tile::Repeater::Resume %W } ;# @@@ see below - -# @@@ Workaround for metacity-induced bug: -bind Repeater \ - { if {"%d" ne "NotifyUngrab"} { tile::Repeater::Resume %W } } - -### Binding procedures. -# - -## Activate -- Keyboard activation binding. -# Simulate clicking the button, and invoke the command once. -# -proc tile::Repeater::Activate {w} { - $w instate disabled { return } - set oldState [$w state pressed] - update idletasks; after 100 - $w state $oldState - after idle [list $w invoke] -} - -## Press -- ButtonPress-1 binding. -# Invoke the command once and start autorepeating after -# $State(delay) milliseconds. -# -proc tile::Repeater::Press {w} { - variable State - $w instate disabled { return } - $w state pressed - $w invoke - after cancel $State(timer) - set State(timer) [after $State(delay) [list tile::Repeater::Repeat $w]] -} - -## Release -- ButtonRelease binding. -# Stop repeating. -# -proc tile::Repeater::Release {w} { - variable State - $w state !pressed - after cancel $State(timer) -} - -## Pause -- B1-Leave binding -# Temporarily suspend autorepeat. -# -proc tile::Repeater::Pause {w} { - variable State - $w state !pressed - after cancel $State(timer) -} - -## Resume -- B1-Enter binding -# Resume autorepeat. -# -proc tile::Repeater::Resume {w} { - variable State - $w instate disabled { return } - $w state pressed - $w invoke - after cancel $State(timer) - set State(timer) [after $State(interval) [list tile::Repeater::Repeat $w]] -} - -## Repeat -- Timer script -# Invoke the command and reschedule another repetition -# after $State(interval) milliseconds. -# -proc tile::Repeater::Repeat {w} { - variable State - $w instate disabled { return } - $w invoke - set State(timer) [after $State(interval) [list tile::Repeater::Repeat $w]] -} - -#*EOF* diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl b/ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl deleted file mode 100644 index 68733e8ad2..0000000000 --- a/ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl +++ /dev/null @@ -1,149 +0,0 @@ -# blue.tcl - Copyright (C) 2004 Pat Thoyts -# -# blue.tcl,v 1.27 2005/10/08 14:56:57 jenglish Exp -# -# - -namespace eval tile::theme::blue { - - package provide tile::theme::blue 0.7 - - set imgdir [file join [file dirname [info script]] blue] - array set I [tile::LoadImages $imgdir *.gif] - - array set colors { - -frame "#6699cc" - -lighter "#bcd2e8" - -window "#e6f3ff" - -selectbg "#ffff33" - -selectfg "#000000" - -disabledfg "#666666" - } - - style theme create blue -settings { - - style default . \ - -borderwidth 1 \ - -background $colors(-frame) \ - -fieldbackground $colors(-window) \ - -troughcolor $colors(-lighter) \ - -selectbackground $colors(-selectbg) \ - -selectforeground $colors(-selectfg) \ - ; - style map . -foreground [list disabled $colors(-disabledfg)] - - ## Buttons. - # - style default TButton -padding "10 0" - style layout TButton { - Button.button -children { - Button.focus -children { - Button.padding -children { - Button.label - } - } - } - } - - style element create button image $I(button-n) \ - -map [list pressed $I(button-p) active $I(button-h)] \ - -border 4 -sticky ew - - style element create Checkbutton.indicator image $I(check-nu) \ - -width 24 -sticky w -map [list \ - {!disabled active selected} $I(check-hc) \ - {!disabled active} $I(check-hu) \ - {!disabled selected} $I(check-nc) ] - - style element create Radiobutton.indicator image $I(radio-nu) \ - -width 24 -sticky w -map [list \ - {!disabled active selected} $I(radio-hc) \ - {!disabled active} $I(radio-hu) \ - selected $I(radio-nc) ] - - style default TMenubutton -relief raised -padding {10 2} - - ## Toolbar buttons. - # - style default Toolbutton \ - -width 0 -relief flat -borderwidth 2 -padding 4 \ - -background $colors(-frame) -foreground #000000 ; - style map Toolbutton -background [list active $colors(-selectbg)] - style map Toolbutton -foreground [list active $colors(-selectfg)] - style map Toolbutton -relief { - disabled flat - selected sunken - pressed sunken - active raised - } - - ## Entry widgets. - # - style default TEntry \ - -selectborderwidth 1 -padding 2 -insertwidth 2 -font TkTextFont - style default TCombobox \ - -selectborderwidth 1 -padding 2 -insertwidth 2 -font TkTextFont - - ## Notebooks. - # - style default TNotebook.Tab -padding {4 2 4 2} - style map TNotebook.Tab \ - -background \ - [list selected $colors(-frame) active $colors(-lighter)] \ - -padding [list selected {4 4 4 2}] - - ## Labelframes. - # - style default TLabelframe -borderwidth 2 -relief groove - - ## Scrollbars. - # - style layout Vertical.TScrollbar { - Scrollbar.trough -children { - Scrollbar.uparrow -side top - Scrollbar.downarrow -side bottom - Scrollbar.uparrow -side bottom - Vertical.Scrollbar.thumb -side top -expand true -sticky ns - } - } - - style layout Horizontal.TScrollbar { - Scrollbar.trough -children { - Scrollbar.leftarrow -side left - Scrollbar.rightarrow -side right - Scrollbar.leftarrow -side right - Horizontal.Scrollbar.thumb -side left -expand true -sticky we - } - } - - style element create Horizontal.Scrollbar.thumb image $I(sb-thumb) \ - -map [list {pressed !disabled} $I(sb-thumb-p)] -border 3 - - style element create Vertical.Scrollbar.thumb image $I(sb-vthumb) \ - -map [list {pressed !disabled} $I(sb-vthumb-p)] -border 3 - - foreach dir {up down left right} { - style element create ${dir}arrow image $I(arrow${dir}) \ - -map [list \ - disabled $I(arrow${dir}) \ - pressed $I(arrow${dir}-p) \ - active $I(arrow${dir}-h)] \ - -border 1 -sticky {} - } - - ## Scales. - # - style element create Scale.slider \ - image $I(slider) -map [list {pressed !disabled} $I(slider-p)] - - style element create Vertical.Scale.slider \ - image $I(vslider) -map [list {pressed !disabled} $I(vslider-p)] - - style element create Horizontal.Progress.bar \ - image $I(sb-thumb) -border 2 - style element create Vertical.Progress.bar \ - image $I(sb-vthumb) -border 2 - - } -} - diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif deleted file mode 100644 index 3c1be9d880..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif deleted file mode 100644 index 1cb36ec554..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif deleted file mode 100644 index e363c362ed..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif deleted file mode 100644 index cbc3db2756..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif deleted file mode 100644 index 14d541b03e..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif deleted file mode 100644 index 32584a34b2..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif deleted file mode 100644 index 913e9da94b..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif deleted file mode 100644 index d02208fcf7..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright.gif deleted file mode 100644 index 2b0f1fd07b..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif deleted file mode 100644 index 6059bae094..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif deleted file mode 100644 index 20b6a824f4..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup.gif deleted file mode 100644 index 5857616228..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-h.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-h.gif deleted file mode 100644 index 0947f43b90..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-h.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.gif deleted file mode 100644 index d9845283a5..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.xcf b/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.xcf deleted file mode 100644 index e38ed19e61..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.xcf and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-p.gif deleted file mode 100644 index e819b1b951..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hc.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hc.gif deleted file mode 100644 index b753aead97..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hu.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hu.gif deleted file mode 100644 index 74dbb799a2..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hu.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nc.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nc.gif deleted file mode 100644 index 8f3d9114a3..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nu.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nu.gif deleted file mode 100644 index 6f360ffd62..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nu.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif deleted file mode 100644 index f7c21fb0c3..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif deleted file mode 100644 index a006630388..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif deleted file mode 100644 index 0281de37d8..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif deleted file mode 100644 index 58ec60c1db..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif deleted file mode 100644 index 6cfaa416d1..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif deleted file mode 100644 index d9bfc0a7be..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif deleted file mode 100644 index 930d7fd9ff..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif deleted file mode 100644 index 060be5dd41..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider-p.gif deleted file mode 100644 index c1c089de3e..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider.gif deleted file mode 100644 index 1805c2dc7c..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif deleted file mode 100644 index bc37b31c3d..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider.gif deleted file mode 100644 index d3745c7f62..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl b/ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl deleted file mode 100644 index 4facac70d8..0000000000 --- a/ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl +++ /dev/null @@ -1,6 +0,0 @@ -# Package index for tile demo pixmap themes. - -if {[file isdirectory [file join $dir blue]]} { - package ifneeded tile::theme::blue 0.7 \ - [list source [file join $dir blue.tcl]] -} diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl deleted file mode 100644 index 60c59be0ca..0000000000 --- a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl +++ /dev/null @@ -1,194 +0,0 @@ -# keramik.tcl - -# -# A sample pixmap theme for the tile package. -# -# Copyright (c) 2004 Googie -# Copyright (c) 2004 Pat Thoyts -# -# $Id$ - -package require Tk 8.4; # minimum version for Tile -package require tile 0.5; # depends upon tile 0.5 - -namespace eval tile { - namespace eval theme { - namespace eval keramik { - variable version 0.3.2 - } - } -} - -namespace eval tile::theme::keramik { - - variable imgdir [file join [file dirname [info script]] keramik] - variable I - array set I [tile::LoadImages $imgdir *.gif] - - variable colors - array set colors { - -frame "#cccccc" - -lighter "#cccccc" - -window "#ffffff" - -selectbg "#eeeeee" - -selectfg "#000000" - -disabledfg "#aaaaaa" - } - - style theme create keramik -parent alt -settings { - - - # ----------------------------------------------------------------- - # Theme defaults - # - style default . \ - -borderwidth 1 \ - -background $colors(-frame) \ - -troughcolor $colors(-lighter) \ - -font TkDefaultFont \ - ; - - style map . -foreground [list disabled $colors(-disabledfg)] - - # ----------------------------------------------------------------- - # Button elements - # - the button has a large rounded border and needs a bit of - # horizontal padding. - # - the checkbutton and radiobutton have the focus drawn around - # the whole widget - hence the new layouts. - # - style layout TButton { - Button.background - Button.button -children { - Button.focus -children { - Button.label - } - } - } - style layout Toolbutton { - Toolbutton.background - Toolbutton.button -children { - Toolbutton.focus -children { - Toolbutton.label - } - } - } - style element create button image $I(button-n) \ - -border {8 6 8 16} -padding {6 6} -sticky news \ - -map [list {pressed !disabled} $I(button-p) \ - {active !selected} $I(button-h) \ - selected $I(button-s) \ - disabled $I(button-d)] - style default TButton -padding {10 6} - - style element create Toolbutton.button image $I(tbar-n) \ - -border {2 8 2 16} -padding {2 2} -sticky news \ - -map [list {pressed !disabled} $I(tbar-p) \ - {active !selected} $I(tbar-a) \ - selected $I(tbar-p)] - - style element create Checkbutton.indicator image $I(check-u) \ - -width 20 -sticky w \ - -map [list selected $I(check-c)] - - style element create Radiobutton.indicator image $I(radio-u) \ - -width 20 -sticky w \ - -map [list selected $I(radio-c)] - - # The layout for the menubutton is modified to have a button element - # drawn on top of the background. This means we can have transparent - # pixels in the button element. Also, the pixmap has a special - # region on the right for the arrow. So we draw the indicator as a - # sibling element to the button, and draw it after (ie on top of) the - # button image. - style layout TMenubutton { - Menubutton.background - Menubutton.button -children { - Menubutton.focus -children { - Menubutton.padding -children { - Menubutton.label -side left -expand true - } - } - } - Menubutton.indicator -side right - } - style element create Menubutton.button image $I(mbut-n) \ - -map [list {active !disabled} $I(mbut-a) \ - {pressed !disabled} $I(mbut-a) \ - {disabled} $I(mbut-d)] \ - -border {7 10 29 15} -padding {7 4 29 4} -sticky news - style element create Menubutton.indicator image $I(mbut-arrow-n) \ - -width 11 -sticky w -padding {0 0 18 0} - - # ----------------------------------------------------------------- - # Scrollbars, scale and progress elements - # - the scrollbar has three arrow buttons, two at the bottom and - # one at the top. - # - style layout Vertical.TScrollbar { - Scrollbar.background - Scrollbar.trough -children { - Scrollbar.uparrow -side top - Scrollbar.downarrow -side bottom - Scrollbar.uparrow -side bottom - Vertical.Scrollbar.thumb -side top -expand true -sticky ns - } - } - - style layout Horizontal.TScrollbar { - Scrollbar.background - Scrollbar.trough -children { - Scrollbar.leftarrow -side left - Scrollbar.rightarrow -side right - Scrollbar.leftarrow -side right - Horizontal.Scrollbar.thumb -side left -expand true -sticky we - } - } - - style default TScrollbar -width 16 - - style element create Horizontal.Scrollbar.thumb image $I(hsb-n) \ - -border {6 4} -width 15 -height 16 -sticky news \ - -map [list {pressed !disabled} $I(hsb-p)] - - style element create Vertical.Scrollbar.thumb image $I(vsb-n) \ - -border {4 6} -width 16 -height 15 -sticky news \ - -map [list {pressed !disabled} $I(vsb-p)] - - style element create Scale.slider image $I(hslider-n) \ - -border 3 - - style element create Vertical.Scale.slider image $I(vslider-n) \ - -border 3 - - style element create Horizontal.Progress.bar image $I(hsb-n) \ - -border {6 4} - - style element create Vertical.Progress.bar image $I(vsb-n) \ - -border {4 6} - - style element create uparrow image $I(arrowup-n) \ - -map [list {pressed !disabled} $I(arrowup-p)] - - style element create downarrow image $I(arrowdown-n) \ - -map [list {pressed !disabled} $I(arrowdown-p)] - - style element create rightarrow image $I(arrowright-n) \ - -map [list {pressed !disabled} $I(arrowright-p)] - - style element create leftarrow image $I(arrowleft-n) \ - -map [list {pressed !disabled} $I(arrowleft-p)] - - # ----------------------------------------------------------------- - # Notebook elements - # - style element create tab image $I(tab-n) \ - -map [list selected $I(tab-p) active $I(tab-p)] \ - -border {6 6 6 2} -height 12 - - ## Labelframes. - # - style default TLabelframe -borderwidth 2 -relief groove - } -} - -package provide tile::theme::keramik $::tile::theme::keramik::version diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif deleted file mode 100644 index 2d84f29c60..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif deleted file mode 100644 index 52ee752641..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif deleted file mode 100644 index ff309c56f2..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif deleted file mode 100644 index 2159f274a5..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif deleted file mode 100644 index 905fa7ed1d..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif deleted file mode 100644 index 0323332f30..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif deleted file mode 100644 index 20dcadb30e..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif deleted file mode 100644 index 129169e4c4..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif deleted file mode 100644 index fe9bf98f81..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif deleted file mode 100644 index 210734d1ae..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif deleted file mode 100644 index 5e1eafa854..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif deleted file mode 100644 index bfd74889f8..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif deleted file mode 100644 index 1095ed7583..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif deleted file mode 100644 index 06e8795df8..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif deleted file mode 100644 index 3c02fcbe81..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif deleted file mode 100644 index 1d93973c75..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif deleted file mode 100644 index 18fbae08ab..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif deleted file mode 100644 index 334e8e4a40..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif deleted file mode 100644 index 2e2f1c2f10..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif deleted file mode 100644 index 48197cbfc9..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif deleted file mode 100644 index 4a294b4984..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif deleted file mode 100644 index 65c0e4efa2..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif deleted file mode 100644 index c8257c9336..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif deleted file mode 100644 index 215a73821c..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif deleted file mode 100644 index 03099a95be..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif deleted file mode 100644 index abec6aba40..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif deleted file mode 100644 index 2c223ba2c5..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif deleted file mode 100644 index 77ef8a26cf..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif deleted file mode 100644 index 3179b87ad9..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif deleted file mode 100644 index be01e4a72a..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif deleted file mode 100644 index 0bb39e91ff..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif deleted file mode 100644 index cf03d7f325..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl b/ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl deleted file mode 100644 index cedec328f8..0000000000 --- a/ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl +++ /dev/null @@ -1,15 +0,0 @@ -# pkgIndex.tcl for additional tile pixmap themes. -# -# We don't provide the package is the image subdirectory isn't present, -# or we don't have the right version of Tcl/Tk -# -# To use this automatically within tile, the tile-using application should -# use tile::availableThemes and tile::setTheme -# -# $Id$ - -if {![file isdirectory [file join $dir keramik]]} { return } -if {![package vsatisfies [package provide Tcl] 8.4]} { return } - -package ifneeded tile::theme::keramik 0.3.2 \ - [list source [file join $dir keramik.tcl]] diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc.rb b/ext/tk/sample/tkextlib/tile/themes/kroc.rb deleted file mode 100644 index 3b8569275b..0000000000 --- a/ext/tk/sample/tkextlib/tile/themes/kroc.rb +++ /dev/null @@ -1,227 +0,0 @@ -# frozen_string_literal: false -# -# kroc.rb -# -# based on: -# >> kroc.tcl - Copyright (C) 2004 David Zolli -# - -imgdir = File.join(File.dirname(__FILE__), 'kroc', 'kroc') -$images = Tk::Tile.load_images(imgdir, '*.gif') - -if TkPackage.vcompare(Tk::Tile.package_version, '0.5') >= 0 - $TNotebook_Tab = Tk::Tile::TNotebook.style('Tab') -else - $TNotebook_Tab = 'Tab.TNotebook' -end - -def kroc_rb_settings - # Tk::Tile::Style.default(TkRoot, :background=>'#FCB64F', - # :troughcolor=>'#F8C278', :borderwidth=>1) - # or - # Tk::Tile::Style.default(Tk.root, :background=>'#FCB64F', - # :troughcolor=>'#F8C278', :borderwidth=>1) - # or - # Tk::Tile::Style.default('.', :background=>'#FCB64F', - # :troughcolor=>'#F8C278', :borderwidth=>1) - # or - # Tk::Tile::Style.default(nil, :background=>'#FCB64F', - # :troughcolor=>'#F8C278', :borderwidth=>1) - # or - Tk::Tile::Style.default(:background=>'#FCB64F', :troughcolor=>'#F8C278', - :borderwidth=>1) - # Tk::Tile::Style.default(TkRoot, :font=>Tk::Tile::Font::Default, - # :borderwidth=>1) - # or - # Tk::Tile::Style.default(Tk.root, :font=>Tk::Tile::Font::Default, - # :borderwidth=>1) - # or - # Tk::Tile::Style.default('.', :font=>Tk::Tile::Font::Default, - # :borderwidth=>1) - # or - # Tk::Tile::Style.default(nil, :font=>Tk::Tile::Font::Default, - # :borderwidth=>1) - # or - Tk::Tile::Style.default(:font=>Tk::Tile::Font::Default, :borderwidth=>1) - - # Tk::Tile::Style.map(TkRoot, :background=>[:active, '#694418']) - # or - # Tk::Tile::Style.map(Tk.root, :background=>[:active, '#694418']) - # or - # Tk::Tile::Style.map('.', :background=>[:active, '#694418']) - # or - # Tk::Tile::Style.map(nil, :background=>[:active, '#694418']) - # or - Tk::Tile::Style.map(:background=>[:active, '#694418']) - Tk::Tile::Style.map(:foreground=>[:disabled, '#B2B2B2', :active, '#FFE7CB']) - - # Tk::Tile::Style.default('TButton', :padding=>[10,4]) - Tk::Tile::Style.default(Tk::Tile::TButton, :padding=>[10,4]) - - # Tk::Tile::Style.default('TNotebook.Tab', - Tk::Tile::Style.default($TNotebook_Tab, - :padding=>[10, 3], :font=>Tk::Tile::Font::Default) - # Tk::Tile::Style.map('TNotebook.Tab', - Tk::Tile::Style.map($TNotebook_Tab, - :background=>[:selected, '#FCB64F', '', '#FFE6BA'], - :foreground=>['', 'black'], - :padding=>[:selected, [10, 6, 10, 3]]) - - # Tk::Tile::Style.map('TScrollbar', - Tk::Tile::Style.map(Tk::Tile::TScrollbar, - :background=>[:pressed, '#694418'], - :arrowcolor=>[:pressed, '#FEF7CB'], - :relief=>[:pressed, :sunken]) - - # Tk::Tile::Style.layout('Vertical.TScrollbar', - Tk::Tile::Style.layout(Tk::Tile.style('Vertical', Tk::Tile::TScrollbar), - ['Scrollbar.trough', {:children=>[ - 'Scrollbar.uparrow', {:side=>:top}, - 'Scrollbar.downarrow', {:side=>:bottom}, - 'Scrollbar.uparrow', {:side=>:bottom}, - 'Scrollbar.thumb', {:side=>:top, :expand=>true} - ]} - ]) - - # Tk::Tile::Style.layout('Horizontal.TScrollbar', - Tk::Tile::Style.layout(Tk::Tile.style('Horizontal', Tk::Tile::TScrollbar), - ['Scrollbar.trough', {:children=>[ - 'Scrollbar.leftarrow', {:side=>:left}, - 'Scrollbar.rightarrow', {:side=>:right}, - 'Scrollbar.leftarrow', {:side=>:right}, - 'Scrollbar.thumb', {:side=>:left, :expand=>true} - ]} - ]) - - # - # Elements: - # - if Tk::Tile::TILE_SPEC_VERSION_ID >= 8 - Tk::Tile::Style.element_create('Button.button', - :image, - [ $images['button-n'], - :pressed, $images['button-p'], - :active, $images['button-h'], - ], :border=>3, :sticky=>:ew) - - Tk::Tile::Style.element_create('Checkbutton.indicator', - :image, - [ $images['check-nu'], - [:pressed, :selected],$images['check-nc'], - :pressed, $images['check-nu'], - [:active, :selected], $images['check-hc'], - :active, $images['check-hu'], - :selected, $images['check-nc'], - ], :sticky=>:w) - - Tk::Tile::Style.element_create('Radiobutton.indicator', - :image, - [ $images['radio-nu'], - [:pressed,:selected],$images['radio-nc'], - :pressed, $images['radio-nu'], - [:active,:selected], $images['radio-hc'], - :active, $images['radio-hu'], - :selected, $images['radio-nc'], - ], :sticky=>:w) - - elsif TkPackage.vcompare(Tk::Tile.package_version, '0.5') >= 0 - Tk::Tile::Style.element_create('Button.button', - :image, $images['button-n'], - :map=>[ - :pressed, $images['button-p'], - :active, $images['button-h'], - ], :border=>3, :sticky=>:ew) - - Tk::Tile::Style.element_create('Checkbutton.indicator', - :image, $images['check-nu'], - :map=>[ - [:pressed, :selected],$images['check-nc'], - :pressed, $images['check-nu'], - [:active, :selected], $images['check-hc'], - :active, $images['check-hu'], - :selected, $images['check-nc'], - ], :sticky=>:w) - - Tk::Tile::Style.element_create('Radiobutton.indicator', - :image, $images['radio-nu'], - :map=>[ - [:pressed, :selected],$images['radio-nc'], - :pressed, $images['radio-nu'], - [:active, :selected], $images['radio-hc'], - :active, $images['radio-hu'], - :selected, $images['radio-nc'], - ], :sticky=>:w) - - else # tile 0.4 or earlier - Tk::Tile::Style.element_create('Button.button', :pixmap, - :images=>[ - :pressed, $images['button-p'], - :active, $images['button-h'], - '', $images['button-n'] - ], :border=>3, :tiling=>:tile) - - Tk::Tile::Style.element_create('Checkbutton.indicator', :pixmap, - :images=>[ - [:pressed, :selected],$images['check-nc'], - :pressed, $images['check-nu'], - [:active, :selected], $images['check-hc'], - :active, $images['check-hu'], - :selected, $images['check-nc'], - '', $images['check-nu'], - ], :tiling=>:fixed) - - Tk::Tile::Style.element_create('Radiobutton.indicator', :pixmap, - :images=>[ - [:pressed, :selected],$images['radio-nc'], - :pressed, $images['radio-nu'], - [:active, :selected], $images['radio-hc'], - :active, $images['radio-hu'], - :selected, $images['radio-nc'], - '', $images['radio-nu'], - ], :tiling=>:fixed) - - end - - # - # Settings: - # - # Tk::Tile::Style.layout(Tk::Tile::TButton, - Tk::Tile::Style.layout('TButton', [ - 'Button.button', {:children=>[ - 'Button.focus', {:children=>[ - 'Button.padding', {:children=>[ - 'Button.label', {:expand=>true, :sticky=>''} - ]} - ]} - ]} - ]) - - # Tk::Tile::Style.layout(Tk::Tile::TCheckbutton, - Tk::Tile::Style.layout('TCheckbutton', [ - 'Checkbutton.background', # this is not needed in tile 0.5 or later - 'Checkbutton.border', {:children=>[ - 'Checkbutton.padding', {:children=>[ - 'Checkbutton.indicator', {:side=>:left}, - 'Checkbutton.focus', {:side=>:left, :children=>[ - 'Checkbutton.label' - ]} - ]} - ]} - ]) - - # Tk::Tile::Style.layout(Tk::Tile::TRadiobutton, - Tk::Tile::Style.layout('TRadiobutton', [ - 'Radiobutton.background', # this is not needed in tile 0.5 or later - 'Radiobutton.border', {:children=>[ - 'Radiobutton.padding', {:children=>[ - 'Radiobutton.indicator', {:side=>:left}, - 'Radiobutton.focus', {:expand=>true, :sticky=>:w, :children=>[ - 'Radiobutton.label', {:side=>:right, :expand=>true} - ]} - ]} - ]} - ]) -end - -Tk::Tile::Style.theme_create('kroc-rb', :parent=>'alt', - :settings=>proc{ kroc_rb_settings() }) diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl deleted file mode 100644 index b2cd79679a..0000000000 --- a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl +++ /dev/null @@ -1,163 +0,0 @@ -# kroc.tcl - Copyright (C) 2004 David Zolli -# -# A sample pixmap theme for the tile package. - -#package require tile::pixmap - -namespace eval tile { - namespace eval kroc { - variable version 0.0.1 - } -} - -namespace eval tile::kroc { - - set imgdir [file join [file dirname [info script]] kroc] - array set Images [tile::LoadImages $imgdir *.gif] - - if {[package vsatisfies [package provide tile] 0.5]} { - set TNoteBook_Tab TNotebook.Tab - } else { - set TNoteBook_Tab Tab.TNotebook - } - - style theme create kroc -parent alt -settings { - - style default . -background #FCB64F -troughcolor #F8C278 -borderwidth 1 - style default . -font TkDefaultFont -borderwidth 1 - style map . -background [list active #694418] - style map . -foreground [list disabled #B2B2B2 active #FFE7CB] - - style default TButton -padding "10 4" - - style default $TNoteBook_Tab -padding {10 3} -font TkDefaultFont - style map $TNoteBook_Tab \ - -background [list selected #FCB64F {} #FFE6BA] \ - -foreground [list {} black] \ - -padding [list selected {10 6 10 3}] - - style map TScrollbar \ - -background { pressed #694418} \ - -arrowcolor { pressed #FFE7CB } \ - -relief { pressed sunken } \ - ; - - style layout Vertical.TScrollbar { - Scrollbar.trough -children { - Scrollbar.uparrow -side top - Scrollbar.downarrow -side bottom - Scrollbar.uparrow -side bottom - Scrollbar.thumb -side top -expand true - } - } - - style layout Horizontal.TScrollbar { - Scrollbar.trough -children { - Scrollbar.leftarrow -side left - Scrollbar.rightarrow -side right - Scrollbar.leftarrow -side right - Scrollbar.thumb -side left -expand true - } - } - - # - # Elements: - # - if {[package vsatisfies [package provide tile] 0.5]} { - - style element create Button.button image $Images(button-n) \ - -map [list \ - pressed $Images(button-p) \ - active $Images(button-h) \ - ] -border 3 -sticky ew - - style element create Checkbutton.indicator image $Images(check-nu) \ - -map [list \ - {pressed selected} $Images(check-nc) \ - pressed $Images(check-nu) \ - {active selected} $Images(check-hc) \ - active $Images(check-hu) \ - selected $Images(check-nc) \ - ] -sticky w - - style element create Radiobutton.indicator image $Images(radio-nu) \ - -map [list \ - {pressed selected} $Images(radio-nc) \ - pressed $Images(radio-nu) \ - {active selected} $Images(radio-hc) \ - active $Images(radio-hu) \ - selected $Images(radio-nc) \ - ] -sticky w - - } else { - - style element create Button.button pixmap -images [list \ - pressed $Images(button-p) \ - active $Images(button-h) \ - {} $Images(button-n) \ - ] -border 3 -tiling tile - - style element create Checkbutton.indicator pixmap -images [list \ - {pressed selected} $Images(check-nc) \ - pressed $Images(check-nu) \ - {active selected} $Images(check-hc) \ - active $Images(check-hu) \ - selected $Images(check-nc) \ - {} $Images(check-nu) \ - ] -tiling fixed - - style element create Radiobutton.indicator pixmap -images [list \ - {pressed selected} $Images(radio-nc) \ - pressed $Images(radio-nu) \ - {active selected} $Images(radio-hc) \ - active $Images(radio-hu) \ - selected $Images(radio-nc) \ - {} $Images(radio-nu) \ - ] -tiling fixed - - } - - # - # Settings: (*button.background is not needed in tile 0.5 or above) - # - style layout TButton { - Button.button -children { - Button.focus -children { - Button.padding -children { - Button.label -expand true -sticky {} - } - } - } - } - - style layout TCheckbutton { - Checkbutton.border -children { - Checkbutton.background - Checkbutton.padding -children { - Checkbutton.indicator -side left - Checkbutton.focus -side left -children { - Checkbutton.label - } - } - } - } - - style layout TRadiobutton { - Radiobutton.border -children { - Radiobutton.background - Radiobutton.padding -children { - Radiobutton.indicator -side left - Radiobutton.focus -expand true -sticky w -children { - Radiobutton.label -side right -expand true - } - } - } - } - - } } - -# ------------------------------------------------------------------------- - -package provide tile::theme::kroc $::tile::kroc::version - -# ------------------------------------------------------------------------- diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif deleted file mode 100644 index e7a140dede..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif deleted file mode 100644 index 78b506ddeb..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif deleted file mode 100644 index a5a4e90be1..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif deleted file mode 100644 index 41503c5ebd..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif deleted file mode 100644 index b3e512ca67..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif deleted file mode 100644 index a28c288fce..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif deleted file mode 100644 index 5c23931bbc..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif deleted file mode 100644 index 359fe1cc8b..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif deleted file mode 100644 index 9f46b37926..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif deleted file mode 100644 index 6437f33a7a..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif deleted file mode 100644 index 2d2aac8597..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl b/ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl deleted file mode 100644 index de4f3d4555..0000000000 --- a/ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl +++ /dev/null @@ -1,15 +0,0 @@ -# pkgIndex.tcl for additional tile pixmap themes. -# -# We don't provide the package is the image subdirectory isn't present, -# or we don't have the right version of Tcl/Tk -# -# To use this automatically within tile, the tile-using application should -# use tile::availableThemes and tile::setTheme -# -# $Id$ - -if {![file isdirectory [file join $dir kroc]]} { return } -if {![package vsatisfies [package provide Tcl] 8.4]} { return } - -package ifneeded tile::theme::kroc 0.0.1 \ - [list source [file join $dir kroc.tcl]] diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl b/ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl deleted file mode 100644 index f402a73f10..0000000000 --- a/ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl +++ /dev/null @@ -1,16 +0,0 @@ -# pkgIndex.tcl for additional tile pixmap themes. -# -# We don't provide the package is the image subdirectory isn't present, -# or we don't have the right version of Tcl/Tk -# -# To use this automatically within tile, the tile-using application should -# use tile::availableThemes and tile::setTheme -# -# $Id$ - -if {![file isdirectory [file join $dir plastik]]} { return } -if {![package vsatisfies [package provide Tcl] 8.4]} { return } - -package ifneeded tile::theme::plastik 0.3.1 \ - [list source [file join $dir plastik.tcl]] - diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik.tcl b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik.tcl deleted file mode 100644 index ea6ed74162..0000000000 --- a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik.tcl +++ /dev/null @@ -1,125 +0,0 @@ -# plastik.tcl - Copyright (C) 2004 Googie -# -# A sample pixmap theme for the tile package. -# -# Copyright (c) 2004 Googie -# Copyright (c) 2005 Pat Thoyts -# -# $Id$ - -package require Tk 8.4 -package require tile 0.5 - -namespace eval tile::theme::plastik { - - variable version 0.3.1 - package provide tile::theme::plastik $version - - variable imgdir [file join [file dirname [info script]] plastik] - variable Images; - array set Images [tile::LoadImages $imgdir *.gif] - - variable colors - array set colors { - -frame "#cccccc" - -disabledfg "#aaaaaa" - -selectbg "#657a9e" - -selectfg "#ffffff" - } - -style theme create plastik -parent default -settings { - style default . \ - -background $colors(-frame) \ - -troughcolor $colors(-frame) \ - -selectbackground $colors(-selectbg) \ - -selectforeground $colors(-selectfg) \ - -font TkDefaultFont \ - -borderwidth 1 \ - ; - - style map . -foreground [list disabled $colors(-disabledfg)] - - # - # Layouts: - # - style layout Vertical.TScrollbar { - Scrollbar.background - Scrollbar.trough -children { - Scrollbar.uparrow -side top - Scrollbar.downarrow -side bottom - Scrollbar.uparrow -side bottom - Vertical.Scrollbar.thumb -side top -expand true -sticky ns - } - } - - style layout Horizontal.TScrollbar { - Scrollbar.background - Scrollbar.trough -children { - Scrollbar.leftarrow -side left - Scrollbar.rightarrow -side right - Scrollbar.leftarrow -side right - Horizontal.Scrollbar.thumb -side left -expand true -sticky we - } - } - - style layout TButton { - Button.button -children { - Button.focus -children { - Button.padding -children { - Button.label -side left -expand true - } - } - } - } - - # - # Elements: - # - style element create Button.button image $Images(button-n) \ - -border 4 -sticky ew \ - -map [list pressed $Images(button-p) active $Images(button-h)] - - style element create Checkbutton.indicator image $Images(check-nu) \ - -sticky {} -map [list \ - {active selected} $Images(check-hc) \ - {pressed selected} $Images(check-pc) \ - active $Images(check-hu) \ - selected $Images(check-nc) \ - ] - - style element create Radiobutton.indicator image $Images(radio-nu) \ - -sticky {} -map [list \ - {active selected} $Images(radio-hc) \ - {pressed selected} $Images(radio-pc) \ - active $Images(radio-hu) \ - selected $Images(radio-nc) \ - ] - - style element create Horizontal.Scrollbar.thumb \ - image $Images(hsb-n) -border 3 -sticky ew - style element create Vertical.Scrollbar.thumb \ - image $Images(vsb-n) -border 3 -sticky ns - - style element create Scale.slider \ - image $Images(hslider-n) -sticky {} - style element create Vertical.Scale.slider \ - image $Images(vslider-n) -sticky {} - - style element create Scrollbar.uparrow image $Images(arrowup-n) \ - -map [list pressed $Images(arrowup-p)] -sticky {} - style element create Scrollbar.downarrow image $Images(arrowdown-n) \ - -map [list pressed $Images(arrowdown-p)] -sticky {} - style element create Scrollbar.leftarrow image $Images(arrowleft-n) \ - -map [list pressed $Images(arrowleft-p)] -sticky {} - style element create Scrollbar.rightarrow image $Images(arrowright-n) \ - -map [list pressed $Images(arrowright-p)] -sticky {} - - # - # Settings: - # - style default TButton -width -10 - style default TNotebook.Tab -padding {6 2 6 2} - style default TLabelframe -borderwidth 2 -relief groove - -} } - diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif deleted file mode 100644 index d914e7a3d3..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif deleted file mode 100644 index abffaa49f6..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif deleted file mode 100644 index 9939ae1d50..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif deleted file mode 100644 index 1a45ef2e4b..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif deleted file mode 100644 index f4b563fed2..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif deleted file mode 100644 index 5459d5e615..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif deleted file mode 100644 index 118290cd95..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif deleted file mode 100644 index 89f9b38c73..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif deleted file mode 100644 index 548f3769df..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif deleted file mode 100644 index 49a25909f3..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif deleted file mode 100644 index e83f7ed985..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif deleted file mode 100644 index b279fa50d8..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif deleted file mode 100644 index 5b4fb4f037..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif deleted file mode 100644 index b139e02a09..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif deleted file mode 100644 index fbe391f9d8..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif deleted file mode 100644 index 75a3bd635c..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif deleted file mode 100644 index b8ea07ea92..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif deleted file mode 100644 index ce8f28404f..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif deleted file mode 100644 index 33917715b0..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif deleted file mode 100644 index 88925d0e1d..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif deleted file mode 100644 index f8723d367a..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif deleted file mode 100644 index fb5140e6a1..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif deleted file mode 100644 index 176225d9e1..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif deleted file mode 100644 index 85bac4579e..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif deleted file mode 100644 index cf887f9855..0000000000 Binary files a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tile/toolbutton.tcl b/ext/tk/sample/tkextlib/tile/toolbutton.tcl deleted file mode 100644 index 91e9ad18bb..0000000000 --- a/ext/tk/sample/tkextlib/tile/toolbutton.tcl +++ /dev/null @@ -1,152 +0,0 @@ -# -# $Id$ -# -# Demonstration of custom widget styles. -# - -# -# ~ BACKGROUND -# -# Checkbuttons in toolbars have a very different appearance -# than regular checkbuttons: there's no indicator, they -# "pop up" when the mouse is over them, and they appear sunken -# when selected. -# -# Tk added partial support for toolbar-style buttons in 8.4 -# with the "-overrelief" option, and TIP #82 added further -# support with the "-offrelief" option. So to get a toolbar-style -# checkbutton, you can configure it with: -# -# checkbutton .cb \ -# -indicatoron false -selectcolor {} -relief flat -overrelief raised -# -# Behind the scenes, Tk has a lot of rather complicated logic -# to implement this checkbutton style; see library/button.tcl, -# generic/tkButton.c, and the platform-specific files unix/tkUnixButton.c -# et al. for the full details. -# -# The tile widget set has a better way: custom styles. -# Since the appearance is completely controlled by the theme engine, -# we can define a new "Toolbutton" style and just use: -# -# checkbutton .cb -style Toolbutton -# -# -# ~ DEMONSTRATION -# -# The tile built-in themes (default, "alt", windows, and XP) -# already include Toolbutton styles. This script will add -# them to the "step" and "blue" themes as a demonstration. -# -# (Note: Pushbuttons and radiobuttons can also use the "Toolbutton" -# style; see demo.tcl.) -# - -style theme settings "step" { - -# -# First, we use [style layout] to define what elements to -# use and how they're arranged. Toolbuttons are pretty -# simple, consisting of a border, some internal padding, -# and a label. (See also the TScrollbar layout definition -# in demos/blue.tcl for a more complicated layout spec.) -# - style layout Toolbutton { - Toolbutton.background - Toolbutton.border -children { - Toolbutton.padding -children { - Toolbutton.label - } - } - } - -# (Actually the above isn't strictly necessary, since the same layout -# is defined in the default theme; we could have inherited it -# instead.) -# -# Next, specify default values for element options. -# For many options (like -background), the defaults -# inherited from the parent style are sufficient. -# - style default Toolbutton -width 0 -padding 1 -relief flat -borderwidth 2 - -# -# Finally, use [style map] to specify state-specific -# resource values. We want a flat relief if the widget is -# disabled, sunken if it's selected (on) or pressed, -# and raised when it's active (the mouse pointer is -# over the widget). Each state-value pair is checked -# in order, and the first matching state takes precedence. -# - style map Toolbutton -relief { - disabled flat - selected sunken - pressed sunken - active raised - } -} - -# -# Now for the "blue" theme. (Since the purpose of this -# theme is to show what *can* be done, not necessarily what -# *should* be done, the following makes some questionable -# design decisions from an aesthetic standpoint.) -# -if {![catch {package require tile::theme::blue}]} { -style theme settings "blue" { - - # - # Default values: - # - style default Toolbutton \ - -width 0 -relief flat -borderwidth 2 \ - -background #6699CC -foreground #000000 ; - - # - # Configure state-specific values for -relief, as before: - # - style map Toolbutton -relief { - disabled flat - selected sunken - pressed sunken - active raised - } - - # - # Adjust the -padding at the same time, to enhance - # the raised/sunken illusion: - # - style default Toolbutton -padding 4 - style map Toolbutton -padding { - disabled {4} - selected {6 6 2 2} - pressed {6 6 2 2} - active {2 2 6 6} - } - - # - # ... and change the foreground and background colors - # when the mouse cursor is over the widget: - # - style map Toolbutton -background { - active #008800 - } -foreground { - active #FFFFFF - } -} - -} - -# -# ~ A final note: -# -# TIP #82 also says: "When -indicatoron is off and the button itself -# is on, the relief continues to be hard-coded to sunken. For symmetry, -# we might consider adding another -onrelief option to cover this -# case. But it is difficult to imagine ever wanting to change the -# value of -onrelief so it has been omitted from this TIP. -# If there as strong desire to have -onrelief, it can be added later." -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# The Tile project aims to make sure that this never needs to happen. -# diff --git a/ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt b/ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt deleted file mode 100644 index 2b3757bb23..0000000000 --- a/ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt +++ /dev/null @@ -1,12 +0,0 @@ - -The following text is the original 'COPYRIGHT' file of tkHTML. - ------------------------------------------------------------------------ -Most of the source code for the Tk Html widget has been place in the -public domain. You can do with it whatever you want. However, some -files have been copied from other sources and contain copyrights. -A copyright notice appears separately at the top of each source file. ------------------------------------------------------------------------ - -In this sample, HTML documents are quoted in the 'tests' directory of -tkHTML source tree. There were no copyright notice in the directory. diff --git a/ext/tk/sample/tkextlib/tkHTML/README b/ext/tk/sample/tkextlib/tkHTML/README deleted file mode 100644 index 0b9f799cbd..0000000000 --- a/ext/tk/sample/tkextlib/tkHTML/README +++ /dev/null @@ -1,12 +0,0 @@ - - [ TkHtml widget example ] - -The directory page1 -- page4 are referd from "test" directory of -original TkHtml extension's source archive. -( see http://www.hwaci.com/sw/tkhtml/index.html ) - -You can see the HTML documents on the 'hv.rb' or 'ss.rb' sample script. - - e.g. - LD_LIBRARY_PATH=/usr/local/ActiveTcl/lib:$LD_LIBRARY_PATH /usr/local/bin/ruby ./hv.rb page1/index.html - diff --git a/ext/tk/sample/tkextlib/tkHTML/hv.rb b/ext/tk/sample/tkextlib/tkHTML/hv.rb deleted file mode 100644 index 0f6e595d82..0000000000 --- a/ext/tk/sample/tkextlib/tkHTML/hv.rb +++ /dev/null @@ -1,314 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -# -# This script implements the "hv" application. Type "hv FILE" to -# view FILE as HTML. -# -# This application is used for testing the HTML widget. It can -# also server as an example of how to use the HTML widget. -# -require 'tk' -require 'tkextlib/tkHTML' - -root = TkRoot.new(:title=>'HTML File Viewer', :iconname=>'HV') - -file = ARGV[0] - -# -# These images are used in place of GIFs or of form elements -# -biggray = TkPhotoImage.new(:data=><<'EOD') - R0lGODdhPAA+APAAALi4uAAAACwAAAAAPAA+AAACQISPqcvtD6OctNqLs968+w+G4kiW5omm - 6sq27gvH8kzX9o3n+s73/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNFgsAO/// -EOD - -smgray = TkPhotoImage.new(:data=><<'EOD') - R0lGODdhOAAYAPAAALi4uAAAACwAAAAAOAAYAAACI4SPqcvtD6OctNqLs968+w+G4kiW5omm - 6sq27gvH8kzX9m0VADv/ -EOD - -nogifbig = TkPhotoImage.new(:data=><<'EOD') - R0lGODdhJAAkAPEAAACQkADQ0PgAAAAAACwAAAAAJAAkAAACmISPqcsQD6OcdJqKM71PeK15 - AsSJH0iZY1CqqKSurfsGsex08XuTuU7L9HywHWZILAaVJssvgoREk5PolFo1XrHZ29IZ8oo0 - HKEYVDYbyc/jFhz2otvdcyZdF68qeKh2DZd3AtS0QWcDSDgWKJXY+MXS9qY4+JA2+Vho+YPp - FzSjiTIEWslDQ1rDhPOY2sXVOgeb2kBbu1AAADv/ -EOD - -nogifsm = TkPhotoImage.new(:data=><<'EOD') - R0lGODdhEAAQAPEAAACQkADQ0PgAAAAAACwAAAAAEAAQAAACNISPacHtD4IQz80QJ60as25d - 3idKZdR0IIOm2ta0Lhw/Lz2S1JqvK8ozbTKlEIVYceWSjwIAO/// -EOD - -# -# define variables -# -ul_hyper = TkVariable.new(0) -show_tbl = TkVariable.new(0) -show_img = TkVariable.new(1) - -# -# A font chooser routine. -# -# html[:fontcommand] = pick_font -pick_font = proc{|size, attrs| - puts "FontCmd: #{size} #{attrs}" - [ ((attrs =~ /fixed/)? 'courier': 'charter'), - (12 * (1.2**(size.to_f - 4.0))).to_i, - ((attrs =~ /italic/)? 'italic': 'roman'), - ((attrs =~ /bold/)? 'bold': 'normal') ].join(' ') -} - -# -# This routine is called for each form element -# -form_cmd = proc{|n, cmd, style, *args| - # puts "FormCmd: $n $cmd $args" - case cmd - when 'select', 'textarea', 'input' - TkLabel.new(:widgetname=>args[0], :image=>nogifsm) - end -} - -# -# This routine is called for every markup -# -images = {} -old_imgs = {} -big_imgs = {} - -hotkey = {} - -move_big_image = proc{|b| - if big_imgs.key?(b) - b.copy(big_imgs[b]) - big_imgs[b].delete - big_imgs.delete(b) - Tk.update - end -} - -image_cmd = proc{|*args| - if show_img.bool - smgray - else - fn = args[0] - - if old_imgs.key?(fn) - images[fn] = old_imgs[fn] - old_imgs.delete(fn) - images[fn] - - else - begin - img = TkPhotoImage.new(:file=>fn) - rescue - smgray - else - if img.width * img.height > 20000 - b = TkPhotoImage.new(:width=>img.width, :height=>img.height) - big_imgs[b] = img - img = b - Tk.after_idle(proc{ move_big_image.call(b) }) - end - - images[fn] = img - img - end - end - end -} - -# -# This routine is called for every -

- - - - - - - - - -
Welcome to SlashdotLinuxNewsUnited StatesEducationSpace
- - - -
faq
code
awards
privacy
slashNET
older stuff
rob's page
preferences
andover.net
submit story
advertising
supporters
past polls
topics
about
jobs
hof - -
-

- - - -
Sections
-1/23
-apache
-1/29 (3)
-askslashdot
-1/27
-awards
-1/29 (2)
-books
-1/27
-bsd
-1/28 (2)
-features
-1/28 (2)
-interviews
-1/19
-radio
-1/27 (2)
-science
-1/28 (3)
-yro
Andover.Net
-AndoverNews
Ask Reggie
DaveCentral
FreeCode
MediaBuilder

-

-
Who Bought Linux.Net?
Linux Posted by CmdrTaco on Saturday January 29, @10:52AM
from the this-game-again dept.
So Fred VanKampen (who has to hold the record for most money made by reselling two domain names) e-mailed us to say that the Domain Name for 'Linux.Net' has been sold. He won't say to whom, but it supposedly will be announced at LinuxWorld next week. Of course we have no idea what he got for the entry, but the rumors were that he made several million when he sold Linux.com to VA Linux. Hopefully he'll take me for a ride in his yacht. ;)

( Read More... | 58 of 62 comments )

Book Reviews: E-Mails from (Over?) The Edge
News Posted by Hemos on Saturday January 29, @10:43AM
from the touching-story dept.
I'd like to thank the author of this book for sending it to me. Nick's written a book that's touching and endearing, and one that's well worth reading for everyone who's ever had social struggles to deal with. As well, his involvement with the fine folks of TheVenue. I'll warn you - it's not a tech text. But it's still worth reading. Click below to read more.

( Read More... | 6197 bytes in body | 6 of 22 comments )

Linux Kernel 2.3.41
Linux Posted by CmdrTaco on Saturday January 29, @10:21AM
from the download-compile-reboot-repeat dept.
sdriver writes "For those of us who enjoy *panic*, *oops*, and suddenly seeing their video BIOS... the newest version is out! Be the first on your block to submit a new patch! ;) " If you don't know where to get it, you probably should stick to your warm and cuddly 2.2.x kernel *grin*. Now outta my way, I wanna crash my laptop!

( Read More... | 52 of 57 comments )

Congress Still Figuring Out E-Mail
United States Posted by Roblimo on Saturday January 29, @07:28AM
from the voice-of-the-people-can-get-awfully-loud dept.
Jett writes " Vote.com has an interesting article in their Webmag Fifth Estate about how congressmen have responded to the popularity of e-mail in their daily operations. Quote: 'Of the 440 voting and non-voting House of Representatives members, 22 have no e-mail at all. Even House Speaker Dennis Hastert is wired only halfway -- his office receives e-mail, but does not respond to it. And while all U.S. senators have e-mail, they, like their House counterparts, routinely shun non-constituent mail -- even though they chair committees whose decisions affect the entire country.'"

( Read More... | 66 of 66 comments )

Ask Slashdot: Sci Fi Literature 101?
Education Posted by Cliff on Saturday January 29, @06:56AM
from the recommendations-wanted dept.
ohlaadee asks: "My niece (she's 13) wants to start reading science fiction. I do too. I gave us both Asimov's _The Foundation_  for Christmas. We'll read it together. I suppose we could spend the rest of our lives just reading Asimov, but I'm wondering what books and movies you folks would come up with? What does the /. recommended Science Fiction 101 list include?"

( Read More... | 345 of 345 comments )

Could Distributed.Net Help the Mars Polar Lander?
Space Posted by Roblimo on Saturday January 29, @03:35AM
from the food-for-thought dept.
Anonymous Coward writes "This official JPL press release describes the current attempt to listen for faint signals from the Mars Lander. They get three windows a day, and it takes 18 hours to process data because the signal is so weak (if it's really there). Too bad they don't have a deal with distributed.net." Interesting thought. Is anyone at distributed.net or JPL interested in pursuing it?

( Read More... | 99 of 102 comments )

iCrave TV Loses Battle against U.S. Broadcasters
Television Posted by Roblimo on Saturday January 29, @12:21AM
from the shut-down-just-before-the-super-bowl dept.
Doran writes "C|Net has this story about how the Canadian company iCraveTV.com has lost its latest battle in U.S. courts over whether it can rebroadcast TV signals over the Web. The broadcasters say it's theft, while iCraveTV sez it's just doing what's legal for other cable TV companies in Canada (ie. rebroadcasting TV). Of course, by framing the streaming video iCraveTV is doing more than just rebroadcasting, they're also adding more commercial content, which the broadcasters feel dilutes their TV commercials. "

( Read More... | 152 of 170 comments )

Win2k Security holes found
Microsoft Posted by HeUnique on Friday January 28, @04:58PM
from the and-it's-not-even-out-yet dept.
According to a story posted by ZDNN, two security holes have been found on Windows 2000, and that's even before the official release of Windows 2000! Administrators who rush to incorporate the patch from MS beware - according to one of the talkback posts on ZDNN, the patch creates a new problem with Windows 2000 news server service.

( Read More... | 510 of 534 comments )

Encryption Debate at Mitnick Trial
Encryption Posted by Hemos on Friday January 28, @03:33PM
from the gimmie-the-data dept.
A number of people have written about the latest twist in the Mitnick case. Kevin wants to get his data back, but the government is refusing to do so until he gives them the key. Apparently, the government is unable to crack the encryption that he's got on it - you'd think after having the data for five years, they'd be able to brute-force the darn thing. It's a NYT article - free login required.

( Read More... | 504 of 521 comments )

Forum: Future Ports of Games to Linux
Games Posted by CmdrTaco on Friday January 28, @02:26PM
from the it's-been-awhile dept.
It's been a long time since I posted an open forum like this, but I'm curious what people think on this one. What games do you most want to see ported to Linux in the next few months? Of course, for me personally it's StarCraft and Diablo 2, but I'm curious what games have come out or are due soon that people would most like to see a port of (and note that WINE doesn't count. ;)

( Read More... | 648 of 652 comments )

Features
Voting has begun for the $100k Slashdot Beanie Awards. Talk amongst yourselves and choose who deserves the cash.

The latest installment of Geeks in Space is up at The Sync. Listen to CmdrTaco, Hemos, and Nate talk about the latest events to happen - or not happen in the computer world.

Perhaps you are seeking Jon Katz's series of articles related to recent events in Colorado. These articles include Voices from the Hellmouth, More Stories from the Hellmouth or The Price of Being Different,

For something different, try reading a little essay Thoughts from the Furnace about the internet, and flame.

And for a bit of an amusing take on the Open Source world, check out Open Source as an Ant Farm

Update: 01/03 03:10 by CowboyNeal:

Past Features

Ask Slashdot
  • Sci Fi Literature 101?
  • Linux and Satellite Internet Services
  • Open Defensive Patents?
  • Technologies That Shaped the Last Century?
  • Disk Repair Tools for Linux?
  • Why Can't the Command-Line be More Standardized?
  • Packet Radio Networking with PalmOS?
  • Cheap Rackmount Enclosures/Systems?
  • Open Source Software and Tax Breaks?
  • Building an Upgradable Dual Processor System

    if you have a question for Ask Slashdot, send it to askslashdot@slashdot.org

  • Slashdot Login
    Nickname:

    Password:

    Don't have an account yet? Go Create One. A user account will allow you to customize all these nutty little boxes, tailor the stories you see, as well as remember your comment viewing preferences.

    Slashdot Poll
    The Tech Advance I Most Want Is:
    Nanotechnology
    Cold Fusion
    Powerful Fuel Cells
    Hard Wiring my Body
    Universal Strong Crypto
    Interstellar Travel
    Cybernetic Body Armor
    ColecoVision
    [ Results | Polls ]
    Comments:656 | Votes:29121

    Older Stuff

    Friday January 28

  • Abstract Programming and GPL Enforcement (235)
  • Interview: FreeDOS Leader Jim Hall Answers (86)
  • Open Source's Achilles Heel (466)
  • The Virtue of Communal Instincts (237)
  • Gartner Group Debunking Open Source Myths (165)
  • DoubleClick Taken to Court (310)
  • Updated Slash & Server 51 (81)
  • XMMS 1.0.0 Released (128)
  • Linux and Satellite Internet Services (138)
  • UN Wants to Combat Online Racism (531)

    Thursday January 27

  • Crackdowns, Fools and the MPAA (351)
  • Heroes of Might and Magic III Demo Released (157)
  • Sandia Labs Venture Into Nanotechnology (117)
  • CA Announces Program Ports to Linux (195)
  • Interview: Larry Augustin Finally Answers (210)
  • Final Call for Voting in Slashdot's Beanie Awards (178)
  • Transmeta Code Morphing != Just In Time (449)
  • Intrusion Detection (65)
  • Using Enzymes to Help Fight CO2 Build-Up (165)
  • Jon Johansen on ABC World News Tonight (415)


    Older Articles
    Yesterday's Edition

  • Book Reviews

    Jon Katz, Resident Gasbag, has a new, very appropriate book coming out soon, Geeks. Preorder now and receive the book early.

    For probably the best fiction read around, check out Neal Stephenson's Cryptonomicon, an engaging read about WWII, cryptography and buried treasure. And data vaults.

    If you've been doing a lot of work in Perl, you've probably figured out you really need Perl in a Nutshell or The Perl Cookbook. If you're still learning, grab Programming Perl.

    And if you want to learn more about how to become a better coder, grab The Unified Software Development Process or The Practice of Programming Additionally, check out Refactoring: Improving the Design of Existing Code .

    Developing a large application? Grab Eric Greenberg's excellent Network Application Frameworks.

    Visit Our Book Reviews Section for more.
    Update: 11/12 05:19 by H:

    Quick Links
    Cool Sites:
  • Linux.com (What is Linux?)
  • Everything (Blow your Mind)
  • After Y2k (This is Post-Apocalyptic?)
  • User Friendly (Laugh)
  • Themes.org (Make X Perty)

    Support Slashdot:

  • ThinkGeek (Clothe Yourself in Slashdot)
  • CDnow (Support Rob's Who Habit)
  • Slashdot Advertiser Index
  • Freshmeat

    January

  • We should get this out of the door now
  • Is Linux for Crazies?
  • SQN Linux 1.6
  • Limo 0.3.2
  • Fusion GS 1.3
  • MMR 1.5.4
  • KUPS 0.3.4
  • 3DSE patch for XMMS 4
  • Linux 2.3.41
  • Free Code for Linux S/390
    Search Freshmeat:

    More Meat...

  • - - - - - - - - - - -
    -
    - - -
    -
    -
      - Wasn't there something about a PASCAL programmer knowing the value of -everything and the Wirth of nothing? - 
    - - - All trademarks and copyrights on this - page are owned by their respective owners. Comments - are owned by the Poster. - The Rest 1997-2000 Andover.Net. - -
    -

    - - - [ home | - awards | - supporters | - rob's homepage | - contribute story | - older articles | - Andover.Net | - advertising | - past polls | - about | - faq ] - -
    - - diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image1 b/ext/tk/sample/tkextlib/tkHTML/page2/image1 deleted file mode 100644 index 2ed6ddcfe1..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image1 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image10 b/ext/tk/sample/tkextlib/tkHTML/page2/image10 deleted file mode 100644 index 3021b68990..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image10 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image11 b/ext/tk/sample/tkextlib/tkHTML/page2/image11 deleted file mode 100644 index 41d1fe3666..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image11 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image12 b/ext/tk/sample/tkextlib/tkHTML/page2/image12 deleted file mode 100644 index 655a686541..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image12 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image13 b/ext/tk/sample/tkextlib/tkHTML/page2/image13 deleted file mode 100644 index 97d5950e8c..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image13 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image14 b/ext/tk/sample/tkextlib/tkHTML/page2/image14 deleted file mode 100644 index 6d73ad833c..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image14 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image15 b/ext/tk/sample/tkextlib/tkHTML/page2/image15 deleted file mode 100644 index 90cc3b2b16..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image15 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image16 b/ext/tk/sample/tkextlib/tkHTML/page2/image16 deleted file mode 100644 index 93aa853cf1..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image16 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image17 b/ext/tk/sample/tkextlib/tkHTML/page2/image17 deleted file mode 100644 index f46f0308cd..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image17 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image18 b/ext/tk/sample/tkextlib/tkHTML/page2/image18 deleted file mode 100644 index 3badd5e909..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image18 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image19 b/ext/tk/sample/tkextlib/tkHTML/page2/image19 deleted file mode 100644 index bd4f6d9677..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image19 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image2 b/ext/tk/sample/tkextlib/tkHTML/page2/image2 deleted file mode 100644 index 7566dda25d..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image2 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image20 b/ext/tk/sample/tkextlib/tkHTML/page2/image20 deleted file mode 100644 index 358fa95f63..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image20 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image21 b/ext/tk/sample/tkextlib/tkHTML/page2/image21 deleted file mode 100644 index c81aa52588..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image21 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image22 b/ext/tk/sample/tkextlib/tkHTML/page2/image22 deleted file mode 100644 index 6cbd63022a..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image22 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image23 b/ext/tk/sample/tkextlib/tkHTML/page2/image23 deleted file mode 100644 index e8173a7456..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image23 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image24 b/ext/tk/sample/tkextlib/tkHTML/page2/image24 deleted file mode 100644 index bffd4b4956..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image24 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image25 b/ext/tk/sample/tkextlib/tkHTML/page2/image25 deleted file mode 100644 index c656fa4f30..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image25 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image26 b/ext/tk/sample/tkextlib/tkHTML/page2/image26 deleted file mode 100644 index bc93fdb259..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image26 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image27 b/ext/tk/sample/tkextlib/tkHTML/page2/image27 deleted file mode 100644 index 6ad0eff1e7..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image27 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image28 b/ext/tk/sample/tkextlib/tkHTML/page2/image28 deleted file mode 100644 index 88f0d7cea6..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image28 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image29 b/ext/tk/sample/tkextlib/tkHTML/page2/image29 deleted file mode 100644 index e0704183b3..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image29 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image3 b/ext/tk/sample/tkextlib/tkHTML/page2/image3 deleted file mode 100644 index ac3fa33e6f..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image3 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image30 b/ext/tk/sample/tkextlib/tkHTML/page2/image30 deleted file mode 100644 index 4a41950434..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image30 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image31 b/ext/tk/sample/tkextlib/tkHTML/page2/image31 deleted file mode 100644 index 60f13ed564..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image31 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image32 b/ext/tk/sample/tkextlib/tkHTML/page2/image32 deleted file mode 100644 index 04ddc4e8d7..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image32 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image33 b/ext/tk/sample/tkextlib/tkHTML/page2/image33 deleted file mode 100644 index c1ecfff6c4..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image33 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image34 b/ext/tk/sample/tkextlib/tkHTML/page2/image34 deleted file mode 100644 index 3dfd5d76e2..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image34 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image35 b/ext/tk/sample/tkextlib/tkHTML/page2/image35 deleted file mode 100644 index aea44f3017..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image35 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image36 b/ext/tk/sample/tkextlib/tkHTML/page2/image36 deleted file mode 100644 index baef0e0380..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image36 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image37 b/ext/tk/sample/tkextlib/tkHTML/page2/image37 deleted file mode 100644 index 6c6ba52b45..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image37 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image38 b/ext/tk/sample/tkextlib/tkHTML/page2/image38 deleted file mode 100644 index e298e04b29..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image38 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image39 b/ext/tk/sample/tkextlib/tkHTML/page2/image39 deleted file mode 100644 index e16e2f10d5..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image39 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image4 b/ext/tk/sample/tkextlib/tkHTML/page2/image4 deleted file mode 100644 index 9e5e46b7e5..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image4 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image5 b/ext/tk/sample/tkextlib/tkHTML/page2/image5 deleted file mode 100644 index 646a6d9a51..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image5 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image6 b/ext/tk/sample/tkextlib/tkHTML/page2/image6 deleted file mode 100644 index 7df417c710..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image6 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image7 b/ext/tk/sample/tkextlib/tkHTML/page2/image7 deleted file mode 100644 index 0e6ac10aff..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image7 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image8 b/ext/tk/sample/tkextlib/tkHTML/page2/image8 deleted file mode 100644 index ba7fb476b9..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image8 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image9 b/ext/tk/sample/tkextlib/tkHTML/page2/image9 deleted file mode 100644 index b1cad73ae9..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page2/image9 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/index.html b/ext/tk/sample/tkextlib/tkHTML/page2/index.html deleted file mode 100644 index 1c67be6c0b..0000000000 --- a/ext/tk/sample/tkextlib/tkHTML/page2/index.html +++ /dev/null @@ -1,433 +0,0 @@ - - - Tcl Resource Center - - - - - - - - - - -
    Scriptics - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Tcl/Tk
    Scripting Solutions for eBusiness Integration
    ProductsCustomersPartnersServicesTcl ResourcesCompany
    -
    - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Software
    Tcl/Tk Core
    Applications
    Extensions
    Patches
    Tcl & Java
    Tcl/Tk Ports
    Tools
    Documentation
    Community
    What's New
    Add URL
    Keyword Search
    Index
    - - - -
    Resource
    -
    - - - - - - - -
    -   -

    Tcl Resource Center

    -Top>Software Central>Extensions>Tk Widgets
    Viewed by name (By date)

    -

    Tk is a toolkit for building graphical user interfaces with Tcl. - Your Tcl/Tk scripts run on UNIX, Windows, and Macintosh.

    -

      -
      BLT 8.0 Unofficial zip and DLL -
      This is a compiled version of BLT 8.0 "unofficial" for -the Windows platform. Edit - (September 24, 1999 06:31)
      BLT 8.0p2 Unofficial tar file -
      This is a contributed patch to make BLT compatible with Tcl/Tk 8.0p2. While still "unofficial", it is widely used. - Make sure you get the 8.0p2 version because the 8.0 version does - not compile under windows. - There is also a 2.3-8.1 version that has been patched to work with 8.1. - README file. Edit - (August 30, 1999 06:38)
      BLT Home Page -
      - Author George Howlett, Version 2.3, - Works with Tk 4.1 through Tk 8.1 -
      Download, BLT2.3.tar.gz, BLT2.4h.tar.gz, BLT2.4i.tar.gz, blt2.4i-for-8.0.exe, blt2.4i-for-8.1.exe
      BLT is a set of widgets for Tk, including a graph widget, -bar chart, drag&drop, a simple command tracer, and much more. -The 2.4 release, which is still under development, works with 8.0 -or higher. -There are also an "unofficial" release for 8.0p2 -and 8.1a2 that were not done by the author. Edit - (October 26, 1999 09:43)
      BWidget -
      A set of native Tk 8.x Widgets using Tcl8.x namespaces. -The ToolKit is available under Unix/X11 and Windows. -The BWidget(s) have a professional look&feel as in other -well known Toolkits (Tix or Incr Widget) but the concept is -radically different because everything is native -so no platform compilation, no compiled extension -library are needed. The code is 100 Pure Tcl/Tk. -More 30 components : Notebook, PageManager, Tree, PanedWindow, ButtonBox, -ScrollView, ComboBox, SpinBox, ListBox, SelectFont, SelectColor, -ProgressBare ... Edit - (September 06, 1999 09:58)
      Dash Patch for Tk -
      This patch has many enhancements to the Tk and its canvas -widget, including dashed lines, smoothed polygons, -and performance enhancements. Edit - (November 21, 1999 06:33)
      Embedded Tk (et) -
      - Author Richard Hipp, Version 8.0b5, - Works with Tk 4.0, 4.1, 4.2, 8.0 -
      Download: et80b5.tar.gz
      Embedded Tk or ``ET'' is tool for making stand-alone executables out of a mixture of C or C++ and Tcl/Tk. -Using ET you can invoke a short Tcl/Tk script in the middle of a C routine, or you can invoke a C routine in the -middle of a Tcl/Tk script. ET also bundles external Tcl/Tk scripts (including the standard Tcl/Tk startup scripts) -into the executable so that the executable can be run on another binary-compatible computer that doesn't have -Tcl/Tk installed. Edit - (August 19, 1999 15:35)
      Enhanced Tk Console (TkCon) -
      - Author Jeff Hobbs, Version 1.3, - Works with Tk 4.1 through Tk 8.1 -
      Download: tkcon.tar.gz
      TkCon is a replacement for the standard console that comes with Tk (on Windows/Mac, but also works on - -Unix). The console itself provides many more features than the standard console. Edit - (August 23, 1999 12:06)
      Frontier-Tk ScriptMeridian project -
      This project seeks to integrate the Tk toolkit -with the Frontier scripting language. Edit - (August 19, 1999 15:36)
      Img image format extension -
      This package enhances Tk, adding support for many other Image formats: -BMP, XBM, XPM, GIF (with transparency), PNG, -JPEG, TIFF and postscript. -This is implemented as a shared library that can be dynamically loaded into -Tcl/Tk. - Edit - (November 21, 1999 06:35)
      mclistbox - a multi-column listbox widget -
      mclistbox is a multi-column listbox that is -written in pure tcl and runs on all platforms -that support tcl/tk 8.0 or higher. This widget -requires no other extensions; it is completely -standalone. Edit - (August 19, 1999 15:37)
      MFC views C++ class for embedding Tk -
      The idea of embedding Tk in MFC windows always seemed very enticing but information was sparse and contradictory - on a - scale between "very easy" and "not yet possible". The only thing for it was to have a go and lo, it wasn't that hard after all. - CTkView is a C++ class which can be used in MFC SDI or MDI applications. An instance of CTkView hosts an embedded Tk - toplevel widget and performs some management chores for the widget so that it can size, update and react correctly to Windows - events. Edit - (August 19, 1999 15:38)
      Pad++ -
      - Author Ben Bederson et al, Version 0.9p1, - Works with 8.0 -
      Download: download.html
      Pad++ is a Tk widget that provides a Zoomable User Interface (ZUI) that supports real-time interactive zoomable graphics in a fashion similar to the Tk Canvas widget. Pad++ supports tens of thousands of objects which include text, images, graphics, portals, lenses, simple html (and more), including transparency and rotation. Edit - (August 19, 1999 15:39)
      Progressbar -
      Progressbar is a megawidget written in pure tcl (ie: no compiling required - runs on all platforms Macintosh, Unix, Windows). -Its primary purpose is to show the progress of any action in percent. Edit - (January 24, 2000 09:19)
      scwoop (Simple Composite Widget Object Oriented Package) -
      Scwoop is a composite widget (also known as mega widget) extension to the great Tk widget library. Scwoop is -entirely written in Tcl using the stooop (Simple Tcl Only Object Oriented Programming) extension. Edit - (January 09, 2000 02:10)
      Supertext - tk text widget with unlimited undo -
      - Author Bryan Oakley, Version 1.0b1, - Works with Tcl 8.0 -
      Download: supertext.tcl
      Supertext is a package that provides a tk text widget with full undo and the ability to execute procedures both before and after a text -widget command has been processed. Supertext may be used as-is, or for the brave it may be used in place of the standard text -widget. Edit - (August 23, 1999 12:06)
      Tabbed Notebook Widget -
      - Author Richard Hipp, Version 1.0, - Works with Tk 4.1 or later. -
      Download: notebook.tcl
      This implements a tabbed notebook using -a canvas widget and embedded frames. -This is pure Tcl -code - not a C extension. Edit - (August 23, 1999 12:08)
      Tcl GD - graphics -
      - Author John Ellson and Spencer Thomas, Version 2.0, - Works with 8.0 and higher -
      Download: Gdtclft2.0.tar.gz
      - Thomas Boutell's Gd package provides a convenient way to generate - PNG images with a C program. If you prefer Tcl for CGI - applications, you'll want the TCL GD extension. Edit - (August 19, 1999 14:52)
      The Meta-GUI Tools -
      The Meta-GUI tools provide a framework for quickly building full -GUI applications. The GUI is rendered by a run-time engine -based on a hierarchical set of definitions you provide. At the bottom -of the hierarchy are abstract data types such as length, angle, -string, etc., and these are used to progressively build up frames, -dialogs, toolbars, menus, and operations. Edit - (August 23, 1999 12:10)
      Tkpiechart Home Page -
      Tkpiechart is a Tcl-only extension that allows the programmer to create and dynamically update 2D or 3D pie -charts in a Tcl/Tk application. This uses the stooop package and builds -pie charts on a Tk canvas. Edit - (January 09, 2000 02:12)
      TkPrint -
      TkPrint is an extension that allows you to print from a - Tk widget. Edit - (October 11, 1999 09:58)
      TkTable Home Page -
      The TkTable widget. The table command creates a -2-dimensional grid of cells. The table can use a Tcl array variable or Tcl - -command for data storage and retrieval. Edit - (November 18, 1999 09:25)
      TkTextMatrix (spreadsheet) -
      - Author John Arthur Tucker, Version 4.1, - Works with Tk 4.1 -
      Download: download.htm, textmatrix4.1.tar.gz
      A Tcl/Tk spreadsheet widget, TkTextmatrix, which is implemented in C++ and is - basically a Tk Canvas widget plus extra behavior for manipulating rows and columns of cell - items many times faster than with a plain Tk Canvas. It actually inserts text nearly as fast - as the Tk Text widget. If you work with or are interested in creating your own Tcl/Tk widgets - in C++, you might want to take a look at the C++ widget library included with this - distribution. Edit - (August 23, 1999 12:14)
      ToGL - a Tk Open GL widget -
      Togl is a Tk widget for OpenGL rendering. Togl is based on OGLTK, originally written by Benjamin Bederson at the -University of New Mexico (who has since moved to the University of Maryland). Togl adds the new features: -
        -
      • color-index mode support including color allocation functions -
      • support for requesting stencil, accumulation, alpha buffers, etc -
      • multiple OpenGL drawing widgets -
      • OpenGL extension testing from Tcl -
      • simple, portable font support -
      • overlay plane support -
      -Togl allows one to create and manage a special Tk/OpenGL widget with Tcl and render into it with a C program. That is, -a typical Togl program will have Tcl code for managing the user interface and a C program for computations and -OpenGL rendering. Edit - (August 23, 1999 12:14)
      Tree Widget -
      This implements a tree display in a canvas widget. -It is similar in layout to that of the -Windows explorer file viewer. This is pure Tcl -code - not a C extension. Edit - (September 29, 1999 14:37)
      Windows Extensions for Tcl/Tk (Michael Schwartz) -
      This site has pointers to several extensions specific to the -Windows platform. The extensions provide printing, -a MAPI interface to send email, and an interface to manipulate -.INI files, among other things. Edit - (October 07, 1999 10:50)
      [incr Widgets] Home Page -
      [incr Widgets] is a set of megawidgets (combo boxes, etc.) that are -upon the [incr Tcl] object system and the [incr Tk] megawidget -framework. This comes bundled with the -[incr Tcl] distributions. Edit - (September 05, 1999 16:08)
      combobox -
      - Author Bryan Oakley, Version 1.03, - Works with 8.x -
      Download: combobox.tcl
      combobox is a pure-tcl implementation of a combobox widget. It is -entirely self contained and does not require any other OO or megawidget -extension. It supports both editable and non-editable entries, and -provides the ability to call a procedure anytime the value of the combobox -changes. Edit - (August 23, 1999 12:15)
      Rnotebook -
      - Author Daniel Roche, Version 1.0, - Works with 8.0 or higher -
      Download: index.html
      This implements a resizeable notebook -widget in pure tcl/tk Edit - (August 19, 1999 15:39)
      saMDI v1.0a1 Multi-Document Interface Extension -
      A multi-document interface (MDI) extension for TCL/Tk 8.0. -This is a common interface format in Microsoft Windows that lets a parent window contain multiple child windows. -In effect you get a window manager inside a window! -Uses and includes the STOOOP object-oriented extension by -Jean-Luc Fontaine. -saMDI v1.0a1 GPL Copyright 1998 Sam Tregar. Edit - (August 23, 1999 12:07)
      Tix Support Site -
      - Author Ioi Lam, (adopted by Gregg Squires), Version 4.1, - Works with Tcl 7.4 through Tcl 8.0 -
      Download, Tix4.1.0.006.tar.gz, Tix41p6.zip, win41p6bin.zip
      Tix has found a new home! -
      - Tix provides over 40 new Tk including the -combo box, file selection dialogs, paned widget, -notebook, hierarchical list, directory tree, and more. - Edit - (August 23, 1999 12:11)
      Tk Tree Widget (C++) -
      Tk Tree widget for Tcl8.0.3. - -This version contains (optional) support for \[incr Tcl\] and \[incr Tk\] -version 3.0. -
      -With the tree widget, you can display a tree in a Tk canvas. The nodes -can be made up of any number of canvas items or even other Tk widgets. -You create the objects that make up a node and the line that connects -it to its parent and pass them to the tree widget. After this the tree -widget manages the positions of the nodes and end points of the tree -lines. Operations are available for inserting, moving and removing -nodes and subtrees and for querrying the position of a node in the -tree. The tree can be displayed horizontally or vertically. - Edit - (August 25, 1999 03:14)
      widget, simple megawidget package -
      - Author Jeffrey Hobbs, Version 0.9, - Works with Tcl/Tk 8.0 or higher -
      Download: widget-0.9.tar.gz
      This is a package of - megawidgets (i.e., compound widgets) that work almost exactly like Tk widgets. - You can also build your own new megawidgets. -Includes: combobox, hierarchy, console, progressbar, -tabnotebook, validating entry, pane geometry manager, baloon help. Edit - (August 23, 1999 12:16)
      -


      Top
      Home - | Products - | Customers - | Partners - | Services - | Tcl Resources - | Company -
      Search - | Site Map - | Feedback - | Contact Us - | info@scriptics.com - -
      - - © 1998-2000 Scriptics Corporation. All rights reserved. - Legal Notice | - Privacy Statement -
      - - diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image1 b/ext/tk/sample/tkextlib/tkHTML/page3/image1 deleted file mode 100644 index 814d1e8f08..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image1 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image10 b/ext/tk/sample/tkextlib/tkHTML/page3/image10 deleted file mode 100644 index 45001faf05..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image10 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image11 b/ext/tk/sample/tkextlib/tkHTML/page3/image11 deleted file mode 100644 index 7c4c170f21..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image11 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image12 b/ext/tk/sample/tkextlib/tkHTML/page3/image12 deleted file mode 100644 index 903e7344a6..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image12 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image13 b/ext/tk/sample/tkextlib/tkHTML/page3/image13 deleted file mode 100644 index 226d4f68c2..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image13 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image14 b/ext/tk/sample/tkextlib/tkHTML/page3/image14 deleted file mode 100644 index 8e8c71814c..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image14 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image2 b/ext/tk/sample/tkextlib/tkHTML/page3/image2 deleted file mode 100644 index 2ddeb3258c..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image2 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image3 b/ext/tk/sample/tkextlib/tkHTML/page3/image3 deleted file mode 100644 index 1651ba7e41..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image3 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image4 b/ext/tk/sample/tkextlib/tkHTML/page3/image4 deleted file mode 100644 index b565c8dd0e..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image4 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image5 b/ext/tk/sample/tkextlib/tkHTML/page3/image5 deleted file mode 100644 index e1268b81c0..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image5 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image6 b/ext/tk/sample/tkextlib/tkHTML/page3/image6 deleted file mode 100644 index 1a6b260b40..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image6 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image7 b/ext/tk/sample/tkextlib/tkHTML/page3/image7 deleted file mode 100644 index cec7aa04d8..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image7 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image8 b/ext/tk/sample/tkextlib/tkHTML/page3/image8 deleted file mode 100644 index ad0d748d65..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image8 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image9 b/ext/tk/sample/tkextlib/tkHTML/page3/image9 deleted file mode 100644 index 46ade3018b..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page3/image9 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/index.html b/ext/tk/sample/tkextlib/tkHTML/page3/index.html deleted file mode 100644 index a04470e659..0000000000 --- a/ext/tk/sample/tkextlib/tkHTML/page3/index.html +++ /dev/null @@ -1,2787 +0,0 @@ - -
      -

      Embedding Tcl in C/C++ Applications

      - - - - - -
      - Presented At: -
      - The Tcl2K Conference
      - Austin, Texas
      - 9:00am, February 15, 2000
      -
      -
        - Instructor: -
      - D. Richard Hipp
      - drh@hwaci.com
      - http://www.hwaci.com/drh/
      - 704.948.4565 -
      -

      -

      - -
      -

      - Copies of these notes, example source code,
      and other - resources related to this tutorial
      are available online at - - http://www.hwaci.com/tcl2k/

      -

      $Id$

      -
      -

      - -


      -

      Tutorial Outline

      -

      • Introduction
      • -
      • Building It Yourself
      • -
        • "Hello, World!" using Tcl
        • -
        • Tcl scripts as C strings
        • -
        • Adding new Tcl commands
        • -
        • A tour of the Tcl API
        • -
        • Tcl initialization scripts
        • -
        • Adding Tk
        • -
      • Tools Survey
      • -
      • Mktclapp
      • -
        • "Hello World" using mktclapp
        • -
        • Adding C code
        • -
        • Other Features
        • -
        • Invoking Tcl from C
        • -
        • Running mktclapp directly
        • -
        • Real-world examples
        • -
      • Summary
      • -

      -


      -

      Embedding Tcl in C/C++ Applications

      -

      • You know how to program in Tcl/Tk
      • You know how to program in C/C++
      • This tutorial is about how to do both at the same time.

      -


      -

      Why Mix C With Tcl/Tk?

      -

      • Use C for the things C is good at and Tcl for the things - Tcl is good at.
      • Generate standalone executables. -
        • Eliminate the need to install Tcl/Tk.
        • -
        • Prevent problems when the wrong version of Tcl/Tk is installed.
        • -
      • Prevent end users from changing the source code. -
        • Keeps users from creating new bugs.
        • -
        • Protects proprietary code.
        • -
      • Office politics
      • Use Tcl/Tk as a portability layer for a large C program
      • Use Tcl as a testing interface

      -


      -

      Why Mix C With Tcl/Tk?

      -

      - "Use C for the things C is good at and use Tcl/Tk for the things - Tcl/Tk is good at." -

      - - - - - -
      - C is good at: -
        -
      • Speed
      • -
      • Complex data structures
      • -
      • Computation
      • -
      • Interacting with hardware
      • -
      • Byte-by-byte data analysis
      • -
      -
        - Tcl/Tk is good at: -
        -
      • Building a user interface
      • -
      • Manipulation of strings
      • -
      • Portability
      • -
      • Opening sockets
      • -
      • Handling events
      • -
      -
      -


      -

      Programming Models

      - - - - - - - - - - - - - - - - -
      - -

      Mainstream Tcl Programming Model:

      -
        - -

      Embedded Tcl Programming Model:  

      -
      - -
      • Add bits of C code to a large Tcl program
      -
        - -
      • Add bits of Tcl code to a large C program
      -
      - -
      • Main Tcl script loads extensions written in C
      -
        - -
      • Main C procedure invokes the Tcl interpreter
      -
      - -
      • Tcl/Tk is a programming language
      -
        - -
      • Tcl/Tk is a C library
      -
      - -

      - Most of the Tcl2K conference is about
      -
        - -

      - This tutorial is about
      -
      - -


      -

      "Hello, World!" Using The Tcl Library

      - - - - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tcl.h>    Always include <tcl.h>
      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  interp = Tcl_CreateInterp();    Create a new Tcl interpreter
      -  Tcl_Eval(interp, "puts {Hello, World!}");    Execute a Tcl command.
      -  return 0;
      -}
      - -


      -

      Compiling "Hello, World!"

      -

      Unix:

      -
      - $ gcc hello.c -ltcl -lm -ldl
      - $ ./a.out
      - Hello, World!
      - -

      Windows using Cygwin:

      -
      - C:> gcc hello.c -ltcl80 -lm
      - C:> a.exe
      - Hello, World!
      - -

      Windows using Mingw32:

      -
      - C:> gcc -mno-cygwin hello.c -ltcl82 -lm
      -
      - -
      Also works with VC++

      -


      -

      Where Does -ltcl Come From On Unix?

      -

      Build it yourself using these steps:

      -

      • Get tcl8.2.2.tar.gz from Scriptics
      • zcat tcl8.2.2.tar.gz | tar vx
      • cd tcl8.2.2/unix
      • ./configure --disable-shared
      • make
      • Move libtcl8.2.a to your lib directory.
      • Copy ../generic/tcl.h into /usr/include.

      -


      -

      What Other Libraries Are Required For Unix?

      -

      • The sequence of -l options after -ltcl - varies from system to system
      • Observe what libraries the TCL makefile inserts when - it is building tclsh
      • Examples in this talk are for RedHat Linux 6.0 for Intel

      -


      -

      How To Compile Under Unix Without Installing Tcl

      -

      Specify the *.a file directly:

      -
      -  $ gcc -I../tcl8.2.2/generic hello.c \
      -      ../tcl8.2.2/unix/libtcl8.2.a -lm -ldl
      -  $ strip a.out
      -  $ ./a.out
      -  Hello, World!
      - -

      Or, tell the C compiler where to look for *.a files:

      -
      -  $ gcc -I../tcl8.2.2/generic hello.c \
      -      -L../tcl8.2.2/unix -ltcl -lm -ldl
      -  $ strip a.out
      -  $ ./a.out
      -  Hello, World!
      - -
      The -I../tcl8.2.2 argument - tells the compiler where to - find <tcl.h>.

      -


      -

      What's "Cygwin"?

      -

      • An implementation of GCC/G++ and all development tools - for Windows95/98/NT/2000
      • Available for free download at -
        - http://sourceware.cygnus.com/cygwin/ -
      • Also available shrink-wrapped at your local software retailer or - online at -
        - http://www.cygnus.com/cygwin/index.html -
      • Programs compiled using Cygwin require a special - DLL (cygwin1.dll) that provides a POSIX system API
      • Cygwin1.dll cannot be shipped with proprietary programs - without purchasing a license from Cygnus.
      • Mingw32 is the same compiler as Cygwin, but generates - binaries that do not use cygwin1.dll

      -


      -

      Where Does -ltcl82 Come From On Windows?

      -

      Build it like this:

      -

      • Get tcl82.lib and tcl82.dll from Scriptics.
      • echo EXPORTS >tcl82.def
      • nm tcl82.lib | grep 'T _' | sed 's/.* T _//' >>tcl82.def
      • dlltool --def tcl82.def --dllname tcl82.dll --output-lib libtcl82.a
      • Move libtcl82.a to the lib directory and tcl82.dll - to the bin directory.

      -


      -

      Where Does Your Code Go?

      - - - - - - - - - - - - - -
      -#include <tcl.h>

      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  interp = Tcl_CreateInterp();
      -  /* Your application code goes here */    Insert C code here to do whatever it is your program is - suppose to do
      -  return 0;
      -}
      - -


      -

      Building A Simple TCLSH

      - - - - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tcl.h>

      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  char *z;
      -  char zLine[2000];
      -  interp = Tcl_CreateInterp();
      -  while( fgets(zLine,sizeof(zLine),stdin) ){    Get one line of input
      -    Tcl_Eval(interp, zLine);    Execute the input as Tcl.
      -    z = Tcl_GetStringResult(interp);
      -    if( z[0] ){
      -      printf("¸üÿ¿PX¶\n", z);
      -    }
          Print result if not empty
      -  }
      -  return 0;
      -}
      -

      -
      What if user types more than 2000 characters?
      -

      - -


      -

      Building A Simple TCLSH

      -

      Use TCL to handle input. Allows input lines of unlimited length.

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tcl.h>

      -/* Tcl code to implement the
      -** input loop */
      -static char zLoop[] = 
      -  "while {![eof stdin]} {\n"
      -  "  set line [gets stdin]\n"    Get one line of input
      -  "  set result [eval $line]\n"    Execute input as Tcl
      -  "  if {$result!=\"\"} {puts $result}\n"    Print result
      -  "}\n"
      -;

      -
      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  interp = Tcl_CreateInterp();
      -  Tcl_Eval(interp, zLoop);    Run the Tcl input loop
      -  return 0;
      -}
      -

      -
      But what about commands that span multiple lines of input?
      -

      - -


      -

      Better Handling Of Command-Line Input

      -

      The file "input.tcl"

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -set line {}
      -while {![eof stdin]} {
      -  if {$line!=""} {
      -    puts -nonewline "> "
      -  } else {
      -    puts -nonewline "% "
      -  }
      -  flush stdout
          Prompt for user input. The prompt is normally "%" - but changes to ">" if the current line is a continuation.
      -  append line [gets stdin]
      -  if {[info complete $line]} {
      -    if {[catch {uplevel #0 $line} result]} {    If the command is complete, execute it.
      -      puts stderr "Error: $result"
      -    } elseif {$result!=""} {
      -      puts $result
      -    }
      -    set line {}
      -  } else {
      -    append line \n
      -  }
          If the command is incomplete, append a newline and get - another line of text.
      -}
      - -


      -

      Better Handling Of Command-Line Input

      -

      The file "input.c"

      - - - - - - - - - - - - - -
      -#include <tcl.h>

      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  interp = Tcl_CreateInterp();
      -  Tcl_Eval(interp, "source input.tcl");    Read and execute the input loop
      -  return 0;
      -}
      -

      -
      But now the program is not standalone!
      -

      - -


      -

      Converting Scripts Into C Strings

      - - - - -
      -static char zInputLoop[] = 
      -  "set line {}\n"
      -  "while {![eof stdin]} {\n"
      -  "  if {$line!=\"\"} {\n"
      -  "    puts -nonewline \"> \"\n"
      -  "  } else {\n"
      -  "    puts -nonewline \"% \"\n"
      -  "  }\n"
      -  "  flush stdout\n"
      -  "  append line [gets stdin]\n"
      -  "  if {[info complete $line]} {\n"
      -  "    if {[catch {uplevel #0 $line} result]} {\n"
      -  "      puts stderr \"Error: $result\"\n"
      -  "    } elseif {$result!=\"\"} {\n"
      -  "      puts $result\n"
      -  "    }\n"
      -  "    set line {}\n"
      -  "  } else {\n"
      -  "    append line \\n\n"
      -  "  }\n"
      -  "}\n"
      -;
      - -


      -

      Compile Tcl Scripts Into C Programs

      - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tcl.h>
      -
      -
      -static char zInputLoop[] = 
      -  /* Actual code omitted */
      -;
          Copy and paste the converted Tcl script here
      -
      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  interp = Tcl_CreateInterp();
      -  Tcl_Eval(interp, zInputLoop);    Execute the Tcl code
      -  return 0;
      -}
      - -


      -

      Converting Scripts To Strings
      Using SED Or TCLSH

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -sed -e 's/\\/\\\\/g' \     Convert \ into \\
      -  -e 's/"/\\"/g' \     Convert " into \"
      -  -e 's/^/  "/' \     Add " to start of each line
      -  -e 's/$/\\n"/' input.tcl    Add \n" to end of each line
      -

      -

      -
      -while {![eof stdin]} {
      -  set line [gets stdin]
      -  regsub -all {\} $line {&&} line    Convert \ into \\
      -  regsub -all {"} $line {\"} line    Convert " into \"
      -  puts "\"$line\\n\""    Add " in front and \n" at the end
      -}
      - -


      -

      Converting Scripts Into C Strings

      -

      You may want to save space by removing comments and extra whitespace - from scripts.

      - - - - -
      -static char zInputLoop[] = 
      -  "set line {}\n"
      -  "while {![eof stdin]} {\n"
      -  "if {$line!=\"\"} {\n"
      -  "puts -nonewline \"> \"\n"
      -  "} else {\n"
      -  "puts -nonewline \"% \"\n"
      -  "}\n"
      -  "flush stdout\n"
      -  "append line [gets stdin]\n"
      -  "if {[info complete $line]} {\n"
      -  "if {[catch {uplevel #0 $line} result]} {\n"
      -  "puts stderr \"Error: $result\"\n"
      -  "} elseif {$result!=\"\"} {\n"
      -  "puts $result\n"
      -  "}\n"
      -  "set line {}\n"
      -  "} else {\n"
      -  "append line \\n\n"
      -  "}\n"
      -  "}\n"
      -;
      - -


      -

      Converting Scripts To Strings

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -sed -e 's/\\/\\\\/g' \ 
      -  -e 's/"/\\"/g' \ 
      -  -e '/^ *#/d' \     Delete lines that begin with #
      -  -e '/^ *$/d' \     Delete blank lines
      -  -e 's/^ */  "/' \     Delete leading spaces
      -  -e 's/$/\\n"/' input.tcl

      -

      -

      -while {![eof stdin]} {
      -  set line [gets stdin]
      -  set line [string trimleft $line]    Remove leading space
      -  if {$line==""} continue    Delete blank lines
      -  if {[string index $line 0]=="#"} {
      -    continue
      -  }
          Delete lines starting with #
      -  regsub -all {\} $line {&&} line
      -  regsub -all {"} $line {\"} line
      -  puts "\"$line\\n\""
      -}
      - -


      -

      Removing Comments Or Leading Space
      Will Break Some Tcl Scripts!

      - - - - - - - - - - - - - - - - - - - - - - -
      -image create bitmap smiley -data {
      -#define smile_width 15
      -#define smile_height 15
          These lines begin with # but are not comment
      -static unsigned char smile_bits[] = {
      -   0xc0, 0x01, 0x30, 0x06, 0x0c, 0x18,
      -   0x04, 0x10, 0x22, 0x22, 0x52, 0x25,
      -   0x01, 0x40, 0x01, 0x40, 0x01, 0x40,
      -   0x12, 0x24, 0xe2, 0x23, 0x04, 0x10,
      -   0x0c, 0x18, 0x30, 0x06, 0xc0, 0x01};
      -}

      -

      -text .t
      -pack .t
      -.t insert end [string trim {
      -She walks in beauty, like the night
      -     Of cloudless climes and starry skies;
      -And all that's best of dark and bright
      -     Meet in her aspect and her eyes;
          Indentation is deleted on lines 2 - and 4
      -}] 

      -
      -

      -
      Problems like these are rare
      -

      - -


      -

      Adding A "continue" Command

      - - - - - - - - - - - - - -
      -set line {}
      -while {![eof stdin]} {
      -  if {$line!=""} {
      -    puts -nonewline "> "
      -  } else {
      -    puts -nonewline "% "
      -  }
      -  flush stdout
      -  append line [gets stdin]
      -  if {[info complete $line]} {
      -    if {[lindex $line 0]=="continue"} {
      -      break;
          Break out of the loop if the command - is "continue"
      -    } elseif {[catch {uplevel #0 $line} result]} {
      -      puts stderr "Error: $result"
      -    } elseif {$result!=""} {
      -      puts $result
      -    }
      -    set line {}
      -  } else {
      -    append line \n
      -  }
      -}
      - -


      -

      Stop For Tcl Input At Various Points
      In A C Program

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tcl.h>

      -static char zInputLoop[] = 
      -  /* Tcl Input loop as a C string */
      -;

      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  interp = Tcl_CreateInterp();
      -  /* Application C code */    Do some computation
      -  Tcl_Eval(interp, zInputLoop);    Stop for some Tcl input
      -  /* More application C code */    Do more computation
      -  Tcl_Eval(interp, zInputLoop);    Stop for more Tcl input
      -  /* Finish up the application */    Finish the computation
      -  return 0;
      -}
      - -


      -

      Using Tcl For Testing

      - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tcl.h>

      -static char zInputLoop[] = 
      -  /* Tcl Input loop as a C string */
      -;

      -
      -int main(int argc, char **argv){
      -#ifdef TESTING
      -  Tcl_Interp *interp;
          Create interpreter only if TESTING - is defined
      -  interp = Tcl_CreateInterp();
      -#endif
      -  /* Application C code */
      -#ifdef TESTING
      -  Tcl_Eval(interp, zInputLoop);
      -#endif
          Accept command-line input only if TESTING - is defined
      -  /* More application C code */
      -#ifdef TESTING
      -  Tcl_Eval(interp, zInputLoop);
      -#endif
      -  /* Finish up the application */
      -  return 0;
      -}
      - -


      -

      Creating A New Tcl Command In C

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tcl.h>

      -int NewCmd(
      -  void *clientData,
      -  Tcl_Interp *interp,
      -  int argc,
      -  char **argv
          The Tcl command is implemented as - a C function with four arguments.
      -){
      -  printf("Hello, World!\n");
      -  return TCL_OK;    Returns TCL_OK or TCL_ERROR
      -}

      -static char zInputLoop[] = 
      -  /* Tcl code omitted... */
      -;

      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  interp = Tcl_CreateInterp();
      -  Tcl_CreateCommand(interp, "helloworld",
      -                    NewCmd, 0, 0);
          Tell the interpreter which C function to call when the - "helloworld" Tcl command is executed
      -  Tcl_Eval(interp, zInputLoop);
      -  return 0;
      -}
      - -


      -

      Linkage From Tcl To C

      -

      • 3rd parameter of Tcl_CreateCommand() is a pointer to the C subroutine - that implements the command.
      • 4th parameter to Tcl_CreateCommand() becomes the 1st parameter to - the C routine whenever the Tcl command is executed.
      • 1st parameter to Tcl_CreateCommand() must be a valid Tcl interpreter. - The same pointer appears as the second parameter to the C routine - whenever the Tcl command is executed.

      - -


      -

      Linkage From Tcl To C

      -

      • 5th parameter of Tcl_CreateCommand() is a pointer to the C subroutine - that is called when the Tcl command is deleted.
      • 4th parameter to Tcl_CreateCommand() becomes the 1st parameter to - the C routine.

      - -


      -

      When To Use A Delete Proc

      -

      Examples of where the delete proc is used in standard Tcl/Tk:

      - - - - - - - - - - - - - - - - - - - - - - -
      -button .b -text Hello
      -pack .b
      -rename .b {}    Deleting the .b command causes the button to be destroyed
      -

      -
      -image create photo smiley \ 
      -    -file smiley.gif
      -rename smiley {}    Deleting the smiley command destroys the image and reclaims the - memory used to hold the image
      -

      • Always use a delete proc if the clientData is a pointer to - malloced memory or some other resource that needs freeing
      • Delete procs are never used in the Tcl core but are used - extensively in Tk

      - -


      -

      Linkage From Tcl To C

      -

      The argc and argv parameters work just like in - main()

      - - - - - - - -
      -helloworld one {two three} four    argc = 4
      - argv[0] = "helloworld"
      - argv[1] = "one"
      - argv[2] = "two three"
      - argv[3] = "four"
      - argv[4] = NULL
      - -


      -

      A Short-Cut

      -

      In a program with many new Tcl commands implemented in C, it becomes - tedious to type the same four parameters over and over again. So - we define a short-cut.

      - - - - - - - - - - - - - - - - - - - -
      -#define TCLARGS \ 
      -    void *clientData, \ 
      -    Tcl_Interp *interp, \ 
      -    int argc, \ 
      -    char *argv
          Define TCLARGS once in a header file
      - 

      -int NewCmd(TCLARGS){    Use the TCLARGS macro to define new C functions - that implement Tcl commands.
      -   /* implementation... */
      -}
      -

      -
      For brevity, we will use the TCLARGS macro during the - rest of this talk.
      -

      - -


      -

      Returning A Value From C Back To Tcl

      - - - - - - - - - - - - - - - - -
      -int NewCmd(TCLARGS){    Note that the C function returns an "int"
      -  return TCL_OK;    Return value is TCL_OK or TCL_ERROR
      -}
      -

      • TCL_OK and TCL_ERROR are defined in <tcl.h>
      • Other valid return values TCL_RETURN, TCL_BREAK and TCL_CONTINUE - are rarely used
      • Common mistake: forgetting to return TCL_OK

      - -


      -

      Returning A Value From C Back To Tcl

      - - - - - - - - - - - - - -
      -int NewCmd(TCLARGS){
      -  Tcl_SetResult(interp,"Hello!",TCL_STATIC);    Set the result to "Hello!"
      -  return TCL_OK;
      -}
      -

      • Result should be the text of an error message if you - return TCL_ERROR.
      • 3rd argument to Tcl_SetResult() can be TCL_STATIC, - TCL_DYNAMIC, TCL_VOLATILE, or a function pointer.
      • Also consider using Tcl_AppendResult().
      • Direct access to interp->result is deprecated.
      • See the man pages for details.

      - -


      -

      The Tcl_Obj Interface

      -

      • A new way to write Tcl commands in C code
      • First introduced in Tcl8.0
      • Can be much faster, especially for lists or numeric values.
      • Able to handle arbitrary binary data.
      • More difficult to program.

      -


      -

      The Tcl_Obj Interface

      - - - - - - - - - - - - - - - - - - - - - - -
      -int NewObjCmd(
      -  void *clientData,
      -  Tcl_Interp *interp,
      -  int objc,
      -  Tcl_Obj *const* objv    4th parameter is an array Tcl_Objs, not an array of strings
      -){
      -  /* Implementation... */
      -  return TCL_OK;
      -}

      -static char zInputLoop[] = 
      -  /* Tcl code omitted... */
      -;

      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  interp = Tcl_CreateInterp();
      -  Tcl_CreateObjCommand(interp, "newcmd",
      -                       NewObjCmd, 0, 0);
          Use a different function to register the command
      -  Tcl_Eval(interp, zInputLoop);
      -  return 0;
      -}
      - -


      -

      The Tcl_Obj Interface

      -

      • There are countless access methods for reading information from and - placing information in Tcl_Objs. Always use the access methods.
      • Details provided at Lee Bernhard's talk this afternoon.
      • Definitely use Tcl_Objs if you are writing a new Tcl extension.
      • Tcl_Objs address some of the weaknesses of Tcl relative to C/C++. -
          -
        • Tcl_Objs are faster
        • -
        • Tcl_Objs work with binary data
        • -
        - But C/C++ is faster still and better for working with binary data.
      • When mixing C/C++ with Tcl/Tk the benefits of Tcl_Objs are - less important. Using Tcl_Objs in this context may not be - worth the extra trouble.
      • This talk will focus on the string interface.

      -


      -

      Nickel Tour Of The Tcl API

      -

      Memory allocation functions

      -
      - - - -
      - Tcl_Alloc
      -
      - Tcl_Free
      -
      - Tcl_Realloc
      -

      Functions useful in the implementation of new Tcl commands

      -
      - - - -
      - Tcl_AppendElement
      - Tcl_AppendResult
      - Tcl_GetBoolean
      -
      - Tcl_GetDouble
      - Tcl_GetInt
      - Tcl_GetStringResult
      -
      - Tcl_ResetResult
      - Tcl_SetResult
      -

      Functions for controlling the Tcl interpreter

      -
      - - - -
      - Tcl_CreateCommand
      - Tcl_CreateInterp
      -
      - Tcl_CreateObjCommand
      - Tcl_DeleteCommand
      -
      - Tcl_DeleteInterp
      - Tcl_Exit
      -

      -


      -

      Nickel Tour Of The Tcl API

      -

      I/O functions

      -
      - - - -
      - Tcl_Close
      - Tcl_Eof
      - Tcl_Flush
      - Tcl_GetChannel
      - Tcl_GetChannelMode
      - Tcl_GetChannelName
      -
      - Tcl_Gets
      - Tcl_OpenCommandChannel
      - Tcl_OpenFileChannel
      - Tcl_OpenTcpClient
      - Tcl_OpenTcpServer
      - Tcl_Read
      -
      - Tcl_Seek
      - Tcl_Tell
      - Tcl_Ungets
      - Tcl_Write
      - Tcl_WriteChars
      -

      Names and meanings of system error codes

      -
      - - - -
      - Tcl_ErrnoId
      - Tcl_ErrnoMsg
      -
      - Tcl_GetErrno
      - Tcl_SetErrno
      -
      - Tcl_SignalId
      - Tcl_SignalMsg
      -

      -


      -

      Nickel Tour Of The Tcl API

      -

      General Operating System Calls

      -
      - - - -
      - Tcl_Access
      - Tcl_Chdir
      - Tcl_GetCwd
      -
      - Tcl_GetHostName
      - Tcl_GetNameOfExecutable
      - Tcl_Sleep
      -
      - Tcl_Stat
      -

      String Manipulation And Comparison

      -
      - - - -
      - Tcl_Concat
      - Tcl_Merge
      -
      - Tcl_SplitList
      - Tcl_StringCaseMatch
      -
      - Tcl_StringMatch
      -

      Dynamically Resizable Strings

      -
      - - -
      - Tcl_DStringAppend
      - Tcl_DStringAppendElement
      - Tcl_DStringEndSublist
      - Tcl_DStringInit
      - Tcl_DStringLength
      -
      - Tcl_DStringResult
      - Tcl_DStringSetLength
      - Tcl_DStringStartSublist
      - Tcl_DStringValue
      -

      -


      -

      Nickel Tour Of The Tcl API

      -

      Event Handlers

      -
      - - -
      - Tcl_CancelIdleCall
      - Tcl_CreateChannelHandler
      - Tcl_CreateTimerHandler
      - Tcl_DeleteChannelHandler
      -
      - Tcl_DeleteTimerHandler
      - Tcl_DoOneEvent
      - Tcl_DoWhenIdle
      -

      Functions For Reading And Writing Tcl Variables

      -
      - - - -
      - Tcl_GetVar
      - Tcl_GetVar2
      - Tcl_LinkVar
      - Tcl_SetVar
      - Tcl_SetVar2
      -
      - Tcl_TraceVar
      - Tcl_TraceVar2
      - Tcl_UnlinkVar
      - Tcl_UnsetVar
      - Tcl_UnsetVar2
      -
      - Tcl_UntraceVar
      - Tcl_UntraceVar2
      - Tcl_UpdateLinkedVar
      -

      Functions For Executing Tcl Code

      -
      - - - -
      - Tcl_Eval
      - Tcl_EvalFile
      -
      - Tcl_EvalObj
      - Tcl_GlobalEval
      -
      - Tcl_GlobalEvalObj
      - Tcl_VarEval
      -

      -


      -

      Nickel Tour Of The Tcl API

      -

      Functions For Dealing With Unicode

      -
      - - -
      - Tcl_NumUtfChars
      - Tcl_UniCharAtIndex
      - Tcl_UniCharIsAlnum
      - Tcl_UniCharIsAlpha
      - Tcl_UniCharIsControl
      - Tcl_UniCharIsDigit
      - Tcl_UniCharIsGraph
      - Tcl_UniCharIsLower
      - Tcl_UniCharIsPrint
      - Tcl_UniCharIsPunct
      - Tcl_UniCharIsSpace
      - Tcl_UniCharIsUpper
      - Tcl_UniCharIsWordChar
      - Tcl_UniCharLen
      - Tcl_UniCharNcmp
      - Tcl_UniCharToLower
      - Tcl_UniCharToTitle
      -
      - Tcl_UniCharToUpper
      - Tcl_UniCharToUtf
      - Tcl_UniCharToUtfDString
      - Tcl_UtfAtIndex
      - Tcl_UtfBackslash
      - Tcl_UtfCharComplete
      - Tcl_UtfFindFirst
      - Tcl_UtfFindLast
      - Tcl_UtfNcasecmp
      - Tcl_UtfNcmp
      - Tcl_UtfNext
      - Tcl_UtfPrev
      - Tcl_UtfToLower
      - Tcl_UtfToTitle
      - Tcl_UtfToUniChar
      - Tcl_UtfToUniCharDString
      - Tcl_UtfToUpper
      -
      -

      Functions For Dealing With Tcl_Objs

      -
      Too numerous to list...

      -


      -

      Documentation Of The Tcl API

      -

      • Tcl comes with excellent man pages
      • "Use the source, Luke"
      • See tclDecl.h for a list of API functions
      • The header comments on the implementation of API functions usually - gives a good description of what the function does and how it should - be used.
      • Most API functions are used within Tcl and Tk. Use grep to locate - examples.

      -


      -

      Initialization Scripts

      -

      • Run the mini TCLSH implemented above and execute the parray command
      • It doesn't work! What's wrong?

      • parray is really a Tcl proc that is read in when the - interpreter is initialized.

      • parray (and several other commands) are stored in a - handful of "Initialization Scripts"

      • All the initialization scripts are stored in the - "Tcl Library" - a directory on the host - computer.

      -
      Invoke the Tcl_Init() function to locate and read the - Tcl initialization scripts.

      -


      -

      The Tcl_Init() Function

      - - - - - - - - - - - - - -
      -#include <tcl.h>

      -static char zInputLoop[] = 
      -  /* Tcl code omitted... */
      -;

      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  interp = Tcl_CreateInterp();
      -  Tcl_Init(interp);    Locate and read the initialization scripts
      -  /* Call Tcl_CreateCommand()? */
      -  Tcl_Eval(interp, zInputLoop);
      -  return 0;
      -}
      -

      -
      But Tcl_Init() can fail. We need to check its return value...
      -

      - -


      -

      The Tcl_Init() Function

      - - - - - - - - - - - - - -
      -#include <tcl.h>

      -static char zInputLoop[] = 
      -  /* Tcl code omitted... */
      -;

      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  interp = Tcl_CreateInterp();
      -  if( Tcl_Init(interp)!=TCL_OK ){
      -    fprintf(stderr,"Tcl_Init() failed: ¸üÿ¿PX¶",
      -       Tcl_GetStringResult(interp));
      -  }
          Print error message if Tcl_Init() fails
      -  /* Call Tcl_CreateCommand()? */
      -  Tcl_Eval(interp, zInputLoop);
      -  return 0;
      -}
      -

      -
      But now the program is not standalone.
      -

      - -


      -

      How Tcl_Init() Works

      -

      • Computes the value of variable tcl_libPath.
      • Invokes the procedure named "tclInit"
      • A default tclInit procedure is built into Tcl. - You can define an alternative tclInit procedure - prior to calling Tcl_Init().

      -


      -

      The Default initTcl Procedure

      - - - - -
      -set errors {}
      -set dirs {}
      -if {[info exists tcl_library]} {
      -  lappend dirs $tcl_library
      -} else {
      -  if {[info exists env(TCL_LIBRARY)]} {
      -    lappend dirs $env(TCL_LIBRARY)
      -  }
      -  lappend dirs $tclDefaultLibrary
      -  unset tclDefaultLibrary
      -  set dirs [concat $dirs $tcl_libPath]
      -}
      -foreach i $dirs {
      -  set tcl_library $i
      -  set tclfile [file join $i init.tcl]
      -  if {[file exists $tclfile]} {
      -    if {![catch {uplevel #0 [list source $tclfile]} msg]} {
      -      return
      -    } else {
      -      append errors "$tclfile: $msg\n$errorInfo\n"
      -    }
      -  }
      -}
      -error "Can't find a usable init.tcl ..."
      - -


      -

      The Default Initialization Sequence

      -

      • The tclInit procedure locates and sources the init.tcl - script. The directory that contains init.tcl is stored in - the tcl_library variable.
      • The init.tcl script creates an unknown procedure. - The unknown procedure will run whenever Tcl encounters an - unknown command.
      • The unknown procedure consults the file tclIndex in the - tcl_library directory to see if the command is defined by one of - the initialization scripts.
      • The unknown procedure sources any needed initialization scripts - and retries the command.
      -
      Commands defined in the initialization scripts are loaded - on demand.

      -


      -

      Standalone Initialization Techniques

      -

      Manually execute all initialization scripts

      -
      • Convert all initialization scripts into C strings and - put them in the executable.
      • Call Tcl_Eval() on each initialization script and omit the - call to Tcl_Init()
      • Or, redefine tclInit so that it does not attempt to source - init.tcl then call Tcl_Eval() on each initialization - script after Tcl_Init() returns.
      -
      This approach is not recommended

      -


      -

      Standalone Initialization Techniques

      -

      Redefining the builtin source command

      -
      • Convert all initialization scripts into C strings and - put them in the executable.
      • Create a new source command that - calls Tcl_Eval() on the appropriate built-in string - instead of reading from the disk.
      • Read from disk if the named file is not one that is built in.

      -


      -

      Redefining source

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -static char zInitTcl[] = "...";
      -static char zParrayTcl[] = "...";
          Scripts init.tcl and parray.tcl
      -
      -int NewSourceCmd(TCLARGS){
      -  if( !strcmp(argv[1],"/builtin/init.tcl") )
      -    return Tcl_Eval(interp, zInitTcl);
      -  if( !strcmp(argv[1],"/builtin/parray.tcl") )
      -    return Tcl_Eval(interp, zParrayTcl);
          Call Tcl_Eval() on builtin strings if the names match
      -  return Tcl_EvalFile(interp, argv[1]);    Call Tcl_EvalFile() if no match
      -}

      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  setenv("TCL_LIBRARY","/builtin");    Causes tclInit to look for init.tcl in /builtin
      -  interp = Tcl_CreateInterp();
      -  Tcl_CreateCommand(interp, "source",
      -                    NewSourceCmd, 0, 0);
          Redefine source
      -  Tcl_Init(interp);
      -  Tcl_Eval(interp, zInputLoop);
      -  return 0;
      -}
      - -


      -

      Redefining source

      -

      • This approach works for all versions of Tcl and Tk.
      • Also need to redefine the "file exists" Tcl command since it - too is used by tclInit.
      • To verify that the program is really standalone, remove the call - to Tcl_EvalFile().

      -


      -

      Standalone Initialization Techniques

      -

      Use the Tcl*InsertProc() functions

      -
      • Three routines that overload basic file I/O operations: -
          -
        • TclStatInsertProc()
        • -
        • TclAccessInsertProc()
        • -
        • TclOpenFileChannelInsertProc()
        • -
      • Allows us to implement a virtual filesystem that overlays the - real filesystem.
      • The virtual filesystem contains all the initialization scripts - as compiled-in strings. The initialization scripts look like - they are resident on disk even though they are built in.
      • These functions first appeared in Tcl8.0.3. - Presumably to support TclPro Wrapper.
      • The only documentation is comments on the code. - See the Tcl source file generic/tclIOUtil.c

      -


      -

      The TclStatInsertProc() Function

      -

      • Sole argument is a pointer to a function whose interface is the - same as stat()
      • Functions are stacked. Tcl tries each stat function on the - list, beginning with the most recently inserted, until one succeeds.

      -


      -

      The TclStatInsertProc() Function

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tclInt.h>    Rather than <tcl.h>!
      -
      -static int
      -BltinFileStat(char *path,struct stat *buf){
      -  char *zData;
      -  int nData;
      -  zData = FindBuiltinFile(path, 0, &nData);    Check if path is a builtin
      -  if( zData==0 ){
      -    return -1;
      -  }
          Fail if path is not a builtin
      -  memset(buf, 0, sizeof(*buf));
      -  buf->st_mode = 0400;
      -  buf->st_size = nData;
      -  return 0;    Success if it is builtin
      -}

      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  TclStatInsertProc(BltinFileStat);    Register new stat function
      -  interp = Tcl_CreateInterp();
      -  Tcl_Init(interp);
      -  Tcl_Eval(interp, zInputLoop);
      -  return 0;
      -}
      - -


      -

      The TclAccessInsertProc() Function

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tclInt.h>    Rather than <tcl.h>!
      -
      -/* BltinFileStat() not shown... */

      -static int
      -BltinFileAccess(char *path, int mode){
      -  char *zData;
      -  if( mode & 3 ) return -1;    All builtins are read-only
      -  zData = FindBuiltinFile(path, 0, &nData);    Check if path is a builtin
      -  if( zData==0 ) return -1;    Fail if path is not a builtin
      -  return 0;    Success if it is builtin
      -}

      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  TclStatInsertProc(BltinFileStat);
      -  TclAccessInsertProc(BltinFileAccess);
          Register new stat and access functions
      -  interp = Tcl_CreateInterp();
      -  Tcl_Init(interp);
      -  Tcl_Eval(interp, zInputLoop);
      -  return 0;
      -}
      - -


      -

      The TclOpenFileChannelInsertProc() Function

      - - - - -
      -static Tcl_Channel BuiltinFileOpen(
      -  Tcl_Interp *interp,   /* The TCL interpreter doing the open */
      -  char *zFilename,      /* Name of the file to open */
      -  char *modeString,     /* Mode string for the open (ignored) */
      -  int permissions       /* Permissions for a newly created file (ignored) */
      -){
      -  char *zData;
      -  BuiltinFileStruct *p;
      -  int nData;
      -  char zName[50];
      -  Tcl_Channel chan;
      -  static int count = 1;

      -  zData = FindBuiltinFile(zFilename, 1, &nData);
      -  if( zData==0 ) return NULL;
      -  p = (BuiltinFileStruct*)Tcl_Alloc( sizeof(BuiltinFileStruct) );
      -  if( p==0 ) return NULL;
      -  p->zData = zData;
      -  p->nData = nData;
      -  p->cursor = 0;
      -  sprintf(zName,"etbi_bffffc7c_8049b04",((int)BuiltinFileOpen)>>12,count++);
      -  chan = Tcl_CreateChannel(&builtinChannelType, zName, 
      -                           (ClientData)p, TCL_READABLE);
      -  return chan;
      -}
      - -


      -

      The TclOpenFileChannelInsertProc() Function

      - - - - -
      -static Tcl_ChannelType builtinChannelType = {
      -  "builtin",          /* Type name. */
      -  NULL,               /* Always non-blocking.*/
      -  BuiltinFileClose,   /* Close proc. */
      -  BuiltinFileInput,   /* Input proc. */
      -  BuiltinFileOutput,  /* Output proc. */
      -  BuiltinFileSeek,    /* Seek proc. */
      -  NULL,               /* Set option proc. */
      -  NULL,               /* Get option proc. */
      -  BuiltinFileWatch,   /* Watch for events on console. */
      -  BuiltinFileHandle,  /* Get a handle from the device. */
      -};
      -

      -

      For additional information see:

      -
        -
      • The man page for Tcl_CreateChannel()
      • -
      • Tk source code file generic/tkConsole.c
      • -
      -

      - -


      -

      Initializing Tk

      -

      • All the same initialization script issues as Tcl
      • Tk initialization scripts are in a different directory - than the Tcl initialization scripts - the "Tk Library"
      • Call Tk_Init() after Tcl_Init()
      • Must have an event loop or Tk will not work!

      -


      -

      Implementing An Event Loop

      - - - - - - - - - - - - - - - - - - - - - - - - - -
      -button .b -text Hello -command exit
      -pack .b
          Create a Tk interface
      -
      -
      -bind . <Destroy> {
      -  if {![winfo exists .]} exit
      -}
          Close the application when the main window - is destroyed
      -
      -
      -while 1 {vwait forever}    The event loop
      - -


      -

      "Hello, World!" Using Tk

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tk.h>

      -
      -static char zHello[] =     The application code
      -  "button .b "
      -    "-text {Hello, World} "
      -    "-command exit\n"
      -  "pack .b\n";

      -
      -static char zEventLoop[] =    The event loop
      -  "bind . <Destroy> {\n"
      -  "  if {![winfo exists .]} exit\n"
      -  "}\n"
      -  "while 1 {vwait forever}\n";

      -
      -int main(int argc, char **argv){
      -  Tcl_Interp *interp;
      -  interp = Tcl_CreateInterp();
      -  Tcl_Init(interp);
      -  Tk_Init(interp);
          We really should check the return values of the init functions...
      -  Tcl_Eval(interp, zHello);
      -  Tcl_Eval(interp, zEventLoop);    The event loop never returns
      -  /*NOTREACHED*/
      -}
      - -


      -

      Compiling "Hello, World!" For Tk

      -

      Unix:

      -
      -  $ gcc hello.c -ltk -L/usr/X11R6/lib \
      -        -lX11 -ltcl -lm -ldl
      -  $ ./a.out
      - -

      Windows using Cygwin:

      -
      -  C:> gcc hello.c -mwindows -ltk80 -ltcl80 -lm
      -  C:> a.exe
      - -

      Windows using Mingw32:

      -
      -  C:> gcc -mno-cygwin hello.c -mwindows \
      -           -ltk82 -ltcl82 -lm
      -  C:> a.exe

      -


      -

      Making The Program Standalone

      -

      To make a Tcl application standalone you have to convert the following - initialization scripts to C strings and compile them into the - executable:

      - - - - - -
      -   auto.tcl
      -   history.tcl
      -   init.tcl -
      -   ldAout.tcl
      -   package.tcl -
      -   parray.tcl
      -   safe.tcl -
      -   tclIndex
      -   word.tcl -
      - -

      To make a Tk application standalone requires these additional - initialization scripts from the Tk Library:

      - - - - - -
      -   bgerror.tcl
      -   button.tcl
      -   clrpick.tcl
      -   comdlg.tcl
      -   console.tcl
      -   dialog.tcl -
      -   entry.tcl
      -   focus.tcl
      -   listbox.tcl
      -   menu.tcl
      -   msgbox.tcl
      -   optMenu.tcl -
      -   palette.tcl
      -   safetk.tcl
      -   scale.tcl
      -   scrlbar.tcl
      -   tclIndex
      -   tearoff.tcl -
      -   text.tcl
      -   tk.tcl
      -   tkfbox.tcl
      -   xmfbox.tcl -
      - -

      Total of about 13K lines and 400K bytes of text or 9K lines and - 250K bytes if you strip comments and leading spaces

      -


      -

      A Review Of The Features We Want

      -

        -
      1. - Combine C/C++ with Tcl/Tk into a single executable. -
      - -
        -
      1. - The executable should be standalone. It must not depend - on files not normally found on the system. -
      - -
        -
      1. - It should be difficult for end users to alter the program - (and introduce bugs). -

      -


      -

      Available Programming Aids

      -

      Several tools are available. The chart below shows which tools - help achieve which objectives.

      - -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      - Features The Tool Helps To Achieve
      Tool NameMix C and TclStandaloneHide Source
      SWIG  
      TclPro Wrapper 
      FreeWrap 
      Wrap  
      mktclapp

      -


      -

      SWIG

      - -

      • Creates an interface between an existing C/C++ library and a high-level - programming language. Support for: -
          -
        • Tcl/Tk
        • -
        • Perl
        • -
        • Python
        • -
        • Java
        • -
        • Eiffel
        • -
        • Guile
        • -
      • No changes required to C/C++ code. Can be used with legacy libraries.
      • Generates an extension, not a standalone binary
      • The tutorial on SWIG was yesterday afternoon.
      • http://www.swig.org/

      - -


      -

      Wrapper Programs

      - -

      • Convert a pure Tcl/Tk program into a standalone binary
      • Several wrapper programs are available: -
          -
        • TclPro Wrapper - http://www.scriptics.com/
        • -
        • FreeWrap - http://www.albany.net/~dlabelle/freewrap/freewrap.html
        • -
        • Wrap - http://members1.chello.nl/~j.nijtmans/wrap.html
        • -
      • No C compiler required!
      • TclPro will convert Tcl script into bytecode so that it cannot be - easily read by the end user. FreeWrap encrypts the scripts.
      • FreeWrap uses compression on its executable. - Wrap uses compression on both the executable and on the bundled script files.
      • Usually include extensions like winico and/or BLT

      - -


      -

      mktclapp

      - -

      • Mix C/C++ with Tcl/Tk into a standalone binary
      -
      • mktclapp generates an application initialization file - that contains Tcl scripts as strings and makes all necessary calls - to Tcl_Init, Tcl_CreateCommand, - Tcl*InsertProc, etc.
      • Features to make it easier to write new Tcl command in C
      • xmktclapp.tcl provides a GUI interface to mktclapp
      • http://www.hwaci.com/sw/mktclapp/

      - -


      -

      "Hello, World!" Using Mktclapp

      -

      • Download mktclapp.c and xmktclapp.tcl from - http://www.hwaci.com/sw/mktclapp/
      • Compile mktclapp: -
        -  cc -o mktclapp mktclapp.c
        -  
      • Create "Hello, World!" as a Tcl script in file hw.tcl: -
        -  button .b -text {Hello, World!} -command exit
        -  pack .b
        -  
      • Launch xmktclapp: -
        -  wish xmktclapp.tcl
        -  

      -


      -

      "Hello, World!" Using Mktclapp

      - -

      • Set "Command Line Input?" to "None"
      • Set "Standalone?" to "Yes"
      • Enter "hw.mta" for the Configuration File
      • Enter "hw.c" for the Output C File

      - -


      -

      "Hello, World!" Using Mktclapp

      - -

      • Go to the "Tcl Scripts" page
      • Press "Insert" and add hw.tcl to the list of - Tcl scripts
      • Change the "Startup Script" to be hw.tcl.
      • Select File/Build and File/Exit

      - -


      -

      "Hello, World!" Using Mktclapp

      -

      • Mktclapp generates hw.c. - Compile it something like this: -
        -  cc hw.c -ltk -L/usr/X11R6/lib -lX11 -ltcl -lm -ldl
        -  
      • Or, if using Cygwin: -
        -  gcc hw.c -mwindows -ltk80 -ltcl80 -lm
        -  
      • Or, if using Mingw32: -
        -  gcc -mno-cygwin hw.c -mwindows -ltk82 -ltcl82 -lm
        -  
      • And you're done!

      -


      -

      Adding C Code To Your Program

      -

      Put the new C code in a new source file named "add.c"

      - - - - - - - - - - - - - - - - - - - -
      -#include "hw.h"    Generated by mktclapp
      -
      -int ET_COMMAND_add(ET_TCLARGS){    ET_TCLARGS is a macro defined in hw.h
      -  int a, b;
      -  char zResult[30];
      -  a = atoi(argv[1]);
      -  b = atoi(argv[2]);
      -  sprintf(zResult, "-1073742724", a+b);
      -  Tcl_SetResult(interp, zResult, TCL_VOLATILE);
      -  return TCL_OK;
      -}
      - -


      -

      Adding C Code To Your Program

      - -

      • Go to the "C/C++ Modules" page of xmktclapp.tcl
      -
      • Press "Insert" and add add.c to the list of - C/C++ modules

      • Select File/Build and File/Exit

      - -


      -

      Adding C Code To Your Program

      -

      • Compile as follows: -
        -  cc add.c hw.c -ltk -L/usr/X11R6/lib -ltcl -lm -ldl
        -  
      • Or construct a Makefile that compiles add.c into add.o - and hw.c into hw.o and then links them.
      • Compile the same way for Windows except use the usual Windows - libraries and options...
      -
      Don't have to worry with Tcl_CreateCommand() - Mktclapp takes - care of that automatically.

      -


      -

      Checking Parameters In The add Command

      -

      Modify add.c to insure the add command - is called with exactly two integer arguments

      - - - - - - - - - - - - - - - - - - - - - - - - - -
      -#include "hw.h"

      -int ET_COMMAND_add(ET_TCLARGS){
      -  int a, b;
      -  char zResult[30];
      -  if( argc!=3 ){
      -    Tcl_AppendResult(interp,
      -      "wrong # args: should be: \"",
      -      argv[0], " VALUE VALUE\"", 0);
      -    return TCL_ERROR;
      -  }
          Report an error if there are not exactly - 2 arguments
      -  if( Tcl_GetInt(interp, argv[1], &a)!=TCL_OK ){
      -    return TCL_ERROR;
      -  }
          Report an error if the first argument is - not an integer
      -  if( Tcl_GetInt(interp, argv[2], &b)!=TCL_OK ){
      -    return TCL_ERROR;
      -  }
          Do the same for the second argument
      -  sprintf(zResult, "-1073742724", a+b);
      -  Tcl_SetResult(interp, zResult, TCL_VOLATILE);
      -  return TCL_OK;
      -}
      - -


      -

      Using The Tcl_Obj Interface

      -

      In the file objadd.c put this code:

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -#include "hw.h"
      -
      -int ET_OBJCOMMAND_add2(ET_OBJARGS){
      -  int a, b;
          Use "ET_OBJCOMMAND" instead of "ET_COMMAND" and - "ET_OBJARGS" instead of "ET_TCLARGS"
      -  if( objc!=3 ){
      -    Tcl_WrongNumArgs(interp, 1, objv,
      -      "number number");
      -    return TCL_ERROR;
      -  }
          A special routine for "wrong # args" error
      -  if( Tcl_GetIntFromObj(interp, objv[1], &a) ){    Instead of Tcl_GetInt
      -    return TCL_ERROR;
      -  }
      -  if( Tcl_GetIntFromObj(interp, objv[2], &b) ){
      -    return TCL_ERROR;
      -  }
      -  Tcl_SetIntObj(Tcl_GetObjResult(interp), a+b);    Result stored as integer, not a string
      -  return TCL_OK;
      -}
      - -


      -

      Speed Of Tcl_Obj Versus "char*" Interfaces

      -

      • Compile both add and add2 into the same executable.
      • Compare their speeds: -
        -   time {add 123456 654321} 10000
        -  26 microseconds per iteration
        -   time {add2 123456 654321} 10000
        -  4 microseconds per iteration
        -  
      • The Tcl_Obj version is 650 faster!
      • Replace the addition with a "real" computation that takes - 10 milliseconds.
      • Now the Tcl_Obj version is only 0.2 faster!
      -
      In many real-world problems, the Tcl_Obj interface has no noticeable - speed advantage over the string interface.

      -


      -

      More About Built-in Tcl Scripts

      - -

      • Comments and leading white-space are removed from the - script by default. Use the "Don't Strip Comments" - button to change this.
      • The file name must exactly match the name that is - used by the source command.

      - -


      -

      Locations Of Libraries

      - -

      • Tells mktclapp where to look for script libraries.
      • All Tcl scripts in the indicated directories are - compiled into the appinit.c file.
      • Comments and extra white-space are removed. - There is no way to turn this off.

      - -


      -

      Built-in Binary Data Files

      - -

      • Arbitrary files become part of the virtual filesystem
      • No comment or white-space removal is attempted
      • Useful for images or other binary data

      - -


      -

      New Commands In Namespaces

      -

      Two underscores (__) are replaced by two colons (::) in - command names, thus giving the ability to define new commands - in a namespace

      - - - - - - - - - - - - - -
      -#include <hw.h>
      -
      -int ET_COMMAND_adder__add(ET_TCLARGS){
      -  int a, b;
          Creates the Tcl command called "adder::add"
      -  char *zResult[30];
      -  if( argc!=3 ){
      -    Tcl_AppendResult(interp,
      -      "wrong # args: should be: \"",
      -      argv[0], " VALUE VALUE\"", 0);
      -    return TCL_ERROR;
      -  }
      -  if( Tcl_GetInt(interp, argv[1], &a)!=TCL_OK ){
      -    return TCL_ERROR;
      -  }
      -  if( Tcl_GetInt(interp, argv[1], &b)!=TCL_OK ){
      -    return TCL_ERROR;
      -  }
      -  sprintf(zResult, "-1073742724", a+b);
      -  Tcl_SetResult(interp, zResult, TCL_VOLATILE);
      -  return TCL_OK;
      -}
      - -


      -

      Adding Your Own main()

      - - - - - - - - - - - - - -
      -int main(int argc, char **argv){
      -  /* Application specific initialization */
      -  Et_Init(argc, argv);    Never returns!
      -  /*NOTREACHED*/
      -  return 0;
      -}
      -

      -
      The "Autofork" feature is disabled if you supply your own main()
      -

      - -


      -

      Initializing The Tcl Interpreter

      - - - - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tcl.h>

      -int counter = 0;

      -int main(int argc, char **argv){
      -   Et_Init(argc, argv);
      -   /*NOTREACHED*/
      -   return 0;
      -}

      -int Et_AppInit(Tcl_Interp *interp){
      -  if( Blt_Init(Interp) ){
      -    return TCL_ERROR;
      -  }
          Example: Initialize an extension
      -  Tcl_LinkVar(interp, "counter", &counter,
      -              TCL_LINK_INT);
          Or link a C variable to a Tcl variable
      -  return TCL_OK;    Return TCL_OK if successful
      -}
      - -


      -

      Writing Your Own Event Loop

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tcl.h>
      -
      -void Et_CustomMainLoop(Tcl_Interp *interp){    Replaces the default event loop
      -  return;    Ex: Return without handling any events.
      -}

      -int main(int argc, char **argv){
      -  Et_Init(argc, argv);    This now returns after initializing Tcl
      -  /* Application code here */
      -  return 0;
      -}
      - -


      -

      Writing Your Own Event Loop

      - - - - - - - - - - - - - - - - - - - - - - -
      -#include <tcl.h>

      -void Et_CustomMainLoop(Tcl_Interp *interp){
      -  for(;;){
      -    Tcl_DoOneEvent(TCL_ALL_EVENTS|TCL_DONT_WAIT);
      -    /* Other processing... */
      -  }
          Intermix processing and event handling
      -}

      -int main(int argc, char **argv){
      -  Et_Init(argc, argv);    Never returns
      -  /*NOTREACHED*/
      -  return 0;
      -}
      - -


      -

      Mktclapp Initialization Sequence

      -

      • Initialization starts when the Et_Init() - function is called either by client code or by - the main() that mktclapp generates
      • Create the main Tcl interpreter
      • Construct the virtual filesystem overlay by redefining - the source command and by using the - Tcl*InsertProc() functions
      • Call Et_PreInit() if the client defines it
      • Call Tcl_Init() and Tk_Init()
      • Call Tcl_CreateCommand() and Tcl_CreateObjCommand() - for every ET_COMMAND_* and ET_OBJCOMMAND_* function - in the client code
      • Call Et_AppInit() if the client defines it
      • Run the main Tcl script if there is one
      • Call Et_CustomMainLoop() if defined by client code or - else run the built-in event loop

      -


      -

      Invoking Tcl From C

      -

      • Use one of the built-in evaluation functions: -
        - - -
          -
        • Tcl_Eval()
        • -
        • Tcl_VarEval()
        • -
        • Tcl_EvalFile()
        • -
        • Tcl_GlobalEval()
        • -
          -
        • Tcl_EvalObj()
        • -
        • Tcl_GlobalEvalObj()
        • -
      • Mktclapp provides evaluation functions with variable argument - lists as in printf(): -
          -
        • Et_EvalF()
        • -
        • Et_GlobalEvalF()
        • -
      • Mktclapp provides a global variable Et_Interp which is - a pointer to the main interpreter

      -


      -

      Invoking Tcl From C

      -

      Example: A C function that pops up an error message dialog box

      - - - - -
      -#include "appinit.h"

      -void ErrMsg(char *zMsg){
      -  Tcl_SetVar(Et_Interp, "zMsg", zMsg, TCL_GLOBAL_ONLY);
      -  Tcl_GlobalEval(Et_Interp, 
      -    "tk_messageBox -icon error -msg $zMsg -type ok");
      -  Tcl_UnsetVar(Et_Interp, "zMsg", TCL_GLOBAL_ONLY);
      -}
      - -


      -

      Invoking Tcl From C

      -

      The same C function implemented using Et_EvalF() instead - of Tcl_GlobalEval()

      - - - - -
      -#include "appinit.h"

      -void ErrMsg(char *zMsg){
      -  Et_EvalF(Et_Interp, 
      -    "tk_messageBox -icon error -msg {¸üÿ¿PX¶} -type ok",
      -    zMsg);
      -}
      -

      -

      • - Suppose the function is called as follows: -
        - ErrMsg("Syntax error near \"}\""); -
        -
      - -
      • - The command that gets executed is: -
        -    tk_messageBox -icon error -msg \
        -        {Syntax error near "}"} -type ok
        -  
        -
      - -
      • - But this is an ill-formed Tcl command! -
      -

      - -


      -

      Invoking Tcl From C

      -

      Use the "" format to generate a quoted string

      - - - - -
      -#include "appinit.h"

      -void ErrMsg(char *zMsg){
      -  Et_EvalF(Et_Interp, 
      -    "tk_messageBox -icon error -msg \"%\" -type ok",
      -    zMsg);
      -}
      -

      • The puts a backslash before all characters that - are special to Tcl
      • The Tcl command becomes: -
        -    tk_messageBox -icon error -msg \
        -        "Syntax error near \"\}\"" -type ok
        -  

      - -


      -

      Other Functions Provided By Mktclapp

      -

      • void Et_ResultF(Tcl_Interp*, ...);
      • char *Et_DStringAppendF(Tcl_DString*, ...);
      • int Et_AppendObjF(Tcl_Obj*, ...);
      • char *mprintf(const char *format, ...);
        - char *vmprintf(const char *format, va_list);
      • void Et_NewBuiltinFile(char *filename, char *data, int amt);

      -


      -

      Operating Mktclapp From The Command Line

      -

      • Generate the appinit.h header file like this: -
        - mktclapp -header >appinit.h -
      • Generate the appinit.c file like this: -
        - mktclapp -f appinit.mta >appinit.c -
      • The *.mta file is just a list of command-line options
      • Enter -
        - mktclapp -help -
        - to get a list of available options
      • Look at MTA files generated by xmktclapp.tcl for examples

      -


      -

      Format Of An MTA File

      - - - - - - - - - - - - - - - - - - - -
      -# Configuration file generated by xmktclapp
      -# Hand editing is not recommended
      -#
          Comments begin with one #
      -## Autofork No
      -## CFile:add.c 1
      -## CFile:objadd.c 1
      -## CmdLine Console
      -## ConfigFile hw.mta
      -## Data:check.gif 1
      -## MainScript hw.tcl
      -## Mode Tcl/Tk
      -## NoSource No
      -## OutputFile hw.c
      -## Shroud No
      -## Standalone Yes
      -## TclFile:hw.tcl 1
      -## TclLib /usr/lib/tcl8.0
      -## TkLib /usr/lib/tk8.0
          Lines beginning with two #s are used - by xmktclapp.tcl and ignored by mktclapp
      --console
      --main-script "hw.tcl"
      --tcl-library "/usr/lib/tcl8.0"
      --tk-library "/usr/lib/tk8.0"
      -"add.c"
      -"objadd.c"
      --i "check.gif"
      --strip-tcl "hw.tcl"
          All other lines are read by mktclapp and - ignored by xmktclapp.tcl
      - -


      -

      Summary

      -

      • Use Tcl for the things Tcl is good at and use C/C++ for the things that - C/C++ is good at
      • Use wrapper programs to make pure Tcl programs standalone
      • Use mktclapp to combine Tcl/Tk with C/C++ into a standalone

      -


      diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image1 b/ext/tk/sample/tkextlib/tkHTML/page4/image1 deleted file mode 100644 index da26d7092e..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page4/image1 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image2 b/ext/tk/sample/tkextlib/tkHTML/page4/image2 deleted file mode 100644 index e176a96a55..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page4/image2 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image3 b/ext/tk/sample/tkextlib/tkHTML/page4/image3 deleted file mode 100644 index e829d3712c..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page4/image3 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image4 b/ext/tk/sample/tkextlib/tkHTML/page4/image4 deleted file mode 100644 index f14ea13547..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page4/image4 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image5 b/ext/tk/sample/tkextlib/tkHTML/page4/image5 deleted file mode 100644 index 4ef6277226..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page4/image5 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image6 b/ext/tk/sample/tkextlib/tkHTML/page4/image6 deleted file mode 100644 index 1adb261b40..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page4/image6 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image7 b/ext/tk/sample/tkextlib/tkHTML/page4/image7 deleted file mode 100644 index ba0d26ec18..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page4/image7 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image8 b/ext/tk/sample/tkextlib/tkHTML/page4/image8 deleted file mode 100644 index 8b81d58e27..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page4/image8 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image9 b/ext/tk/sample/tkextlib/tkHTML/page4/image9 deleted file mode 100644 index f0a352f9d0..0000000000 Binary files a/ext/tk/sample/tkextlib/tkHTML/page4/image9 and /dev/null differ diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/index.html b/ext/tk/sample/tkextlib/tkHTML/page4/index.html deleted file mode 100644 index 588ae5ccd7..0000000000 --- a/ext/tk/sample/tkextlib/tkHTML/page4/index.html +++ /dev/null @@ -1,768 +0,0 @@ - - - -[fm] welcome to freshmeat.net - - - -
      -
      -
      -
      - - - - - -
      freshmeat.net -
      -find:
      -linux.com partner
      - - - - -
      news |
      -appindex |
      -editorials |
      lounge |
      -contribute |
      -feedback |
      about |
      -awards |
      -FAQ |
      - -
      - -
      -
      - - - -sort by: [ date | name | urgency ]
       
      - -
      -We should get this out of the door now
      -scoop - January 29th 2000, 23:59 EST -

      Everyone else is talking about it, so we should announce it ourselves -before you start to think it's a government hoax. Server 51 is our new hosting service for Open Source projects, based on Super Cool Space Alien Technology(TM). We hadn't planned to announce it quite so soon, and it's still in the alpha stage as we work day and night at integrating SCSAT with our terrestrial systems, but feel free to take a look around and see what's going on. When we're out of the testing stage and ready to make room for your project, we'll send word via your implants. Be listening. - - - -

      [ comments (8) ] -

      Category: freshmeat - - homepage   -
      -
      - - -
      - -
      -Is Linux for Crazies?
      -jeff covey - January 29th 2000, 23:59 EST -

      Ray Woodcock writes: "In terms relevant to Linux, this freshmeat -editorial glances at the tendency of mainstream viewpoints to dismiss -other viewpoints as 'fringe,' the propensity of dissident movements to -splinter into factions before they can effectively counter their -primary adversaries, and the difficulty of creating stability without -squelching curiosity." -

      [ comments (2), 2065 words in body ] -

      Category: Editorial - -   -
      -
      - - -
      - -
      -RabbIT 2.0.2
      -Ernimril - January 29th 2000, 18:29 EST -

      RabbIt is the mutating, caching webproxy which is used to speed up surfing over slow links like modems. It does this by removing advertising and background images and scaling down images to low quality JPEGs. RabbIT is written in Java and should be able to run on any platform. It does depend upon an image converter if imagescaleing is on. The recommended image converter is "convert" from the ImageMagick package.

      -

      Changes: Fixes have been made for a few bugs concerning keep alive and the HTTP response header, a bug with NT and cache directories, a bug concerning requests without a response body, a bug in GZIPHandler that caused it to not gzip already compressed (gzip or compress) streams, a bug in HTTPHeader regarding response phrases that are multiline, and a few bugs in ImageHandler and NCache. GZIPHandler has been built as an intermediate(*) to FilterHandler (this means that it is possible to gzip text/plain, etc., without filtering those streams) uuencoding has been added to the Coder, RabbIT now uses HTTP/1.1, HTMLParser now compiles cleanly with Jikes, and GeneralHeader has been created to allow for HTTPFooter (which is useful when sending chunked data). -

      Urgency: low -

      [ comments (0) ] -

      License: freely distributable
      - Category: Daemons/Proxy
      -download homepage appindex record   -
      -
      - - -
      - -
      -nmpg 1.1.3
      -Joel Lindau - January 29th 2000, 18:18 EST -

      nmpg is a small command-driven frontend and network-jukebox for mpg123.

      -

      Changes: Bugfixes, better memory management, a new .nmpgrc parser, and new options. -

      Urgency: low -

      [ comments (0) ] -

      License: OpenSource
      - Category: Console/Sound
      -download homepage changelog appindex record   -
      -
      - - -
      - -
      -mod_dtcl 0.7.3
      -David Welton - January 29th 2000, 18:11 EST -

      Mod_dtcl is a free/open source implementation of server-parsed Tcl under Apache. It allows you to tightly integrate HTML with Tcl, a widely-used scripting language with many years of development invested in it. There are also many external Tcl modules that you can load into mod_dtcl, to create images, access databases, etc.

      -

      Changes: A major overhaul of header handling and internal buffering, and the addition of the ability to handle binary data. -

      Urgency: low -

      [ comments (0) ] -

      License: GPL
      - Category: Web/Development
      -download homepage changelog appindex record   -
      -
      - - -
      - -
      -CoreLinux++ 0.4.6
      -Frank V. Castellucci - January 29th 2000, 18:07 EST -

      CoreLinux++ is an initiative to normalize methods and conventions for OOA/OOD/C++ development for Linux, materialized in a set of Open Source C++ class libraries (libcorelinux++ and libcoreframework++) to support common patterns and exploit the C++ standards.

      -

      Changes: This release adds AbstractFactory and AssociativeIterator analysis, design, implementations, test code, a CVS daily tarball, a Patch Submission facility and updated FAQ, Web Pages, and defect reporting guidelines. -

      Urgency: medium -

      [ comments (0) ] -

      License: LGPL
      - Category: Development/Libraries
      -download homepage changelog appindex record   -
      -
      - - -
      - -
      -scribe 0.2
      -ChromeBob - January 29th 2000, 12:12 EST -

      scribe writes functions prototypes for your C code, so you don't have to. It also compares unique functions between source code files and will 'extern' when appropriate. C++ methods support is also planned.

      -

      Changes: A fix for an fflush() bug and better documentation. -

      Urgency: low -

      [ comments (0) ] -

      License: GPL
      - Category: Development/Tools
      -download homepage appindex record   -
      -
      - - -
      - -
      -E theme updater 0.1
      -Hallvar Helleseth - January 29th 2000, 12:04 EST -

      E theme Updater is a bash script to automatically update all of your Enlightenment themes from e.themes.org.

      -

      Changes: Initial release. - -

      [ comments (0) ] -

      License: GPL
      - Category: Console/Misc
      -download homepage appindex record   -
      -
      - - -
      - -
      -Powertweak-Linux 0.1.7
      -Dave Jones - January 29th 2000, 12:03 EST -

      Powertweak-Linux is a port of the Microsoft Windows tool of the same name rewritten from the ground up. Its main function is to tune your system to its optimal performance settings. Currently, it tunes PCI chipsets and can set /proc/sys entries.

      -

      Changes: A major GUI overhaul, the ability to generate configuration files, extended PCI information tabs, extra information support for the Matrox G200, and numerous other bugfixes & improvements. -

      Urgency: low -

      [ comments (2) ] -

      License: GPL
      - Category: Console/System
      -download homepage changelog appindex record   -
      -
      - - -
      - -
      -Pexeso Beta
      -Pavol Krigler - January 29th 2000, 11:55 EST -

      pexeso is a simple graphic card game for one or two players.

      -

      Changes: Initial public release. - -

      [ comments (0) ] -

      License: Freeware
      - Category: Console/Games
      -download homepage appindex record   -
      -
      - - -
      - -
      -XZX 2.9.2
      -E. Kunze - January 29th 2000, 11:54 EST -

      XZX is a portable emulator of ZX Spectrum 48K/128K/+3 (8-bit home computers made by Sir Clive Sinclair) and Pentagon/Scorpion (Spectrum clones made in Russia) for machines running UNIX and the X Window system. XZX is completely written in C and emulates Spectrum 48K, 128K, +2 and +3, Pentagon and Scorpion, Interface I with up to 8 microdrives, Multiface 128 and Multiface 3, BetaDisk 128 interface by Technology Research Ltd with 4 disk drives, +D interface by Miles Gordon Technology with 2 disk drives, Kempston mouse, Kempston joystick and built-in machine code monitor.

      -

      Changes: Lots of feature improvement and bug fixes. Most parts of the audio support has been rewritten for different UNICES. -

      Urgency: low -

      [ comments (0) ] -

      License: Shareware
      - Category: X11/Emulators
      -download homepage changelog appindex record   -
      -
      - - -
      - -
      -DistroLib 0.4
      -PhiR - January 29th 2000, 11:54 EST -

      DistroLib is an abstraction library designed to make the development of distributed application easier. Its main target is currently compute-bound tasks based on a one server, many clients model (much like distributed.net), but it is quite generic and could be used for any client/server app. It is lightweight, easy-to-use, and relies heavily on threads.

      -

      Changes: Important bug fixes and command history support. -

      Urgency: low -

      [ comments (0) ] -

      License: GPL
      - Category: Development/Libraries
      -download homepage changelog appindex record   -
      -
      - - -
      - -
      -ToutDoux 1.1.7
      -yeupou - January 29th 2000, 11:54 EST -

      ToutDoux is a project manager which lets you design a plan of action using a tree structure, with translations in French and English.

      -

      Changes: A new menu and XML standard for save files. -

      Urgency: low -

      [ comments (0) ] -

      License: GPL
      - Category: GNOME/Tools
      -download homepage appindex record   -
      -
      - - -
      - -
      -goMP 1.0.3
      -Gautier - January 29th 2000, 11:52 EST -

      goMP is a set of CGI scripts that allows you to remotely control, via a Web browser, a computer acting as an MP3 jukebox. This program is very useful for someone who's got a dedicated computer with a lot of MP3 files but that doesn't have any output and input devices except network and sound card. It's main advantages are built-in cataloging, fast access to music, and no special software needed on the client side.

      -

      Changes: Bugfixes, a password-protected config page, basic search function, easier installation thanks to an install script, and relocation of HTML docs and CGIs to a subdirectory. -

      Urgency: medium -

      [ comments (0) ] -

      License: Artistic
      - Category: Web/Tools
      -download homepage changelog appindex record   -
      -
      - - -
      - -
      -APSEND 1.40
      -M.K. - January 29th 2000, 11:50 EST -

      APSEND is a TCP/IP packet sender to test firewalls and other network applications. It also includes a syn flood option, the land DoS attack, and a DoS attack against tcpdump running on a UNIX-based system. Future updates will include support for a scripting language to construct TCP packets and a few more options and protocols like UDP and ICMP. A port of APSEND from Perl to C is planned as well.

      -

      Changes: The stream attack, bugfixes, and rewrites for parts of the code. -

      Urgency: low -

      [ comments (0) ] -

      License: GPL
      - Category: Console/Networking
      -download homepage changelog appindex record   -
      -
      - - -
      - -
      -ecasound 1.6.12r10
      -Kai Vehmanen - January 29th 2000, 11:48 EST -

      Ecasound is a software package designed for multitrack audio processing. It can be used for simple tasks like audio playback, recording and format conversions, as well as for multitrack effect processing, mixing, recording and signal recycling. Ecasound supports a wide range of audio inputs, outputs and effect algorithms. Ecasound has a chain-based design that allows effects to be easily combined both in series and in parallel. Oscillators and MIDI-CCs can be used for controlling effect parameters. Includes a versatile console mode interface, a Qt-based X-interface and various command-line utils suitable for batch processing.

      -

      Changes: Support for 24- and 32-bit audio formats and for ALSA 0.5, multichannel noisegate, a new 2nd order lowpass filter, some ia-mode commands, and various bugfixes and low-level improvements. -

      Urgency: low -

      [ comments (0) ] -

      License: GPL
      - Category: Console/Sound
      -download homepage changelog appindex record   -
      -
      - - -
      - -
      -SCEZ 20000129
      -endergone Zwiebeltuete - January 29th 2000, 11:46 EST -

      SCEZ is a library that should make the handling of smart cards (not memory cards) and card readers as simple as possible and be at the same time small and easily portable. Currently supported are Dumb Mouse, CT-API and Towitoko readers and Schlumberger Cryptoflex, Gemplus GPK4000, GSM SIM and Telesec SigG cards. A PKCS#15 implementation is in the design phase. There are ports to PalmOS and MS-Windows available.

      -

      Changes: More card and reader drivers, and an application to read out GSM SIM card (phone book and SMS) and write it to the card. -

      Urgency: low -

      [ comments (0) ] -

      License: BSD type
      - Category: Development/Libraries
      -download homepage appindex record   -
      -
      - - -
      - -
      -Comicq 0.2.0
      -Terminal6 - January 29th 2000, 11:45 EST -

      COMICQ is a command line ICQ messaging tool that allows a user to connect to ICQ using your UIN and password, then sends a message to the destination UIN.

      -

      Changes: Several bugfixes, icq99a compliance, and a new option --ip that allows you to get any user's IP by their UIN. -

      Urgency: low -

      [ comments (0) ] -

      License: GPL
      - Category: Console/Communication
      -download homepage appindex record   -
      -
      - - -
      - -
      -senv 0.2
      -Zbyszek Sobiecki - January 29th 2000, 11:44 EST -

      Senv allows you to run programs with a specified environment. It can set uid, gid, root directory, working directory, limits, and environment variables. It is useful in init scripts and as a shell for users for setting resource limits and environment variables. You can create sets of configurations and specify the one to use from command line.

      -

      Changes: Login shell limits and environment setting for users, permanent resource limits for specified groups of users and environment variables, and other minor bugfixes. -

      Urgency: low -

      [ comments (0) ] -

      License: GPL
      - Category: Console/Administration
      -download changelog appindex record   -
      -
      - - -
      - -
      -XZX 2.9.2
      -E. Kunze - January 29th 2000, 10:55 EST -

      XZX is a portable emulator of ZX Spectrum 48K/128K/+3 (8-bit home computers made by Sir Clive Sinclair) and Pentagon/Scorpion (Spectrum clones made in Russia) for machines running UNIX and the X Window system. XZX is completely written in C and emulates Spectrum 48K, 128K, +2 and +3, Pentagon and Scorpion, Interface I with up to 8 microdrives, Multiface 128 and Multiface 3, BetaDisk 128 interface by Technology Research Ltd with 4 disk drives, +D interface by Miles Gordon Technology with 2 disk drives, Kempston mouse, Kempston joystick and built-in machine code monitor.

      -

      Changes: Lots of feature improvement and bug fixes. Most parts of the audio support has been rewritten for different UNICES. -

      Urgency: low -

      [ comments (0) ] -

      License: Shareware
      - Category: X11/Emulators
      -download homepage changelog appindex record   -
      -
      - - -

      [ full page for today | yesterday's edition ]
      - -
      - -
      navigator
      -- full page for today
      -- yesterday's edition
      -- new: fm news via NNTP

      -
      - -
      eye catcher
      -Free Shirts
      We give away a free freshmeat t-shirt every week for the best comment added to an application announcement or story posted on freshmeat. -

      #freshmeat
      If you want to chat about what's new on freshmeat and hang out with other fm lounge lizards and the fm staff, head over to #freshmeat on irc.freshmeat.net, part of The Open Projects Network. - 

      -
      - -
      site notes
      -- We should get this out of the door now (Jan 29th)
      -- freshmeat Y2K report (Jan 01st)
      -- Assorted freshmeat notes (Aug 16th)

      -
      - -
      recent editorials
      -- Is Linux for Crazies? (Jan 29th)
      -- A New Business Plan for Free Software (Jan 22nd)
      -- Is Linux Going to Reunite the UNIX Market? (Jan 15th)

      -
      - -
      andover.net
      -
      Mirror Logo

      -- Animation Factory
      -- DaveCentral
      -- FreeCode
      -- Internet Traffic Report
      -- IT Manager's Journal
      -- MediaBuilder
      -- Slashdot
      -- Slaughterhouse
      -- TechMailings
      -- TechSightings
      -

      E-Commerce

      -- ThinkGeek (Stuff for smart masses)

      -
      - -
      supported sites
      -- Userfriendly.org
      -- SecurityFocus
      -- copyleft
      -- Filewatcher
      -- Linux.com
      -- LinuxTelephony
      -- LinuxToday
      -- Openprojects
      -- 32bitsonline
      -- The GNU Project

      -
      - -
      saturday
      -- We should get this out of the door now
      -- Is Linux for Crazies?
      -- RabbIT 2.0.2
      -- nmpg 1.1.3
      -- mod_dtcl 0.7.3
      -- CoreLinux++ 0.4.6
      -- scribe 0.2
      -- E theme updater 0.1
      -- Powertweak-Linux 0.1.7
      -- Pexeso Beta
      -- XZX 2.9.2
      -- DistroLib 0.4
      -- ToutDoux 1.1.7
      -- goMP 1.0.3
      -- APSEND 1.40
      -- ecasound 1.6.12r10
      -- SCEZ 20000129
      -- Comicq 0.2.0
      -- senv 0.2
      -- XZX 2.9.2
      -- log4j 0.7.5
      -- SQN Linux 1.6
      -- Limo 0.3.2
      -- Fusion GS 1.3
      -- MMR 1.5.4
      -- KUPS 0.3.4
      -- 3DSE patch for XMMS 4
      -- Linux 2.3.41
      -- Free Code for Linux S/390
      -- CircleMUD 3.0 beta patchlevel 17
      -- NiL Isn't Liero 000128
      -- OpenSSH Unix Port 1.2.2
      -- KBoxes! 1.3
      -- phpLanParty 0.23
      -- DGen/SDL 1.20
      -- EdcomLib 1.0 alpha 5
      -- Etherboot 4.4.2
      -- BLADE 0.18.0
      -- Sapphire 0.13.7
      -- ippl 1.99.3
      -- Saint 1.5patch1
      -- Zircon 1.18.232
      -- nmap 2.3BETA14
      -- xterm patch #124
      -- MyThreads-Links v0.5.2
      -- sudo 1.6.2p1
      -- MIT Photonic-Bands 0.10
      -- Launcher 0.86
      -- nano 0.8.1
      -- Gtk-- 1.1.8
      -- tkchooser 0.65
      -- XShipWars 1.33a
      -- Lamerpad 0.1

      -
      - -
      friday
      -- fsv 0.9
      -- popsneaker 0.1.1
      -- eyep-updater.sh 1.0
      -- W3Mail 0.5.0
      -- The Urgent Decision 0.9.9
      -- LTSP 1.02
      -- Production BASIC 0.2.12
      -- Postfix 19991231-pl03
      -- Mp3 Commander 0.7
      -- iManager 1.0.1b
      -- Eterm 0.9
      -- dqd_dirindex 1.0
      -- Tidings 1.0.4
      -- localscan 2.1
      -- WMKeyboard 0.3
      -- fcmp 1.0.2
      -- Akkord 0.3.1
      -- HiM 0.1.1
      -- cdrecord 1.8
      -- eMixer 0.05.5
      -- FreeVSD 1.4.0
      -- Common C++ Libraries 0.0
      -- Moonshine 1.0beta2
      -- swim 0.3.5
      -- Xmame/xmess 0.36b15.1
      -- pcmcia-cs 3.1.9
      -- gPS 0.5.2
      -- Snort 1.5.1
      -- Pygmy Linux 0.7 beta
      -- Intro to Bash Programming HOWTO 0.3
      -- GNU Pth 1.3b2
      -- Laonux 0.1
      -- x-wvdial 0.12
      -- Intro to Bash Programming HOWTO 0.3
      -- Catalog 1.02
      -- harvest 1.5.20-kj-0.9
      -- wmseti 0.3.0a
      -- RIG 1.02
      -- FreeAddr 0.2
      -- GtkAda 1.2.5
      -- dot.conf 0.6.0
      -- dep.pl 1.28.0
      -- Prae's Scripts 1.1
      -- Project Clock 0.1
      -- Xtheater 0.2.1
      -- i-no Chart 0.1
      -- spliff 0.8.1
      -- Regexx 0.95
      -- RBook 0.5.0
      -- RIG 1.01
      -- wchat 1.2.0
      -- PCCS MySQLDatabase Admin Tool 1.2.2

      -
      - -
      thursday
      -- CADUBI 1.1b1
      -- Angus' Chess Clock 0.8.1
      -- MP3 Report Generator 1.0.0
      -- 4DOM 0.9.2
      -- 4XSLT 0.8.2
      -- OpenNaken 1.10
      -- iManager 1.0b
      -- QuakeForge 0.1.0
      -- pylice 0.7.0
      -- Solfege 0.6.0
      -- xinetd 2.1.8.7p1
      -- jac 0.13
      -- Xmms 1.0.0
      -- KSrnd 0.97
      -- getpg / UW-IMAP 0.54
      -- getpg 0.53
      -- setserial 2.17
      -- Pan 0.7.3
      -- jwhois 2.4.1
      -- Kmp3 1.0
      -- xPine 0.0.12
      -- Avenger's News System 2.1 Alpha
      -- RIG 1.0
      -- scroller 1.0
      -- Perl EyeP Client 0.1
      -- sfront 0.54
      -- XFrisk 1.2
      -- Moffy 0.0.1
      -- Solid POP3 0.14
      -- php3guest 1.5
      -- crUD 01.27.2000
      -- crUD 01.27.2000
      -- Free Pascal Compiler 0.99.14
      -- gtk-font-hack 0.2-gtk-1.2.6
      -- Linux 2.2.15pre5
      -- krunseti 0.2.1
      -- CompuPic 5.0.1036
      -- gfontview 0.3.3
      -- authlocal 1.0.2
      -- bigwig 1.1
      -- CAFire 0.0.11
      -- ANVLOGIN 2.0
      -- sawmill.el 1.9
      -- Perlsh 20000127
      -- sitescooper 2.1.2
      -- MHDns 1.4
      -- JChemPaint 0.5
      -- Filesystems HOWTO 0.7.3
      -- KSnes9x 1.2
      -- Mozilla M13
      -- edna 0.3
      -- GMasqdialer 0.99.8
      -- spliff 0.8
      -- MultiSeti 0.3
      -- rude 0.50
      -- cgi-util++ 0.0
      -- Cricket 0.72
      -- nuni 0.04
      -- Ksetiwatch 0.3.0
      -- SiteMgrYAP 0.1.2
      -- phpLanParty 0.21
      -- Glitter Newsreader 0.1
      -- Fastresolve 2.4
      -- ColdSync 1.1.2
      -- DDD 3.2
      -- X Northern Captain 4.2.1
      -- abcde 1.0.2
      -- Gnapster 1.3.2
      -- xmix 1.0 Alpha
      -- gtktetcolor 0.3
      -- muttzilla 0.40
      -- muttzilla 0.40
      -- asp2php 0.73.6
      -- mod_ticket 1.0
      -- MegaHAL for Eggdrop .01
      -- Jetty 2.3.5
      -- xlpotdb 1.0
      -- Koala Complete MUD Server 0.1.1a
      -- mcountd 0.4
      -- cdbackup 0.5.0
      -- The Java SSH/Telnet Application/Applet 2.0 RC1

      -
      - -
      slashdot
      -- Petition Apple for Linux QuickTime
      -- GNUstep 0.6.5 freeze
      -- YETI@Home
      -- Documents Unsealed in Microsoft/Caldera Case
      -- Who Bought Linux.Net?
      -- E-Mails from (Over?) The Edge
      -- Linux Kernel 2.3.41
      -- Congress Still Figuring Out E-Mail
      -- Sci Fi Literature 101?
      -- Could Distributed.Net Help the Mars Polar Lander?

      -
      - -
      securityfocus
      -- Win2000 security hole a 'major threat'
      -- Visa acknowledges cracker break-ins
      -- What's Wrong With Microsoft Security?
      -- Microsoft posts first Win2K security patch
      -- Libnids 1.12
      -- New hack attack is greater threat than imagined
      -- Student charged with hacking
      -- Building and Managing Virtual Private Networks (book)
      -- Threats, Vulnerabilities and Real-Worl Responses: The Foundations of the TruSecure Process
      -- The Hundredth Window : Protecting Your Privacy and Security in the Age of the Internet (boo

      -
      - -
      bebits
      -- Pe 3.0a3
      -- Rarscript 1.5
      -- CD Manager 0.66a beta
      -- TraX 1.1
      -- BeMath 1.2.2
      -- simple blackjack 1
      -- HtmlTree 0.5.3
      -- Yacp 0.1
      -- TicTacToe 1.5
      -- Pe 3.0a2

      -
      - -
      linuxtoday
      -- Linux Journal: KDE--The Next Generation
      -- Kernel Cousin gimp-devel #11 Is Out
      -- Infoworld: Corel Linux OS ideal for the desktop
      -- Technology Evaluation: IBM Jumps on the Linux Bandwagon with Both Feet, Sort Of
      -- Tobias Hövekamp: European Union acknowledges
      -- &
      -- #34;Open Source Software
      -- &
      -- #34;

      -
      - -
      linuxtelephony
      -- Traverse Technologies releases NETspider-U in US
      -- Quicknet releases new GPL'd Linux Drivers!
      -- Natural Microsystems Delivers Carrier-Class Linux
      -- Quicknet is hiring programmers of all kinds!
      -- Babylon MLPPP Software Released under GPL
      -- Linux Telephony Server Project?
      -- Vovida Networks to Hire Telephony Software Engineers
      -- SPIRO-Linux Introduces Web-Enabled Phone Administration
      -- LinuxTelephony sponsors area at LinuxFest 2000
      -- GSM-Mobile Switching Center (MSC) with Linux-PC

      -
      - -
      32bitsonline
      -- Game: Homeworld
      -- DVD Lawsuit Spreads Its Own 'Trade Secrets'
      -- Register.com Adds 'One-step' Domain Registration
      -- WebEvent: Keeping you organized
      -- Y2K Officers Defend $100 Bil Investment
      -- DON'T BE FOOLED
      -- Microsoft Scorns Think-Tank's Breakup Idea
      -- Yahoo Accused Of Stalking Internet Users
      -- eToys.com Settles Spat With Swiss Artist Group
      -- [more articles/news]

      -

      -

      - -
      -
      - - -
      copyright © 1997-2000 Andover.Net - -icons courtesy of tigert@gimp.org - -code revision 20000101 - -our privacy policy
      - - - - diff --git a/ext/tk/sample/tkextlib/tkHTML/ss.rb b/ext/tk/sample/tkextlib/tkHTML/ss.rb deleted file mode 100644 index 6531fef0e1..0000000000 --- a/ext/tk/sample/tkextlib/tkHTML/ss.rb +++ /dev/null @@ -1,437 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: false -# -# This script implements the "ss" application. "ss" implements -# a presentation slide-show based on HTML slides. -# -require 'tk' -require 'tkextlib/tkHTML' - -file = ARGV[0] - -class TkHTML_File_Viewer - include TkComm - -# These are images to use with the actual image specified in a -# "" markup can't be found. -# -@@biggray = TkPhotoImage.new(:data=><<'EOD') - R0lGODdhPAA+APAAALi4uAAAACwAAAAAPAA+AAACQISPqcvtD6OctNqLs968+w+G4kiW5omm - 6sq27gvH8kzX9o3n+s73/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNFgsAO/// -EOD - -@@smgray = TkPhotoImage.new(:data=><<'EOD') - R0lGODdhOAAYAPAAALi4uAAAACwAAAAAOAAYAAACI4SPqcvtD6OctNqLs968+w+G4kiW5omm - 6sq27gvH8kzX9m0VADv/ -EOD - - def initialize(file = nil) - @root = TkRoot.new(:title=>'HTML File Viewer', :iconname=>'HV') - @fswin = nil - - @html = nil - @html_fs = nil - - @hotkey = {} - - @applet_arg = TkVarAccess.new_hash('AppletArg') - - @images = {} - @old_imgs = {} - @big_imgs = {} - - @last_dir = Dir.pwd - - @last_file = '' - - @key_block = false - - Tk::HTML_Widget::ClippingWindow.bind('1', - proc{|w, ksym| key_press(w, ksym)}, - '%W Down') - Tk::HTML_Widget::ClippingWindow.bind('3', - proc{|w, ksym| key_press(w, ksym)}, - '%W Up') - Tk::HTML_Widget::ClippingWindow.bind('2', - proc{|w, ksym| key_press(w, ksym)}, - '%W Down') - - Tk::HTML_Widget::ClippingWindow.bind('KeyPress', - proc{|w, ksym| key_press(w, ksym)}, - '%W %K') - - ############################################ - # - # Build the half-size view of the page - # - menu_spec = [ - [['File', 0], - ['Open', proc{sel_load()}, 0], - ['Full Screen', proc{fullscreen()}, 0], - ['Refresh', proc{refresh()}, 0], - '---', - ['Exit', proc{exit}, 1]] - ] - - mbar = @root.add_menubar(menu_spec) - - @html = Tk::HTML_Widget.new(:width=>512, :height=>384, - :padx=>5, :pady=>9, - :formcommand=>proc{|*args| form_cmd(*args)}, - :imagecommand=>proc{|*args| - image_cmd(1, *args) - }, - :scriptcommand=>proc{|*args| - script_cmd(*args) - }, - :appletcommand=>proc{|*args| - applet_cmd(*args) - }, - :hyperlinkcommand=>proc{|*args| - hyper_cmd(*args) - }, - :fontcommand=>proc{|*args| - pick_font(*args) - }, - :appletcommand=>proc{|*args| - run_applet('small', *args) - }, - :bg=>'white', :tablerelief=>:raised) - - @html.token_handler('meta', proc{|*args| meta(@html, *args)}) - - vscr = @html.yscrollbar(TkScrollbar.new) - hscr = @html.xscrollbar(TkScrollbar.new) - - Tk.grid(@html, vscr, :sticky=>:news) - Tk.grid(hscr, :sticky=>:ew) - @root.grid_columnconfigure(0, :weight=>1) - @root.grid_columnconfigure(1, :weight=>0) - @root.grid_rowconfigure(0, :weight=>1) - @root.grid_rowconfigure(1, :weight=>0) - - ############################################ - - @html.clipwin.focus - - # If an argument was specified, read it into the HTML widget. - # - Tk.update - if file && file != "" - load_file(file) - end - end - - # - # A font chooser routine. - # - # html[:fontcommand] = pick_font - def pick_font(size, attrs) - # puts "FontCmd: #{size} #{attrs}" - [ ((attrs =~ /fixed/)? 'courier': 'charter'), - (12 * (1.2**(size.to_f - 4.0))).to_i, - ((attrs =~ /italic/)? 'italic': 'roman'), - ((attrs =~ /bold/)? 'bold': 'normal') ].join(' ') - end - - # This routine is called to pick fonts for the fullscreen view. - # - def pick_font_fs(size, attrs) - baseFontSize = 24 - - # puts "FontCmd: #{size} #{attrs}" - [ ((attrs =~ /fixed/)? 'courier': 'charter'), - (baseFontSize * (1.2**(size.to_f - 4.0))).to_i, - ((attrs =~ /italic/)? 'italic': 'roman'), - ((attrs =~ /bold/)? 'bold': 'normal') ].join(' ') - end - - # - # - def hyper_cmd(*args) - puts "HyperlinkCommand: #{args.inspect}" - end - - # This routine is called to run an applet - # - def run_applet(size, w, arglist) - applet_arg.value = Hash[*simplelist(arglist)] - - return unless @applet_arg.key?('src') - - src = @html.remove(@applet_arg['src']) - - @applet_arg['window'] = w - @applet_arg['fontsize'] = size - - begin - Tk.load_tclscript(src) - rescue => e - puts "Applet error: #{e.message}" - end - end - - # - # - def form_cmd(n, cmd, *args) - # p [n, cmd, *args] - end - - # - # - def move_big_image(b) - return unless @big_imgs.key?(b) - b.copy(@big_imgs[b]) - @big_imgs[b].delete - @big_imgs.delete(b) - end - - def image_cmd(hs, *args) - fn = args[0] - - if @old_imgs.key?(fn) - return (@images[fn] = @old_imgs.delete(fn)) - end - - begin - img = TkPhotoImage.new(:file=>fn) - rescue - return ((hs)? @@smallgray: @@biggray) - end - - if hs - img2 = TkPhotoImage.new - img2.copy(img, :subsample=>[2,2]) - img.delete - img = img2 - end - - if img.width * img.height > 20000 - b = TkPhotoImage.new(:width=>img.width, :height=>img.height) - @big_imgs[b] = img - img = b - Tk.after_idle(proc{ move_big_image(b) }) - end - - @images[fn] = img - - img - end - - # - # This routine is called for every